Skip to content

Commit 9b07ec8

Browse files
fix: update tests for provide shared
1 parent e239b9b commit 9b07ec8

File tree

6 files changed

+1055
-646
lines changed

6 files changed

+1055
-646
lines changed

packages/enhanced/src/lib/sharing/ProvideSharedPlugin.ts

Lines changed: 98 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -204,41 +204,46 @@ class ProvideSharedPlugin {
204204
}
205205

206206
// Process normal prefix matches
207-
for (const [prefix, config] of prefixMatchProvides) {
208-
const lookup = config.request || prefix;
209-
if (request.startsWith(lookup) && resource) {
210-
const remainder = request.slice(lookup.length);
207+
for (const [prefixKey, originalPrefixConfig] of prefixMatchProvides) {
208+
const lookupPrefix = originalPrefixConfig.request || prefixKey;
209+
210+
if (request.startsWith(lookupPrefix) && resource) {
211+
const remainder = request.slice(lookupPrefix.length);
211212
if (
212-
config.include &&
213-
config.include.request &&
214-
!(config.include.request instanceof RegExp
215-
? config.include.request.test(remainder)
216-
: remainder === config.include.request)
213+
originalPrefixConfig.include &&
214+
originalPrefixConfig.include.request &&
215+
!(originalPrefixConfig.include.request instanceof RegExp
216+
? originalPrefixConfig.include.request.test(remainder)
217+
: remainder === originalPrefixConfig.include.request)
217218
) {
218-
// console.log(`[ProvideSharedPlugin-DEBUG] Include filter passed for request: '${request}'`);
219219
continue; // Skip if include doesn't match
220220
}
221221

222-
// Then check exclude if it exists - skip if request matches exclude pattern
223222
if (
224-
config.exclude &&
225-
config.exclude.request &&
226-
(config.exclude.request instanceof RegExp
227-
? config.exclude.request.test(remainder)
228-
: remainder === config.exclude.request)
223+
originalPrefixConfig.exclude &&
224+
originalPrefixConfig.exclude.request &&
225+
(originalPrefixConfig.exclude.request instanceof RegExp
226+
? originalPrefixConfig.exclude.request.test(remainder)
227+
: remainder === originalPrefixConfig.exclude.request)
229228
) {
230-
// console.log(`[ProvideSharedPlugin-DEBUG] Exclude filter passed for request: '${request}'`);
231229
continue; // Skip if exclude matches
232230
}
233231

232+
const finalShareKey = originalPrefixConfig.shareKey + remainder;
233+
const configForSpecificModule: ProvidesConfig = {
234+
...originalPrefixConfig,
235+
shareKey: finalShareKey,
236+
request: request, // Full matched request
237+
// Clear request-based include/exclude as they were for the remainder
238+
include: originalPrefixConfig.include ? { ...originalPrefixConfig.include, request: undefined } : undefined,
239+
exclude: originalPrefixConfig.exclude ? { ...originalPrefixConfig.exclude, request: undefined } : undefined,
240+
};
241+
234242
this.provideSharedModule(
235243
compilation,
236244
resolvedProvideMap,
237-
resource,
238-
{
239-
...config,
240-
shareKey: config.shareKey + remainder,
241-
},
245+
request, // key for error reporting
246+
configForSpecificModule,
242247
resource,
243248
resourceResolveData,
244249
);
@@ -280,30 +285,30 @@ class ProvideSharedPlugin {
280285
}
281286

282287
// Also check for prefix matches with the module path after node_modules
283-
for (const [prefix, config] of prefixMatchProvides) {
284-
const lookup = config.request || prefix;
285-
if (modulePathAfterNodeModules.startsWith(lookup)) {
286-
const remainder = modulePathAfterNodeModules.slice(
287-
lookup.length,
288+
for (const [prefixKeyPM, originalPrefixConfigPM] of prefixMatchProvides) {
289+
const lookupPM = originalPrefixConfigPM.request || prefixKeyPM;
290+
if (modulePathAfterNodeModules.startsWith(lookupPM)) {
291+
const remainderPM = modulePathAfterNodeModules.slice(
292+
lookupPM.length,
288293
);
289294

290-
// Apply include/exclude filters
295+
// Apply include/exclude filters based on remainderPM
291296
if (
292-
config.include &&
293-
config.include.request &&
294-
!(config.include.request instanceof RegExp
295-
? config.include.request.test(remainder)
296-
: remainder === config.include.request)
297+
originalPrefixConfigPM.include &&
298+
originalPrefixConfigPM.include.request &&
299+
!(originalPrefixConfigPM.include.request instanceof RegExp
300+
? originalPrefixConfigPM.include.request.test(remainderPM)
301+
: remainderPM === originalPrefixConfigPM.include.request)
297302
) {
298303
continue; // Skip if include doesn't match
299304
}
300305

301306
if (
302-
config.exclude &&
303-
config.exclude.request &&
304-
(config.exclude.request instanceof RegExp
305-
? config.exclude.request.test(remainder)
306-
: remainder === config.exclude.request)
307+
originalPrefixConfigPM.exclude &&
308+
originalPrefixConfigPM.exclude.request &&
309+
(originalPrefixConfigPM.exclude.request instanceof RegExp
310+
? originalPrefixConfigPM.exclude.request.test(remainderPM)
311+
: remainderPM === originalPrefixConfigPM.exclude.request)
307312
) {
308313
continue; // Skip if exclude matches
309314
}
@@ -313,8 +318,8 @@ class ProvideSharedPlugin {
313318
resolvedProvideMap,
314319
modulePathAfterNodeModules,
315320
{
316-
...config,
317-
shareKey: config.shareKey + remainder,
321+
...originalPrefixConfigPM,
322+
shareKey: originalPrefixConfigPM.shareKey + remainderPM,
318323
},
319324
resource,
320325
resourceResolveData,
@@ -419,58 +424,63 @@ class ProvideSharedPlugin {
419424
}
420425
}
421426

422-
// --- Add Include Check ---
423-
// Only include if the determined version satisfies the include.version constraint
424-
if (
425-
config.include &&
426-
typeof config.include.version === 'string' &&
427-
typeof version === 'string' &&
428-
version &&
429-
!satisfy(version, config.include.version)
430-
) {
431-
// Version doesn't satisfy the include range, so skip providing this module version
432-
return;
433-
}
427+
// Check include/exclude conditions
428+
if (config.include) {
429+
let versionIncludeFailed = false;
430+
if (typeof config.include.version === 'string') {
431+
if (typeof version === 'string' && version) {
432+
if (!satisfy(version, config.include.version)) {
433+
versionIncludeFailed = true;
434+
}
435+
} else {
436+
versionIncludeFailed = true;
437+
}
438+
}
434439

435-
// Check if the request matches the include.request pattern
436-
if (
437-
config.include &&
438-
config.include.request &&
439-
!(config.include.request instanceof RegExp
440-
? config.include.request.test(resource)
441-
: resource === config.include.request)
442-
) {
443-
// Request doesn't match the include pattern, so skip providing this module
444-
return;
445-
}
446-
// --- End Include Check ---
447-
448-
// --- Add Exclude Check ---
449-
// Check if the determined version should be excluded based on exclude.version
450-
if (
451-
config.exclude &&
452-
typeof config.exclude.version === 'string' &&
453-
typeof version === 'string' &&
454-
version &&
455-
satisfy(version, config.exclude.version)
456-
) {
457-
// Version matches the exclude range, so skip providing this module version
458-
return;
440+
let requestIncludeFailed = false;
441+
if (config.include.request) {
442+
const includeRequestValue = config.include.request;
443+
const requestActuallyMatches = (includeRequestValue instanceof RegExp)
444+
? includeRequestValue.test(resource)
445+
: resource === includeRequestValue;
446+
if (!requestActuallyMatches) {
447+
requestIncludeFailed = true;
448+
}
449+
}
450+
451+
// Skip if any specified include condition failed
452+
const shouldSkipVersion = typeof config.include.version === 'string' && versionIncludeFailed;
453+
const shouldSkipRequest = config.include.request && requestIncludeFailed;
454+
455+
if ( shouldSkipVersion || shouldSkipRequest ) {
456+
return;
457+
}
459458
}
460459

461-
// Check if the request matches the exclude.request pattern
462-
// This check was added in previous steps, ensure it uses 'exclude'
463-
if (
464-
config.exclude &&
465-
config.exclude.request &&
466-
(config.exclude.request instanceof RegExp
467-
? config.exclude.request.test(resource)
468-
: resource === config.exclude.request)
469-
) {
470-
// Request matches the exclude pattern, so skip providing this module
471-
return;
460+
if (config.exclude) {
461+
let versionExcludeMatches = false;
462+
if (typeof config.exclude.version === 'string' && typeof version === 'string' && version) {
463+
if (satisfy(version, config.exclude.version)) {
464+
versionExcludeMatches = true;
465+
}
466+
}
467+
468+
let requestExcludeMatches = false;
469+
if (config.exclude.request) {
470+
const excludeRequestValue = config.exclude.request;
471+
const requestActuallyMatchesExclude = (excludeRequestValue instanceof RegExp)
472+
? excludeRequestValue.test(resource)
473+
: resource === excludeRequestValue;
474+
if (requestActuallyMatchesExclude) {
475+
requestExcludeMatches = true;
476+
}
477+
}
478+
479+
// Skip if any specified exclude condition matched
480+
if (versionExcludeMatches || requestExcludeMatches) {
481+
return;
482+
}
472483
}
473-
// --- End Exclude Check ---
474484

475485
const lookupKey = createLookupKey(resource, config);
476486
resolvedProvideMap.set(lookupKey, {

packages/enhanced/test/compiler-unit/sharing/ConsumeSharedPlugin.layers.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,11 +58,11 @@ describe('ConsumeSharedPlugin Layers', () => {
5858
// Create source files for different layers
5959
fs.writeFileSync(
6060
path.join(srcDir, 'module.client.js'),
61-
'import React from "react"; console.log("Client React:", React.version);',
61+
'import React from "react";',
6262
);
6363
fs.writeFileSync(
6464
path.join(srcDir, 'module.server.js'),
65-
'import React from "react"; console.log("Server React:", React.version);',
65+
'import React from "react";',
6666
);
6767

6868
// Base package.json for the test directory

0 commit comments

Comments
 (0)