@@ -77,7 +77,7 @@ var sharedData = initializeSharedData({
77
77
errorPrepareStackTraceHook : undefined ,
78
78
/** @type {HookState } */
79
79
processEmitHook : undefined ,
80
- /** @type {HookState } */
80
+ /** @type {HookState & { onConflictingLibraryRedirectArr: Array<(request: string, parent: any, isMain: boolean, redirectedRequest: string) => void> } } */
81
81
moduleResolveFilenameHook : undefined ,
82
82
83
83
// If true, the caches are reset before a stack trace formatting operation
@@ -641,25 +641,36 @@ exports.install = function(options) {
641
641
// Redirect subsequent imports of "source-map-support"
642
642
// to this package
643
643
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 ) ;
661
670
}
662
- return originalValue . call ( this , request , parent , isMain , options ) ;
671
+ }
672
+ if ( onConflictingLibraryRedirect ) {
673
+ sharedData . moduleResolveFilenameHook . onConflictingLibraryRedirectArr . push ( onConflictingLibraryRedirect ) ;
663
674
}
664
675
}
665
676
0 commit comments