Files
bun.sh/src/bun.js/bindings/JSString.zig
2025-04-17 12:32:47 -07:00

102 lines
3.6 KiB
Zig

const std = @import("std");
const bun = @import("bun");
const JSC = bun.JSC;
const JSValue = JSC.JSValue;
const JSGlobalObject = JSC.JSGlobalObject;
const JSObject = @import("JSObject.zig").JSObject;
const ZigString = @import("ZigString.zig").ZigString;
const JSError = bun.JSError;
pub const JSString = opaque {
extern fn JSC__JSString__toObject(this: *JSString, global: *JSGlobalObject) ?*JSObject;
extern fn JSC__JSString__toZigString(this: *JSString, global: *JSGlobalObject, zig_str: *JSC.ZigString) void;
extern fn JSC__JSString__eql(this: *const JSString, global: *JSGlobalObject, other: *JSString) bool;
extern fn JSC__JSString__iterator(this: *JSString, globalObject: *JSGlobalObject, iter: *anyopaque) void;
extern fn JSC__JSString__length(this: *const JSString) usize;
extern fn JSC__JSString__is8Bit(this: *const JSString) bool;
pub fn toJS(str: *JSString) JSValue {
return JSValue.fromCell(str);
}
pub fn toObject(this: *JSString, global: *JSGlobalObject) ?*JSObject {
return JSC__JSString__toObject(this, global);
}
pub fn toZigString(this: *JSString, global: *JSGlobalObject, zig_str: *JSC.ZigString) void {
return JSC__JSString__toZigString(this, global, zig_str);
}
pub fn ensureStillAlive(this: *JSString) void {
std.mem.doNotOptimizeAway(this);
}
pub fn getZigString(this: *JSString, global: *JSGlobalObject) JSC.ZigString {
var out = JSC.ZigString.init("");
this.toZigString(global, &out);
return out;
}
pub const view = getZigString;
/// doesn't always allocate
pub fn toSlice(
this: *JSString,
global: *JSGlobalObject,
allocator: std.mem.Allocator,
) ZigString.Slice {
var str = ZigString.init("");
this.toZigString(global, &str);
return str.toSlice(allocator);
}
pub fn toSliceClone(
this: *JSString,
global: *JSGlobalObject,
allocator: std.mem.Allocator,
) JSError!ZigString.Slice {
var str = ZigString.init("");
this.toZigString(global, &str);
return str.toSliceClone(allocator);
}
pub fn toSliceZ(
this: *JSString,
global: *JSGlobalObject,
allocator: std.mem.Allocator,
) ZigString.Slice {
var str = ZigString.init("");
this.toZigString(global, &str);
return str.toSliceZ(allocator);
}
pub fn eql(this: *const JSString, global: *JSGlobalObject, other: *JSString) bool {
return JSC__JSString__eql(this, global, other);
}
pub fn iterator(this: *JSString, globalObject: *JSGlobalObject, iter: *anyopaque) void {
return JSC__JSString__iterator(this, globalObject, iter);
}
pub fn length(this: *const JSString) usize {
return JSC__JSString__length(this);
}
pub fn is8Bit(this: *const JSString) bool {
return JSC__JSString__is8Bit(this);
}
pub const JStringIteratorAppend8Callback = *const fn (*Iterator, [*]const u8, u32) callconv(.C) void;
pub const JStringIteratorAppend16Callback = *const fn (*Iterator, [*]const u16, u32) callconv(.C) void;
pub const JStringIteratorWrite8Callback = *const fn (*Iterator, [*]const u8, u32, u32) callconv(.C) void;
pub const JStringIteratorWrite16Callback = *const fn (*Iterator, [*]const u16, u32, u32) callconv(.C) void;
pub const Iterator = extern struct {
data: ?*anyopaque,
stop: u8,
append8: ?JStringIteratorAppend8Callback,
append16: ?JStringIteratorAppend16Callback,
write8: ?JStringIteratorWrite8Callback,
write16: ?JStringIteratorWrite16Callback,
};
};