diff options
author | 2022-03-18 04:38:49 -0700 | |
---|---|---|
committer | 2022-03-18 04:38:49 -0700 | |
commit | 5d39d3a3b225930f3f469268925300cbb1a37e70 (patch) | |
tree | f01c79aad40e22b2103cee611a55b4cada79c0af /src | |
parent | 07379ecb4efd4a8b8184f1aff1e456173e2282b2 (diff) | |
download | bun-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
Diffstat (limited to 'src')
-rw-r--r-- | src/resolver/resolver.zig | 15 |
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(); |