@module-federation/enhanced 0.17.1 → 0.18.1

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.
Files changed (49) hide show
  1. package/dist/package.json +1 -1
  2. package/dist/src/declarations/plugins/sharing/ConsumeSharedModule.d.ts +29 -0
  3. package/dist/src/declarations/plugins/sharing/ConsumeSharedPlugin.d.ts +10 -0
  4. package/dist/src/declarations/plugins/sharing/ProvideSharedPlugin.d.ts +23 -0
  5. package/dist/src/declarations/plugins/sharing/SharePlugin.d.ts +18 -0
  6. package/dist/src/lib/container/ContainerPlugin.js +4 -0
  7. package/dist/src/lib/container/ContainerPlugin.js.map +1 -1
  8. package/dist/src/lib/sharing/ConsumeSharedFallbackDependency.d.ts +3 -1
  9. package/dist/src/lib/sharing/ConsumeSharedFallbackDependency.js +3 -1
  10. package/dist/src/lib/sharing/ConsumeSharedFallbackDependency.js.map +1 -1
  11. package/dist/src/lib/sharing/ConsumeSharedModule.js +3 -1
  12. package/dist/src/lib/sharing/ConsumeSharedModule.js.map +1 -1
  13. package/dist/src/lib/sharing/ConsumeSharedPlugin.d.ts +5 -2
  14. package/dist/src/lib/sharing/ConsumeSharedPlugin.js +278 -107
  15. package/dist/src/lib/sharing/ConsumeSharedPlugin.js.map +1 -1
  16. package/dist/src/lib/sharing/ProvideSharedPlugin.d.ts +13 -0
  17. package/dist/src/lib/sharing/ProvideSharedPlugin.js +414 -76
  18. package/dist/src/lib/sharing/ProvideSharedPlugin.js.map +1 -1
  19. package/dist/src/lib/sharing/SharePlugin.js +15 -1
  20. package/dist/src/lib/sharing/SharePlugin.js.map +1 -1
  21. package/dist/src/lib/sharing/resolveMatchedConfigs.js +7 -11
  22. package/dist/src/lib/sharing/resolveMatchedConfigs.js.map +1 -1
  23. package/dist/src/lib/sharing/utils.d.ts +7 -0
  24. package/dist/src/lib/sharing/utils.js +52 -0
  25. package/dist/src/lib/sharing/utils.js.map +1 -1
  26. package/dist/src/schemas/container/ModuleFederationPlugin.check.js +492 -239
  27. package/dist/src/schemas/container/ModuleFederationPlugin.check.js.map +1 -1
  28. package/dist/src/schemas/container/ModuleFederationPlugin.d.ts +56 -0
  29. package/dist/src/schemas/container/ModuleFederationPlugin.js +60 -0
  30. package/dist/src/schemas/container/ModuleFederationPlugin.js.map +1 -1
  31. package/dist/src/schemas/sharing/ConsumeSharedPlugin.check.d.ts +3 -3
  32. package/dist/src/schemas/sharing/ConsumeSharedPlugin.check.js +362 -117
  33. package/dist/src/schemas/sharing/ConsumeSharedPlugin.check.js.map +1 -1
  34. package/dist/src/schemas/sharing/ConsumeSharedPlugin.d.ts +65 -0
  35. package/dist/src/schemas/sharing/ConsumeSharedPlugin.js +68 -0
  36. package/dist/src/schemas/sharing/ConsumeSharedPlugin.js.map +1 -1
  37. package/dist/src/schemas/sharing/ProvideSharedPlugin.check.d.ts +3 -3
  38. package/dist/src/schemas/sharing/ProvideSharedPlugin.check.js +641 -352
  39. package/dist/src/schemas/sharing/ProvideSharedPlugin.check.js.map +1 -1
  40. package/dist/src/schemas/sharing/ProvideSharedPlugin.d.ts +58 -0
  41. package/dist/src/schemas/sharing/ProvideSharedPlugin.js +64 -0
  42. package/dist/src/schemas/sharing/ProvideSharedPlugin.js.map +1 -1
  43. package/dist/src/schemas/sharing/SharePlugin.check.d.ts +3 -3
  44. package/dist/src/schemas/sharing/SharePlugin.check.js +590 -282
  45. package/dist/src/schemas/sharing/SharePlugin.check.js.map +1 -1
  46. package/dist/src/schemas/sharing/SharePlugin.d.ts +82 -0
  47. package/dist/src/schemas/sharing/SharePlugin.js +86 -0
  48. package/dist/src/schemas/sharing/SharePlugin.js.map +1 -1
  49. package/package.json +13 -13
@@ -14,6 +14,8 @@ const ProvideSharedDependency_1 = __importDefault(require("./ProvideSharedDepend
14
14
  const ProvideSharedModuleFactory_1 = __importDefault(require("./ProvideSharedModuleFactory"));
15
15
  const FederationRuntimePlugin_1 = __importDefault(require("../container/runtime/FederationRuntimePlugin"));
16
16
  const utils_1 = require("../../utils");
17
+ const { satisfy, parseRange } = require((0, normalize_webpack_path_1.normalizeWebpackPath)('webpack/lib/util/semver'));
18
+ const utils_2 = require("./utils");
17
19
  const WebpackError = require((0, normalize_webpack_path_1.normalizeWebpackPath)('webpack/lib/WebpackError'));
18
20
  const validate = (0, utils_1.createSchemaValidation)(
19
21
  //eslint-disable-next-line
@@ -28,15 +30,10 @@ require('../../schemas/sharing/ProvideSharedPlugin.check.js').validate, () => re
28
30
  * @property {string | undefined | false} version
29
31
  * @property {boolean} eager
30
32
  * @property {string} [request] The actual request to use for importing the module
33
+ * @property {{ version?: string; request?: string | RegExp; fallbackVersion?: string }} [exclude] Options for excluding certain versions or requests
34
+ * @property {{ version?: string; request?: string | RegExp; fallbackVersion?: string }} [include] Options for including only certain versions or requests
31
35
  */
32
36
  /** @typedef {Map<string, { config: ProvideOptions, version: string | undefined | false }>} ResolvedProvideMap */
33
- // Helper function to create composite key
34
- function createLookupKey(request, config) {
35
- if (config.layer) {
36
- return `(${config.layer})${request}`;
37
- }
38
- return request;
39
- }
40
37
  class ProvideSharedPlugin {
41
38
  /**
42
39
  * @param {ProvideSharedPluginOptions} options options
@@ -46,7 +43,6 @@ class ProvideSharedPlugin {
46
43
  this._provides = (0, options_1.parseOptions)(options.provides, (item) => {
47
44
  if (Array.isArray(item))
48
45
  throw new Error('Unexpected array of provides');
49
- /** @type {ProvidesConfig} */
50
46
  const result = {
51
47
  shareKey: item,
52
48
  version: undefined,
@@ -57,6 +53,9 @@ class ProvideSharedPlugin {
57
53
  singleton: false,
58
54
  layer: undefined,
59
55
  request: item,
56
+ exclude: undefined,
57
+ include: undefined,
58
+ nodeModulesReconstructedLookup: false,
60
59
  };
61
60
  return result;
62
61
  }, (item, key) => {
@@ -71,6 +70,9 @@ class ProvideSharedPlugin {
71
70
  singleton: !!item.singleton,
72
71
  layer: item.layer,
73
72
  request,
73
+ exclude: item.exclude,
74
+ include: item.include,
75
+ nodeModulesReconstructedLookup: !!item.nodeModulesReconstructedLookup,
74
76
  };
75
77
  });
76
78
  this._provides.sort(([a], [b]) => {
@@ -97,92 +99,179 @@ class ProvideSharedPlugin {
97
99
  const prefixMatchProvides = new Map();
98
100
  for (const [request, config] of this._provides) {
99
101
  const actualRequest = config.request || request;
100
- const lookupKey = createLookupKey(actualRequest, config);
102
+ const lookupKey = (0, utils_2.createLookupKeyForSharing)(actualRequest, config.layer);
101
103
  if (/^(\/|[A-Za-z]:\\|\\\\|\.\.?(\/|$))/.test(actualRequest)) {
102
- // relative request
103
- resolvedProvideMap.set(lookupKey, {
104
- config,
105
- version: config.version,
106
- });
104
+ // relative request - apply filtering if include/exclude are defined
105
+ if (this.shouldProvideSharedModule(config)) {
106
+ resolvedProvideMap.set(lookupKey, {
107
+ config,
108
+ version: config.version,
109
+ resource: actualRequest,
110
+ });
111
+ }
107
112
  }
108
113
  else if (/^(\/|[A-Za-z]:\\|\\\\)/.test(actualRequest)) {
109
- // absolute path
110
- resolvedProvideMap.set(lookupKey, {
111
- config,
112
- version: config.version,
113
- });
114
+ // absolute path - apply filtering if include/exclude are defined
115
+ if (this.shouldProvideSharedModule(config)) {
116
+ resolvedProvideMap.set(lookupKey, {
117
+ config,
118
+ version: config.version,
119
+ resource: actualRequest,
120
+ });
121
+ }
114
122
  }
115
123
  else if (actualRequest.endsWith('/')) {
116
- // module request prefix
117
124
  prefixMatchProvides.set(lookupKey, config);
118
125
  }
119
126
  else {
120
- // module request
121
127
  matchProvides.set(lookupKey, config);
122
128
  }
123
129
  }
124
130
  compilationData.set(compilation, resolvedProvideMap);
125
- const provideSharedModule = (key, config, resource, resourceResolveData) => {
126
- let version = config.version;
127
- if (version === undefined) {
128
- let details = '';
129
- if (!resourceResolveData) {
130
- details = `No resolve data provided from resolver.`;
131
- }
132
- else {
133
- const descriptionFileData = resourceResolveData.descriptionFileData;
134
- if (!descriptionFileData) {
135
- details =
136
- 'No description file (usually package.json) found. Add description file with name and version, or manually specify version in shared config.';
137
- }
138
- else if (!descriptionFileData.version) {
139
- details = `No version in description file (usually package.json). Add version to description file ${resourceResolveData.descriptionFilePath}, or manually specify version in shared config.`;
140
- }
141
- else {
142
- version = descriptionFileData.version;
143
- }
144
- }
145
- if (!version) {
146
- const error = new WebpackError(`No version specified and unable to automatically determine one. ${details}`);
147
- error.file = `shared module ${key} -> ${resource}`;
148
- compilation.warnings.push(error);
149
- }
150
- }
151
- const lookupKey = createLookupKey(resource, config);
152
- resolvedProvideMap.set(lookupKey, {
153
- config,
154
- version,
155
- resource,
156
- });
157
- };
158
131
  normalModuleFactory.hooks.module.tap('ProvideSharedPlugin', (module, { resource, resourceResolveData }, resolveData) => {
159
132
  const moduleLayer = module.layer;
160
- const lookupKey = createLookupKey(resource || '', {
161
- layer: moduleLayer || undefined,
162
- });
163
- if (resource && resolvedProvideMap.has(lookupKey)) {
133
+ const lookupKeyForResource = (0, utils_2.createLookupKeyForSharing)(resource || '', moduleLayer || undefined);
134
+ if (resource && resolvedProvideMap.has(lookupKeyForResource)) {
164
135
  return module;
165
136
  }
166
- const { request } = resolveData;
167
- {
168
- const requestKey = createLookupKey(request, {
169
- layer: moduleLayer || undefined,
170
- });
171
- const config = matchProvides.get(requestKey);
172
- if (config !== undefined && resource) {
173
- provideSharedModule(request, config, resource, resourceResolveData);
137
+ const { request: originalRequestString } = resolveData;
138
+ // --- Stage 1a: Direct match with originalRequestString ---
139
+ const originalRequestLookupKey = (0, utils_2.createLookupKeyForSharing)(originalRequestString, moduleLayer || undefined);
140
+ const configFromOriginalDirect = matchProvides.get(originalRequestLookupKey);
141
+ if (configFromOriginalDirect !== undefined &&
142
+ resource &&
143
+ !resolvedProvideMap.has(lookupKeyForResource)) {
144
+ // Apply request filters if defined (from PR5's cleaner approach)
145
+ if ((0, utils_2.testRequestFilters)(originalRequestString, configFromOriginalDirect.include?.request, configFromOriginalDirect.exclude?.request)) {
146
+ this.provideSharedModule(compilation, resolvedProvideMap, originalRequestString, configFromOriginalDirect, resource, resourceResolveData);
174
147
  resolveData.cacheable = false;
175
148
  }
176
149
  }
177
- for (const [prefix, config] of prefixMatchProvides) {
178
- const lookup = config.request || prefix;
179
- if (request.startsWith(lookup) && resource) {
180
- const remainder = request.slice(lookup.length);
181
- provideSharedModule(resource, {
182
- ...config,
183
- shareKey: config.shareKey + remainder,
184
- }, resource, resourceResolveData);
185
- resolveData.cacheable = false;
150
+ // --- Stage 1b: Prefix match with originalRequestString ---
151
+ if (resource && !resolvedProvideMap.has(lookupKeyForResource)) {
152
+ for (const [prefixLookupKey, originalPrefixConfig,] of prefixMatchProvides) {
153
+ const configuredPrefix = originalPrefixConfig.request || prefixLookupKey.split('?')[0];
154
+ // Refined layer matching logic
155
+ if (originalPrefixConfig.layer) {
156
+ if (!moduleLayer) {
157
+ continue; // Option is layered, request is not: skip
158
+ }
159
+ if (moduleLayer !== originalPrefixConfig.layer) {
160
+ continue; // Both are layered but do not match: skip
161
+ }
162
+ }
163
+ // If moduleLayer exists but config.layer does not, allow (non-layered option matches layered request)
164
+ if (originalRequestString.startsWith(configuredPrefix)) {
165
+ if (resolvedProvideMap.has(lookupKeyForResource))
166
+ continue;
167
+ const remainder = originalRequestString.slice(configuredPrefix.length);
168
+ if (!(0, utils_2.testRequestFilters)(remainder, originalPrefixConfig.include?.request, originalPrefixConfig.exclude?.request)) {
169
+ continue;
170
+ }
171
+ const finalShareKey = originalPrefixConfig.shareKey
172
+ ? originalPrefixConfig.shareKey + remainder
173
+ : configuredPrefix + remainder;
174
+ // Validate singleton usage when using include.request
175
+ if (originalPrefixConfig.include?.request &&
176
+ originalPrefixConfig.singleton) {
177
+ (0, utils_2.addSingletonFilterWarning)(compilation, finalShareKey, 'include', 'request', originalPrefixConfig.include.request, originalRequestString, resource);
178
+ }
179
+ // Validate singleton usage when using exclude.request
180
+ if (originalPrefixConfig.exclude?.request &&
181
+ originalPrefixConfig.singleton) {
182
+ (0, utils_2.addSingletonFilterWarning)(compilation, finalShareKey, 'exclude', 'request', originalPrefixConfig.exclude.request, originalRequestString, resource);
183
+ }
184
+ const configForSpecificModule = {
185
+ ...originalPrefixConfig,
186
+ shareKey: finalShareKey,
187
+ request: originalRequestString,
188
+ _originalPrefix: configuredPrefix, // Store the original prefix for filtering
189
+ include: originalPrefixConfig.include
190
+ ? { ...originalPrefixConfig.include }
191
+ : undefined,
192
+ exclude: originalPrefixConfig.exclude
193
+ ? { ...originalPrefixConfig.exclude }
194
+ : undefined,
195
+ };
196
+ this.provideSharedModule(compilation, resolvedProvideMap, originalRequestString, configForSpecificModule, resource, resourceResolveData);
197
+ resolveData.cacheable = false;
198
+ break;
199
+ }
200
+ }
201
+ }
202
+ // --- Stage 2: Match using reconstructed node_modules path ---
203
+ if (resource && !resolvedProvideMap.has(lookupKeyForResource)) {
204
+ const modulePathAfterNodeModules = (0, utils_2.extractPathAfterNodeModules)(resource);
205
+ if (modulePathAfterNodeModules) {
206
+ // 2a. Direct match with reconstructed path
207
+ const reconstructedLookupKey = (0, utils_2.createLookupKeyForSharing)(modulePathAfterNodeModules, moduleLayer || undefined);
208
+ const configFromReconstructedDirect = matchProvides.get(reconstructedLookupKey);
209
+ if (configFromReconstructedDirect !== undefined &&
210
+ configFromReconstructedDirect.nodeModulesReconstructedLookup &&
211
+ !resolvedProvideMap.has(lookupKeyForResource)) {
212
+ this.provideSharedModule(compilation, resolvedProvideMap, modulePathAfterNodeModules, configFromReconstructedDirect, resource, resourceResolveData);
213
+ resolveData.cacheable = false;
214
+ }
215
+ // 2b. Prefix match with reconstructed path
216
+ if (resource && !resolvedProvideMap.has(lookupKeyForResource)) {
217
+ for (const [prefixLookupKey, originalPrefixConfig,] of prefixMatchProvides) {
218
+ if (!originalPrefixConfig.nodeModulesReconstructedLookup) {
219
+ continue;
220
+ }
221
+ const configuredPrefix = originalPrefixConfig.request ||
222
+ prefixLookupKey.split('?')[0];
223
+ // Refined layer matching logic for reconstructed path
224
+ if (originalPrefixConfig.layer) {
225
+ if (!moduleLayer) {
226
+ continue; // Option is layered, request is not: skip
227
+ }
228
+ if (moduleLayer !== originalPrefixConfig.layer) {
229
+ continue; // Both are layered but do not match: skip
230
+ }
231
+ }
232
+ // If moduleLayer exists but config.layer does not, allow (non-layered option matches layered request)
233
+ if (originalRequestString.startsWith(configuredPrefix)) {
234
+ if (resolvedProvideMap.has(lookupKeyForResource))
235
+ continue;
236
+ const remainder = originalRequestString.slice(configuredPrefix.length);
237
+ if (!(0, utils_2.testRequestFilters)(remainder, originalPrefixConfig.include?.request, originalPrefixConfig.exclude?.request)) {
238
+ continue;
239
+ }
240
+ const finalShareKey = originalPrefixConfig.shareKey
241
+ ? originalPrefixConfig.shareKey + remainder
242
+ : configuredPrefix + remainder;
243
+ // Validate singleton usage when using include.request
244
+ if (originalPrefixConfig.include?.request &&
245
+ originalPrefixConfig.singleton) {
246
+ (0, utils_2.addSingletonFilterWarning)(compilation, finalShareKey, 'include', 'request', originalPrefixConfig.include.request, modulePathAfterNodeModules, resource);
247
+ }
248
+ // Validate singleton usage when using exclude.request
249
+ if (originalPrefixConfig.exclude?.request &&
250
+ originalPrefixConfig.singleton) {
251
+ (0, utils_2.addSingletonFilterWarning)(compilation, finalShareKey, 'exclude', 'request', originalPrefixConfig.exclude.request, modulePathAfterNodeModules, resource);
252
+ }
253
+ const configForSpecificModule = {
254
+ ...originalPrefixConfig,
255
+ shareKey: finalShareKey,
256
+ request: modulePathAfterNodeModules,
257
+ _originalPrefix: configuredPrefix, // Store the original prefix for filtering
258
+ include: originalPrefixConfig.include
259
+ ? {
260
+ ...originalPrefixConfig.include,
261
+ }
262
+ : undefined,
263
+ exclude: originalPrefixConfig.exclude
264
+ ? {
265
+ ...originalPrefixConfig.exclude,
266
+ }
267
+ : undefined,
268
+ };
269
+ this.provideSharedModule(compilation, resolvedProvideMap, modulePathAfterNodeModules, configForSpecificModule, resource, resourceResolveData);
270
+ resolveData.cacheable = false;
271
+ break;
272
+ }
273
+ }
274
+ }
186
275
  }
187
276
  }
188
277
  return module;
@@ -192,7 +281,87 @@ class ProvideSharedPlugin {
192
281
  const resolvedProvideMap = compilationData.get(compilation);
193
282
  if (!resolvedProvideMap)
194
283
  return;
195
- await Promise.all(Array.from(resolvedProvideMap, ([resourceKey, { config, version, resource }]) => {
284
+ // Filter out modules that don't pass include/exclude conditions
285
+ const filteredEntries = Array.from(resolvedProvideMap).filter(([resourceKey, { config, version, resource }]) => {
286
+ // Apply the same filtering logic as in provideSharedModule
287
+ const actualResource = resource || resourceKey;
288
+ // Check include conditions
289
+ if (config.include) {
290
+ let versionIncludeFailed = false;
291
+ if (typeof config.include.version === 'string') {
292
+ if (typeof version === 'string' && version) {
293
+ if (!satisfy(parseRange(config.include.version), version)) {
294
+ versionIncludeFailed = true;
295
+ }
296
+ }
297
+ else {
298
+ versionIncludeFailed = true;
299
+ }
300
+ }
301
+ let requestIncludeFailed = false;
302
+ if (config.include.request) {
303
+ const includeRequestValue = config.include.request;
304
+ // For prefix matches, we need to check the remainder after the prefix
305
+ let testString = actualResource;
306
+ // If this is a prefix match (indicated by _originalPrefix being present)
307
+ // then we should test against the remainder
308
+ if (config._originalPrefix &&
309
+ actualResource.startsWith(config._originalPrefix)) {
310
+ const remainder = actualResource.slice(config._originalPrefix.length);
311
+ testString = remainder;
312
+ }
313
+ const requestActuallyMatches = includeRequestValue instanceof RegExp
314
+ ? includeRequestValue.test(testString)
315
+ : testString === includeRequestValue;
316
+ if (!requestActuallyMatches) {
317
+ requestIncludeFailed = true;
318
+ }
319
+ }
320
+ // Skip if any specified include condition failed
321
+ const shouldSkipVersion = typeof config.include.version === 'string' &&
322
+ versionIncludeFailed;
323
+ const shouldSkipRequest = config.include.request && requestIncludeFailed;
324
+ if (shouldSkipVersion || shouldSkipRequest) {
325
+ return false;
326
+ }
327
+ }
328
+ // Check exclude conditions
329
+ if (config.exclude) {
330
+ let versionExcludeMatches = false;
331
+ if (typeof config.exclude.version === 'string' &&
332
+ typeof version === 'string' &&
333
+ version) {
334
+ if (satisfy(parseRange(config.exclude.version), version)) {
335
+ versionExcludeMatches = true;
336
+ }
337
+ }
338
+ let requestExcludeMatches = false;
339
+ if (config.exclude.request) {
340
+ const excludeRequestValue = config.exclude.request;
341
+ // For prefix matches, we need to check the remainder after the prefix
342
+ let testString = actualResource;
343
+ // If this is a prefix match (indicated by _originalPrefix being present)
344
+ // then we should test against the remainder
345
+ if (config._originalPrefix &&
346
+ actualResource.startsWith(config._originalPrefix)) {
347
+ const remainder = actualResource.slice(config._originalPrefix.length);
348
+ testString = remainder;
349
+ }
350
+ const requestActuallyMatchesExclude = excludeRequestValue instanceof RegExp
351
+ ? excludeRequestValue.test(testString)
352
+ : testString === excludeRequestValue;
353
+ if (requestActuallyMatchesExclude) {
354
+ requestExcludeMatches = true;
355
+ }
356
+ }
357
+ // Skip if any specified exclude condition matched
358
+ if (versionExcludeMatches || requestExcludeMatches) {
359
+ return false;
360
+ }
361
+ }
362
+ return true;
363
+ });
364
+ await Promise.all(filteredEntries.map(([resourceKey, { config, version, resource }]) => {
196
365
  return new Promise((resolve, reject) => {
197
366
  compilation.addInclude(compiler.context, new ProvideSharedDependency_1.default(config.shareScope, config.shareKey, version || false, resource || resourceKey, config.eager, config.requiredVersion, config.strictVersion, config.singleton, config.layer), {
198
367
  name: undefined,
@@ -210,6 +379,175 @@ class ProvideSharedPlugin {
210
379
  compilation.dependencyFactories.set(ProvideSharedDependency_1.default, new ProvideSharedModuleFactory_1.default());
211
380
  });
212
381
  }
382
+ provideSharedModule(compilation, resolvedProvideMap, key, config, resource, resourceResolveData) {
383
+ let version = config.version;
384
+ if (version === undefined) {
385
+ let details = '';
386
+ if (!resourceResolveData) {
387
+ details = `No resolve data provided from resolver.`;
388
+ }
389
+ else {
390
+ const descriptionFileData = resourceResolveData.descriptionFileData;
391
+ if (!descriptionFileData) {
392
+ details =
393
+ 'No description file (usually package.json) found. Add description file with name and version, or manually specify version in shared config.';
394
+ }
395
+ else if (!descriptionFileData.version) {
396
+ // Try to get version from parent package.json dependencies (PR7 enhanced feature)
397
+ if (resourceResolveData.descriptionFilePath) {
398
+ try {
399
+ // fs is now imported at the top of the file
400
+ const path = require('path');
401
+ const fs = require('fs');
402
+ const parentPkgPath = path.resolve(path.dirname(resourceResolveData.descriptionFilePath), '..', 'package.json');
403
+ if (fs.existsSync(parentPkgPath)) {
404
+ const parentPkg = JSON.parse(fs.readFileSync(parentPkgPath, 'utf8'));
405
+ const parentVersion = (0, utils_2.getRequiredVersionFromDescriptionFile)(parentPkg, key);
406
+ if (parentVersion) {
407
+ version = parentVersion;
408
+ details = `Using version from parent package.json dependencies: ${version}`;
409
+ }
410
+ else {
411
+ details = `No version in description file (usually package.json). Add version to description file ${resourceResolveData.descriptionFilePath}, or manually specify version in shared config.`;
412
+ }
413
+ }
414
+ else {
415
+ details = `No version in description file (usually package.json). Add version to description file ${resourceResolveData.descriptionFilePath}, or manually specify version in shared config.`;
416
+ }
417
+ }
418
+ catch (e) {
419
+ details = `No version in description file (usually package.json). Add version to description file ${resourceResolveData.descriptionFilePath}, or manually specify version in shared config.`;
420
+ }
421
+ }
422
+ else {
423
+ details = `No version in description file (usually package.json). Add version to description file ${resourceResolveData.descriptionFilePath}, or manually specify version in shared config.`;
424
+ }
425
+ }
426
+ else {
427
+ version = descriptionFileData.version;
428
+ }
429
+ }
430
+ if (!version) {
431
+ const error = new WebpackError(`No version specified and unable to automatically determine one. ${details}`);
432
+ error.file = `shared module ${key} -> ${resource}`;
433
+ compilation.warnings.push(error);
434
+ }
435
+ }
436
+ // Check include/exclude conditions
437
+ if (config.include) {
438
+ let versionIncludeFailed = false;
439
+ if (typeof config.include.version === 'string') {
440
+ if (typeof version === 'string' && version) {
441
+ if (!satisfy(parseRange(config.include.version), version)) {
442
+ versionIncludeFailed = true;
443
+ }
444
+ }
445
+ else {
446
+ versionIncludeFailed = true;
447
+ }
448
+ }
449
+ let requestIncludeFailed = false;
450
+ if (config.include.request) {
451
+ const includeRequestValue = config.include.request;
452
+ const requestActuallyMatches = includeRequestValue instanceof RegExp
453
+ ? includeRequestValue.test(resource)
454
+ : resource === includeRequestValue;
455
+ if (!requestActuallyMatches) {
456
+ requestIncludeFailed = true;
457
+ }
458
+ }
459
+ // Skip if any specified include condition failed
460
+ const shouldSkipVersion = typeof config.include.version === 'string' && versionIncludeFailed;
461
+ const shouldSkipRequest = config.include.request && requestIncludeFailed;
462
+ if (shouldSkipVersion || shouldSkipRequest) {
463
+ // Generate warning for better debugging (combining both approaches)
464
+ if (shouldSkipVersion) {
465
+ const error = new WebpackError(`Provided module "${key}" version "${version}" does not satisfy include filter "${config.include.version}"`);
466
+ error.file = `shared module ${key} -> ${resource}`;
467
+ compilation.warnings.push(error);
468
+ }
469
+ return;
470
+ }
471
+ // Validate singleton usage when using include.version
472
+ if (config.include.version && config.singleton) {
473
+ (0, utils_2.addSingletonFilterWarning)(compilation, config.shareKey || key, 'include', 'version', config.include.version, key, // moduleRequest
474
+ resource);
475
+ }
476
+ }
477
+ if (config.exclude) {
478
+ let versionExcludeMatches = false;
479
+ if (typeof config.exclude.version === 'string' &&
480
+ typeof version === 'string' &&
481
+ version) {
482
+ if (satisfy(parseRange(config.exclude.version), version)) {
483
+ versionExcludeMatches = true;
484
+ }
485
+ }
486
+ let requestExcludeMatches = false;
487
+ if (config.exclude.request) {
488
+ const excludeRequestValue = config.exclude.request;
489
+ const requestActuallyMatchesExclude = excludeRequestValue instanceof RegExp
490
+ ? excludeRequestValue.test(resource)
491
+ : resource === excludeRequestValue;
492
+ if (requestActuallyMatchesExclude) {
493
+ requestExcludeMatches = true;
494
+ }
495
+ }
496
+ // Skip if any specified exclude condition matched
497
+ if (versionExcludeMatches || requestExcludeMatches) {
498
+ // Generate warning for better debugging (combining both approaches)
499
+ if (versionExcludeMatches) {
500
+ const error = new WebpackError(`Provided module "${key}" version "${version}" matches exclude filter "${config.exclude.version}"`);
501
+ error.file = `shared module ${key} -> ${resource}`;
502
+ compilation.warnings.push(error);
503
+ }
504
+ return;
505
+ }
506
+ // Validate singleton usage when using exclude.version
507
+ if (config.exclude.version && config.singleton) {
508
+ (0, utils_2.addSingletonFilterWarning)(compilation, config.shareKey || key, 'exclude', 'version', config.exclude.version, key, // moduleRequest
509
+ resource);
510
+ }
511
+ }
512
+ const lookupKey = (0, utils_2.createLookupKeyForSharing)(resource, config.layer);
513
+ resolvedProvideMap.set(lookupKey, {
514
+ config,
515
+ version,
516
+ resource,
517
+ });
518
+ }
519
+ shouldProvideSharedModule(config) {
520
+ // For static (relative/absolute path) modules, we can only check version filters
521
+ // if the version is explicitly provided in the config
522
+ if (!config.version) {
523
+ // If no version is provided and there are version filters,
524
+ // we'll defer to runtime filtering
525
+ return true;
526
+ }
527
+ const version = config.version;
528
+ if (typeof version !== 'string') {
529
+ return true;
530
+ }
531
+ // Check include version filter
532
+ if (config.include?.version) {
533
+ const includeVersion = config.include.version;
534
+ if (typeof includeVersion === 'string') {
535
+ if (!satisfy(parseRange(includeVersion), version)) {
536
+ return false; // Skip providing this module
537
+ }
538
+ }
539
+ }
540
+ // Check exclude version filter
541
+ if (config.exclude?.version) {
542
+ const excludeVersion = config.exclude.version;
543
+ if (typeof excludeVersion === 'string') {
544
+ if (satisfy(parseRange(excludeVersion), version)) {
545
+ return false; // Skip providing this module
546
+ }
547
+ }
548
+ }
549
+ return true; // All filters pass
550
+ }
213
551
  }
214
552
  exports.default = ProvideSharedPlugin;
215
553
  //# sourceMappingURL=ProvideSharedPlugin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProvideSharedPlugin.js","sourceRoot":"","sources":["../../../../src/lib/sharing/ProvideSharedPlugin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ProvideSharedPlugin.js","sourceRoot":"","sources":["../../../../src/lib/sharing/ProvideSharedPlugin.ts"],"names":[],"mappings":"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"}