From 3aa7964f9a263dffcfee8bb4297320bb83c847d3 Mon Sep 17 00:00:00 2001 From: Claude Bot Date: Thu, 19 Feb 2026 09:55:22 +0000 Subject: [PATCH] fix: merge all inheritable fields in tsconfig references extends chain The extends merge loop for referenced configs was only copying base_url and paths. Now also merges JSX settings, emit_decorator_metadata, and preserve_imports_not_used_as_values, matching the root extends merge. Co-Authored-By: Claude --- src/resolver/resolver.zig | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/resolver/resolver.zig b/src/resolver/resolver.zig index c5d1851f7c..80ef737416 100644 --- a/src/resolver/resolver.zig +++ b/src/resolver/resolver.zig @@ -4299,12 +4299,21 @@ pub const Resolver = struct { } } // Merge the referenced config's extends chain + // (same fields as the root extends merge) var ref_merged = ref_parent_configs.pop().?; while (ref_parent_configs.pop()) |ref_parent| { + ref_merged.emit_decorator_metadata = ref_merged.emit_decorator_metadata or ref_parent.emit_decorator_metadata; if (ref_parent.base_url.len > 0) { ref_merged.base_url = ref_parent.base_url; ref_merged.base_url_for_paths = ref_parent.base_url_for_paths; } + ref_merged.jsx = ref_parent.mergeJSX(ref_merged.jsx); + ref_merged.jsx_flags.setUnion(ref_parent.jsx_flags); + + if (ref_parent.preserve_imports_not_used_as_values) |value| { + ref_merged.preserve_imports_not_used_as_values = value; + } + var ref_iter = ref_parent.paths.iterator(); while (ref_iter.next()) |c| { ref_merged.paths.put(c.key_ptr.*, c.value_ptr.*) catch unreachable; @@ -4348,11 +4357,16 @@ pub const Resolver = struct { merged_config.base_url_for_paths = ref_merged.base_url_for_paths; } - // Merge JSX settings from referenced configs + // Merge other settings from referenced configs merged_config.jsx = ref_merged.mergeJSX(merged_config.jsx); merged_config.jsx_flags.setUnion(ref_merged.jsx_flags); - merged_config.emit_decorator_metadata = merged_config.emit_decorator_metadata or ref_merged.emit_decorator_metadata; + + if (ref_merged.preserve_imports_not_used_as_values) |value| { + if (merged_config.preserve_imports_not_used_as_values == null) { + merged_config.preserve_imports_not_used_as_values = value; + } + } } } }