diff options
author | 2021-10-30 23:14:14 -0700 | |
---|---|---|
committer | 2021-10-30 23:14:14 -0700 | |
commit | 51e55f4b6e6a7060ce8a66397c6f5b2dd1619943 (patch) | |
tree | e9bf679af0ddac457580dbad1e84213935dcc9d3 /src/javascript/jsc/javascript.zig | |
parent | f30527b6d951ee68b214ecf79f84c5b46e85e4f2 (diff) | |
download | bun-51e55f4b6e6a7060ce8a66397c6f5b2dd1619943.tar.gz bun-51e55f4b6e6a7060ce8a66397c6f5b2dd1619943.tar.zst bun-51e55f4b6e6a7060ce8a66397c6f5b2dd1619943.zip |
[Bun.js] Partially fix loading Node.js fallback modules
Diffstat (limited to 'src/javascript/jsc/javascript.zig')
-rw-r--r-- | src/javascript/jsc/javascript.zig | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/src/javascript/jsc/javascript.zig b/src/javascript/jsc/javascript.zig index bdcebd90b..d942baeb4 100644 --- a/src/javascript/jsc/javascript.zig +++ b/src/javascript/jsc/javascript.zig @@ -988,7 +988,10 @@ pub const VirtualMachine = struct { vm.bundler.resolver.log = old; } - const macro_remappings = if (vm.macro_mode or !vm.has_any_macro_remappings) + // this should be a cheap lookup because 24 bytes == 8 * 3 so it's read 3 machine words + const is_node_override = specifier.len > "/bun-vfs/node_modules/".len and strings.eqlComptimeIgnoreLen(specifier[0.."/bun-vfs/node_modules/".len], "/bun-vfs/node_modules/"); + + const macro_remappings = if (vm.macro_mode or !vm.has_any_macro_remappings or is_node_override) MacroRemap{} else brk: { if (package_json) |pkg| { @@ -1001,6 +1004,8 @@ pub const VirtualMachine = struct { break :brk resolve_result.getMacroRemappings(); }; + var fallback_source: logger.Source = undefined; + var parse_options = Bundler.ParseOptions{ .allocator = allocator, .path = path, @@ -1012,6 +1017,14 @@ pub const VirtualMachine = struct { .jsx = vm.bundler.options.jsx, }; + if (is_node_override) { + if (NodeFallbackModules.contentsFromPath(specifier)) |code| { + const fallback_path = Fs.Path.initWithNamespace(specifier, "node"); + fallback_source = logger.Source{ .path = fallback_path, .contents = code, .key_path = fallback_path }; + parse_options.virtual_source = &fallback_source; + } + } + var parse_result = vm.bundler.parse( parse_options, null, @@ -1090,6 +1103,10 @@ pub const VirtualMachine = struct { ret.result = null; ret.path = specifier; return; + } else if (specifier.len > "/bun-vfs/node_modules/".len and strings.eqlComptimeIgnoreLen(specifier[0.."/bun-vfs/node_modules/".len], "/bun-vfs/node_modules/")) { + ret.result = null; + ret.path = specifier; + return; } const is_special_source = strings.eqlComptime(source, main_file_name) or js_ast.Macro.isMacroPath(source); @@ -1111,7 +1128,7 @@ pub const VirtualMachine = struct { const result_path = result.pathConst() orelse return error.ModuleNotFound; vm.resolved_count += 1; - if (vm.node_modules != null and result.isLikelyNodeModule()) { + if (vm.node_modules != null and !strings.eqlComptime(result_path.namespace, "node") and result.isLikelyNodeModule()) { const node_modules_bundle = vm.node_modules.?; node_module_checker: { |