diff --git a/build.zig b/build.zig
index 78872f74..c6b65029 100644
--- a/build.zig
+++ b/build.zig
@@ -168,22 +168,33 @@ fn common(
step: *std.Build.Step.Compile,
options: jsruntime.Options,
) !void {
- try jsruntime_pkgs.add(step, options);
- linkNetSurf(b, step);
+ const jsruntimemod = try jsruntime_pkgs.module(
+ b,
+ options,
+ step.root_module.optimize.?,
+ step.root_module.resolved_target.?,
+ );
+ step.root_module.addImport("jsruntime", jsruntimemod);
- // link mimalloc
- step.addObjectFile(b.path("vendor/mimalloc/out/libmimalloc.a"));
- step.addIncludePath(b.path("vendor/mimalloc/out/include"));
+ const netsurf = moduleNetSurf(b);
+ netsurf.addImport("jsruntime", jsruntimemod);
+ step.root_module.addImport("netsurf", netsurf);
}
-fn linkNetSurf(b: *std.Build, step: *std.Build.Step.Compile) void {
+fn moduleNetSurf(b: *std.Build) *std.Build.Module {
+ const mod = b.addModule("netsurf", .{
+ .root_source_file = b.path("src/netsurf/netsurf.zig"),
+ });
// iconv
- step.addObjectFile(b.path("vendor/libiconv/lib/libiconv.a"));
- step.addIncludePath(b.path("vendor/libiconv/include"));
+ mod.addObjectFile(b.path("vendor/libiconv/lib/libiconv.a"));
+ mod.addIncludePath(b.path("vendor/libiconv/include"));
+
+ // mimalloc
+ mod.addImport("mimalloc", moduleMimalloc(b));
// netsurf libs
const ns = "vendor/netsurf";
- step.addIncludePath(b.path(ns ++ "/include"));
+ mod.addIncludePath(b.path(ns ++ "/include"));
const libs: [4][]const u8 = .{
"libdom",
@@ -192,7 +203,20 @@ fn linkNetSurf(b: *std.Build, step: *std.Build.Step.Compile) void {
"libwapcaplet",
};
inline for (libs) |lib| {
- step.addObjectFile(b.path(ns ++ "/lib/" ++ lib ++ ".a"));
- step.addIncludePath(b.path(ns ++ "/" ++ lib ++ "/src"));
+ mod.addObjectFile(b.path(ns ++ "/lib/" ++ lib ++ ".a"));
+ mod.addIncludePath(b.path(ns ++ "/" ++ lib ++ "/src"));
}
+
+ return mod;
+}
+
+fn moduleMimalloc(b: *std.Build) *std.Build.Module {
+ const mod = b.addModule("mimalloc", .{
+ .root_source_file = b.path("src/mimalloc/mimalloc.zig"),
+ });
+
+ mod.addObjectFile(b.path("vendor/mimalloc/out/libmimalloc.a"));
+ mod.addIncludePath(b.path("vendor/mimalloc/out/include"));
+
+ return mod;
}
diff --git a/src/browser/browser.zig b/src/browser/browser.zig
index ecd5ebb2..c437b53e 100644
--- a/src/browser/browser.zig
+++ b/src/browser/browser.zig
@@ -21,7 +21,7 @@ const builtin = @import("builtin");
const Types = @import("root").Types;
-const parser = @import("../netsurf.zig");
+const parser = @import("netsurf");
const Loader = @import("loader.zig").Loader;
const Dump = @import("dump.zig");
const Mime = @import("mime.zig");
diff --git a/src/browser/dump.zig b/src/browser/dump.zig
index 44741525..7b705d1b 100644
--- a/src/browser/dump.zig
+++ b/src/browser/dump.zig
@@ -19,7 +19,7 @@
const std = @import("std");
const File = std.fs.File;
-const parser = @import("../netsurf.zig");
+const parser = @import("netsurf");
const Walker = @import("../dom/walker.zig").WalkerChildren;
// writer must be a std.io.Writer
diff --git a/src/css/libdom.zig b/src/css/libdom.zig
index 44307c63..21333726 100644
--- a/src/css/libdom.zig
+++ b/src/css/libdom.zig
@@ -18,7 +18,7 @@
const std = @import("std");
-const parser = @import("../netsurf.zig");
+const parser = @import("netsurf");
// Node implementation with Netsurf Libdom C lib.
pub const Node = struct {
diff --git a/src/css/libdom_test.zig b/src/css/libdom_test.zig
index 4cd267e0..c0cdbb3f 100644
--- a/src/css/libdom_test.zig
+++ b/src/css/libdom_test.zig
@@ -19,7 +19,7 @@
const std = @import("std");
const css = @import("css.zig");
const Node = @import("libdom.zig").Node;
-const parser = @import("../netsurf.zig");
+const parser = @import("netsurf");
const Matcher = struct {
const Nodes = std.ArrayList(Node);
diff --git a/src/dom/attribute.zig b/src/dom/attribute.zig
index a735171c..d85f87a0 100644
--- a/src/dom/attribute.zig
+++ b/src/dom/attribute.zig
@@ -22,7 +22,7 @@ const jsruntime = @import("jsruntime");
const Case = jsruntime.test_utils.Case;
const checkCases = jsruntime.test_utils.checkCases;
-const parser = @import("../netsurf.zig");
+const parser = @import("netsurf");
const Node = @import("node.zig").Node;
const DOMException = @import("exceptions.zig").DOMException;
diff --git a/src/dom/cdata_section.zig b/src/dom/cdata_section.zig
index a17e8317..c8ff6107 100644
--- a/src/dom/cdata_section.zig
+++ b/src/dom/cdata_section.zig
@@ -18,7 +18,7 @@
const std = @import("std");
-const parser = @import("../netsurf.zig");
+const parser = @import("netsurf");
const Text = @import("text.zig").Text;
diff --git a/src/dom/character_data.zig b/src/dom/character_data.zig
index 8ba6e266..b195b921 100644
--- a/src/dom/character_data.zig
+++ b/src/dom/character_data.zig
@@ -23,7 +23,7 @@ const Case = jsruntime.test_utils.Case;
const checkCases = jsruntime.test_utils.checkCases;
const generate = @import("../generate.zig");
-const parser = @import("../netsurf.zig");
+const parser = @import("netsurf");
const Node = @import("node.zig").Node;
const Comment = @import("comment.zig").Comment;
diff --git a/src/dom/comment.zig b/src/dom/comment.zig
index e82c51bc..fe4111bc 100644
--- a/src/dom/comment.zig
+++ b/src/dom/comment.zig
@@ -17,7 +17,7 @@
// along with this program. If not, see .
const std = @import("std");
-const parser = @import("../netsurf.zig");
+const parser = @import("netsurf");
const jsruntime = @import("jsruntime");
const Case = jsruntime.test_utils.Case;
diff --git a/src/dom/css.zig b/src/dom/css.zig
index 50c262e4..0432e83e 100644
--- a/src/dom/css.zig
+++ b/src/dom/css.zig
@@ -18,7 +18,7 @@
const std = @import("std");
-const parser = @import("../netsurf.zig");
+const parser = @import("netsurf");
const css = @import("../css/css.zig");
const Node = @import("../css/libdom.zig").Node;
diff --git a/src/dom/document.zig b/src/dom/document.zig
index 0741b1d9..6e12c704 100644
--- a/src/dom/document.zig
+++ b/src/dom/document.zig
@@ -18,7 +18,7 @@
const std = @import("std");
-const parser = @import("../netsurf.zig");
+const parser = @import("netsurf");
const jsruntime = @import("jsruntime");
const Case = jsruntime.test_utils.Case;
diff --git a/src/dom/document_fragment.zig b/src/dom/document_fragment.zig
index 08d99165..574e8eb1 100644
--- a/src/dom/document_fragment.zig
+++ b/src/dom/document_fragment.zig
@@ -18,7 +18,7 @@
const std = @import("std");
-const parser = @import("../netsurf.zig");
+const parser = @import("netsurf");
const jsruntime = @import("jsruntime");
const Case = jsruntime.test_utils.Case;
diff --git a/src/dom/document_type.zig b/src/dom/document_type.zig
index 23c66723..cd40a732 100644
--- a/src/dom/document_type.zig
+++ b/src/dom/document_type.zig
@@ -18,7 +18,7 @@
const std = @import("std");
-const parser = @import("../netsurf.zig");
+const parser = @import("netsurf");
const Node = @import("node.zig").Node;
diff --git a/src/dom/element.zig b/src/dom/element.zig
index fc77d95e..8ef456a7 100644
--- a/src/dom/element.zig
+++ b/src/dom/element.zig
@@ -18,7 +18,7 @@
const std = @import("std");
-const parser = @import("../netsurf.zig");
+const parser = @import("netsurf");
const jsruntime = @import("jsruntime");
const Case = jsruntime.test_utils.Case;
diff --git a/src/dom/event_target.zig b/src/dom/event_target.zig
index 2dd7dcae..6f8f2f8f 100644
--- a/src/dom/event_target.zig
+++ b/src/dom/event_target.zig
@@ -24,7 +24,8 @@ const JSObjectID = jsruntime.JSObjectID;
const Case = jsruntime.test_utils.Case;
const checkCases = jsruntime.test_utils.checkCases;
-const parser = @import("../netsurf.zig");
+const parser = @import("netsurf");
+const event_handler = @import("../events/event.zig").event_handler;
const DOMException = @import("exceptions.zig").DOMException;
const Nod = @import("node.zig");
@@ -74,6 +75,7 @@ pub const EventTarget = struct {
eventType,
cbk,
capture orelse false,
+ event_handler,
);
}
diff --git a/src/dom/exceptions.zig b/src/dom/exceptions.zig
index ba3952a4..209f4345 100644
--- a/src/dom/exceptions.zig
+++ b/src/dom/exceptions.zig
@@ -23,7 +23,7 @@ const jsruntime = @import("jsruntime");
const Case = jsruntime.test_utils.Case;
const checkCases = jsruntime.test_utils.checkCases;
-const parser = @import("../netsurf.zig");
+const parser = @import("netsurf");
// https://webidl.spec.whatwg.org/#idl-DOMException
pub const DOMException = struct {
diff --git a/src/dom/html_collection.zig b/src/dom/html_collection.zig
index 2565d0dd..298d6b72 100644
--- a/src/dom/html_collection.zig
+++ b/src/dom/html_collection.zig
@@ -18,7 +18,7 @@
const std = @import("std");
-const parser = @import("../netsurf.zig");
+const parser = @import("netsurf");
const jsruntime = @import("jsruntime");
const Case = jsruntime.test_utils.Case;
diff --git a/src/dom/implementation.zig b/src/dom/implementation.zig
index e4fff404..ec90014f 100644
--- a/src/dom/implementation.zig
+++ b/src/dom/implementation.zig
@@ -18,7 +18,7 @@
const std = @import("std");
-const parser = @import("../netsurf.zig");
+const parser = @import("netsurf");
const jsruntime = @import("jsruntime");
const Case = jsruntime.test_utils.Case;
diff --git a/src/dom/namednodemap.zig b/src/dom/namednodemap.zig
index 0e205d06..67840659 100644
--- a/src/dom/namednodemap.zig
+++ b/src/dom/namednodemap.zig
@@ -18,7 +18,7 @@
const std = @import("std");
-const parser = @import("../netsurf.zig");
+const parser = @import("netsurf");
const jsruntime = @import("jsruntime");
const Case = jsruntime.test_utils.Case;
diff --git a/src/dom/node.zig b/src/dom/node.zig
index 5dd0c811..f5f0ade2 100644
--- a/src/dom/node.zig
+++ b/src/dom/node.zig
@@ -26,7 +26,7 @@ const Variadic = jsruntime.Variadic;
const generate = @import("../generate.zig");
-const parser = @import("../netsurf.zig");
+const parser = @import("netsurf");
const EventTarget = @import("event_target.zig").EventTarget;
diff --git a/src/dom/nodelist.zig b/src/dom/nodelist.zig
index 1c8c2b61..be401902 100644
--- a/src/dom/nodelist.zig
+++ b/src/dom/nodelist.zig
@@ -18,7 +18,7 @@
const std = @import("std");
-const parser = @import("../netsurf.zig");
+const parser = @import("netsurf");
const jsruntime = @import("jsruntime");
const Case = jsruntime.test_utils.Case;
diff --git a/src/dom/processing_instruction.zig b/src/dom/processing_instruction.zig
index 3e23e11b..fc932ec5 100644
--- a/src/dom/processing_instruction.zig
+++ b/src/dom/processing_instruction.zig
@@ -22,7 +22,7 @@ const jsruntime = @import("jsruntime");
const Case = jsruntime.test_utils.Case;
const checkCases = jsruntime.test_utils.checkCases;
-const parser = @import("../netsurf.zig");
+const parser = @import("netsurf");
const Node = @import("node.zig").Node;
// https://dom.spec.whatwg.org/#processinginstruction
diff --git a/src/dom/text.zig b/src/dom/text.zig
index 4ac35ed5..39c22c47 100644
--- a/src/dom/text.zig
+++ b/src/dom/text.zig
@@ -23,7 +23,7 @@ const Case = jsruntime.test_utils.Case;
const checkCases = jsruntime.test_utils.checkCases;
const generate = @import("../generate.zig");
-const parser = @import("../netsurf.zig");
+const parser = @import("netsurf");
const CharacterData = @import("character_data.zig").CharacterData;
const CDATASection = @import("cdata_section.zig").CDATASection;
diff --git a/src/dom/token_list.zig b/src/dom/token_list.zig
index c046cc4f..0ed75997 100644
--- a/src/dom/token_list.zig
+++ b/src/dom/token_list.zig
@@ -18,7 +18,7 @@
const std = @import("std");
-const parser = @import("../netsurf.zig");
+const parser = @import("netsurf");
const jsruntime = @import("jsruntime");
const Case = jsruntime.test_utils.Case;
diff --git a/src/dom/walker.zig b/src/dom/walker.zig
index ad7ba5f7..6f2c2fba 100644
--- a/src/dom/walker.zig
+++ b/src/dom/walker.zig
@@ -18,7 +18,7 @@
const std = @import("std");
-const parser = @import("../netsurf.zig");
+const parser = @import("netsurf");
pub const Walker = union(enum) {
walkerDepthFirst: WalkerDepthFirst,
diff --git a/src/events/event.zig b/src/events/event.zig
index 5a295513..81cfefd4 100644
--- a/src/events/event.zig
+++ b/src/events/event.zig
@@ -22,10 +22,11 @@ const generate = @import("../generate.zig");
const jsruntime = @import("jsruntime");
const Callback = jsruntime.Callback;
+const CallbackResult = jsruntime.CallbackResult;
const Case = jsruntime.test_utils.Case;
const checkCases = jsruntime.test_utils.checkCases;
-const parser = @import("../netsurf.zig");
+const parser = @import("netsurf");
const DOMException = @import("../dom/exceptions.zig").DOMException;
const EventTarget = @import("../dom/event_target.zig").EventTarget;
@@ -33,6 +34,8 @@ const EventTargetUnion = @import("../dom/event_target.zig").Union;
const ProgressEvent = @import("../xhr/progress_event.zig").ProgressEvent;
+const log = std.log.scoped(.events);
+
// Event interfaces
pub const Interfaces = generate.Tuple(.{
Event,
@@ -236,3 +239,33 @@ pub fn testExecFn(
};
try checkCases(js_env, &remove);
}
+
+pub const event_handler = struct {
+ fn handle(event: ?*parser.Event, data: ?*anyopaque) callconv(.C) void {
+ if (data) |d| {
+ const func = parser.event_handler_cbk(d);
+
+ // TODO get the allocator by another way?
+ var res = CallbackResult.init(func.nat_ctx.alloc);
+ defer res.deinit();
+
+ if (event) |evt| {
+ func.trycall(.{
+ Event.toInterface(evt) catch unreachable,
+ }, &res) catch {};
+ } else {
+ func.trycall(.{event}, &res) catch {};
+ }
+
+ // in case of function error, we log the result and the trace.
+ if (!res.success) {
+ log.info("event handler error: {s}", .{res.result orelse "unknown"});
+ log.debug("{s}", .{res.stack orelse "no stack trace"});
+ }
+
+ // NOTE: we can not call func.deinit here
+ // b/c the handler can be called several times
+ // either on this dispatch event or in anoter one
+ }
+ }
+}.handle;
diff --git a/src/html/document.zig b/src/html/document.zig
index f3f2ad60..3b53e11e 100644
--- a/src/html/document.zig
+++ b/src/html/document.zig
@@ -18,7 +18,7 @@
const std = @import("std");
-const parser = @import("../netsurf.zig");
+const parser = @import("netsurf");
const jsruntime = @import("jsruntime");
const Case = jsruntime.test_utils.Case;
diff --git a/src/html/elements.zig b/src/html/elements.zig
index 29b0cef8..dacce92e 100644
--- a/src/html/elements.zig
+++ b/src/html/elements.zig
@@ -17,7 +17,7 @@
// along with this program. If not, see .
const std = @import("std");
-const parser = @import("../netsurf.zig");
+const parser = @import("netsurf");
const generate = @import("../generate.zig");
const jsruntime = @import("jsruntime");
diff --git a/src/html/window.zig b/src/html/window.zig
index cd3c74a0..5a34ae06 100644
--- a/src/html/window.zig
+++ b/src/html/window.zig
@@ -18,7 +18,7 @@
const std = @import("std");
-const parser = @import("../netsurf.zig");
+const parser = @import("netsurf");
const EventTarget = @import("../dom/event_target.zig").EventTarget;
diff --git a/src/main.zig b/src/main.zig
index 94e21e67..a402dc48 100644
--- a/src/main.zig
+++ b/src/main.zig
@@ -20,7 +20,7 @@ const std = @import("std");
const jsruntime = @import("jsruntime");
-const parser = @import("netsurf.zig");
+const parser = @import("netsurf");
const apiweb = @import("apiweb.zig");
const Window = @import("html/window.zig").Window;
diff --git a/src/main_shell.zig b/src/main_shell.zig
index 6eb6c11a..f766bdd7 100644
--- a/src/main_shell.zig
+++ b/src/main_shell.zig
@@ -20,7 +20,7 @@ const std = @import("std");
const jsruntime = @import("jsruntime");
-const parser = @import("netsurf.zig");
+const parser = @import("netsurf");
const apiweb = @import("apiweb.zig");
const Window = @import("html/window.zig").Window;
const storage = @import("storage/storage.zig");
diff --git a/src/mimalloc.zig b/src/mimalloc/mimalloc.zig
similarity index 100%
rename from src/mimalloc.zig
rename to src/mimalloc/mimalloc.zig
diff --git a/src/netsurf.zig b/src/netsurf/netsurf.zig
similarity index 98%
rename from src/netsurf.zig
rename to src/netsurf/netsurf.zig
index 2e8a75a4..839c42c8 100644
--- a/src/netsurf.zig
+++ b/src/netsurf/netsurf.zig
@@ -26,13 +26,9 @@ const c = @cImport({
@cInclude("events/event.h");
});
-const mimalloc = @import("mimalloc.zig");
+const mimalloc = @import("mimalloc");
const Callback = @import("jsruntime").Callback;
-const CallbackResult = @import("jsruntime").CallbackResult;
-const EventToInterface = @import("events/event.zig").Event.toInterface;
-
-const log = std.log.scoped(.netsurf);
// init initializes netsurf lib.
// init starts a mimalloc heap arena for the netsurf session. The caller must
@@ -527,41 +523,11 @@ pub const EventType = enum(u8) {
};
// EventHandler
-fn event_handler_cbk(data: *anyopaque) *Callback {
+pub fn event_handler_cbk(data: *anyopaque) *Callback {
const ptr: *align(@alignOf(*Callback)) anyopaque = @alignCast(data);
return @as(*Callback, @ptrCast(ptr));
}
-const event_handler = struct {
- fn handle(event: ?*Event, data: ?*anyopaque) callconv(.C) void {
- if (data) |d| {
- const func = event_handler_cbk(d);
-
- // TODO get the allocator by another way?
- var res = CallbackResult.init(func.nat_ctx.alloc);
- defer res.deinit();
-
- if (event) |evt| {
- func.trycall(.{
- EventToInterface(evt) catch unreachable,
- }, &res) catch {};
- } else {
- func.trycall(.{event}, &res) catch {};
- }
-
- // in case of function error, we log the result and the trace.
- if (!res.success) {
- log.info("event handler error: {s}", .{res.result orelse "unknown"});
- log.debug("{s}", .{res.stack orelse "no stack trace"});
- }
-
- // NOTE: we can not call func.deinit here
- // b/c the handler can be called several times
- // either on this dispatch event or in anoter one
- }
- }
-}.handle;
-
// EventListener
pub const EventListener = c.dom_event_listener;
const EventListenerEntry = c.listener_entry;
@@ -648,6 +614,7 @@ pub fn eventTargetAddEventListener(
typ: []const u8,
cbk: Callback,
capture: bool,
+ handler: anytype,
) !void {
// this allocation will be removed either on
// eventTargetRemoveEventListener or eventTargetRemoveAllEventListeners
@@ -661,7 +628,7 @@ pub fn eventTargetAddEventListener(
const ctx = @as(*anyopaque, @ptrCast(cbk_ptr));
var listener: ?*EventListener = undefined;
- const errLst = c.dom_event_listener_create(event_handler, ctx, &listener);
+ const errLst = c.dom_event_listener_create(handler, ctx, &listener);
try DOMErr(errLst);
defer c.dom_event_listener_unref(listener);
diff --git a/src/run_tests.zig b/src/run_tests.zig
index 667f9d73..bf906733 100644
--- a/src/run_tests.zig
+++ b/src/run_tests.zig
@@ -23,7 +23,7 @@ const jsruntime = @import("jsruntime");
const generate = @import("generate.zig");
const pretty = @import("pretty");
-const parser = @import("netsurf.zig");
+const parser = @import("netsurf");
const apiweb = @import("apiweb.zig");
const Window = @import("html/window.zig").Window;
const xhr = @import("xhr/xhr.zig");
diff --git a/src/storage/storage.zig b/src/storage/storage.zig
index 0905eec0..52b467d2 100644
--- a/src/storage/storage.zig
+++ b/src/storage/storage.zig
@@ -23,7 +23,7 @@ const Case = jsruntime.test_utils.Case;
const checkCases = jsruntime.test_utils.checkCases;
const generate = @import("../generate.zig");
-const DOMError = @import("../netsurf.zig").DOMError;
+const DOMError = @import("netsurf").DOMError;
const log = std.log.scoped(.storage);
diff --git a/src/user_context.zig b/src/user_context.zig
index 4860100d..23d85955 100644
--- a/src/user_context.zig
+++ b/src/user_context.zig
@@ -1,5 +1,5 @@
const std = @import("std");
-const parser = @import("netsurf.zig");
+const parser = @import("netsurf");
const Client = @import("async/Client.zig");
pub const UserContext = struct {
diff --git a/src/wpt/run.zig b/src/wpt/run.zig
index 3625fdf7..09586db3 100644
--- a/src/wpt/run.zig
+++ b/src/wpt/run.zig
@@ -21,7 +21,7 @@ const fspath = std.fs.path;
const FileLoader = @import("fileloader.zig").FileLoader;
-const parser = @import("../netsurf.zig");
+const parser = @import("netsurf");
const jsruntime = @import("jsruntime");
const Loop = jsruntime.Loop;
diff --git a/src/xhr/event_target.zig b/src/xhr/event_target.zig
index 765eb3ec..d03de6f7 100644
--- a/src/xhr/event_target.zig
+++ b/src/xhr/event_target.zig
@@ -22,8 +22,9 @@ const jsruntime = @import("jsruntime");
const Callback = jsruntime.Callback;
const EventTarget = @import("../dom/event_target.zig").EventTarget;
+const event_handler = @import("../events/event.zig").event_handler;
-const parser = @import("../netsurf.zig");
+const parser = @import("netsurf");
const log = std.log.scoped(.xhr);
@@ -41,8 +42,20 @@ pub const XMLHttpRequestEventTarget = struct {
ontimeout_cbk: ?Callback = null,
onloadend_cbk: ?Callback = null,
- fn register(self: *XMLHttpRequestEventTarget, alloc: std.mem.Allocator, typ: []const u8, cbk: Callback) !void {
- try parser.eventTargetAddEventListener(@as(*parser.EventTarget, @ptrCast(self)), alloc, typ, cbk, false);
+ fn register(
+ self: *XMLHttpRequestEventTarget,
+ alloc: std.mem.Allocator,
+ typ: []const u8,
+ cbk: Callback,
+ ) !void {
+ try parser.eventTargetAddEventListener(
+ @as(*parser.EventTarget, @ptrCast(self)),
+ alloc,
+ typ,
+ cbk,
+ false,
+ event_handler,
+ );
}
fn unregister(self: *XMLHttpRequestEventTarget, alloc: std.mem.Allocator, typ: []const u8, cbk: Callback) !void {
const et = @as(*parser.EventTarget, @ptrCast(self));
diff --git a/src/xhr/progress_event.zig b/src/xhr/progress_event.zig
index 832fb6f9..d985c76f 100644
--- a/src/xhr/progress_event.zig
+++ b/src/xhr/progress_event.zig
@@ -22,7 +22,7 @@ const jsruntime = @import("jsruntime");
const Case = jsruntime.test_utils.Case;
const checkCases = jsruntime.test_utils.checkCases;
-const parser = @import("../netsurf.zig");
+const parser = @import("netsurf");
const Event = @import("../events/event.zig").Event;
const DOMException = @import("../dom/exceptions.zig").DOMException;
diff --git a/src/xhr/xhr.zig b/src/xhr/xhr.zig
index a6102d13..f4ff42c0 100644
--- a/src/xhr/xhr.zig
+++ b/src/xhr/xhr.zig
@@ -23,7 +23,7 @@ const Case = jsruntime.test_utils.Case;
const checkCases = jsruntime.test_utils.checkCases;
const generate = @import("../generate.zig");
-const DOMError = @import("../netsurf.zig").DOMError;
+const DOMError = @import("netsurf").DOMError;
const DOMException = @import("../dom/exceptions.zig").DOMException;
const ProgressEvent = @import("progress_event.zig").ProgressEvent;
@@ -35,7 +35,7 @@ const Loop = jsruntime.Loop;
const YieldImpl = Loop.Yield(XMLHttpRequest);
const Client = @import("../async/Client.zig");
-const parser = @import("../netsurf.zig");
+const parser = @import("netsurf");
const UserContext = @import("../user_context.zig").UserContext;