Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Several changes:
Allow installers to be notified upon redirection so they can log warnings to users
Allow installers to opt-out of redirection
Support both entrypoints: source-map-support and source-map-support/register
  • Loading branch information
cspotcode committed Oct 4, 2021
commit 44c3bced1e7cfcef1be4131e5eb1500d2e6948bc
9 changes: 9 additions & 0 deletions source-map-support.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,15 @@ export interface Options {
overrideRetrieveSourceMap?: boolean | undefined;
retrieveFile?(path: string): string;
retrieveSourceMap?(source: string): UrlAndMap | null;
/**
* Set false to disable redirection of require / import `source-map-support` to `@cspotcode/source-map-support`
*/
redirectConflictingLibrary?: boolean;
/**
* Callback will be called every time we redirect due to `redirectConflictingLibrary`
* This allows consumers to log helpful warnings if they choose.
*/
onConflictingLibraryRedirect?: (request, parent, isMain, redirectedRequest) => void;
}

export interface Position {
Expand Down
20 changes: 15 additions & 5 deletions source-map-support.js
Original file line number Diff line number Diff line change
Expand Up @@ -560,12 +560,22 @@ exports.install = function(options) {

// Redirect subsequent imports of "source-map-support"
// to this package
const originalResolveFilename = Module._resolveFilename;
Module._resolveFilename = function resolveFilenameProxy(request, parent, isMain, options) {
if (request === 'source-map-support') {
request = require.resolve('@cspotcode/source-map-support');
const {redirectConflictingLibrary = true, onConflictingLibraryRedirect} = options;
if(redirectConflictingLibrary) {
const originalResolveFilename = Module._resolveFilename;
Module._resolveFilename = function resolveFilenameProxy(request, parent, isMain, options) {
// Match all source-map-support entrypoints: source-map-support, source-map-support/register
if (request === 'source-map-support') {
const newRequest = require.resolve('./');
if(onConflictingLibraryRedirect) onConflictingLibraryRedirect(request, parent, isMain, options, newRequest);
request = newRequest;
} else if (request === 'source-map-support/register') {
const newRequest = require.resolve('./register');
if(onConflictingLibraryRedirect) onConflictingLibraryRedirect(request, parent, isMain, options, newRequest);
request = newRequest;
}
return originalResolveFilename.call(this, request, parent, isMain, options);
}
return originalResolveFilename.call(this, request, parent, isMain, options);
}

// Allow sources to be found by methods other than reading the files
Expand Down