Skip to content

Commit 226b96a

Browse files
committed
refactor: add onConflictingLibraryRedirect array to notify all install of request redirect
1 parent f5db819 commit 226b96a

File tree

2 files changed

+32
-20
lines changed

2 files changed

+32
-20
lines changed

source-map-support.js

Lines changed: 30 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ var sharedData = initializeSharedData({
7777
errorPrepareStackTraceHook: undefined,
7878
/** @type {HookState} */
7979
processEmitHook: undefined,
80-
/** @type {HookState} */
80+
/** @type {HookState & { onConflictingLibraryRedirectArr: Array<(request: string, parent: any, isMain: boolean, redirectedRequest: string) => void> }} */
8181
moduleResolveFilenameHook: undefined,
8282

8383
// If true, the caches are reset before a stack trace formatting operation
@@ -641,25 +641,36 @@ exports.install = function(options) {
641641
// Redirect subsequent imports of "source-map-support"
642642
// to this package
643643
const {redirectConflictingLibrary = true, onConflictingLibraryRedirect} = options;
644-
if(redirectConflictingLibrary && !sharedData.moduleResolveFilenameHook) {
645-
const originalValue = Module._resolveFilename;
646-
sharedData.moduleResolveFilenameHook = {
647-
enabled: true,
648-
originalValue,
649-
installedValue: undefined
650-
}
651-
Module._resolveFilename = sharedData.moduleResolveFilenameHook.installedValue = function (request, parent, isMain, options) {
652-
// Match all source-map-support entrypoints: source-map-support, source-map-support/register
653-
if (request === 'source-map-support') {
654-
const newRequest = require.resolve('./');
655-
if(onConflictingLibraryRedirect) onConflictingLibraryRedirect(request, parent, isMain, options, newRequest);
656-
request = newRequest;
657-
} else if (request === 'source-map-support/register') {
658-
const newRequest = require.resolve('./register');
659-
if(onConflictingLibraryRedirect) onConflictingLibraryRedirect(request, parent, isMain, options, newRequest);
660-
request = newRequest;
644+
if(redirectConflictingLibrary) {
645+
if (!sharedData.moduleResolveFilenameHook) {
646+
const originalValue = Module._resolveFilename;
647+
sharedData.moduleResolveFilenameHook = {
648+
enabled: true,
649+
originalValue,
650+
installedValue: undefined,
651+
onConflictingLibraryRedirectArr: []
652+
}
653+
Module._resolveFilename = sharedData.moduleResolveFilenameHook.installedValue = function (request, parent, isMain, options) {
654+
// Match all source-map-support entrypoints: source-map-support, source-map-support/register
655+
let requestRedirect;
656+
if (request === 'source-map-support') {
657+
requestRedirect = './';
658+
} else if (request === 'source-map-support/register') {
659+
requestRedirect = './register';
660+
}
661+
662+
if (requestRedirect !== undefined) {
663+
const newRequest = require.resolve(requestRedirect);
664+
for (const cb of sharedData.moduleResolveFilenameHook.onConflictingLibraryRedirectArr) {
665+
cb(request, parent, isMain, options, newRequest);
666+
}
667+
request = newRequest;
668+
}
669+
return originalValue.call(this, request, parent, isMain, options);
661670
}
662-
return originalValue.call(this, request, parent, isMain, options);
671+
}
672+
if (onConflictingLibraryRedirect) {
673+
sharedData.moduleResolveFilenameHook.onConflictingLibraryRedirectArr.push(onConflictingLibraryRedirect);
663674
}
664675
}
665676

test.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -730,10 +730,11 @@ describe('redirects require() of "source-map-support" to this module', function(
730730
assert.strictEqual(onConflictingLibraryRedirectCalls.length, 1);
731731
assert.strictEqual(onConflictingLibraryRedirectCalls2.length, 1);
732732
for(const args of [onConflictingLibraryRedirectCalls[0], onConflictingLibraryRedirectCalls2[0]]) {
733-
const [request, parent, isMain, redirectedRequest] = args;
733+
const [request, parent, isMain, options, redirectedRequest] = args;
734734
assert.strictEqual(request, 'source-map-support');
735735
assert.strictEqual(parent, module);
736736
assert.strictEqual(isMain, false);
737+
assert.strictEqual(options, undefined);
737738
assert.strictEqual(redirectedRequest, require.resolve('.'));
738739
}
739740
});

0 commit comments

Comments
 (0)