Skip to content

Commit ee6412a

Browse files
legendecasruyadorno
authored andcommitted
src,lib: print prinstine source when source map source not found
Print unmapped source lines when the source map source is not found. Error stacks should be correctly mapped even when the source is absent. PR-URL: #44052 Refs: #44019 Reviewed-By: Ben Coe <bencoe@gmail.com>
1 parent b252f38 commit ee6412a

7 files changed

Lines changed: 53 additions & 7 deletions

File tree

‎lib/internal/source_map/prepare_stack_trace.js‎

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -139,17 +139,21 @@ function getErrorSource(
139139
originalLine,
140140
originalColumn
141141
){
142-
letexceptionLine='';
143142
constoriginalSourcePathNoScheme=
144143
StringPrototypeStartsWith(originalSourcePath,'file://') ?
145144
fileURLToPath(originalSourcePath) : originalSourcePath;
146145
constsource=getOriginalSource(
147146
sourceMap.payload,
148147
originalSourcePath
149148
);
149+
if(typeofsource!=='string'){
150+
return;
151+
}
150152
constlines=RegExpPrototypeSymbolSplit(/\r?\n/,source,originalLine+1);
151153
constline=lines[originalLine];
152-
if(!line)returnexceptionLine;
154+
if(!line){
155+
return;
156+
}
153157

154158
// Display ^ in appropriate position, regardless of whether tabs or
155159
// spaces are used:
@@ -161,7 +165,7 @@ function getErrorSource(
161165
}
162166
prefix=StringPrototypeSlice(prefix,0,-1);// The last character is '^'.
163167

164-
exceptionLine=
168+
constexceptionLine=
165169
`${originalSourcePathNoScheme}:${originalLine+1}\n${line}\n${prefix}^\n\n`;
166170
returnexceptionLine;
167171
}
@@ -184,10 +188,7 @@ function getOriginalSource(payload, originalSourcePath) {
184188
source=readFileSync(originalSourcePathNoScheme,'utf8');
185189
}catch(err){
186190
debug(err);
187-
source='';
188191
}
189-
}else{
190-
source='';
191192
}
192193
returnsource;
193194
}

‎src/node_errors.cc‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,9 @@ static std::string GetErrorSource(Isolate* isolate,
105105
if (has_source_map_url && env != nullptr && env->source_maps_enabled()) {
106106
std::string source = GetSourceMapErrorSource(
107107
isolate, context, message, added_exception_line);
108-
return *added_exception_line ? source : sourceline;
108+
if (*added_exception_line) {
109+
return source;
110+
}
109111
}
110112

111113
// Because of how node modules work, all scripts are wrapped with a

‎test/fixtures/source-map/no-source.js‎

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎test/fixtures/source-map/no-source.js.map‎

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
functionThrow(){
2+
thrownewError('foo');
3+
}
4+
5+
Throw();
6+
7+
// To recreate:
8+
//
9+
// npx tsc --outDir test/fixtures/source-map --sourceMap test/fixtures/source-map/no-source.ts
10+
// rename the "source.[0]" to "file-not-exists.ts"
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
// Flags: --enable-source-maps
2+
3+
'use strict';
4+
require('../common');
5+
6+
require('../fixtures/source-map/no-source.js');
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
*no-source.js:2
2+
throw new Error('foo');
3+
^
4+
5+
Error: foo
6+
at Throw (*file-not-exists.ts:2:9)
7+
at Object.<anonymous> (*file-not-exists.ts:5:1)
8+
at Module._compile (node:internal/modules/cjs/loader:*)
9+
at Module._extensions..js (node:internal/modules/cjs/loader:*)
10+
at Module.load (node:internal/modules/cjs/loader:*)
11+
at Module._load (node:internal/modules/cjs/loader:*)
12+
at Module.require (node:internal/modules/cjs/loader:*)
13+
at require (node:internal/modules/cjs/helpers:*)
14+
at Object.<anonymous> (*source_map_no_source_file.js:6:1)
15+
at Module._compile (node:internal/modules/cjs/loader:*)
16+
17+
Node.js *

0 commit comments

Comments
 (0)