{"version":3,"file":"static/js/e733a88490df325c1895.bundle.js","mappings":"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","sources":["webpack://mattressfirm/./src/Utilities/analytics/htmlToText.ts?c3c7","webpack://mattressfirm/./src/Utilities/plp-url-utils.ts?728b","webpack://mattressfirm/./src/modules/mfrm-slider-navigation/featured-content.tsx?8acd","webpack://mattressfirm/./src/modules/mfrm-slider-navigation/mfrm-slider-navigation.tsx?e991","webpack://mattressfirm/./src/modules/mfrm-slider-navigation/mfrm-slider-navigation.view.tsx?733f","webpack://mattressfirm/./lib/mfrm-slider-navigation/module-registration.js?63e8","webpack://mattressfirm/./node_modules/@msdyn365-commerce/bootloader/node_modules/core-js/modules/es.string.match.js?a69e","webpack://mattressfirm/external var \"React\"?0d3b","webpack://mattressfirm/external var \"ReactDOM\"?853b"],"sourcesContent":["\r\n// Convert Rich Text inner text to string for analytics tagging\r\n\r\nimport MsDyn365 from '@msdyn365-commerce/core';\r\n\r\nexport const htmltoText = (html: string) => {\r\n if(MsDyn365.isBrowser) {\r\n // Create a new div element\r\n const tempDivElement = document.createElement('div');\r\n\r\n // Set the HTML content with the given value\r\n // tslint:disable-next-line: no-inner-html\r\n tempDivElement.innerHTML = html;\r\n\r\n // Retrieve the text property of the element\r\n return tempDivElement.textContent || tempDivElement.innerText || '';\r\n } else {\r\n return '';\r\n }\r\n};","import { IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\r\nimport { IRequestContext } from '@msdyn365-commerce/core';\r\nimport { ProductRefinerValue } from '@msdyn365-commerce/retail-proxy';\r\nexport interface IVirtualRefinersConfig {\r\n order: number;\r\n refinerName: string;\r\n enableForMattresses: boolean;\r\n enableForOtherCategories: boolean;\r\n allowDuplicate: boolean;\r\n}\r\n\r\n/**\r\n * This will create the canonicalURL as per 7924 requirement\r\n * @param requestContext\r\n * @returns string of canonical URL\r\n */\r\nexport const canonicalURL = (requestContext: IRequestContext): string => {\r\n const requestUrl = requestContext.url.requestUrl;\r\n const origin = requestUrl.origin;\r\n const path = requestUrl.pathname.toLowerCase();\r\n\r\n // separate out url parts split on forward / and remove first empty index\r\n let urlParts = path?.split('/').splice(1);\r\n\r\n // remove double values containing pipe sign\r\n if (path.match(/%7c/)) {\r\n urlParts = removePipeSignValue(urlParts);\r\n }\r\n\r\n // remove unwanted keywords from url\r\n urlParts = removeKeywords(urlParts, requestContext);\r\n\r\n const filteredPath = urlParts?.join('/');\r\n\r\n return `${origin}/${filteredPath}`;\r\n};\r\n\r\nexport const filteredURL = (requestContext: IRequestContext): string => {\r\n const requestUrl = requestContext.url.requestUrl;\r\n const path = requestUrl.pathname.toLowerCase();\r\n\r\n // separate out url parts split on forward / and remove first empty index\r\n let urlParts = path?.split('/').splice(1);\r\n\r\n // remove unwanted keywords from url\r\n urlParts = removeKeywords(urlParts, requestContext);\r\n\r\n const filteredPath = urlParts?.join('/');\r\n\r\n return `/${filteredPath}`;\r\n};\r\n\r\n/**\r\n * This will create the canonicalURL as per 7924 requirement\r\n * @param requestContext\r\n * @returns string of canonical URL\r\n */\r\nexport const canonicalURLWithoutBaseUrl = (requestContext: IRequestContext): string => {\r\n const requestUrl = requestContext.url.requestUrl;\r\n const path = requestUrl.pathname.toLowerCase();\r\n\r\n // separate out url parts split on forward / and remove first empty index\r\n let urlParts = path?.split('\\/').splice(1);\r\n\r\n // remove double values containing pipe sign\r\n if (path.match(/%7c/)) {\r\n urlParts = removePipeSignValue(urlParts);\r\n }\r\n\r\n // remove unwanted keywords from url\r\n urlParts = removeKeywords(urlParts, requestContext);\r\n\r\n return urlParts?.join('\\/');\r\n};\r\n\r\n/**\r\n * This will remove the Pipe sign value set from urlParts\r\n * @param urlParts\r\n * @returns\r\n */\r\nexport const removePipeSignValue = (urlParts: string[]) => {\r\n // urlParts.forEach((part, index) => {\r\n // const indexOfValue = urlParts.indexOf('%7c');\r\n // if (indexOfValue !== -1) {\r\n // urlParts.splice(indexOfValue, 1);\r\n // }\r\n // });\r\n\r\n if (urlParts !== undefined && urlParts.length > 0) {\r\n urlParts = urlParts.filter(urlPart => urlPart.indexOf('%7c') === -1);\r\n }\r\n\r\n return urlParts;\r\n};\r\n\r\n/**\r\n * This will remove the keywords from urlParts array which were received from\r\n * the app.settings.json/CMS Extensions\r\n * @param urlParts\r\n * @param requestContext\r\n * @returns urlParts array filtered\r\n */\r\nexport const removeKeywords = (urlParts: string[], requestContext: IRequestContext): string[] => {\r\n const removeKeywordFromUrl = requestContext.app.config.removeKeywordFromUrl;\r\n\r\n if (urlParts.length > 0 && removeKeywordFromUrl && removeKeywordFromUrl.length > 0) {\r\n const removeKeywordFromUrlArray: string[] = removeKeywordFromUrl?.trim().split(',');\r\n removeKeywordFromUrlArray?.length > 0 &&\r\n urlParts.forEach(_part => {\r\n removeKeywordFromUrlArray.forEach(removeKeyword => {\r\n const trimmedKeyword = removeKeyword.trim().toLowerCase();\r\n const indexOfValue = urlParts.indexOf(trimmedKeyword);\r\n if (trimmedKeyword.length > 0 && indexOfValue !== -1) {\r\n urlParts.splice(indexOfValue, 1);\r\n }\r\n });\r\n });\r\n }\r\n\r\n return urlParts;\r\n};\r\n\r\n/**\r\n * This will sort the Virtual refiner config based on order and return\r\n * only active virtual refiner configs based on isMattress category will\r\n * be returned\r\n * @param requestContext\r\n * @param isMattressesCategory boolean | undefined\r\n * @returns IVirtualRefinersConfig[] | undefined\r\n */\r\nexport const getSortedVirtualRefinerConfig = (\r\n requestContext: IRequestContext,\r\n isMattressesCategory: boolean | undefined\r\n): IVirtualRefinersConfig[] | undefined => {\r\n let appConfigSorted = getVirtualRefinerConfig(requestContext);\r\n\r\n // sort the config by provided config\r\n if (appConfigSorted) {\r\n if (isMattressesCategory === true) {\r\n appConfigSorted = appConfigSorted.filter(appConfig => {\r\n return appConfig.enableForMattresses;\r\n });\r\n } else if (isMattressesCategory === false) {\r\n appConfigSorted = appConfigSorted.filter(appConfig => {\r\n return appConfig.enableForOtherCategories;\r\n });\r\n }\r\n appConfigSorted.sort((a: IVirtualRefinersConfig, b: IVirtualRefinersConfig) => {\r\n return a.order - b.order;\r\n });\r\n }\r\n\r\n return appConfigSorted;\r\n};\r\n\r\n/**\r\n * Virtual refiner names from the app.settings.json will be returned which can be used\r\n * to filter out refiners data based upon active virtual refiners\r\n * @param requestContext\r\n * @param isMattressesCategory boolean | undefined\r\n * @returns string[]\r\n */\r\nexport const getVirtualRefinerNames = (requestContext: IRequestContext, isMattressesCategory: boolean | undefined): string[] => {\r\n const sortedVirtualRefinerConfig = getSortedVirtualRefinerConfig(requestContext, isMattressesCategory);\r\n\r\n const appConfigRefinerNames: string[] = [];\r\n\r\n sortedVirtualRefinerConfig &&\r\n sortedVirtualRefinerConfig.forEach(sortedConfig => {\r\n appConfigRefinerNames.push(sortedConfig.refinerName.trim().toLowerCase());\r\n });\r\n\r\n return appConfigRefinerNames;\r\n};\r\n\r\n/**\r\n * This will return the value of virtual refiner configuration\r\n * @param requestContext\r\n * @returns IVirtualRefinersConfig[] | undefined\r\n */\r\nexport const getVirtualRefinerConfig = (requestContext: IRequestContext): IVirtualRefinersConfig[] => {\r\n return requestContext.app.config.urlModifications;\r\n};\r\n\r\nexport async function getVirtualRefinerValues(\r\n requestContext: IRequestContext,\r\n virtualRefiners: IProductRefinerHierarchy[]\r\n): Promise {\r\n const virtualRefinerValues: ProductRefinerValue[] = [];\r\n if (virtualRefiners.length === 0) {\r\n return virtualRefinerValues;\r\n }\r\n const requestUrl = requestContext.url.requestUrl;\r\n // const origin = requestUrl.origin;\r\n const path = requestUrl.pathname;\r\n\r\n // separate out url parts split on forward / and remove first empty index\r\n let urlParts = path?.split('/').splice(1);\r\n\r\n // remove unwanted keywords from url\r\n urlParts = removeKeywords(urlParts, requestContext);\r\n\r\n // remove category id {categoryid}.c\r\n const categoryIdToken = requestContext.urlTokens.recordId;\r\n const categoryId = categoryIdToken ? `${categoryIdToken}.c` : undefined;\r\n\r\n if (categoryId) {\r\n urlParts.splice(-1);\r\n }\r\n\r\n // run loop for each url part and get values from refiners for further usage\r\n const finalizedUrlParts: string[] = [];\r\n urlParts.forEach(plainUrlPart => {\r\n const urlPart = decodeURIComponent(plainUrlPart);\r\n if (urlPart.indexOf('|') !== -1) {\r\n const splitOnPipeSign = urlPart?.split('|');\r\n const filteredParts = splitOnPipeSign.filter(part => part.length > 0);\r\n filteredParts.forEach(filteredPart => {\r\n finalizedUrlParts.push(filteredPart.toLowerCase().trim());\r\n });\r\n }\r\n finalizedUrlParts.push(urlPart);\r\n });\r\n finalizedUrlParts.forEach((urlPart) => {\r\n virtualRefiners.forEach((mainRefiner) => {\r\n mainRefiner.Values.forEach((refinerValue) => {\r\n const refinerValueKeyName = refinerValue.LeftValueBoundString?.toLowerCase().trim().split(' ')?.join('-')?.replace(/\\&/g, 'and')?.replace(regExSpecialChars(requestContext.app.config.canonicalUrlspecialCharIncludeList), '-');\r\n if (refinerValueKeyName && refinerValueKeyName === urlPart) {\r\n virtualRefinerValues.push(refinerValue);\r\n }\r\n });\r\n });\r\n });\r\n\r\n return virtualRefinerValues;\r\n}\r\n\r\n/**\r\n * For navigation menu links, it will remove keywords configured in global configurations from the navigation link\r\n * and clp link and return url path string\r\n * @param link\r\n * @param requestContext\r\n * @returns string\r\n */\r\nexport const navLinkKeywordRemoval = (link: string, requestContext: IRequestContext): string => {\r\n // Using the rest operator in case there is a weirdly formatted URL with multiple question marks.\r\n const [linkBase, ...linkParams] = link?.split('?');\r\n\r\n // Only apply to category links and product links, which end in .c or .p. Check that a keyword is configured.\r\n if (!linkBase.endsWith('.c') && !linkBase.endsWith('.p') || !requestContext.app.config) {\r\n return link;\r\n }\r\n\r\n // Separate out url parts split on forward /\r\n let urlParts = linkBase?.split('\\/');\r\n\r\n // Remove unwanted keywords from url\r\n urlParts = removeKeywords(urlParts, requestContext);\r\n\r\n // Glue the URL params back together\r\n const linkParam = linkParams.map(param => `?${param}`)?.join('');\r\n\r\n // Rebuild URL by joining with forward slash and appending any URL parameters\r\n const filteredLink = `${urlParts?.join('/')}${linkParam}`;\r\n return `${filteredLink}`;\r\n};\r\nexport const regExSpecialChars = (includeConfigList: string): RegExp => {\r\n let includeConfig = '';\r\n if (includeConfigList !== undefined && includeConfigList !== '') {\r\n includeConfig = includeConfigList?.trim().split(',')?.join('\\\\\\\\');\r\n includeConfig = includeConfig && includeConfig !== '' ? `\\\\\\\\${includeConfig}` : '';\r\n const pattern = `[^\\\\w\\\\&\\\\|${includeConfig}]`;\r\n // eslint-disable-next-line security/detect-non-literal-regexp\r\n return new RegExp(pattern, 'gi');\r\n } else {\r\n\r\n const pattern = `[^\\\\w\\\\&\\\\|]`;\r\n // eslint-disable-next-line security/detect-non-literal-regexp\r\n return new RegExp(pattern, 'gi');\r\n }\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport MsDyn365, { IGridSettings, IImageData, Image, RichText, RichTextComponent } from '@msdyn365-commerce/core';\r\n\r\nimport * as React from 'react';\r\nimport { htmltoText } from '../../Utilities/analytics/htmlToText';\r\nimport classname from 'classnames';\r\n\r\ninterface IContentData {\r\n image: IImageData | undefined;\r\n contentIndex: number;\r\n title: RichText;\r\n gridSettings: IGridSettings;\r\n linkTo: string;\r\n cardColor: string;\r\n titleColor: string;\r\n}\r\n\r\nexport default (props: IContentData) => {\r\n const styles = 'mfrm-slider-navigation__';\r\n const {\r\n image,\r\n title,\r\n gridSettings,\r\n linkTo,\r\n contentIndex,\r\n cardColor,\r\n titleColor\r\n } = props;\r\n\r\n const cardBkgColor = cardColor === 'white' ? `${styles}cardBkgColor-white` : '';\r\n const colorOfTitle = titleColor ? `${styles}text-${titleColor}` : '';\r\n const bkgImage = typeof image !== 'undefined' ?\r\n {image?.altText}\r\n : null;\r\n\r\n const button = !image ?\r\n
Start
\r\n : null;\r\n\r\n const handleClick = () => {\r\n if (MsDyn365.isBrowser) {\r\n const titleDisplayed = htmltoText(title.toString()).trim();\r\n const pageURL = MsDyn365.isBrowser && window.location.pathname;\r\n // @ts-ignore\r\n if ('utag' in window) {\r\n // @ts-ignore\r\n utag.link({\r\n event: 'sleep-disruptor-nav-module',\r\n event_category: 'sleep disruptor nav module',\r\n event_action: `${titleDisplayed} click - position ${contentIndex + 1}`,\r\n event_label: `sleep disruptor ${pageURL}`,\r\n event_noninteraction: 'false'\r\n });\r\n }\r\n window.location.href = linkTo;\r\n }\r\n };\r\n\r\n const analyticsRef = React.useRef();\r\n React.useEffect(() => {\r\n analyticsRef.current && analyticsRef.current.addEventListener('click', handleClick);\r\n }, []);\r\n\r\n return (\r\n \r\n
\r\n {bkgImage}\r\n
\r\n
\r\n \r\n
\r\n {button}\r\n
\r\n
\r\n \r\n );\r\n};\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport * as React from 'react';\r\n\r\nimport FeaturedContent from './featured-content';\r\nimport { IMfrmSliderNavigationData } from './mfrm-slider-navigation.data';\r\nimport { IMfrmSliderNavigationProps } from './mfrm-slider-navigation.props.autogenerated';\r\n\r\nimport { navLinkKeywordRemoval } from '../../Utilities/plp-url-utils';\r\n\r\nexport interface IMfrmSliderNavigationViewProps extends IMfrmSliderNavigationProps {\r\n sliderNavigationItems: React.ReactNode[];\r\n}\r\n\r\n/**\r\n *\r\n * MfrmSliderNavigation component\r\n * @extends {React.PureComponent>}\r\n */\r\nclass MfrmSliderNavigation extends React.PureComponent> {\r\n public render(): JSX.Element | null {\r\n if(!this.props.config.featuredContentList) {\r\n return null;\r\n }\r\n\r\n const viewProps: IMfrmSliderNavigationViewProps = {\r\n ...(this.props as IMfrmSliderNavigationProps),\r\n sliderNavigationItems: this._getItems()\r\n };\r\n return this.props.renderView(viewProps);\r\n }\r\n\r\n private _getItems = (): React.ReactNode[] => {\r\n const {\r\n config: { featuredContentList },\r\n context: {\r\n request: { gridSettings }\r\n }\r\n } = this.props;\r\n\r\n return featuredContentList.map((content, index) => {\r\n const { title, image, link, cardColor = '', titleColor = '' } = content;\r\n\r\n return (\r\n \r\n );\r\n });\r\n };\r\n}\r\n\r\nexport default MfrmSliderNavigation;","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport Carousel from 'mfcl/Carousel';\r\nimport * as React from 'react';\r\nimport _getViewPort from '../../Utilities/get-view-port';\r\nimport { IMfrmSliderNavigationViewProps } from './mfrm-slider-navigation';\r\nimport classname from 'classnames';\r\n\r\nexport default (props: IMfrmSliderNavigationViewProps) => {\r\n const [loaded, setIsLoaded] = React.useState(false);\r\n const hideLoader = () => {\r\n setIsLoaded(true);\r\n };\r\n const styles = 'mfrm-slider-navigation__';\r\n const {\r\n config: { heading, headingColor },\r\n sliderNavigationItems\r\n } = props;\r\n\r\n let headingDisplay = null;\r\n if (heading && heading.text) {\r\n const HeadingTag = heading.tag ? (`${heading.tag}` as keyof JSX.IntrinsicElements) : 'h2';\r\n headingDisplay = (\r\n
\r\n {heading.text}\r\n
\r\n );\r\n }\r\n\r\n React.useEffect(hideLoader, []);\r\n return (\r\n
\r\n {headingDisplay}\r\n
\r\n \r\n {sliderNavigationItems}\r\n \r\n
\r\n
\r\n );\r\n};","const binding = { modules: {}, dataActions: {} };\n\n (binding.modules['mfrm-slider-navigation'] = {\n c: () => require('partner/modules/mfrm-slider-navigation/mfrm-slider-navigation.tsx'),\n $type: 'contentModule',\n da: [],\n \n iNM: false,\n ns: '__local__',\n n: 'mfrm-slider-navigation',\n p: '__local__',\n \n pdp: '',\n \n \n md: 'src/modules/mfrm-slider-navigation'\n });\n \n\n \n window.__bindings__ = window.__bindings__ || {};\n window.__bindings__.modules = {\n ...window.__bindings__.modules || {},\n ...binding.modules\n };\n \n window.__bindings__.dataActions = {\n ...window.__bindings__.dataActions || {},\n ...binding.dataActions\n };\n export const viewDictionary = {};\n viewDictionary['__local__|__local__|modules|mfrm-slider-navigation|mfrm-slider-navigation'] = {\n c: () => require('partner/modules/mfrm-slider-navigation/mfrm-slider-navigation.view.tsx'),\n cn: '__local__-__local__-mfrm-slider-navigation'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","'use strict';\nvar call = require('../internals/function-call');\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar getMethod = require('../internals/get-method');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\n// @@match logic\nfixRegExpWellKnownSymbolLogic('match', function (MATCH, nativeMatch, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.es/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = requireObjectCoercible(this);\n var matcher = isNullOrUndefined(regexp) ? undefined : getMethod(regexp, MATCH);\n return matcher ? call(matcher, regexp, O) : new RegExp(regexp)[MATCH](toString(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@match\n function (string) {\n var rx = anObject(this);\n var S = toString(string);\n var res = maybeCallNative(nativeMatch, rx, S);\n\n if (res.done) return res.value;\n\n if (!rx.global) return regExpExec(rx, S);\n\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = toString(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n","module.exports = React;","module.exports = ReactDOM;"],"names":["htmltoText","html","MsDyn365","isBrowser","tempDivElement","document","createElement","innerHTML","textContent","innerText","canonicalURL","requestContext","_urlParts","requestUrl","url","origin","path","pathname","toLowerCase","urlParts","split","splice","match","removePipeSignValue","removeKeywords","join","filteredURL","_urlParts2","undefined","length","filter","urlPart","indexOf","removeKeywordFromUrl","app","config","removeKeywordFromUrlArray","trim","forEach","_part","removeKeyword","trimmedKeyword","indexOfValue","getSortedVirtualRefinerConfig","isMattressesCategory","appConfigSorted","getVirtualRefinerConfig","appConfig","enableForMattresses","enableForOtherCategories","sort","a","b","order","getVirtualRefinerNames","sortedVirtualRefinerConfig","appConfigRefinerNames","sortedConfig","push","refinerName","urlModifications","async","getVirtualRefinerValues","virtualRefiners","virtualRefinerValues","categoryIdToken","urlTokens","recordId","finalizedUrlParts","plainUrlPart","decodeURIComponent","part","filteredPart","mainRefiner","Values","refinerValue","_refinerValue$LeftVal","refinerValueKeyName","LeftValueBoundString","replace","regExSpecialChars","canonicalUrlspecialCharIncludeList","navLinkKeywordRemoval","link","_linkParams$map","_urlParts4","linkBase","linkParams","endsWith","linkParam","map","param","includeConfigList","includeConfig","_includeConfigList$tr","RegExp","props","styles","image","title","gridSettings","linkTo","contentIndex","cardColor","titleColor","cardBkgColor","colorOfTitle","bkgImage","React","Image","Object","assign","alt","altText","className","src","button","classname","handleClick","titleDisplayed","toString","pageURL","window","location","utag","event","event_category","event_action","event_label","event_noninteraction","href","analyticsRef","current","addEventListener","ref","RichTextComponent","text","MfrmSliderNavigation","constructor","_getItems","featuredContentList","context","request","this","content","index","_link$linkUrl","FeaturedContent","key","linkUrl","destinationUrl","render","viewProps","_objectSpread","sliderNavigationItems","renderView","loaded","setIsLoaded","heading","headingColor","headingDisplay","HeadingTag","tag","hideLoader","Carousel","itemsToShow","hideIndicators","disableControls","variableWidth","ariaLabel","binding","modules","dataActions","c","require","$type","da","iNM","ns","n","p","pdp","md","__bindings__","viewDictionary","cn","call","fixRegExpWellKnownSymbolLogic","anObject","isNullOrUndefined","toLength","requireObjectCoercible","getMethod","advanceStringIndex","regExpExec","MATCH","nativeMatch","maybeCallNative","regexp","O","matcher","string","rx","S","res","done","value","global","fullUnicode","unicode","lastIndex","result","A","matchStr","module","exports","ReactDOM"],"sourceRoot":""}