aboutsummaryrefslogtreecommitdiff
path: root/src/resolver/package_json.zig
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-04-28 14:21:18 -0700
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-04-28 14:21:18 -0700
commit26d81fc5ba442d60ce2c5203196f4f0343b75f35 (patch)
tree0ac71554650aee819c5febf914bab8cf38750e30 /src/resolver/package_json.zig
parent396416a91fed5166f3c4e9c340a3f2af5367bb78 (diff)
downloadbun-26d81fc5ba442d60ce2c5203196f4f0343b75f35.tar.gz
bun-26d81fc5ba442d60ce2c5203196f4f0343b75f35.tar.zst
bun-26d81fc5ba442d60ce2c5203196f4f0343b75f35.zip
[resolver] Propagate module type from package.json `"exports"` when possible
Diffstat (limited to 'src/resolver/package_json.zig')
-rw-r--r--src/resolver/package_json.zig23
1 files changed, 21 insertions, 2 deletions
diff --git a/src/resolver/package_json.zig b/src/resolver/package_json.zig
index ce9695008..75b7a9e00 100644
--- a/src/resolver/package_json.zig
+++ b/src/resolver/package_json.zig
@@ -1247,6 +1247,7 @@ pub const ESModule = struct {
debug_logs: ?*resolver.DebugLogs = null,
conditions: ConditionsMap,
allocator: std.mem.Allocator,
+ module_type: *options.ModuleType = undefined,
pub const Resolution = struct {
status: Status = Status.Undefined,
@@ -1769,18 +1770,28 @@ pub const ESModule = struct {
const slice = object.list.slice();
const keys = slice.items(.key);
for (keys, 0..) |key, i| {
- if (strings.eqlComptime(key, "default") or r.conditions.contains(key)) {
+ if (r.conditions.contains(key)) {
if (r.debug_logs) |log| {
log.addNoteFmt("The key \"{s}\" matched", .{key});
}
+ var prev_module_type = r.module_type.*;
var result = r.resolveTarget(package_url, slice.items(.value)[i], subpath, internal, pattern);
if (result.status.isUndefined()) {
did_find_map_entry = true;
last_map_entry_i = i;
+ r.module_type.* = prev_module_type;
continue;
}
+ if (strings.eqlComptime(key, "import")) {
+ r.module_type.* = .esm;
+ }
+
+ if (strings.eqlComptime(key, "require")) {
+ r.module_type.* = .cjs;
+ }
+
return result;
}
@@ -1865,6 +1876,7 @@ pub const ESModule = struct {
for (array) |targetValue| {
// Let resolved be the result, continuing the loop on any Invalid Package Target error.
+ var prev_module_type = r.module_type.*;
const result = r.resolveTarget(package_url, targetValue, subpath, internal, pattern);
if (result.status == .InvalidPackageTarget or result.status == .Null) {
last_debug = result.debug;
@@ -1872,6 +1884,7 @@ pub const ESModule = struct {
}
if (result.status.isUndefined()) {
+ r.module_type.* = prev_module_type;
continue;
}
@@ -2007,8 +2020,14 @@ pub const ESModule = struct {
const slice = map.list.slice();
const keys = slice.items(.key);
for (keys, 0..) |map_key, i| {
- if (strings.eqlComptime(map_key, "default") or r.conditions.contains(map_key)) {
+ if (r.conditions.contains(map_key)) {
if (r.resolveTargetReverse(query, key, slice.items(.value)[i], kind)) |result| {
+ if (strings.eqlComptime(map_key, "import")) {
+ r.module_type.* = .esm;
+ } else if (strings.eqlComptime(map_key, "require")) {
+ r.module_type.* = .cjs;
+ }
+
return result;
}
}