{"version":3,"file":"utils.cjs","names":["SEPARATOR","getProcessEnv","MANIFEST_EXT","NameTransformSymbol","NameTransformMap","EncodedNameTransformMap","isBrowserEnv","isReactNativeEnv"],"sources":["../src/utils.ts"],"sourcesContent":["import { RemoteEntryInfo, ModuleInfo } from './types';\nimport {\n NameTransformMap,\n NameTransformSymbol,\n EncodedNameTransformMap,\n SEPARATOR,\n MANIFEST_EXT,\n} from './constant';\nimport { getProcessEnv, isBrowserEnv, isReactNativeEnv } from './env';\n\nconst LOG_CATEGORY = '[ Federation Runtime ]';\n\n// entry: name:version version : 1.0.0 | ^1.2.3\n// entry: name:entry entry: https://localhost:9000/federation-manifest.json\nconst parseEntry = (\n str: string,\n devVerOrUrl?: string,\n separator = SEPARATOR,\n): RemoteEntryInfo => {\n const strSplit = str.split(separator);\n const devVersionOrUrl =\n getProcessEnv()['NODE_ENV'] === 'development' && devVerOrUrl;\n const defaultVersion = '*';\n const isEntry = (s: string) =>\n s.startsWith('http') || s.includes(MANIFEST_EXT);\n\n // Check if the string starts with a type\n if (strSplit.length >= 2) {\n let [name, ...versionOrEntryArr] = strSplit;\n // @name@manifest-url.json\n if (str.startsWith(separator)) {\n name = strSplit.slice(0, 2).join(separator);\n versionOrEntryArr = [\n devVersionOrUrl || strSplit.slice(2).join(separator),\n ];\n }\n\n let versionOrEntry = devVersionOrUrl || versionOrEntryArr.join(separator);\n\n if (isEntry(versionOrEntry)) {\n return {\n name,\n entry: versionOrEntry,\n };\n } else {\n // Apply version rule\n // devVersionOrUrl => inputVersion => defaultVersion\n return {\n name,\n version: versionOrEntry || defaultVersion,\n };\n }\n } else if (strSplit.length === 1) {\n const [name] = strSplit;\n if (devVersionOrUrl && isEntry(devVersionOrUrl)) {\n return {\n name,\n entry: devVersionOrUrl,\n };\n }\n return {\n name,\n version: devVersionOrUrl || defaultVersion,\n };\n } else {\n throw `Invalid entry value: ${str}`;\n }\n};\n\ndeclare global {\n // eslint-disable-next-line no-var\n var FEDERATION_DEBUG: string | undefined;\n}\n\nconst composeKeyWithSeparator = function (\n ...args: (string | undefined)[]\n): string {\n if (!args.length) {\n return '';\n }\n\n return args.reduce((sum, cur) => {\n if (!cur) {\n return sum;\n }\n if (!sum) {\n return cur;\n }\n\n return `${sum}${SEPARATOR}${cur}`;\n }, '') as string;\n};\n\nconst encodeName = function (\n name: string,\n prefix = '',\n withExt = false,\n): string {\n try {\n const ext = withExt ? '.js' : '';\n return `${prefix}${name\n .replace(\n new RegExp(`${NameTransformSymbol.AT}`, 'g'),\n NameTransformMap[NameTransformSymbol.AT],\n )\n .replace(\n new RegExp(`${NameTransformSymbol.HYPHEN}`, 'g'),\n NameTransformMap[NameTransformSymbol.HYPHEN],\n )\n .replace(\n new RegExp(`${NameTransformSymbol.SLASH}`, 'g'),\n NameTransformMap[NameTransformSymbol.SLASH],\n )}${ext}`;\n } catch (err) {\n throw err;\n }\n};\n\nconst decodeName = function (\n name: string,\n prefix?: string,\n withExt?: boolean,\n): string {\n try {\n let decodedName = name;\n if (prefix) {\n if (!decodedName.startsWith(prefix)) {\n return decodedName;\n }\n decodedName = decodedName.replace(new RegExp(prefix, 'g'), '');\n }\n decodedName = decodedName\n .replace(\n new RegExp(`${NameTransformMap[NameTransformSymbol.AT]}`, 'g'),\n EncodedNameTransformMap[NameTransformMap[NameTransformSymbol.AT]],\n )\n .replace(\n new RegExp(`${NameTransformMap[NameTransformSymbol.SLASH]}`, 'g'),\n EncodedNameTransformMap[NameTransformMap[NameTransformSymbol.SLASH]],\n )\n .replace(\n new RegExp(`${NameTransformMap[NameTransformSymbol.HYPHEN]}`, 'g'),\n EncodedNameTransformMap[NameTransformMap[NameTransformSymbol.HYPHEN]],\n );\n if (withExt) {\n decodedName = decodedName.replace('.js', '');\n }\n return decodedName;\n } catch (err) {\n throw err;\n }\n};\n\nconst generateExposeFilename = (\n exposeName: string,\n withExt: boolean,\n): string => {\n if (!exposeName) {\n return '';\n }\n\n let expose = exposeName;\n if (expose === '.') {\n expose = 'default_export';\n }\n if (expose.startsWith('./')) {\n expose = expose.replace('./', '');\n }\n\n return encodeName(expose, '__federation_expose_', withExt);\n};\n\nconst generateShareFilename = (pkgName: string, withExt: boolean): string => {\n if (!pkgName) {\n return '';\n }\n return encodeName(pkgName, '__federation_shared_', withExt);\n};\n\nconst getResourceUrl = (module: ModuleInfo, sourceUrl: string): string => {\n if ('getPublicPath' in module) {\n let publicPath;\n\n if (!module.getPublicPath.startsWith('function')) {\n publicPath = new Function(module.getPublicPath)();\n } else {\n publicPath = new Function('return ' + module.getPublicPath)()();\n }\n\n return `${publicPath}${sourceUrl}`;\n } else if ('publicPath' in module) {\n if (\n !isBrowserEnv() &&\n !isReactNativeEnv() &&\n 'ssrPublicPath' in module &&\n typeof module.ssrPublicPath === 'string'\n ) {\n return `${module.ssrPublicPath}${sourceUrl}`;\n }\n return `${module.publicPath}${sourceUrl}`;\n } else {\n console.warn(\n 'Cannot get resource URL. If in debug mode, please ignore.',\n module,\n sourceUrl,\n );\n return '';\n }\n};\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nconst assert = (condition: any, msg: string): asserts condition => {\n if (!condition) {\n error(msg);\n }\n};\n\nconst error = (msg: string | Error | unknown): never => {\n throw new Error(`${LOG_CATEGORY}: ${msg}`);\n};\n\nconst warn = (msg: Parameters[0]): void => {\n console.warn(`${LOG_CATEGORY}: ${msg}`);\n};\n\nfunction safeToString(info: any): string {\n try {\n return JSON.stringify(info, null, 2);\n } catch (e) {\n return '';\n }\n}\n\n// RegExp for version string\nconst VERSION_PATTERN_REGEXP: RegExp = /^([\\d^=v<>~]|[*xX]$)/;\n\nfunction isRequiredVersion(str: string): boolean {\n return VERSION_PATTERN_REGEXP.test(str);\n}\n\nexport {\n parseEntry,\n decodeName,\n encodeName,\n composeKeyWithSeparator,\n generateExposeFilename,\n generateShareFilename,\n getResourceUrl,\n assert,\n error,\n warn,\n safeToString,\n isRequiredVersion,\n};\n"],"mappings":"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"}