Skip to content

Commit 347dbc6

Browse files
committed
Automatically rewrite TS import paths from .jsx? -> .tsx? when .jsx? is not found
This was already partially implemented but it was returning filenames instead of absolute paths. This matches the behavior from microsoft/TypeScript#4595.
1 parent b2a6f3f commit 347dbc6

File tree

1 file changed

+10
-8
lines changed

1 file changed

+10
-8
lines changed

src/resolver/resolver.zig

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2267,14 +2267,15 @@ pub fn NewResolver(cache_files: bool) type {
22672267
// https://github.com/microsoft/TypeScript/issues/4595
22682268
if (strings.lastIndexOfChar(base, '.')) |last_dot| {
22692269
const ext = base[last_dot..base.len];
2270-
if (strings.eql(ext, ".js") or strings.eql(ext, ".jsx")) {
2270+
if (strings.eqlComptime(ext, ".js") or strings.eqlComptime(ext, ".jsx")) {
22712271
const segment = base[0..last_dot];
2272-
std.mem.copy(u8, &load_as_file_buf, segment);
2272+
var tail = load_as_file_buf[path.len - base.len ..];
2273+
std.mem.copy(u8, tail, segment);
22732274

22742275
const exts = comptime [_]string{ ".ts", ".tsx" };
22752276

2276-
for (exts) |ext_to_replace| {
2277-
var buffer = load_as_file_buf[0 .. segment.len + ext_to_replace.len];
2277+
inline for (exts) |ext_to_replace| {
2278+
var buffer = tail[0 .. segment.len + ext_to_replace.len];
22782279
std.mem.copy(u8, buffer[segment.len..buffer.len], ext_to_replace);
22792280

22802281
if (entries.get(buffer)) |query| {
@@ -2285,10 +2286,11 @@ pub fn NewResolver(cache_files: bool) type {
22852286

22862287
return LoadResult{
22872288
.path = brk: {
2288-
query.entry.abs_path = if (query.entry.abs_path.isEmpty())
2289-
PathString.init(r.fs.dirname_store.append(@TypeOf(buffer), buffer) catch unreachable)
2290-
else
2291-
query.entry.abs_path;
2289+
if (query.entry.abs_path.isEmpty()) {
2290+
// Should already have a trailing slash so we shouldn't need to worry.
2291+
var parts = [_]string{ query.entry.dir, buffer };
2292+
query.entry.abs_path = PathString.init(r.fs.filename_store.append(@TypeOf(parts), parts) catch unreachable);
2293+
}
22922294

22932295
break :brk query.entry.abs_path.slice();
22942296
},

0 commit comments

Comments
 (0)