| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 697908e commit 1057a4c
3 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -43,6 +43,7 @@ const { kMaxLength } = internalBinding('buffer'); | |||
| 43 | 43 | const MainContextError = Error; | |
| 44 | 44 | const ErrorToString = Error.prototype.toString; | |
| 45 | 45 | const overrideStackTrace = new WeakMap(); | |
| 46 | + const kNoOverride = Symbol('kNoOverride'); | ||
| 46 | 47 | const prepareStackTrace = (globalThis, error, trace) => { | |
| 47 | 48 | // API for node internals to override error stack formatting | |
| 48 | 49 | // without interfering with userland code. | |
@@ -52,6 +53,23 @@ const prepareStackTrace = (globalThis, error, trace) => { | |||
| 52 | 53 | return f(error, trace); | |
| 53 | 54 | } | |
| 54 | 55 | ||
| 56 | + const globalOverride = | ||
| 57 | + maybeOverridePrepareStackTrace(globalThis, error, trace); | ||
| 58 | + if (globalOverride !== kNoOverride) return globalOverride; | ||
| 59 | + | ||
| 60 | + // Normal error formatting: | ||
| 61 | + // | ||
| 62 | + // Error: Message | ||
| 63 | + // at function (file) | ||
| 64 | + // at file | ||
| 65 | + const errorString = ErrorToString.call(error); | ||
| 66 | + if (trace.length === 0) { | ||
| 67 | + return errorString; | ||
| 68 | + } | ||
| 69 | + return `${errorString}\n at ${trace.join('\n at ')}`; | ||
| 70 | + }; | ||
| 71 | + | ||
| 72 | + const maybeOverridePrepareStackTrace = (globalThis, error, trace) => { | ||
| 55 | 73 | // Polyfill of V8's Error.prepareStackTrace API. | |
| 56 | 74 | // https://crbug.com/v8/7848 | |
| 57 | 75 | // `globalThis` is the global that contains the constructor which | |
@@ -66,19 +84,9 @@ const prepareStackTrace = (globalThis, error, trace) => { | |||
| 66 | 84 | return MainContextError.prepareStackTrace(error, trace); | |
| 67 | 85 | } | |
| 68 | 86 | ||
| 69 | - // Normal error formatting: | ||
| 70 | - // | ||
| 71 | - // Error: Message | ||
| 72 | - // at function (file) | ||
| 73 | - // at file | ||
| 74 | - const errorString = ErrorToString.call(error); | ||
| 75 | - if (trace.length === 0) { | ||
| 76 | - return errorString; | ||
| 77 | - } | ||
| 78 | - return `${errorString}\n at ${trace.join('\n at ')}`; | ||
| 87 | + return kNoOverride; | ||
| 79 | 88 | }; | |
| 80 | 89 | ||
| 81 | - | ||
| 82 | 90 | let excludedStackFn; | |
| 83 | 91 | ||
| 84 | 92 | // Lazily loaded | |
@@ -691,7 +699,9 @@ module.exports = { | |||
| 691 | 699 | SystemError, | |
| 692 | 700 | // This is exported only to facilitate testing. | |
| 693 | 701 | E, | |
| 702 | + kNoOverride, | ||
| 694 | 703 | prepareStackTrace, | |
| 704 | + maybeOverridePrepareStackTrace, | ||
| 695 | 705 | overrideStackTrace, | |
| 696 | 706 | kEnhanceStackBeforeInspector, | |
| 697 | 707 | 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