From de613baf81bfaf524818cb72811e13ad9a3765ff Mon Sep 17 00:00:00 2001 From: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> Date: Fri, 3 Feb 2023 17:25:25 -0800 Subject: Support passing `Date` to `Bun.sleep` --- src/bun.js/bindings/ZigGlobalObject.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'src/bun.js/bindings/ZigGlobalObject.cpp') diff --git a/src/bun.js/bindings/ZigGlobalObject.cpp b/src/bun.js/bindings/ZigGlobalObject.cpp index 5eeaf9804..54ccba343 100644 --- a/src/bun.js/bindings/ZigGlobalObject.cpp +++ b/src/bun.js/bindings/ZigGlobalObject.cpp @@ -108,6 +108,7 @@ #include "ModuleLoader.h" #include "ZigGeneratedClasses.h" +#include "JavaScriptCore/DateInstance.h" #include "BunPlugin.h" @@ -810,6 +811,13 @@ JSC_DEFINE_HOST_FUNCTION(functionBunSleep, JSC::VM& vm = globalObject->vm(); JSC::JSValue millisecondsValue = callFrame->argument(0); + + if (millisecondsValue.inherits()) { + auto now = MonotonicTime::now(); + auto milliseconds = jsCast(millisecondsValue)->internalNumber() - now.approximateWallTime().secondsSinceEpoch().milliseconds(); + millisecondsValue = JSC::jsNumber(milliseconds > 0 ? milliseconds : 0); + } + if (!millisecondsValue.isNumber()) { auto scope = DECLARE_THROW_SCOPE(globalObject->vm()); JSC::throwTypeError(globalObject, scope, "sleep expects a number (milliseconds)"_s); -- cgit v1.2.3