diff options
Diffstat (limited to 'src/bun.js/bindings')
-rw-r--r-- | src/bun.js/bindings/URLSearchParams.cpp | 24 | ||||
-rw-r--r-- | src/bun.js/bindings/bindings.zig | 40 |
2 files changed, 64 insertions, 0 deletions
diff --git a/src/bun.js/bindings/URLSearchParams.cpp b/src/bun.js/bindings/URLSearchParams.cpp index 9c168b4f6..2b0ffef67 100644 --- a/src/bun.js/bindings/URLSearchParams.cpp +++ b/src/bun.js/bindings/URLSearchParams.cpp @@ -26,9 +26,33 @@ #include "DOMURL.h" #include "wtf/URLParser.h" +#include "helpers.h" +#include "JSURLSearchParams.h" namespace WebCore { +extern "C" JSC::EncodedJSValue URLSearchParams__create(JSDOMGlobalObject* globalObject, const ZigString* input) +{ + String str = Zig::toString(*input); + auto result = URLSearchParams::create(str, nullptr); + return JSC::JSValue::encode(WebCore::toJSNewlyCreated(globalObject, globalObject, WTFMove(result))); +} + +extern "C" WebCore::URLSearchParams* URLSearchParams__fromJS(JSC::EncodedJSValue value) +{ + return WebCoreCast<WebCore::JSURLSearchParams, WebCore::URLSearchParams>(value); +} + +// callback accepting a void* and a const ZigString*, returning void +typedef void (*URLSearchParams__toStringCallback)(void* ctx, const ZigString* str); + +extern "C" void URLSearchParams__toString(WebCore::URLSearchParams* urlSearchParams, void* ctx, URLSearchParams__toStringCallback callback) +{ + String str = urlSearchParams->toString(); + auto zig = Zig::toZigString(str); + callback(ctx, &zig); +} + URLSearchParams::URLSearchParams(const String& init, DOMURL* associatedURL) : m_associatedURL(associatedURL) , m_pairs(init.startsWith('?') ? WTF::URLParser::parseURLEncodedForm(StringView(init).substring(1)) : WTF::URLParser::parseURLEncodedForm(init)) diff --git a/src/bun.js/bindings/bindings.zig b/src/bun.js/bindings/bindings.zig index d0ccacd06..4c1469564 100644 --- a/src/bun.js/bindings/bindings.zig +++ b/src/bun.js/bindings/bindings.zig @@ -4365,6 +4365,46 @@ pub fn untrackFunction( return private.Bun__untrackFFIFunction(globalObject, value); } +pub const URLSearchParams = opaque { + extern fn URLSearchParams__create(globalObject: *JSGlobalObject, *const ZigString) JSValue; + pub fn create(globalObject: *JSGlobalObject, init: ZigString) JSValue { + JSC.markBinding(@src()); + return URLSearchParams__create(globalObject, &init); + } + + extern fn URLSearchParams__fromJS(JSValue) ?*URLSearchParams; + pub fn fromJS(value: JSValue) ?*URLSearchParams { + JSC.markBinding(@src()); + return URLSearchParams__fromJS(value); + } + + extern fn URLSearchParams__toString( + self: *URLSearchParams, + ctx: *anyopaque, + callback: *const fn (ctx: *anyopaque, str: *const ZigString) void, + ) void; + + pub fn toString( + self: *URLSearchParams, + comptime Ctx: type, + ctx: *Ctx, + comptime callback: *const fn (ctx: *Ctx, str: ZigString) void, + ) void { + JSC.markBinding(@src()); + const Wrap = struct { + const cb_ = callback; + pub fn cb(c: *anyopaque, str: *const ZigString) void { + cb_( + bun.cast(*Ctx, c), + str.*, + ); + } + }; + + URLSearchParams__toString(self, ctx, Wrap.cb); + } +}; + pub const WTF = struct { extern fn WTF__copyLCharsFromUCharSource(dest: [*]u8, source: *const anyopaque, len: usize) void; extern fn WTF__toBase64URLStringValue(bytes: [*]const u8, length: usize, globalObject: *JSGlobalObject) JSValue; |