@module-federation/vite 1.7.0 → 1.7.2

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/lib/index.cjs CHANGED
@@ -122,7 +122,7 @@ var addEntry = function addEntry(_ref) {
122
122
  emitFileOptions.fileName = fileName;
123
123
  }
124
124
  emitFileId = this.emitFile(emitFileOptions);
125
- if (htmlFilePath) {
125
+ if (htmlFilePath && fs__namespace.existsSync(htmlFilePath)) {
126
126
  var htmlContent = fs__namespace.readFileSync(htmlFilePath, 'utf-8');
127
127
  var scriptRegex = /<script\s+[^>]*src=["']([^"']+)["'][^>]*>/gi;
128
128
  var match;
@@ -161,10 +161,14 @@ var addEntry = function addEntry(_ref) {
161
161
  */
162
162
  function PluginDevProxyModuleTopLevelAwait() {
163
163
  var filterFunction = pluginutils.createFilter();
164
+ var processedFlag = '/* already-processed-by-dev-proxy-module-top-level-await */';
164
165
  return {
165
166
  name: 'dev-proxy-module-top-level-await',
166
167
  apply: 'serve',
167
168
  transform: function transform(code, id) {
169
+ if (code.includes(processedFlag)) {
170
+ return null;
171
+ }
168
172
  if (!code.includes('/*mf top-level-await placeholder replacement mf*/')) {
169
173
  return null;
170
174
  }
@@ -217,8 +221,9 @@ function PluginDevProxyModuleTopLevelAwait() {
217
221
  }
218
222
  }
219
223
  });
224
+ var transformedCode = magicString.toString();
220
225
  return {
221
- code: magicString.toString(),
226
+ code: processedFlag + "\n" + transformedCode,
222
227
  map: magicString.generateMap({
223
228
  hires: true
224
229
  })
@@ -537,6 +542,14 @@ function getNodeModulesDir() {
537
542
  }
538
543
  return cachedNodeModulesDir;
539
544
  }
545
+ function getSuffix(name) {
546
+ var base = path.basename(name);
547
+ var dotIndex = base.lastIndexOf('.');
548
+ if (dotIndex > 0 && dotIndex < base.length - 1) {
549
+ return base.slice(dotIndex);
550
+ }
551
+ return '.js';
552
+ }
540
553
  var patternMap = {};
541
554
  var cacheMap = {};
542
555
  /**
@@ -544,7 +557,6 @@ var cacheMap = {};
544
557
  */
545
558
  var VirtualModule = /*#__PURE__*/function () {
546
559
  function VirtualModule(name, tag, suffix) {
547
- var _name$split$slice$pop;
548
560
  if (tag === void 0) {
549
561
  tag = '__mf_v__';
550
562
  }
@@ -557,7 +569,7 @@ var VirtualModule = /*#__PURE__*/function () {
557
569
  this.inited = false;
558
570
  this.name = name;
559
571
  this.tag = tag;
560
- this.suffix = suffix || ((_name$split$slice$pop = name.split('.').slice(1).pop()) == null ? void 0 : _name$split$slice$pop.replace(/(.)/, '.$1')) || '.js';
572
+ this.suffix = suffix || getSuffix(name);
561
573
  if (!cacheMap[this.tag]) cacheMap[this.tag] = {};
562
574
  cacheMap[this.tag][this.name] = this;
563
575
  }
@@ -709,9 +721,9 @@ function writeLocalSharedImportMap() {
709
721
  }
710
722
  function generateLocalSharedImportMap() {
711
723
  var options = getNormalizeModuleFederationOptions();
712
- return "\n const importMap = {\n " + Array.from(getUsedShares()).map(function (pkg) {
724
+ return "\n const importMap = {\n " + Array.from(getUsedShares()).sort().map(function (pkg) {
713
725
  return "\n " + JSON.stringify(pkg) + ": async () => {\n let pkg = await import(\"" + getPreBuildLibImportId(pkg) + "\")\n return pkg\n }\n ";
714
- }).join(',') + "\n }\n const usedShared = {\n " + Array.from(getUsedShares()).map(function (key) {
726
+ }).join(',') + "\n }\n const usedShared = {\n " + Array.from(getUsedShares()).sort().map(function (key) {
715
727
  var shareItem = getNormalizeShareItem(key);
716
728
  if (!shareItem) return null;
717
729
  return "\n " + JSON.stringify(key) + ": {\n name: " + JSON.stringify(key) + ",\n version: " + JSON.stringify(shareItem.version) + ",\n scope: [" + JSON.stringify(shareItem.scope) + "],\n loaded: false,\n from: " + JSON.stringify(options.name) + ",\n async get () {\n usedShared[" + JSON.stringify(key) + "].loaded = true\n const {" + JSON.stringify(key) + ": pkgDynamicImport} = importMap \n const res = await pkgDynamicImport()\n const exportModule = {...res}\n // All npm packages pre-built by vite will be converted to esm\n Object.defineProperty(exportModule, \"__esModule\", {\n value: true,\n enumerable: false\n })\n return function () {\n return exportModule\n }\n },\n shareConfig: {\n singleton: " + shareItem.shareConfig.singleton + ",\n requiredVersion: " + JSON.stringify(shareItem.shareConfig.requiredVersion) + "\n }\n }\n ";
@@ -759,6 +771,154 @@ function initVirtualModules() {
759
771
  writeRuntimeInitStatus();
760
772
  }
761
773
 
774
+ var ASSET_TYPES = ['js', 'css'];
775
+ var LOAD_TIMINGS = ['sync', 'async'];
776
+ var JS_EXTENSIONS = ['.ts', '.tsx', '.jsx', '.mjs', '.cjs'];
777
+ /**
778
+ * Creates an empty asset map structure for tracking JS and CSS assets
779
+ * @returns Initialized asset map with sync/async arrays for JS and CSS
780
+ */
781
+ var createEmptyAssetMap = function createEmptyAssetMap() {
782
+ return {
783
+ js: {
784
+ sync: [],
785
+ async: []
786
+ },
787
+ css: {
788
+ sync: [],
789
+ async: []
790
+ }
791
+ };
792
+ };
793
+ /**
794
+ * Tracks an asset in the preload map with deduplication
795
+ * @param map - The preload map to update
796
+ * @param key - The module key to track under
797
+ * @param fileName - The asset filename to track
798
+ * @param isAsync - Whether the asset is loaded async
799
+ * @param type - The asset type ('js' or 'css')
800
+ */
801
+ var trackAsset = function trackAsset(map, key, fileName, isAsync, type) {
802
+ if (!map[key]) {
803
+ map[key] = createEmptyAssetMap();
804
+ }
805
+ var target = isAsync ? map[key][type].async : map[key][type].sync;
806
+ if (!target.includes(fileName)) {
807
+ target.push(fileName);
808
+ }
809
+ };
810
+ /**
811
+ * Checks if a file is a CSS file by extension
812
+ * @param fileName - The filename to check
813
+ * @returns True if file has a CSS extension (.css, .scss, .less)
814
+ */
815
+ var isCSSFile = function isCSSFile(fileName) {
816
+ return fileName.endsWith('.css') || fileName.endsWith('.scss') || fileName.endsWith('.less');
817
+ };
818
+ /**
819
+ * Collects all CSS assets from the bundle
820
+ * @param bundle - The Rollup output bundle
821
+ * @returns Set of CSS asset filenames
822
+ */
823
+ var collectCssAssets = function collectCssAssets(bundle) {
824
+ var cssAssets = new Set();
825
+ for (var _i = 0, _Object$entries = Object.entries(bundle); _i < _Object$entries.length; _i++) {
826
+ var _Object$entries$_i = _Object$entries[_i],
827
+ fileName = _Object$entries$_i[0],
828
+ fileData = _Object$entries$_i[1];
829
+ if (fileData.type === 'asset' && isCSSFile(fileName)) {
830
+ cssAssets.add(fileName);
831
+ }
832
+ }
833
+ return cssAssets;
834
+ };
835
+ /**
836
+ * Processes module assets and tracks them in the files map
837
+ * @param bundle - The Rollup output bundle
838
+ * @param filesMap - The preload map to populate
839
+ * @param moduleMatcher - Function that matches module paths to keys
840
+ */
841
+ var processModuleAssets = function processModuleAssets(bundle, filesMap, moduleMatcher) {
842
+ for (var _i2 = 0, _Object$entries2 = Object.entries(bundle); _i2 < _Object$entries2.length; _i2++) {
843
+ var _Object$entries2$_i = _Object$entries2[_i2],
844
+ fileName = _Object$entries2$_i[0],
845
+ fileData = _Object$entries2$_i[1];
846
+ if (fileData.type !== 'chunk') continue;
847
+ if (!fileData.modules) continue;
848
+ for (var _i3 = 0, _Object$keys = Object.keys(fileData.modules); _i3 < _Object$keys.length; _i3++) {
849
+ var modulePath = _Object$keys[_i3];
850
+ var matchKey = moduleMatcher(modulePath);
851
+ if (!matchKey) continue;
852
+ // Track main JS chunk
853
+ trackAsset(filesMap, matchKey, fileName, false, 'js');
854
+ // Handle dynamic imports
855
+ if (fileData.dynamicImports) {
856
+ for (var _iterator = _createForOfIteratorHelperLoose(fileData.dynamicImports), _step; !(_step = _iterator()).done;) {
857
+ var dynamicImport = _step.value;
858
+ var importData = bundle[dynamicImport];
859
+ if (!importData) continue;
860
+ var isCss = isCSSFile(dynamicImport);
861
+ trackAsset(filesMap, matchKey, dynamicImport, true, isCss ? 'css' : 'js');
862
+ }
863
+ }
864
+ }
865
+ }
866
+ };
867
+ /**
868
+ * Deduplicates assets in the files map
869
+ * @param filesMap - The preload map to deduplicate
870
+ * @returns New deduplicated preload map
871
+ */
872
+ var deduplicateAssets = function deduplicateAssets(filesMap) {
873
+ var result = {};
874
+ for (var _i4 = 0, _Object$entries3 = Object.entries(filesMap); _i4 < _Object$entries3.length; _i4++) {
875
+ var _Object$entries3$_i = _Object$entries3[_i4],
876
+ key = _Object$entries3$_i[0],
877
+ assetMaps = _Object$entries3$_i[1];
878
+ result[key] = createEmptyAssetMap();
879
+ for (var _i5 = 0, _ASSET_TYPES = ASSET_TYPES; _i5 < _ASSET_TYPES.length; _i5++) {
880
+ var type = _ASSET_TYPES[_i5];
881
+ for (var _i6 = 0, _LOAD_TIMINGS = LOAD_TIMINGS; _i6 < _LOAD_TIMINGS.length; _i6++) {
882
+ var timing = _LOAD_TIMINGS[_i6];
883
+ result[key][type][timing] = Array.from(new Set(assetMaps[type][timing]));
884
+ }
885
+ }
886
+ }
887
+ return result;
888
+ };
889
+ /**
890
+ * Builds a mapping between module files and their share keys
891
+ * @param shareKeys - Set of share keys to map
892
+ * @param resolveFn - Function to resolve module paths
893
+ * @returns Map of file paths to their corresponding share keys
894
+ */
895
+ var buildFileToShareKeyMap = function buildFileToShareKeyMap(shareKeys, resolveFn) {
896
+ try {
897
+ var fileToShareKey = new Map();
898
+ return Promise.resolve(Promise.all(Array.from(shareKeys).map(function (shareKey) {
899
+ return resolveFn(getPreBuildLibImportId(shareKey)).then(function (resolution) {
900
+ var _resolution$id;
901
+ return {
902
+ shareKey: shareKey,
903
+ file: resolution == null || (_resolution$id = resolution.id) == null ? void 0 : _resolution$id.split('?')[0]
904
+ };
905
+ })["catch"](function () {
906
+ return null;
907
+ });
908
+ }))).then(function (resolutions) {
909
+ for (var _iterator2 = _createForOfIteratorHelperLoose(resolutions), _step2; !(_step2 = _iterator2()).done;) {
910
+ var resolution = _step2.value;
911
+ if (resolution != null && resolution.file) {
912
+ fileToShareKey.set(resolution.file, resolution.shareKey);
913
+ }
914
+ }
915
+ return fileToShareKey;
916
+ });
917
+ } catch (e) {
918
+ return Promise.reject(e);
919
+ }
920
+ };
921
+
762
922
  var Manifest = function Manifest() {
763
923
  var mfOptions = getNormalizeModuleFederationOptions();
764
924
  var name = mfOptions.name,
@@ -770,21 +930,43 @@ var Manifest = function Manifest() {
770
930
  mfManifestName = 'mf-manifest.json';
771
931
  }
772
932
  if (typeof manifestOptions !== 'boolean') {
773
- mfManifestName = path.join((manifestOptions == null ? void 0 : manifestOptions.filePath) || '', (manifestOptions == null ? void 0 : manifestOptions.fileName) || '');
933
+ mfManifestName = path__namespace.join((manifestOptions == null ? void 0 : manifestOptions.filePath) || '', (manifestOptions == null ? void 0 : manifestOptions.fileName) || '');
774
934
  }
775
- var extensions;
776
935
  var root;
777
936
  var remoteEntryFile;
778
937
  var publicPath;
779
938
  var _command;
780
939
  var _originalConfigBase;
781
940
  var viteConfig;
941
+ /**
942
+ * Adds global CSS assets to all module exports
943
+ * @param filesMap - The preload map to update
944
+ * @param cssAssets - Set of CSS asset filenames to add
945
+ */
946
+ var addCssAssetsToAllExports = function addCssAssetsToAllExports(filesMap, cssAssets) {
947
+ Object.keys(filesMap).forEach(function (key) {
948
+ cssAssets.forEach(function (cssAsset) {
949
+ trackAsset(filesMap, key, cssAsset, false, 'css');
950
+ });
951
+ });
952
+ };
782
953
  return [{
783
954
  name: 'module-federation-manifest',
784
955
  apply: 'serve',
956
+ /**
957
+ * Stores resolved Vite config for later use
958
+ */
959
+ /**
960
+ * Finalizes configuration after all plugins are resolved
961
+ * @param config - Fully resolved Vite config
962
+ */
785
963
  configResolved: function configResolved(config) {
786
964
  viteConfig = config;
787
965
  },
966
+ /**
967
+ * Configures dev server middleware to handle manifest requests
968
+ * @param server - Vite dev server instance
969
+ */
788
970
  configureServer: function configureServer(server) {
789
971
  server.middlewares.use(function (req, res, next) {
790
972
  var _req$url;
@@ -832,137 +1014,85 @@ var Manifest = function Manifest() {
832
1014
  }, {
833
1015
  name: 'module-federation-manifest',
834
1016
  enforce: 'post',
1017
+ /**
1018
+ * Initial plugin configuration
1019
+ * @param config - Vite config object
1020
+ * @param command - Current Vite command (serve/build)
1021
+ */
835
1022
  config: function config(_config, _ref) {
836
1023
  var command = _ref.command;
837
1024
  if (!_config.build) _config.build = {};
838
- if (!_config.build.manifest) _config.build.manifest = _config.build.manifest || !!manifestOptions;
1025
+ if (!_config.build.manifest) {
1026
+ _config.build.manifest = _config.build.manifest || !!manifestOptions;
1027
+ }
839
1028
  _command = command;
840
1029
  _originalConfigBase = _config.base;
841
1030
  },
842
1031
  configResolved: function configResolved(config) {
843
1032
  root = config.root;
844
- extensions = config.resolve.extensions || ['.mjs', '.js', '.mts', '.ts', '.jsx', '.tsx', '.json'];
845
1033
  var base = config.base;
846
1034
  if (_command === 'serve') {
847
1035
  base = (config.server.origin || '') + config.base;
848
1036
  }
849
1037
  publicPath = _originalConfigBase === '' ? 'auto' : base ? base.replace(/\/?$/, '/') : 'auto';
850
1038
  },
1039
+ /**
1040
+ * Generates the module federation manifest file
1041
+ * @param options - Rollup output options
1042
+ * @param bundle - Generated bundle assets
1043
+ */
851
1044
  generateBundle: function generateBundle(options, bundle) {
852
1045
  try {
853
1046
  var _this = this;
854
- // 递归查找模块的同步导入文件
855
- var _findSynchronousImports = function findSynchronousImports(fileName, array) {
856
- var fileData = bundle[fileName];
857
- if (fileData && fileData.type === 'chunk') {
858
- array.push(fileName); // 将当前文件加入预加载列表
859
- // 遍历该文件的同步导入文件
860
- fileData.imports.forEach(function (importedFile) {
861
- if (array.indexOf(importedFile) === -1) {
862
- _findSynchronousImports(importedFile, array); // 递归查找同步导入的文件
863
- }
864
- });
865
- }
866
- };
867
1047
  if (!mfManifestName) return Promise.resolve();
868
- var exposesModules = Object.keys(mfOptions.exposes).map(function (item) {
869
- return mfOptions.exposes[item]["import"];
870
- }); // 获取你提供的 moduleIds
871
- var filesContainingModules = {};
872
- // 帮助函数:检查模块路径是否匹配
873
- var isModuleMatched = function isModuleMatched(relativeModulePath, preloadModule) {
874
- // 先尝试直接匹配
875
- if (relativeModulePath === preloadModule) return true;
876
- // 如果 preloadModule 没有后缀,尝试添加可能的后缀进行匹配
877
- for (var _iterator = _createForOfIteratorHelperLoose(extensions), _step; !(_step = _iterator()).done;) {
878
- var ext = _step.value;
879
- if (relativeModulePath === "" + preloadModule + ext) {
880
- return true;
881
- }
882
- }
883
- return false;
884
- };
885
- // 遍历打包生成的每个文件
1048
+ var filesMap = {};
1049
+ // First pass: Find remoteEntry file
886
1050
  for (var _i = 0, _Object$entries = Object.entries(bundle); _i < _Object$entries.length; _i++) {
887
1051
  var _Object$entries$_i = _Object$entries[_i],
888
- fileName = _Object$entries$_i[0],
1052
+ _ = _Object$entries$_i[0],
889
1053
  fileData = _Object$entries$_i[1];
890
1054
  if (mfOptions.filename.replace(/[\[\]]/g, '_').replace(/\.[^/.]+$/, '') === fileData.name || fileData.name === 'remoteEntry') {
891
1055
  remoteEntryFile = fileData.fileName;
892
- }
893
- if (fileData.type === 'chunk') {
894
- // 遍历该文件的所有模块
895
- for (var _i2 = 0, _Object$keys = Object.keys(fileData.modules); _i2 < _Object$keys.length; _i2++) {
896
- var modulePath = _Object$keys[_i2];
897
- // 将绝对路径转换为相对于 Vite root 的相对路径
898
- var relativeModulePath = path.relative(root, modulePath);
899
- // 检查模块是否在 preloadModules 列表中
900
- for (var _iterator2 = _createForOfIteratorHelperLoose(exposesModules), _step2; !(_step2 = _iterator2()).done;) {
901
- var preloadModule = _step2.value;
902
- var formatPreloadModule = preloadModule.replace('./', '');
903
- if (isModuleMatched(relativeModulePath, formatPreloadModule)) {
904
- var _filesContainingModul;
905
- if (!filesContainingModules[preloadModule]) {
906
- filesContainingModules[preloadModule] = {
907
- sync: [],
908
- async: []
909
- };
910
- }
911
- console.log(Object.keys(fileData.modules));
912
- filesContainingModules[preloadModule].sync.push(fileName);
913
- (_filesContainingModul = filesContainingModules[preloadModule].async).push.apply(_filesContainingModul, fileData.dynamicImports || []);
914
- _findSynchronousImports(fileName, filesContainingModules[preloadModule].sync);
915
- break; // 如果找到匹配,跳出循环
916
- }
917
- }
918
- }
1056
+ break; // We can break early since we only need to find remoteEntry once
919
1057
  }
920
1058
  }
921
- var fileToShareKey = {};
922
- return Promise.resolve(Promise.all(Array.from(getUsedShares()).map(function (shareKey) {
923
- try {
924
- return Promise.resolve(_this.resolve(getPreBuildLibImportId(shareKey))).then(function (_this$resolve) {
925
- var file = _this$resolve.id.split('?')[0];
926
- fileToShareKey[file] = shareKey;
927
- });
928
- } catch (e) {
929
- return Promise.reject(e);
930
- }
931
- }))).then(function () {
932
- // 遍历打包生成的每个文件
933
- for (var _i3 = 0, _Object$entries2 = Object.entries(bundle); _i3 < _Object$entries2.length; _i3++) {
934
- var _Object$entries2$_i = _Object$entries2[_i3],
935
- _fileName = _Object$entries2$_i[0],
936
- _fileData = _Object$entries2$_i[1];
937
- if (_fileData.type === 'chunk') {
938
- // 遍历该文件的所有模块
939
- for (var _i4 = 0, _Object$keys2 = Object.keys(_fileData.modules); _i4 < _Object$keys2.length; _i4++) {
940
- var _modulePath = _Object$keys2[_i4];
941
- var sharedKey = fileToShareKey[_modulePath];
942
- if (sharedKey) {
943
- var _filesContainingModul2;
944
- if (!filesContainingModules[sharedKey]) {
945
- filesContainingModules[sharedKey] = {
946
- sync: [],
947
- async: []
948
- };
949
- }
950
- filesContainingModules[sharedKey].sync.push(_fileName);
951
- (_filesContainingModul2 = filesContainingModules[sharedKey].async).push.apply(_filesContainingModul2, _fileData.dynamicImports || []);
952
- _findSynchronousImports(_fileName, filesContainingModules[sharedKey].sync);
953
- break; // 如果找到匹配,跳出循环
954
- }
955
- }
1059
+ // Second pass: Collect all CSS assets
1060
+ var allCssAssets = collectCssAssets(bundle);
1061
+ var exposesModules = Object.keys(mfOptions.exposes).map(function (item) {
1062
+ return mfOptions.exposes[item]["import"];
1063
+ });
1064
+ // Process exposed modules
1065
+ processModuleAssets(bundle, filesMap, function (modulePath) {
1066
+ var absoluteModulePath = path__namespace.resolve(root, modulePath);
1067
+ return exposesModules.find(function (exposeModule) {
1068
+ var exposePath = path__namespace.resolve(root, exposeModule);
1069
+ // First try exact path match
1070
+ if (absoluteModulePath === exposePath) {
1071
+ return true;
956
1072
  }
957
- }
958
- Object.keys(filesContainingModules).forEach(function (key) {
959
- filesContainingModules[key].sync = Array.from(new Set(filesContainingModules[key].sync));
960
- filesContainingModules[key].async = Array.from(new Set(filesContainingModules[key].async));
1073
+ // Then try path match without known extensions
1074
+ var getPathWithoutKnownExt = function getPathWithoutKnownExt(filePath) {
1075
+ var ext = path__namespace.extname(filePath);
1076
+ return JS_EXTENSIONS.includes(ext) ? path__namespace.join(path__namespace.dirname(filePath), path__namespace.basename(filePath, ext)) : filePath;
1077
+ };
1078
+ var modulePathNoExt = getPathWithoutKnownExt(absoluteModulePath);
1079
+ var exposePathNoExt = getPathWithoutKnownExt(exposePath);
1080
+ return modulePathNoExt === exposePathNoExt;
1081
+ });
1082
+ });
1083
+ // Process shared modules
1084
+ return Promise.resolve(buildFileToShareKeyMap(getUsedShares(), _this.resolve.bind(_this))).then(function (fileToShareKey) {
1085
+ processModuleAssets(bundle, filesMap, function (modulePath) {
1086
+ return fileToShareKey.get(modulePath);
961
1087
  });
1088
+ // Add all CSS assets to every export
1089
+ addCssAssetsToAllExports(filesMap, allCssAssets);
1090
+ // Final deduplication of all assets
1091
+ filesMap = deduplicateAssets(filesMap);
962
1092
  _this.emitFile({
963
1093
  type: 'asset',
964
1094
  fileName: mfManifestName,
965
- source: JSON.stringify(generateMFManifest(filesContainingModules))
1095
+ source: JSON.stringify(generateMFManifest(filesMap))
966
1096
  });
967
1097
  });
968
1098
  } catch (e) {
@@ -970,6 +1100,11 @@ var Manifest = function Manifest() {
970
1100
  }
971
1101
  }
972
1102
  }];
1103
+ /**
1104
+ * Generates the final manifest JSON structure
1105
+ * @param preloadMap - Map of module assets to include
1106
+ * @returns Complete manifest object
1107
+ */
973
1108
  function generateMFManifest(preloadMap) {
974
1109
  var options = getNormalizeModuleFederationOptions();
975
1110
  var name = options.name;
@@ -978,23 +1113,23 @@ var Manifest = function Manifest() {
978
1113
  path: '',
979
1114
  type: 'module'
980
1115
  };
981
- var remotes = [];
982
- var usedRemotesMap = getUsedRemotesMap();
983
- Object.keys(usedRemotesMap).forEach(function (remoteKey) {
984
- var usedModules = Array.from(usedRemotesMap[remoteKey]);
985
- usedModules.forEach(function (moduleKey) {
986
- remotes.push({
1116
+ // Process remotes
1117
+ var remotes = Array.from(Object.entries(getUsedRemotesMap())).flatMap(function (_ref2) {
1118
+ var remoteKey = _ref2[0],
1119
+ modules = _ref2[1];
1120
+ return Array.from(modules).map(function (moduleKey) {
1121
+ return {
987
1122
  federationContainerName: options.remotes[remoteKey].entry,
988
1123
  moduleName: moduleKey.replace(remoteKey, '').replace('/', ''),
989
1124
  alias: remoteKey,
990
1125
  entry: '*'
991
- });
1126
+ };
992
1127
  });
993
1128
  });
994
- // @ts-ignore
1129
+ // Process shared dependencies
995
1130
  var shared = Array.from(getUsedShares()).map(function (shareKey) {
996
- var _preloadMap$shareKey, _preloadMap$shareKey2;
997
1131
  var shareItem = getNormalizeShareItem(shareKey);
1132
+ var assets = preloadMap[shareKey] || createEmptyAssetMap();
998
1133
  return {
999
1134
  id: name + ":" + shareKey,
1000
1135
  name: shareKey,
@@ -1002,42 +1137,40 @@ var Manifest = function Manifest() {
1002
1137
  requiredVersion: shareItem.shareConfig.requiredVersion,
1003
1138
  assets: {
1004
1139
  js: {
1005
- async: (preloadMap == null || (_preloadMap$shareKey = preloadMap[shareKey]) == null ? void 0 : _preloadMap$shareKey.async) || [],
1006
- sync: (preloadMap == null || (_preloadMap$shareKey2 = preloadMap[shareKey]) == null ? void 0 : _preloadMap$shareKey2.sync) || []
1140
+ async: assets.js.async,
1141
+ sync: assets.js.sync
1007
1142
  },
1008
1143
  css: {
1009
- async: [],
1010
- sync: []
1144
+ async: assets.css.async,
1145
+ sync: assets.css.sync
1011
1146
  }
1012
1147
  }
1013
1148
  };
1014
- }).filter(function (item) {
1015
- return item;
1016
- });
1017
- var exposes = Object.keys(options.exposes).map(function (key) {
1018
- var _preloadMap$sourceFil, _preloadMap$sourceFil2;
1019
- // assets(.css, .jpg, .svg等)其他资源, 不重要, 暂未处理
1149
+ }).filter(Boolean);
1150
+ // Process exposed modules
1151
+ var exposes = Object.entries(options.exposes).map(function (_ref3) {
1152
+ var key = _ref3[0],
1153
+ value = _ref3[1];
1020
1154
  var formatKey = key.replace('./', '');
1021
- var sourceFile = options.exposes[key]["import"];
1155
+ var sourceFile = value["import"];
1156
+ var assets = preloadMap[sourceFile] || createEmptyAssetMap();
1022
1157
  return {
1023
- id: name + ':' + formatKey,
1158
+ id: name + ":" + formatKey,
1024
1159
  name: formatKey,
1025
1160
  assets: {
1026
1161
  js: {
1027
- async: (preloadMap == null || (_preloadMap$sourceFil = preloadMap[sourceFile]) == null ? void 0 : _preloadMap$sourceFil.async) || [],
1028
- sync: (preloadMap == null || (_preloadMap$sourceFil2 = preloadMap[sourceFile]) == null ? void 0 : _preloadMap$sourceFil2.sync) || []
1162
+ async: assets.js.async,
1163
+ sync: assets.js.sync
1029
1164
  },
1030
1165
  css: {
1031
- sync: [],
1032
- async: []
1166
+ async: assets.css.async,
1167
+ sync: assets.css.sync
1033
1168
  }
1034
1169
  },
1035
1170
  path: key
1036
1171
  };
1037
- }).filter(function (item) {
1038
- return item;
1039
- }); // Filter out any null values
1040
- var result = {
1172
+ }).filter(Boolean);
1173
+ return {
1041
1174
  id: name,
1042
1175
  name: name,
1043
1176
  metaData: _extends({
@@ -1052,8 +1185,6 @@ var Manifest = function Manifest() {
1052
1185
  types: {
1053
1186
  path: '',
1054
1187
  name: ''
1055
- // "zip": "@mf-types.zip",
1056
- // "api": "@mf-types.d.ts"
1057
1188
  },
1058
1189
  globalName: name,
1059
1190
  pluginVersion: '0.2.5'
@@ -1066,7 +1197,6 @@ var Manifest = function Manifest() {
1066
1197
  remotes: remotes,
1067
1198
  exposes: exposes
1068
1199
  };
1069
- return result;
1070
1200
  }
1071
1201
  };
1072
1202