chore: install source map support lazily (#26445)

This way we allow importing from `@playwright/test` without affecting
stack traces.

Fixes #26346.
This commit is contained in:
Dmitry Gozman 2023-08-21 10:54:42 -07:00 committed by GitHub
parent bcc30bc71e
commit 32a309ccb8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 27 additions and 17 deletions

View File

@ -43,23 +43,31 @@ const fileDependencies = new Map<string, Set<string>>();
// Dependencies resolved by the external bundler.
const externalDependencies = new Map<string, Set<string>>();
Error.stackTraceLimit = 200;
let sourceMapSupportInstalled = false;
sourceMapSupport.install({
environment: 'node',
handleUncaughtExceptions: false,
retrieveSourceMap(source) {
if (!sourceMaps.has(source))
return null;
const sourceMapPath = sourceMaps.get(source)!;
if (!fs.existsSync(sourceMapPath))
return null;
return {
map: JSON.parse(fs.readFileSync(sourceMapPath, 'utf-8')),
url: source
};
}
});
export function installSourceMapSupportIfNeeded() {
if (sourceMapSupportInstalled)
return;
sourceMapSupportInstalled = true;
Error.stackTraceLimit = 200;
sourceMapSupport.install({
environment: 'node',
handleUncaughtExceptions: false,
retrieveSourceMap(source) {
if (!sourceMaps.has(source))
return null;
const sourceMapPath = sourceMaps.get(source)!;
if (!fs.existsSync(sourceMapPath))
return null;
return {
map: JSON.parse(fs.readFileSync(sourceMapPath, 'utf-8')),
url: source
};
}
});
}
function _innerAddToCompilationCache(filename: string, options: { codePath: string, sourceMapPath: string, moduleUrl?: string }) {
sourceMaps.set(options.moduleUrl || filename, options.sourceMapPath);

View File

@ -25,7 +25,7 @@ import Module from 'module';
import type { BabelPlugin, BabelTransformFunction } from './babelBundle';
import { createFileMatcher, fileIsModule, resolveImportSpecifierExtension } from '../util';
import type { Matcher } from '../util';
import { getFromCompilationCache, currentFileDepsCollector, belongsToNodeModules } from './compilationCache';
import { getFromCompilationCache, currentFileDepsCollector, belongsToNodeModules, installSourceMapSupportIfNeeded } from './compilationCache';
const version = require('../../package.json').version;
@ -213,6 +213,8 @@ export async function requireOrImport(file: string) {
}
function installTransform(): () => void {
installSourceMapSupportIfNeeded();
let reverted = false;
const originalResolveFilename = (Module as any)._resolveFilename;