/* * Copyright (c) 2024, Tim Flynn * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include #include namespace JS { class Uint8ArrayConstructorHelpers { public: static void initialize(Realm&, Object& constructor); private: JS_DECLARE_NATIVE_FUNCTION(from_base64); JS_DECLARE_NATIVE_FUNCTION(from_hex); }; class Uint8ArrayPrototypeHelpers { public: static void initialize(Realm&, Object& prototype); private: JS_DECLARE_NATIVE_FUNCTION(to_base64); JS_DECLARE_NATIVE_FUNCTION(to_hex); JS_DECLARE_NATIVE_FUNCTION(set_from_base64); JS_DECLARE_NATIVE_FUNCTION(set_from_hex); }; enum class Alphabet { Base64, Base64URL, }; enum class LastChunkHandling { Loose, Strict, StopBeforePartial, }; struct DecodeResult { size_t read { 0 }; // [[Read]] ByteBuffer bytes; // [[Bytes]] Optional error; // [[Error]] }; ThrowCompletionOr> validate_uint8_array(VM&); ThrowCompletionOr get_uint8_array_bytes(VM&, TypedArrayBase const&); void set_uint8_array_bytes(TypedArrayBase&, ReadonlyBytes); DecodeResult from_base64(VM&, StringView string, Alphabet alphabet, LastChunkHandling last_chunk_handling, Optional max_length = {}); DecodeResult from_hex(VM&, StringView string, Optional max_length = {}); }