{"version":3,"file":"js/86428-dbb22c0c7c2f29a29549.js","mappings":"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","sources":["webpack://StravaModern/./app/javascript/apps/Microfrontend/styles.scss?dd46","webpack://StravaModern/./app/javascript/apps/Microfrontend/Microfrontend.js"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"mfcontainer\":\"Microfrontend--mfcontainer--Sw1H-\"};","import * as ContainerContext from '@strava/container-context';\nimport * as PropTypes from 'prop-types';\nimport * as React from 'react';\nimport { devLog } from '../../utils/devUtils';\nimport I18n from '../../utils/I18n';\nimport { logError, withScope } from '../../utils/sentry';\nimport styles from './styles.scss';\n\n// eslint-disable-next-line no-underscore-dangle\nwindow.__mfe_containers__ ??= {};\n\nconst ENTRY_ERROR_CODE_GENERAL = 0;\n\nconst ENTRY_ERROR_CODE_NETWORK = 1;\n\nconst DEFAULT_ACTIVE_SHARE_SCOPE = {\n react: {\n [React.version]: {\n get: () => () => React,\n from: 'webpack4',\n loaded: true,\n singleton: true\n }\n },\n '@strava/container-context': {\n // eslint-disable-next-line no-undef\n [CONTAINER_CONTEXT_VERSION]: {\n get: () => () => ContainerContext,\n from: 'webpack4',\n loaded: true,\n singleton: true\n }\n }\n};\n\nconst DEFAULT_ANALYTICS_CONTEXT_VALUE = {\n track: (data) => window.Strava.ExternalAnalytics.trackV2(data)\n};\n\nconst DEFAULT_TRANSLATION_CONTEXT_VALUE = {\n t: (key, props = {}) => I18n.t(key, props),\n getLanguage: () => I18n.language()\n};\n\nconst DEFAULT_ERROR_LOGGING_CONTEXT_VALUE = { logError };\n\nconst {\n AnalyticsContext,\n ErrorLoggingContext,\n TranslationContext\n} = ContainerContext;\n\nconst { Provider: AnalyticsProvider } = AnalyticsContext;\nconst { Provider: TranslationProvider } = TranslationContext;\nconst { Provider: ErrorLoggingProvider } = ErrorLoggingContext;\n\nconst isNil = (value) => value === null || value === undefined;\n\nconst isFunction = (value) => typeof value === 'function';\n\nconst hasProperty = (object, property) =>\n Object.prototype.hasOwnProperty.call(object, property);\n\nconst resolveRemoteContainer = ({\n shareScope = {},\n remoteEntry,\n containerName\n}) => {\n // eslint-disable-next-line no-underscore-dangle\n const containers = window.__mfe_containers__;\n\n containers[containerName] ??= new Promise((resolve, reject) => {\n const headEl = document.querySelector('head');\n const scriptEl = document.createElement('script');\n\n const onEntryError = (error, code = ENTRY_ERROR_CODE_GENERAL) => {\n if (error instanceof Error) {\n reject(error);\n } else {\n const entryError = new Error(error);\n\n entryError.name = 'MfeError';\n entryError.code = code;\n\n reject(entryError);\n }\n };\n\n const onEntryLoaded = () => {\n if (!hasProperty(window, containerName)) {\n onEntryError(\n `Remote container with name \"${containerName}\" does not exist.`\n );\n return;\n }\n\n const container = window[containerName];\n\n if (isNil(container)) {\n onEntryError(`Remote container with name \"${containerName}\" is nil.`);\n return;\n }\n\n if (!isFunction(container.get) || !isFunction(container.init)) {\n onEntryError(\n `Remote container with name \"${containerName}\" is invalid.`\n );\n return;\n }\n\n Promise.resolve(container.init(shareScope))\n .catch(onEntryError)\n .then(() => {\n resolve(container);\n devLog(`MFE Loaded:\\n${containerName}\\n${remoteEntry}`);\n });\n };\n\n scriptEl.src = remoteEntry;\n scriptEl.type = 'text/javascript';\n scriptEl.async = true;\n\n scriptEl.addEventListener('load', () => onEntryLoaded());\n scriptEl.addEventListener('error', () =>\n onEntryError(\n `Remote container with name \"${containerName}\" failed to load.`,\n ENTRY_ERROR_CODE_NETWORK\n )\n );\n\n headEl.appendChild(scriptEl);\n });\n\n return containers[containerName];\n};\n\nconst createFederatedComponent = (options) => {\n const {\n mfeStatus,\n shareScope,\n remoteEntry,\n containerName,\n containerRequest\n } = options;\n\n return React.lazy(() => {\n const onBeforeUnload = () => {\n window.removeEventListener('beforeunload', onBeforeUnload);\n mfeStatus.isUnloading = true;\n };\n\n const cleanup = () => {\n window.removeEventListener('beforeunload', onBeforeUnload);\n };\n\n const tapReject = (error) => {\n cleanup();\n return Promise.reject(error);\n };\n\n mfeStatus.isResolving = true;\n\n window.addEventListener('beforeunload', onBeforeUnload);\n\n return resolveRemoteContainer({\n shareScope,\n remoteEntry,\n containerName\n })\n .catch(tapReject)\n .then((container) => {\n const moduleFactory = Promise.resolve(container.get(containerRequest))\n .catch(tapReject)\n .then((value) => {\n cleanup();\n\n mfeStatus.isResolving = false;\n\n return Promise.resolve(value);\n });\n\n return moduleFactory.then((resolveModule) => resolveModule());\n });\n });\n};\n\nclass MfeErrorBoundary extends React.Component {\n static contextType = ErrorLoggingContext;\n\n state = { error: false };\n\n static getDerivedStateFromError = (error) => ({ error });\n\n componentDidCatch(error, { componentStack }) {\n if (this.isFalsePositiveNetworkError(error)) {\n return;\n }\n\n const { shareScope } = this.props;\n\n const { logError: logException = logError } =\n /** @type {{ logError?: typeof logError }} */ (this.context ?? {});\n\n logException(error, {\n contexts: {\n contexts: {\n react: { componentStack },\n microfrontend: {\n // eslint-disable-next-line no-underscore-dangle\n containers: Object.keys(window.__mfe_containers__),\n shareScope: JSON.stringify(\n Object.keys(shareScope).reduce(\n (memo, current) => ({\n ...memo,\n [current]: Object.keys(shareScope[current])\n }),\n {}\n ),\n null,\n 2\n )\n }\n }\n }\n });\n }\n\n isFalsePositiveNetworkError(error) {\n const { mfeStatus } = this.props;\n const { isUnloading, isResolving } = mfeStatus;\n\n const isChunkLoadError = error.name === 'ChunkLoadError';\n const isMfeNetworkError =\n error.name === 'MfeError' && error.code === ENTRY_ERROR_CODE_NETWORK;\n\n return (\n (isUnloading || isResolving) && (isChunkLoadError || isMfeNetworkError)\n );\n }\n\n render() {\n const { error } = this.state;\n const { children } = this.props;\n\n if (error) {\n return null;\n }\n\n return children;\n }\n}\n\nMfeErrorBoundary.propTypes = {\n children: PropTypes.element.isRequired,\n mfeStatus: PropTypes.shape({\n isUnloading: PropTypes.bool.isRequired,\n isResolving: PropTypes.bool.isRequired\n }).isRequired,\n shareScope: PropTypes.shape({}).isRequired\n};\n\nconst Microfrontend = ({\n url: remoteEntry,\n scope: containerName,\n component: containerRequest,\n appContext\n}) => {\n const isMountedRef = React.useRef(false);\n const mfeStatusRef = React.useRef({ isUnloading: false, isResolving: false });\n const shareScope = DEFAULT_ACTIVE_SHARE_SCOPE;\n const analyticsContext =\n React.useContext(AnalyticsContext) ?? DEFAULT_ANALYTICS_CONTEXT_VALUE;\n const translationContext =\n React.useContext(TranslationContext) ?? DEFAULT_TRANSLATION_CONTEXT_VALUE;\n const errorLoggingContext =\n React.useContext(ErrorLoggingContext) ??\n DEFAULT_ERROR_LOGGING_CONTEXT_VALUE;\n\n const wrappedErrorLoggingContext = React.useMemo(() => {\n const { logError: originalLogError } = errorLoggingContext;\n\n /** @type {typeof logError} */\n const wrappedLogError = (exception, captureContext) => {\n withScope((scope) => {\n scope.setTags({\n 'mfe.name': containerName,\n 'mfe.request': containerRequest,\n 'mfe.remoteEntry': remoteEntry\n });\n\n originalLogError(exception, captureContext);\n });\n };\n\n return {\n ...errorLoggingContext,\n logError: wrappedLogError\n };\n }, [containerName, containerRequest, remoteEntry, errorLoggingContext]);\n\n const [\n { errorBoundaryKey, FederatedComponent },\n updateMfeState\n ] = React.useState(() => ({\n errorBoundaryKey: 0,\n FederatedComponent: createFederatedComponent({\n mfeStatus: mfeStatusRef.current,\n shareScope,\n remoteEntry,\n containerName,\n containerRequest\n })\n }));\n\n React.useEffect(() => {\n if (!isMountedRef.current) {\n return;\n }\n\n updateMfeState(({ errorBoundaryKey: currentBoundaryKey }) => ({\n errorBoundaryKey: currentBoundaryKey + 1,\n FederatedComponent: createFederatedComponent({\n mfeStatus: mfeStatusRef.current,\n shareScope,\n remoteEntry,\n containerName,\n containerRequest\n })\n }));\n }, [\n shareScope,\n remoteEntry,\n isMountedRef,\n mfeStatusRef,\n containerName,\n containerRequest\n ]);\n\n React.useEffect(() => {\n isMountedRef.current = true;\n\n return () => {\n isMountedRef.current = false;\n };\n }, [isMountedRef]);\n\n return (\n