import { EncodedNameTransformMap, MANIFEST_EXT, NameTransformMap, NameTransformSymbol, SEPARATOR } from "./constant.js"; import { getProcessEnv, isBrowserEnv, isReactNativeEnv } from "./env.js"; //#region src/utils.ts const LOG_CATEGORY = "[ Federation Runtime ]"; const parseEntry = (str, devVerOrUrl, separator = SEPARATOR) => { const strSplit = str.split(separator); const devVersionOrUrl = getProcessEnv()["NODE_ENV"] === "development" && devVerOrUrl; const defaultVersion = "*"; const isEntry = (s) => s.startsWith("http") || s.includes(MANIFEST_EXT); if (strSplit.length >= 2) { let [name, ...versionOrEntryArr] = strSplit; if (str.startsWith(separator)) { name = strSplit.slice(0, 2).join(separator); versionOrEntryArr = [devVersionOrUrl || strSplit.slice(2).join(separator)]; } let versionOrEntry = devVersionOrUrl || versionOrEntryArr.join(separator); if (isEntry(versionOrEntry)) return { name, entry: versionOrEntry }; else return { name, version: versionOrEntry || defaultVersion }; } else if (strSplit.length === 1) { const [name] = strSplit; if (devVersionOrUrl && isEntry(devVersionOrUrl)) return { name, entry: devVersionOrUrl }; return { name, version: devVersionOrUrl || defaultVersion }; } else throw `Invalid entry value: ${str}`; }; const composeKeyWithSeparator = function(...args) { if (!args.length) return ""; return args.reduce((sum, cur) => { if (!cur) return sum; if (!sum) return cur; return `${sum}${SEPARATOR}${cur}`; }, ""); }; const encodeName = function(name, prefix = "", withExt = false) { try { const ext = withExt ? ".js" : ""; return `${prefix}${name.replace(new RegExp(`${NameTransformSymbol.AT}`, "g"), NameTransformMap[NameTransformSymbol.AT]).replace(new RegExp(`${NameTransformSymbol.HYPHEN}`, "g"), NameTransformMap[NameTransformSymbol.HYPHEN]).replace(new RegExp(`${NameTransformSymbol.SLASH}`, "g"), NameTransformMap[NameTransformSymbol.SLASH])}${ext}`; } catch (err) { throw err; } }; const decodeName = function(name, prefix, withExt) { try { let decodedName = name; if (prefix) { if (!decodedName.startsWith(prefix)) return decodedName; decodedName = decodedName.replace(new RegExp(prefix, "g"), ""); } decodedName = decodedName.replace(new RegExp(`${NameTransformMap[NameTransformSymbol.AT]}`, "g"), EncodedNameTransformMap[NameTransformMap[NameTransformSymbol.AT]]).replace(new RegExp(`${NameTransformMap[NameTransformSymbol.SLASH]}`, "g"), EncodedNameTransformMap[NameTransformMap[NameTransformSymbol.SLASH]]).replace(new RegExp(`${NameTransformMap[NameTransformSymbol.HYPHEN]}`, "g"), EncodedNameTransformMap[NameTransformMap[NameTransformSymbol.HYPHEN]]); if (withExt) decodedName = decodedName.replace(".js", ""); return decodedName; } catch (err) { throw err; } }; const generateExposeFilename = (exposeName, withExt) => { if (!exposeName) return ""; let expose = exposeName; if (expose === ".") expose = "default_export"; if (expose.startsWith("./")) expose = expose.replace("./", ""); return encodeName(expose, "__federation_expose_", withExt); }; const generateShareFilename = (pkgName, withExt) => { if (!pkgName) return ""; return encodeName(pkgName, "__federation_shared_", withExt); }; const getResourceUrl = (module, sourceUrl) => { if ("getPublicPath" in module) { let publicPath; if (!module.getPublicPath.startsWith("function")) publicPath = new Function(module.getPublicPath)(); else publicPath = new Function("return " + module.getPublicPath)()(); return `${publicPath}${sourceUrl}`; } else if ("publicPath" in module) { if (!isBrowserEnv() && !isReactNativeEnv() && "ssrPublicPath" in module && typeof module.ssrPublicPath === "string") return `${module.ssrPublicPath}${sourceUrl}`; return `${module.publicPath}${sourceUrl}`; } else { console.warn("Cannot get resource URL. If in debug mode, please ignore.", module, sourceUrl); return ""; } }; const assert = (condition, msg) => { if (!condition) error(msg); }; const error = (msg) => { throw new Error(`${LOG_CATEGORY}: ${msg}`); }; const warn = (msg) => { console.warn(`${LOG_CATEGORY}: ${msg}`); }; function safeToString(info) { try { return JSON.stringify(info, null, 2); } catch (e) { return ""; } } const VERSION_PATTERN_REGEXP = /^([\d^=v<>~]|[*xX]$)/; function isRequiredVersion(str) { return VERSION_PATTERN_REGEXP.test(str); } //#endregion export { assert, composeKeyWithSeparator, decodeName, encodeName, error, generateExposeFilename, generateShareFilename, getResourceUrl, isRequiredVersion, parseEntry, safeToString, warn }; //# sourceMappingURL=utils.js.map