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/blob.h | |
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/blob.h')
-rw-r--r-- | src/bun.js/bindings/blob.h | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/src/bun.js/bindings/blob.h b/src/bun.js/bindings/blob.h new file mode 100644 index 000000000..83d6ff3af --- /dev/null +++ b/src/bun.js/bindings/blob.h @@ -0,0 +1,68 @@ +#pragma once + +#include "root.h" +#include "JSDOMGlobalObject.h" + +namespace WebCore { + +extern "C" void* Blob__dupeFromJS(JSC::EncodedJSValue impl); +extern "C" void* Blob__dupe(void* impl); +extern "C" void Blob__destroy(void* impl); + +class Blob : public RefCounted<Blob> { +public: + void* impl() + { + return m_impl; + } + + static RefPtr<Blob> create(JSC::JSValue impl) + { + void* implPtr = Blob__dupeFromJS(JSValue::encode(impl)); + if (!implPtr) + return nullptr; + + return adoptRef(*new Blob(implPtr)); + } + + static RefPtr<Blob> create(void* ptr) + { + void* implPtr = Blob__dupe(ptr); + if (!implPtr) + return nullptr; + + return adoptRef(*new Blob(implPtr)); + } + + ~Blob() + { + Blob__destroy(m_impl); + } + + String fileName() + { + return m_fileName; + } + + void setFileName(String fileName) + { + m_fileName = fileName; + } + +private: + Blob(void* impl, String fileName = String()) + { + m_impl = impl; + m_fileName = fileName; + } + + void* m_impl; + String m_fileName; +}; + +JSC::JSValue toJS(JSC::JSGlobalObject*, JSDOMGlobalObject*, Blob&); +inline JSC::JSValue toJS(JSC::JSGlobalObject* lexicalGlobalObject, JSDOMGlobalObject* globalObject, Blob* impl) { return impl ? toJS(lexicalGlobalObject, globalObject, *impl) : JSC::jsNull(); } +JSC::JSValue toJSNewlyCreated(JSC::JSGlobalObject*, JSDOMGlobalObject*, Ref<Blob>&&); +inline JSC::JSValue toJSNewlyCreated(JSC::JSGlobalObject* lexicalGlobalObject, JSDOMGlobalObject* globalObject, RefPtr<Blob>&& impl) { return impl ? toJSNewlyCreated(lexicalGlobalObject, globalObject, impl.releaseNonNull()) : JSC::jsNull(); } + +} |