aboutsummaryrefslogtreecommitdiff
path: root/src/javascript/jsc/node
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-03-30 20:50:12 -0700
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-03-30 20:50:12 -0700
commitab7183217a33323c991ab5c3b04caec32954d9ee (patch)
tree69a0dbeaf1109f73b8a8b556c321dd2af25ce752 /src/javascript/jsc/node
parent47a9a452d8ff4d6876d389df2205507a383d5dc8 (diff)
downloadbun-ab7183217a33323c991ab5c3b04caec32954d9ee.tar.gz
bun-ab7183217a33323c991ab5c3b04caec32954d9ee.tar.zst
bun-ab7183217a33323c991ab5c3b04caec32954d9ee.zip
[bun.js] Support `file://` URLs in node fs
Diffstat (limited to 'src/javascript/jsc/node')
-rw-r--r--src/javascript/jsc/node/types.zig20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/javascript/jsc/node/types.zig b/src/javascript/jsc/node/types.zig
index ea57dc583..9ad49e756 100644
--- a/src/javascript/jsc/node/types.zig
+++ b/src/javascript/jsc/node/types.zig
@@ -14,6 +14,7 @@ const Buffer = JSC.MarkedArrayBuffer;
const IdentityContext = @import("../../../identity_context.zig").IdentityContext;
const logger = @import("../../../logger.zig");
const Fs = @import("../../../fs.zig");
+const URL = @import("../../../url.zig").URL;
const Shimmer = @import("../bindings/shimmer.zig").Shimmer;
const is_bindgen: bool = std.meta.globalOption("bindgen", bool) orelse false;
const meta = bun.meta;
@@ -335,7 +336,24 @@ pub const PathLike = union(Tag) {
return PathLike{ .string = PathString.init(zig_str.slice()) };
},
- else => return null,
+ else => {
+ if (arg.as(JSC.DOMURL)) |domurl| {
+ var zig_str = domurl.pathname();
+ if (!Valid.pathString(zig_str, ctx, exception)) return null;
+
+ JSC.C.JSValueProtect(ctx, arg.asObjectRef());
+ arguments.eat();
+
+ if (zig_str.is16Bit()) {
+ var printed = std.mem.span(std.fmt.allocPrintZ(arguments.arena.allocator(), "{}", .{zig_str}) catch unreachable);
+ return PathLike{ .string = PathString.init(printed.ptr[0 .. printed.len + 1]) };
+ }
+
+ return PathLike{ .string = PathString.init(zig_str.slice()) };
+ }
+
+ return null;
+ },
}
}
};