diff options
author | 2023-06-26 12:49:20 -0700 | |
---|---|---|
committer | 2023-06-26 12:49:20 -0700 | |
commit | a732999da578ca92a1d9e633036225a32e77529d (patch) | |
tree | ca8341d01b087c7d200d54fef82eeff2fdbe87fe /src/bun.js/module_loader.zig | |
parent | 6d01e6e367fd518884883ce8194c3c7322043639 (diff) | |
download | bun-a732999da578ca92a1d9e633036225a32e77529d.tar.gz bun-a732999da578ca92a1d9e633036225a32e77529d.tar.zst bun-a732999da578ca92a1d9e633036225a32e77529d.zip |
Runtime support for `__esModule` annotations (#3393)
* Runtime support for `__esModule` annotations
* Ignore `__esModule` annotation when `"type": "module"` is set
---------
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
Diffstat (limited to 'src/bun.js/module_loader.zig')
-rw-r--r-- | src/bun.js/module_loader.zig | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/bun.js/module_loader.zig b/src/bun.js/module_loader.zig index 5838d8a49..b25bb4b10 100644 --- a/src/bun.js/module_loader.zig +++ b/src/bun.js/module_loader.zig @@ -1225,6 +1225,25 @@ pub const ModuleLoader = struct { return resolved_source; } + // Pass along package.json type "module" if set. + const tag = brk: { + if (parse_result.ast.exports_kind == .cjs and parse_result.source.path.isFile()) { + var actual_package_json: *PackageJSON = package_json orelse brk2: { + // this should already be cached virtually always so it's fine to do this + var dir_info = (jsc_vm.bundler.resolver.readDirInfo(parse_result.source.path.name.dir) catch null) orelse + break :brk .javascript; + + break :brk2 dir_info.package_json orelse dir_info.enclosing_package_json; + } orelse break :brk .javascript; + + if (actual_package_json.module_type == .esm) { + break :brk ResolvedSource.Tag.package_json_type_module; + } + } + + break :brk ResolvedSource.Tag.javascript; + }; + return .{ .allocator = null, .source_code = bun.String.createLatin1(printer.ctx.getWritten()), @@ -1245,6 +1264,8 @@ pub const ModuleLoader = struct { // having JSC own the memory causes crashes .hash = 0, + + .tag = tag, }; }, // provideFetch() should be called |