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:
parent
7415aff983
commit
a8b4e346b4
3 changed files with 17 additions and 18 deletions
|
@ -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
10
ext/node/build.rs
Normal 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('.', "_")
|
||||
);
|
||||
}
|
|
@ -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())?;
|
||||
|
|
Loading…
Reference in a new issue