diff --git a/src/bun.js/bindings/BunDebugger.cpp b/src/bun.js/bindings/BunDebugger.cpp index f4a5f535a7..0467399230 100644 --- a/src/bun.js/bindings/BunDebugger.cpp +++ b/src/bun.js/bindings/BunDebugger.cpp @@ -452,6 +452,21 @@ extern "C" void Bun__ensureDebugger(ScriptExecutionContextIdentifier scriptId, b } } +extern "C" void BunDebugger__willHotReload() { + if (debuggerScriptExecutionContext == nullptr) { + return; + } + + debuggerScriptExecutionContext->postTaskConcurrently([](ScriptExecutionContext &context){ + WTF::LockHolder locker(inspectorConnectionsLock); + for (auto& connections : *inspectorConnections) { + for (auto* connection : connections.value) { + connection->sendMessageToFrontend("{\"method\":\"Bun.canReload\"}"_s); + } + } + }); +} + JSC_DEFINE_HOST_FUNCTION(jsFunctionCreateConnection, (JSGlobalObject * globalObject, CallFrame* callFrame)) { auto* debuggerGlobalObject = jsDynamicCast(globalObject); diff --git a/src/bun.js/javascript.zig b/src/bun.js/javascript.zig index 32cf04346b..212e6be719 100644 --- a/src/bun.js/javascript.zig +++ b/src/bun.js/javascript.zig @@ -2720,6 +2720,7 @@ pub const VirtualMachine = struct { pub const HotReloader = NewHotReloader(VirtualMachine, JSC.EventLoop, false); pub const Watcher = HotReloader.Watcher; +extern fn BunDebugger__willHotReload() void; pub fn NewHotReloader(comptime Ctx: type, comptime EventLoopType: type, comptime reload_immediately: bool) type { return struct { @@ -2777,6 +2778,7 @@ pub fn NewHotReloader(comptime Ctx: type, comptime EventLoopType: type, comptime unreachable; } + BunDebugger__willHotReload(); var that = bun.default_allocator.create(HotReloadTask) catch unreachable; that.* = this.*;