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

refactor(ext/node): use a snapshottable global name for Node's globalThis (#18860)

This commit is contained in:
David Sherret 2023-04-26 18:53:13 -04:00 committed by GitHub
parent 7415aff983
commit a8b4e346b4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 17 additions and 18 deletions

View file

@ -341,7 +341,7 @@ fn esm_code_from_top_level_decls(
}
let mut result = String::new();
let global_this_expr = NODE_GLOBAL_THIS_NAME.as_str();
let global_this_expr = NODE_GLOBAL_THIS_NAME;
let global_this_expr = if has_global_this {
global_this_expr
} else {
@ -506,10 +506,9 @@ mod tests {
"export const x = 1;",
&HashSet::from(["x".to_string()]),
);
assert!(r.contains(&format!(
"var globalThis = {};",
NODE_GLOBAL_THIS_NAME.as_str()
)));
assert!(
r.contains(&format!("var globalThis = {};", NODE_GLOBAL_THIS_NAME,))
);
assert!(r.contains("var process = globalThis.process;"));
assert!(r.contains("export const x = 1;"));
}
@ -533,7 +532,7 @@ mod tests {
"var setTimeout = globalThis.setTimeout;\n",
"export const x = 1;"
),
NODE_GLOBAL_THIS_NAME.as_str(),
NODE_GLOBAL_THIS_NAME,
)
);
}

10
ext/node/build.rs Normal file
View file

@ -0,0 +1,10 @@
// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
fn main() {
// we use a changing variable name to make it harder to depend on this
let crate_version = env!("CARGO_PKG_VERSION");
println!(
"cargo:rustc-env=NODE_GLOBAL_THIS_NAME=__DENO_NODE_GLOBAL_THIS_{}__",
crate_version.replace('.', "_")
);
}

View file

@ -169,15 +169,7 @@ pub trait NpmResolver: std::fmt::Debug + Send + Sync {
) -> Result<(), AnyError>;
}
pub static NODE_GLOBAL_THIS_NAME: Lazy<String> = Lazy::new(|| {
let now = std::time::SystemTime::now();
let seconds = now
.duration_since(std::time::SystemTime::UNIX_EPOCH)
.unwrap()
.as_secs();
// use a changing variable name to make it hard to depend on this
format!("__DENO_NODE_GLOBAL_THIS_{seconds}__")
});
pub const NODE_GLOBAL_THIS_NAME: &str = env!("NODE_GLOBAL_THIS_NAME");
pub static NODE_ENV_VAR_ALLOWLIST: Lazy<HashSet<String>> = Lazy::new(|| {
// The full list of environment variables supported by Node.js is available
@ -557,9 +549,7 @@ pub fn initialize_runtime(
argv0
);
}})('{}', {}, {});"#,
NODE_GLOBAL_THIS_NAME.as_str(),
uses_local_node_modules_dir,
argv0
NODE_GLOBAL_THIS_NAME, uses_local_node_modules_dir, argv0
);
js_runtime.execute_script(located_script_name!(), source_code.into())?;