Skip to content

Commit 9aaee33

Browse files
Properly populate cached js filename and fix misaligned columns (#528)
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
1 parent a3aef08 commit 9aaee33

File tree

3 files changed

+40
-4
lines changed

3 files changed

+40
-4
lines changed

src/index.js

+7-4
Original file line numberDiff line numberDiff line change
@@ -394,13 +394,16 @@ module.exports = (
394394
assets[filename + '.map'] = { source: JSON.stringify(map), permissions: defaultPermissions };
395395
map = undefined;
396396
}
397+
const columnOffset = -'(function (exports, require, module, __filename, __dirname) { '.length;
397398
code =
398399
`const { readFileSync, writeFileSync } = require('fs'), { Script } = require('vm'), { wrap } = require('module');\n` +
399-
`const source = readFileSync(__dirname + '/${filename}.cache${ext}', 'utf-8');\n` +
400-
`const cachedData = !process.pkg && require('process').platform !== 'win32' && readFileSync(__dirname + '/${filename}.cache');\n` +
401-
`const script = new Script(wrap(source), cachedData ? { cachedData } : {});\n` +
400+
`const basename = __dirname + '/${filename}';\n` +
401+
`const source = readFileSync(basename + '.cache${ext}', 'utf-8');\n` +
402+
`const cachedData = !process.pkg && require('process').platform !== 'win32' && readFileSync(basename + '.cache');\n` +
403+
`const scriptOpts = { filename: basename + '.cache${ext}', columnOffset: ${columnOffset} }\n` +
404+
`const script = new Script(wrap(source), cachedData ? Object.assign({ cachedData }, scriptOpts) : scriptOpts);\n` +
402405
`(script.runInThisContext())(exports, require, module, __filename, __dirname);\n` +
403-
`if (cachedData) process.on('exit', () => { try { writeFileSync(__dirname + '/${filename}.cache', script.createCachedData()); } catch(e) {} });\n`;
406+
`if (cachedData) process.on('exit', () => { try { writeFileSync(basename + '.cache', script.createCachedData()); } catch(e) {} });\n`;
404407
}
405408

406409
if (sourceMap && sourceMapRegister) {

test/cli.js

+4
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@
1313
args: ["run", "--v8-cache", "test/integration/test.ts"],
1414
expect: { code: 0 }
1515
},
16+
{
17+
args: ["run", "--v8-cache", "test/integration/stack-trace.js"],
18+
expect: { code: 0 }
19+
},
1620
{
1721
args: ["run", "test/fixtures/error.js"],
1822
expect: { code: 1 }

test/integration/stack-trace.js

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
const assert = require('assert');
2+
const childProcess = require('child_process');
3+
const path = require('path');
4+
5+
(function main() {
6+
if (process.env.CHILD !== 'stack-trace') {
7+
const cp = childProcess.fork(__filename, [], {
8+
stdio: 'pipe',
9+
env: Object.assign({}, process.env, {
10+
CHILD: 'stack-trace',
11+
})
12+
});
13+
let stdoutBuffers = []
14+
cp.stdout.on('data', data => stdoutBuffers.push(data));
15+
16+
cp.on('exit', (code) => {
17+
const stdout = Buffer.concat(stdoutBuffers).toString('utf8')
18+
if (code !== 0) {
19+
process.stderr.write(stdout);
20+
return process.exit(1);
21+
}
22+
assert(stdout.match(/evalmachine.<anonymous>/) == null);
23+
assert(stdout.match(path.basename(__filename)) != null);
24+
});
25+
return;
26+
}
27+
28+
console.log(new Error('foo'));
29+
})();

0 commit comments

Comments
 (0)