aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/api/bun.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/bun.js/api/bun.zig')
-rw-r--r--src/bun.js/api/bun.zig46
1 files changed, 40 insertions, 6 deletions
diff --git a/src/bun.js/api/bun.zig b/src/bun.js/api/bun.zig
index 21c2ecd0e..4c13214b3 100644
--- a/src/bun.js/api/bun.zig
+++ b/src/bun.js/api/bun.zig
@@ -57,6 +57,7 @@ pub const BunObject = struct {
pub const SHA512_256 = Crypto.SHA512_256.getter;
pub const TOML = Bun.getTOMLObject;
pub const Transpiler = Bun.getTranspilerConstructor;
+ pub const Canvas = Bun.getCanvasConstructor;
pub const argv = Bun.getArgv;
pub const assetPrefix = Bun.getAssetPrefix;
pub const cwd = Bun.getCWD;
@@ -102,6 +103,7 @@ pub const BunObject = struct {
@export(BunObject.SHA512_256, .{ .name = getterName("SHA512_256") });
@export(BunObject.TOML, .{ .name = getterName("TOML") });
@export(BunObject.Transpiler, .{ .name = getterName("Transpiler") });
+ @export(BunObject.Canvas, .{ .name = getterName("Canvas") });
@export(BunObject.argv, .{ .name = getterName("argv") });
@export(BunObject.assetPrefix, .{ .name = getterName("assetPrefix") });
@export(BunObject.cwd, .{ .name = getterName("cwd") });
@@ -2827,6 +2829,13 @@ pub fn getTranspilerConstructor(
return JSC.API.JSTranspiler.getConstructor(globalThis);
}
+pub fn getCanvasConstructor(
+ globalThis: *JSC.JSGlobalObject,
+ _: *JSC.JSObject,
+) callconv(.C) JSC.JSValue {
+ return JSC.API.Canvas.getConstructor(globalThis);
+}
+
pub fn getFileSystemRouter(
globalThis: *JSC.JSGlobalObject,
_: *JSC.JSObject,
@@ -3715,6 +3724,22 @@ pub const Timer = struct {
return TimerObject.init(globalThis, id, .setTimeout, interval, wrappedCallback, arguments);
}
+
+ pub fn setImmediate(
+ globalThis: *JSGlobalObject,
+ callback: JSValue,
+ arguments: JSValue,
+ ) callconv(.C) JSValue {
+ JSC.markBinding(@src());
+ const id = globalThis.bunVM().timer.last_id;
+ globalThis.bunVM().timer.last_id +%= 1;
+
+ const wrappedCallback = callback.withAsyncContextIfNeeded(globalThis);
+ Timer.set(id, globalThis, wrappedCallback, 0, arguments, false) catch return .undefined;
+
+ return TimerObject.init(globalThis, id, .setImmediate, 0, wrappedCallback, arguments);
+ }
+
pub fn setInterval(
globalThis: *JSGlobalObject,
callback: JSValue,
@@ -3739,10 +3764,9 @@ pub const Timer = struct {
return TimerObject.init(globalThis, id, .setInterval, interval, wrappedCallback, arguments);
}
- pub fn clearTimer(timer_id_value: JSValue, globalThis: *JSGlobalObject, repeats: bool) void {
+ pub fn clearTimer(timer_id_value: JSValue, globalThis: *JSGlobalObject, kind: Timeout.Kind) void {
JSC.markBinding(@src());
- const kind: Timeout.Kind = if (repeats) .setInterval else .setTimeout;
var vm = globalThis.bunVM();
var map = vm.timer.maps.get(kind);
@@ -3781,16 +3805,26 @@ pub const Timer = struct {
id: JSValue,
) callconv(.C) JSValue {
JSC.markBinding(@src());
- Timer.clearTimer(id, globalThis, false);
- return JSValue.jsUndefined();
+ Timer.clearTimer(id, globalThis, .setTimeout);
+ return .undefined;
+ }
+
+ pub fn clearImmediate(
+ globalThis: *JSGlobalObject,
+ id: JSValue,
+ ) callconv(.C) JSValue {
+ JSC.markBinding(@src());
+ Timer.clearTimer(id, globalThis, .setImmediate);
+ return .undefined;
}
+
pub fn clearInterval(
globalThis: *JSGlobalObject,
id: JSValue,
) callconv(.C) JSValue {
JSC.markBinding(@src());
- Timer.clearTimer(id, globalThis, true);
- return JSValue.jsUndefined();
+ Timer.clearTimer(id, globalThis, .setInterval);
+ return .undefined;
}
const Shimmer = @import("../bindings/shimmer.zig").Shimmer;