esm: graduate top-level-await to stable

Removes the experimental label in the docs and makes the
`--experimental-top-level-await` flag a no-op.

V8 has removed the harmony flag in V8 9.1 and consider the feature
stable, there's no reason to keep it experimental in Node.js.

PR-URL: https://github.com/nodejs/node/pull/42875
Reviewed-By: Jacob Smith <jacob@frende.me>
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Mohammed Keyvanzadeh <mohammadkeyvanzade94@gmail.com>
Reviewed-By: Mestery <mestery@protonmail.com>
Reviewed-By: Geoffrey Booth <webadmin@geoffreybooth.com>
Reviewed-By: Darshan Sen <raisinten@gmail.com>
Reviewed-By: Tobias Nießen <tniessen@tnie.de>
This commit is contained in:
Antoine du Hamel 2022-04-28 19:54:29 +02:00 committed by GitHub
parent 17826f54c0
commit 517fe9584a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 3 additions and 18 deletions

View File

@ -566,8 +566,6 @@ would provide the exports interface for the instantiation of `module.wasm`.
added: v14.8.0
-->
> Stability: 1 - Experimental
The `await` keyword may be used in the top level body of an ECMAScript module.
Assuming an `a.mjs` with

View File

@ -428,13 +428,7 @@ void ModuleWrap::Evaluate(const FunctionCallbackInfo<Value>& args) {
return;
}
// If TLA is enabled, `result` is the evaluation's promise.
// Otherwise, `result` is the last evaluated value of the module,
// which could be a promise, which would result in it being incorrectly
// unwrapped when the higher level code awaits the evaluation.
if (env->isolate_data()->options()->experimental_top_level_await) {
args.GetReturnValue().Set(result.ToLocalChecked());
}
args.GetReturnValue().Set(result.ToLocalChecked());
}
void ModuleWrap::GetNamespace(const FunctionCallbackInfo<Value>& args) {

View File

@ -700,14 +700,8 @@ PerIsolateOptionsParser::PerIsolateOptionsParser(
kAllowedInEnvironment);
Implies("--report-signal", "--report-on-signal");
AddOption("--experimental-top-level-await",
"",
&PerIsolateOptions::experimental_top_level_await,
kAllowedInEnvironment);
AddOption("--harmony-top-level-await", "", V8Option{});
Implies("--experimental-top-level-await", "--harmony-top-level-await");
Implies("--harmony-top-level-await", "--experimental-top-level-await");
ImpliesNot("--no-harmony-top-level-await", "--experimental-top-level-await");
AddOption(
"--experimental-top-level-await", "", NoOp{}, kAllowedInEnvironment);
Insert(eop, &PerIsolateOptions::get_per_env_options);
}

View File

@ -205,7 +205,6 @@ class PerIsolateOptions : public Options {
bool track_heap_objects = false;
bool report_uncaught_exception = false;
bool report_on_signal = false;
bool experimental_top_level_await = true;
std::string report_signal = "SIGUSR2";
inline EnvironmentOptions* get_per_env_options();
void CheckOptions(std::vector<std::string>* errors) override;