diff options
Diffstat (limited to 'src/bun.js/api/bun.zig')
-rw-r--r-- | src/bun.js/api/bun.zig | 46 |
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; |