diff --git a/ext/node/global.rs b/ext/node/global.rs index e01fca95e1..2367814f93 100644 --- a/ext/node/global.rs +++ b/ext/node/global.rs @@ -305,6 +305,10 @@ pub fn getter<'s>( let reflect_get = v8::Local::new(scope, reflect_get); let inner = v8::Local::new(scope, inner); + if !inner.has_own_property(scope, key).unwrap_or(false) { + return v8::Intercepted::No; + } + let undefined = v8::undefined(scope); let Some(value) = reflect_get.call( scope, diff --git a/ext/web/02_timers.js b/ext/web/02_timers.js index e300719715..5591478619 100644 --- a/ext/web/02_timers.js +++ b/ext/web/02_timers.js @@ -35,7 +35,7 @@ function checkThis(thisArg) { function setImmediate(callback, ...args) { if (args.length > 0) { const unboundCallback = callback; - callback = () => ReflectApply(unboundCallback, window, args); + callback = () => ReflectApply(unboundCallback, globalThis, args); } return core.queueImmediate( @@ -55,7 +55,7 @@ function setTimeout(callback, timeout = 0, ...args) { } if (args.length > 0) { const unboundCallback = callback; - callback = () => ReflectApply(unboundCallback, window, args); + callback = () => ReflectApply(unboundCallback, globalThis, args); } timeout = webidl.converters.long(timeout); return core.queueUserTimer( @@ -77,7 +77,7 @@ function setInterval(callback, timeout = 0, ...args) { } if (args.length > 0) { const unboundCallback = callback; - callback = () => ReflectApply(unboundCallback, window, args); + callback = () => ReflectApply(unboundCallback, globalThis, args); } timeout = webidl.converters.long(timeout); return core.queueUserTimer( diff --git a/tests/node_compat/test/common/index.js b/tests/node_compat/test/common/index.js index 2ebb22da28..bc1ea05e45 100644 --- a/tests/node_compat/test/common/index.js +++ b/tests/node_compat/test/common/index.js @@ -62,7 +62,6 @@ let knownGlobals = [ self, sessionStorage, setImmediate, - window, ]; if (global.AbortController) diff --git a/tests/unit/globals_test.ts b/tests/unit/globals_test.ts index 8e07cf0056..e4cbe7daf1 100644 --- a/tests/unit/globals_test.ts +++ b/tests/unit/globals_test.ts @@ -1,7 +1,12 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. // deno-lint-ignore-file no-window-prefix no-window -import { assert, assertEquals, assertRejects } from "./test_util.ts"; +import { + assert, + assertEquals, + assertRejects, + assertThrows, +} from "./test_util.ts"; Deno.test(function globalThisExists() { assert(globalThis != null); @@ -224,3 +229,10 @@ Deno.test(function mapGroupBy() { quantity: 5, }]); }); + +Deno.test(function nodeGlobalsRaise() { + assertThrows(() => { + // @ts-ignore yes that's the point + Buffer; + }, ReferenceError); +});