aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/bindings/bindings.cpp
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2023-02-13 00:50:15 -0800
committerGravatar GitHub <noreply@github.com> 2023-02-13 00:50:15 -0800
commitaa0762e4660bb17b86890b923368e5a0dc8daf7b (patch)
treea134621368f9def9a85473e90a6189afb956b457 /src/bun.js/bindings/bindings.cpp
parentcdbc620104b939f7112fa613ca192e5fe6e02a7d (diff)
downloadbun-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.cpp53
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