Skip to content

Commit b383d03

Browse files
committed
lib: Symbol.dispose should be enabled with experimental flag
The TC39 explicit resource management proposal is still at stage 3 and under active development. It must be enabled with an experimental flag `--experimental-explicit-resource-management`. The flag implies that the V8 option `--js-explicit-resource-management` to be enabled.
1 parent 90dea9e commit b383d03

File tree

10 files changed

+39
-0
lines changed

10 files changed

+39
-0
lines changed

doc/api/cli.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -941,6 +941,14 @@ added: v22.3.0
941941

942942
Enable exposition of [EventSource Web API][] on the global scope.
943943

944+
### `--experimental-explicit-resource-management`
945+
946+
<!-- YAML
947+
added: REPLACEME
948+
-->
949+
950+
Use this flag to enable [Explicit Resource Management][] support.
951+
944952
### `--experimental-import-meta-resolve`
945953

946954
<!-- YAML
@@ -2912,6 +2920,7 @@ one is included in the list below.
29122920
* `--experimental-default-type`
29132921
* `--experimental-detect-module`
29142922
* `--experimental-eventsource`
2923+
* `--experimental-explicit-resource-management`
29152924
* `--experimental-import-meta-resolve`
29162925
* `--experimental-json-modules`
29172926
* `--experimental-loader`
@@ -3435,6 +3444,7 @@ node --stack-trace-limit=12 -p -e "Error.stackTraceLimit" # prints 12
34353444
[ECMAScript module]: esm.md#modules-ecmascript-modules
34363445
[EventSource Web API]: https://html.spec.whatwg.org/multipage/server-sent-events.html#server-sent-events
34373446
[ExperimentalWarning: `vm.measureMemory` is an experimental feature]: vm.md#vmmeasurememoryoptions
3447+
[Explicit Resource Management]: https://github.com/tc39/proposal-explicit-resource-management
34383448
[File System Permissions]: permissions.md#file-system-permissions
34393449
[Loading ECMAScript modules using `require()`]: modules.md#loading-ecmascript-modules-using-require
34403450
[Module customization hooks]: module.md#customization-hooks

doc/api/test.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2276,6 +2276,8 @@ mock.timers.reset();
22762276

22772277
### `timers[Symbol.dispose]()`
22782278

2279+
> Stability: 1 - Experimental
2280+
22792281
Calls `timers.reset()`.
22802282

22812283
### `timers.tick([milliseconds])`

lib/internal/process/pre_execution.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,9 @@ function prepareExecution(options) {
160160
}
161161

162162
function setupSymbolDisposePolyfill() {
163+
if (!getOptionValue('--experimental-explicit-resource-management')) {
164+
return;
165+
}
163166
// TODO(MoLow): Remove this polyfill once Symbol.dispose and Symbol.asyncDispose are available in V8.
164167
// eslint-disable-next-line node-core/prefer-primordials
165168
if (typeof Symbol.dispose !== 'symbol') {

src/node_options.cc

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -905,6 +905,19 @@ PerIsolateOptionsParser::PerIsolateOptionsParser(
905905
Implies("--experimental-shadow-realm", "--harmony-shadow-realm");
906906
Implies("--harmony-shadow-realm", "--experimental-shadow-realm");
907907
ImpliesNot("--no-harmony-shadow-realm", "--experimental-shadow-realm");
908+
909+
AddOption("--experimental-explicit-resource-management",
910+
"",
911+
&PerIsolateOptions::experimental_explicit_resource_management,
912+
kAllowedInEnvvar);
913+
AddOption("--js-explicit-resource-management", "", V8Option{});
914+
Implies("--experimental-explicit-resource-management",
915+
"--js-explicit-resource-management");
916+
Implies("--js-explicit-resource-management",
917+
"--experimental-explicit-resource-management");
918+
ImpliesNot("--no-js-explicit-resource-management",
919+
"--experimental-explicit-resource-management");
920+
908921
AddOption("--build-snapshot",
909922
"Generate a snapshot blob when the process exits.",
910923
&PerIsolateOptions::build_snapshot,

src/node_options.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,7 @@ class PerIsolateOptions : public Options {
264264
bool report_uncaught_exception = false;
265265
bool report_on_signal = false;
266266
bool experimental_shadow_realm = false;
267+
bool experimental_explicit_resource_management = false;
267268
std::string report_signal = "SIGUSR2";
268269
bool build_snapshot = false;
269270
std::string build_snapshot_config;

test/parallel/test-child-process-destroy.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
// Flags: --experimental-explicit-resource-management
2+
13
'use strict';
24
const common = require('../common');
35
const assert = require('assert');

test/parallel/test-events-add-abort-listener.mjs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
// Flags: --experimental-explicit-resource-management
2+
13
import * as common from '../common/index.mjs';
24
import * as events from 'node:events';
35
import * as assert from 'node:assert';

test/parallel/test-runner-mock-timers.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
// Flags: --experimental-explicit-resource-management
2+
13
'use strict';
24
process.env.NODE_TEST_KNOWN_GLOBALS = 0;
35
const common = require('../common');

test/parallel/test-timers-dispose.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
// Flags: --experimental-explicit-resource-management
2+
13
'use strict';
24
const common = require('../common');
35
const assert = require('assert');

test/sequential/test-inspector-open-dispose.mjs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
// Flags: --experimental-explicit-resource-management
2+
13
import * as common from '../common/index.mjs';
24
import assert from 'node:assert';
35
import net from 'node:net';

0 commit comments

Comments
 (0)