Skip to content
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

worker: rename error code to be more accurate #33872

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
29 changes: 25 additions & 4 deletions doc/api/errors.md
Expand Up @@ -1597,12 +1597,20 @@ strict compliance with the API specification (which in some cases may accept
For APIs that accept options objects, some options might be mandatory. This code
is thrown if a required option is missing.

<a id="ERR_MISSING_MESSAGE_PORT_IN_TRANSFER_LIST"></a>
### `ERR_MISSING_MESSAGE_PORT_IN_TRANSFER_LIST`
<a id="ERR_MISSING_TRANSFERABLE_IN_TRANSFER_LIST"></a>
### `ERR_MISSING_TRANSFERABLE_IN_TRANSFER_LIST`
<!-- YAML
added: REPLACEME
-->

An object that needs to be explicitly listed in the `transferList` argument
was found in the object passed to a `postMessage()` call, but not provided in
the `transferList` for that call. Usually, this is a `MessagePort`.
was found in the object passed to a [`postMessage()`][] call, but not provided
in the `transferList` for that call. Usually, this is a `MessagePort`.

In Node.js versions prior to REPLACEME, the error code being used here was
[`ERR_MISSING_MESSAGE_PORT_IN_TRANSFER_LIST`][]. However, the set of
transferable object types has been expanded to cover more types than
`MessagePort`.

<a id="ERR_MISSING_PASSPHRASE"></a>
### `ERR_MISSING_PASSPHRASE`
Expand Down Expand Up @@ -2323,6 +2331,16 @@ Used when an invalid character is found in an HTTP response status message
-->
A given index was out of the accepted range (e.g. negative offsets).

<a id="ERR_MISSING_MESSAGE_PORT_IN_TRANSFER_LIST"></a>
### `ERR_MISSING_MESSAGE_PORT_IN_TRANSFER_LIST`
<!-- YAML
removed: REPLACEME
-->

This error code was replaced by [`ERR_MISSING_TRANSFERABLE_IN_TRANSFER_LIST`][]
in Node.js REPLACEME, because it is no longer accurate as other types of
transferable objects also exist now.

<a id="ERR_NAPI_CONS_PROTOTYPE_OBJECT"></a>
### `ERR_NAPI_CONS_PROTOTYPE_OBJECT`
<!-- YAML
Expand Down Expand Up @@ -2574,6 +2592,8 @@ such as `process.stdout.on('data')`.
[`--force-fips`]: cli.html#cli_force_fips
[`Class: assert.AssertionError`]: assert.html#assert_class_assert_assertionerror
[`ERR_INVALID_ARG_TYPE`]: #ERR_INVALID_ARG_TYPE
[`ERR_MISSING_MESSAGE_PORT_IN_TRANSFER_LIST`]: #ERR_MISSING_MESSAGE_PORT_IN_TRANSFER_LIST
[`ERR_MISSING_TRANSFERABLE_IN_TRANSFER_LIST`]: #ERR_MISSING_TRANSFERABLE_IN_TRANSFER_LIST
[`EventEmitter`]: events.html#events_class_eventemitter
[`MessagePort`]: worker_threads.html#worker_threads_class_messageport
[`Object.getPrototypeOf`]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getPrototypeOf
Expand Down Expand Up @@ -2606,6 +2626,7 @@ such as `process.stdout.on('data')`.
[`net`]: net.html
[`new URL(input)`]: url.html#url_new_url_input_base
[`new URLSearchParams(iterable)`]: url.html#url_new_urlsearchparams_iterable
[`postMessage()`]: worker_threads.html#worker_threads_port_postmessage_value_transferlist
[`process.on('exit')`]: process.html#Event:-`'exit'`
[`process.send()`]: process.html#process_process_send_message_sendhandle_options_callback
[`process.setUncaughtExceptionCaptureCallback()`]: process.html#process_process_setuncaughtexceptioncapturecallback_fn
Expand Down
4 changes: 2 additions & 2 deletions src/node_errors.h
Expand Up @@ -43,7 +43,7 @@ void OnFatalError(const char* location, const char* message);
V(ERR_MEMORY_ALLOCATION_FAILED, Error) \
V(ERR_MESSAGE_TARGET_CONTEXT_UNAVAILABLE, Error) \
V(ERR_MISSING_ARGS, TypeError) \
V(ERR_MISSING_MESSAGE_PORT_IN_TRANSFER_LIST, TypeError) \
V(ERR_MISSING_TRANSFERABLE_IN_TRANSFER_LIST, TypeError) \
V(ERR_MISSING_PASSPHRASE, TypeError) \
V(ERR_MISSING_PLATFORM_FOR_WORKER, Error) \
V(ERR_NON_CONTEXT_AWARE_DISABLED, Error) \
Expand Down Expand Up @@ -96,7 +96,7 @@ void OnFatalError(const char* location, const char* message);
V(ERR_MESSAGE_TARGET_CONTEXT_UNAVAILABLE, \
"A message object could not be deserialized successfully in the target " \
"vm.Context") \
V(ERR_MISSING_MESSAGE_PORT_IN_TRANSFER_LIST, \
V(ERR_MISSING_TRANSFERABLE_IN_TRANSFER_LIST, \
"Object that needs transfer was found in message but not listed " \
"in transferList") \
V(ERR_MISSING_PLATFORM_FOR_WORKER, \
Expand Down
4 changes: 1 addition & 3 deletions src/node_messaging.cc
Expand Up @@ -354,9 +354,7 @@ class SerializerDelegate : public ValueSerializer::Delegate {
ThrowDataCloneError(env_->clone_unsupported_type_str());
return Nothing<bool>();
} else if (mode == BaseObject::TransferMode::kTransferable) {
// TODO(addaleax): This message code is too specific. Fix that in a
// semver-major follow-up.
THROW_ERR_MISSING_MESSAGE_PORT_IN_TRANSFER_LIST(env_);
THROW_ERR_MISSING_TRANSFERABLE_IN_TRANSFER_LIST(env_);
return Nothing<bool>();
}

Expand Down
Expand Up @@ -14,8 +14,7 @@ const { once } = require('events');
assert.throws(() => {
port1.postMessage(fh);
}, {
// See the TODO about error code in node_messaging.cc.
code: 'ERR_MISSING_MESSAGE_PORT_IN_TRANSFER_LIST'
code: 'ERR_MISSING_TRANSFERABLE_IN_TRANSFER_LIST'
});

// Check that transferring FileHandle instances works.
Expand Down
2 changes: 1 addition & 1 deletion test/parallel/test-worker-workerdata-messageport.js
Expand Up @@ -54,7 +54,7 @@ const meowScript = () => 'meow';
workerData,
transferList: []
}), {
code: 'ERR_MISSING_MESSAGE_PORT_IN_TRANSFER_LIST',
code: 'ERR_MISSING_TRANSFERABLE_IN_TRANSFER_LIST',
message: 'Object that needs transfer was found in message but not ' +
'listed in transferList'
});
Expand Down