module: add sourceURL magic comment hinting generated source

Source map is not necessary in strip-only mode. However, to map the
source file in debuggers to the original TypeScript source, add a
sourceURL magic comment to hint that it is a generated source.

PR-URL: https://github.com/nodejs/node/pull/54402
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Kohei Ueno <kohei.ueno119@gmail.com>
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
This commit is contained in:
Chengzhong Wu 2024-08-20 20:45:17 +01:00 committed by GitHub
parent 68e94c1e75
commit 5376e6906e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 55 additions and 1 deletions

View File

@ -371,7 +371,10 @@ function stripTypeScriptTypes(source, filename) {
const base64SourceMap = Buffer.from(map).toString('base64');
return `${code}\n\n//# sourceMappingURL=data:application/json;base64,${base64SourceMap}`;
}
return code;
// Source map is not necessary in strip-only mode. However, to map the source
// file in debuggers to the original TypeScript source, add a sourceURL magic
// comment to hint that it is a generated source.
return `${code}\n\n//# sourceURL=${filename}`;
}
function isUnderNodeModules(filename) {

View File

@ -271,6 +271,14 @@ class InspectorSession {
`break on ${url}:${line}`);
}
waitForPauseOnStart() {
return this
.waitForNotification(
(notification) =>
notification.method === 'Debugger.paused' && notification.params.reason === 'Break on start',
'break on start');
}
pausedDetails() {
return this._pausedDetails;
}

View File

@ -0,0 +1,43 @@
'use strict';
const common = require('../common');
common.skipIfInspectorDisabled();
if (!process.config.variables.node_use_amaro) common.skip('Requires Amaro');
const { NodeInstance } = require('../common/inspector-helper.js');
const fixtures = require('../common/fixtures');
const assert = require('assert');
const scriptPath = fixtures.path('typescript/ts/test-typescript.ts');
async function runTest() {
const child = new NodeInstance(
['--inspect-brk=0', '--experimental-strip-types'],
undefined,
scriptPath);
const session = await child.connectInspectorSession();
const commands = [
{ 'method': 'Debugger.enable' },
{ 'method': 'Runtime.enable' },
{ 'method': 'Runtime.runIfWaitingForDebugger' },
];
await session.send(commands);
const scriptParsed = await session.waitForNotification((notification) => {
if (notification.method !== 'Debugger.scriptParsed') return false;
return notification.params.url === scriptPath;
});
// Verify that the script has a sourceURL, hinting that it is a generated source.
assert(scriptParsed.params.hasSourceURL);
await session.waitForPauseOnStart();
await session.runToCompletion();
assert.strictEqual((await child.expectShutdown()).exitCode, 0);
}
runTest().then(common.mustCall());