@module-federation/runtime-core 2.0.1 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/_rolldown/runtime.cjs +19 -0
- package/dist/_virtual/_rolldown/runtime.js +18 -0
- package/dist/constant.cjs +9 -0
- package/dist/constant.cjs.map +1 -0
- package/dist/constant.js +7 -0
- package/dist/constant.js.map +1 -0
- package/dist/core.cjs +153 -0
- package/dist/core.cjs.map +1 -0
- package/dist/core.d.ts +129 -0
- package/dist/core.js +153 -0
- package/dist/core.js.map +1 -0
- package/dist/global.cjs +160 -0
- package/dist/global.cjs.map +1 -0
- package/dist/global.d.ts +45 -0
- package/dist/global.js +142 -0
- package/dist/global.js.map +1 -0
- package/dist/helpers.cjs +44 -0
- package/dist/helpers.cjs.map +1 -0
- package/dist/helpers.d.ts +30 -0
- package/dist/helpers.js +44 -0
- package/dist/helpers.js.map +1 -0
- package/dist/index.cjs +60 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +29 -1
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/module/index.cjs +129 -0
- package/dist/module/index.cjs.map +1 -0
- package/dist/module/index.d.ts +31 -0
- package/dist/module/index.js +129 -0
- package/dist/module/index.js.map +1 -0
- package/dist/plugins/generate-preload-assets.cjs +182 -0
- package/dist/plugins/generate-preload-assets.cjs.map +1 -0
- package/dist/plugins/generate-preload-assets.js +182 -0
- package/dist/plugins/generate-preload-assets.js.map +1 -0
- package/dist/plugins/snapshot/SnapshotHandler.cjs +190 -0
- package/dist/plugins/snapshot/SnapshotHandler.cjs.map +1 -0
- package/dist/plugins/snapshot/SnapshotHandler.d.ts +66 -0
- package/dist/plugins/snapshot/SnapshotHandler.js +189 -0
- package/dist/plugins/snapshot/SnapshotHandler.js.map +1 -0
- package/dist/plugins/snapshot/index.cjs +63 -0
- package/dist/plugins/snapshot/index.cjs.map +1 -0
- package/dist/plugins/snapshot/index.js +62 -0
- package/dist/plugins/snapshot/index.js.map +1 -0
- package/dist/remote/index.cjs +304 -0
- package/dist/remote/index.cjs.map +1 -0
- package/dist/remote/index.d.ts +119 -0
- package/dist/remote/index.js +304 -0
- package/dist/remote/index.js.map +1 -0
- package/dist/shared/index.cjs +303 -0
- package/dist/shared/index.cjs.map +1 -0
- package/dist/shared/index.d.ts +82 -0
- package/dist/shared/index.js +303 -0
- package/dist/shared/index.js.map +1 -0
- package/dist/type/config.d.ts +130 -0
- package/dist/type/index.cjs +13 -0
- package/dist/type/index.cjs.map +1 -0
- package/dist/type/index.d.ts +11 -0
- package/dist/type/index.js +8 -0
- package/dist/type/index.js.map +1 -0
- package/dist/type/plugin.d.ts +27 -0
- package/dist/type/preload.d.ts +31 -0
- package/dist/types.cjs +0 -0
- package/dist/types.d.ts +4 -1
- package/dist/types.js +1 -0
- package/dist/utils/context.cjs +45 -0
- package/dist/utils/context.cjs.map +1 -0
- package/dist/utils/context.d.ts +1 -0
- package/dist/utils/context.js +44 -0
- package/dist/utils/context.js.map +1 -0
- package/dist/utils/env.cjs +10 -0
- package/dist/utils/env.cjs.map +1 -0
- package/dist/utils/env.d.ts +1 -0
- package/dist/utils/env.js +10 -0
- package/dist/utils/env.js.map +1 -0
- package/dist/utils/hooks/asyncHook.cjs +23 -0
- package/dist/utils/hooks/asyncHook.cjs.map +1 -0
- package/dist/utils/hooks/asyncHook.d.ts +10 -0
- package/dist/utils/hooks/asyncHook.js +23 -0
- package/dist/utils/hooks/asyncHook.js.map +1 -0
- package/dist/utils/hooks/asyncWaterfallHooks.cjs +42 -0
- package/dist/utils/hooks/asyncWaterfallHooks.cjs.map +1 -0
- package/dist/utils/hooks/asyncWaterfallHooks.d.ts +12 -0
- package/dist/utils/hooks/asyncWaterfallHooks.js +42 -0
- package/dist/utils/hooks/asyncWaterfallHooks.js.map +1 -0
- package/dist/utils/hooks/index.cjs +5 -0
- package/dist/utils/hooks/index.d.ts +5 -0
- package/dist/utils/hooks/index.js +7 -0
- package/dist/utils/hooks/pluginSystem.cjs +37 -0
- package/dist/utils/hooks/pluginSystem.cjs.map +1 -0
- package/dist/utils/hooks/pluginSystem.d.ts +19 -0
- package/dist/utils/hooks/pluginSystem.js +37 -0
- package/dist/utils/hooks/pluginSystem.js.map +1 -0
- package/dist/utils/hooks/syncHook.cjs +36 -0
- package/dist/utils/hooks/syncHook.cjs.map +1 -0
- package/dist/utils/hooks/syncHook.d.ts +16 -0
- package/dist/utils/hooks/syncHook.js +35 -0
- package/dist/utils/hooks/syncHook.js.map +1 -0
- package/dist/utils/hooks/syncWaterfallHook.cjs +39 -0
- package/dist/utils/hooks/syncWaterfallHook.cjs.map +1 -0
- package/dist/utils/hooks/syncWaterfallHook.d.ts +11 -0
- package/dist/utils/hooks/syncWaterfallHook.js +38 -0
- package/dist/utils/hooks/syncWaterfallHook.js.map +1 -0
- package/dist/utils/index.cjs +8 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.js +9 -0
- package/dist/utils/load.cjs +179 -0
- package/dist/utils/load.cjs.map +1 -0
- package/dist/utils/load.d.ts +14 -0
- package/dist/utils/load.js +177 -0
- package/dist/utils/load.js.map +1 -0
- package/dist/utils/logger.cjs +34 -0
- package/dist/utils/logger.cjs.map +1 -0
- package/dist/utils/logger.d.ts +10 -0
- package/dist/utils/logger.js +31 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/manifest.cjs +51 -0
- package/dist/utils/manifest.cjs.map +1 -0
- package/dist/utils/manifest.d.ts +10 -0
- package/dist/utils/manifest.js +49 -0
- package/dist/utils/manifest.js.map +1 -0
- package/dist/utils/plugin.cjs +27 -0
- package/dist/utils/plugin.cjs.map +1 -0
- package/dist/utils/plugin.d.ts +1 -0
- package/dist/utils/plugin.js +27 -0
- package/dist/utils/plugin.js.map +1 -0
- package/dist/utils/preload.cjs +146 -0
- package/dist/utils/preload.cjs.map +1 -0
- package/dist/utils/preload.d.ts +8 -0
- package/dist/utils/preload.js +143 -0
- package/dist/utils/preload.js.map +1 -0
- package/dist/utils/semver/compare.cjs +48 -0
- package/dist/utils/semver/compare.cjs.map +1 -0
- package/dist/utils/semver/compare.js +47 -0
- package/dist/utils/semver/compare.js.map +1 -0
- package/dist/utils/semver/constants.cjs +41 -0
- package/dist/utils/semver/constants.cjs.map +1 -0
- package/dist/utils/semver/constants.js +31 -0
- package/dist/utils/semver/constants.js.map +1 -0
- package/dist/utils/semver/index.cjs +68 -0
- package/dist/utils/semver/index.cjs.map +1 -0
- package/dist/utils/semver/index.d.ts +5 -0
- package/dist/utils/semver/index.js +68 -0
- package/dist/utils/semver/index.js.map +1 -0
- package/dist/utils/semver/parser.cjs +104 -0
- package/dist/utils/semver/parser.cjs.map +1 -0
- package/dist/utils/semver/parser.js +96 -0
- package/dist/utils/semver/parser.js.map +1 -0
- package/dist/utils/semver/utils.cjs +28 -0
- package/dist/utils/semver/utils.cjs.map +1 -0
- package/dist/utils/semver/utils.js +24 -0
- package/dist/utils/semver/utils.js.map +1 -0
- package/dist/utils/share.cjs +284 -0
- package/dist/utils/share.cjs.map +1 -0
- package/dist/utils/share.d.ts +23 -0
- package/dist/utils/share.js +278 -0
- package/dist/utils/share.js.map +1 -0
- package/dist/utils/tool.cjs +82 -0
- package/dist/utils/tool.cjs.map +1 -0
- package/dist/utils/tool.d.ts +8 -0
- package/dist/utils/tool.js +71 -0
- package/dist/utils/tool.js.map +1 -0
- package/package.json +16 -9
- package/dist/index.cjs.cjs +0 -3442
- package/dist/index.cjs.cjs.map +0 -1
- package/dist/index.cjs.d.ts +0 -1
- package/dist/index.esm.js +0 -3418
- package/dist/index.esm.js.map +0 -1
- package/dist/src/constant.d.ts +0 -2
- package/dist/src/core.d.ts +0 -119
- package/dist/src/global.d.ts +0 -42
- package/dist/src/helpers.d.ts +0 -38
- package/dist/src/index.d.ts +0 -14
- package/dist/src/module/index.d.ts +0 -25
- package/dist/src/plugins/generate-preload-assets.d.ts +0 -8
- package/dist/src/plugins/snapshot/SnapshotHandler.d.ts +0 -60
- package/dist/src/plugins/snapshot/index.d.ts +0 -5
- package/dist/src/remote/index.d.ts +0 -109
- package/dist/src/shared/index.d.ts +0 -75
- package/dist/src/type/config.d.ts +0 -128
- package/dist/src/type/index.d.ts +0 -3
- package/dist/src/type/plugin.d.ts +0 -35
- package/dist/src/type/preload.d.ts +0 -26
- package/dist/src/types.d.ts +0 -1
- package/dist/src/utils/env.d.ts +0 -3
- package/dist/src/utils/hooks/asyncHook.d.ts +0 -6
- package/dist/src/utils/hooks/asyncWaterfallHooks.d.ts +0 -10
- package/dist/src/utils/hooks/index.d.ts +0 -6
- package/dist/src/utils/hooks/pluginSystem.d.ts +0 -16
- package/dist/src/utils/hooks/syncHook.d.ts +0 -12
- package/dist/src/utils/hooks/syncWaterfallHook.d.ts +0 -9
- package/dist/src/utils/index.d.ts +0 -6
- package/dist/src/utils/load.d.ts +0 -11
- package/dist/src/utils/logger.d.ts +0 -6
- package/dist/src/utils/manifest.d.ts +0 -7
- package/dist/src/utils/plugin.d.ts +0 -3
- package/dist/src/utils/preload.d.ts +0 -6
- package/dist/src/utils/semver/compare.d.ts +0 -9
- package/dist/src/utils/semver/constants.d.ts +0 -10
- package/dist/src/utils/semver/index.d.ts +0 -2
- package/dist/src/utils/semver/parser.d.ts +0 -9
- package/dist/src/utils/semver/utils.d.ts +0 -11
- package/dist/src/utils/share.d.ts +0 -45
- package/dist/src/utils/tool.d.ts +0 -18
- package/dist/types.cjs.cjs +0 -3
- package/dist/types.cjs.cjs.map +0 -1
- package/dist/types.cjs.d.ts +0 -1
- package/dist/types.esm.js +0 -2
- package/dist/types.esm.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"share.js","names":[],"sources":["../../src/utils/share.ts"],"sourcesContent":["import { DEFAULT_SCOPE } from '../constant';\nimport { TreeShakingStatus } from '@module-federation/sdk';\nimport { Global, Federation } from '../global';\nimport {\n GlobalShareScopeMap,\n Shared,\n ShareArgs,\n ShareInfos,\n ShareScopeMap,\n LoadShareExtraOptions,\n UserOptions,\n Options,\n ShareStrategy,\n TreeShakingArgs,\n SharedGetter,\n} from '../type';\nimport { warn, error } from './logger';\nimport { satisfy } from './semver';\nimport { SyncWaterfallHook } from './hooks';\nimport { addUniqueItem, arrayOptions } from './tool';\n\nfunction formatShare(\n shareArgs: ShareArgs,\n from: string,\n name: string,\n shareStrategy?: ShareStrategy,\n): Shared {\n let get: Shared['get'];\n if ('get' in shareArgs) {\n // eslint-disable-next-line prefer-destructuring\n get = shareArgs.get;\n } else if ('lib' in shareArgs) {\n get = () => Promise.resolve(shareArgs.lib);\n } else {\n get = () =>\n Promise.resolve(() => {\n error(\n `Cannot get shared \"${name}\" from \"${from}\": neither \"get\" nor \"lib\" is provided in the share config.`,\n );\n });\n }\n\n if (shareArgs.shareConfig?.eager && shareArgs.treeShaking?.mode) {\n error(\n `Invalid shared config for \"${name}\" from \"${from}\": cannot use both \"eager: true\" and \"treeShaking.mode\" simultaneously. Choose one strategy.`,\n );\n }\n\n return {\n deps: [],\n useIn: [],\n from,\n loading: null,\n ...shareArgs,\n shareConfig: {\n requiredVersion: `^${shareArgs.version}`,\n singleton: false,\n eager: false,\n strictVersion: false,\n ...shareArgs.shareConfig,\n },\n get,\n loaded: shareArgs?.loaded || 'lib' in shareArgs ? true : undefined,\n version: shareArgs.version ?? '0',\n scope: Array.isArray(shareArgs.scope)\n ? shareArgs.scope\n : [shareArgs.scope ?? 'default'],\n strategy: (shareArgs.strategy ?? shareStrategy) || 'version-first',\n treeShaking: shareArgs.treeShaking\n ? {\n ...shareArgs.treeShaking,\n mode: shareArgs.treeShaking.mode ?? 'server-calc',\n status: shareArgs.treeShaking.status ?? TreeShakingStatus.UNKNOWN,\n useIn: [],\n }\n : undefined,\n };\n}\n\nexport function formatShareConfigs(\n prevOptions: Options,\n newOptions: UserOptions,\n) {\n const shareArgs = newOptions.shared || {};\n const from = newOptions.name;\n\n const newShareInfos = Object.keys(shareArgs).reduce((res, pkgName) => {\n const arrayShareArgs = arrayOptions(shareArgs[pkgName]);\n res[pkgName] = res[pkgName] || [];\n arrayShareArgs.forEach((shareConfig) => {\n res[pkgName].push(\n formatShare(shareConfig, from, pkgName, newOptions.shareStrategy),\n );\n });\n return res;\n }, {} as ShareInfos);\n\n const allShareInfos = {\n ...prevOptions.shared,\n };\n\n Object.keys(newShareInfos).forEach((shareKey) => {\n if (!allShareInfos[shareKey]) {\n allShareInfos[shareKey] = newShareInfos[shareKey];\n } else {\n newShareInfos[shareKey].forEach((newUserSharedOptions) => {\n const isSameVersion = allShareInfos[shareKey].find(\n (sharedVal) => sharedVal.version === newUserSharedOptions.version,\n );\n if (!isSameVersion) {\n allShareInfos[shareKey].push(newUserSharedOptions);\n }\n });\n }\n });\n return { allShareInfos, newShareInfos };\n}\n\nexport function shouldUseTreeShaking(\n treeShaking?: TreeShakingArgs,\n usedExports?: string[],\n) {\n if (!treeShaking) {\n return false;\n }\n const { status, mode } = treeShaking;\n if (status === TreeShakingStatus.NO_USE) {\n return false;\n }\n\n if (status === TreeShakingStatus.CALCULATED) {\n return true;\n }\n\n if (mode === 'runtime-infer') {\n if (!usedExports) {\n return true;\n }\n return isMatchUsedExports(treeShaking, usedExports);\n }\n\n return false;\n}\n\n/**\n * compare version a and b, return true if a is less than b\n */\nexport function versionLt(a: string, b: string): boolean {\n const transformInvalidVersion = (version: string) => {\n const isNumberVersion = !Number.isNaN(Number(version));\n if (isNumberVersion) {\n const splitArr = version.split('.');\n let validVersion = version;\n for (let i = 0; i < 3 - splitArr.length; i++) {\n validVersion += '.0';\n }\n return validVersion;\n }\n return version;\n };\n if (satisfy(transformInvalidVersion(a), `<=${transformInvalidVersion(b)}`)) {\n return true;\n } else {\n return false;\n }\n}\n\nexport const findVersion = (\n shareVersionMap: ShareScopeMap[string][string],\n cb?: (prev: string, cur: string) => boolean,\n): string => {\n const callback =\n cb ||\n function (prev: string, cur: string): boolean {\n return versionLt(prev, cur);\n };\n\n return Object.keys(shareVersionMap).reduce((prev: number | string, cur) => {\n if (!prev) {\n return cur;\n }\n if (callback(prev as string, cur)) {\n return cur;\n }\n\n // default version is '0' https://github.com/webpack/webpack/blob/main/lib/sharing/ProvideSharedModule.js#L136\n if (prev === '0') {\n return cur;\n }\n\n return prev;\n }, 0) as string;\n};\n\nexport const isLoaded = (shared: {\n loading?: null | Promise<any>;\n loaded?: boolean;\n lib?: () => unknown;\n}) => {\n return Boolean(shared.loaded) || typeof shared.lib === 'function';\n};\n\nconst isLoading = (shared: {\n loading?: null | Promise<any>;\n loaded?: boolean;\n lib?: () => unknown;\n}) => {\n return Boolean(shared.loading);\n};\n\nconst isMatchUsedExports = (\n treeShaking?: TreeShakingArgs,\n usedExports?: string[],\n) => {\n if (!treeShaking || !usedExports) {\n return false;\n }\n\n const { usedExports: treeShakingUsedExports } = treeShaking;\n\n if (!treeShakingUsedExports) {\n return false;\n }\n\n if (usedExports.every((e) => treeShakingUsedExports.includes(e))) {\n return true;\n }\n\n return false;\n};\n\nfunction findSingletonVersionOrderByVersion(\n shareScopeMap: ShareScopeMap,\n scope: string,\n pkgName: string,\n treeShaking?: TreeShakingArgs,\n): {\n version: string;\n useTreesShaking: boolean;\n} {\n const versions = shareScopeMap[scope][pkgName];\n let version = '';\n let useTreesShaking = shouldUseTreeShaking(treeShaking);\n // return false means use prev version\n const callback = function (prev: string, cur: string): boolean {\n if (useTreesShaking) {\n if (!versions[prev].treeShaking) {\n return true;\n }\n if (!versions[cur].treeShaking) {\n return false;\n }\n return !isLoaded(versions[prev].treeShaking) && versionLt(prev, cur);\n }\n return !isLoaded(versions[prev]) && versionLt(prev, cur);\n };\n\n if (useTreesShaking) {\n version = findVersion(shareScopeMap[scope][pkgName], callback);\n if (version) {\n return {\n version,\n useTreesShaking,\n };\n }\n useTreesShaking = false;\n }\n\n return {\n version: findVersion(shareScopeMap[scope][pkgName], callback),\n useTreesShaking,\n };\n}\n\nconst isLoadingOrLoaded = (shared: {\n loading?: null | Promise<any>;\n loaded?: boolean;\n lib?: () => unknown;\n}) => {\n return isLoaded(shared) || isLoading(shared);\n};\n\nfunction findSingletonVersionOrderByLoaded(\n shareScopeMap: ShareScopeMap,\n scope: string,\n pkgName: string,\n treeShaking?: TreeShakingArgs,\n): {\n version: string;\n useTreesShaking: boolean;\n} {\n const versions = shareScopeMap[scope][pkgName];\n let version = '';\n let useTreesShaking = shouldUseTreeShaking(treeShaking);\n\n // return false means use prev version\n const callback = function (prev: string, cur: string): boolean {\n if (useTreesShaking) {\n if (!versions[prev].treeShaking) {\n return true;\n }\n if (!versions[cur].treeShaking) {\n return false;\n }\n if (isLoadingOrLoaded(versions[cur].treeShaking)) {\n if (isLoadingOrLoaded(versions[prev].treeShaking)) {\n return Boolean(versionLt(prev, cur));\n } else {\n return true;\n }\n }\n if (isLoadingOrLoaded(versions[prev].treeShaking)) {\n return false;\n }\n }\n\n if (isLoadingOrLoaded(versions[cur])) {\n if (isLoadingOrLoaded(versions[prev])) {\n return Boolean(versionLt(prev, cur));\n } else {\n return true;\n }\n }\n if (isLoadingOrLoaded(versions[prev])) {\n return false;\n }\n return versionLt(prev, cur);\n };\n\n if (useTreesShaking) {\n version = findVersion(shareScopeMap[scope][pkgName], callback);\n if (version) {\n return {\n version,\n useTreesShaking,\n };\n }\n useTreesShaking = false;\n }\n\n return {\n version: findVersion(shareScopeMap[scope][pkgName], callback),\n useTreesShaking,\n };\n}\n\nfunction getFindShareFunction(strategy: Shared['strategy']) {\n if (strategy === 'loaded-first') {\n return findSingletonVersionOrderByLoaded;\n }\n return findSingletonVersionOrderByVersion;\n}\n\nexport function getRegisteredShare(\n localShareScopeMap: ShareScopeMap,\n pkgName: string,\n shareInfo: Shared,\n resolveShare: SyncWaterfallHook<{\n shareScopeMap: ShareScopeMap;\n scope: string;\n pkgName: string;\n version: string;\n shareInfo: Shared;\n GlobalFederation: Federation;\n resolver: () => { shared: Shared; useTreesShaking: boolean } | undefined;\n }>,\n): { shared: Shared; useTreesShaking: boolean } | void {\n if (!localShareScopeMap) {\n return;\n }\n const {\n shareConfig,\n scope = DEFAULT_SCOPE,\n strategy,\n treeShaking,\n } = shareInfo;\n const scopes = Array.isArray(scope) ? scope : [scope];\n for (const sc of scopes) {\n if (\n shareConfig &&\n localShareScopeMap[sc] &&\n localShareScopeMap[sc][pkgName]\n ) {\n const { requiredVersion } = shareConfig;\n const findShareFunction = getFindShareFunction(strategy);\n const { version: maxOrSingletonVersion, useTreesShaking } =\n findShareFunction(localShareScopeMap, sc, pkgName, treeShaking);\n\n const defaultResolver = () => {\n const shared = localShareScopeMap[sc][pkgName][maxOrSingletonVersion];\n if (shareConfig.singleton) {\n if (\n typeof requiredVersion === 'string' &&\n !satisfy(maxOrSingletonVersion, requiredVersion)\n ) {\n const msg = `Version ${maxOrSingletonVersion} from ${\n maxOrSingletonVersion && shared.from\n } of shared singleton module ${pkgName} does not satisfy the requirement of ${\n shareInfo.from\n } which needs ${requiredVersion})`;\n\n if (shareConfig.strictVersion) {\n error(msg);\n } else {\n warn(msg);\n }\n }\n return {\n shared,\n useTreesShaking,\n };\n } else {\n if (requiredVersion === false || requiredVersion === '*') {\n return {\n shared,\n useTreesShaking,\n };\n }\n if (satisfy(maxOrSingletonVersion, requiredVersion)) {\n return {\n shared,\n useTreesShaking,\n };\n }\n\n const _usedTreeShaking = shouldUseTreeShaking(treeShaking);\n if (_usedTreeShaking) {\n for (const [versionKey, versionValue] of Object.entries(\n localShareScopeMap[sc][pkgName],\n )) {\n if (\n !shouldUseTreeShaking(\n versionValue.treeShaking,\n treeShaking?.usedExports,\n )\n ) {\n continue;\n }\n\n if (satisfy(versionKey, requiredVersion)) {\n return {\n shared: versionValue,\n useTreesShaking: _usedTreeShaking,\n };\n }\n }\n }\n for (const [versionKey, versionValue] of Object.entries(\n localShareScopeMap[sc][pkgName],\n )) {\n if (satisfy(versionKey, requiredVersion)) {\n return {\n shared: versionValue,\n useTreesShaking: false,\n };\n }\n }\n }\n return;\n };\n const params = {\n shareScopeMap: localShareScopeMap,\n scope: sc,\n pkgName,\n version: maxOrSingletonVersion,\n GlobalFederation: Global.__FEDERATION__,\n shareInfo,\n resolver: defaultResolver,\n };\n const resolveShared = resolveShare.emit(params) || params;\n return resolveShared.resolver();\n }\n }\n}\n\nexport function getGlobalShareScope(): GlobalShareScopeMap {\n return Global.__FEDERATION__.__SHARE__;\n}\n\nexport function getTargetSharedOptions(options: {\n pkgName: string;\n extraOptions?: LoadShareExtraOptions;\n shareInfos: ShareInfos;\n}) {\n const { pkgName, extraOptions, shareInfos } = options;\n const defaultResolver = (sharedOptions: ShareInfos[string]) => {\n if (!sharedOptions) {\n return undefined;\n }\n const shareVersionMap: ShareScopeMap[string][string] = {};\n sharedOptions.forEach((shared) => {\n shareVersionMap[shared.version] = shared;\n });\n const callback = function (prev: string, cur: string): boolean {\n return (\n // TODO: consider multiple treeShaking shared scenes\n !isLoaded(shareVersionMap[prev]) && versionLt(prev, cur)\n );\n };\n\n const maxVersion = findVersion(shareVersionMap, callback);\n return shareVersionMap[maxVersion];\n };\n\n const resolver = extraOptions?.resolver ?? defaultResolver;\n const isPlainObject = (val: unknown): val is Record<string, any> => {\n return val !== null && typeof val === 'object' && !Array.isArray(val);\n };\n\n const merge = <T extends Record<string, any>>(\n ...sources: Array<Partial<T> | undefined>\n ): T => {\n const out = {} as T;\n for (const src of sources) {\n if (!src) continue;\n for (const [key, value] of Object.entries(src)) {\n const prev = (out as any)[key];\n if (isPlainObject(prev) && isPlainObject(value)) {\n (out as any)[key] = merge(prev, value);\n } else if (value !== undefined) {\n (out as any)[key] = value;\n }\n }\n }\n return out;\n };\n\n return merge(resolver(shareInfos[pkgName]), extraOptions?.customShareInfo);\n}\n\nexport const addUseIn = (\n shared: { useIn?: Array<string> },\n from: string,\n): void => {\n if (!shared.useIn) {\n shared.useIn = [];\n }\n addUniqueItem(shared.useIn, from);\n};\n\nexport function directShare(\n shared: Shared,\n useTreesShaking?: boolean,\n): Shared | TreeShakingArgs {\n if (useTreesShaking && shared.treeShaking) {\n return shared.treeShaking;\n }\n\n return shared;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
const require_logger = require('./logger.cjs');
|
|
2
|
+
let _module_federation_sdk = require("@module-federation/sdk");
|
|
3
|
+
|
|
4
|
+
//#region src/utils/tool.ts
|
|
5
|
+
function addUniqueItem(arr, item) {
|
|
6
|
+
if (arr.findIndex((name) => name === item) === -1) arr.push(item);
|
|
7
|
+
return arr;
|
|
8
|
+
}
|
|
9
|
+
function getFMId(remoteInfo) {
|
|
10
|
+
if ("version" in remoteInfo && remoteInfo.version) return `${remoteInfo.name}:${remoteInfo.version}`;
|
|
11
|
+
else if ("entry" in remoteInfo && remoteInfo.entry) return `${remoteInfo.name}:${remoteInfo.entry}`;
|
|
12
|
+
else return `${remoteInfo.name}`;
|
|
13
|
+
}
|
|
14
|
+
function isRemoteInfoWithEntry(remote) {
|
|
15
|
+
return typeof remote.entry !== "undefined";
|
|
16
|
+
}
|
|
17
|
+
function isPureRemoteEntry(remote) {
|
|
18
|
+
return !remote.entry.includes(".json");
|
|
19
|
+
}
|
|
20
|
+
async function safeWrapper(callback, disableWarn) {
|
|
21
|
+
try {
|
|
22
|
+
return await callback();
|
|
23
|
+
} catch (e) {
|
|
24
|
+
!disableWarn && require_logger.warn(e);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function isObject(val) {
|
|
29
|
+
return val && typeof val === "object";
|
|
30
|
+
}
|
|
31
|
+
const objectToString = Object.prototype.toString;
|
|
32
|
+
function isPlainObject(val) {
|
|
33
|
+
return objectToString.call(val) === "[object Object]";
|
|
34
|
+
}
|
|
35
|
+
function isStaticResourcesEqual(url1, url2) {
|
|
36
|
+
const REG_EXP = /^(https?:)?\/\//i;
|
|
37
|
+
return url1.replace(REG_EXP, "").replace(/\/$/, "") === url2.replace(REG_EXP, "").replace(/\/$/, "");
|
|
38
|
+
}
|
|
39
|
+
function arrayOptions(options) {
|
|
40
|
+
return Array.isArray(options) ? options : [options];
|
|
41
|
+
}
|
|
42
|
+
function getRemoteEntryInfoFromSnapshot(snapshot) {
|
|
43
|
+
const defaultRemoteEntryInfo = {
|
|
44
|
+
url: "",
|
|
45
|
+
type: "global",
|
|
46
|
+
globalName: ""
|
|
47
|
+
};
|
|
48
|
+
if (_module_federation_sdk.isBrowserEnvValue || (0, _module_federation_sdk.isReactNativeEnv)() || !("ssrRemoteEntry" in snapshot)) return "remoteEntry" in snapshot ? {
|
|
49
|
+
url: snapshot.remoteEntry,
|
|
50
|
+
type: snapshot.remoteEntryType,
|
|
51
|
+
globalName: snapshot.globalName
|
|
52
|
+
} : defaultRemoteEntryInfo;
|
|
53
|
+
if ("ssrRemoteEntry" in snapshot) return {
|
|
54
|
+
url: snapshot.ssrRemoteEntry || defaultRemoteEntryInfo.url,
|
|
55
|
+
type: snapshot.ssrRemoteEntryType || defaultRemoteEntryInfo.type,
|
|
56
|
+
globalName: snapshot.globalName
|
|
57
|
+
};
|
|
58
|
+
return defaultRemoteEntryInfo;
|
|
59
|
+
}
|
|
60
|
+
const processModuleAlias = (name, subPath) => {
|
|
61
|
+
let moduleName;
|
|
62
|
+
if (name.endsWith("/")) moduleName = name.slice(0, -1);
|
|
63
|
+
else moduleName = name;
|
|
64
|
+
if (subPath.startsWith(".")) subPath = subPath.slice(1);
|
|
65
|
+
moduleName = moduleName + subPath;
|
|
66
|
+
return moduleName;
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
//#endregion
|
|
70
|
+
exports.addUniqueItem = addUniqueItem;
|
|
71
|
+
exports.arrayOptions = arrayOptions;
|
|
72
|
+
exports.getFMId = getFMId;
|
|
73
|
+
exports.getRemoteEntryInfoFromSnapshot = getRemoteEntryInfoFromSnapshot;
|
|
74
|
+
exports.isObject = isObject;
|
|
75
|
+
exports.isPlainObject = isPlainObject;
|
|
76
|
+
exports.isPureRemoteEntry = isPureRemoteEntry;
|
|
77
|
+
exports.isRemoteInfoWithEntry = isRemoteInfoWithEntry;
|
|
78
|
+
exports.isStaticResourcesEqual = isStaticResourcesEqual;
|
|
79
|
+
exports.objectToString = objectToString;
|
|
80
|
+
exports.processModuleAlias = processModuleAlias;
|
|
81
|
+
exports.safeWrapper = safeWrapper;
|
|
82
|
+
//# sourceMappingURL=tool.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool.cjs","names":["warn","isBrowserEnvValue"],"sources":["../../src/utils/tool.ts"],"sourcesContent":["import {\n RemoteWithEntry,\n ModuleInfo,\n RemoteEntryType,\n isBrowserEnvValue,\n isReactNativeEnv,\n} from '@module-federation/sdk';\nimport { Remote, RemoteInfoOptionalVersion } from '../type';\nimport { warn } from './logger';\n\nexport function addUniqueItem(arr: Array<string>, item: string): Array<string> {\n if (arr.findIndex((name) => name === item) === -1) {\n arr.push(item);\n }\n return arr;\n}\n\nexport function getFMId(\n remoteInfo: RemoteInfoOptionalVersion | RemoteWithEntry,\n): string {\n if ('version' in remoteInfo && remoteInfo.version) {\n return `${remoteInfo.name}:${remoteInfo.version}`;\n } else if ('entry' in remoteInfo && remoteInfo.entry) {\n return `${remoteInfo.name}:${remoteInfo.entry}`;\n } else {\n return `${remoteInfo.name}`;\n }\n}\n\nexport function isRemoteInfoWithEntry(\n remote: Remote,\n): remote is RemoteWithEntry {\n return typeof (remote as RemoteWithEntry).entry !== 'undefined';\n}\n\nexport function isPureRemoteEntry(remote: RemoteWithEntry): boolean {\n return !remote.entry.includes('.json');\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function safeWrapper<T extends (...args: Array<any>) => any>(\n callback: T,\n disableWarn?: boolean,\n): Promise<ReturnType<T> | undefined> {\n try {\n const res = await callback();\n return res;\n } catch (e) {\n !disableWarn && warn(e);\n return;\n }\n}\n\nexport function isObject(val: any): boolean {\n return val && typeof val === 'object';\n}\n\nexport const objectToString = Object.prototype.toString;\n\nexport function isPlainObject(val: any): val is object {\n return objectToString.call(val) === '[object Object]';\n}\n\nexport function isStaticResourcesEqual(url1: string, url2: string): boolean {\n const REG_EXP = /^(https?:)?\\/\\//i;\n // Transform url1 and url2 into relative paths\n const relativeUrl1 = url1.replace(REG_EXP, '').replace(/\\/$/, '');\n const relativeUrl2 = url2.replace(REG_EXP, '').replace(/\\/$/, '');\n // Check if the relative paths are identical\n return relativeUrl1 === relativeUrl2;\n}\n\nexport function arrayOptions<T>(options: T | Array<T>): Array<T> {\n return Array.isArray(options) ? options : [options];\n}\n\nexport function getRemoteEntryInfoFromSnapshot(snapshot: ModuleInfo): {\n url: string;\n type: RemoteEntryType;\n globalName: string;\n} {\n const defaultRemoteEntryInfo: {\n url: string;\n type: RemoteEntryType;\n globalName: string;\n } = {\n url: '',\n type: 'global',\n globalName: '',\n };\n if (\n isBrowserEnvValue ||\n isReactNativeEnv() ||\n !('ssrRemoteEntry' in snapshot)\n ) {\n return 'remoteEntry' in snapshot\n ? {\n url: snapshot.remoteEntry,\n type: snapshot.remoteEntryType,\n globalName: snapshot.globalName,\n }\n : defaultRemoteEntryInfo;\n }\n if ('ssrRemoteEntry' in snapshot) {\n return {\n url: snapshot.ssrRemoteEntry || defaultRemoteEntryInfo.url,\n type: snapshot.ssrRemoteEntryType || defaultRemoteEntryInfo.type,\n globalName: snapshot.globalName,\n };\n }\n return defaultRemoteEntryInfo;\n}\n\nexport const processModuleAlias = (name: string, subPath: string) => {\n // @host/ ./button -> @host/button\n let moduleName;\n if (name.endsWith('/')) {\n moduleName = name.slice(0, -1);\n } else {\n moduleName = name;\n }\n\n if (subPath.startsWith('.')) {\n subPath = subPath.slice(1);\n }\n moduleName = moduleName + subPath;\n return moduleName;\n};\n"],"mappings":";;;;AAUA,SAAgB,cAAc,KAAoB,MAA6B;AAC7E,KAAI,IAAI,WAAW,SAAS,SAAS,KAAK,KAAK,GAC7C,KAAI,KAAK,KAAK;AAEhB,QAAO;;AAGT,SAAgB,QACd,YACQ;AACR,KAAI,aAAa,cAAc,WAAW,QACxC,QAAO,GAAG,WAAW,KAAK,GAAG,WAAW;UAC/B,WAAW,cAAc,WAAW,MAC7C,QAAO,GAAG,WAAW,KAAK,GAAG,WAAW;KAExC,QAAO,GAAG,WAAW;;AAIzB,SAAgB,sBACd,QAC2B;AAC3B,QAAO,OAAQ,OAA2B,UAAU;;AAGtD,SAAgB,kBAAkB,QAAkC;AAClE,QAAO,CAAC,OAAO,MAAM,SAAS,QAAQ;;AAIxC,eAAsB,YACpB,UACA,aACoC;AACpC,KAAI;AAEF,SADY,MAAM,UAAU;UAErB,GAAG;AACV,GAAC,eAAeA,oBAAK,EAAE;AACvB;;;AAIJ,SAAgB,SAAS,KAAmB;AAC1C,QAAO,OAAO,OAAO,QAAQ;;AAG/B,MAAa,iBAAiB,OAAO,UAAU;AAE/C,SAAgB,cAAc,KAAyB;AACrD,QAAO,eAAe,KAAK,IAAI,KAAK;;AAGtC,SAAgB,uBAAuB,MAAc,MAAuB;CAC1E,MAAM,UAAU;AAKhB,QAHqB,KAAK,QAAQ,SAAS,GAAG,CAAC,QAAQ,OAAO,GAAG,KAC5C,KAAK,QAAQ,SAAS,GAAG,CAAC,QAAQ,OAAO,GAAG;;AAKnE,SAAgB,aAAgB,SAAiC;AAC/D,QAAO,MAAM,QAAQ,QAAQ,GAAG,UAAU,CAAC,QAAQ;;AAGrD,SAAgB,+BAA+B,UAI7C;CACA,MAAM,yBAIF;EACF,KAAK;EACL,MAAM;EACN,YAAY;EACb;AACD,KACEC,0FACkB,IAClB,EAAE,oBAAoB,UAEtB,QAAO,iBAAiB,WACpB;EACE,KAAK,SAAS;EACd,MAAM,SAAS;EACf,YAAY,SAAS;EACtB,GACD;AAEN,KAAI,oBAAoB,SACtB,QAAO;EACL,KAAK,SAAS,kBAAkB,uBAAuB;EACvD,MAAM,SAAS,sBAAsB,uBAAuB;EAC5D,YAAY,SAAS;EACtB;AAEH,QAAO;;AAGT,MAAa,sBAAsB,MAAc,YAAoB;CAEnE,IAAI;AACJ,KAAI,KAAK,SAAS,IAAI,CACpB,cAAa,KAAK,MAAM,GAAG,GAAG;KAE9B,cAAa;AAGf,KAAI,QAAQ,WAAW,IAAI,CACzB,WAAU,QAAQ,MAAM,EAAE;AAE5B,cAAa,aAAa;AAC1B,QAAO"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ModuleInfo, RemoteEntryType, RemoteWithEntry } from "@module-federation/sdk";
|
|
2
|
+
|
|
3
|
+
//#region src/utils/tool.d.ts
|
|
4
|
+
declare function safeWrapper<T extends (...args: Array<any>) => any>(callback: T, disableWarn?: boolean): Promise<ReturnType<T> | undefined>;
|
|
5
|
+
declare function isStaticResourcesEqual(url1: string, url2: string): boolean;
|
|
6
|
+
//#endregion
|
|
7
|
+
export { isStaticResourcesEqual, safeWrapper };
|
|
8
|
+
//# sourceMappingURL=tool.d.ts.map
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { warn as warn$1 } from "./logger.js";
|
|
2
|
+
import { isBrowserEnvValue, isReactNativeEnv } from "@module-federation/sdk";
|
|
3
|
+
|
|
4
|
+
//#region src/utils/tool.ts
|
|
5
|
+
function addUniqueItem(arr, item) {
|
|
6
|
+
if (arr.findIndex((name) => name === item) === -1) arr.push(item);
|
|
7
|
+
return arr;
|
|
8
|
+
}
|
|
9
|
+
function getFMId(remoteInfo) {
|
|
10
|
+
if ("version" in remoteInfo && remoteInfo.version) return `${remoteInfo.name}:${remoteInfo.version}`;
|
|
11
|
+
else if ("entry" in remoteInfo && remoteInfo.entry) return `${remoteInfo.name}:${remoteInfo.entry}`;
|
|
12
|
+
else return `${remoteInfo.name}`;
|
|
13
|
+
}
|
|
14
|
+
function isRemoteInfoWithEntry(remote) {
|
|
15
|
+
return typeof remote.entry !== "undefined";
|
|
16
|
+
}
|
|
17
|
+
function isPureRemoteEntry(remote) {
|
|
18
|
+
return !remote.entry.includes(".json");
|
|
19
|
+
}
|
|
20
|
+
async function safeWrapper(callback, disableWarn) {
|
|
21
|
+
try {
|
|
22
|
+
return await callback();
|
|
23
|
+
} catch (e) {
|
|
24
|
+
!disableWarn && warn$1(e);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function isObject(val) {
|
|
29
|
+
return val && typeof val === "object";
|
|
30
|
+
}
|
|
31
|
+
const objectToString = Object.prototype.toString;
|
|
32
|
+
function isPlainObject(val) {
|
|
33
|
+
return objectToString.call(val) === "[object Object]";
|
|
34
|
+
}
|
|
35
|
+
function isStaticResourcesEqual(url1, url2) {
|
|
36
|
+
const REG_EXP = /^(https?:)?\/\//i;
|
|
37
|
+
return url1.replace(REG_EXP, "").replace(/\/$/, "") === url2.replace(REG_EXP, "").replace(/\/$/, "");
|
|
38
|
+
}
|
|
39
|
+
function arrayOptions(options) {
|
|
40
|
+
return Array.isArray(options) ? options : [options];
|
|
41
|
+
}
|
|
42
|
+
function getRemoteEntryInfoFromSnapshot(snapshot) {
|
|
43
|
+
const defaultRemoteEntryInfo = {
|
|
44
|
+
url: "",
|
|
45
|
+
type: "global",
|
|
46
|
+
globalName: ""
|
|
47
|
+
};
|
|
48
|
+
if (isBrowserEnvValue || isReactNativeEnv() || !("ssrRemoteEntry" in snapshot)) return "remoteEntry" in snapshot ? {
|
|
49
|
+
url: snapshot.remoteEntry,
|
|
50
|
+
type: snapshot.remoteEntryType,
|
|
51
|
+
globalName: snapshot.globalName
|
|
52
|
+
} : defaultRemoteEntryInfo;
|
|
53
|
+
if ("ssrRemoteEntry" in snapshot) return {
|
|
54
|
+
url: snapshot.ssrRemoteEntry || defaultRemoteEntryInfo.url,
|
|
55
|
+
type: snapshot.ssrRemoteEntryType || defaultRemoteEntryInfo.type,
|
|
56
|
+
globalName: snapshot.globalName
|
|
57
|
+
};
|
|
58
|
+
return defaultRemoteEntryInfo;
|
|
59
|
+
}
|
|
60
|
+
const processModuleAlias = (name, subPath) => {
|
|
61
|
+
let moduleName;
|
|
62
|
+
if (name.endsWith("/")) moduleName = name.slice(0, -1);
|
|
63
|
+
else moduleName = name;
|
|
64
|
+
if (subPath.startsWith(".")) subPath = subPath.slice(1);
|
|
65
|
+
moduleName = moduleName + subPath;
|
|
66
|
+
return moduleName;
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
//#endregion
|
|
70
|
+
export { addUniqueItem, arrayOptions, getFMId, getRemoteEntryInfoFromSnapshot, isObject, isPlainObject, isPureRemoteEntry, isRemoteInfoWithEntry, isStaticResourcesEqual, objectToString, processModuleAlias, safeWrapper };
|
|
71
|
+
//# sourceMappingURL=tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool.js","names":["warn"],"sources":["../../src/utils/tool.ts"],"sourcesContent":["import {\n RemoteWithEntry,\n ModuleInfo,\n RemoteEntryType,\n isBrowserEnvValue,\n isReactNativeEnv,\n} from '@module-federation/sdk';\nimport { Remote, RemoteInfoOptionalVersion } from '../type';\nimport { warn } from './logger';\n\nexport function addUniqueItem(arr: Array<string>, item: string): Array<string> {\n if (arr.findIndex((name) => name === item) === -1) {\n arr.push(item);\n }\n return arr;\n}\n\nexport function getFMId(\n remoteInfo: RemoteInfoOptionalVersion | RemoteWithEntry,\n): string {\n if ('version' in remoteInfo && remoteInfo.version) {\n return `${remoteInfo.name}:${remoteInfo.version}`;\n } else if ('entry' in remoteInfo && remoteInfo.entry) {\n return `${remoteInfo.name}:${remoteInfo.entry}`;\n } else {\n return `${remoteInfo.name}`;\n }\n}\n\nexport function isRemoteInfoWithEntry(\n remote: Remote,\n): remote is RemoteWithEntry {\n return typeof (remote as RemoteWithEntry).entry !== 'undefined';\n}\n\nexport function isPureRemoteEntry(remote: RemoteWithEntry): boolean {\n return !remote.entry.includes('.json');\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function safeWrapper<T extends (...args: Array<any>) => any>(\n callback: T,\n disableWarn?: boolean,\n): Promise<ReturnType<T> | undefined> {\n try {\n const res = await callback();\n return res;\n } catch (e) {\n !disableWarn && warn(e);\n return;\n }\n}\n\nexport function isObject(val: any): boolean {\n return val && typeof val === 'object';\n}\n\nexport const objectToString = Object.prototype.toString;\n\nexport function isPlainObject(val: any): val is object {\n return objectToString.call(val) === '[object Object]';\n}\n\nexport function isStaticResourcesEqual(url1: string, url2: string): boolean {\n const REG_EXP = /^(https?:)?\\/\\//i;\n // Transform url1 and url2 into relative paths\n const relativeUrl1 = url1.replace(REG_EXP, '').replace(/\\/$/, '');\n const relativeUrl2 = url2.replace(REG_EXP, '').replace(/\\/$/, '');\n // Check if the relative paths are identical\n return relativeUrl1 === relativeUrl2;\n}\n\nexport function arrayOptions<T>(options: T | Array<T>): Array<T> {\n return Array.isArray(options) ? options : [options];\n}\n\nexport function getRemoteEntryInfoFromSnapshot(snapshot: ModuleInfo): {\n url: string;\n type: RemoteEntryType;\n globalName: string;\n} {\n const defaultRemoteEntryInfo: {\n url: string;\n type: RemoteEntryType;\n globalName: string;\n } = {\n url: '',\n type: 'global',\n globalName: '',\n };\n if (\n isBrowserEnvValue ||\n isReactNativeEnv() ||\n !('ssrRemoteEntry' in snapshot)\n ) {\n return 'remoteEntry' in snapshot\n ? {\n url: snapshot.remoteEntry,\n type: snapshot.remoteEntryType,\n globalName: snapshot.globalName,\n }\n : defaultRemoteEntryInfo;\n }\n if ('ssrRemoteEntry' in snapshot) {\n return {\n url: snapshot.ssrRemoteEntry || defaultRemoteEntryInfo.url,\n type: snapshot.ssrRemoteEntryType || defaultRemoteEntryInfo.type,\n globalName: snapshot.globalName,\n };\n }\n return defaultRemoteEntryInfo;\n}\n\nexport const processModuleAlias = (name: string, subPath: string) => {\n // @host/ ./button -> @host/button\n let moduleName;\n if (name.endsWith('/')) {\n moduleName = name.slice(0, -1);\n } else {\n moduleName = name;\n }\n\n if (subPath.startsWith('.')) {\n subPath = subPath.slice(1);\n }\n moduleName = moduleName + subPath;\n return moduleName;\n};\n"],"mappings":";;;;AAUA,SAAgB,cAAc,KAAoB,MAA6B;AAC7E,KAAI,IAAI,WAAW,SAAS,SAAS,KAAK,KAAK,GAC7C,KAAI,KAAK,KAAK;AAEhB,QAAO;;AAGT,SAAgB,QACd,YACQ;AACR,KAAI,aAAa,cAAc,WAAW,QACxC,QAAO,GAAG,WAAW,KAAK,GAAG,WAAW;UAC/B,WAAW,cAAc,WAAW,MAC7C,QAAO,GAAG,WAAW,KAAK,GAAG,WAAW;KAExC,QAAO,GAAG,WAAW;;AAIzB,SAAgB,sBACd,QAC2B;AAC3B,QAAO,OAAQ,OAA2B,UAAU;;AAGtD,SAAgB,kBAAkB,QAAkC;AAClE,QAAO,CAAC,OAAO,MAAM,SAAS,QAAQ;;AAIxC,eAAsB,YACpB,UACA,aACoC;AACpC,KAAI;AAEF,SADY,MAAM,UAAU;UAErB,GAAG;AACV,GAAC,eAAeA,OAAK,EAAE;AACvB;;;AAIJ,SAAgB,SAAS,KAAmB;AAC1C,QAAO,OAAO,OAAO,QAAQ;;AAG/B,MAAa,iBAAiB,OAAO,UAAU;AAE/C,SAAgB,cAAc,KAAyB;AACrD,QAAO,eAAe,KAAK,IAAI,KAAK;;AAGtC,SAAgB,uBAAuB,MAAc,MAAuB;CAC1E,MAAM,UAAU;AAKhB,QAHqB,KAAK,QAAQ,SAAS,GAAG,CAAC,QAAQ,OAAO,GAAG,KAC5C,KAAK,QAAQ,SAAS,GAAG,CAAC,QAAQ,OAAO,GAAG;;AAKnE,SAAgB,aAAgB,SAAiC;AAC/D,QAAO,MAAM,QAAQ,QAAQ,GAAG,UAAU,CAAC,QAAQ;;AAGrD,SAAgB,+BAA+B,UAI7C;CACA,MAAM,yBAIF;EACF,KAAK;EACL,MAAM;EACN,YAAY;EACb;AACD,KACE,qBACA,kBAAkB,IAClB,EAAE,oBAAoB,UAEtB,QAAO,iBAAiB,WACpB;EACE,KAAK,SAAS;EACd,MAAM,SAAS;EACf,YAAY,SAAS;EACtB,GACD;AAEN,KAAI,oBAAoB,SACtB,QAAO;EACL,KAAK,SAAS,kBAAkB,uBAAuB;EACvD,MAAM,SAAS,sBAAsB,uBAAuB;EAC5D,YAAY,SAAS;EACtB;AAEH,QAAO;;AAGT,MAAa,sBAAsB,MAAc,YAAoB;CAEnE,IAAI;AACJ,KAAI,KAAK,SAAS,IAAI,CACpB,cAAa,KAAK,MAAM,GAAG,GAAG;KAE9B,cAAa;AAGf,KAAI,QAAQ,WAAW,IAAI,CACzB,WAAU,QAAQ,MAAM,EAAE;AAE5B,cAAa,aAAa;AAC1B,QAAO"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@module-federation/runtime-core",
|
|
3
|
-
"version": "2.0
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"author": "zhouxiao <codingzx@gmail.com>",
|
|
6
|
-
"main": "./dist/index.cjs
|
|
7
|
-
"module": "./dist/index.
|
|
6
|
+
"main": "./dist/index.cjs",
|
|
7
|
+
"module": "./dist/index.js",
|
|
8
8
|
"types": "./dist/index.d.ts",
|
|
9
9
|
"license": "MIT",
|
|
10
10
|
"publishConfig": {
|
|
@@ -23,21 +23,21 @@
|
|
|
23
23
|
".": {
|
|
24
24
|
"import": {
|
|
25
25
|
"types": "./dist/index.d.ts",
|
|
26
|
-
"default": "./dist/index.
|
|
26
|
+
"default": "./dist/index.js"
|
|
27
27
|
},
|
|
28
28
|
"require": {
|
|
29
29
|
"types": "./dist/index.d.ts",
|
|
30
|
-
"default": "./dist/index.cjs
|
|
30
|
+
"default": "./dist/index.cjs"
|
|
31
31
|
}
|
|
32
32
|
},
|
|
33
33
|
"./types": {
|
|
34
34
|
"import": {
|
|
35
35
|
"types": "./dist/types.d.ts",
|
|
36
|
-
"default": "./dist/types.
|
|
36
|
+
"default": "./dist/types.js"
|
|
37
37
|
},
|
|
38
38
|
"require": {
|
|
39
39
|
"types": "./dist/types.d.ts",
|
|
40
|
-
"default": "./dist/types.cjs
|
|
40
|
+
"default": "./dist/types.cjs"
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
43
|
},
|
|
@@ -52,7 +52,14 @@
|
|
|
52
52
|
}
|
|
53
53
|
},
|
|
54
54
|
"dependencies": {
|
|
55
|
-
"@module-federation/sdk": "2.0
|
|
56
|
-
"@module-federation/error-codes": "2.0
|
|
55
|
+
"@module-federation/sdk": "2.2.0",
|
|
56
|
+
"@module-federation/error-codes": "2.2.0"
|
|
57
|
+
},
|
|
58
|
+
"scripts": {
|
|
59
|
+
"build": "tsdown --config tsdown.config.ts",
|
|
60
|
+
"lint": "ESLINT_USE_FLAT_CONFIG=false pnpm exec eslint --ignore-pattern node_modules \"**/*.ts\" \"package.json\"",
|
|
61
|
+
"build-debug": "RUNTIME_CORE_TSDOWN_MODE=debug tsdown --config tsdown.config.ts",
|
|
62
|
+
"pre-release": "pnpm run test && pnpm run build",
|
|
63
|
+
"test": "vitest run -u -c vitest.config.ts"
|
|
57
64
|
}
|
|
58
65
|
}
|