From 5f261dcde90bcf28ac966199994eefa38ad2ea23 Mon Sep 17 00:00:00 2001
From: Cheng Shao <terrorjack@type.dance>
Date: Sun, 16 Mar 2025 21:03:06 +0000
Subject: [PATCH] wasm: fix dyld setImmediate usage in browser

The wasm dyld script used to only run in node and directly uses
setImmediate in globalThis. In case of browsers, it needs to import
setImmediate from the prelude, hence this commit.

(cherry picked from commit 9a6971813d16054d8e1aec6f2948188bbd74e892)
---
 utils/jsffi/dyld.mjs    | 2 +-
 utils/jsffi/prelude.mjs | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/utils/jsffi/dyld.mjs b/utils/jsffi/dyld.mjs
index aee3bf7f25b..5113e05057f 100755
--- a/utils/jsffi/dyld.mjs
+++ b/utils/jsffi/dyld.mjs
@@ -93,7 +93,7 @@ import fs from "node:fs";
 import path from "node:path";
 import stream from "node:stream";
 import { WASI } from "node:wasi";
-import { JSValManager } from "./prelude.mjs";
+import { JSValManager, setImmediate } from "./prelude.mjs";
 import { parseRecord, parseSections } from "./post-link.mjs";
 
 // Make a consumer callback from a buffer. See Parser class
diff --git a/utils/jsffi/prelude.mjs b/utils/jsffi/prelude.mjs
index 91015283caa..7af91e52add 100644
--- a/utils/jsffi/prelude.mjs
+++ b/utils/jsffi/prelude.mjs
@@ -39,7 +39,7 @@ export class JSValManager {
 // To benchmark different setImmediate() implementations in the
 // browser, use https://github.com/jphpsf/setImmediate-shim-demo as a
 // starting point.
-const setImmediate = await (async () => {
+export const setImmediate = await (async () => {
   // node, bun, or other scripts might have set this up in the browser
   if (globalThis.setImmediate) {
     return globalThis.setImmediate;
-- 
GitLab