feat(testrunner): support sourcemaps (#3459)

This commit is contained in:
Joel Einbinder 2020-08-13 23:17:46 -07:00 committed by GitHub
parent 4dde2882e7
commit f45791dd8b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 27 additions and 2 deletions

View File

@ -78,6 +78,7 @@
"pirates": "^4.0.1",
"pixelmatch": "^4.0.2",
"socksv5": "0.0.6",
"source-map-support": "^0.5.19",
"text-diff": "^1.0.1",
"ts-loader": "^6.1.2",
"typescript": "^3.8.3",

View File

@ -19,8 +19,28 @@ const path = require('path');
const fs = require('fs');
const pirates = require('pirates');
const babel = require('@babel/core');
const version = 0;
const sourceMapSupport = require('source-map-support');
const version = 1;
const cacheDir = path.join(os.tmpdir(), 'playwright-transform-cache');
/** @type {Map<string, string>} */
const sourceMaps = new Map();
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
};
}
});
/**
* @param {string} content
@ -38,6 +58,8 @@ function installTransform() {
return pirates.addHook((code, filename) => {
const cachePath = calculateCachePath(code, filename);
const codePath = cachePath + '.js';
const sourceMapPath = cachePath + '.map';
sourceMaps.set(filename, sourceMapPath);
if (fs.existsSync(codePath))
return fs.readFileSync(codePath, 'utf8');
@ -45,12 +67,14 @@ function installTransform() {
presets: [
['@babel/preset-env', {targets: {node: 'current'}}],
'@babel/preset-typescript'],
sourceMaps: true,
});
if (result.code) {
fs.mkdirSync(path.dirname(cachePath), {recursive: true});
if (result.map)
fs.writeFileSync(sourceMapPath, JSON.stringify(result.map), 'utf8');
fs.writeFileSync(codePath, result.code, 'utf8');
}
// TODO(einbinder) sourcemaps
return result.code;
}, {
exts: ['.ts']