1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-21 15:04:11 -05:00

chore: add DENO_FUTURE env var (#22318)

Closes https://github.com/denoland/deno/issues/22315

```
~> DENO_FUTURE=1 target/debug/deno

> globalThis.window
undefined
```
This commit is contained in:
Divy Srivastava 2024-02-15 10:20:17 +05:30
parent 2e1736d40c
commit 8b1a4d1f46
9 changed files with 39 additions and 0 deletions

View file

@ -987,6 +987,10 @@ impl CliOptions {
}
}
pub fn enable_future_features(&self) -> bool {
std::env::var("DENO_FUTURE").is_ok()
}
pub fn resolve_main_module(&self) -> Result<ModuleSpecifier, AnyError> {
match &self.flags.subcommand {
DenoSubcommand::Bundle(bundle_flags) => {

View file

@ -775,6 +775,7 @@ impl CliFactory {
self.feature_checker().clone(),
self.create_cli_main_worker_options()?,
self.options.node_ipc_fd(),
self.options.enable_future_features(),
// TODO(bartlomieju): temporarily disabled
// self.options.disable_deprecated_api_warning,
true,

View file

@ -551,6 +551,7 @@ pub async fn run(
create_coverage_collector: None,
},
None,
false,
// TODO(bartlomieju): temporarily disabled
// metadata.disable_deprecated_api_warning,
true,

View file

@ -144,6 +144,7 @@ struct SharedWorkerState {
maybe_lockfile: Option<Arc<Mutex<Lockfile>>>,
feature_checker: Arc<FeatureChecker>,
node_ipc: Option<i64>,
enable_future_features: bool,
disable_deprecated_api_warning: bool,
verbose_deprecated_api_warning: bool,
}
@ -424,6 +425,7 @@ impl CliMainWorkerFactory {
feature_checker: Arc<FeatureChecker>,
options: CliMainWorkerOptions,
node_ipc: Option<i64>,
enable_future_features: bool,
disable_deprecated_api_warning: bool,
verbose_deprecated_api_warning: bool,
) -> Self {
@ -446,6 +448,7 @@ impl CliMainWorkerFactory {
maybe_lockfile,
feature_checker,
node_ipc,
enable_future_features,
disable_deprecated_api_warning,
verbose_deprecated_api_warning,
}),
@ -612,6 +615,7 @@ impl CliMainWorkerFactory {
node_ipc_fd: shared.node_ipc,
disable_deprecated_api_warning: shared.disable_deprecated_api_warning,
verbose_deprecated_api_warning: shared.verbose_deprecated_api_warning,
future: shared.enable_future_features,
},
extensions: custom_extensions,
startup_snapshot: crate::js::deno_isolate_init(),
@ -818,6 +822,7 @@ fn create_web_worker_callback(
node_ipc_fd: None,
disable_deprecated_api_warning: shared.disable_deprecated_api_warning,
verbose_deprecated_api_warning: shared.verbose_deprecated_api_warning,
future: false,
},
extensions: vec![],
startup_snapshot: crate::js::deno_isolate_init(),

View file

@ -647,6 +647,7 @@ function bootstrapMainRuntime(runtimeOptions) {
6: maybeBinaryNpmCommandName,
7: shouldDisableDeprecatedApiWarning,
8: shouldUseVerboseDeprecatedApiWarning,
9: future,
} = runtimeOptions;
removeImportedOps();
@ -769,6 +770,10 @@ function bootstrapMainRuntime(runtimeOptions) {
if (nodeBootstrap) {
nodeBootstrap(hasNodeModulesDir, maybeBinaryNpmCommandName);
}
if (future) {
delete globalThis.window;
}
}
function bootstrapWorkerRuntime(

View file

@ -62,6 +62,7 @@ pub struct BootstrapOptions {
pub node_ipc_fd: Option<i64>,
pub disable_deprecated_api_warning: bool,
pub verbose_deprecated_api_warning: bool,
pub future: bool,
}
impl Default for BootstrapOptions {
@ -92,6 +93,7 @@ impl Default for BootstrapOptions {
node_ipc_fd: None,
disable_deprecated_api_warning: false,
verbose_deprecated_api_warning: false,
future: false,
}
}
}
@ -125,6 +127,8 @@ struct BootstrapV8<'a>(
bool,
// verbose_deprecated_api_warning
bool,
// future
bool,
);
impl BootstrapOptions {
@ -146,6 +150,7 @@ impl BootstrapOptions {
self.maybe_binary_npm_command_name.as_deref(),
self.disable_deprecated_api_warning,
self.verbose_deprecated_api_warning,
self.future,
);
bootstrap.serialize(ser).unwrap()

View file

@ -166,6 +166,11 @@ impl TestContextBuilder {
self
}
pub fn add_future_env_vars(mut self) -> Self {
self = self.env("DENO_FUTURE", "1");
self
}
pub fn add_jsr_env_vars(mut self) -> Self {
for (key, value) in env_vars_for_jsr_tests() {
self = self.env(key, value);

View file

@ -1711,6 +1711,16 @@ fn type_directives_js_main() {
assert_not_contains!(output.combined_output(), "type_reference.d.ts");
}
#[test]
fn test_deno_futures_env() {
let context = TestContextBuilder::new().add_future_env_vars().build();
let output = context
.new_command()
.args("run --quiet --reload run/deno_futures_env.ts")
.run();
output.assert_exit_code(0);
}
itest!(type_directives_redirect {
args: "run --reload --check run/type_directives_redirect.ts",
output: "run/type_directives_redirect.ts.out",

View file

@ -0,0 +1,3 @@
if (typeof window !== "undefined") {
throw new Error("Window global available");
}