From 4cb851c51a296bed4975c4f8d9188c6f2ff556e9 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Thu, 13 Jun 2024 16:01:33 +0100 Subject: [PATCH] Replace usages of setImmediate with setTimeout for wider compatibility (#4240) Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com> --- .eslintrc.js | 16 ++++++++++++++++ spec/unit/matrixrtc/MatrixRTCSession.spec.ts | 4 ++-- src/utils.ts | 5 ++++- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index b751ebc8c..7e70255af 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -49,6 +49,22 @@ module.exports = { }, ], + "no-restricted-properties": [ + "error", + { + object: "window", + property: "setImmediate", + message: "Use setTimeout instead.", + }, + ], + "no-restricted-globals": [ + "error", + { + name: "setImmediate", + message: "Use setTimeout instead.", + }, + ], + "import/no-restricted-paths": [ "error", { diff --git a/spec/unit/matrixrtc/MatrixRTCSession.spec.ts b/spec/unit/matrixrtc/MatrixRTCSession.spec.ts index d061c60d0..b994613b5 100644 --- a/spec/unit/matrixrtc/MatrixRTCSession.spec.ts +++ b/spec/unit/matrixrtc/MatrixRTCSession.spec.ts @@ -489,7 +489,7 @@ describe("MatrixRTCSession", () => { }); it("Doesn't re-send key immediately", async () => { - const realSetImmediate = setImmediate; + const realSetTimeout = setTimeout; jest.useFakeTimers(); try { const mockRoom = makeMockRoom([membershipTemplate]); @@ -517,7 +517,7 @@ describe("MatrixRTCSession", () => { sess.onMembershipUpdate(); await new Promise((resolve) => { - realSetImmediate(resolve); + realSetTimeout(resolve); }); expect(sendEventMock).not.toHaveBeenCalled(); diff --git a/src/utils.ts b/src/utils.ts index f3ad18d57..1d4505f4b 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -407,9 +407,12 @@ export async function logDuration(logger: BaseLogger, name: string, block: () /** * Promise/async version of {@link setImmediate}. + * + * Implementation is based on `setTimeout` for wider compatibility. + * @deprecated Use {@link sleep} instead. */ export function immediate(): Promise { - return new Promise(setImmediate); + return new Promise((resolve) => setTimeout(resolve)); } export function isNullOrUndefined(val: any): boolean {