Skip to content

Commit

Permalink
esm: graduate top-level-await to stable
Browse files Browse the repository at this point in the history
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: #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>
  • Loading branch information
aduh95 authored and juanarbol committed May 31, 2022
1 parent e78bcb7 commit c7fb9cb
Show file tree
Hide file tree
Showing 4 changed files with 3 additions and 18 deletions.
2 changes: 0 additions & 2 deletions doc/api/esm.md
Expand Up @@ -556,8 +556,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
Expand Down
8 changes: 1 addition & 7 deletions src/module_wrap.cc
Expand Up @@ -429,13 +429,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) {
Expand Down
10 changes: 2 additions & 8 deletions src/node_options.cc
Expand Up @@ -670,14 +670,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);
}
Expand Down
1 change: 0 additions & 1 deletion src/node_options.h
Expand Up @@ -199,7 +199,6 @@ class PerIsolateOptions : public Options {
bool node_snapshot = true;
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;
Expand Down

0 comments on commit c7fb9cb

Please sign in to comment.