#pragma once

#include <AK/Optional.h>
#include <LibGC/Ptr.h>
#include <LibJS/Forward.h>
#include <LibJS/Runtime/Value.h>
#include <LibWeb/WebIDL/CallbackType.h>

namespace Web::Bindings {

struct UnderlyingSink {
    GC::Ptr<WebIDL::CallbackType> abort {};
    GC::Ptr<WebIDL::CallbackType> close {};
    GC::Ptr<WebIDL::CallbackType> start {};
    Optional<JS::Value> type {};
    GC::Ptr<WebIDL::CallbackType> write {};
};

JS::ThrowCompletionOr<UnderlyingSink> convert_to_idl_value_for_underlying_sink(JS::VM&, JS::Value);

} // namespace Web::Bindings
