diff options
| author | 2022-03-30 20:50:12 -0700 | |
|---|---|---|
| committer | 2022-03-30 20:50:12 -0700 | |
| commit | ab7183217a33323c991ab5c3b04caec32954d9ee (patch) | |
| tree | 69a0dbeaf1109f73b8a8b556c321dd2af25ce752 /src/javascript/jsc/node | |
| parent | 47a9a452d8ff4d6876d389df2205507a383d5dc8 (diff) | |
| download | bun-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.zig | 20 |
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; + }, } } }; |
