From 362be01abe572d68b34e31b361addb860841115b Mon Sep 17 00:00:00 2001 From: Liam Murphy <43807659+Liamolucko@users.noreply.github.com> Date: Sun, 6 Dec 2020 02:16:07 +1100 Subject: [PATCH] feat(std/node): Add "setImmediate" and "clearImmediate" to global scope (#8566) Co-authored-by: Ben Noordhuis --- std/node/global.d.ts | 5 +++++ std/node/global.ts | 15 +++++++++++++++ std/node/global_test.ts | 19 +++++++++++++++++++ 3 files changed, 39 insertions(+) diff --git a/std/node/global.d.ts b/std/node/global.d.ts index b02a682c62..6e0378b9e0 100644 --- a/std/node/global.d.ts +++ b/std/node/global.d.ts @@ -1,6 +1,7 @@ // Copyright 2018-2020 the Deno authors. All rights reserved. MIT license. import { process as processModule } from "./process.ts"; import { Buffer as bufferModule } from "./buffer.ts"; +import timers from "./timers.ts"; // d.ts files allow us to declare Buffer as a value and as a type // type something = Buffer | something_else; is quite common @@ -8,6 +9,8 @@ import { Buffer as bufferModule } from "./buffer.ts"; type GlobalType = { process: typeof processModule; Buffer: typeof bufferModule; + setImmediate: typeof timers.setImmediate; + clearImmediate: typeof timers.clearImmediate; }; declare global { @@ -23,6 +26,8 @@ declare global { var process: typeof processModule; var Buffer: typeof bufferModule; type Buffer = bufferModule; + var setImmediate: typeof timers.setImmediate; + var clearImmediate: typeof timers.clearImmediate; } export {}; diff --git a/std/node/global.ts b/std/node/global.ts index d727600892..585ba14901 100644 --- a/std/node/global.ts +++ b/std/node/global.ts @@ -2,6 +2,7 @@ /// import { process as processModule } from "./process.ts"; import { Buffer as bufferModule } from "./buffer.ts"; +import timers from "./timers.ts"; Object.defineProperty(globalThis, "global", { value: globalThis, @@ -24,4 +25,18 @@ Object.defineProperty(globalThis, "Buffer", { configurable: true, }); +Object.defineProperty(globalThis, "setImmediate", { + value: timers.setImmediate, + enumerable: true, + writable: true, + configurable: true, +}); + +Object.defineProperty(globalThis, "clearImmediate", { + value: timers.clearImmediate, + enumerable: true, + writable: true, + configurable: true, +}); + export {}; diff --git a/std/node/global_test.ts b/std/node/global_test.ts index 9ce0b21325..60c997daf4 100644 --- a/std/node/global_test.ts +++ b/std/node/global_test.ts @@ -2,6 +2,7 @@ import "./global.ts"; import { assert, assertStrictEquals } from "../testing/asserts.ts"; import { Buffer as BufferModule } from "./buffer.ts"; import processModule from "./process.ts"; +import timers from "./timers.ts"; // Definitions for this are quite delicate // This ensures modifications to the global namespace don't break on TypeScript @@ -50,3 +51,21 @@ Deno.test("process is correctly defined", () => { assertStrictEquals(window.process, processModule); assert(window.process.arch); }); + +Deno.test("setImmediate is correctly defined", () => { + // deno-lint-ignore no-undef + assertStrictEquals(setImmediate, timers.setImmediate); + // deno-lint-ignore no-undef + assertStrictEquals(global.setImmediate, timers.setImmediate); + assertStrictEquals(globalThis.setImmediate, timers.setImmediate); + assertStrictEquals(window.setImmediate, timers.setImmediate); +}); + +Deno.test("clearImmediate is correctly defined", () => { + // deno-lint-ignore no-undef + assertStrictEquals(clearImmediate, timers.clearImmediate); + // deno-lint-ignore no-undef + assertStrictEquals(global.clearImmediate, timers.clearImmediate); + assertStrictEquals(globalThis.clearImmediate, timers.clearImmediate); + assertStrictEquals(window.clearImmediate, timers.clearImmediate); +});