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