aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-12-16 00:43:39 -0800
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-12-16 00:43:39 -0800
commit873cacc15aaeac0d5b91a0a7605726226c8fa494 (patch)
tree67ad3f93c5a6b730aa14aa1cb1705accd984e246 /src
parent55ff681976f7bae5a428c409061991c07fa492e7 (diff)
downloadbun-873cacc15aaeac0d5b91a0a7605726226c8fa494.tar.gz
bun-873cacc15aaeac0d5b91a0a7605726226c8fa494.tar.zst
bun-873cacc15aaeac0d5b91a0a7605726226c8fa494.zip
[bundler] Fix edgecase where certain modules would load unbundled versions
Some packages have many `package.json` files with no `name` in them, often to indicate `sideEffects` or change `exports`. When bundling node_modules, we need a name to map a package back to the list of bundled packages.
Diffstat (limited to 'src')
-rw-r--r--src/resolver/dir_info.zig2
-rw-r--r--src/resolver/resolver.zig17
2 files changed, 17 insertions, 2 deletions
diff --git a/src/resolver/dir_info.zig b/src/resolver/dir_info.zig
index 396413327..b79067a48 100644
--- a/src/resolver/dir_info.zig
+++ b/src/resolver/dir_info.zig
@@ -18,6 +18,8 @@ enclosing_browser_scope: Index = allocators.NotFound,
package_json_for_browser_field: ?*const PackageJSON = null,
enclosing_tsconfig_json: ?*const TSConfigJSON = null,
+/// package.json used for bundling
+/// it's the deepest one in the hierarchy with a "name" field
enclosing_package_json: ?*PackageJSON = null,
abs_path: string = "",
diff --git a/src/resolver/resolver.zig b/src/resolver/resolver.zig
index bc9d98832..1b6e049f4 100644
--- a/src/resolver/resolver.zig
+++ b/src/resolver/resolver.zig
@@ -707,6 +707,10 @@ pub const Resolver = struct {
var iter = result.path_pair.iter();
while (iter.next()) |path| {
var dir: *DirInfo = (r.readDirInfo(path.name.dir) catch continue) orelse continue;
+ if (result.package_json) |existing| {
+ if (existing.name.len == 0) result.package_json = null;
+ }
+
result.package_json = result.package_json orelse dir.enclosing_package_json;
if (dir.enclosing_tsconfig_json) |tsconfig| {
@@ -2570,7 +2574,14 @@ pub const Resolver = struct {
info.enclosing_browser_scope = parent.?.enclosing_browser_scope;
info.package_json_for_browser_field = parent.?.package_json_for_browser_field;
info.enclosing_tsconfig_json = parent.?.enclosing_tsconfig_json;
- info.enclosing_package_json = parent.?.package_json orelse parent.?.enclosing_package_json;
+
+ if (parent.?.package_json) |parent_package_json| {
+ if (parent_package_json.name.len > 0) {
+ info.enclosing_package_json = parent_package_json;
+ }
+ }
+
+ info.enclosing_package_json = info.enclosing_package_json orelse parent.?.enclosing_package_json;
// Make sure "absRealPath" is the real path of the directory (resolving any symlinks)
if (!r.opts.preserve_symlinks) {
@@ -2612,7 +2623,9 @@ pub const Resolver = struct {
info.enclosing_browser_scope = result.index;
info.package_json_for_browser_field = pkg;
}
- info.enclosing_package_json = pkg;
+
+ if (pkg.name.len > 0)
+ info.enclosing_package_json = pkg;
if (r.debug_logs) |*logs| {
logs.addNoteFmt("Resolved package.json in \"{s}\"", .{