| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent cb89fbc commit 2986982
3 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -20,6 +20,7 @@ const { kMaxLength } = internalBinding('buffer'); | |||
| 20 | 20 | const MainContextError = Error; | |
| 21 | 21 | const ErrorToString = Error.prototype.toString; | |
| 22 | 22 | const overrideStackTrace = new WeakMap(); | |
| 23 | + const kNoOverride = Symbol('kNoOverride'); | ||
| 23 | 24 | const prepareStackTrace = (globalThis, error, trace) => { | |
| 24 | 25 | // API for node internals to override error stack formatting | |
| 25 | 26 | // without interfering with userland code. | |
@@ -29,6 +30,23 @@ const prepareStackTrace = (globalThis, error, trace) => { | |||
| 29 | 30 | return f(error, trace); | |
| 30 | 31 | } | |
| 31 | 32 | ||
| 33 | + const globalOverride = | ||
| 34 | + maybeOverridePrepareStackTrace(globalThis, error, trace); | ||
| 35 | + if (globalOverride !== kNoOverride) return globalOverride; | ||
| 36 | + | ||
| 37 | + // Normal error formatting: | ||
| 38 | + // | ||
| 39 | + // Error: Message | ||
| 40 | + // at function (file) | ||
| 41 | + // at file | ||
| 42 | + const errorString = ErrorToString.call(error); | ||
| 43 | + if (trace.length === 0) { | ||
| 44 | + return errorString; | ||
| 45 | + } | ||
| 46 | + return `${errorString}\n at ${trace.join('\n at ')}`; | ||
| 47 | + }; | ||
| 48 | + | ||
| 49 | + const maybeOverridePrepareStackTrace = (globalThis, error, trace) => { | ||
| 32 | 50 | // Polyfill of V8's Error.prepareStackTrace API. | |
| 33 | 51 | // https://crbug.com/v8/7848 | |
| 34 | 52 | // `globalThis` is the global that contains the constructor which | |
@@ -43,19 +61,9 @@ const prepareStackTrace = (globalThis, error, trace) => { | |||
| 43 | 61 | return MainContextError.prepareStackTrace(error, trace); | |
| 44 | 62 | } | |
| 45 | 63 | ||
| 46 | - // Normal error formatting: | ||
| 47 | - // | ||
| 48 | - // Error: Message | ||
| 49 | - // at function (file) | ||
| 50 | - // at file | ||
| 51 | - const errorString = ErrorToString.call(error); | ||
| 52 | - if (trace.length === 0) { | ||
| 53 | - return errorString; | ||
| 54 | - } | ||
| 55 | - return `${errorString}\n at ${trace.join('\n at ')}`; | ||
| 64 | + return kNoOverride; | ||
| 56 | 65 | }; | |
| 57 | 66 | ||
| 58 | - | ||
| 59 | 67 | let excludedStackFn; | |
| 60 | 68 | ||
| 61 | 69 | // Lazily loaded | |
@@ -683,7 +691,9 @@ module.exports = { | |||
| 683 | 691 | SystemError, | |
| 684 | 692 | // This is exported only to facilitate testing. | |
| 685 | 693 | E, | |
| 694 | + kNoOverride, | ||
| 686 | 695 | prepareStackTrace, | |
| 696 | + maybeOverridePrepareStackTrace, | ||
| 687 | 697 | overrideStackTrace, | |
| 688 | 698 | kEnhanceStackBeforeInspector, | |
| 689 | 699 | fatalExceptionStackEnhancers | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -2,7 +2,11 @@ | |||
| 2 | 2 | ||
| 3 | 3 | const debug = require('internal/util/debuglog').debuglog('source_map'); | |
| 4 | 4 | const { findSourceMap } = require('internal/source_map/source_map_cache'); | |
| 5 | - const { overrideStackTrace } = require('internal/errors'); | ||
| 5 | + const { | ||
| 6 | + kNoOverride, | ||
| 7 | + overrideStackTrace, | ||
| 8 | + maybeOverridePrepareStackTrace | ||
| 9 | + } = require('internal/errors'); | ||
| 6 | 10 | ||
| 7 | 11 | // Create a prettified stacktrace, inserting context from source maps | |
| 8 | 12 | // if possible. | |
@@ -17,6 +21,10 @@ const prepareStackTrace = (globalThis, error, trace) => { | |||
| 17 | 21 | return f(error, trace); | |
| 18 | 22 | } | |
| 19 | 23 | ||
| 24 | + const globalOverride = | ||
| 25 | + maybeOverridePrepareStackTrace(globalThis, error, trace); | ||
| 26 | + if (globalOverride !== kNoOverride) return globalOverride; | ||
| 27 | + | ||
| 20 | 28 | const { SourceMap } = require('internal/source_map/source_map'); | |
| 21 | 29 | const errorString = ErrorToString.call(error); | |
| 22 | 30 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -0,0 +1,19 @@ | |||
| 1 | + // Flags: --enable-source-maps | ||
| 2 | + 'use strict'; | ||
| 3 | + | ||
| 4 | + require('../common'); | ||
| 5 | + const assert = require('assert'); | ||
| 6 | + | ||
| 7 | + // Error.prepareStackTrace() can be overridden with source maps enabled. | ||
| 8 | + { | ||
| 9 | + let prepareCalled = false; | ||
| 10 | + Error.prepareStackTrace = (_error, trace) => { | ||
| 11 | + prepareCalled = true; | ||
| 12 | + }; | ||
| 13 | + try { | ||
| 14 | + throw new Error('foo'); | ||
| 15 | + } catch (err) { | ||
| 16 | + err.stack; | ||
| 17 | + } | ||
| 18 | + assert(prepareCalled); | ||
| 19 | + } | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments