diff options
author | John-David Dalton <john.david.dalton@gmail.com> | 2017-10-01 16:14:45 -0700 |
---|---|---|
committer | Rich Trott <rtrott@gmail.com> | 2017-10-04 15:49:36 -0700 |
commit | 42a2a9badb6974e47b98aaee052e9710f34b93e8 (patch) | |
tree | b7b6b05ccb7807e5d4fd4bad7071c96d8a024a9e /lib | |
parent | 6e172beaf0390b037549c8484f4513bb79ccc84e (diff) | |
download | android-node-v8-42a2a9badb6974e47b98aaee052e9710f34b93e8.tar.gz android-node-v8-42a2a9badb6974e47b98aaee052e9710f34b93e8.tar.bz2 android-node-v8-42a2a9badb6974e47b98aaee052e9710f34b93e8.zip |
errors: make `code` and `name` properties settable
For internal errors, make `code` and `name` settable while keeping them
non-own properties by default.
PR-URL: https://github.com/nodejs/node/pull/15694
Fixes: https://github.com/nodejs/node/issues/15658
Reviewed-By: Evan Lucas <evanlucas@me.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com>
Diffstat (limited to 'lib')
-rwxr-xr-x | lib/internal/errors.js | 36 |
1 files changed, 30 insertions, 6 deletions
diff --git a/lib/internal/errors.js b/lib/internal/errors.js index e3c18b48c7..6b9c31a528 100755 --- a/lib/internal/errors.js +++ b/lib/internal/errors.js @@ -11,9 +11,8 @@ const kCode = Symbol('code'); const messages = new Map(); -const { - kMaxLength -} = process.binding('buffer'); +const { kMaxLength } = process.binding('buffer'); +const { defineProperty } = Object; // Lazily loaded var util = null; @@ -22,11 +21,36 @@ function makeNodeError(Base) { return class NodeError extends Base { constructor(key, ...args) { super(message(key, args)); - this[kCode] = this.code = key; - Object.defineProperty(this, 'name', { + defineProperty(this, kCode, { configurable: true, enumerable: false, - value: `${super.name} [${this[kCode]}]`, + value: key, + writable: true + }); + } + + get name() { + return `${super.name} [${this[kCode]}]`; + } + + set name(value) { + defineProperty(this, 'name', { + configurable: true, + enumerable: true, + value, + writable: true + }); + } + + get code() { + return this[kCode]; + } + + set code(value) { + defineProperty(this, 'code', { + configurable: true, + enumerable: true, + value, writable: true }); } |