construct-hub-webapp 0.1.622 → 0.1.625

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"static/js/270.e8136074.chunk.js","mappings":"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","sources":["../node_modules/react-helmet/es/Helmet.js","../node_modules/react-side-effect/lib/index.js"],"sourcesContent":["import PropTypes from 'prop-types';\nimport withSideEffect from 'react-side-effect';\nimport isEqual from 'react-fast-compare';\nimport React from 'react';\nimport objectAssign from 'object-assign';\n\nvar ATTRIBUTE_NAMES = {\n BODY: \"bodyAttributes\",\n HTML: \"htmlAttributes\",\n TITLE: \"titleAttributes\"\n};\n\nvar TAG_NAMES = {\n BASE: \"base\",\n BODY: \"body\",\n HEAD: \"head\",\n HTML: \"html\",\n LINK: \"link\",\n META: \"meta\",\n NOSCRIPT: \"noscript\",\n SCRIPT: \"script\",\n STYLE: \"style\",\n TITLE: \"title\"\n};\n\nvar VALID_TAG_NAMES = Object.keys(TAG_NAMES).map(function (name) {\n return TAG_NAMES[name];\n});\n\nvar TAG_PROPERTIES = {\n CHARSET: \"charset\",\n CSS_TEXT: \"cssText\",\n HREF: \"href\",\n HTTPEQUIV: \"http-equiv\",\n INNER_HTML: \"innerHTML\",\n ITEM_PROP: \"itemprop\",\n NAME: \"name\",\n PROPERTY: \"property\",\n REL: \"rel\",\n SRC: \"src\",\n TARGET: \"target\"\n};\n\nvar REACT_TAG_MAP = {\n accesskey: \"accessKey\",\n charset: \"charSet\",\n class: \"className\",\n contenteditable: \"contentEditable\",\n contextmenu: \"contextMenu\",\n \"http-equiv\": \"httpEquiv\",\n itemprop: \"itemProp\",\n tabindex: \"tabIndex\"\n};\n\nvar HELMET_PROPS = {\n DEFAULT_TITLE: \"defaultTitle\",\n DEFER: \"defer\",\n ENCODE_SPECIAL_CHARACTERS: \"encodeSpecialCharacters\",\n ON_CHANGE_CLIENT_STATE: \"onChangeClientState\",\n TITLE_TEMPLATE: \"titleTemplate\"\n};\n\nvar HTML_TAG_MAP = Object.keys(REACT_TAG_MAP).reduce(function (obj, key) {\n obj[REACT_TAG_MAP[key]] = key;\n return obj;\n}, {});\n\nvar SELF_CLOSING_TAGS = [TAG_NAMES.NOSCRIPT, TAG_NAMES.SCRIPT, TAG_NAMES.STYLE];\n\nvar HELMET_ATTRIBUTE = \"data-react-helmet\";\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar inherits = function (subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\nvar objectWithoutProperties = function (obj, keys) {\n var target = {};\n\n for (var i in obj) {\n if (keys.indexOf(i) >= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n\n return target;\n};\n\nvar possibleConstructorReturn = function (self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\nvar encodeSpecialCharacters = function encodeSpecialCharacters(str) {\n var encode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n if (encode === false) {\n return String(str);\n }\n\n return String(str).replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\").replace(/'/g, \"&#x27;\");\n};\n\nvar getTitleFromPropsList = function getTitleFromPropsList(propsList) {\n var innermostTitle = getInnermostProperty(propsList, TAG_NAMES.TITLE);\n var innermostTemplate = getInnermostProperty(propsList, HELMET_PROPS.TITLE_TEMPLATE);\n\n if (innermostTemplate && innermostTitle) {\n // use function arg to avoid need to escape $ characters\n return innermostTemplate.replace(/%s/g, function () {\n return Array.isArray(innermostTitle) ? innermostTitle.join(\"\") : innermostTitle;\n });\n }\n\n var innermostDefaultTitle = getInnermostProperty(propsList, HELMET_PROPS.DEFAULT_TITLE);\n\n return innermostTitle || innermostDefaultTitle || undefined;\n};\n\nvar getOnChangeClientState = function getOnChangeClientState(propsList) {\n return getInnermostProperty(propsList, HELMET_PROPS.ON_CHANGE_CLIENT_STATE) || function () {};\n};\n\nvar getAttributesFromPropsList = function getAttributesFromPropsList(tagType, propsList) {\n return propsList.filter(function (props) {\n return typeof props[tagType] !== \"undefined\";\n }).map(function (props) {\n return props[tagType];\n }).reduce(function (tagAttrs, current) {\n return _extends({}, tagAttrs, current);\n }, {});\n};\n\nvar getBaseTagFromPropsList = function getBaseTagFromPropsList(primaryAttributes, propsList) {\n return propsList.filter(function (props) {\n return typeof props[TAG_NAMES.BASE] !== \"undefined\";\n }).map(function (props) {\n return props[TAG_NAMES.BASE];\n }).reverse().reduce(function (innermostBaseTag, tag) {\n if (!innermostBaseTag.length) {\n var keys = Object.keys(tag);\n\n for (var i = 0; i < keys.length; i++) {\n var attributeKey = keys[i];\n var lowerCaseAttributeKey = attributeKey.toLowerCase();\n\n if (primaryAttributes.indexOf(lowerCaseAttributeKey) !== -1 && tag[lowerCaseAttributeKey]) {\n return innermostBaseTag.concat(tag);\n }\n }\n }\n\n return innermostBaseTag;\n }, []);\n};\n\nvar getTagsFromPropsList = function getTagsFromPropsList(tagName, primaryAttributes, propsList) {\n // Calculate list of tags, giving priority innermost component (end of the propslist)\n var approvedSeenTags = {};\n\n return propsList.filter(function (props) {\n if (Array.isArray(props[tagName])) {\n return true;\n }\n if (typeof props[tagName] !== \"undefined\") {\n warn(\"Helmet: \" + tagName + \" should be of type \\\"Array\\\". Instead found type \\\"\" + _typeof(props[tagName]) + \"\\\"\");\n }\n return false;\n }).map(function (props) {\n return props[tagName];\n }).reverse().reduce(function (approvedTags, instanceTags) {\n var instanceSeenTags = {};\n\n instanceTags.filter(function (tag) {\n var primaryAttributeKey = void 0;\n var keys = Object.keys(tag);\n for (var i = 0; i < keys.length; i++) {\n var attributeKey = keys[i];\n var lowerCaseAttributeKey = attributeKey.toLowerCase();\n\n // Special rule with link tags, since rel and href are both primary tags, rel takes priority\n if (primaryAttributes.indexOf(lowerCaseAttributeKey) !== -1 && !(primaryAttributeKey === TAG_PROPERTIES.REL && tag[primaryAttributeKey].toLowerCase() === \"canonical\") && !(lowerCaseAttributeKey === TAG_PROPERTIES.REL && tag[lowerCaseAttributeKey].toLowerCase() === \"stylesheet\")) {\n primaryAttributeKey = lowerCaseAttributeKey;\n }\n // Special case for innerHTML which doesn't work lowercased\n if (primaryAttributes.indexOf(attributeKey) !== -1 && (attributeKey === TAG_PROPERTIES.INNER_HTML || attributeKey === TAG_PROPERTIES.CSS_TEXT || attributeKey === TAG_PROPERTIES.ITEM_PROP)) {\n primaryAttributeKey = attributeKey;\n }\n }\n\n if (!primaryAttributeKey || !tag[primaryAttributeKey]) {\n return false;\n }\n\n var value = tag[primaryAttributeKey].toLowerCase();\n\n if (!approvedSeenTags[primaryAttributeKey]) {\n approvedSeenTags[primaryAttributeKey] = {};\n }\n\n if (!instanceSeenTags[primaryAttributeKey]) {\n instanceSeenTags[primaryAttributeKey] = {};\n }\n\n if (!approvedSeenTags[primaryAttributeKey][value]) {\n instanceSeenTags[primaryAttributeKey][value] = true;\n return true;\n }\n\n return false;\n }).reverse().forEach(function (tag) {\n return approvedTags.push(tag);\n });\n\n // Update seen tags with tags from this instance\n var keys = Object.keys(instanceSeenTags);\n for (var i = 0; i < keys.length; i++) {\n var attributeKey = keys[i];\n var tagUnion = objectAssign({}, approvedSeenTags[attributeKey], instanceSeenTags[attributeKey]);\n\n approvedSeenTags[attributeKey] = tagUnion;\n }\n\n return approvedTags;\n }, []).reverse();\n};\n\nvar getInnermostProperty = function getInnermostProperty(propsList, property) {\n for (var i = propsList.length - 1; i >= 0; i--) {\n var props = propsList[i];\n\n if (props.hasOwnProperty(property)) {\n return props[property];\n }\n }\n\n return null;\n};\n\nvar reducePropsToState = function reducePropsToState(propsList) {\n return {\n baseTag: getBaseTagFromPropsList([TAG_PROPERTIES.HREF, TAG_PROPERTIES.TARGET], propsList),\n bodyAttributes: getAttributesFromPropsList(ATTRIBUTE_NAMES.BODY, propsList),\n defer: getInnermostProperty(propsList, HELMET_PROPS.DEFER),\n encode: getInnermostProperty(propsList, HELMET_PROPS.ENCODE_SPECIAL_CHARACTERS),\n htmlAttributes: getAttributesFromPropsList(ATTRIBUTE_NAMES.HTML, propsList),\n linkTags: getTagsFromPropsList(TAG_NAMES.LINK, [TAG_PROPERTIES.REL, TAG_PROPERTIES.HREF], propsList),\n metaTags: getTagsFromPropsList(TAG_NAMES.META, [TAG_PROPERTIES.NAME, TAG_PROPERTIES.CHARSET, TAG_PROPERTIES.HTTPEQUIV, TAG_PROPERTIES.PROPERTY, TAG_PROPERTIES.ITEM_PROP], propsList),\n noscriptTags: getTagsFromPropsList(TAG_NAMES.NOSCRIPT, [TAG_PROPERTIES.INNER_HTML], propsList),\n onChangeClientState: getOnChangeClientState(propsList),\n scriptTags: getTagsFromPropsList(TAG_NAMES.SCRIPT, [TAG_PROPERTIES.SRC, TAG_PROPERTIES.INNER_HTML], propsList),\n styleTags: getTagsFromPropsList(TAG_NAMES.STYLE, [TAG_PROPERTIES.CSS_TEXT], propsList),\n title: getTitleFromPropsList(propsList),\n titleAttributes: getAttributesFromPropsList(ATTRIBUTE_NAMES.TITLE, propsList)\n };\n};\n\nvar rafPolyfill = function () {\n var clock = Date.now();\n\n return function (callback) {\n var currentTime = Date.now();\n\n if (currentTime - clock > 16) {\n clock = currentTime;\n callback(currentTime);\n } else {\n setTimeout(function () {\n rafPolyfill(callback);\n }, 0);\n }\n };\n}();\n\nvar cafPolyfill = function cafPolyfill(id) {\n return clearTimeout(id);\n};\n\nvar requestAnimationFrame = typeof window !== \"undefined\" ? window.requestAnimationFrame && window.requestAnimationFrame.bind(window) || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || rafPolyfill : global.requestAnimationFrame || rafPolyfill;\n\nvar cancelAnimationFrame = typeof window !== \"undefined\" ? window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || cafPolyfill : global.cancelAnimationFrame || cafPolyfill;\n\nvar warn = function warn(msg) {\n return console && typeof console.warn === \"function\" && console.warn(msg);\n};\n\nvar _helmetCallback = null;\n\nvar handleClientStateChange = function handleClientStateChange(newState) {\n if (_helmetCallback) {\n cancelAnimationFrame(_helmetCallback);\n }\n\n if (newState.defer) {\n _helmetCallback = requestAnimationFrame(function () {\n commitTagChanges(newState, function () {\n _helmetCallback = null;\n });\n });\n } else {\n commitTagChanges(newState);\n _helmetCallback = null;\n }\n};\n\nvar commitTagChanges = function commitTagChanges(newState, cb) {\n var baseTag = newState.baseTag,\n bodyAttributes = newState.bodyAttributes,\n htmlAttributes = newState.htmlAttributes,\n linkTags = newState.linkTags,\n metaTags = newState.metaTags,\n noscriptTags = newState.noscriptTags,\n onChangeClientState = newState.onChangeClientState,\n scriptTags = newState.scriptTags,\n styleTags = newState.styleTags,\n title = newState.title,\n titleAttributes = newState.titleAttributes;\n\n updateAttributes(TAG_NAMES.BODY, bodyAttributes);\n updateAttributes(TAG_NAMES.HTML, htmlAttributes);\n\n updateTitle(title, titleAttributes);\n\n var tagUpdates = {\n baseTag: updateTags(TAG_NAMES.BASE, baseTag),\n linkTags: updateTags(TAG_NAMES.LINK, linkTags),\n metaTags: updateTags(TAG_NAMES.META, metaTags),\n noscriptTags: updateTags(TAG_NAMES.NOSCRIPT, noscriptTags),\n scriptTags: updateTags(TAG_NAMES.SCRIPT, scriptTags),\n styleTags: updateTags(TAG_NAMES.STYLE, styleTags)\n };\n\n var addedTags = {};\n var removedTags = {};\n\n Object.keys(tagUpdates).forEach(function (tagType) {\n var _tagUpdates$tagType = tagUpdates[tagType],\n newTags = _tagUpdates$tagType.newTags,\n oldTags = _tagUpdates$tagType.oldTags;\n\n\n if (newTags.length) {\n addedTags[tagType] = newTags;\n }\n if (oldTags.length) {\n removedTags[tagType] = tagUpdates[tagType].oldTags;\n }\n });\n\n cb && cb();\n\n onChangeClientState(newState, addedTags, removedTags);\n};\n\nvar flattenArray = function flattenArray(possibleArray) {\n return Array.isArray(possibleArray) ? possibleArray.join(\"\") : possibleArray;\n};\n\nvar updateTitle = function updateTitle(title, attributes) {\n if (typeof title !== \"undefined\" && document.title !== title) {\n document.title = flattenArray(title);\n }\n\n updateAttributes(TAG_NAMES.TITLE, attributes);\n};\n\nvar updateAttributes = function updateAttributes(tagName, attributes) {\n var elementTag = document.getElementsByTagName(tagName)[0];\n\n if (!elementTag) {\n return;\n }\n\n var helmetAttributeString = elementTag.getAttribute(HELMET_ATTRIBUTE);\n var helmetAttributes = helmetAttributeString ? helmetAttributeString.split(\",\") : [];\n var attributesToRemove = [].concat(helmetAttributes);\n var attributeKeys = Object.keys(attributes);\n\n for (var i = 0; i < attributeKeys.length; i++) {\n var attribute = attributeKeys[i];\n var value = attributes[attribute] || \"\";\n\n if (elementTag.getAttribute(attribute) !== value) {\n elementTag.setAttribute(attribute, value);\n }\n\n if (helmetAttributes.indexOf(attribute) === -1) {\n helmetAttributes.push(attribute);\n }\n\n var indexToSave = attributesToRemove.indexOf(attribute);\n if (indexToSave !== -1) {\n attributesToRemove.splice(indexToSave, 1);\n }\n }\n\n for (var _i = attributesToRemove.length - 1; _i >= 0; _i--) {\n elementTag.removeAttribute(attributesToRemove[_i]);\n }\n\n if (helmetAttributes.length === attributesToRemove.length) {\n elementTag.removeAttribute(HELMET_ATTRIBUTE);\n } else if (elementTag.getAttribute(HELMET_ATTRIBUTE) !== attributeKeys.join(\",\")) {\n elementTag.setAttribute(HELMET_ATTRIBUTE, attributeKeys.join(\",\"));\n }\n};\n\nvar updateTags = function updateTags(type, tags) {\n var headElement = document.head || document.querySelector(TAG_NAMES.HEAD);\n var tagNodes = headElement.querySelectorAll(type + \"[\" + HELMET_ATTRIBUTE + \"]\");\n var oldTags = Array.prototype.slice.call(tagNodes);\n var newTags = [];\n var indexToDelete = void 0;\n\n if (tags && tags.length) {\n tags.forEach(function (tag) {\n var newElement = document.createElement(type);\n\n for (var attribute in tag) {\n if (tag.hasOwnProperty(attribute)) {\n if (attribute === TAG_PROPERTIES.INNER_HTML) {\n newElement.innerHTML = tag.innerHTML;\n } else if (attribute === TAG_PROPERTIES.CSS_TEXT) {\n if (newElement.styleSheet) {\n newElement.styleSheet.cssText = tag.cssText;\n } else {\n newElement.appendChild(document.createTextNode(tag.cssText));\n }\n } else {\n var value = typeof tag[attribute] === \"undefined\" ? \"\" : tag[attribute];\n newElement.setAttribute(attribute, value);\n }\n }\n }\n\n newElement.setAttribute(HELMET_ATTRIBUTE, \"true\");\n\n // Remove a duplicate tag from domTagstoRemove, so it isn't cleared.\n if (oldTags.some(function (existingTag, index) {\n indexToDelete = index;\n return newElement.isEqualNode(existingTag);\n })) {\n oldTags.splice(indexToDelete, 1);\n } else {\n newTags.push(newElement);\n }\n });\n }\n\n oldTags.forEach(function (tag) {\n return tag.parentNode.removeChild(tag);\n });\n newTags.forEach(function (tag) {\n return headElement.appendChild(tag);\n });\n\n return {\n oldTags: oldTags,\n newTags: newTags\n };\n};\n\nvar generateElementAttributesAsString = function generateElementAttributesAsString(attributes) {\n return Object.keys(attributes).reduce(function (str, key) {\n var attr = typeof attributes[key] !== \"undefined\" ? key + \"=\\\"\" + attributes[key] + \"\\\"\" : \"\" + key;\n return str ? str + \" \" + attr : attr;\n }, \"\");\n};\n\nvar generateTitleAsString = function generateTitleAsString(type, title, attributes, encode) {\n var attributeString = generateElementAttributesAsString(attributes);\n var flattenedTitle = flattenArray(title);\n return attributeString ? \"<\" + type + \" \" + HELMET_ATTRIBUTE + \"=\\\"true\\\" \" + attributeString + \">\" + encodeSpecialCharacters(flattenedTitle, encode) + \"</\" + type + \">\" : \"<\" + type + \" \" + HELMET_ATTRIBUTE + \"=\\\"true\\\">\" + encodeSpecialCharacters(flattenedTitle, encode) + \"</\" + type + \">\";\n};\n\nvar generateTagsAsString = function generateTagsAsString(type, tags, encode) {\n return tags.reduce(function (str, tag) {\n var attributeHtml = Object.keys(tag).filter(function (attribute) {\n return !(attribute === TAG_PROPERTIES.INNER_HTML || attribute === TAG_PROPERTIES.CSS_TEXT);\n }).reduce(function (string, attribute) {\n var attr = typeof tag[attribute] === \"undefined\" ? attribute : attribute + \"=\\\"\" + encodeSpecialCharacters(tag[attribute], encode) + \"\\\"\";\n return string ? string + \" \" + attr : attr;\n }, \"\");\n\n var tagContent = tag.innerHTML || tag.cssText || \"\";\n\n var isSelfClosing = SELF_CLOSING_TAGS.indexOf(type) === -1;\n\n return str + \"<\" + type + \" \" + HELMET_ATTRIBUTE + \"=\\\"true\\\" \" + attributeHtml + (isSelfClosing ? \"/>\" : \">\" + tagContent + \"</\" + type + \">\");\n }, \"\");\n};\n\nvar convertElementAttributestoReactProps = function convertElementAttributestoReactProps(attributes) {\n var initProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n return Object.keys(attributes).reduce(function (obj, key) {\n obj[REACT_TAG_MAP[key] || key] = attributes[key];\n return obj;\n }, initProps);\n};\n\nvar convertReactPropstoHtmlAttributes = function convertReactPropstoHtmlAttributes(props) {\n var initAttributes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n return Object.keys(props).reduce(function (obj, key) {\n obj[HTML_TAG_MAP[key] || key] = props[key];\n return obj;\n }, initAttributes);\n};\n\nvar generateTitleAsReactComponent = function generateTitleAsReactComponent(type, title, attributes) {\n var _initProps;\n\n // assigning into an array to define toString function on it\n var initProps = (_initProps = {\n key: title\n }, _initProps[HELMET_ATTRIBUTE] = true, _initProps);\n var props = convertElementAttributestoReactProps(attributes, initProps);\n\n return [React.createElement(TAG_NAMES.TITLE, props, title)];\n};\n\nvar generateTagsAsReactComponent = function generateTagsAsReactComponent(type, tags) {\n return tags.map(function (tag, i) {\n var _mappedTag;\n\n var mappedTag = (_mappedTag = {\n key: i\n }, _mappedTag[HELMET_ATTRIBUTE] = true, _mappedTag);\n\n Object.keys(tag).forEach(function (attribute) {\n var mappedAttribute = REACT_TAG_MAP[attribute] || attribute;\n\n if (mappedAttribute === TAG_PROPERTIES.INNER_HTML || mappedAttribute === TAG_PROPERTIES.CSS_TEXT) {\n var content = tag.innerHTML || tag.cssText;\n mappedTag.dangerouslySetInnerHTML = { __html: content };\n } else {\n mappedTag[mappedAttribute] = tag[attribute];\n }\n });\n\n return React.createElement(type, mappedTag);\n });\n};\n\nvar getMethodsForTag = function getMethodsForTag(type, tags, encode) {\n switch (type) {\n case TAG_NAMES.TITLE:\n return {\n toComponent: function toComponent() {\n return generateTitleAsReactComponent(type, tags.title, tags.titleAttributes, encode);\n },\n toString: function toString() {\n return generateTitleAsString(type, tags.title, tags.titleAttributes, encode);\n }\n };\n case ATTRIBUTE_NAMES.BODY:\n case ATTRIBUTE_NAMES.HTML:\n return {\n toComponent: function toComponent() {\n return convertElementAttributestoReactProps(tags);\n },\n toString: function toString() {\n return generateElementAttributesAsString(tags);\n }\n };\n default:\n return {\n toComponent: function toComponent() {\n return generateTagsAsReactComponent(type, tags);\n },\n toString: function toString() {\n return generateTagsAsString(type, tags, encode);\n }\n };\n }\n};\n\nvar mapStateOnServer = function mapStateOnServer(_ref) {\n var baseTag = _ref.baseTag,\n bodyAttributes = _ref.bodyAttributes,\n encode = _ref.encode,\n htmlAttributes = _ref.htmlAttributes,\n linkTags = _ref.linkTags,\n metaTags = _ref.metaTags,\n noscriptTags = _ref.noscriptTags,\n scriptTags = _ref.scriptTags,\n styleTags = _ref.styleTags,\n _ref$title = _ref.title,\n title = _ref$title === undefined ? \"\" : _ref$title,\n titleAttributes = _ref.titleAttributes;\n return {\n base: getMethodsForTag(TAG_NAMES.BASE, baseTag, encode),\n bodyAttributes: getMethodsForTag(ATTRIBUTE_NAMES.BODY, bodyAttributes, encode),\n htmlAttributes: getMethodsForTag(ATTRIBUTE_NAMES.HTML, htmlAttributes, encode),\n link: getMethodsForTag(TAG_NAMES.LINK, linkTags, encode),\n meta: getMethodsForTag(TAG_NAMES.META, metaTags, encode),\n noscript: getMethodsForTag(TAG_NAMES.NOSCRIPT, noscriptTags, encode),\n script: getMethodsForTag(TAG_NAMES.SCRIPT, scriptTags, encode),\n style: getMethodsForTag(TAG_NAMES.STYLE, styleTags, encode),\n title: getMethodsForTag(TAG_NAMES.TITLE, { title: title, titleAttributes: titleAttributes }, encode)\n };\n};\n\nvar Helmet = function Helmet(Component) {\n var _class, _temp;\n\n return _temp = _class = function (_React$Component) {\n inherits(HelmetWrapper, _React$Component);\n\n function HelmetWrapper() {\n classCallCheck(this, HelmetWrapper);\n return possibleConstructorReturn(this, _React$Component.apply(this, arguments));\n }\n\n HelmetWrapper.prototype.shouldComponentUpdate = function shouldComponentUpdate(nextProps) {\n return !isEqual(this.props, nextProps);\n };\n\n HelmetWrapper.prototype.mapNestedChildrenToProps = function mapNestedChildrenToProps(child, nestedChildren) {\n if (!nestedChildren) {\n return null;\n }\n\n switch (child.type) {\n case TAG_NAMES.SCRIPT:\n case TAG_NAMES.NOSCRIPT:\n return {\n innerHTML: nestedChildren\n };\n\n case TAG_NAMES.STYLE:\n return {\n cssText: nestedChildren\n };\n }\n\n throw new Error(\"<\" + child.type + \" /> elements are self-closing and can not contain children. Refer to our API for more information.\");\n };\n\n HelmetWrapper.prototype.flattenArrayTypeChildren = function flattenArrayTypeChildren(_ref) {\n var _babelHelpers$extends;\n\n var child = _ref.child,\n arrayTypeChildren = _ref.arrayTypeChildren,\n newChildProps = _ref.newChildProps,\n nestedChildren = _ref.nestedChildren;\n\n return _extends({}, arrayTypeChildren, (_babelHelpers$extends = {}, _babelHelpers$extends[child.type] = [].concat(arrayTypeChildren[child.type] || [], [_extends({}, newChildProps, this.mapNestedChildrenToProps(child, nestedChildren))]), _babelHelpers$extends));\n };\n\n HelmetWrapper.prototype.mapObjectTypeChildren = function mapObjectTypeChildren(_ref2) {\n var _babelHelpers$extends2, _babelHelpers$extends3;\n\n var child = _ref2.child,\n newProps = _ref2.newProps,\n newChildProps = _ref2.newChildProps,\n nestedChildren = _ref2.nestedChildren;\n\n switch (child.type) {\n case TAG_NAMES.TITLE:\n return _extends({}, newProps, (_babelHelpers$extends2 = {}, _babelHelpers$extends2[child.type] = nestedChildren, _babelHelpers$extends2.titleAttributes = _extends({}, newChildProps), _babelHelpers$extends2));\n\n case TAG_NAMES.BODY:\n return _extends({}, newProps, {\n bodyAttributes: _extends({}, newChildProps)\n });\n\n case TAG_NAMES.HTML:\n return _extends({}, newProps, {\n htmlAttributes: _extends({}, newChildProps)\n });\n }\n\n return _extends({}, newProps, (_babelHelpers$extends3 = {}, _babelHelpers$extends3[child.type] = _extends({}, newChildProps), _babelHelpers$extends3));\n };\n\n HelmetWrapper.prototype.mapArrayTypeChildrenToProps = function mapArrayTypeChildrenToProps(arrayTypeChildren, newProps) {\n var newFlattenedProps = _extends({}, newProps);\n\n Object.keys(arrayTypeChildren).forEach(function (arrayChildName) {\n var _babelHelpers$extends4;\n\n newFlattenedProps = _extends({}, newFlattenedProps, (_babelHelpers$extends4 = {}, _babelHelpers$extends4[arrayChildName] = arrayTypeChildren[arrayChildName], _babelHelpers$extends4));\n });\n\n return newFlattenedProps;\n };\n\n HelmetWrapper.prototype.warnOnInvalidChildren = function warnOnInvalidChildren(child, nestedChildren) {\n if (process.env.NODE_ENV !== \"production\") {\n if (!VALID_TAG_NAMES.some(function (name) {\n return child.type === name;\n })) {\n if (typeof child.type === \"function\") {\n return warn(\"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.\");\n }\n\n return warn(\"Only elements types \" + VALID_TAG_NAMES.join(\", \") + \" are allowed. Helmet does not support rendering <\" + child.type + \"> elements. Refer to our API for more information.\");\n }\n\n if (nestedChildren && typeof nestedChildren !== \"string\" && (!Array.isArray(nestedChildren) || nestedChildren.some(function (nestedChild) {\n return typeof nestedChild !== \"string\";\n }))) {\n throw new Error(\"Helmet expects a string as a child of <\" + child.type + \">. Did you forget to wrap your children in braces? ( <\" + child.type + \">{``}</\" + child.type + \"> ) Refer to our API for more information.\");\n }\n }\n\n return true;\n };\n\n HelmetWrapper.prototype.mapChildrenToProps = function mapChildrenToProps(children, newProps) {\n var _this2 = this;\n\n var arrayTypeChildren = {};\n\n React.Children.forEach(children, function (child) {\n if (!child || !child.props) {\n return;\n }\n\n var _child$props = child.props,\n nestedChildren = _child$props.children,\n childProps = objectWithoutProperties(_child$props, [\"children\"]);\n\n var newChildProps = convertReactPropstoHtmlAttributes(childProps);\n\n _this2.warnOnInvalidChildren(child, nestedChildren);\n\n switch (child.type) {\n case TAG_NAMES.LINK:\n case TAG_NAMES.META:\n case TAG_NAMES.NOSCRIPT:\n case TAG_NAMES.SCRIPT:\n case TAG_NAMES.STYLE:\n arrayTypeChildren = _this2.flattenArrayTypeChildren({\n child: child,\n arrayTypeChildren: arrayTypeChildren,\n newChildProps: newChildProps,\n nestedChildren: nestedChildren\n });\n break;\n\n default:\n newProps = _this2.mapObjectTypeChildren({\n child: child,\n newProps: newProps,\n newChildProps: newChildProps,\n nestedChildren: nestedChildren\n });\n break;\n }\n });\n\n newProps = this.mapArrayTypeChildrenToProps(arrayTypeChildren, newProps);\n return newProps;\n };\n\n HelmetWrapper.prototype.render = function render() {\n var _props = this.props,\n children = _props.children,\n props = objectWithoutProperties(_props, [\"children\"]);\n\n var newProps = _extends({}, props);\n\n if (children) {\n newProps = this.mapChildrenToProps(children, newProps);\n }\n\n return React.createElement(Component, newProps);\n };\n\n createClass(HelmetWrapper, null, [{\n key: \"canUseDOM\",\n\n\n // Component.peek comes from react-side-effect:\n // For testing, you may use a static peek() method available on the returned component.\n // It lets you get the current state without resetting the mounted instance stack.\n // Don’t use it for anything other than testing.\n\n /**\n * @param {Object} base: {\"target\": \"_blank\", \"href\": \"http://mysite.com/\"}\n * @param {Object} bodyAttributes: {\"className\": \"root\"}\n * @param {String} defaultTitle: \"Default Title\"\n * @param {Boolean} defer: true\n * @param {Boolean} encodeSpecialCharacters: true\n * @param {Object} htmlAttributes: {\"lang\": \"en\", \"amp\": undefined}\n * @param {Array} link: [{\"rel\": \"canonical\", \"href\": \"http://mysite.com/example\"}]\n * @param {Array} meta: [{\"name\": \"description\", \"content\": \"Test description\"}]\n * @param {Array} noscript: [{\"innerHTML\": \"<img src='http://mysite.com/js/test.js'\"}]\n * @param {Function} onChangeClientState: \"(newState) => console.log(newState)\"\n * @param {Array} script: [{\"type\": \"text/javascript\", \"src\": \"http://mysite.com/js/test.js\"}]\n * @param {Array} style: [{\"type\": \"text/css\", \"cssText\": \"div { display: block; color: blue; }\"}]\n * @param {String} title: \"Title\"\n * @param {Object} titleAttributes: {\"itemprop\": \"name\"}\n * @param {String} titleTemplate: \"MySite.com - %s\"\n */\n set: function set$$1(canUseDOM) {\n Component.canUseDOM = canUseDOM;\n }\n }]);\n return HelmetWrapper;\n }(React.Component), _class.propTypes = {\n base: PropTypes.object,\n bodyAttributes: PropTypes.object,\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]),\n defaultTitle: PropTypes.string,\n defer: PropTypes.bool,\n encodeSpecialCharacters: PropTypes.bool,\n htmlAttributes: PropTypes.object,\n link: PropTypes.arrayOf(PropTypes.object),\n meta: PropTypes.arrayOf(PropTypes.object),\n noscript: PropTypes.arrayOf(PropTypes.object),\n onChangeClientState: PropTypes.func,\n script: PropTypes.arrayOf(PropTypes.object),\n style: PropTypes.arrayOf(PropTypes.object),\n title: PropTypes.string,\n titleAttributes: PropTypes.object,\n titleTemplate: PropTypes.string\n }, _class.defaultProps = {\n defer: true,\n encodeSpecialCharacters: true\n }, _class.peek = Component.peek, _class.rewind = function () {\n var mappedState = Component.rewind();\n if (!mappedState) {\n // provide fallback if mappedState is undefined\n mappedState = mapStateOnServer({\n baseTag: [],\n bodyAttributes: {},\n encodeSpecialCharacters: true,\n htmlAttributes: {},\n linkTags: [],\n metaTags: [],\n noscriptTags: [],\n scriptTags: [],\n styleTags: [],\n title: \"\",\n titleAttributes: {}\n });\n }\n\n return mappedState;\n }, _temp;\n};\n\nvar NullComponent = function NullComponent() {\n return null;\n};\n\nvar HelmetSideEffects = withSideEffect(reducePropsToState, handleClientStateChange, mapStateOnServer)(NullComponent);\n\nvar HelmetExport = Helmet(HelmetSideEffects);\nHelmetExport.renderStatic = HelmetExport.rewind;\n\nexport default HelmetExport;\nexport { HelmetExport as Helmet };\n","'use strict';\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar React = require('react');\nvar React__default = _interopDefault(React);\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nfunction withSideEffect(reducePropsToState, handleStateChangeOnClient, mapStateOnServer) {\n if (typeof reducePropsToState !== 'function') {\n throw new Error('Expected reducePropsToState to be a function.');\n }\n\n if (typeof handleStateChangeOnClient !== 'function') {\n throw new Error('Expected handleStateChangeOnClient to be a function.');\n }\n\n if (typeof mapStateOnServer !== 'undefined' && typeof mapStateOnServer !== 'function') {\n throw new Error('Expected mapStateOnServer to either be undefined or a function.');\n }\n\n function getDisplayName(WrappedComponent) {\n return WrappedComponent.displayName || WrappedComponent.name || 'Component';\n }\n\n return function wrap(WrappedComponent) {\n if (typeof WrappedComponent !== 'function') {\n throw new Error('Expected WrappedComponent to be a React component.');\n }\n\n var mountedInstances = [];\n var state;\n\n function emitChange() {\n state = reducePropsToState(mountedInstances.map(function (instance) {\n return instance.props;\n }));\n\n if (SideEffect.canUseDOM) {\n handleStateChangeOnClient(state);\n } else if (mapStateOnServer) {\n state = mapStateOnServer(state);\n }\n }\n\n var SideEffect =\n /*#__PURE__*/\n function (_PureComponent) {\n _inheritsLoose(SideEffect, _PureComponent);\n\n function SideEffect() {\n return _PureComponent.apply(this, arguments) || this;\n }\n\n // Try to use displayName of wrapped component\n // Expose canUseDOM so tests can monkeypatch it\n SideEffect.peek = function peek() {\n return state;\n };\n\n SideEffect.rewind = function rewind() {\n if (SideEffect.canUseDOM) {\n throw new Error('You may only call rewind() on the server. Call peek() to read the current state.');\n }\n\n var recordedState = state;\n state = undefined;\n mountedInstances = [];\n return recordedState;\n };\n\n var _proto = SideEffect.prototype;\n\n _proto.UNSAFE_componentWillMount = function UNSAFE_componentWillMount() {\n mountedInstances.push(this);\n emitChange();\n };\n\n _proto.componentDidUpdate = function componentDidUpdate() {\n emitChange();\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n var index = mountedInstances.indexOf(this);\n mountedInstances.splice(index, 1);\n emitChange();\n };\n\n _proto.render = function render() {\n return React__default.createElement(WrappedComponent, this.props);\n };\n\n return SideEffect;\n }(React.PureComponent);\n\n _defineProperty(SideEffect, \"displayName\", \"SideEffect(\" + getDisplayName(WrappedComponent) + \")\");\n\n _defineProperty(SideEffect, \"canUseDOM\", canUseDOM);\n\n return SideEffect;\n };\n}\n\nmodule.exports = withSideEffect;\n"],"names":["ATTRIBUTE_NAMES","TAG_NAMES","BASE","BODY","HEAD","HTML","LINK","META","NOSCRIPT","SCRIPT","STYLE","TITLE","TAG_PROPERTIES","Object","keys","map","name","REACT_TAG_MAP","accesskey","charset","class","contenteditable","contextmenu","itemprop","tabindex","HELMET_PROPS","HTML_TAG_MAP","reduce","obj","key","SELF_CLOSING_TAGS","HELMET_ATTRIBUTE","_typeof","Symbol","iterator","constructor","prototype","classCallCheck","instance","Constructor","TypeError","createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","defineProperty","protoProps","staticProps","_extends","assign","arguments","source","hasOwnProperty","call","objectWithoutProperties","indexOf","possibleConstructorReturn","self","ReferenceError","encodeSpecialCharacters","str","encode","undefined","String","replace","getTitleFromPropsList","propsList","innermostTitle","getInnermostProperty","innermostTemplate","Array","isArray","join","innermostDefaultTitle","getOnChangeClientState","getAttributesFromPropsList","tagType","filter","tagAttrs","current","getBaseTagFromPropsList","primaryAttributes","reverse","innermostBaseTag","tag","lowerCaseAttributeKey","toLowerCase","concat","getTagsFromPropsList","tagName","approvedSeenTags","warn","approvedTags","instanceTags","instanceSeenTags","primaryAttributeKey","attributeKey","value","forEach","push","tagUnion","objectAssign","property","rafPolyfill","clock","Date","now","callback","currentTime","setTimeout","cafPolyfill","id","clearTimeout","requestAnimationFrame","window","bind","webkitRequestAnimationFrame","mozRequestAnimationFrame","global","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","msg","console","_helmetCallback","commitTagChanges","newState","cb","baseTag","bodyAttributes","htmlAttributes","linkTags","metaTags","noscriptTags","onChangeClientState","scriptTags","styleTags","title","titleAttributes","updateAttributes","updateTitle","tagUpdates","updateTags","addedTags","removedTags","_tagUpdates$tagType","newTags","oldTags","flattenArray","possibleArray","attributes","document","elementTag","getElementsByTagName","helmetAttributeString","getAttribute","helmetAttributes","split","attributesToRemove","attributeKeys","attribute","setAttribute","indexToSave","splice","_i","removeAttribute","type","tags","headElement","head","querySelector","tagNodes","querySelectorAll","slice","indexToDelete","newElement","createElement","innerHTML","styleSheet","cssText","appendChild","createTextNode","some","existingTag","index","isEqualNode","parentNode","removeChild","generateElementAttributesAsString","attr","convertElementAttributestoReactProps","initProps","getMethodsForTag","toComponent","_initProps","React","generateTitleAsReactComponent","toString","attributeString","flattenedTitle","generateTitleAsString","_mappedTag","mappedTag","mappedAttribute","content","dangerouslySetInnerHTML","__html","generateTagsAsReactComponent","attributeHtml","string","tagContent","isSelfClosing","generateTagsAsString","mapStateOnServer","_ref","_ref$title","base","link","meta","noscript","script","style","HelmetExport","Component","_class","_temp","_React$Component","HelmetWrapper","this","apply","subClass","superClass","create","setPrototypeOf","__proto__","inherits","shouldComponentUpdate","nextProps","isEqual","mapNestedChildrenToProps","child","nestedChildren","Error","flattenArrayTypeChildren","_babelHelpers$extends","arrayTypeChildren","newChildProps","mapObjectTypeChildren","_ref2","_babelHelpers$extends2","_babelHelpers$extends3","newProps","mapArrayTypeChildrenToProps","newFlattenedProps","arrayChildName","_babelHelpers$extends4","warnOnInvalidChildren","mapChildrenToProps","children","_this2","_child$props","initAttributes","convertReactPropstoHtmlAttributes","render","_props","set","canUseDOM","propTypes","PropTypes","defaultTitle","defer","titleTemplate","defaultProps","peek","rewind","mappedState","Helmet","withSideEffect","renderStatic","ex","require","React__default","_defineProperty","module","exports","reducePropsToState","handleStateChangeOnClient","WrappedComponent","state","mountedInstances","emitChange","SideEffect","_PureComponent","recordedState","_proto","UNSAFE_componentWillMount","componentDidUpdate","componentWillUnmount","PureComponent","displayName","getDisplayName"],"sourceRoot":""}
1
+ {"version":3,"file":"static/js/270.e8136074.chunk.js","mappings":"kQAMIA,EACM,iBADNA,EAEM,iBAFNA,EAGO,kBAGPC,EAAY,CACZC,KAAM,OACNC,KAAM,OACNC,KAAM,OACNC,KAAM,OACNC,KAAM,OACNC,KAAM,OACNC,SAAU,WACVC,OAAQ,SACRC,MAAO,QACPC,MAAO,SAOPC,GAJkBC,OAAOC,KAAKb,GAAWc,KAAI,SAAUC,GACvD,OAAOf,EAAUe,EACpB,IAGY,WADTJ,EAEU,UAFVA,EAGM,OAHNA,EAIW,aAJXA,EAKY,YALZA,EAMW,WANXA,EAOM,OAPNA,EAQU,WARVA,EASK,MATLA,EAUK,MAVLA,EAWQ,SAGRK,EAAgB,CAChBC,UAAW,YACXC,QAAS,UACTC,MAAO,YACPC,gBAAiB,kBACjBC,YAAa,cACb,aAAc,YACdC,SAAU,WACVC,SAAU,YAGVC,EACe,eADfA,EAEO,QAFPA,EAG2B,0BAH3BA,EAIwB,sBAJxBA,EAKgB,gBAGhBC,EAAeb,OAAOC,KAAKG,GAAeU,QAAO,SAAUC,EAAKC,GAEhE,OADAD,EAAIX,EAAcY,IAAQA,EACnBD,CACV,GAAE,CAAC,GAEAE,EAAoB,CAAC7B,EAAUO,SAAUP,EAAUQ,OAAQR,EAAUS,OAErEqB,EAAmB,oBAEnBC,EAA4B,oBAAXC,QAAoD,kBAApBA,OAAOC,SAAwB,SAAUN,GAC5F,cAAcA,CACf,EAAG,SAAUA,GACZ,OAAOA,GAAyB,oBAAXK,QAAyBL,EAAIO,cAAgBF,QAAUL,IAAQK,OAAOG,UAAY,gBAAkBR,CAC1H,EAEGS,EAAiB,SAAUC,EAAUC,GACvC,KAAMD,aAAoBC,GACxB,MAAM,IAAIC,UAAU,oCAEvB,EAEGC,EAAc,WAChB,SAASC,EAAiBC,EAAQC,GAChC,IAAK,IAAIC,EAAI,EAAGA,EAAID,EAAME,OAAQD,IAAK,CACrC,IAAIE,EAAaH,EAAMC,GACvBE,EAAWC,WAAaD,EAAWC,aAAc,EACjDD,EAAWE,cAAe,EACtB,UAAWF,IAAYA,EAAWG,UAAW,GACjDrC,OAAOsC,eAAeR,EAAQI,EAAWlB,IAAKkB,EAC/C,CACF,CAED,OAAO,SAAUR,EAAaa,EAAYC,GAGxC,OAFID,GAAYV,EAAiBH,EAAYH,UAAWgB,GACpDC,GAAaX,EAAiBH,EAAac,GACxCd,CACR,CACF,CAhBiB,GAkBde,EAAWzC,OAAO0C,QAAU,SAAUZ,GACxC,IAAK,IAAIE,EAAI,EAAGA,EAAIW,UAAUV,OAAQD,IAAK,CACzC,IAAIY,EAASD,UAAUX,GAEvB,IAAK,IAAIhB,KAAO4B,EACV5C,OAAOuB,UAAUsB,eAAeC,KAAKF,EAAQ5B,KAC/Cc,EAAOd,GAAO4B,EAAO5B,GAG1B,CAED,OAAOc,CACR,EAkBGiB,EAA0B,SAAUhC,EAAKd,GAC3C,IAAI6B,EAAS,CAAC,EAEd,IAAK,IAAIE,KAAKjB,EACRd,EAAK+C,QAAQhB,IAAM,GAClBhC,OAAOuB,UAAUsB,eAAeC,KAAK/B,EAAKiB,KAC/CF,EAAOE,GAAKjB,EAAIiB,IAGlB,OAAOF,CACR,EAEGmB,EAA4B,SAAUC,EAAMJ,GAC9C,IAAKI,EACH,MAAM,IAAIC,eAAe,6DAG3B,OAAOL,GAAyB,kBAATA,GAAqC,oBAATA,EAA8BI,EAAPJ,CAC3E,EAEGM,EAA0B,SAAiCC,GAC3D,IAAIC,IAASX,UAAUV,OAAS,QAAsBsB,IAAjBZ,UAAU,KAAmBA,UAAU,GAE5E,OAAe,IAAXW,EACOE,OAAOH,GAGXG,OAAOH,GAAKI,QAAQ,KAAM,SAASA,QAAQ,KAAM,QAAQA,QAAQ,KAAM,QAAQA,QAAQ,KAAM,UAAUA,QAAQ,KAAM,SAC/H,EAEGC,EAAwB,SAA+BC,GACvD,IAAIC,EAAiBC,EAAqBF,EAAWvE,EAAUU,OAC3DgE,EAAoBD,EAAqBF,EAAW/C,GAExD,GAAIkD,GAAqBF,EAErB,OAAOE,EAAkBL,QAAQ,OAAO,WACpC,OAAOM,MAAMC,QAAQJ,GAAkBA,EAAeK,KAAK,IAAML,CACpE,IAGL,IAAIM,EAAwBL,EAAqBF,EAAW/C,GAE5D,OAAOgD,GAAkBM,QAAyBX,CACrD,EAEGY,EAAyB,SAAgCR,GACzD,OAAOE,EAAqBF,EAAW/C,IAAwC,WAAc,CAChG,EAEGwD,EAA6B,SAAoCC,EAASV,GAC1E,OAAOA,EAAUW,QAAO,SAAUvC,GAC9B,MAAiC,qBAAnBA,EAAMsC,EACvB,IAAEnE,KAAI,SAAU6B,GACb,OAAOA,EAAMsC,EAChB,IAAEvD,QAAO,SAAUyD,EAAUC,GAC1B,OAAO/B,EAAS,CAAC,EAAG8B,EAAUC,EACjC,GAAE,CAAC,EACP,EAEGC,EAA0B,SAAiCC,EAAmBf,GAC9E,OAAOA,EAAUW,QAAO,SAAUvC,GAC9B,MAAwC,qBAA1BA,EAAM3C,EAAUC,KACjC,IAAEa,KAAI,SAAU6B,GACb,OAAOA,EAAM3C,EAAUC,KAC1B,IAAEsF,UAAU7D,QAAO,SAAU8D,EAAkBC,GAC5C,IAAKD,EAAiB3C,OAGlB,IAFA,IAAIhC,EAAOD,OAAOC,KAAK4E,GAEd7C,EAAI,EAAGA,EAAI/B,EAAKgC,OAAQD,IAAK,CAClC,IACI8C,EADe7E,EAAK+B,GACiB+C,cAEzC,IAA0D,IAAtDL,EAAkB1B,QAAQ8B,IAAiCD,EAAIC,GAC/D,OAAOF,EAAiBI,OAAOH,EAEtC,CAGL,OAAOD,CACV,GAAE,GACN,EAEGK,EAAuB,SAA8BC,EAASR,EAAmBf,GAEjF,IAAIwB,EAAmB,CAAC,EAExB,OAAOxB,EAAUW,QAAO,SAAUvC,GAC9B,QAAIgC,MAAMC,QAAQjC,EAAMmD,MAGM,qBAAnBnD,EAAMmD,IACbE,EAAK,WAAaF,EAAU,mDAAwD/D,EAAQY,EAAMmD,IAAY,MAE3G,EACV,IAAEhF,KAAI,SAAU6B,GACb,OAAOA,EAAMmD,EAChB,IAAEP,UAAU7D,QAAO,SAAUuE,EAAcC,GACxC,IAAIC,EAAmB,CAAC,EAExBD,EAAahB,QAAO,SAAUO,GAG1B,IAFA,IAAIW,OAAsB,EACtBvF,EAAOD,OAAOC,KAAK4E,GACd7C,EAAI,EAAGA,EAAI/B,EAAKgC,OAAQD,IAAK,CAClC,IAAIyD,EAAexF,EAAK+B,GACpB8C,EAAwBW,EAAaV,eAGiB,IAAtDL,EAAkB1B,QAAQ8B,IAAmCU,IAAwBzF,GAAiE,cAA3C8E,EAAIW,GAAqBT,eAAoCD,IAA0B/E,GAAmE,eAA7C8E,EAAIC,GAAuBC,gBACnPS,EAAsBV,IAGuB,IAA7CJ,EAAkB1B,QAAQyC,IAAyBA,IAAiB1F,GAA6B0F,IAAiB1F,GAA2B0F,IAAiB1F,IAC9JyF,EAAsBC,EAE7B,CAED,IAAKD,IAAwBX,EAAIW,GAC7B,OAAO,EAGX,IAAIE,EAAQb,EAAIW,GAAqBT,cAUrC,OARKI,EAAiBK,KAClBL,EAAiBK,GAAuB,CAAC,GAGxCD,EAAiBC,KAClBD,EAAiBC,GAAuB,CAAC,IAGxCL,EAAiBK,GAAqBE,KACvCH,EAAiBC,GAAqBE,IAAS,GACxC,EAId,IAAEf,UAAUgB,SAAQ,SAAUd,GAC3B,OAAOQ,EAAaO,KAAKf,EAC5B,IAID,IADA,IAAI5E,EAAOD,OAAOC,KAAKsF,GACdvD,EAAI,EAAGA,EAAI/B,EAAKgC,OAAQD,IAAK,CAClC,IAAIyD,EAAexF,EAAK+B,GACpB6D,EAAWC,IAAa,CAAC,EAAGX,EAAiBM,GAAeF,EAAiBE,IAEjFN,EAAiBM,GAAgBI,CACpC,CAED,OAAOR,CACV,GAAE,IAAIV,SACV,EAEGd,EAAuB,SAA8BF,EAAWoC,GAChE,IAAK,IAAI/D,EAAI2B,EAAU1B,OAAS,EAAGD,GAAK,EAAGA,IAAK,CAC5C,IAAID,EAAQ4B,EAAU3B,GAEtB,GAAID,EAAMc,eAAekD,GACrB,OAAOhE,EAAMgE,EAEpB,CAED,OAAO,IACV,EAoBGC,EAAc,WACd,IAAIC,EAAQC,KAAKC,MAEjB,OAAO,SAAUC,GACb,IAAIC,EAAcH,KAAKC,MAEnBE,EAAcJ,EAAQ,IACtBA,EAAQI,EACRD,EAASC,IAETC,YAAW,WACPN,EAAYI,EACf,GAAE,EAEV,CACJ,CAfiB,GAiBdG,EAAc,SAAqBC,GACnC,OAAOC,aAAaD,EACvB,EAEGE,EAA0C,qBAAXC,OAAyBA,OAAOD,uBAAyBC,OAAOD,sBAAsBE,KAAKD,SAAWA,OAAOE,6BAA+BF,OAAOG,0BAA4Bd,EAAce,EAAAA,EAAOL,uBAAyBV,EAE5PgB,EAAyC,qBAAXL,OAAyBA,OAAOK,sBAAwBL,OAAOM,4BAA8BN,OAAOO,yBAA2BX,EAAcQ,EAAAA,EAAOC,sBAAwBT,EAE1MnB,EAAO,SAAc+B,GACrB,OAAOC,SAAmC,oBAAjBA,QAAQhC,MAAuBgC,QAAQhC,KAAK+B,EACxE,EAEGE,GAAkB,KAmBlBC,GAAmB,SAA0BC,EAAUC,GACvD,IAAIC,EAAUF,EAASE,QACnBC,EAAiBH,EAASG,eAC1BC,EAAiBJ,EAASI,eAC1BC,EAAWL,EAASK,SACpBC,EAAWN,EAASM,SACpBC,EAAeP,EAASO,aACxBC,EAAsBR,EAASQ,oBAC/BC,EAAaT,EAASS,WACtBC,EAAYV,EAASU,UACrBC,EAAQX,EAASW,MACjBC,EAAkBZ,EAASY,gBAE/BC,GAAiBhJ,EAAUE,KAAMoI,GACjCU,GAAiBhJ,EAAUI,KAAMmI,GAEjCU,GAAYH,EAAOC,GAEnB,IAAIG,EAAa,CACbb,QAASc,GAAWnJ,EAAUC,KAAMoI,GACpCG,SAAUW,GAAWnJ,EAAUK,KAAMmI,GACrCC,SAAUU,GAAWnJ,EAAUM,KAAMmI,GACrCC,aAAcS,GAAWnJ,EAAUO,SAAUmI,GAC7CE,WAAYO,GAAWnJ,EAAUQ,OAAQoI,GACzCC,UAAWM,GAAWnJ,EAAUS,MAAOoI,IAGvCO,EAAY,CAAC,EACbC,EAAc,CAAC,EAEnBzI,OAAOC,KAAKqI,GAAY3C,SAAQ,SAAUtB,GACtC,IAAIqE,EAAsBJ,EAAWjE,GACjCsE,EAAUD,EAAoBC,QAC9BC,EAAUF,EAAoBE,QAG9BD,EAAQ1G,SACRuG,EAAUnE,GAAWsE,GAErBC,EAAQ3G,SACRwG,EAAYpE,GAAWiE,EAAWjE,GAASuE,QAElD,IAEDpB,GAAMA,IAENO,EAAoBR,EAAUiB,EAAWC,EAC5C,EAEGI,GAAe,SAAsBC,GACrC,OAAO/E,MAAMC,QAAQ8E,GAAiBA,EAAc7E,KAAK,IAAM6E,CAClE,EAEGT,GAAc,SAAqBH,EAAOa,GACrB,qBAAVb,GAAyBc,SAASd,QAAUA,IACnDc,SAASd,MAAQW,GAAaX,IAGlCE,GAAiBhJ,EAAUU,MAAOiJ,EACrC,EAEGX,GAAmB,SAA0BlD,EAAS6D,GACtD,IAAIE,EAAaD,SAASE,qBAAqBhE,GAAS,GAExD,GAAK+D,EAAL,CASA,IALA,IAAIE,EAAwBF,EAAWG,aAAalI,GAChDmI,EAAmBF,EAAwBA,EAAsBG,MAAM,KAAO,GAC9EC,EAAqB,GAAGvE,OAAOqE,GAC/BG,EAAgBxJ,OAAOC,KAAK8I,GAEvB/G,EAAI,EAAGA,EAAIwH,EAAcvH,OAAQD,IAAK,CAC3C,IAAIyH,EAAYD,EAAcxH,GAC1B0D,EAAQqD,EAAWU,IAAc,GAEjCR,EAAWG,aAAaK,KAAe/D,GACvCuD,EAAWS,aAAaD,EAAW/D,IAGM,IAAzC2D,EAAiBrG,QAAQyG,IACzBJ,EAAiBzD,KAAK6D,GAG1B,IAAIE,EAAcJ,EAAmBvG,QAAQyG,IACxB,IAAjBE,GACAJ,EAAmBK,OAAOD,EAAa,EAE9C,CAED,IAAK,IAAIE,EAAKN,EAAmBtH,OAAS,EAAG4H,GAAM,EAAGA,IAClDZ,EAAWa,gBAAgBP,EAAmBM,IAG9CR,EAAiBpH,SAAWsH,EAAmBtH,OAC/CgH,EAAWa,gBAAgB5I,GACpB+H,EAAWG,aAAalI,KAAsBsI,EAAcvF,KAAK,MACxEgF,EAAWS,aAAaxI,EAAkBsI,EAAcvF,KAAK,KAhChE,CAkCJ,EAEGsE,GAAa,SAAoBwB,EAAMC,GACvC,IAAIC,EAAcjB,SAASkB,MAAQlB,SAASmB,cAAc/K,EAAUG,MAChE6K,EAAWH,EAAYI,iBAAiBN,EAAO,IAAPA,sBACxCnB,EAAU7E,MAAMxC,UAAU+I,MAAMxH,KAAKsH,GACrCzB,EAAU,GACV4B,OAAgB,EA4CpB,OA1CIP,GAAQA,EAAK/H,QACb+H,EAAKrE,SAAQ,SAAUd,GACnB,IAAI2F,EAAaxB,SAASyB,cAAcV,GAExC,IAAK,IAAIN,KAAa5E,EAClB,GAAIA,EAAIhC,eAAe4G,GACnB,GAAIA,IAAc1J,EACdyK,EAAWE,UAAY7F,EAAI6F,eACxB,GAAIjB,IAAc1J,EACjByK,EAAWG,WACXH,EAAWG,WAAWC,QAAU/F,EAAI+F,QAEpCJ,EAAWK,YAAY7B,SAAS8B,eAAejG,EAAI+F,cAEpD,CACH,IAAIlF,EAAkC,qBAAnBb,EAAI4E,GAA6B,GAAK5E,EAAI4E,GAC7De,EAAWd,aAAaD,EAAW/D,EACtC,CAIT8E,EAAWd,aAAaxI,EAAkB,QAGtC0H,EAAQmC,MAAK,SAAUC,EAAaC,GAEpC,OADAV,EAAgBU,EACTT,EAAWU,YAAYF,EACjC,IACGpC,EAAQgB,OAAOW,EAAe,GAE9B5B,EAAQ/C,KAAK4E,EAEpB,IAGL5B,EAAQjD,SAAQ,SAAUd,GACtB,OAAOA,EAAIsG,WAAWC,YAAYvG,EACrC,IACD8D,EAAQhD,SAAQ,SAAUd,GACtB,OAAOoF,EAAYY,YAAYhG,EAClC,IAEM,CACH+D,QAASA,EACTD,QAASA,EAEhB,EAEG0C,GAAoC,SAA2CtC,GAC/E,OAAO/I,OAAOC,KAAK8I,GAAYjI,QAAO,SAAUuC,EAAKrC,GACjD,IAAIsK,EAAkC,qBAApBvC,EAAW/H,GAAuBA,EAAM,KAAQ+H,EAAW/H,GAAO,IAAO,GAAKA,EAChG,OAAOqC,EAAMA,EAAM,IAAMiI,EAAOA,CACnC,GAAE,GACN,EAyBGC,GAAuC,SAA8CxC,GACrF,IAAIyC,EAAY7I,UAAUV,OAAS,QAAsBsB,IAAjBZ,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAErF,OAAO3C,OAAOC,KAAK8I,GAAYjI,QAAO,SAAUC,EAAKC,GAEjD,OADAD,EAAIX,EAAcY,IAAQA,GAAO+H,EAAW/H,GACrCD,CACV,GAAEyK,EACN,EA8CGC,GAAmB,SAA0B1B,EAAMC,EAAM1G,GACzD,OAAQyG,GACJ,KAAK3K,EAAUU,MACX,MAAO,CACH4L,YAAa,WACT,OAxCgB,SAAuC3B,EAAM7B,EAAOa,GACpF,IAAI4C,EAGAH,IAAaG,EAAa,CAC1B3K,IAAKkH,IACKhH,IAAoB,EAAMyK,GACpC5J,EAAQwJ,GAAqCxC,EAAYyC,GAE7D,MAAO,CAACI,EAAAA,cAAoBxM,EAAUU,MAAOiC,EAAOmG,GACvD,CA8B0B2D,CAA8B9B,EAAMC,EAAK9B,MAAO8B,EAAK7B,gBAC/D,EACD2D,SAAU,WACN,OApFQ,SAA+B/B,EAAM7B,EAAOa,EAAYzF,GAChF,IAAIyI,EAAkBV,GAAkCtC,GACpDiD,EAAiBnD,GAAaX,GAClC,OAAO6D,EAAkB,IAAMhC,EAAN,6BAAqDgC,EAAkB,IAAM3I,EAAwB4I,EAAgB1I,GAAU,KAAOyG,EAAO,IAAM,IAAMA,EAAN,6BAAqD3G,EAAwB4I,EAAgB1I,GAAU,KAAOyG,EAAO,GACpS,CAgF0BkC,CAAsBlC,EAAMC,EAAK9B,MAAO8B,EAAK7B,gBAAiB7E,EACxE,GAET,KAAKnE,EACL,KAAKA,EACD,MAAO,CACHuM,YAAa,WACT,OAAOH,GAAqCvB,EAC/C,EACD8B,SAAU,WACN,OAAOT,GAAkCrB,EAC5C,GAET,QACI,MAAO,CACH0B,YAAa,WACT,OA/Ce,SAAsC3B,EAAMC,GAC3E,OAAOA,EAAK9J,KAAI,SAAU2E,EAAK7C,GAC3B,IAAIkK,EAEAC,IAAaD,EAAa,CAC1BlL,IAAKgB,IACKd,IAAoB,EAAMgL,GAaxC,OAXAlM,OAAOC,KAAK4E,GAAKc,SAAQ,SAAU8D,GAC/B,IAAI2C,EAAkBhM,EAAcqJ,IAAcA,EAElD,GAAI2C,IAAoBrM,GAA6BqM,IAAoBrM,EAAyB,CAC9F,IAAIsM,EAAUxH,EAAI6F,WAAa7F,EAAI+F,QACnCuB,EAAUG,wBAA0B,CAAEC,OAAQF,EACjD,MACGF,EAAUC,GAAmBvH,EAAI4E,EAExC,IAEMmC,EAAAA,cAAoB7B,EAAMoC,EACpC,GACJ,CA0B0BK,CAA6BzC,EAAMC,EAC7C,EACD8B,SAAU,WACN,OAjGO,SAA8B/B,EAAMC,EAAM1G,GACjE,OAAO0G,EAAKlJ,QAAO,SAAUuC,EAAKwB,GAC9B,IAAI4H,EAAgBzM,OAAOC,KAAK4E,GAAKP,QAAO,SAAUmF,GAClD,QAASA,IAAc1J,GAA6B0J,IAAc1J,EACrE,IAAEe,QAAO,SAAU4L,EAAQjD,GACxB,IAAI6B,EAAiC,qBAAnBzG,EAAI4E,GAA6BA,EAAYA,EAAY,KAAQrG,EAAwByB,EAAI4E,GAAYnG,GAAU,IACrI,OAAOoJ,EAASA,EAAS,IAAMpB,EAAOA,CACzC,GAAE,IAECqB,EAAa9H,EAAI6F,WAAa7F,EAAI+F,SAAW,GAE7CgC,GAAqD,IAArC3L,EAAkB+B,QAAQ+G,GAE9C,OAAO1G,EAAM,IAAM0G,EAAZ1G,6BAA2DoJ,GAAiBG,EAAgB,KAAO,IAAMD,EAAa,KAAO5C,EAAO,IAC9I,GAAE,GACN,CAkF0B8C,CAAqB9C,EAAMC,EAAM1G,EAC3C,GAGhB,EAEGwJ,GAAmB,SAA0BC,GAC7C,IAAItF,EAAUsF,EAAKtF,QACfC,EAAiBqF,EAAKrF,eACtBpE,EAASyJ,EAAKzJ,OACdqE,EAAiBoF,EAAKpF,eACtBC,EAAWmF,EAAKnF,SAChBC,EAAWkF,EAAKlF,SAChBC,EAAeiF,EAAKjF,aACpBE,EAAa+E,EAAK/E,WAClBC,EAAY8E,EAAK9E,UACjB+E,EAAaD,EAAK7E,MAClBA,OAAuB3E,IAAfyJ,EAA2B,GAAKA,EACxC7E,EAAkB4E,EAAK5E,gBAC3B,MAAO,CACH8E,KAAMxB,GAAiBrM,EAAUC,KAAMoI,EAASnE,GAChDoE,eAAgB+D,GAAiBtM,EAAsBuI,EAAgBpE,GACvEqE,eAAgB8D,GAAiBtM,EAAsBwI,EAAgBrE,GACvE4J,KAAMzB,GAAiBrM,EAAUK,KAAMmI,EAAUtE,GACjD6J,KAAM1B,GAAiBrM,EAAUM,KAAMmI,EAAUvE,GACjD8J,SAAU3B,GAAiBrM,EAAUO,SAAUmI,EAAcxE,GAC7D+J,OAAQ5B,GAAiBrM,EAAUQ,OAAQoI,EAAY1E,GACvDgK,MAAO7B,GAAiBrM,EAAUS,MAAOoI,EAAW3E,GACpD4E,MAAOuD,GAAiBrM,EAAUU,MAAO,CAAEoI,MAAOA,EAAOC,gBAAiBA,GAAmB7E,GAEpG,EA0PGiK,GAxPS,SAAgBC,GACzB,IAAIC,EAAQC,EAEZ,OAAOA,EAAQD,EAAS,SAAUE,GAG9B,SAASC,IAEL,OADApM,EAAeqM,KAAMD,GACd3K,EAA0B4K,KAAMF,EAAiBG,MAAMD,KAAMlL,WACvE,CA6LD,OAzuBO,SAAUoL,EAAUC,GACjC,GAA0B,oBAAfA,GAA4C,OAAfA,EACtC,MAAM,IAAIrM,UAAU,kEAAoEqM,GAG1FD,EAASxM,UAAYvB,OAAOiO,OAAOD,GAAcA,EAAWzM,UAAW,CACrED,YAAa,CACXoE,MAAOqI,EACP5L,YAAY,EACZE,UAAU,EACVD,cAAc,KAGd4L,IAAYhO,OAAOkO,eAAiBlO,OAAOkO,eAAeH,EAAUC,GAAcD,EAASI,UAAYH,EAC5G,CAyhBOI,CAASR,EAAeD,GAOxBC,EAAcrM,UAAU8M,sBAAwB,SAA+BC,GAC3E,OAAQC,IAAQV,KAAK9L,MAAOuM,EAC/B,EAEDV,EAAcrM,UAAUiN,yBAA2B,SAAkCC,EAAOC,GACxF,IAAKA,EACD,OAAO,KAGX,OAAQD,EAAM1E,MACV,KAAK3K,EAAUQ,OACf,KAAKR,EAAUO,SACX,MAAO,CACH+K,UAAWgE,GAGnB,KAAKtP,EAAUS,MACX,MAAO,CACH+K,QAAS8D,GAIrB,MAAM,IAAIC,MAAM,IAAMF,EAAM1E,KAAO,qGACtC,EAED6D,EAAcrM,UAAUqN,yBAA2B,SAAkC7B,GACjF,IAAI8B,EAEAJ,EAAQ1B,EAAK0B,MACbK,EAAoB/B,EAAK+B,kBACzBC,EAAgBhC,EAAKgC,cACrBL,EAAiB3B,EAAK2B,eAE1B,OAAOjM,EAAS,CAAC,EAAGqM,IAAoBD,EAAwB,CAAC,GAAyBJ,EAAM1E,MAAQ,GAAG/E,OAAO8J,EAAkBL,EAAM1E,OAAS,GAAI,CAACtH,EAAS,CAAC,EAAGsM,EAAelB,KAAKW,yBAAyBC,EAAOC,MAAoBG,GAChP,EAEDjB,EAAcrM,UAAUyN,sBAAwB,SAA+BC,GAC3E,IAAIC,EAAwBC,EAExBV,EAAQQ,EAAMR,MACdW,EAAWH,EAAMG,SACjBL,EAAgBE,EAAMF,cACtBL,EAAiBO,EAAMP,eAE3B,OAAQD,EAAM1E,MACV,KAAK3K,EAAUU,MACX,OAAO2C,EAAS,CAAC,EAAG2M,IAAWF,EAAyB,CAAC,GAA0BT,EAAM1E,MAAQ2E,EAAgBQ,EAAuB/G,gBAAkB1F,EAAS,CAAC,EAAGsM,GAAgBG,IAE3L,KAAK9P,EAAUE,KACX,OAAOmD,EAAS,CAAC,EAAG2M,EAAU,CAC1B1H,eAAgBjF,EAAS,CAAC,EAAGsM,KAGrC,KAAK3P,EAAUI,KACX,OAAOiD,EAAS,CAAC,EAAG2M,EAAU,CAC1BzH,eAAgBlF,EAAS,CAAC,EAAGsM,KAIzC,OAAOtM,EAAS,CAAC,EAAG2M,IAAWD,EAAyB,CAAC,GAA0BV,EAAM1E,MAAQtH,EAAS,CAAC,EAAGsM,GAAgBI,GACjI,EAEDvB,EAAcrM,UAAU8N,4BAA8B,SAAqCP,EAAmBM,GAC1G,IAAIE,EAAoB7M,EAAS,CAAC,EAAG2M,GAQrC,OANApP,OAAOC,KAAK6O,GAAmBnJ,SAAQ,SAAU4J,GAC7C,IAAIC,EAEJF,EAAoB7M,EAAS,CAAC,EAAG6M,IAAoBE,EAAyB,CAAC,GAA0BD,GAAkBT,EAAkBS,GAAiBC,GACjK,IAEMF,CACV,EAED1B,EAAcrM,UAAUkO,sBAAwB,SAA+BhB,EAAOC,GAmBlF,OAAO,CACV,EAEDd,EAAcrM,UAAUmO,mBAAqB,SAA4BC,EAAUP,GAC/E,IAAIQ,EAAS/B,KAETiB,EAAoB,CAAC,EAyCzB,OAvCAlD,EAAAA,SAAAA,QAAuB+D,GAAU,SAAUlB,GACvC,GAAKA,GAAUA,EAAM1M,MAArB,CAIA,IAAI8N,EAAepB,EAAM1M,MACrB2M,EAAiBmB,EAAaF,SAG9BZ,EAhOoB,SAA2ChN,GAC/E,IAAI+N,EAAiBnN,UAAUV,OAAS,QAAsBsB,IAAjBZ,UAAU,GAAmBA,UAAU,GAAK,CAAC,EAE1F,OAAO3C,OAAOC,KAAK8B,GAAOjB,QAAO,SAAUC,EAAKC,GAE5C,OADAD,EAAIF,EAAaG,IAAQA,GAAOe,EAAMf,GAC/BD,CACV,GAAE+O,EACN,CAyNmCC,CAFHhN,EAAwB8M,EAAc,CAAC,cAMxD,OAFAD,EAAOH,sBAAsBhB,EAAOC,GAE5BD,EAAM1E,MACV,KAAK3K,EAAUK,KACf,KAAKL,EAAUM,KACf,KAAKN,EAAUO,SACf,KAAKP,EAAUQ,OACf,KAAKR,EAAUS,MACXiP,EAAoBc,EAAOhB,yBAAyB,CAChDH,MAAOA,EACPK,kBAAmBA,EACnBC,cAAeA,EACfL,eAAgBA,IAEpB,MAEJ,QACIU,EAAWQ,EAAOZ,sBAAsB,CACpCP,MAAOA,EACPW,SAAUA,EACVL,cAAeA,EACfL,eAAgBA,IA7B3B,CAiCJ,IAEDU,EAAWvB,KAAKwB,4BAA4BP,EAAmBM,EAElE,EAEDxB,EAAcrM,UAAUyO,OAAS,WAC7B,IAAIC,EAASpC,KAAK9L,MACd4N,EAAWM,EAAON,SAClB5N,EAAQgB,EAAwBkN,EAAQ,CAAC,aAEzCb,EAAW3M,EAAS,CAAC,EAAGV,GAM5B,OAJI4N,IACAP,EAAWvB,KAAK6B,mBAAmBC,EAAUP,IAG1CxD,EAAAA,cAAoB4B,EAAW4B,EACzC,EAEDxN,EAAYgM,EAAe,KAAM,CAAC,CAC9B5M,IAAK,YAyBLkP,IAAK,SAAgBC,GACjB3C,EAAU2C,UAAYA,CACzB,KAEEvC,CACV,CApMuB,CAoMtBhC,EAAAA,WAAkB6B,EAAO2C,UAAY,CACnCnD,KAAMoD,IAAAA,OACN3I,eAAgB2I,IAAAA,OAChBV,SAAUU,IAAAA,UAAoB,CAACA,IAAAA,QAAkBA,IAAAA,MAAiBA,IAAAA,OAClEC,aAAcD,IAAAA,OACdE,MAAOF,IAAAA,KACPjN,wBAAyBiN,IAAAA,KACzB1I,eAAgB0I,IAAAA,OAChBnD,KAAMmD,IAAAA,QAAkBA,IAAAA,QACxBlD,KAAMkD,IAAAA,QAAkBA,IAAAA,QACxBjD,SAAUiD,IAAAA,QAAkBA,IAAAA,QAC5BtI,oBAAqBsI,IAAAA,KACrBhD,OAAQgD,IAAAA,QAAkBA,IAAAA,QAC1B/C,MAAO+C,IAAAA,QAAkBA,IAAAA,QACzBnI,MAAOmI,IAAAA,OACPlI,gBAAiBkI,IAAAA,OACjBG,cAAeH,IAAAA,QAChB5C,EAAOgD,aAAe,CACrBF,OAAO,EACPnN,yBAAyB,GAC1BqK,EAAOiD,KAAOlD,EAAUkD,KAAMjD,EAAOkD,OAAS,WAC7C,IAAIC,EAAcpD,EAAUmD,SAkB5B,OAjBKC,IAEDA,EAAc9D,GAAiB,CAC3BrF,QAAS,GACTC,eAAgB,CAAC,EACjBtE,yBAAyB,EACzBuE,eAAgB,CAAC,EACjBC,SAAU,GACVC,SAAU,GACVC,aAAc,GACdE,WAAY,GACZC,UAAW,GACXC,MAAO,GACPC,gBAAiB,CAAC,KAInByI,CACV,EAAElD,CACN,CAQkBmD,CAFKC,KAnmBC,SAA4BnN,GACjD,MAAO,CACH8D,QAAShD,EAAwB,CAAC1E,EAAqBA,GAAwB4D,GAC/E+D,eAAgBtD,EAA2BjF,EAAsBwE,GACjE4M,MAAO1M,EAAqBF,EAAW/C,GACvC0C,OAAQO,EAAqBF,EAAW/C,GACxC+G,eAAgBvD,EAA2BjF,EAAsBwE,GACjEiE,SAAU3C,EAAqB7F,EAAUK,KAAM,CAACM,EAAoBA,GAAsB4D,GAC1FkE,SAAU5C,EAAqB7F,EAAUM,KAAM,CAACK,EAAqBA,EAAwBA,EAA0BA,EAAyBA,GAA2B4D,GAC3KmE,aAAc7C,EAAqB7F,EAAUO,SAAU,CAACI,GAA4B4D,GACpFoE,oBAAqB5D,EAAuBR,GAC5CqE,WAAY/C,EAAqB7F,EAAUQ,OAAQ,CAACG,EAAoBA,GAA4B4D,GACpGsE,UAAWhD,EAAqB7F,EAAUS,MAAO,CAACE,GAA0B4D,GAC5EuE,MAAOxE,EAAsBC,GAC7BwE,gBAAiB/D,EAA2BjF,EAAuBwE,GAE1E,IAiC6B,SAAiC4D,GACvDF,IACAL,EAAqBK,IAGrBE,EAASgJ,MACTlJ,GAAkBX,GAAsB,WACpCY,GAAiBC,GAAU,WACvBF,GAAkB,IACrB,GACJ,KAEDC,GAAiBC,GACjBF,GAAkB,KAEzB,GAmiBmFyF,GAA5DgE,EAJJ,WAChB,OAAO,IACV,KAKDvD,GAAawD,aAAexD,GAAaoD,M,wBC34BzC,IAF0BK,EAEtBpF,EAAQqF,EAAQ,OAChBC,GAHsBF,EAGWpF,IAHwB,kBAAPoF,GAAoB,YAAaA,EAAMA,EAAE,QAAcA,EAK7G,SAASG,EAAgBpQ,EAAKC,EAAK0E,GAYjC,OAXI1E,KAAOD,EACTf,OAAOsC,eAAevB,EAAKC,EAAK,CAC9B0E,MAAOA,EACPvD,YAAY,EACZC,cAAc,EACdC,UAAU,IAGZtB,EAAIC,GAAO0E,EAGN3E,CACR,CAQD,IAAIoP,IAAiC,qBAAXxJ,SAA0BA,OAAOqC,WAAYrC,OAAOqC,SAASyB,eAgGvF2G,EAAOC,QA/FP,SAAwBC,EAAoBC,EAA2BzE,GACrE,GAAkC,oBAAvBwE,EACT,MAAM,IAAI3C,MAAM,iDAGlB,GAAyC,oBAA9B4C,EACT,MAAM,IAAI5C,MAAM,wDAGlB,GAAgC,qBAArB7B,GAAgE,oBAArBA,EACpD,MAAM,IAAI6B,MAAM,mEAOlB,OAAO,SAAc6C,GACnB,GAAgC,oBAArBA,EACT,MAAM,IAAI7C,MAAM,sDAGlB,IACI8C,EADAC,EAAmB,GAGvB,SAASC,IACPF,EAAQH,EAAmBI,EAAiBxR,KAAI,SAAUuB,GACxD,OAAOA,EAASM,KACjB,KAEG6P,EAAWzB,UACboB,EAA0BE,GACjB3E,IACT2E,EAAQ3E,EAAiB2E,GAE5B,CAED,IAAIG,EAEJ,SAAUC,GA9Cd,IAAwB9D,EAAUC,EAiD5B,SAAS4D,IACP,OAAOC,EAAe/D,MAAMD,KAAMlL,YAAckL,IACjD,CAnD2BG,EA+CD6D,GA/CT9D,EA+CH6D,GA9CVrQ,UAAYvB,OAAOiO,OAAOD,EAAWzM,WAC9CwM,EAASxM,UAAUD,YAAcyM,EACjCA,EAASI,UAAYH,EAoDjB4D,EAAWlB,KAAO,WAChB,OAAOe,CACR,EAEDG,EAAWjB,OAAS,WAClB,GAAIiB,EAAWzB,UACb,MAAM,IAAIxB,MAAM,oFAGlB,IAAImD,EAAgBL,EAGpB,OAFAA,OAAQlO,EACRmO,EAAmB,GACZI,CACR,EAED,IAAIC,EAASH,EAAWrQ,UAqBxB,OAnBAwQ,EAAOC,0BAA4B,WACjCN,EAAiB9L,KAAKiI,MACtB8D,GACD,EAEDI,EAAOE,mBAAqB,WAC1BN,GACD,EAEDI,EAAOG,qBAAuB,WAC5B,IAAIjH,EAAQyG,EAAiB1O,QAAQ6K,MACrC6D,EAAiB9H,OAAOqB,EAAO,GAC/B0G,GACD,EAEDI,EAAO/B,OAAS,WACd,OAAOkB,EAAezG,cAAc+G,EAAkB3D,KAAK9L,MAC5D,EAEM6P,CACR,CA9CD,CA8CEhG,EAAMuG,eAMR,OAJAhB,EAAgBS,EAAY,cAAe,cA1E7C,SAAwBJ,GACtB,OAAOA,EAAiBY,aAAeZ,EAAiBrR,MAAQ,WACjE,CAwE4DkS,CAAeb,GAAoB,KAE9FL,EAAgBS,EAAY,YAAazB,GAElCyB,CACR,CACF,C","sources":["../node_modules/react-helmet/es/Helmet.js","../node_modules/react-side-effect/lib/index.js"],"sourcesContent":["import PropTypes from 'prop-types';\nimport withSideEffect from 'react-side-effect';\nimport isEqual from 'react-fast-compare';\nimport React from 'react';\nimport objectAssign from 'object-assign';\n\nvar ATTRIBUTE_NAMES = {\n BODY: \"bodyAttributes\",\n HTML: \"htmlAttributes\",\n TITLE: \"titleAttributes\"\n};\n\nvar TAG_NAMES = {\n BASE: \"base\",\n BODY: \"body\",\n HEAD: \"head\",\n HTML: \"html\",\n LINK: \"link\",\n META: \"meta\",\n NOSCRIPT: \"noscript\",\n SCRIPT: \"script\",\n STYLE: \"style\",\n TITLE: \"title\"\n};\n\nvar VALID_TAG_NAMES = Object.keys(TAG_NAMES).map(function (name) {\n return TAG_NAMES[name];\n});\n\nvar TAG_PROPERTIES = {\n CHARSET: \"charset\",\n CSS_TEXT: \"cssText\",\n HREF: \"href\",\n HTTPEQUIV: \"http-equiv\",\n INNER_HTML: \"innerHTML\",\n ITEM_PROP: \"itemprop\",\n NAME: \"name\",\n PROPERTY: \"property\",\n REL: \"rel\",\n SRC: \"src\",\n TARGET: \"target\"\n};\n\nvar REACT_TAG_MAP = {\n accesskey: \"accessKey\",\n charset: \"charSet\",\n class: \"className\",\n contenteditable: \"contentEditable\",\n contextmenu: \"contextMenu\",\n \"http-equiv\": \"httpEquiv\",\n itemprop: \"itemProp\",\n tabindex: \"tabIndex\"\n};\n\nvar HELMET_PROPS = {\n DEFAULT_TITLE: \"defaultTitle\",\n DEFER: \"defer\",\n ENCODE_SPECIAL_CHARACTERS: \"encodeSpecialCharacters\",\n ON_CHANGE_CLIENT_STATE: \"onChangeClientState\",\n TITLE_TEMPLATE: \"titleTemplate\"\n};\n\nvar HTML_TAG_MAP = Object.keys(REACT_TAG_MAP).reduce(function (obj, key) {\n obj[REACT_TAG_MAP[key]] = key;\n return obj;\n}, {});\n\nvar SELF_CLOSING_TAGS = [TAG_NAMES.NOSCRIPT, TAG_NAMES.SCRIPT, TAG_NAMES.STYLE];\n\nvar HELMET_ATTRIBUTE = \"data-react-helmet\";\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar inherits = function (subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\nvar objectWithoutProperties = function (obj, keys) {\n var target = {};\n\n for (var i in obj) {\n if (keys.indexOf(i) >= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n\n return target;\n};\n\nvar possibleConstructorReturn = function (self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\nvar encodeSpecialCharacters = function encodeSpecialCharacters(str) {\n var encode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n if (encode === false) {\n return String(str);\n }\n\n return String(str).replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\").replace(/'/g, \"&#x27;\");\n};\n\nvar getTitleFromPropsList = function getTitleFromPropsList(propsList) {\n var innermostTitle = getInnermostProperty(propsList, TAG_NAMES.TITLE);\n var innermostTemplate = getInnermostProperty(propsList, HELMET_PROPS.TITLE_TEMPLATE);\n\n if (innermostTemplate && innermostTitle) {\n // use function arg to avoid need to escape $ characters\n return innermostTemplate.replace(/%s/g, function () {\n return Array.isArray(innermostTitle) ? innermostTitle.join(\"\") : innermostTitle;\n });\n }\n\n var innermostDefaultTitle = getInnermostProperty(propsList, HELMET_PROPS.DEFAULT_TITLE);\n\n return innermostTitle || innermostDefaultTitle || undefined;\n};\n\nvar getOnChangeClientState = function getOnChangeClientState(propsList) {\n return getInnermostProperty(propsList, HELMET_PROPS.ON_CHANGE_CLIENT_STATE) || function () {};\n};\n\nvar getAttributesFromPropsList = function getAttributesFromPropsList(tagType, propsList) {\n return propsList.filter(function (props) {\n return typeof props[tagType] !== \"undefined\";\n }).map(function (props) {\n return props[tagType];\n }).reduce(function (tagAttrs, current) {\n return _extends({}, tagAttrs, current);\n }, {});\n};\n\nvar getBaseTagFromPropsList = function getBaseTagFromPropsList(primaryAttributes, propsList) {\n return propsList.filter(function (props) {\n return typeof props[TAG_NAMES.BASE] !== \"undefined\";\n }).map(function (props) {\n return props[TAG_NAMES.BASE];\n }).reverse().reduce(function (innermostBaseTag, tag) {\n if (!innermostBaseTag.length) {\n var keys = Object.keys(tag);\n\n for (var i = 0; i < keys.length; i++) {\n var attributeKey = keys[i];\n var lowerCaseAttributeKey = attributeKey.toLowerCase();\n\n if (primaryAttributes.indexOf(lowerCaseAttributeKey) !== -1 && tag[lowerCaseAttributeKey]) {\n return innermostBaseTag.concat(tag);\n }\n }\n }\n\n return innermostBaseTag;\n }, []);\n};\n\nvar getTagsFromPropsList = function getTagsFromPropsList(tagName, primaryAttributes, propsList) {\n // Calculate list of tags, giving priority innermost component (end of the propslist)\n var approvedSeenTags = {};\n\n return propsList.filter(function (props) {\n if (Array.isArray(props[tagName])) {\n return true;\n }\n if (typeof props[tagName] !== \"undefined\") {\n warn(\"Helmet: \" + tagName + \" should be of type \\\"Array\\\". Instead found type \\\"\" + _typeof(props[tagName]) + \"\\\"\");\n }\n return false;\n }).map(function (props) {\n return props[tagName];\n }).reverse().reduce(function (approvedTags, instanceTags) {\n var instanceSeenTags = {};\n\n instanceTags.filter(function (tag) {\n var primaryAttributeKey = void 0;\n var keys = Object.keys(tag);\n for (var i = 0; i < keys.length; i++) {\n var attributeKey = keys[i];\n var lowerCaseAttributeKey = attributeKey.toLowerCase();\n\n // Special rule with link tags, since rel and href are both primary tags, rel takes priority\n if (primaryAttributes.indexOf(lowerCaseAttributeKey) !== -1 && !(primaryAttributeKey === TAG_PROPERTIES.REL && tag[primaryAttributeKey].toLowerCase() === \"canonical\") && !(lowerCaseAttributeKey === TAG_PROPERTIES.REL && tag[lowerCaseAttributeKey].toLowerCase() === \"stylesheet\")) {\n primaryAttributeKey = lowerCaseAttributeKey;\n }\n // Special case for innerHTML which doesn't work lowercased\n if (primaryAttributes.indexOf(attributeKey) !== -1 && (attributeKey === TAG_PROPERTIES.INNER_HTML || attributeKey === TAG_PROPERTIES.CSS_TEXT || attributeKey === TAG_PROPERTIES.ITEM_PROP)) {\n primaryAttributeKey = attributeKey;\n }\n }\n\n if (!primaryAttributeKey || !tag[primaryAttributeKey]) {\n return false;\n }\n\n var value = tag[primaryAttributeKey].toLowerCase();\n\n if (!approvedSeenTags[primaryAttributeKey]) {\n approvedSeenTags[primaryAttributeKey] = {};\n }\n\n if (!instanceSeenTags[primaryAttributeKey]) {\n instanceSeenTags[primaryAttributeKey] = {};\n }\n\n if (!approvedSeenTags[primaryAttributeKey][value]) {\n instanceSeenTags[primaryAttributeKey][value] = true;\n return true;\n }\n\n return false;\n }).reverse().forEach(function (tag) {\n return approvedTags.push(tag);\n });\n\n // Update seen tags with tags from this instance\n var keys = Object.keys(instanceSeenTags);\n for (var i = 0; i < keys.length; i++) {\n var attributeKey = keys[i];\n var tagUnion = objectAssign({}, approvedSeenTags[attributeKey], instanceSeenTags[attributeKey]);\n\n approvedSeenTags[attributeKey] = tagUnion;\n }\n\n return approvedTags;\n }, []).reverse();\n};\n\nvar getInnermostProperty = function getInnermostProperty(propsList, property) {\n for (var i = propsList.length - 1; i >= 0; i--) {\n var props = propsList[i];\n\n if (props.hasOwnProperty(property)) {\n return props[property];\n }\n }\n\n return null;\n};\n\nvar reducePropsToState = function reducePropsToState(propsList) {\n return {\n baseTag: getBaseTagFromPropsList([TAG_PROPERTIES.HREF, TAG_PROPERTIES.TARGET], propsList),\n bodyAttributes: getAttributesFromPropsList(ATTRIBUTE_NAMES.BODY, propsList),\n defer: getInnermostProperty(propsList, HELMET_PROPS.DEFER),\n encode: getInnermostProperty(propsList, HELMET_PROPS.ENCODE_SPECIAL_CHARACTERS),\n htmlAttributes: getAttributesFromPropsList(ATTRIBUTE_NAMES.HTML, propsList),\n linkTags: getTagsFromPropsList(TAG_NAMES.LINK, [TAG_PROPERTIES.REL, TAG_PROPERTIES.HREF], propsList),\n metaTags: getTagsFromPropsList(TAG_NAMES.META, [TAG_PROPERTIES.NAME, TAG_PROPERTIES.CHARSET, TAG_PROPERTIES.HTTPEQUIV, TAG_PROPERTIES.PROPERTY, TAG_PROPERTIES.ITEM_PROP], propsList),\n noscriptTags: getTagsFromPropsList(TAG_NAMES.NOSCRIPT, [TAG_PROPERTIES.INNER_HTML], propsList),\n onChangeClientState: getOnChangeClientState(propsList),\n scriptTags: getTagsFromPropsList(TAG_NAMES.SCRIPT, [TAG_PROPERTIES.SRC, TAG_PROPERTIES.INNER_HTML], propsList),\n styleTags: getTagsFromPropsList(TAG_NAMES.STYLE, [TAG_PROPERTIES.CSS_TEXT], propsList),\n title: getTitleFromPropsList(propsList),\n titleAttributes: getAttributesFromPropsList(ATTRIBUTE_NAMES.TITLE, propsList)\n };\n};\n\nvar rafPolyfill = function () {\n var clock = Date.now();\n\n return function (callback) {\n var currentTime = Date.now();\n\n if (currentTime - clock > 16) {\n clock = currentTime;\n callback(currentTime);\n } else {\n setTimeout(function () {\n rafPolyfill(callback);\n }, 0);\n }\n };\n}();\n\nvar cafPolyfill = function cafPolyfill(id) {\n return clearTimeout(id);\n};\n\nvar requestAnimationFrame = typeof window !== \"undefined\" ? window.requestAnimationFrame && window.requestAnimationFrame.bind(window) || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || rafPolyfill : global.requestAnimationFrame || rafPolyfill;\n\nvar cancelAnimationFrame = typeof window !== \"undefined\" ? window.cancelAnimationFrame || window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || cafPolyfill : global.cancelAnimationFrame || cafPolyfill;\n\nvar warn = function warn(msg) {\n return console && typeof console.warn === \"function\" && console.warn(msg);\n};\n\nvar _helmetCallback = null;\n\nvar handleClientStateChange = function handleClientStateChange(newState) {\n if (_helmetCallback) {\n cancelAnimationFrame(_helmetCallback);\n }\n\n if (newState.defer) {\n _helmetCallback = requestAnimationFrame(function () {\n commitTagChanges(newState, function () {\n _helmetCallback = null;\n });\n });\n } else {\n commitTagChanges(newState);\n _helmetCallback = null;\n }\n};\n\nvar commitTagChanges = function commitTagChanges(newState, cb) {\n var baseTag = newState.baseTag,\n bodyAttributes = newState.bodyAttributes,\n htmlAttributes = newState.htmlAttributes,\n linkTags = newState.linkTags,\n metaTags = newState.metaTags,\n noscriptTags = newState.noscriptTags,\n onChangeClientState = newState.onChangeClientState,\n scriptTags = newState.scriptTags,\n styleTags = newState.styleTags,\n title = newState.title,\n titleAttributes = newState.titleAttributes;\n\n updateAttributes(TAG_NAMES.BODY, bodyAttributes);\n updateAttributes(TAG_NAMES.HTML, htmlAttributes);\n\n updateTitle(title, titleAttributes);\n\n var tagUpdates = {\n baseTag: updateTags(TAG_NAMES.BASE, baseTag),\n linkTags: updateTags(TAG_NAMES.LINK, linkTags),\n metaTags: updateTags(TAG_NAMES.META, metaTags),\n noscriptTags: updateTags(TAG_NAMES.NOSCRIPT, noscriptTags),\n scriptTags: updateTags(TAG_NAMES.SCRIPT, scriptTags),\n styleTags: updateTags(TAG_NAMES.STYLE, styleTags)\n };\n\n var addedTags = {};\n var removedTags = {};\n\n Object.keys(tagUpdates).forEach(function (tagType) {\n var _tagUpdates$tagType = tagUpdates[tagType],\n newTags = _tagUpdates$tagType.newTags,\n oldTags = _tagUpdates$tagType.oldTags;\n\n\n if (newTags.length) {\n addedTags[tagType] = newTags;\n }\n if (oldTags.length) {\n removedTags[tagType] = tagUpdates[tagType].oldTags;\n }\n });\n\n cb && cb();\n\n onChangeClientState(newState, addedTags, removedTags);\n};\n\nvar flattenArray = function flattenArray(possibleArray) {\n return Array.isArray(possibleArray) ? possibleArray.join(\"\") : possibleArray;\n};\n\nvar updateTitle = function updateTitle(title, attributes) {\n if (typeof title !== \"undefined\" && document.title !== title) {\n document.title = flattenArray(title);\n }\n\n updateAttributes(TAG_NAMES.TITLE, attributes);\n};\n\nvar updateAttributes = function updateAttributes(tagName, attributes) {\n var elementTag = document.getElementsByTagName(tagName)[0];\n\n if (!elementTag) {\n return;\n }\n\n var helmetAttributeString = elementTag.getAttribute(HELMET_ATTRIBUTE);\n var helmetAttributes = helmetAttributeString ? helmetAttributeString.split(\",\") : [];\n var attributesToRemove = [].concat(helmetAttributes);\n var attributeKeys = Object.keys(attributes);\n\n for (var i = 0; i < attributeKeys.length; i++) {\n var attribute = attributeKeys[i];\n var value = attributes[attribute] || \"\";\n\n if (elementTag.getAttribute(attribute) !== value) {\n elementTag.setAttribute(attribute, value);\n }\n\n if (helmetAttributes.indexOf(attribute) === -1) {\n helmetAttributes.push(attribute);\n }\n\n var indexToSave = attributesToRemove.indexOf(attribute);\n if (indexToSave !== -1) {\n attributesToRemove.splice(indexToSave, 1);\n }\n }\n\n for (var _i = attributesToRemove.length - 1; _i >= 0; _i--) {\n elementTag.removeAttribute(attributesToRemove[_i]);\n }\n\n if (helmetAttributes.length === attributesToRemove.length) {\n elementTag.removeAttribute(HELMET_ATTRIBUTE);\n } else if (elementTag.getAttribute(HELMET_ATTRIBUTE) !== attributeKeys.join(\",\")) {\n elementTag.setAttribute(HELMET_ATTRIBUTE, attributeKeys.join(\",\"));\n }\n};\n\nvar updateTags = function updateTags(type, tags) {\n var headElement = document.head || document.querySelector(TAG_NAMES.HEAD);\n var tagNodes = headElement.querySelectorAll(type + \"[\" + HELMET_ATTRIBUTE + \"]\");\n var oldTags = Array.prototype.slice.call(tagNodes);\n var newTags = [];\n var indexToDelete = void 0;\n\n if (tags && tags.length) {\n tags.forEach(function (tag) {\n var newElement = document.createElement(type);\n\n for (var attribute in tag) {\n if (tag.hasOwnProperty(attribute)) {\n if (attribute === TAG_PROPERTIES.INNER_HTML) {\n newElement.innerHTML = tag.innerHTML;\n } else if (attribute === TAG_PROPERTIES.CSS_TEXT) {\n if (newElement.styleSheet) {\n newElement.styleSheet.cssText = tag.cssText;\n } else {\n newElement.appendChild(document.createTextNode(tag.cssText));\n }\n } else {\n var value = typeof tag[attribute] === \"undefined\" ? \"\" : tag[attribute];\n newElement.setAttribute(attribute, value);\n }\n }\n }\n\n newElement.setAttribute(HELMET_ATTRIBUTE, \"true\");\n\n // Remove a duplicate tag from domTagstoRemove, so it isn't cleared.\n if (oldTags.some(function (existingTag, index) {\n indexToDelete = index;\n return newElement.isEqualNode(existingTag);\n })) {\n oldTags.splice(indexToDelete, 1);\n } else {\n newTags.push(newElement);\n }\n });\n }\n\n oldTags.forEach(function (tag) {\n return tag.parentNode.removeChild(tag);\n });\n newTags.forEach(function (tag) {\n return headElement.appendChild(tag);\n });\n\n return {\n oldTags: oldTags,\n newTags: newTags\n };\n};\n\nvar generateElementAttributesAsString = function generateElementAttributesAsString(attributes) {\n return Object.keys(attributes).reduce(function (str, key) {\n var attr = typeof attributes[key] !== \"undefined\" ? key + \"=\\\"\" + attributes[key] + \"\\\"\" : \"\" + key;\n return str ? str + \" \" + attr : attr;\n }, \"\");\n};\n\nvar generateTitleAsString = function generateTitleAsString(type, title, attributes, encode) {\n var attributeString = generateElementAttributesAsString(attributes);\n var flattenedTitle = flattenArray(title);\n return attributeString ? \"<\" + type + \" \" + HELMET_ATTRIBUTE + \"=\\\"true\\\" \" + attributeString + \">\" + encodeSpecialCharacters(flattenedTitle, encode) + \"</\" + type + \">\" : \"<\" + type + \" \" + HELMET_ATTRIBUTE + \"=\\\"true\\\">\" + encodeSpecialCharacters(flattenedTitle, encode) + \"</\" + type + \">\";\n};\n\nvar generateTagsAsString = function generateTagsAsString(type, tags, encode) {\n return tags.reduce(function (str, tag) {\n var attributeHtml = Object.keys(tag).filter(function (attribute) {\n return !(attribute === TAG_PROPERTIES.INNER_HTML || attribute === TAG_PROPERTIES.CSS_TEXT);\n }).reduce(function (string, attribute) {\n var attr = typeof tag[attribute] === \"undefined\" ? attribute : attribute + \"=\\\"\" + encodeSpecialCharacters(tag[attribute], encode) + \"\\\"\";\n return string ? string + \" \" + attr : attr;\n }, \"\");\n\n var tagContent = tag.innerHTML || tag.cssText || \"\";\n\n var isSelfClosing = SELF_CLOSING_TAGS.indexOf(type) === -1;\n\n return str + \"<\" + type + \" \" + HELMET_ATTRIBUTE + \"=\\\"true\\\" \" + attributeHtml + (isSelfClosing ? \"/>\" : \">\" + tagContent + \"</\" + type + \">\");\n }, \"\");\n};\n\nvar convertElementAttributestoReactProps = function convertElementAttributestoReactProps(attributes) {\n var initProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n return Object.keys(attributes).reduce(function (obj, key) {\n obj[REACT_TAG_MAP[key] || key] = attributes[key];\n return obj;\n }, initProps);\n};\n\nvar convertReactPropstoHtmlAttributes = function convertReactPropstoHtmlAttributes(props) {\n var initAttributes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n return Object.keys(props).reduce(function (obj, key) {\n obj[HTML_TAG_MAP[key] || key] = props[key];\n return obj;\n }, initAttributes);\n};\n\nvar generateTitleAsReactComponent = function generateTitleAsReactComponent(type, title, attributes) {\n var _initProps;\n\n // assigning into an array to define toString function on it\n var initProps = (_initProps = {\n key: title\n }, _initProps[HELMET_ATTRIBUTE] = true, _initProps);\n var props = convertElementAttributestoReactProps(attributes, initProps);\n\n return [React.createElement(TAG_NAMES.TITLE, props, title)];\n};\n\nvar generateTagsAsReactComponent = function generateTagsAsReactComponent(type, tags) {\n return tags.map(function (tag, i) {\n var _mappedTag;\n\n var mappedTag = (_mappedTag = {\n key: i\n }, _mappedTag[HELMET_ATTRIBUTE] = true, _mappedTag);\n\n Object.keys(tag).forEach(function (attribute) {\n var mappedAttribute = REACT_TAG_MAP[attribute] || attribute;\n\n if (mappedAttribute === TAG_PROPERTIES.INNER_HTML || mappedAttribute === TAG_PROPERTIES.CSS_TEXT) {\n var content = tag.innerHTML || tag.cssText;\n mappedTag.dangerouslySetInnerHTML = { __html: content };\n } else {\n mappedTag[mappedAttribute] = tag[attribute];\n }\n });\n\n return React.createElement(type, mappedTag);\n });\n};\n\nvar getMethodsForTag = function getMethodsForTag(type, tags, encode) {\n switch (type) {\n case TAG_NAMES.TITLE:\n return {\n toComponent: function toComponent() {\n return generateTitleAsReactComponent(type, tags.title, tags.titleAttributes, encode);\n },\n toString: function toString() {\n return generateTitleAsString(type, tags.title, tags.titleAttributes, encode);\n }\n };\n case ATTRIBUTE_NAMES.BODY:\n case ATTRIBUTE_NAMES.HTML:\n return {\n toComponent: function toComponent() {\n return convertElementAttributestoReactProps(tags);\n },\n toString: function toString() {\n return generateElementAttributesAsString(tags);\n }\n };\n default:\n return {\n toComponent: function toComponent() {\n return generateTagsAsReactComponent(type, tags);\n },\n toString: function toString() {\n return generateTagsAsString(type, tags, encode);\n }\n };\n }\n};\n\nvar mapStateOnServer = function mapStateOnServer(_ref) {\n var baseTag = _ref.baseTag,\n bodyAttributes = _ref.bodyAttributes,\n encode = _ref.encode,\n htmlAttributes = _ref.htmlAttributes,\n linkTags = _ref.linkTags,\n metaTags = _ref.metaTags,\n noscriptTags = _ref.noscriptTags,\n scriptTags = _ref.scriptTags,\n styleTags = _ref.styleTags,\n _ref$title = _ref.title,\n title = _ref$title === undefined ? \"\" : _ref$title,\n titleAttributes = _ref.titleAttributes;\n return {\n base: getMethodsForTag(TAG_NAMES.BASE, baseTag, encode),\n bodyAttributes: getMethodsForTag(ATTRIBUTE_NAMES.BODY, bodyAttributes, encode),\n htmlAttributes: getMethodsForTag(ATTRIBUTE_NAMES.HTML, htmlAttributes, encode),\n link: getMethodsForTag(TAG_NAMES.LINK, linkTags, encode),\n meta: getMethodsForTag(TAG_NAMES.META, metaTags, encode),\n noscript: getMethodsForTag(TAG_NAMES.NOSCRIPT, noscriptTags, encode),\n script: getMethodsForTag(TAG_NAMES.SCRIPT, scriptTags, encode),\n style: getMethodsForTag(TAG_NAMES.STYLE, styleTags, encode),\n title: getMethodsForTag(TAG_NAMES.TITLE, { title: title, titleAttributes: titleAttributes }, encode)\n };\n};\n\nvar Helmet = function Helmet(Component) {\n var _class, _temp;\n\n return _temp = _class = function (_React$Component) {\n inherits(HelmetWrapper, _React$Component);\n\n function HelmetWrapper() {\n classCallCheck(this, HelmetWrapper);\n return possibleConstructorReturn(this, _React$Component.apply(this, arguments));\n }\n\n HelmetWrapper.prototype.shouldComponentUpdate = function shouldComponentUpdate(nextProps) {\n return !isEqual(this.props, nextProps);\n };\n\n HelmetWrapper.prototype.mapNestedChildrenToProps = function mapNestedChildrenToProps(child, nestedChildren) {\n if (!nestedChildren) {\n return null;\n }\n\n switch (child.type) {\n case TAG_NAMES.SCRIPT:\n case TAG_NAMES.NOSCRIPT:\n return {\n innerHTML: nestedChildren\n };\n\n case TAG_NAMES.STYLE:\n return {\n cssText: nestedChildren\n };\n }\n\n throw new Error(\"<\" + child.type + \" /> elements are self-closing and can not contain children. Refer to our API for more information.\");\n };\n\n HelmetWrapper.prototype.flattenArrayTypeChildren = function flattenArrayTypeChildren(_ref) {\n var _babelHelpers$extends;\n\n var child = _ref.child,\n arrayTypeChildren = _ref.arrayTypeChildren,\n newChildProps = _ref.newChildProps,\n nestedChildren = _ref.nestedChildren;\n\n return _extends({}, arrayTypeChildren, (_babelHelpers$extends = {}, _babelHelpers$extends[child.type] = [].concat(arrayTypeChildren[child.type] || [], [_extends({}, newChildProps, this.mapNestedChildrenToProps(child, nestedChildren))]), _babelHelpers$extends));\n };\n\n HelmetWrapper.prototype.mapObjectTypeChildren = function mapObjectTypeChildren(_ref2) {\n var _babelHelpers$extends2, _babelHelpers$extends3;\n\n var child = _ref2.child,\n newProps = _ref2.newProps,\n newChildProps = _ref2.newChildProps,\n nestedChildren = _ref2.nestedChildren;\n\n switch (child.type) {\n case TAG_NAMES.TITLE:\n return _extends({}, newProps, (_babelHelpers$extends2 = {}, _babelHelpers$extends2[child.type] = nestedChildren, _babelHelpers$extends2.titleAttributes = _extends({}, newChildProps), _babelHelpers$extends2));\n\n case TAG_NAMES.BODY:\n return _extends({}, newProps, {\n bodyAttributes: _extends({}, newChildProps)\n });\n\n case TAG_NAMES.HTML:\n return _extends({}, newProps, {\n htmlAttributes: _extends({}, newChildProps)\n });\n }\n\n return _extends({}, newProps, (_babelHelpers$extends3 = {}, _babelHelpers$extends3[child.type] = _extends({}, newChildProps), _babelHelpers$extends3));\n };\n\n HelmetWrapper.prototype.mapArrayTypeChildrenToProps = function mapArrayTypeChildrenToProps(arrayTypeChildren, newProps) {\n var newFlattenedProps = _extends({}, newProps);\n\n Object.keys(arrayTypeChildren).forEach(function (arrayChildName) {\n var _babelHelpers$extends4;\n\n newFlattenedProps = _extends({}, newFlattenedProps, (_babelHelpers$extends4 = {}, _babelHelpers$extends4[arrayChildName] = arrayTypeChildren[arrayChildName], _babelHelpers$extends4));\n });\n\n return newFlattenedProps;\n };\n\n HelmetWrapper.prototype.warnOnInvalidChildren = function warnOnInvalidChildren(child, nestedChildren) {\n if (process.env.NODE_ENV !== \"production\") {\n if (!VALID_TAG_NAMES.some(function (name) {\n return child.type === name;\n })) {\n if (typeof child.type === \"function\") {\n return warn(\"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.\");\n }\n\n return warn(\"Only elements types \" + VALID_TAG_NAMES.join(\", \") + \" are allowed. Helmet does not support rendering <\" + child.type + \"> elements. Refer to our API for more information.\");\n }\n\n if (nestedChildren && typeof nestedChildren !== \"string\" && (!Array.isArray(nestedChildren) || nestedChildren.some(function (nestedChild) {\n return typeof nestedChild !== \"string\";\n }))) {\n throw new Error(\"Helmet expects a string as a child of <\" + child.type + \">. Did you forget to wrap your children in braces? ( <\" + child.type + \">{``}</\" + child.type + \"> ) Refer to our API for more information.\");\n }\n }\n\n return true;\n };\n\n HelmetWrapper.prototype.mapChildrenToProps = function mapChildrenToProps(children, newProps) {\n var _this2 = this;\n\n var arrayTypeChildren = {};\n\n React.Children.forEach(children, function (child) {\n if (!child || !child.props) {\n return;\n }\n\n var _child$props = child.props,\n nestedChildren = _child$props.children,\n childProps = objectWithoutProperties(_child$props, [\"children\"]);\n\n var newChildProps = convertReactPropstoHtmlAttributes(childProps);\n\n _this2.warnOnInvalidChildren(child, nestedChildren);\n\n switch (child.type) {\n case TAG_NAMES.LINK:\n case TAG_NAMES.META:\n case TAG_NAMES.NOSCRIPT:\n case TAG_NAMES.SCRIPT:\n case TAG_NAMES.STYLE:\n arrayTypeChildren = _this2.flattenArrayTypeChildren({\n child: child,\n arrayTypeChildren: arrayTypeChildren,\n newChildProps: newChildProps,\n nestedChildren: nestedChildren\n });\n break;\n\n default:\n newProps = _this2.mapObjectTypeChildren({\n child: child,\n newProps: newProps,\n newChildProps: newChildProps,\n nestedChildren: nestedChildren\n });\n break;\n }\n });\n\n newProps = this.mapArrayTypeChildrenToProps(arrayTypeChildren, newProps);\n return newProps;\n };\n\n HelmetWrapper.prototype.render = function render() {\n var _props = this.props,\n children = _props.children,\n props = objectWithoutProperties(_props, [\"children\"]);\n\n var newProps = _extends({}, props);\n\n if (children) {\n newProps = this.mapChildrenToProps(children, newProps);\n }\n\n return React.createElement(Component, newProps);\n };\n\n createClass(HelmetWrapper, null, [{\n key: \"canUseDOM\",\n\n\n // Component.peek comes from react-side-effect:\n // For testing, you may use a static peek() method available on the returned component.\n // It lets you get the current state without resetting the mounted instance stack.\n // Don’t use it for anything other than testing.\n\n /**\n * @param {Object} base: {\"target\": \"_blank\", \"href\": \"http://mysite.com/\"}\n * @param {Object} bodyAttributes: {\"className\": \"root\"}\n * @param {String} defaultTitle: \"Default Title\"\n * @param {Boolean} defer: true\n * @param {Boolean} encodeSpecialCharacters: true\n * @param {Object} htmlAttributes: {\"lang\": \"en\", \"amp\": undefined}\n * @param {Array} link: [{\"rel\": \"canonical\", \"href\": \"http://mysite.com/example\"}]\n * @param {Array} meta: [{\"name\": \"description\", \"content\": \"Test description\"}]\n * @param {Array} noscript: [{\"innerHTML\": \"<img src='http://mysite.com/js/test.js'\"}]\n * @param {Function} onChangeClientState: \"(newState) => console.log(newState)\"\n * @param {Array} script: [{\"type\": \"text/javascript\", \"src\": \"http://mysite.com/js/test.js\"}]\n * @param {Array} style: [{\"type\": \"text/css\", \"cssText\": \"div { display: block; color: blue; }\"}]\n * @param {String} title: \"Title\"\n * @param {Object} titleAttributes: {\"itemprop\": \"name\"}\n * @param {String} titleTemplate: \"MySite.com - %s\"\n */\n set: function set$$1(canUseDOM) {\n Component.canUseDOM = canUseDOM;\n }\n }]);\n return HelmetWrapper;\n }(React.Component), _class.propTypes = {\n base: PropTypes.object,\n bodyAttributes: PropTypes.object,\n children: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.node), PropTypes.node]),\n defaultTitle: PropTypes.string,\n defer: PropTypes.bool,\n encodeSpecialCharacters: PropTypes.bool,\n htmlAttributes: PropTypes.object,\n link: PropTypes.arrayOf(PropTypes.object),\n meta: PropTypes.arrayOf(PropTypes.object),\n noscript: PropTypes.arrayOf(PropTypes.object),\n onChangeClientState: PropTypes.func,\n script: PropTypes.arrayOf(PropTypes.object),\n style: PropTypes.arrayOf(PropTypes.object),\n title: PropTypes.string,\n titleAttributes: PropTypes.object,\n titleTemplate: PropTypes.string\n }, _class.defaultProps = {\n defer: true,\n encodeSpecialCharacters: true\n }, _class.peek = Component.peek, _class.rewind = function () {\n var mappedState = Component.rewind();\n if (!mappedState) {\n // provide fallback if mappedState is undefined\n mappedState = mapStateOnServer({\n baseTag: [],\n bodyAttributes: {},\n encodeSpecialCharacters: true,\n htmlAttributes: {},\n linkTags: [],\n metaTags: [],\n noscriptTags: [],\n scriptTags: [],\n styleTags: [],\n title: \"\",\n titleAttributes: {}\n });\n }\n\n return mappedState;\n }, _temp;\n};\n\nvar NullComponent = function NullComponent() {\n return null;\n};\n\nvar HelmetSideEffects = withSideEffect(reducePropsToState, handleClientStateChange, mapStateOnServer)(NullComponent);\n\nvar HelmetExport = Helmet(HelmetSideEffects);\nHelmetExport.renderStatic = HelmetExport.rewind;\n\nexport default HelmetExport;\nexport { HelmetExport as Helmet };\n","'use strict';\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar React = require('react');\nvar React__default = _interopDefault(React);\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nfunction withSideEffect(reducePropsToState, handleStateChangeOnClient, mapStateOnServer) {\n if (typeof reducePropsToState !== 'function') {\n throw new Error('Expected reducePropsToState to be a function.');\n }\n\n if (typeof handleStateChangeOnClient !== 'function') {\n throw new Error('Expected handleStateChangeOnClient to be a function.');\n }\n\n if (typeof mapStateOnServer !== 'undefined' && typeof mapStateOnServer !== 'function') {\n throw new Error('Expected mapStateOnServer to either be undefined or a function.');\n }\n\n function getDisplayName(WrappedComponent) {\n return WrappedComponent.displayName || WrappedComponent.name || 'Component';\n }\n\n return function wrap(WrappedComponent) {\n if (typeof WrappedComponent !== 'function') {\n throw new Error('Expected WrappedComponent to be a React component.');\n }\n\n var mountedInstances = [];\n var state;\n\n function emitChange() {\n state = reducePropsToState(mountedInstances.map(function (instance) {\n return instance.props;\n }));\n\n if (SideEffect.canUseDOM) {\n handleStateChangeOnClient(state);\n } else if (mapStateOnServer) {\n state = mapStateOnServer(state);\n }\n }\n\n var SideEffect =\n /*#__PURE__*/\n function (_PureComponent) {\n _inheritsLoose(SideEffect, _PureComponent);\n\n function SideEffect() {\n return _PureComponent.apply(this, arguments) || this;\n }\n\n // Try to use displayName of wrapped component\n // Expose canUseDOM so tests can monkeypatch it\n SideEffect.peek = function peek() {\n return state;\n };\n\n SideEffect.rewind = function rewind() {\n if (SideEffect.canUseDOM) {\n throw new Error('You may only call rewind() on the server. Call peek() to read the current state.');\n }\n\n var recordedState = state;\n state = undefined;\n mountedInstances = [];\n return recordedState;\n };\n\n var _proto = SideEffect.prototype;\n\n _proto.UNSAFE_componentWillMount = function UNSAFE_componentWillMount() {\n mountedInstances.push(this);\n emitChange();\n };\n\n _proto.componentDidUpdate = function componentDidUpdate() {\n emitChange();\n };\n\n _proto.componentWillUnmount = function componentWillUnmount() {\n var index = mountedInstances.indexOf(this);\n mountedInstances.splice(index, 1);\n emitChange();\n };\n\n _proto.render = function render() {\n return React__default.createElement(WrappedComponent, this.props);\n };\n\n return SideEffect;\n }(React.PureComponent);\n\n _defineProperty(SideEffect, \"displayName\", \"SideEffect(\" + getDisplayName(WrappedComponent) + \")\");\n\n _defineProperty(SideEffect, \"canUseDOM\", canUseDOM);\n\n return SideEffect;\n };\n}\n\nmodule.exports = withSideEffect;\n"],"names":["ATTRIBUTE_NAMES","TAG_NAMES","BASE","BODY","HEAD","HTML","LINK","META","NOSCRIPT","SCRIPT","STYLE","TITLE","TAG_PROPERTIES","Object","keys","map","name","REACT_TAG_MAP","accesskey","charset","class","contenteditable","contextmenu","itemprop","tabindex","HELMET_PROPS","HTML_TAG_MAP","reduce","obj","key","SELF_CLOSING_TAGS","HELMET_ATTRIBUTE","_typeof","Symbol","iterator","constructor","prototype","classCallCheck","instance","Constructor","TypeError","createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","defineProperty","protoProps","staticProps","_extends","assign","arguments","source","hasOwnProperty","call","objectWithoutProperties","indexOf","possibleConstructorReturn","self","ReferenceError","encodeSpecialCharacters","str","encode","undefined","String","replace","getTitleFromPropsList","propsList","innermostTitle","getInnermostProperty","innermostTemplate","Array","isArray","join","innermostDefaultTitle","getOnChangeClientState","getAttributesFromPropsList","tagType","filter","tagAttrs","current","getBaseTagFromPropsList","primaryAttributes","reverse","innermostBaseTag","tag","lowerCaseAttributeKey","toLowerCase","concat","getTagsFromPropsList","tagName","approvedSeenTags","warn","approvedTags","instanceTags","instanceSeenTags","primaryAttributeKey","attributeKey","value","forEach","push","tagUnion","objectAssign","property","rafPolyfill","clock","Date","now","callback","currentTime","setTimeout","cafPolyfill","id","clearTimeout","requestAnimationFrame","window","bind","webkitRequestAnimationFrame","mozRequestAnimationFrame","global","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","msg","console","_helmetCallback","commitTagChanges","newState","cb","baseTag","bodyAttributes","htmlAttributes","linkTags","metaTags","noscriptTags","onChangeClientState","scriptTags","styleTags","title","titleAttributes","updateAttributes","updateTitle","tagUpdates","updateTags","addedTags","removedTags","_tagUpdates$tagType","newTags","oldTags","flattenArray","possibleArray","attributes","document","elementTag","getElementsByTagName","helmetAttributeString","getAttribute","helmetAttributes","split","attributesToRemove","attributeKeys","attribute","setAttribute","indexToSave","splice","_i","removeAttribute","type","tags","headElement","head","querySelector","tagNodes","querySelectorAll","slice","indexToDelete","newElement","createElement","innerHTML","styleSheet","cssText","appendChild","createTextNode","some","existingTag","index","isEqualNode","parentNode","removeChild","generateElementAttributesAsString","attr","convertElementAttributestoReactProps","initProps","getMethodsForTag","toComponent","_initProps","React","generateTitleAsReactComponent","toString","attributeString","flattenedTitle","generateTitleAsString","_mappedTag","mappedTag","mappedAttribute","content","dangerouslySetInnerHTML","__html","generateTagsAsReactComponent","attributeHtml","string","tagContent","isSelfClosing","generateTagsAsString","mapStateOnServer","_ref","_ref$title","base","link","meta","noscript","script","style","HelmetExport","Component","_class","_temp","_React$Component","HelmetWrapper","this","apply","subClass","superClass","create","setPrototypeOf","__proto__","inherits","shouldComponentUpdate","nextProps","isEqual","mapNestedChildrenToProps","child","nestedChildren","Error","flattenArrayTypeChildren","_babelHelpers$extends","arrayTypeChildren","newChildProps","mapObjectTypeChildren","_ref2","_babelHelpers$extends2","_babelHelpers$extends3","newProps","mapArrayTypeChildrenToProps","newFlattenedProps","arrayChildName","_babelHelpers$extends4","warnOnInvalidChildren","mapChildrenToProps","children","_this2","_child$props","initAttributes","convertReactPropstoHtmlAttributes","render","_props","set","canUseDOM","propTypes","PropTypes","defaultTitle","defer","titleTemplate","defaultProps","peek","rewind","mappedState","Helmet","withSideEffect","renderStatic","ex","require","React__default","_defineProperty","module","exports","reducePropsToState","handleStateChangeOnClient","WrappedComponent","state","mountedInstances","emitChange","SideEffect","_PureComponent","recordedState","_proto","UNSAFE_componentWillMount","componentDidUpdate","componentWillUnmount","PureComponent","displayName","getDisplayName"],"sourceRoot":""}
@@ -1 +1 @@
1
- {"version":3,"file":"static/js/29.1c8de512.chunk.js","mappings":"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","sources":["components/Highlight/Highlight.tsx","components/LanguageSupportTooltip/LanguageSupportTooltip.tsx","components/PackageCard/constants.ts","components/PackageCard/testIds.ts","components/PackageCard/Details.tsx","components/PackageCard/EditorsNote.tsx","components/PackageCard/Heading.tsx","components/PackageCard/Highlight.tsx","components/PackageLanguages/PackageLanguages.tsx","components/PackageCard/Languages.tsx","components/PackageCard/Tags.tsx","components/PackageCard/WideCard.tsx","components/PackageCard/PackageCard.tsx","components/PackageTag/PackageTag.tsx","constants/pageInfo.ts","components/Page/Page.tsx","components/Time/Time.tsx","hooks/useConfigValue/useConfigValue.ts","hooks/useLanguage/useLanguage.ts","hooks/useQueryParams/useQueryParams.ts","util/package.ts"],"sourcesContent":["import { Stack, Image, Text, useColorModeValue } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\n\ninterface HighlightProps {\n label: string;\n color?: string;\n icon?: string;\n}\n\nexport const Highlight: FunctionComponent<HighlightProps> = ({\n label,\n color,\n icon,\n}: HighlightProps) => {\n const brightness = useColorModeValue(\"none\", \"brightness(1.75)\");\n return (\n <Stack align=\"center\" direction=\"row\" filter={brightness} spacing={2}>\n <Image alt={`${label} icon`} src={icon} w={4} />\n <Text color={color} fontWeight=\"bold\">\n {label}\n </Text>\n </Stack>\n );\n};\n","import { Tooltip } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport {\n Language,\n LANGUAGE_NAME_MAP,\n TEMP_SUPPORTED_LANGUAGES,\n} from \"../../constants/languages\";\n\nexport interface LanguageSupportTooltipProps {\n language: Language;\n}\n\nexport const LanguageSupportTooltip: FunctionComponent<\n LanguageSupportTooltipProps\n> = ({ children, language }) => {\n const isSupported = TEMP_SUPPORTED_LANGUAGES.has(language);\n const langName = LANGUAGE_NAME_MAP[language];\n\n const message = isSupported\n ? `Click to view documentation in ${langName}`\n : `Documentation support for ${langName} is coming soon!`;\n\n return (\n <Tooltip hasArrow label={message} placement=\"top-start\">\n <span>{children}</span>\n </Tooltip>\n );\n};\n","export enum PackageCardType {\n Wide = \"wide\",\n}\n","import { createTestIds } from \"../../util/createTestIds\";\n\nconst testIds = createTestIds(\"packageCard\", [\n \"author\",\n \"description\",\n \"downloads\",\n \"languages\",\n \"published\",\n \"title\",\n \"version\",\n \"comment\",\n \"wideContainer\",\n] as const);\n\nexport default testIds;\n","import { Text, Tooltip } from \"@chakra-ui/react\";\nimport { formatDistanceToNowStrict } from \"date-fns\";\nimport { FunctionComponent, ReactChild } from \"react\";\nimport { useStats } from \"../../hooks/useStats\";\nimport { getSearchPath } from \"../../util/url\";\nimport { NavLink } from \"../NavLink\";\nimport { Time } from \"../Time\";\nimport { usePackageCard } from \"./PackageCard\";\nimport testIds from \"./testIds\";\n\ninterface DetailProps {\n \"data-testid\": string;\n tooltip?: string;\n value: ReactChild;\n}\n\nconst Detail: FunctionComponent<DetailProps> = ({\n \"data-testid\": dataTestid,\n tooltip,\n value,\n}) => (\n <Tooltip hasArrow isDisabled={!tooltip} label={tooltip} placement=\"left\">\n {/* zIndex required to allow tooltip to display due to card link overlay */}\n <Text data-testid={dataTestid} fontSize=\"xs\" zIndex={1}>\n {value}\n </Text>\n </Tooltip>\n);\n\nexport const Details: FunctionComponent = () => {\n const {\n author,\n metadata: { date },\n name,\n } = usePackageCard();\n\n const { data } = useStats();\n const downloads: number | undefined = data?.packages?.[name]?.downloads?.npm;\n\n const authorName = typeof author === \"string\" ? author : author.name;\n const publishDate = new Date(date);\n\n return (\n <>\n {downloads !== undefined && (\n <Detail\n data-testid={testIds.downloads}\n tooltip=\"Download numbers are periodically sourced from the npm registry\"\n value={`${downloads.toLocaleString()} weekly downloads`}\n />\n )}\n <Detail\n data-testid={testIds.published}\n value={\n <Time\n date={publishDate}\n fontSize=\"xs\"\n formattedDate={formatDistanceToNowStrict(publishDate, {\n addSuffix: true,\n })}\n />\n }\n />\n <Detail\n data-testid={testIds.author}\n value={\n <>\n By{\" \"}\n <NavLink\n color=\"link\"\n to={getSearchPath({\n query: authorName,\n })}\n >\n {authorName}\n </NavLink>\n </>\n }\n />\n </>\n );\n};\n","import { Text } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport testIds from \"./testIds\";\n\nexport const EditorsNote: FunctionComponent<{ comment?: string }> = ({\n comment,\n}) => {\n return (\n <Text\n data-testid={testIds.comment}\n fontSize=\"md\"\n lineHeight=\"tall\"\n noOfLines={4}\n >\n <Text as=\"span\" color=\"blue.500\" fontWeight=\"bold\">\n Editor&apos;s note:{\" \"}\n </Text>\n {comment}\n </Text>\n );\n};\n","import {\n Flex,\n Heading as ChakraHeading,\n LinkOverlay,\n Text,\n} from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { eventName } from \"../../contexts/Analytics\";\nimport { useLanguage } from \"../../hooks/useLanguage\";\nimport { getPackagePath } from \"../../util/url\";\nimport { CDKTypeBadge } from \"../CDKType\";\nimport { EditorsNote } from \"./EditorsNote\";\nimport { usePackageCard } from \"./PackageCard\";\nimport testIds from \"./testIds\";\n\nexport const Heading: FunctionComponent = () => {\n const [currentLanguage] = useLanguage();\n const {\n dataEvent,\n description,\n comment,\n constructFrameworks,\n name,\n version,\n } = usePackageCard();\n\n return (\n <>\n <LinkOverlay\n as={Link}\n data-event={\n dataEvent ? eventName(dataEvent, \"Package Card\", name) : undefined\n }\n to={getPackagePath({\n name,\n version,\n language: currentLanguage,\n })}\n >\n <Flex align=\"center\">\n <CDKTypeBadge\n constructFrameworks={constructFrameworks}\n mr={2}\n zIndex={1}\n />\n <ChakraHeading\n as=\"h3\"\n color=\"textPrimary\"\n data-testid={testIds.title}\n fontSize=\"md\"\n fontWeight=\"bold\"\n wordBreak=\"normal\"\n >\n {name}\n </ChakraHeading>\n </Flex>\n </LinkOverlay>\n {comment ? (\n <EditorsNote comment={comment} />\n ) : (\n <Text\n color=\"textPrimary\"\n data-testid={testIds.description}\n fontSize=\"md\"\n lineHeight=\"tall\"\n noOfLines={4}\n >\n {description || \"No description available.\"}\n </Text>\n )}\n </>\n );\n};\n","import { Box } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { highlightsFrom } from \"../../util/package\";\nimport { Highlight as HighlightComponent } from \"../Highlight\";\nimport { usePackageCard } from \"./PackageCard\";\n\nexport const Highlight: FunctionComponent = () => {\n const { packageTags = [] } = usePackageCard()?.metadata ?? {};\n const [highlight] = highlightsFrom(packageTags);\n\n if (!highlight) return null;\n\n return (\n <Box fontSize=\"xs\">\n <HighlightComponent {...highlight} />\n </Box>\n );\n};\n","import type { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport {\n Language,\n LANGUAGES,\n LANGUAGE_RENDER_MAP,\n TEMP_SUPPORTED_LANGUAGES,\n} from \"../../constants/languages\";\nimport { getPackagePath } from \"../../util/url\";\nimport { LanguageSupportTooltip } from \"../LanguageSupportTooltip\";\n\nconst sizes = {\n sm: 5,\n md: 6,\n lg: 8,\n};\n\nexport interface PackageLanguagesProps {\n isRounded?: boolean;\n languages?: Partial<Record<Language, unknown>>;\n name: string;\n size?: \"sm\" | \"md\" | \"lg\";\n version: string;\n}\n\nexport const PackageLanguages: FunctionComponent<PackageLanguagesProps> = ({\n isRounded = false,\n languages,\n name: packageName,\n size = \"md\",\n version,\n}) => {\n const targets = Object.keys(languages ?? {}) as Language[];\n return (\n <>\n {Object.entries(LANGUAGE_RENDER_MAP)\n // Ensure entries are always sorted in a stable way\n .sort(\n ([left], [right]) =>\n LANGUAGES.indexOf(left as Language) -\n LANGUAGES.indexOf(right as Language)\n )\n .map(([lang, info]) => {\n const language = lang as Language;\n\n const isSupportedByLibrary =\n language === Language.TypeScript || targets.includes(language);\n\n const isSupportedByConstructHub =\n language === Language.TypeScript || // TypeScript is always supported\n // Otherwise, the language must be supported by ConstructHub\n TEMP_SUPPORTED_LANGUAGES.has(language);\n\n if (!isSupportedByLibrary) return null;\n\n const { name, icon: Icon } = info;\n\n const icon = (\n <Icon\n aria-label={`Supports ${name}`}\n borderRadius={isRounded ? \"50%\" : 0}\n h={sizes[size]}\n opacity={isSupportedByConstructHub ? 1 : 0.2}\n w={sizes[size]}\n />\n );\n\n return (\n <LanguageSupportTooltip key={language} language={language}>\n {isSupportedByConstructHub ? (\n <Link\n aria-label={`View package docs for ${language}`}\n to={getPackagePath({ name: packageName, version, language })}\n >\n {icon}\n </Link>\n ) : (\n icon\n )}\n </LanguageSupportTooltip>\n );\n })}\n </>\n );\n};\n","import type { FunctionComponent } from \"react\";\nimport { PackageLanguages } from \"../PackageLanguages\";\nimport { usePackageCard } from \"./PackageCard\";\n\nexport const Languages: FunctionComponent = () => {\n const pkg = usePackageCard();\n return <PackageLanguages {...pkg} size=\"sm\" />;\n};\n","import { FunctionComponent } from \"react\";\nimport { tagObjectsFrom } from \"../../util/package\";\nimport { PackageTag } from \"../PackageTag\";\nimport { usePackageCard } from \"./PackageCard\";\n\nexport const Tags: FunctionComponent = () => {\n const {\n keywords = [],\n metadata: { packageTags = [] },\n } = usePackageCard();\n\n const tags = tagObjectsFrom({\n packageTags,\n keywords,\n });\n\n return (\n <>\n {tags.slice(0, 10).map(({ id, keyword: { label, color } = {} }) => (\n <PackageTag key={id} value={id} variant={color}>\n {label}\n </PackageTag>\n ))}\n </>\n );\n};\n","import { Flex, Grid, LinkBox, Stack } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Details } from \"./Details\";\nimport { Heading } from \"./Heading\";\nimport { Highlight } from \"./Highlight\";\nimport { Languages } from \"./Languages\";\nimport { Tags } from \"./Tags\";\nimport testIds from \"./testIds\";\n\nexport const WideCard: FunctionComponent = () => {\n return (\n <LinkBox\n _hover={{\n \"> article\": {\n bg: \"hoverPrimary\",\n },\n }}\n >\n <Grid\n as=\"article\"\n bg=\"bgSecondary\"\n border=\"base\"\n borderRadius=\"sm\"\n boxShadow=\"base\"\n color=\"textPrimary\"\n data-testid={testIds.wideContainer}\n h=\"full\"\n minH=\"12.5rem\"\n templateColumns={{ base: \"1fr\", lg: \"1fr 14rem\" }}\n w=\"full\"\n >\n {/* Top / Left side of card */}\n <Flex\n direction=\"column\"\n justify=\"space-between\"\n overflow=\"hidden\"\n p={5}\n sx={{ gap: \"0.5rem\" }}\n >\n <Stack spacing={3}>\n <Heading />\n </Stack>\n\n <Flex align=\"center\" sx={{ gap: \"0.5rem\" }} wrap=\"wrap\">\n <Tags />\n </Flex>\n </Flex>\n\n {/* Bottom / Right side of card */}\n <Flex\n align={{ base: \"end\", lg: \"initial\" }}\n borderLeft={{ lg: \"base\" }}\n borderTop={{ base: \"base\", lg: \"none\" }}\n direction={{ base: \"row\", lg: \"column\" }}\n justify=\"space-between\"\n p={5}\n sx={{ gap: \"0.5rem\" }}\n >\n <Stack spacing={1}>\n <Highlight />\n <Stack spacing={1}>\n <Details />\n </Stack>\n </Stack>\n\n <Stack data-testid={testIds.languages} direction=\"row\" spacing={2}>\n <Languages />\n </Stack>\n </Flex>\n </Grid>\n </LinkBox>\n );\n};\n","import { createContext, FunctionComponent, useContext } from \"react\";\nimport { ExtendedCatalogPackage } from \"../../api/catalog-search\";\nimport { PackageCardType } from \"./constants\";\nimport { WideCard } from \"./WideCard\";\n\nexport interface PackageCardProps {\n \"data-event\"?: string;\n pkg: ExtendedCatalogPackage;\n variant?: PackageCardType;\n}\n\ninterface PackageCardState extends ExtendedCatalogPackage {\n comment?: string;\n dataEvent?: string;\n}\n\nconst PackageCardContext = createContext<PackageCardState | null>(null);\n\nexport const usePackageCard = () => useContext(PackageCardContext)!;\n\nexport const PackageCard: FunctionComponent<PackageCardProps> = ({\n \"data-event\": dataEvent,\n pkg,\n variant = PackageCardType.Wide,\n}) => {\n return (\n <PackageCardContext.Provider value={{ ...pkg, dataEvent }}>\n {variant === PackageCardType.Wide && <WideCard />}\n </PackageCardContext.Provider>\n );\n};\n","import { Tag, TagLabel, TagProps } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { getSearchPath } from \"../../util/url\";\nimport { NavLink } from \"../NavLink\";\n\nexport interface PackageTagProps extends TagProps {\n value: string;\n label?: string;\n zIndex?: string | number;\n}\n\nexport const PackageTag: FunctionComponent<PackageTagProps> = ({\n children,\n value,\n label = value,\n zIndex,\n ...tagProps\n}) => {\n return (\n <NavLink\n aria-label={`Tag: ${label}`}\n to={getSearchPath({ keywords: [value] })}\n zIndex={zIndex}\n >\n <Tag\n _hover={{\n textDecoration: \"underline\",\n }}\n {...tagProps}\n >\n <TagLabel>{children}</TagLabel>\n </Tag>\n </NavLink>\n );\n};\n","export const pageInfo = {\n contribute: {\n event: {\n name: \"Contribute Load\",\n },\n },\n home: {\n event: {\n name: \"Home Load\",\n },\n },\n faq: {\n event: {\n name: \"Frequently Asked Questions Load\",\n },\n },\n packageProfile: {\n event: {\n name: \"Package Profile Load\",\n },\n },\n search: {\n event: {\n name: \"Search Load\",\n },\n },\n siteTerms: {\n event: {\n name: \"Site Terms Load\",\n },\n },\n notFound: {\n page: {\n pageType: \"errorPage\",\n },\n event: {\n name: \"404 Page Load\",\n },\n },\n} as const;\n","import { FunctionComponent, useEffect } from \"react\";\nimport { Helmet } from \"react-helmet\";\nimport { pageInfo } from \"../../constants/pageInfo\";\nimport { usePageView } from \"../../contexts/Analytics\";\nimport { useConfigValue } from \"../../hooks/useConfigValue\";\n\nexport interface PageProps {\n pageName: keyof typeof pageInfo;\n meta: {\n suffix?: boolean;\n title: string;\n description: string;\n };\n}\n\n// Should be the same as the \"real\" CSP, except most things come from HTTP\n// instead of HTTPS (because it is protocol-relative, and the dev site is\n// served over plain HTTP).\nconst csp = [\n \"default-src 'self' 'unsafe-inline' http://*.awsstatic.com;\",\n \"connect-src 'self' https://*.shortbread.aws.dev http://*.shortbread.aws.dev http://a0.awsstatic.com/ http://amazonwebservices.d2.sc.omtrdc.net http://aws.demdex.net http://dpm.demdex.net http://cm.everesttech.net;\",\n \"frame-src http://aws.demdex.net http://dpm.demdex.net;\",\n \"img-src 'self' https://* http://a0.awsstatic.com/ http://amazonwebservices.d2.sc.omtrdc.net http://aws.demdex.net http://dpm.demdex.net http://cm.everesttech.net;\",\n \"object-src 'none';\",\n \"style-src 'self' 'unsafe-inline';\",\n].join(\" \");\n\nexport const Page: FunctionComponent<PageProps> = ({\n children,\n meta,\n pageName,\n}) => {\n const trackPageView = usePageView(pageInfo[pageName]);\n\n useEffect(() => {\n trackPageView();\n }, [trackPageView]);\n\n const feedUrls = useConfigValue(\"feeds\") || [];\n const { suffix = true, title, description } = meta;\n const formattedTitle = suffix ? `${title} - Construct Hub` : title;\n\n return (\n <>\n <Helmet>\n {process.env.NODE_ENV === \"development\" && (\n <meta content={csp} httpEquiv=\"Content-Security-Policy\" />\n )}\n\n <meta content=\"width=device-width, initial-scale=1\" name=\"viewport\" />\n <meta charSet=\"utf-8\" />\n {feedUrls.map(({ url, mimeType }) => (\n <link href={url} key={url} rel=\"alternate\" type={mimeType} />\n ))}\n\n <title>{formattedTitle}</title>\n <meta content={formattedTitle} property=\"og:title\" />\n <meta content={formattedTitle} name=\"twitter:title\" />\n <meta content=\"summary\" name=\"twitter:card\" />\n\n <meta content={description} name=\"description\" />\n <meta content={description} property=\"og:description\" />\n <meta content={description} name=\"twitter:description\" />\n </Helmet>\n {children}\n </>\n );\n};\n","import { Box, BoxProps, forwardRef } from \"@chakra-ui/react\";\nimport { format } from \"date-fns\";\n\nexport type TimeOptions = {\n date: Date;\n format?: string;\n formattedDate?: string;\n};\n\nexport interface TimeProps extends BoxProps, TimeOptions {}\n\nexport const Time = forwardRef<TimeProps, \"time\">(\n ({ date, format: formatString, formattedDate, ...boxProps }, ref) => {\n return (\n <Box as=\"time\" dateTime={date.toISOString()} ref={ref} {...boxProps}>\n {formattedDate ?? format(date, formatString ?? \"\")}\n </Box>\n );\n }\n);\n\nTime.displayName = \"Time\";\n","import type { Config } from \"../../api/config\";\nimport { useConfig } from \"../../contexts/Config\";\n\nexport const useConfigValue = <T extends keyof Config>(key: T) => {\n const { data } = useConfig();\n return (data ?? {})[key];\n};\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useLocation, useHistory } from \"react-router-dom\";\nimport { Language, TEMP_SUPPORTED_LANGUAGES } from \"../../constants/languages\";\nimport { QUERY_PARAMS } from \"../../constants/url\";\nimport { useQueryParams } from \"../../hooks/useQueryParams\";\n\n// Only supported language atm\nconst defaultLang = Language.TypeScript;\n\nconst LOCAL_KEY = \"preferred-language\";\n\nconst isValidLang = (lang?: string | Language): lang is Language =>\n lang != null && TEMP_SUPPORTED_LANGUAGES.has(lang as Language);\n\nconst getInitialLang = (langFromParams: string | Language): Language => {\n // First, use language from query params in url\n if (isValidLang(langFromParams)) {\n return langFromParams;\n }\n\n // Next check for one stored in localStorage\n try {\n const storedLang = (localStorage.getItem(LOCAL_KEY) ?? \"\") as Language;\n if (isValidLang(storedLang)) return storedLang;\n } catch {\n // Do nothing, we just don't want to crash if localStorage access is blocked.\n }\n\n // Otherwise fallback to a default\n return defaultLang;\n};\n\nexport interface UseLanguageOptions {\n /**\n * Syncs the preferred language to a query param in URL\n */\n updateUrl?: boolean;\n /**\n * Saves the selected language to localStorage on select\n */\n updateSaved?: boolean;\n}\n\nexport const useLanguage = (options: UseLanguageOptions = {}) => {\n const { updateUrl, updateSaved } = options;\n const { pathname, hash } = useLocation();\n const { replace } = useHistory();\n const params = useQueryParams();\n const langFromParams = params.get(QUERY_PARAMS.LANGUAGE) as Language;\n\n // Passed as function to guarantee it runs on hook mount\n const [language, setLanguage] = useState<Language>(() =>\n getInitialLang(langFromParams)\n );\n\n // State subscribes to query param changes\n useEffect(() => {\n if (isValidLang(langFromParams) && langFromParams !== language) {\n setLanguage(langFromParams);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [langFromParams]);\n\n // Syncs language changes to URL if updateUrl = true\n useEffect(() => {\n if (langFromParams !== language && updateUrl) {\n params.set(QUERY_PARAMS.LANGUAGE, language);\n replace({ pathname, hash, search: params.toString() });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [language, updateUrl]);\n\n const update = useCallback(\n (val: Language) => {\n setLanguage(val);\n\n if (updateSaved) {\n try {\n localStorage.setItem(LOCAL_KEY, val);\n } catch {\n // OK to fail silently\n }\n }\n },\n [updateSaved]\n );\n\n return useMemo(() => [language, update] as const, [language, update]);\n};\n","import { useMemo } from \"react\";\nimport { useLocation } from \"react-router-dom\";\n\nexport const useQueryParams = () => {\n const { search } = useLocation();\n\n return useMemo(() => new URLSearchParams(search), [search]);\n};\n","import { PackageHighlight, PackageTagConfig } from \"../api/config\";\nimport { KEYWORD_IGNORE_LIST } from \"../constants/keywords\";\n\nexport interface TagObject extends PackageTagConfig {}\n\n/**\n * Reduces package tags to only return highlight tags\n */\nexport const highlightsFrom = (packageTags?: PackageTagConfig[]) => {\n if (!packageTags || packageTags.length < 1) return [];\n\n return packageTags.reduce(\n (accum: PackageHighlight[], tag: PackageTagConfig): PackageHighlight[] => {\n if (tag.highlight) {\n return [...accum, tag.highlight];\n }\n\n return accum;\n },\n []\n );\n};\n\n/**\n * Maps packageTags to an array of TagObjects, which can be rendered by the PackageTags Component\n */\nexport const mapPackageTags = (\n packageTags?: PackageTagConfig[]\n): TagObject[] => {\n return (packageTags ?? [])\n .filter((tag) => {\n return Boolean(tag.keyword?.label);\n })\n .map((tag) => ({\n ...tag,\n id: tag.keyword?.label!,\n }));\n};\n\n/**\n * Maps keywords to an array of TagObjects, which can be rendered by the PackageTags component\n */\nexport const mapPackageKeywords = (keywords?: string[]): TagObject[] => {\n if (!keywords || keywords.length < 1) return [];\n\n return keywords\n .filter((label) => Boolean(label) && !KEYWORD_IGNORE_LIST.has(label))\n .map((label) => ({\n id: label,\n keyword: {\n label,\n },\n }));\n};\n\n/**\n * Maps packageTags and keywords to a list of TagObjects, using mapPackageTags and mapPackageKeywords\n */\nexport const tagObjectsFrom = ({\n packageTags,\n keywords,\n}: {\n packageTags?: PackageTagConfig[];\n keywords?: string[];\n}): TagObject[] => {\n const tagObjects = new Array<TagObject>();\n const tagLabels = new Set<string>();\n\n for (const tag of [\n ...mapPackageTags(packageTags),\n ...mapPackageKeywords(keywords),\n ]) {\n const label = tag.keyword!.label.toLowerCase();\n if (!tagLabels.has(label)) {\n tagObjects.push(tag);\n tagLabels.add(label);\n }\n }\n\n return tagObjects;\n};\n"],"names":["Highlight","label","color","icon","brightness","useColorModeValue","align","direction","filter","spacing","alt","src","w","fontWeight","LanguageSupportTooltip","children","language","isSupported","TEMP_SUPPORTED_LANGUAGES","langName","LANGUAGE_NAME_MAP","message","hasArrow","placement","PackageCardType","createTestIds","Detail","dataTestid","tooltip","value","isDisabled","fontSize","zIndex","Details","usePackageCard","author","date","metadata","name","data","useStats","downloads","packages","npm","authorName","publishDate","Date","undefined","testIds","toLocaleString","Time","formattedDate","formatDistanceToNowStrict","addSuffix","NavLink","to","getSearchPath","query","EditorsNote","comment","lineHeight","noOfLines","as","Heading","useLanguage","currentLanguage","dataEvent","description","constructFrameworks","version","Link","eventName","getPackagePath","CDKType","mr","wordBreak","packageTags","highlightsFrom","highlight","sizes","sm","md","lg","PackageLanguages","isRounded","languages","packageName","size","targets","Object","keys","entries","LANGUAGE_RENDER_MAP","sort","left","right","LANGUAGES","map","lang","info","isSupportedByLibrary","Language","includes","isSupportedByConstructHub","Icon","borderRadius","h","opacity","Languages","pkg","Tags","keywords","tags","tagObjectsFrom","slice","id","keyword","PackageTag","variant","WideCard","_hover","bg","border","boxShadow","minH","templateColumns","base","justify","overflow","p","sx","gap","wrap","borderLeft","borderTop","PackageCardContext","createContext","useContext","PackageCard","Wide","Provider","tagProps","textDecoration","pageInfo","contribute","event","home","faq","packageProfile","search","siteTerms","notFound","page","pageType","Page","join","meta","pageName","trackPageView","usePageView","useEffect","feedUrls","useConfigValue","suffix","title","formattedTitle","Helmet","process","content","charSet","url","mimeType","href","rel","type","property","forwardRef","ref","formatString","format","boxProps","dateTime","toISOString","displayName","key","useConfig","defaultLang","LOCAL_KEY","isValidLang","getInitialLang","langFromParams","storedLang","localStorage","getItem","options","updateUrl","updateSaved","useLocation","pathname","hash","useHistory","replace","params","useQueryParams","get","QUERY_PARAMS","useState","setLanguage","set","toString","update","useCallback","val","setItem","useMemo","URLSearchParams","length","reduce","accum","tag","tagObjects","Array","tagLabels","Set","Boolean","mapPackageTags","KEYWORD_IGNORE_LIST","mapPackageKeywords","toLowerCase","has","push","add"],"sourceRoot":""}
1
+ {"version":3,"file":"static/js/29.1c8de512.chunk.js","mappings":"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","sources":["components/Highlight/Highlight.tsx","components/LanguageSupportTooltip/LanguageSupportTooltip.tsx","components/PackageCard/constants.ts","components/PackageCard/testIds.ts","components/PackageCard/Details.tsx","components/PackageCard/EditorsNote.tsx","components/PackageCard/Heading.tsx","components/PackageCard/Highlight.tsx","components/PackageLanguages/PackageLanguages.tsx","components/PackageCard/Languages.tsx","components/PackageCard/Tags.tsx","components/PackageCard/WideCard.tsx","components/PackageCard/PackageCard.tsx","components/PackageTag/PackageTag.tsx","constants/pageInfo.ts","components/Page/Page.tsx","components/Time/Time.tsx","hooks/useConfigValue/useConfigValue.ts","hooks/useLanguage/useLanguage.ts","hooks/useQueryParams/useQueryParams.ts","util/package.ts"],"sourcesContent":["import { Stack, Image, Text, useColorModeValue } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\n\ninterface HighlightProps {\n label: string;\n color?: string;\n icon?: string;\n}\n\nexport const Highlight: FunctionComponent<HighlightProps> = ({\n label,\n color,\n icon,\n}: HighlightProps) => {\n const brightness = useColorModeValue(\"none\", \"brightness(1.75)\");\n return (\n <Stack align=\"center\" direction=\"row\" filter={brightness} spacing={2}>\n <Image alt={`${label} icon`} src={icon} w={4} />\n <Text color={color} fontWeight=\"bold\">\n {label}\n </Text>\n </Stack>\n );\n};\n","import { Tooltip } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport {\n Language,\n LANGUAGE_NAME_MAP,\n TEMP_SUPPORTED_LANGUAGES,\n} from \"../../constants/languages\";\n\nexport interface LanguageSupportTooltipProps {\n language: Language;\n}\n\nexport const LanguageSupportTooltip: FunctionComponent<\n LanguageSupportTooltipProps\n> = ({ children, language }) => {\n const isSupported = TEMP_SUPPORTED_LANGUAGES.has(language);\n const langName = LANGUAGE_NAME_MAP[language];\n\n const message = isSupported\n ? `Click to view documentation in ${langName}`\n : `Documentation support for ${langName} is coming soon!`;\n\n return (\n <Tooltip hasArrow label={message} placement=\"top-start\">\n <span>{children}</span>\n </Tooltip>\n );\n};\n","export enum PackageCardType {\n Wide = \"wide\",\n}\n","import { createTestIds } from \"../../util/createTestIds\";\n\nconst testIds = createTestIds(\"packageCard\", [\n \"author\",\n \"description\",\n \"downloads\",\n \"languages\",\n \"published\",\n \"title\",\n \"version\",\n \"comment\",\n \"wideContainer\",\n] as const);\n\nexport default testIds;\n","import { Text, Tooltip } from \"@chakra-ui/react\";\nimport { formatDistanceToNowStrict } from \"date-fns\";\nimport { FunctionComponent, ReactChild } from \"react\";\nimport { useStats } from \"../../hooks/useStats\";\nimport { getSearchPath } from \"../../util/url\";\nimport { NavLink } from \"../NavLink\";\nimport { Time } from \"../Time\";\nimport { usePackageCard } from \"./PackageCard\";\nimport testIds from \"./testIds\";\n\ninterface DetailProps {\n \"data-testid\": string;\n tooltip?: string;\n value: ReactChild;\n}\n\nconst Detail: FunctionComponent<DetailProps> = ({\n \"data-testid\": dataTestid,\n tooltip,\n value,\n}) => (\n <Tooltip hasArrow isDisabled={!tooltip} label={tooltip} placement=\"left\">\n {/* zIndex required to allow tooltip to display due to card link overlay */}\n <Text data-testid={dataTestid} fontSize=\"xs\" zIndex={1}>\n {value}\n </Text>\n </Tooltip>\n);\n\nexport const Details: FunctionComponent = () => {\n const {\n author,\n metadata: { date },\n name,\n } = usePackageCard();\n\n const { data } = useStats();\n const downloads: number | undefined = data?.packages?.[name]?.downloads?.npm;\n\n const authorName = typeof author === \"string\" ? author : author.name;\n const publishDate = new Date(date);\n\n return (\n <>\n {downloads !== undefined && (\n <Detail\n data-testid={testIds.downloads}\n tooltip=\"Download numbers are periodically sourced from the npm registry\"\n value={`${downloads.toLocaleString()} weekly downloads`}\n />\n )}\n <Detail\n data-testid={testIds.published}\n value={\n <Time\n date={publishDate}\n fontSize=\"xs\"\n formattedDate={formatDistanceToNowStrict(publishDate, {\n addSuffix: true,\n })}\n />\n }\n />\n <Detail\n data-testid={testIds.author}\n value={\n <>\n By{\" \"}\n <NavLink\n color=\"link\"\n to={getSearchPath({\n query: authorName,\n })}\n >\n {authorName}\n </NavLink>\n </>\n }\n />\n </>\n );\n};\n","import { Text } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport testIds from \"./testIds\";\n\nexport const EditorsNote: FunctionComponent<{ comment?: string }> = ({\n comment,\n}) => {\n return (\n <Text\n data-testid={testIds.comment}\n fontSize=\"md\"\n lineHeight=\"tall\"\n noOfLines={4}\n >\n <Text as=\"span\" color=\"blue.500\" fontWeight=\"bold\">\n Editor&apos;s note:{\" \"}\n </Text>\n {comment}\n </Text>\n );\n};\n","import {\n Flex,\n Heading as ChakraHeading,\n LinkOverlay,\n Text,\n} from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { eventName } from \"../../contexts/Analytics\";\nimport { useLanguage } from \"../../hooks/useLanguage\";\nimport { getPackagePath } from \"../../util/url\";\nimport { CDKTypeBadge } from \"../CDKType\";\nimport { EditorsNote } from \"./EditorsNote\";\nimport { usePackageCard } from \"./PackageCard\";\nimport testIds from \"./testIds\";\n\nexport const Heading: FunctionComponent = () => {\n const [currentLanguage] = useLanguage();\n const {\n dataEvent,\n description,\n comment,\n constructFrameworks,\n name,\n version,\n } = usePackageCard();\n\n return (\n <>\n <LinkOverlay\n as={Link}\n data-event={\n dataEvent ? eventName(dataEvent, \"Package Card\", name) : undefined\n }\n to={getPackagePath({\n name,\n version,\n language: currentLanguage,\n })}\n >\n <Flex align=\"center\">\n <CDKTypeBadge\n constructFrameworks={constructFrameworks}\n mr={2}\n zIndex={1}\n />\n <ChakraHeading\n as=\"h3\"\n color=\"textPrimary\"\n data-testid={testIds.title}\n fontSize=\"md\"\n fontWeight=\"bold\"\n wordBreak=\"normal\"\n >\n {name}\n </ChakraHeading>\n </Flex>\n </LinkOverlay>\n {comment ? (\n <EditorsNote comment={comment} />\n ) : (\n <Text\n color=\"textPrimary\"\n data-testid={testIds.description}\n fontSize=\"md\"\n lineHeight=\"tall\"\n noOfLines={4}\n >\n {description || \"No description available.\"}\n </Text>\n )}\n </>\n );\n};\n","import { Box } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { highlightsFrom } from \"../../util/package\";\nimport { Highlight as HighlightComponent } from \"../Highlight\";\nimport { usePackageCard } from \"./PackageCard\";\n\nexport const Highlight: FunctionComponent = () => {\n const { packageTags = [] } = usePackageCard()?.metadata ?? {};\n const [highlight] = highlightsFrom(packageTags);\n\n if (!highlight) return null;\n\n return (\n <Box fontSize=\"xs\">\n <HighlightComponent {...highlight} />\n </Box>\n );\n};\n","import type { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport {\n Language,\n LANGUAGES,\n LANGUAGE_RENDER_MAP,\n TEMP_SUPPORTED_LANGUAGES,\n} from \"../../constants/languages\";\nimport { getPackagePath } from \"../../util/url\";\nimport { LanguageSupportTooltip } from \"../LanguageSupportTooltip\";\n\nconst sizes = {\n sm: 5,\n md: 6,\n lg: 8,\n};\n\nexport interface PackageLanguagesProps {\n isRounded?: boolean;\n languages?: Partial<Record<Language, unknown>>;\n name: string;\n size?: \"sm\" | \"md\" | \"lg\";\n version: string;\n}\n\nexport const PackageLanguages: FunctionComponent<PackageLanguagesProps> = ({\n isRounded = false,\n languages,\n name: packageName,\n size = \"md\",\n version,\n}) => {\n const targets = Object.keys(languages ?? {}) as Language[];\n return (\n <>\n {Object.entries(LANGUAGE_RENDER_MAP)\n // Ensure entries are always sorted in a stable way\n .sort(\n ([left], [right]) =>\n LANGUAGES.indexOf(left as Language) -\n LANGUAGES.indexOf(right as Language)\n )\n .map(([lang, info]) => {\n const language = lang as Language;\n\n const isSupportedByLibrary =\n language === Language.TypeScript || targets.includes(language);\n\n const isSupportedByConstructHub =\n language === Language.TypeScript || // TypeScript is always supported\n // Otherwise, the language must be supported by ConstructHub\n TEMP_SUPPORTED_LANGUAGES.has(language);\n\n if (!isSupportedByLibrary) return null;\n\n const { name, icon: Icon } = info;\n\n const icon = (\n <Icon\n aria-label={`Supports ${name}`}\n borderRadius={isRounded ? \"50%\" : 0}\n h={sizes[size]}\n opacity={isSupportedByConstructHub ? 1 : 0.2}\n w={sizes[size]}\n />\n );\n\n return (\n <LanguageSupportTooltip key={language} language={language}>\n {isSupportedByConstructHub ? (\n <Link\n aria-label={`View package docs for ${language}`}\n to={getPackagePath({ name: packageName, version, language })}\n >\n {icon}\n </Link>\n ) : (\n icon\n )}\n </LanguageSupportTooltip>\n );\n })}\n </>\n );\n};\n","import type { FunctionComponent } from \"react\";\nimport { PackageLanguages } from \"../PackageLanguages\";\nimport { usePackageCard } from \"./PackageCard\";\n\nexport const Languages: FunctionComponent = () => {\n const pkg = usePackageCard();\n return <PackageLanguages {...pkg} size=\"sm\" />;\n};\n","import { FunctionComponent } from \"react\";\nimport { tagObjectsFrom } from \"../../util/package\";\nimport { PackageTag } from \"../PackageTag\";\nimport { usePackageCard } from \"./PackageCard\";\n\nexport const Tags: FunctionComponent = () => {\n const {\n keywords = [],\n metadata: { packageTags = [] },\n } = usePackageCard();\n\n const tags = tagObjectsFrom({\n packageTags,\n keywords,\n });\n\n return (\n <>\n {tags.slice(0, 10).map(({ id, keyword: { label, color } = {} }) => (\n <PackageTag key={id} value={id} variant={color}>\n {label}\n </PackageTag>\n ))}\n </>\n );\n};\n","import { Flex, Grid, LinkBox, Stack } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Details } from \"./Details\";\nimport { Heading } from \"./Heading\";\nimport { Highlight } from \"./Highlight\";\nimport { Languages } from \"./Languages\";\nimport { Tags } from \"./Tags\";\nimport testIds from \"./testIds\";\n\nexport const WideCard: FunctionComponent = () => {\n return (\n <LinkBox\n _hover={{\n \"> article\": {\n bg: \"hoverPrimary\",\n },\n }}\n >\n <Grid\n as=\"article\"\n bg=\"bgSecondary\"\n border=\"base\"\n borderRadius=\"sm\"\n boxShadow=\"base\"\n color=\"textPrimary\"\n data-testid={testIds.wideContainer}\n h=\"full\"\n minH=\"12.5rem\"\n templateColumns={{ base: \"1fr\", lg: \"1fr 14rem\" }}\n w=\"full\"\n >\n {/* Top / Left side of card */}\n <Flex\n direction=\"column\"\n justify=\"space-between\"\n overflow=\"hidden\"\n p={5}\n sx={{ gap: \"0.5rem\" }}\n >\n <Stack spacing={3}>\n <Heading />\n </Stack>\n\n <Flex align=\"center\" sx={{ gap: \"0.5rem\" }} wrap=\"wrap\">\n <Tags />\n </Flex>\n </Flex>\n\n {/* Bottom / Right side of card */}\n <Flex\n align={{ base: \"end\", lg: \"initial\" }}\n borderLeft={{ lg: \"base\" }}\n borderTop={{ base: \"base\", lg: \"none\" }}\n direction={{ base: \"row\", lg: \"column\" }}\n justify=\"space-between\"\n p={5}\n sx={{ gap: \"0.5rem\" }}\n >\n <Stack spacing={1}>\n <Highlight />\n <Stack spacing={1}>\n <Details />\n </Stack>\n </Stack>\n\n <Stack data-testid={testIds.languages} direction=\"row\" spacing={2}>\n <Languages />\n </Stack>\n </Flex>\n </Grid>\n </LinkBox>\n );\n};\n","import { createContext, FunctionComponent, useContext } from \"react\";\nimport { ExtendedCatalogPackage } from \"../../api/catalog-search\";\nimport { PackageCardType } from \"./constants\";\nimport { WideCard } from \"./WideCard\";\n\nexport interface PackageCardProps {\n \"data-event\"?: string;\n pkg: ExtendedCatalogPackage;\n variant?: PackageCardType;\n}\n\ninterface PackageCardState extends ExtendedCatalogPackage {\n comment?: string;\n dataEvent?: string;\n}\n\nconst PackageCardContext = createContext<PackageCardState | null>(null);\n\nexport const usePackageCard = () => useContext(PackageCardContext)!;\n\nexport const PackageCard: FunctionComponent<PackageCardProps> = ({\n \"data-event\": dataEvent,\n pkg,\n variant = PackageCardType.Wide,\n}) => {\n return (\n <PackageCardContext.Provider value={{ ...pkg, dataEvent }}>\n {variant === PackageCardType.Wide && <WideCard />}\n </PackageCardContext.Provider>\n );\n};\n","import { Tag, TagLabel, TagProps } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { getSearchPath } from \"../../util/url\";\nimport { NavLink } from \"../NavLink\";\n\nexport interface PackageTagProps extends TagProps {\n value: string;\n label?: string;\n zIndex?: string | number;\n}\n\nexport const PackageTag: FunctionComponent<PackageTagProps> = ({\n children,\n value,\n label = value,\n zIndex,\n ...tagProps\n}) => {\n return (\n <NavLink\n aria-label={`Tag: ${label}`}\n to={getSearchPath({ keywords: [value] })}\n zIndex={zIndex}\n >\n <Tag\n _hover={{\n textDecoration: \"underline\",\n }}\n {...tagProps}\n >\n <TagLabel>{children}</TagLabel>\n </Tag>\n </NavLink>\n );\n};\n","export const pageInfo = {\n contribute: {\n event: {\n name: \"Contribute Load\",\n },\n },\n home: {\n event: {\n name: \"Home Load\",\n },\n },\n faq: {\n event: {\n name: \"Frequently Asked Questions Load\",\n },\n },\n packageProfile: {\n event: {\n name: \"Package Profile Load\",\n },\n },\n search: {\n event: {\n name: \"Search Load\",\n },\n },\n siteTerms: {\n event: {\n name: \"Site Terms Load\",\n },\n },\n notFound: {\n page: {\n pageType: \"errorPage\",\n },\n event: {\n name: \"404 Page Load\",\n },\n },\n} as const;\n","import { FunctionComponent, useEffect } from \"react\";\nimport { Helmet } from \"react-helmet\";\nimport { pageInfo } from \"../../constants/pageInfo\";\nimport { usePageView } from \"../../contexts/Analytics\";\nimport { useConfigValue } from \"../../hooks/useConfigValue\";\n\nexport interface PageProps {\n pageName: keyof typeof pageInfo;\n meta: {\n suffix?: boolean;\n title: string;\n description: string;\n };\n}\n\n// Should be the same as the \"real\" CSP, except most things come from HTTP\n// instead of HTTPS (because it is protocol-relative, and the dev site is\n// served over plain HTTP).\nconst csp = [\n \"default-src 'self' 'unsafe-inline' http://*.awsstatic.com;\",\n \"connect-src 'self' https://*.shortbread.aws.dev http://*.shortbread.aws.dev http://a0.awsstatic.com/ http://amazonwebservices.d2.sc.omtrdc.net http://aws.demdex.net http://dpm.demdex.net http://cm.everesttech.net;\",\n \"frame-src http://aws.demdex.net http://dpm.demdex.net;\",\n \"img-src 'self' https://* http://a0.awsstatic.com/ http://amazonwebservices.d2.sc.omtrdc.net http://aws.demdex.net http://dpm.demdex.net http://cm.everesttech.net;\",\n \"object-src 'none';\",\n \"style-src 'self' 'unsafe-inline';\",\n].join(\" \");\n\nexport const Page: FunctionComponent<PageProps> = ({\n children,\n meta,\n pageName,\n}) => {\n const trackPageView = usePageView(pageInfo[pageName]);\n\n useEffect(() => {\n trackPageView();\n }, [trackPageView]);\n\n const feedUrls = useConfigValue(\"feeds\") || [];\n const { suffix = true, title, description } = meta;\n const formattedTitle = suffix ? `${title} - Construct Hub` : title;\n\n return (\n <>\n <Helmet>\n {process.env.NODE_ENV === \"development\" && (\n <meta content={csp} httpEquiv=\"Content-Security-Policy\" />\n )}\n\n <meta content=\"width=device-width, initial-scale=1\" name=\"viewport\" />\n <meta charSet=\"utf-8\" />\n {feedUrls.map(({ url, mimeType }) => (\n <link href={url} key={url} rel=\"alternate\" type={mimeType} />\n ))}\n\n <title>{formattedTitle}</title>\n <meta content={formattedTitle} property=\"og:title\" />\n <meta content={formattedTitle} name=\"twitter:title\" />\n <meta content=\"summary\" name=\"twitter:card\" />\n\n <meta content={description} name=\"description\" />\n <meta content={description} property=\"og:description\" />\n <meta content={description} name=\"twitter:description\" />\n </Helmet>\n {children}\n </>\n );\n};\n","import { Box, BoxProps, forwardRef } from \"@chakra-ui/react\";\nimport { format } from \"date-fns\";\n\nexport type TimeOptions = {\n date: Date;\n format?: string;\n formattedDate?: string;\n};\n\nexport interface TimeProps extends BoxProps, TimeOptions {}\n\nexport const Time = forwardRef<TimeProps, \"time\">(\n ({ date, format: formatString, formattedDate, ...boxProps }, ref) => {\n return (\n <Box as=\"time\" dateTime={date.toISOString()} ref={ref} {...boxProps}>\n {formattedDate ?? format(date, formatString ?? \"\")}\n </Box>\n );\n }\n);\n\nTime.displayName = \"Time\";\n","import type { Config } from \"../../api/config\";\nimport { useConfig } from \"../../contexts/Config\";\n\nexport const useConfigValue = <T extends keyof Config>(key: T) => {\n const { data } = useConfig();\n return (data ?? {})[key];\n};\n","import { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useLocation, useHistory } from \"react-router-dom\";\nimport { Language, TEMP_SUPPORTED_LANGUAGES } from \"../../constants/languages\";\nimport { QUERY_PARAMS } from \"../../constants/url\";\nimport { useQueryParams } from \"../../hooks/useQueryParams\";\n\n// Only supported language atm\nconst defaultLang = Language.TypeScript;\n\nconst LOCAL_KEY = \"preferred-language\";\n\nconst isValidLang = (lang?: string | Language): lang is Language =>\n lang != null && TEMP_SUPPORTED_LANGUAGES.has(lang as Language);\n\nconst getInitialLang = (langFromParams: string | Language): Language => {\n // First, use language from query params in url\n if (isValidLang(langFromParams)) {\n return langFromParams;\n }\n\n // Next check for one stored in localStorage\n try {\n const storedLang = (localStorage.getItem(LOCAL_KEY) ?? \"\") as Language;\n if (isValidLang(storedLang)) return storedLang;\n } catch {\n // Do nothing, we just don't want to crash if localStorage access is blocked.\n }\n\n // Otherwise fallback to a default\n return defaultLang;\n};\n\nexport interface UseLanguageOptions {\n /**\n * Syncs the preferred language to a query param in URL\n */\n updateUrl?: boolean;\n /**\n * Saves the selected language to localStorage on select\n */\n updateSaved?: boolean;\n}\n\nexport const useLanguage = (options: UseLanguageOptions = {}) => {\n const { updateUrl, updateSaved } = options;\n const { pathname, hash } = useLocation();\n const { replace } = useHistory();\n const params = useQueryParams();\n const langFromParams = params.get(QUERY_PARAMS.LANGUAGE) as Language;\n\n // Passed as function to guarantee it runs on hook mount\n const [language, setLanguage] = useState<Language>(() =>\n getInitialLang(langFromParams)\n );\n\n // State subscribes to query param changes\n useEffect(() => {\n if (isValidLang(langFromParams) && langFromParams !== language) {\n setLanguage(langFromParams);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [langFromParams]);\n\n // Syncs language changes to URL if updateUrl = true\n useEffect(() => {\n if (langFromParams !== language && updateUrl) {\n params.set(QUERY_PARAMS.LANGUAGE, language);\n replace({ pathname, hash, search: params.toString() });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [language, updateUrl]);\n\n const update = useCallback(\n (val: Language) => {\n setLanguage(val);\n\n if (updateSaved) {\n try {\n localStorage.setItem(LOCAL_KEY, val);\n } catch {\n // OK to fail silently\n }\n }\n },\n [updateSaved]\n );\n\n return useMemo(() => [language, update] as const, [language, update]);\n};\n","import { useMemo } from \"react\";\nimport { useLocation } from \"react-router-dom\";\n\nexport const useQueryParams = () => {\n const { search } = useLocation();\n\n return useMemo(() => new URLSearchParams(search), [search]);\n};\n","import { PackageHighlight, PackageTagConfig } from \"../api/config\";\nimport { KEYWORD_IGNORE_LIST } from \"../constants/keywords\";\n\nexport interface TagObject extends PackageTagConfig {}\n\n/**\n * Reduces package tags to only return highlight tags\n */\nexport const highlightsFrom = (packageTags?: PackageTagConfig[]) => {\n if (!packageTags || packageTags.length < 1) return [];\n\n return packageTags.reduce(\n (accum: PackageHighlight[], tag: PackageTagConfig): PackageHighlight[] => {\n if (tag.highlight) {\n return [...accum, tag.highlight];\n }\n\n return accum;\n },\n []\n );\n};\n\n/**\n * Maps packageTags to an array of TagObjects, which can be rendered by the PackageTags Component\n */\nexport const mapPackageTags = (\n packageTags?: PackageTagConfig[]\n): TagObject[] => {\n return (packageTags ?? [])\n .filter((tag) => {\n return Boolean(tag.keyword?.label);\n })\n .map((tag) => ({\n ...tag,\n id: tag.keyword?.label!,\n }));\n};\n\n/**\n * Maps keywords to an array of TagObjects, which can be rendered by the PackageTags component\n */\nexport const mapPackageKeywords = (keywords?: string[]): TagObject[] => {\n if (!keywords || keywords.length < 1) return [];\n\n return keywords\n .filter((label) => Boolean(label) && !KEYWORD_IGNORE_LIST.has(label))\n .map((label) => ({\n id: label,\n keyword: {\n label,\n },\n }));\n};\n\n/**\n * Maps packageTags and keywords to a list of TagObjects, using mapPackageTags and mapPackageKeywords\n */\nexport const tagObjectsFrom = ({\n packageTags,\n keywords,\n}: {\n packageTags?: PackageTagConfig[];\n keywords?: string[];\n}): TagObject[] => {\n const tagObjects = new Array<TagObject>();\n const tagLabels = new Set<string>();\n\n for (const tag of [\n ...mapPackageTags(packageTags),\n ...mapPackageKeywords(keywords),\n ]) {\n const label = tag.keyword!.label.toLowerCase();\n if (!tagLabels.has(label)) {\n tagObjects.push(tag);\n tagLabels.add(label);\n }\n }\n\n return tagObjects;\n};\n"],"names":["Highlight","label","color","icon","brightness","useColorModeValue","align","direction","filter","spacing","alt","src","w","fontWeight","LanguageSupportTooltip","children","language","isSupported","TEMP_SUPPORTED_LANGUAGES","langName","LANGUAGE_NAME_MAP","message","hasArrow","placement","PackageCardType","createTestIds","Detail","dataTestid","tooltip","value","isDisabled","fontSize","zIndex","Details","usePackageCard","author","date","metadata","name","data","useStats","downloads","packages","npm","authorName","publishDate","Date","undefined","testIds","toLocaleString","Time","formattedDate","formatDistanceToNowStrict","addSuffix","NavLink","to","getSearchPath","query","EditorsNote","comment","lineHeight","noOfLines","as","Heading","useLanguage","currentLanguage","dataEvent","description","constructFrameworks","version","Link","eventName","getPackagePath","CDKType","mr","wordBreak","packageTags","highlightsFrom","highlight","sizes","sm","md","lg","PackageLanguages","isRounded","languages","packageName","size","targets","Object","keys","entries","LANGUAGE_RENDER_MAP","sort","left","right","LANGUAGES","map","lang","info","isSupportedByLibrary","Language","includes","isSupportedByConstructHub","Icon","borderRadius","h","opacity","Languages","pkg","Tags","keywords","tags","tagObjectsFrom","slice","id","keyword","PackageTag","variant","WideCard","_hover","bg","border","boxShadow","minH","templateColumns","base","justify","overflow","p","sx","gap","wrap","borderLeft","borderTop","PackageCardContext","createContext","useContext","PackageCard","Wide","Provider","tagProps","textDecoration","pageInfo","contribute","event","home","faq","packageProfile","search","siteTerms","notFound","page","pageType","Page","join","meta","pageName","trackPageView","usePageView","useEffect","feedUrls","useConfigValue","suffix","title","formattedTitle","Helmet","process","content","charSet","url","mimeType","href","rel","type","property","forwardRef","ref","formatString","format","boxProps","dateTime","toISOString","displayName","key","useConfig","defaultLang","LOCAL_KEY","isValidLang","getInitialLang","langFromParams","storedLang","localStorage","getItem","options","updateUrl","updateSaved","useLocation","pathname","hash","useHistory","replace","params","useQueryParams","get","QUERY_PARAMS","useState","setLanguage","set","toString","update","useCallback","val","setItem","useMemo","URLSearchParams","length","reduce","accum","tag","tagObjects","Array","tagLabels","Set","Boolean","mapPackageTags","KEYWORD_IGNORE_LIST","mapPackageKeywords","toLowerCase","has","push","add"],"sourceRoot":""}
@@ -1 +1 @@
1
- {"version":3,"file":"static/js/418.25a5f7f8.chunk.js","mappings":"qPAaaA,EAA4B,WACvC,IAAMC,GAAUC,EAAAA,EAAAA,KAEhB,GAAID,EAAQE,YAAcF,EAAQG,KAChC,OACE,SAAC,KAAD,CAAQC,KAAK,QAAb,UACE,SAAC,IAAD,CAASC,KAAK,SAKpB,IAAMC,EAjBa,SAACN,GACpB,IAAMO,EAAWP,EAAQO,SAEzB,OAAOA,EADKC,KAAKC,MAAMD,KAAKE,SAAWH,EAASI,SAepCC,CAAaZ,EAAQG,MAC3BU,GAAMC,EAAAA,EAAAA,IAAe,CACzBC,KAAMT,EAAIS,KACVC,QAASV,EAAIU,UAGf,OAAO,SAAC,KAAD,CAAUC,GAAIJ","sources":["views/Random/Random.tsx"],"sourcesContent":["import { Center, Spinner } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Redirect } from \"react-router-dom\";\nimport type { CatalogPackage, Packages } from \"../../api/package/packages\";\nimport { useCatalog } from \"../../hooks/useCatalog\";\nimport { getPackagePath } from \"../../util/url\";\n\nconst getRandomPkg = (catalog: Packages): CatalogPackage => {\n const packages = catalog.packages;\n const idx = Math.floor(Math.random() * packages.length);\n return packages[idx];\n};\n\nexport const Random: FunctionComponent = () => {\n const catalog = useCatalog();\n\n if (catalog.isLoading || !catalog.data) {\n return (\n <Center minH=\"16rem\">\n <Spinner size=\"xl\" />\n </Center>\n );\n }\n\n const pkg = getRandomPkg(catalog.data);\n const url = getPackagePath({\n name: pkg.name,\n version: pkg.version,\n });\n\n return <Redirect to={url} />;\n};\n"],"names":["Random","catalog","useCatalog","isLoading","data","minH","size","pkg","packages","Math","floor","random","length","getRandomPkg","url","getPackagePath","name","version","to"],"sourceRoot":""}
1
+ {"version":3,"file":"static/js/418.25a5f7f8.chunk.js","mappings":"qPAaaA,EAA4B,WACvC,IAAMC,GAAUC,EAAAA,EAAAA,KAEhB,GAAID,EAAQE,YAAcF,EAAQG,KAChC,OACE,SAAC,KAAD,CAAQC,KAAK,QAAb,UACE,SAAC,IAAD,CAASC,KAAK,SAKpB,IAAMC,EAjBa,SAACN,GACpB,IAAMO,EAAWP,EAAQO,SAEzB,OAAOA,EADKC,KAAKC,MAAMD,KAAKE,SAAWH,EAASI,QAEjD,CAaaC,CAAaZ,EAAQG,MAC3BU,GAAMC,EAAAA,EAAAA,IAAe,CACzBC,KAAMT,EAAIS,KACVC,QAASV,EAAIU,UAGf,OAAO,SAAC,KAAD,CAAUC,GAAIJ,GACtB,C","sources":["views/Random/Random.tsx"],"sourcesContent":["import { Center, Spinner } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Redirect } from \"react-router-dom\";\nimport type { CatalogPackage, Packages } from \"../../api/package/packages\";\nimport { useCatalog } from \"../../hooks/useCatalog\";\nimport { getPackagePath } from \"../../util/url\";\n\nconst getRandomPkg = (catalog: Packages): CatalogPackage => {\n const packages = catalog.packages;\n const idx = Math.floor(Math.random() * packages.length);\n return packages[idx];\n};\n\nexport const Random: FunctionComponent = () => {\n const catalog = useCatalog();\n\n if (catalog.isLoading || !catalog.data) {\n return (\n <Center minH=\"16rem\">\n <Spinner size=\"xl\" />\n </Center>\n );\n }\n\n const pkg = getRandomPkg(catalog.data);\n const url = getPackagePath({\n name: pkg.name,\n version: pkg.version,\n });\n\n return <Redirect to={url} />;\n};\n"],"names":["Random","catalog","useCatalog","isLoading","data","minH","size","pkg","packages","Math","floor","random","length","getRandomPkg","url","getPackagePath","name","version","to"],"sourceRoot":""}