-
-
Notifications
You must be signed in to change notification settings - Fork 35.4k
errors, child_process: migrate to using internal/errors #11300
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
Use of assert must be lazy to allow errors to be used early before the process is completely set up
- Loading branch information
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -6,7 +6,6 @@ | |
| // value statically and permanently identifies the error. While the error | ||
| // message may change, the code should not. | ||
|
|
||
| const assert = require('assert'); | ||
| const kCode = Symbol('code'); | ||
| const messages = new Map(); | ||
|
|
||
|
|
@@ -17,6 +16,13 @@ function lazyUtil() { | |
| return util; | ||
| } | ||
|
|
||
| var assert; | ||
| function lazyAssert() { | ||
| if (!assert) | ||
| assert = require('assert'); | ||
| return assert; | ||
| } | ||
|
|
||
| function makeNodeError(Base) { | ||
| return class NodeError extends Base { | ||
| constructor(key, ...args) { | ||
|
|
@@ -36,6 +42,7 @@ function makeNodeError(Base) { | |
| } | ||
|
|
||
| function message(key, args) { | ||
| const assert = lazyAssert(); | ||
| assert.strictEqual(typeof key, 'string'); | ||
| const util = lazyUtil(); | ||
| const msg = messages.get(key); | ||
|
|
@@ -54,7 +61,6 @@ function message(key, args) { | |
| // Utility function for registering the error codes. Only used here. Exported | ||
| // *only* to allow for testing. | ||
| function E(sym, val) { | ||
| assert(messages.has(sym) === false, `Error symbol: ${sym} was already used.`); | ||
| messages.set(sym, typeof val === 'function' ? val : String(val)); | ||
| } | ||
|
|
||
|
|
@@ -99,6 +105,7 @@ E('ERR_UNKNOWN_BUILTIN_MODULE', (id) => `No such built-in module: ${id}`); | |
| // Add new errors from here... | ||
|
|
||
| function invalidArgType(name, expected, actual) { | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. If I read it correctly, this would print
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
| const assert = lazyAssert(); | ||
| assert(name, 'name is required'); | ||
| var msg = `The "${name}" argument must be ${oneOf(expected, 'type')}`; | ||
| if (arguments.length >= 3) { | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -125,12 +125,6 @@ assert.throws(() => { | |
| message: /^Error for testing 2/ })); | ||
| }, /AssertionError: .+ does not match \S/); | ||
|
|
||
| assert.doesNotThrow(() => errors.E('TEST_ERROR_USED_SYMBOL')); | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. please bundle this change with the same commit that removed the error |
||
| assert.throws( | ||
| () => errors.E('TEST_ERROR_USED_SYMBOL'), | ||
| /^AssertionError: Error symbol: TEST_ERROR_USED_SYMBOL was already used\.$/ | ||
| ); | ||
|
|
||
| // // Test ERR_INVALID_ARG_TYPE | ||
| assert.strictEqual(errors.message('ERR_INVALID_ARG_TYPE', ['a', 'b']), | ||
| 'The "a" argument must be of type b'); | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why did you remove this check? (The test for it is removed in the second commit btw)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Because of issues in the loading order of the
errors.jsmodule relative toassert.json startup. There is a circular dependency that happens that causes theutil.jsused withinassert.jsto fail depending on whenassertis loaded. I could replace this with a simple throw rather than the call to assert if you'd be more comfortable with that.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm fine with removing it. I was just curious. The risk of reusing the same code is low if we keep them together and in alphabetical order.