diff options
author | 2023-08-17 19:34:05 -0700 | |
---|---|---|
committer | 2023-08-17 19:34:05 -0700 | |
commit | 0424fd8f6e7549ed779788006acdc97a8467e287 (patch) | |
tree | faec04e9f167eca0b72c6a19291f5bbae06068db /src/bun.js | |
parent | cfbd1373e2cc8066493de74b551aeb53061e84a7 (diff) | |
download | bun-0424fd8f6e7549ed779788006acdc97a8467e287.tar.gz bun-0424fd8f6e7549ed779788006acdc97a8467e287.tar.zst bun-0424fd8f6e7549ed779788006acdc97a8467e287.zip |
Support Nitro (#4098)
* Add formatWithOptions
* tests and tweaks
* adjust
* changes
* hi
* add mark/measure stubs
* stuff
* allow unix absolute paths here
* typo
* rebase
* fix stats
Diffstat (limited to 'src/bun.js')
-rw-r--r-- | src/bun.js/bindings/ZigGlobalObject.cpp | 14 | ||||
-rw-r--r-- | src/bun.js/node/types.zig | 46 |
2 files changed, 51 insertions, 9 deletions
diff --git a/src/bun.js/bindings/ZigGlobalObject.cpp b/src/bun.js/bindings/ZigGlobalObject.cpp index e7967d256..5524166c3 100644 --- a/src/bun.js/bindings/ZigGlobalObject.cpp +++ b/src/bun.js/bindings/ZigGlobalObject.cpp @@ -2421,15 +2421,25 @@ private: JSC::DOMJIT::Effect::forWriteKinds(DFG::AbstractHeapKind::SideState), SpecBytecodeDouble); - JSFunction* function = JSFunction::create( + JSFunction* now = JSFunction::create( vm, globalObject(), 0, String("now"_s), functionPerformanceNow, ImplementationVisibility::Public, NoIntrinsic, functionPerformanceNow, &DOMJITSignatureForPerformanceNow); + this->putDirect(vm, JSC::Identifier::fromString(vm, "now"_s), now, JSC::PropertyAttribute::DOMJITFunction | JSC::PropertyAttribute::Function); + + JSFunction* noopNotImplemented = JSFunction::create( + vm, + globalObject(), + 0, + String("noopNotImplemented"_s), + functionNoop, ImplementationVisibility::Public, NoIntrinsic, functionNoop, + &DOMJITSignatureForPerformanceNow); + this->putDirect(vm, JSC::Identifier::fromString(vm, "mark"_s), noopNotImplemented, JSC::PropertyAttribute::DOMJITFunction | JSC::PropertyAttribute::Function); + this->putDirect(vm, JSC::Identifier::fromString(vm, "measure"_s), noopNotImplemented, JSC::PropertyAttribute::DOMJITFunction | JSC::PropertyAttribute::Function); - this->putDirect(vm, JSC::Identifier::fromString(vm, "now"_s), function, JSC::PropertyAttribute::DOMJITFunction | JSC::PropertyAttribute::Function); this->putDirect( vm, JSC::Identifier::fromString(vm, "timeOrigin"_s), diff --git a/src/bun.js/node/types.zig b/src/bun.js/node/types.zig index ddb58f0cd..01eb029c3 100644 --- a/src/bun.js/node/types.zig +++ b/src/bun.js/node/types.zig @@ -1274,7 +1274,7 @@ pub const Date = enum(u64) { _, pub fn toJS(this: Date, ctx: JSC.C.JSContextRef, exception: JSC.C.ExceptionRef) JSC.C.JSValueRef { - const seconds = @as(f64, @floatCast(@as(f64, @floatFromInt(@intFromEnum(this))) * 1000.0)); + const seconds = @as(f64, @floatCast(@as(f64, @floatFromInt(@intFromEnum(this))))); const unix_timestamp = JSC.JSValue.jsNumber(seconds); const array: [1]JSC.C.JSValueRef = .{unix_timestamp.asObjectRef()}; const obj = JSC.C.JSObjectMakeDate(ctx, 1, &array, exception); @@ -1325,9 +1325,9 @@ fn StatsDataType(comptime T: type) type { .atime_ms = (@as(f64, @floatFromInt(@max(atime.tv_sec, 0))) * std.time.ms_per_s) + (@as(f64, @floatFromInt(@as(usize, @intCast(@max(atime.tv_nsec, 0))))) / std.time.ns_per_ms), .mtime_ms = (@as(f64, @floatFromInt(@max(mtime.tv_sec, 0))) * std.time.ms_per_s) + (@as(f64, @floatFromInt(@as(usize, @intCast(@max(mtime.tv_nsec, 0))))) / std.time.ns_per_ms), .ctime_ms = (@as(f64, @floatFromInt(@max(ctime.tv_sec, 0))) * std.time.ms_per_s) + (@as(f64, @floatFromInt(@as(usize, @intCast(@max(ctime.tv_nsec, 0))))) / std.time.ns_per_ms), - .atime = @as(Date, @enumFromInt(@as(u64, @intCast(@max(atime.tv_sec, 0))))), - .mtime = @as(Date, @enumFromInt(@as(u64, @intCast(@max(mtime.tv_sec, 0))))), - .ctime = @as(Date, @enumFromInt(@as(u64, @intCast(@max(ctime.tv_sec, 0))))), + .atime = @as(Date, @enumFromInt(@as(u64, @intCast(@max(atime.tv_sec * std.time.ms_per_s, 0))))), + .mtime = @as(Date, @enumFromInt(@as(u64, @intCast(@max(mtime.tv_sec * std.time.ms_per_s, 0))))), + .ctime = @as(Date, @enumFromInt(@as(u64, @intCast(@max(ctime.tv_sec * std.time.ms_per_s, 0))))), // Linux doesn't include this info in stat // maybe it does in statx, but do you really need birthtime? If you do please file an issue. @@ -1471,10 +1471,42 @@ pub const Stats = union(enum) { return this; } - pub fn constructor(globalThis: *JSC.JSGlobalObject, _: *JSC.CallFrame) callconv(.C) ?*Stats { - globalThis.throw("Stats is not constructable. use fs.stat()", .{}); + pub fn constructor(globalThis: *JSC.JSGlobalObject, callFrame: *JSC.CallFrame) callconv(.C) ?*Stats { + // dev, mode, nlink, uid, gid, rdev, blksize, ino, size, blocks, atimeMs, mtimeMs, ctimeMs, birthtimeMs + var args = callFrame.argumentsPtr()[0..@min(callFrame.argumentsCount(), 14)]; - return null; + var this = globalThis.allocator().create(Stats) catch { + globalThis.throwOutOfMemory(); + return null; + }; + + var atime_ms = if (args.len > 10 and args[10].isNumber()) args[10].asNumber() else 0; + var mtime_ms = if (args.len > 11 and args[11].isNumber()) args[11].asNumber() else 0; + var ctime_ms = if (args.len > 12 and args[12].isNumber()) args[12].asNumber() else 0; + var birthtime_ms = if (args.len > 13 and args[13].isNumber()) args[13].toInt32() else 0; + this.* = .{ + .small = StatsDataType(i32){ + .dev = if (args.len > 0 and args[0].isNumber()) args[0].toInt32() else 0, + .mode = if (args.len > 1 and args[1].isNumber()) args[1].toInt32() else 0, + .nlink = if (args.len > 2 and args[2].isNumber()) args[2].toInt32() else 0, + .uid = if (args.len > 3 and args[3].isNumber()) args[3].toInt32() else 0, + .gid = if (args.len > 4 and args[4].isNumber()) args[4].toInt32() else 0, + .rdev = if (args.len > 5 and args[5].isNumber()) args[5].toInt32() else 0, + .blksize = if (args.len > 6 and args[6].isNumber()) args[6].toInt32() else 0, + .ino = if (args.len > 7 and args[7].isNumber()) args[7].toInt32() else 0, + .size = if (args.len > 8 and args[8].isNumber()) args[8].toInt32() else 0, + .blocks = if (args.len > 9 and args[9].isNumber()) args[9].toInt32() else 0, + .atime_ms = (atime_ms), + .mtime_ms = (mtime_ms), + .ctime_ms = (ctime_ms), + .birthtime_ms = birthtime_ms, + .atime = @enumFromInt(@as(u64, @intFromFloat(atime_ms))), + .mtime = @enumFromInt(@as(u64, @intFromFloat(mtime_ms))), + .ctime = @enumFromInt(@as(u64, @intFromFloat(ctime_ms))), + .birthtime = @enumFromInt(@as(u64, @intCast(birthtime_ms))), + }, + }; + return this; } comptime { |