diff options
author | 2023-02-13 00:50:15 -0800 | |
---|---|---|
committer | 2023-02-13 00:50:15 -0800 | |
commit | aa0762e4660bb17b86890b923368e5a0dc8daf7b (patch) | |
tree | a134621368f9def9a85473e90a6189afb956b457 /src/bun.js/bindings/bindings.cpp | |
parent | cdbc620104b939f7112fa613ca192e5fe6e02a7d (diff) | |
download | bun-aa0762e4660bb17b86890b923368e5a0dc8daf7b.tar.gz bun-aa0762e4660bb17b86890b923368e5a0dc8daf7b.tar.zst bun-aa0762e4660bb17b86890b923368e5a0dc8daf7b.zip |
Implement `FormData` (#2051)
* Backport std::forward change
* Implement `FormData`
* Fix io_darwin headers issue
* Implement `Blob` support in FormData
* Add test for file upload
* Fix bug with Blob not reading Content-Type
* Finish implementing FormData
* Add FormData to types
---------
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
Diffstat (limited to 'src/bun.js/bindings/bindings.cpp')
-rw-r--r-- | src/bun.js/bindings/bindings.cpp | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/src/bun.js/bindings/bindings.cpp b/src/bun.js/bindings/bindings.cpp index 02a79c1b0..aa8a28601 100644 --- a/src/bun.js/bindings/bindings.cpp +++ b/src/bun.js/bindings/bindings.cpp @@ -85,6 +85,10 @@ #include "JavaScriptCore/HashMapImpl.h" #include "JavaScriptCore/HashMapImplInlines.h" +#include "DOMFormData.h" +#include "JSDOMFormData.h" +#include "ZigGeneratedClasses.h" + template<typename UWSResponse> static void copyToUWS(WebCore::FetchHeaders* headers, UWSResponse* res) { @@ -3726,4 +3730,53 @@ extern "C" void JSC__JSGlobalObject__queueMicrotaskJob(JSC__JSGlobalObject* arg0 JSC::JSValue::decode(JSValue2), JSC::JSValue::decode(JSValue3), JSC::JSValue::decode(JSValue4)); +} + +#pragma mark - WebCore::DOMFormData + +CPP_DECL void WebCore__DOMFormData__append(WebCore__DOMFormData* arg0, ZigString* arg1, ZigString* arg2) +{ + arg0->append(toStringCopy(*arg1), toStringCopy(*arg2)); +} + +CPP_DECL void WebCore__DOMFormData__appendBlob(WebCore__DOMFormData* arg0, JSC__JSGlobalObject* arg1, ZigString* arg2, void* blobValueInner, ZigString* fileName) +{ + RefPtr<Blob> blob = WebCore::Blob::create(blobValueInner); + arg0->append(toStringCopy(*arg2), blob, toStringCopy(*fileName)); +} +CPP_DECL size_t WebCore__DOMFormData__count(WebCore__DOMFormData* arg0) +{ + return arg0->count(); +} + +extern "C" void DOMFormData__toQueryString( + DOMFormData* formData, + void* ctx, + void (*callback)(void* ctx, ZigString* encoded)) +{ + auto str = formData->toURLEncodedString(); + ZigString encoded = toZigString(str); + callback(ctx, &encoded); +} + +CPP_DECL JSC__JSValue WebCore__DOMFormData__createFromURLQuery(JSC__JSGlobalObject* arg0, ZigString* arg1) +{ + JSC::VM& vm = arg0->vm(); + Zig::GlobalObject* globalObject = reinterpret_cast<Zig::GlobalObject*>(arg0); + // don't need to copy the string because it internally does. + auto formData = DOMFormData::create(globalObject->scriptExecutionContext(), toString(*arg1)); + return JSValue::encode(toJSNewlyCreated(arg0, globalObject, WTFMove(formData))); +} + +CPP_DECL JSC__JSValue WebCore__DOMFormData__create(JSC__JSGlobalObject* arg0) +{ + JSC::VM& vm = arg0->vm(); + Zig::GlobalObject* globalObject = reinterpret_cast<Zig::GlobalObject*>(arg0); + auto formData = DOMFormData::create(globalObject->scriptExecutionContext()); + return JSValue::encode(toJSNewlyCreated(arg0, globalObject, WTFMove(formData))); +} + +CPP_DECL WebCore__DOMFormData* WebCore__DOMFormData__fromJS(JSC__JSValue JSValue1) +{ + return WebCoreCast<WebCore::JSDOMFormData, WebCore__DOMFormData>(JSValue1); }
\ No newline at end of file |