#pragma once
#include "ExceptionOr.h"
#include "JSDOMBinding.h"
#include "JSDOMConvert.h"
#include "JSDOMGuardedObject.h"
#include "JSWritableStream.h"
namespace WebCore {
class WritableStreamSink;
class WritableStream final : public DOMGuarded<JSWritableStream> {
public:
static Ref<WritableStream> create(JSDOMGlobalObject& globalObject, JSWritableStream& jsStream) { return adoptRef(*new WritableStream(globalObject, jsStream)); }
static ExceptionOr<Ref<WritableStream>> create(JSC::JSGlobalObject&, RefPtr<WritableStreamSink>&&);
JSWritableStream* writableStream() const { return guarded(); }
void lock();
bool isLocked() const;
private:
WritableStream(JSDOMGlobalObject&, JSWritableStream&);
};
struct JSWritableStreamWrapperConverter {
static RefPtr<WritableStream> toWrapped(JSC::JSGlobalObject& lexicalGlobalObject, JSC::JSValue value)
{
JSC::VM& vm = JSC::getVM(&lexicalGlobalObject);
auto* globalObject = JSC::jsDynamicCast<JSDOMGlobalObject*>(vm, &lexicalGlobalObject);
if (!globalObject)
return nullptr;
auto* WritableStream = JSC::jsDynamicCast<JSWritableStream*>(vm, value);
if (!WritableStream)
return nullptr;
return WritableStream::create(*globalObject, *WritableStream);
}
};
template<> struct JSDOMWrapperConverterTraits<WritableStream> {
using WrapperClass = JSWritableStreamWrapperConverter;
using ToWrappedReturnType = RefPtr<WritableStream>;
static constexpr bool needsState = true;
};
inline WritableStream::WritableStream(JSDOMGlobalObject& globalObject, JSWritableStream& WritableStream)
: DOMGuarded<JSWritableStream>(globalObject, WritableStream)
{
}
inline JSC::JSValue toJS(JSC::JSGlobalObject*, JSC::JSGlobalObject*, WritableStream* stream)
{
return stream ? stream->writableStream() : JSC::jsUndefined();
}
inline JSC::JSValue toJSNewlyCreated(JSC::JSGlobalObject*, JSDOMGlobalObject*, Ref<WritableStream>&& stream)
{
return stream->writableStream();
}
}