aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-03-18 04:38:49 -0700
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-03-18 04:38:49 -0700
commit5d39d3a3b225930f3f469268925300cbb1a37e70 (patch)
treef01c79aad40e22b2103cee611a55b4cada79c0af
parent07379ecb4efd4a8b8184f1aff1e456173e2282b2 (diff)
downloadbun-5d39d3a3b225930f3f469268925300cbb1a37e70.tar.gz
bun-5d39d3a3b225930f3f469268925300cbb1a37e70.tar.zst
bun-5d39d3a3b225930f3f469268925300cbb1a37e70.zip
[resolver] Fix edgecase where remapping a tsx -> js import path produced an invalid file path
-rw-r--r--src/resolver/resolver.zig15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/resolver/resolver.zig b/src/resolver/resolver.zig
index 8d6032b27..be10ed7fe 100644
--- a/src/resolver/resolver.zig
+++ b/src/resolver/resolver.zig
@@ -2422,11 +2422,11 @@ pub const Resolver = struct {
var tail = load_as_file_buf[path.len - base.len ..];
std.mem.copy(u8, tail, segment);
- const exts = comptime [_]string{ ".ts", ".tsx" };
+ const exts = .{ ".ts", ".tsx" };
inline for (exts) |ext_to_replace| {
var buffer = tail[0 .. segment.len + ext_to_replace.len];
- std.mem.copy(u8, buffer[segment.len..buffer.len], ext_to_replace);
+ buffer[segment.len..buffer.len][0..ext_to_replace.len].* = ext_to_replace.*;
if (entries.get(buffer)) |query| {
if (query.entry.kind(rfs) == .file) {
@@ -2437,9 +2437,14 @@ pub const Resolver = struct {
return LoadResult{
.path = brk: {
if (query.entry.abs_path.isEmpty()) {
- // Should already have a trailing slash so we shouldn't need to worry.
- var parts = [_]string{ query.entry.dir, buffer };
- query.entry.abs_path = PathString.init(r.fs.filename_store.append(@TypeOf(parts), parts) catch unreachable);
+ if (query.entry.dir.len > 0 and query.entry.dir[query.entry.dir.len - 1] == std.fs.path.sep) {
+ var parts = [_]string{ query.entry.dir, buffer };
+ query.entry.abs_path = PathString.init(r.fs.filename_store.append(@TypeOf(parts), parts) catch unreachable);
+ // the trailing path CAN be missing here
+ } else {
+ var parts = [_]string{ query.entry.dir, "/", buffer };
+ query.entry.abs_path = PathString.init(r.fs.filename_store.append(@TypeOf(parts), parts) catch unreachable);
+ }
}
break :brk query.entry.abs_path.slice();