aboutsummaryrefslogtreecommitdiff
path: root/src/deps/lol-html.zig
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2023-07-11 19:14:34 -0700
committerGravatar GitHub <noreply@github.com> 2023-07-11 19:14:34 -0700
commitcbb88672f217a90db1aa1eb29cd92d5d9035b22b (patch)
tree43a00501f3cde495967e116f0b660777051551f8 /src/deps/lol-html.zig
parent1f900cff453700b19bca2acadfe26da4468c1282 (diff)
parent34b0e7a2bbd8bf8097341cdb0075d0908283e834 (diff)
downloadbun-jarred/esm-conditions.tar.gz
bun-jarred/esm-conditions.tar.zst
bun-jarred/esm-conditions.zip
Merge branch 'main' into jarred/esm-conditionsjarred/esm-conditions
Diffstat (limited to 'src/deps/lol-html.zig')
-rw-r--r--src/deps/lol-html.zig35
1 files changed, 30 insertions, 5 deletions
diff --git a/src/deps/lol-html.zig b/src/deps/lol-html.zig
index 975aac2b3..bac422fb0 100644
--- a/src/deps/lol-html.zig
+++ b/src/deps/lol-html.zig
@@ -1,6 +1,6 @@
pub const Error = error{Fail};
const std = @import("std");
-
+const bun = @import("root").bun;
pub const MemorySettings = extern struct {
preallocated_parsing_buffer_size: usize,
max_allowed_memory_usage: usize,
@@ -393,7 +393,8 @@ pub const Element = opaque {
extern fn lol_html_element_is_removed(element: *const Element) bool;
extern fn lol_html_element_user_data_set(element: *const Element, user_data: ?*anyopaque) void;
extern fn lol_html_element_user_data_get(element: *const Element) ?*anyopaque;
- extern fn lol_html_element_on_end_tag(element: *Element, end_tag_handler: lol_html_end_tag_handler_t, user_data: ?*anyopaque) c_int;
+ extern fn lol_html_element_add_end_tag_handler(element: *Element, end_tag_handler: lol_html_end_tag_handler_t, user_data: ?*anyopaque) c_int;
+ extern fn lol_html_element_clear_end_tag_handlers(element: *Element) void;
pub fn getAttribute(element: *const Element, name: []const u8) HTMLString {
auto_disable();
@@ -502,7 +503,10 @@ pub const Element = opaque {
}
pub fn onEndTag(element: *Element, end_tag_handler: lol_html_end_tag_handler_t, user_data: ?*anyopaque) Error!void {
auto_disable();
- return switch (lol_html_element_on_end_tag(element, end_tag_handler, user_data)) {
+
+ lol_html_element_clear_end_tag_handlers(element);
+
+ return switch (lol_html_element_add_end_tag_handler(element, end_tag_handler, user_data)) {
0 => {},
-1 => error.Fail,
else => unreachable,
@@ -559,6 +563,27 @@ pub const HTMLString = extern struct {
@setRuntimeSafety(false);
return this.ptr[0..this.len];
}
+
+ fn deinit_external(ctx: *anyopaque, ptr: *anyopaque, len: u32) callconv(.C) void {
+ _ = ctx;
+ auto_disable();
+ lol_html_str_free(.{ .ptr = @ptrCast([*]const u8, ptr), .len = len });
+ }
+
+ pub fn toString(this: HTMLString) bun.String {
+ const bytes = this.slice();
+ if (bun.strings.isAllASCII(bytes)) {
+ return bun.String.createExternal(bytes, true, @constCast(bytes.ptr), &deinit_external);
+ }
+ defer this.deinit();
+ return bun.String.create(bytes);
+ }
+
+ pub fn toJS(this: HTMLString, globalThis: *bun.JSC.JSGlobalObject) bun.JSC.JSValue {
+ var str = this.toString();
+ defer str.deref();
+ return str.toJS(globalThis);
+ }
};
pub const EndTag = opaque {
@@ -727,11 +752,11 @@ pub fn DirectiveHandler(comptime Container: type, comptime UserDataType: type, c
return struct {
pub fn callback(this: *Container, user_data: ?*anyopaque) callconv(.C) Directive {
auto_disable();
- return @intToEnum(
+ return @enumFromInt(
Directive,
@as(
c_uint,
- @boolToInt(
+ @intFromBool(
Callback(
@ptrCast(
*UserDataType,