/* * Copyright (c) 2024-2025, stelar7 * * SPDX-License-Identifier: BSD-2-Clause */ #include #include #include #include #include #include namespace Web::IndexedDB { GC_DEFINE_ALLOCATOR(IDBObjectStore); IDBObjectStore::~IDBObjectStore() = default; IDBObjectStore::IDBObjectStore(JS::Realm& realm, GC::Ref store, GC::Ref transaction) : PlatformObject(realm) , m_store(store) , m_transaction(transaction) { } GC::Ref IDBObjectStore::create(JS::Realm& realm, GC::Ref store, GC::Ref transaction) { return realm.create(realm, store, transaction); } void IDBObjectStore::initialize(JS::Realm& realm) { Base::initialize(realm); WEB_SET_PROTOTYPE_FOR_INTERFACE(IDBObjectStore); } void IDBObjectStore::visit_edges(Visitor& visitor) { Base::visit_edges(visitor); visitor.visit(m_store); visitor.visit(m_transaction); } // https://w3c.github.io/IndexedDB/#dom-idbobjectstore-keypath JS::Value IDBObjectStore::key_path() const { if (!m_store->key_path().has_value()) return JS::js_null(); return m_store->key_path().value().visit( [&](String const& value) -> JS::Value { return JS::PrimitiveString::create(realm().vm(), value); }, [&](Vector const& value) -> JS::Value { return JS::Array::create_from(realm(), value.span(), [&](auto const& entry) -> JS::Value { return JS::PrimitiveString::create(realm().vm(), entry); }); }); } }