@@ -289,8 +289,11 @@ pub const Node = struct {
289289 }
290290 }
291291
292- pub fn _insertBefore(self: *parser.Node, new_node: *parser.Node, ref_node: *parser.Node) !*parser.Node {
293- return try parser.nodeInsertBefore(self, new_node, ref_node);
292+ pub fn _insertBefore(self: *parser.Node, new_node: *parser.Node, ref_node_: ?*parser.Node) !Union {
293+ if (ref_node_) |ref_node| {
294+ return Node.toInterface(try parser.nodeInsertBefore(self, new_node, ref_node));
295+ }
296+ return _appendChild(self, new_node);
294297 }
295298
296299 pub fn _isDefaultNamespace(self: *parser.Node, namespace: ?[]const u8) !bool {
@@ -662,6 +665,10 @@ test "Browser.DOM.node" {
662665 .{ "let insertBefore = document.createElement('a')", "undefined" },
663666 .{ "link.insertBefore(insertBefore, text) !== undefined", "true" },
664667 .{ "link.firstChild.localName === 'a'", "true" },
668+
669+ .{ "let insertBefore2 = document.createElement('b')", null },
670+ .{ "link.insertBefore(insertBefore2, null).localName", "b" },
671+ .{ "link.childNodes[link.childNodes.length - 1].localName", "b" },
665672 }, .{});
666673
667674 try runner.testCases(&.{
0 commit comments