/* * Copyright (c) 2025, stelar7 * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include #include #include #include namespace Web::IndexedDB { using KeyPath = Variant>; // https://w3c.github.io/IndexedDB/#object-store-construct class ObjectStore : public JS::Cell { GC_CELL(ObjectStore, JS::Cell); GC_DECLARE_ALLOCATOR(ObjectStore); public: [[nodiscard]] static GC::Ref create(JS::Realm&, String, bool, Optional const&); virtual ~ObjectStore(); String name() const { return m_name; } Optional key_path() const { return m_key_path; } bool uses_inline_keys() const { return m_key_path.has_value(); } bool uses_out_of_line_keys() const { return !m_key_path.has_value(); } Optional key_generator() const { return m_key_generator; } private: ObjectStore(String name, bool auto_increment, Optional const& key_path) : m_name(move(name)) , m_key_path(key_path) { if (auto_increment) m_key_generator = KeyGenerator {}; } // An object store has a name, which is a name. At any one time, the name is unique within the database to which it belongs. String m_name; // An object store optionally has a key path. If the object store has a key path it is said to use in-line keys. Otherwise it is said to use out-of-line keys. Optional m_key_path; // An object store optionally has a key generator. Optional m_key_generator; }; }