@@ -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