diff --git a/Libraries/LibWeb/IndexedDB/Internal/Algorithms.cpp b/Libraries/LibWeb/IndexedDB/Internal/Algorithms.cpp index 486d07dcfbd..b0f7ab5ad1e 100644 --- a/Libraries/LibWeb/IndexedDB/Internal/Algorithms.cpp +++ b/Libraries/LibWeb/IndexedDB/Internal/Algorithms.cpp @@ -1855,4 +1855,18 @@ JS::Value clear_an_object_store(GC::Ref store) return JS::js_undefined(); } +// https://w3c.github.io/IndexedDB/#retrieve-a-key-from-an-object-store +JS::Value retrieve_a_key_from_an_object_store(JS::Realm& realm, GC::Ref store, GC::Ref range) +{ + // 1. Let record be the first record in store’s list of records whose key is in range, if any. + auto record = store->first_in_range(range); + + // 2. If record was not found, return undefined. + if (!record.has_value()) + return JS::js_undefined(); + + // 3. Return the result of converting a key to a value with record’s key. + return convert_a_key_to_a_value(realm, record.value().key); +} + } diff --git a/Libraries/LibWeb/IndexedDB/Internal/Algorithms.h b/Libraries/LibWeb/IndexedDB/Internal/Algorithms.h index 76fe5828d39..c1f8cfe914b 100644 --- a/Libraries/LibWeb/IndexedDB/Internal/Algorithms.h +++ b/Libraries/LibWeb/IndexedDB/Internal/Algorithms.h @@ -46,5 +46,6 @@ JS::Value count_the_records_in_a_range(GC::Ref, GC::Ref retrieve_a_value_from_an_object_store(JS::Realm&, GC::Ref, GC::Ref); GC::Ptr iterate_a_cursor(JS::Realm&, GC::Ref, GC::Ptr = nullptr, GC::Ptr = nullptr, u64 = 1); JS::Value clear_an_object_store(GC::Ref); +JS::Value retrieve_a_key_from_an_object_store(JS::Realm&, GC::Ref, GC::Ref); }