diff options
Diffstat (limited to 'src/bun.js')
-rw-r--r-- | src/bun.js/api/JSBundler.zig | 7 | ||||
-rw-r--r-- | src/bun.js/bindings/JSBundlerPlugin.cpp | 4 |
2 files changed, 9 insertions, 2 deletions
diff --git a/src/bun.js/api/JSBundler.zig b/src/bun.js/api/JSBundler.zig index 8e85f1190..888e94b1f 100644 --- a/src/bun.js/api/JSBundler.zig +++ b/src/bun.js/api/JSBundler.zig @@ -893,6 +893,7 @@ pub const JSBundler = struct { importer: *const ZigString, context: *anyopaque, u8, + resolve_dir: *const ZigString, ) void; pub fn hasAnyMatches( @@ -949,7 +950,11 @@ pub const JSBundler = struct { ZigString.fromUTF8(namespace); const path_string = ZigString.fromUTF8(path); const importer_string = ZigString.fromUTF8(importer); - JSBundlerPlugin__matchOnResolve(globalThis, this, &namespace_string, &path_string, &importer_string, context, @enumToInt(import_record_kind)); + // TODO: improve this for virtual modules + const resolve_dir = std.fs.path.dirname(importer) orelse "/"; + std.debug.print("{s}\n", .{resolve_dir}); + const resolve_dir_string = ZigString.fromUTF8(resolve_dir); + JSBundlerPlugin__matchOnResolve(globalThis, this, &namespace_string, &path_string, &importer_string, context, @enumToInt(import_record_kind), &resolve_dir_string); } pub fn addPlugin( diff --git a/src/bun.js/bindings/JSBundlerPlugin.cpp b/src/bun.js/bindings/JSBundlerPlugin.cpp index e93556963..de936ab05 100644 --- a/src/bun.js/bindings/JSBundlerPlugin.cpp +++ b/src/bun.js/bindings/JSBundlerPlugin.cpp @@ -315,7 +315,7 @@ extern "C" void JSBundlerPlugin__matchOnLoad(JSC::JSGlobalObject* globalObject, } } -extern "C" void JSBundlerPlugin__matchOnResolve(JSC::JSGlobalObject* globalObject, Bun::JSBundlerPlugin* plugin, const ZigString* namespaceString, const ZigString* path, const ZigString* importer, void* context, uint8_t kindId) +extern "C" void JSBundlerPlugin__matchOnResolve(JSC::JSGlobalObject* globalObject, Bun::JSBundlerPlugin* plugin, const ZigString* namespaceString, const ZigString* path, const ZigString* importer, void* context, uint8_t kindId, const ZigString* resolveDir) { WTF::String namespaceStringStr = namespaceString ? Zig::toStringCopy(*namespaceString) : WTF::String("file"_s); if (namespaceStringStr.length() == 0) { @@ -323,6 +323,7 @@ extern "C" void JSBundlerPlugin__matchOnResolve(JSC::JSGlobalObject* globalObjec } WTF::String pathStr = path ? Zig::toStringCopy(*path) : WTF::String(); WTF::String importerStr = importer ? Zig::toStringCopy(*importer) : WTF::String(); + WTF::String resolveDirStr = resolveDir ? Zig::toStringCopy(*resolveDir) : WTF::String(); auto& vm = globalObject->vm(); JSFunction* function = plugin->onResolveFunction.get(plugin); @@ -341,6 +342,7 @@ extern "C" void JSBundlerPlugin__matchOnResolve(JSC::JSGlobalObject* globalObjec arguments.append(JSC::jsString(vm, importerStr)); arguments.append(WRAP_BUNDLER_PLUGIN(context)); arguments.append(JSC::jsNumber(kindId)); + arguments.append(JSC::jsString(vm, resolveDirStr)); auto result = call(globalObject, function, callData, plugin, arguments); |