async_hooks: deprecate the AsyncResource.bind asyncResource property

Runtime-deprecates the `asyncResource` property that is attached to
the wrapper function returned by `asyncResource.bind()`. This property
is not expected to align with the equivalent `asyncContext.wrap()`
API in the proposed TC39 standard.

PR-URL: https://github.com/nodejs/node/pull/46432
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Reviewed-By: Stephen Belanger <admin@stephenbelanger.com>
Reviewed-By: Gerhard Stöbich <deb2001-github@yahoo.de>
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
This commit is contained in:
James M Snell 2023-02-02 18:02:19 -08:00 committed by GitHub
parent 1118db718c
commit 9fafb0a090
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 35 additions and 9 deletions

View File

@ -455,6 +455,11 @@ added:
- v14.8.0
- v12.19.0
changes:
- version: REPLACEME
pr-url: https://github.com/nodejs/node/pull/46432
description: The `asyncResource` property added to the bound function
has been deprecated and will be removed in a future
version.
- version:
- v17.8.0
- v16.15.0
@ -473,9 +478,6 @@ changes:
Binds the given function to the current execution context.
The returned function will have an `asyncResource` property referencing
the `AsyncResource` to which the function is bound.
### `asyncResource.bind(fn[, thisArg])`
<!-- YAML
@ -483,6 +485,11 @@ added:
- v14.8.0
- v12.19.0
changes:
- version: REPLACEME
pr-url: https://github.com/nodejs/node/pull/46432
description: The `asyncResource` property added to the bound function
has been deprecated and will be removed in a future
version.
- version:
- v17.8.0
- v16.15.0
@ -499,9 +506,6 @@ changes:
Binds the given function to execute to this `AsyncResource`'s scope.
The returned function will have an `asyncResource` property referencing
the `AsyncResource` to which the function is bound.
### `asyncResource.runInAsyncScope(fn[, thisArg, ...args])`
<!-- YAML

View File

@ -3339,6 +3339,20 @@ In a future version of Node.js, [`message.headers`][],
[`message.headersDistinct`][], [`message.trailers`][], and
[`message.trailersDistinct`][] will be read-only.
### DEP0172: The `asyncResource` property of `AsyncResource` bound functions
<!-- YAML
changes:
- version: REPLACEME
pr-url: https://github.com/nodejs/node/pull/46432
description: Runtime-deprecation.
-->
Type: Runtime
In a future version of Node.js, the `asyncResource` property will no longer
be added when a function is bound to an `AsyncResource`.
[NIST SP 800-38D]: https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38d.pdf
[RFC 6066]: https://tools.ietf.org/html/rfc6066#section-3
[RFC 8247 Section 2.4]: https://www.rfc-editor.org/rfc/rfc8247#section-2.4

View File

@ -20,7 +20,10 @@ const {
ERR_ASYNC_TYPE,
ERR_INVALID_ASYNC_ID
} = require('internal/errors').codes;
const { kEmptyObject } = require('internal/util');
const {
deprecate,
kEmptyObject,
} = require('internal/util');
const {
validateFunction,
validateString,
@ -237,6 +240,7 @@ class AsyncResource {
} else {
bound = FunctionPrototypeBind(this.runInAsyncScope, this, fn, thisArg);
}
let self = this;
ObjectDefineProperties(bound, {
'length': {
__proto__: null,
@ -249,8 +253,12 @@ class AsyncResource {
__proto__: null,
configurable: true,
enumerable: true,
value: this,
writable: true,
get: deprecate(function() {
return self;
}, 'The asyncResource property on bound functions is deprecated', 'DEP0172'),
set: deprecate(function(val) {
self = val;
}, 'The asyncResource property on bound functions is deprecated', 'DEP0172'),
}
});
return bound;