Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit ee6412a

Browse filesBrowse 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
Copy full SHA for ee6412a

File tree

Expand file treeCollapse file tree

7 files changed

+53
-7
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

7 files changed

+53
-7
lines changed
Open diff view settings
Collapse file

‎lib/internal/source_map/prepare_stack_trace.js‎

Copy file name to clipboardExpand all lines: lib/internal/source_map/prepare_stack_trace.js
+7-6Lines 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-
let exceptionLine = '';
143142
const originalSourcePathNoScheme =
144143
StringPrototypeStartsWith(originalSourcePath, 'file://') ?
145144
fileURLToPath(originalSourcePath) : originalSourcePath;
146145
const source = getOriginalSource(
147146
sourceMap.payload,
148147
originalSourcePath
149148
);
149+
if (typeof source !== 'string') {
150+
return;
151+
}
150152
const lines = RegExpPrototypeSymbolSplit(/\r?\n/, source, originalLine + 1);
151153
const line = lines[originalLine];
152-
if (!line) return exceptionLine;
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+
const exceptionLine =
165169
`${originalSourcePathNoScheme}:${originalLine + 1}\n${line}\n${prefix}^\n\n`;
166170
return exceptionLine;
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
return source;
193194
}
Collapse file

‎src/node_errors.cc‎

Copy file name to clipboardExpand all lines: src/node_errors.cc
+3-1Lines 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
Collapse file

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

Copy file name to clipboardExpand all lines: test/fixtures/source-map/no-source.js
+9Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Collapse file

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

Copy file name to clipboardExpand all lines: test/fixtures/source-map/no-source.js.map
+1Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Collapse file
+10Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
function Throw() {
2+
throw new Error('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"
Collapse file
+6Lines 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');
Collapse file
+17Lines 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 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.