{"version":3,"file":"static/js/e5c40ac83458ceb4a85f.bundle.js","mappings":"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","sources":["webpack://mattressfirm/./src/Utilities/plp-url-utils.ts?728b","webpack://mattressfirm/./src/data-actions/get-seo-data.action.ts?b8ff","webpack://mattressfirm/./src/modules/mfrm-category-page-summary/mfrm-category-page-summary.action.ts?d22e","webpack://mattressfirm/./node_modules/@msdyn365-commerce/bootloader/node_modules/core-js/internals/delete-property-or-throw.js?8052","webpack://mattressfirm/./node_modules/@msdyn365-commerce/bootloader/node_modules/core-js/modules/es.array.sort.js?67f8","webpack://mattressfirm/./node_modules/@msdyn365-commerce/bootloader/node_modules/core-js/modules/es.string.match.js?a69e","webpack://mattressfirm/./node_modules/@msdyn365-commerce/bootloader/node_modules/core-js/modules/es.string.split.js?9fc2"],"sourcesContent":["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. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { filteredURL } from '../Utilities/plp-url-utils';\r\n\r\nexport class GetSeoDataInput extends Msdyn365.CommerceEntityInput implements Msdyn365.IActionInput {\r\n\r\n private seoDataUrl: string = '';\r\n constructor(seoDataUrl: string) {\r\n super({ shouldCacheOutput: true, cacheObjectType: 'SeoDataCache', cacheKey: 'SeoDataCache' });\r\n this.seoDataUrl = seoDataUrl;\r\n }\r\n\r\n public getSeoDataUrl = () => this.seoDataUrl;\r\n public getCacheKey = () => `SeoDataCache`;\r\n public getCacheObjectType = () => 'SeoDataCache';\r\n public dataCacheType = (): Msdyn365.CacheType => 'request';\r\n\r\n}\r\n\r\nconst createInput = (inputData: Msdyn365.ICreateActionContext>): Msdyn365.IActionInput => {\r\n if (inputData.config && inputData.config.seoDataUrl) {\r\n return new GetSeoDataInput(inputData.config.seoDataUrl);\r\n }\r\n return new GetSeoDataInput('');\r\n};\r\n\r\n// tslint:disable: no-any\r\nasync function action(input: GetSeoDataInput, ctx: Msdyn365.IActionContext): Promise {\r\n\r\n const jsonUrlFromGlobals = ctx.requestContext.app.config.seoDataUrl;\r\n // TODO: Just remove the fallback\r\n const jsonUrl = jsonUrlFromGlobals || 'https://files-us-prod.cms.commerce.dynamics.com/cms/api/fknscsckgq/binary/MA5cA7';\r\n const res = await Msdyn365.sendRequest(jsonUrl, 'get');\r\n const filteredUrlPath = filteredURL(ctx.requestContext);\r\n const seoData = filteredUrlPath && res.data && res.data[filteredUrlPath];\r\n return seoData && seoData[0];\r\n}\r\n\r\nexport default Msdyn365.createObservableDataAction({\r\n action: >action,\r\n input: createInput\r\n});\r\n","/* tslint:disable: no-duplicate-imports */\r\nimport { IPageSummaryData } from '@msdyn365-commerce-modules/page-summary';\r\nimport { buildCacheKeyWithUrlTokens, CurrentCategoryInput, getCategoryUrl, getCurrentCategory, removeDomainQspFromUrl } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { CategoryHierarchy, IProductRefinerHierarchy } from '@msdyn365-commerce/commerce-entities';\r\nimport {\r\n CacheType,\r\n createObservableDataAction,\r\n getFriendlyName,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n ICreateActionContext,\r\n IRequestContext,\r\n IAny,\r\n IGeneric\r\n} from '@msdyn365-commerce/core';\r\nimport flatten from 'lodash/flatten';\r\n// VSI customization: 7924 Start\r\nimport getHtmlParserValue from '../../Utilities/get-html-parser-value';\r\nimport { canonicalURL, getSortedVirtualRefinerConfig, getVirtualRefinerNames, regExSpecialChars, removeKeywords } from '../../Utilities/plp-url-utils';\r\nimport getSEOData, { GetSeoDataInput } from '../../data-actions/get-seo-data.action';\r\nimport { getProductSearchRefinersAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\nimport { ProductRefiner } from '@msdyn365-commerce/retail-proxy';\r\nimport { IMfrmCategoryPageSummaryConfig } from './mfrm-category-page-summary.props.autogenerated';\r\n// VSI customization: 7924 End\r\n\r\n/** Category Page Summary Input */\r\nexport class MFRMCategoryPageSummaryInput implements IActionInput {\r\n public requestContext: IRequestContext;\r\n public config: IMfrmCategoryPageSummaryConfig;\r\n constructor(config: IMfrmCategoryPageSummaryConfig, requestContext: IRequestContext) {\r\n this.config = config || {};\r\n this.requestContext = requestContext;\r\n }\r\n\r\n public getCacheObjectType = (): string => 'MFRMCategoryPageSummary';\r\n public getCacheKey = (): string => `${buildCacheKeyWithUrlTokens('MFRMCategoryPageSummary', this.requestContext)}-${this.requestContext?.url?.requestUrl?.pathname?.toLowerCase()}`;\r\n public dataCacheType = (): CacheType => 'application';\r\n}\r\n\r\nconst createGetCurrentCategoryInput = (inputData: IActionContext): CurrentCategoryInput => {\r\n if (inputData && inputData.requestContext) {\r\n return new CurrentCategoryInput(inputData.requestContext);\r\n }\r\n\r\n throw new Error('Please specify categoryId query string in request.');\r\n};\r\n\r\n/**\r\n * Get skip count.\r\n * @param inputData\r\n */\r\nfunction getSkipCount(inputData: ICreateActionContext, IGeneric>): string | undefined {\r\n return inputData && inputData.requestContext && inputData.requestContext.query && inputData.requestContext.query.skip;\r\n}\r\n\r\nconst _getSEOMetaTagValue = (currentCategory: CategoryHierarchy, keyValue: string) => {\r\n return currentCategory?.ExtensionProperties?.find((attr) => attr.Key === keyValue)?.Value?.StringValue;\r\n};\r\n\r\nconst _getActiveRefiners = (refiners: IProductRefinerHierarchy[], requestContext: IRequestContext, CategoryHierarchy: any): string[] | undefined => {\r\n // get refiners from URL\r\n const configVirtualRefinerNames = getVirtualRefinerNames(requestContext, false);\r\n const filteredRefiners = refiners && refiners.filter((refiner) => {\r\n return refiner.KeyName && configVirtualRefinerNames.indexOf(refiner.KeyName.toLowerCase()) !== -1;\r\n });\r\n // get category slug\r\n let slug = (CategoryHierarchy && CategoryHierarchy.Slug) || '';\r\n let slugArray: string[];\r\n let pathArray: string[];\r\n const sortedConfigValues = getSortedVirtualRefinerConfig(requestContext, false);\r\n if (sortedConfigValues && slug) {\r\n slugArray = slug.split('/').splice(1);\r\n // remove keywords form slugArray\r\n slugArray = removeKeywords(slugArray, requestContext);\r\n // FIX reset slug to without keywords\r\n slug = slugArray.join('/');\r\n // path of URL\r\n let path = requestContext.url.requestUrl.pathname.toLowerCase();\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 path = path?.replace(`/${categoryId}`, '');\r\n }\r\n // remove category slug\r\n pathArray = removeKeywords(path.split('\\/').splice(1), requestContext);\r\n path = pathArray.join('\\/');\r\n const removedCategorySlug = path.split(slug).splice(1)[0];\r\n let refinerParts: string[] = [];\r\n if (removedCategorySlug !== '') {\r\n refinerParts = decodeURIComponent(removedCategorySlug).split('/');\r\n }\r\n if (refinerParts && refinerParts.length > 0 && slugArray && slugArray.length > 0) {\r\n // remove duplicates if any from the first url part\r\n slugArray.forEach(_slug => {\r\n refinerParts.forEach(refinerPart => {\r\n const index = slugArray.indexOf(refinerPart);\r\n if (index !== -1) {\r\n slugArray.splice(index, 1);\r\n }\r\n });\r\n });\r\n }\r\n const finalRefinerParts: string[] = [];\r\n refinerParts.forEach(refinerPart => {\r\n refinerPart.split('|').map(item => finalRefinerParts.push(item.includes('-') ? item : item.split('-').join(' ')));\r\n });\r\n refinerParts = finalRefinerParts && flatten(finalRefinerParts);\r\n // setup object with refiner values\r\n const sortedValues: { [key: string]: string[] } = {};\r\n filteredRefiners?.forEach(refinerSet => {\r\n let refinerName = refinerSet.KeyName;\r\n if (refinerName) {\r\n refinerName = refinerName.toLowerCase();\r\n sortedValues[refinerName] = []; // size, brand, price\r\n }\r\n refinerSet.Values.forEach((refiner) => {\r\n refinerParts.forEach((refinerPart) => {\r\n if (refinerName && refiner.LeftValueBoundString &&\r\n (refiner.LeftValueBoundString.toLowerCase()?.replace(/\\&/g, 'and')?.replace(regExSpecialChars(requestContext.app.config.canonicalUrlspecialCharIncludeList), '-') === refinerPart.toLocaleLowerCase().split('-').join(' ')\r\n || refiner.LeftValueBoundString.toLowerCase()?.replace(/\\&/g, 'and')?.replace(regExSpecialChars(requestContext.app.config.canonicalUrlspecialCharIncludeList), '-') === refinerPart.toLocaleLowerCase())) {\r\n sortedValues[refinerName].push(refiner.LeftValueBoundString);\r\n } else if (refinerName && refiner.LeftValueBoundString &&\r\n refiner.LeftValueBoundString.toLowerCase() === refinerPart.toLowerCase().split('-').join(' ')) {\r\n sortedValues[refinerName].push(refinerPart);\r\n }\r\n });\r\n });\r\n });\r\n // alpha sort\r\n // @ts-ignore\r\n for (const sortedValue of Object.keys(sortedValues)) {\r\n sortedValues[sortedValue].length > 0 &&\r\n sortedValues[sortedValue].sort((a: string, b: string) => {\r\n if (a < b) {\r\n return -1;\r\n }\r\n if (a > b) {\r\n return 1;\r\n }\r\n return 0;\r\n });\r\n }\r\n // @ts-ignore\r\n const finalRefiners: string[] = [];\r\n sortedConfigValues.forEach(sortedConfigValue => {\r\n const sortedRefinerName = sortedConfigValue.refinerName.toLowerCase();\r\n if (sortedValues[sortedRefinerName] !== undefined && sortedValues[sortedRefinerName].length > 0) {\r\n // @ts-ignore\r\n finalRefiners.push(sortedValues[sortedRefinerName].join(' '));\r\n }\r\n });\r\n return finalRefiners;\r\n }\r\n return undefined;\r\n};\r\n\r\nasync function getAllRefinersAction(ctx: IActionContext): Promise {\r\n const searchCriteria = {\r\n SearchCondition: '*',\r\n Context: {\r\n ChannelId: ctx.requestContext.apiSettings.channelId,\r\n CatalogId: ctx.requestContext.apiSettings.catalogId\r\n }\r\n };\r\n return getProductSearchRefinersAsync({ callerContext: ctx }, searchCriteria).then(\r\n (productRefiners: ProductRefiner[]) => {\r\n if (!productRefiners) {\r\n ctx.telemetry.error('[getRefinersByCriteriaAction] returned no refiners');\r\n return [];\r\n }\r\n\r\n const result = (productRefiners || []).map((productRefiner: ProductRefiner) => productRefiner);\r\n\r\n if (result.length === 0) {\r\n ctx.telemetry.error('[getRefinersByCriteriaAction] returned no IProductRefinerHierarchy objects');\r\n return [];\r\n }\r\n\r\n return result;\r\n }\r\n ).catch((err) => {\r\n console.log('[getRefinersByCriteriaAction Category-page-summary] returned no IProductRefinerHierarchy objects', err);\r\n ctx.telemetry.error(`[getRefinersByCriteriaAction Category-page-summary] returned no IProductRefinerHierarchy objects ${err}`);\r\n return [];\r\n });\r\n}\r\n\r\nasync function getFallbackTitle(context: IActionContext, requestContext: IRequestContext, currentCategory: any): Promise {\r\n let activeRefinerList: string[] | undefined = [];\r\n return getAllRefinersAction(context).then(refiners => {\r\n activeRefinerList = _getActiveRefiners(refiners, requestContext, currentCategory);\r\n const concateTitle = `${activeRefinerList && activeRefinerList?.length > 0 ? activeRefinerList.length === 1 ? ` ${activeRefinerList[0]} ` : ` ${activeRefinerList?.join(' ')} ` : ''}`;\r\n const fallbackTitle = concateTitle && `Shop for${concateTitle}Products | Mattress Firm`;\r\n return fallbackTitle;\r\n }).catch((err) => {\r\n console.log('[getFallbackTitle Category-page-summary] has some errors', err);\r\n context.telemetry.error(`[getFallbackTitle Category-page-summary] has some errors- ${err}`);\r\n return \"\";\r\n });\r\n}\r\n\r\nconst action = async (input: MFRMCategoryPageSummaryInput, context: IActionContext): Promise => {\r\n const { config } = input;\r\n const seoInput = new GetSeoDataInput(context.requestContext.app.config.seoDataUrl || 'https://files-us-prod.cms.commerce.dynamics.com/cms/api/fknscsckgq/binary/MA5cA7');\r\n const seoData = await getSEOData(seoInput, context);\r\n const seoPageTitle = seoData && seoData['SEO State'] === 'Active' && seoData['Title Tag'];\r\n const seoPageMetaData = seoData && seoData['SEO State'] === 'Active' && seoData['Meta Description'];\r\n let currentCategory: any;\r\n try {\r\n currentCategory = await getCurrentCategory(createGetCurrentCategoryInput(context), context);\r\n } catch (e) {\r\n // Do nothing, if the action fails fallback to values defined in data\r\n }\r\n if (currentCategory) {\r\n let categoryUrl: string | undefined;\r\n let fallbackTitle;\r\n if (!seoPageTitle) {\r\n fallbackTitle = await getFallbackTitle(context, input.requestContext, currentCategory);\r\n }\r\n const pageTitle = seoPageTitle || fallbackTitle || _getSEOMetaTagValue(currentCategory, 'CategoryPageTitle');\r\n const pageTitleParser = getHtmlParserValue(pageTitle);\r\n\r\n const fallBackMeta = 'Find comfortable mattresses, high quality beds, and accessories from top brands all at great low prices at Mattress Firm';\r\n const categoryPageMetaData = seoPageMetaData || fallBackMeta || _getSEOMetaTagValue(currentCategory, 'CategoryPageMetaData');\r\n const categoryPageMetaDataParser = getHtmlParserValue(categoryPageMetaData);\r\n try {\r\n // reset category's name neutralizedName\r\n const localName = getFriendlyName(context.requestContext.locale, currentCategory.NameTranslations);\r\n const neutralizedName = currentCategory.NeutralizedName || currentCategory.Name;\r\n currentCategory.Name = localName;\r\n currentCategory.NeutralizedName = neutralizedName;\r\n categoryUrl = getCategoryUrl(currentCategory);\r\n // @ts-ignore - TODO: property exits in new version of SDK. Remove once released.\r\n const canonicalDomain = context.requestContext.canonicalDomain;\r\n if (categoryUrl && canonicalDomain) {\r\n categoryUrl = canonicalURL(context.requestContext).toLocaleLowerCase();\r\n /**\r\n * Changes from v30\r\n */\r\n const skipCount = getSkipCount(context);\r\n const Url = new URL(categoryUrl);\r\n const urlParams: URLSearchParams = new URLSearchParams(Url.search);\r\n if (skipCount) {\r\n urlParams.set('skip', skipCount);\r\n }\r\n Url.search = urlParams.toString();\r\n categoryUrl = Url.toString();\r\n categoryUrl = removeDomainQspFromUrl(categoryUrl, context.requestContext);\r\n } else {\r\n categoryUrl = undefined;\r\n }\r\n } catch (e) {\r\n categoryUrl = undefined;\r\n }\r\n return {\r\n title: pageTitleParser || currentCategory.Name,\r\n description: categoryPageMetaDataParser || '',\r\n sharingImageUrl: currentCategory.OfflineImage,\r\n canonicalUrl: categoryUrl,\r\n faviconUrl: config && config.faviconUrl\r\n };\r\n // If the action fails fallback to values defined from data\r\n } else if (config) {\r\n return {\r\n title: config.title,\r\n sharingImageUrl: config.sharingImage && config.sharingImage.src,\r\n faviconUrl: config && config.faviconUrl\r\n };\r\n } else {\r\n return {};\r\n }\r\n};\r\n\r\nexport default createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/page-summary/category-page-summary',\r\n action: >action,\r\n input: (args: ICreateActionContext) => {\r\n return new MFRMCategoryPageSummaryInput(args.config, args.requestContext);\r\n }\r\n});\r\n","'use strict';\nvar tryToString = require('../internals/try-to-string');\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (O, P) {\n if (!delete O[P]) throw $TypeError('Cannot delete property ' + tryToString(P) + ' of ' + tryToString(O));\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar deletePropertyOrThrow = require('../internals/delete-property-or-throw');\nvar toString = require('../internals/to-string');\nvar fails = require('../internals/fails');\nvar internalSort = require('../internals/array-sort');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar FF = require('../internals/engine-ff-version');\nvar IE_OR_EDGE = require('../internals/engine-is-ie-or-edge');\nvar V8 = require('../internals/engine-v8-version');\nvar WEBKIT = require('../internals/engine-webkit-version');\n\nvar test = [];\nvar nativeSort = uncurryThis(test.sort);\nvar push = uncurryThis(test.push);\n\n// IE8-\nvar FAILS_ON_UNDEFINED = fails(function () {\n test.sort(undefined);\n});\n// V8 bug\nvar FAILS_ON_NULL = fails(function () {\n test.sort(null);\n});\n// Old WebKit\nvar STRICT_METHOD = arrayMethodIsStrict('sort');\n\nvar STABLE_SORT = !fails(function () {\n // feature detection can be too slow, so check engines versions\n if (V8) return V8 < 70;\n if (FF && FF > 3) return;\n if (IE_OR_EDGE) return true;\n if (WEBKIT) return WEBKIT < 603;\n\n var result = '';\n var code, chr, value, index;\n\n // generate an array with more 512 elements (Chakra and old V8 fails only in this case)\n for (code = 65; code < 76; code++) {\n chr = String.fromCharCode(code);\n\n switch (code) {\n case 66: case 69: case 70: case 72: value = 3; break;\n case 68: case 71: value = 4; break;\n default: value = 2;\n }\n\n for (index = 0; index < 47; index++) {\n test.push({ k: chr + index, v: value });\n }\n }\n\n test.sort(function (a, b) { return b.v - a.v; });\n\n for (index = 0; index < test.length; index++) {\n chr = test[index].k.charAt(0);\n if (result.charAt(result.length - 1) !== chr) result += chr;\n }\n\n return result !== 'DGBEFHACIJK';\n});\n\nvar FORCED = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || !STRICT_METHOD || !STABLE_SORT;\n\nvar getSortCompare = function (comparefn) {\n return function (x, y) {\n if (y === undefined) return -1;\n if (x === undefined) return 1;\n if (comparefn !== undefined) return +comparefn(x, y) || 0;\n return toString(x) > toString(y) ? 1 : -1;\n };\n};\n\n// `Array.prototype.sort` method\n// https://tc39.es/ecma262/#sec-array.prototype.sort\n$({ target: 'Array', proto: true, forced: FORCED }, {\n sort: function sort(comparefn) {\n if (comparefn !== undefined) aCallable(comparefn);\n\n var array = toObject(this);\n\n if (STABLE_SORT) return comparefn === undefined ? nativeSort(array) : nativeSort(array, comparefn);\n\n var items = [];\n var arrayLength = lengthOfArrayLike(array);\n var itemsLength, index;\n\n for (index = 0; index < arrayLength; index++) {\n if (index in array) push(items, array[index]);\n }\n\n internalSort(items, getSortCompare(comparefn));\n\n itemsLength = lengthOfArrayLike(items);\n index = 0;\n\n while (index < itemsLength) array[index] = items[index++];\n while (index < arrayLength) deletePropertyOrThrow(array, index++);\n\n return array;\n }\n});\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","'use strict';\nvar apply = require('../internals/function-apply');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\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 isRegExp = require('../internals/is-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar speciesConstructor = require('../internals/species-constructor');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar getMethod = require('../internals/get-method');\nvar arraySlice = require('../internals/array-slice-simple');\nvar callRegExpExec = require('../internals/regexp-exec-abstract');\nvar regexpExec = require('../internals/regexp-exec');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar fails = require('../internals/fails');\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;\nvar MAX_UINT32 = 0xFFFFFFFF;\nvar min = Math.min;\nvar $push = [].push;\nvar exec = uncurryThis(/./.exec);\nvar push = uncurryThis($push);\nvar stringSlice = uncurryThis(''.slice);\n\n// Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n// Weex JS has frozen built-in prototypes, so use try / catch wrapper\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () {\n // eslint-disable-next-line regexp/no-empty-group -- required for testing\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b';\n});\n\n// @@split logic\nfixRegExpWellKnownSymbolLogic('split', function (SPLIT, nativeSplit, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'.split(/(b)*/)[1] == 'c' ||\n // eslint-disable-next-line regexp/no-empty-group -- required for testing\n 'test'.split(/(?:)/, -1).length != 4 ||\n 'ab'.split(/(?:ab)*/).length != 2 ||\n '.'.split(/(.?)(.?)/).length != 4 ||\n // eslint-disable-next-line regexp/no-empty-capturing-group, regexp/no-empty-group -- required for testing\n '.'.split(/()()/).length > 1 ||\n ''.split(/.?/).length\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = toString(requireObjectCoercible(this));\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (separator === undefined) return [string];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) {\n return call(nativeSplit, string, separator, lim);\n }\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = call(regexpExec, separatorCopy, string)) {\n lastIndex = separatorCopy.lastIndex;\n if (lastIndex > lastLastIndex) {\n push(output, stringSlice(string, lastLastIndex, match.index));\n if (match.length > 1 && match.index < string.length) apply($push, output, arraySlice(match, 1));\n lastLength = match[0].length;\n lastLastIndex = lastIndex;\n if (output.length >= lim) break;\n }\n if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop\n }\n if (lastLastIndex === string.length) {\n if (lastLength || !exec(separatorCopy, '')) push(output, '');\n } else push(output, stringSlice(string, lastLastIndex));\n return output.length > lim ? arraySlice(output, 0, lim) : output;\n };\n // Chakra, V8\n } else if ('0'.split(undefined, 0).length) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : call(nativeSplit, this, separator, limit);\n };\n } else internalSplit = nativeSplit;\n\n return [\n // `String.prototype.split` method\n // https://tc39.es/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = requireObjectCoercible(this);\n var splitter = isNullOrUndefined(separator) ? undefined : getMethod(separator, SPLIT);\n return splitter\n ? call(splitter, separator, O, limit)\n : call(internalSplit, toString(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (string, limit) {\n var rx = anObject(this);\n var S = toString(string);\n var res = maybeCallNative(internalSplit, rx, S, limit, internalSplit !== nativeSplit);\n\n if (res.done) return res.value;\n\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (UNSUPPORTED_Y ? 'g' : 'y');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(UNSUPPORTED_Y ? '^(?:' + rx.source + ')' : rx, flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = UNSUPPORTED_Y ? 0 : q;\n var z = callRegExpExec(splitter, UNSUPPORTED_Y ? stringSlice(S, q) : S);\n var e;\n if (\n z === null ||\n (e = min(toLength(splitter.lastIndex + (UNSUPPORTED_Y ? q : 0)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n push(A, stringSlice(S, p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n push(A, z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n push(A, stringSlice(S, p));\n return A;\n }\n ];\n}, !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC, UNSUPPORTED_Y);\n"],"names":["canonicalURL","requestContext","requestUrl","url","origin","path","pathname","toLowerCase","urlParts","split","splice","match","removePipeSignValue","removeKeywords","join","filteredURL","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","refinerValueKeyName","LeftValueBoundString","replace","regExSpecialChars","canonicalUrlspecialCharIncludeList","navLinkKeywordRemoval","link","linkBase","linkParams","endsWith","linkParam","map","param","includeConfigList","includeConfig","RegExp","GetSeoDataInput","Msdyn365","constructor","seoDataUrl","super","shouldCacheOutput","cacheObjectType","cacheKey","getSeoDataUrl","this","getCacheKey","getCacheObjectType","dataCacheType","action","input","ctx","jsonUrl","res","filteredUrlPath","seoData","data","inputData","MFRMCategoryPageSummaryInput","buildCacheKeyWithUrlTokens","_getSEOMetaTagValue","currentCategory","keyValue","ExtensionProperties","find","attr","Key","Value","StringValue","getFallbackTitle","context","activeRefinerList","searchCriteria","SearchCondition","Context","ChannelId","apiSettings","channelId","CatalogId","catalogId","getProductSearchRefinersAsync","callerContext","then","productRefiners","telemetry","error","result","productRefiner","catch","err","console","log","getAllRefinersAction","refiners","CategoryHierarchy","configVirtualRefinerNames","filteredRefiners","refiner","KeyName","slugArray","pathArray","slug","Slug","sortedConfigValues","categoryId","removedCategorySlug","refinerParts","_slug","refinerPart","index","finalRefinerParts","item","includes","flatten","sortedValues","refinerSet","toLocaleLowerCase","sortedValue","Object","keys","finalRefiners","sortedConfigValue","sortedRefinerName","_getActiveRefiners","concateTitle","createObservableDataAction","id","seoInput","getSEOData","seoPageTitle","seoPageMetaData","getCurrentCategory","CurrentCategoryInput","Error","createGetCurrentCategoryInput","e","categoryUrl","fallbackTitle","pageTitle","pageTitleParser","getHtmlParserValue","fallBackMeta","categoryPageMetaData","categoryPageMetaDataParser","localName","getFriendlyName","locale","NameTranslations","neutralizedName","NeutralizedName","Name","getCategoryUrl","canonicalDomain","skipCount","query","skip","Url","URL","urlParams","URLSearchParams","search","set","toString","removeDomainQspFromUrl","title","description","sharingImageUrl","OfflineImage","canonicalUrl","faviconUrl","sharingImage","src","args","tryToString","$TypeError","TypeError","module","exports","O","P","$","uncurryThis","aCallable","toObject","lengthOfArrayLike","deletePropertyOrThrow","fails","internalSort","arrayMethodIsStrict","FF","IE_OR_EDGE","V8","WEBKIT","test","nativeSort","FAILS_ON_UNDEFINED","FAILS_ON_NULL","STRICT_METHOD","STABLE_SORT","code","chr","value","String","fromCharCode","k","v","charAt","target","proto","forced","comparefn","array","itemsLength","items","arrayLength","x","y","getSortCompare","call","fixRegExpWellKnownSymbolLogic","anObject","isNullOrUndefined","toLength","requireObjectCoercible","getMethod","advanceStringIndex","regExpExec","MATCH","nativeMatch","maybeCallNative","regexp","matcher","string","rx","S","done","global","fullUnicode","unicode","lastIndex","A","n","matchStr","apply","isRegExp","speciesConstructor","arraySlice","callRegExpExec","regexpExec","stickyHelpers","UNSUPPORTED_Y","MAX_UINT32","min","Math","$push","exec","stringSlice","slice","SPLIT","nativeSplit","internalSplit","separator","limit","lim","lastLength","output","flags","ignoreCase","multiline","sticky","lastLastIndex","separatorCopy","source","splitter","C","unicodeMatching","p","q","z","i","re","originalExec","arguments"],"sourceRoot":""}