瀏覽代碼

LibWeb: Add IDBIndex

stelar7 9 月之前
父節點
當前提交
297c775b34

+ 1 - 0
Libraries/LibWeb/CMakeLists.txt

@@ -515,6 +515,7 @@ set(SOURCES
     IndexedDB/IDBCursor.cpp
     IndexedDB/IDBFactory.cpp
     IndexedDB/IDBOpenDBRequest.cpp
+    IndexedDB/IDBIndex.cpp
     IndexedDB/IDBRequest.cpp
     IndexedDB/IDBVersionChangeEvent.cpp
     Internals/Inspector.cpp

+ 2 - 1
Libraries/LibWeb/Forward.h

@@ -575,8 +575,9 @@ class Performance;
 namespace Web::IndexedDB {
 class Database;
 class IDBCursor;
-class IDBFactory;
 class IDBDatabase;
+class IDBFactory;
+class IDBIndex;
 class IDBOpenDBRequest;
 class IDBRequest;
 class IDBVersionChangeEvent;

+ 34 - 0
Libraries/LibWeb/IndexedDB/IDBIndex.cpp

@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2024, stelar7 <dudedbz@gmail.com>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#include <LibWeb/Bindings/IDBIndexPrototype.h>
+#include <LibWeb/Bindings/Intrinsics.h>
+#include <LibWeb/HTML/EventNames.h>
+#include <LibWeb/IndexedDB/IDBIndex.h>
+
+namespace Web::IndexedDB {
+
+GC_DEFINE_ALLOCATOR(IDBIndex);
+
+IDBIndex::~IDBIndex() = default;
+
+IDBIndex::IDBIndex(JS::Realm& realm)
+    : PlatformObject(realm)
+{
+}
+
+GC::Ref<IDBIndex> IDBIndex::create(JS::Realm& realm)
+{
+    return realm.create<IDBIndex>(realm);
+}
+
+void IDBIndex::initialize(JS::Realm& realm)
+{
+    Base::initialize(realm);
+    WEB_SET_PROTOTYPE_FOR_INTERFACE(IDBIndex);
+}
+
+}

+ 28 - 0
Libraries/LibWeb/IndexedDB/IDBIndex.h

@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2024, stelar7 <dudedbz@gmail.com>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#pragma once
+
+#include <LibGC/Heap.h>
+#include <LibWeb/Bindings/PlatformObject.h>
+
+namespace Web::IndexedDB {
+
+// https://w3c.github.io/IndexedDB/#index-interface
+class IDBIndex : public Bindings::PlatformObject {
+    WEB_PLATFORM_OBJECT(IDBIndex, Bindings::PlatformObject);
+    GC_DECLARE_ALLOCATOR(IDBIndex);
+
+public:
+    virtual ~IDBIndex() override;
+    [[nodiscard]] static GC::Ref<IDBIndex> create(JS::Realm&);
+
+protected:
+    explicit IDBIndex(JS::Realm&);
+    virtual void initialize(JS::Realm&) override;
+};
+
+}

+ 17 - 0
Libraries/LibWeb/IndexedDB/IDBIndex.idl

@@ -0,0 +1,17 @@
+#import <IndexedDB/IDBCursor.idl>
+
+[Exposed=(Window,Worker)]
+interface IDBIndex {
+    [FIXME] attribute DOMString name;
+    [FIXME, SameObject] readonly attribute IDBObjectStore objectStore;
+    [FIXME] readonly attribute any keyPath;
+    [FIXME] readonly attribute boolean multiEntry;
+    [FIXME] readonly attribute boolean unique;
+    [FIXME, NewObject] IDBRequest get(any query);
+    [FIXME, NewObject] IDBRequest getKey(any query);
+    [FIXME, NewObject] IDBRequest getAll(optional any query, optional [EnforceRange] unsigned long count);
+    [FIXME, NewObject] IDBRequest getAllKeys(optional any query, optional [EnforceRange] unsigned long count);
+    [FIXME, NewObject] IDBRequest count(optional any query);
+    [FIXME, NewObject] IDBRequest openCursor(optional any query, optional IDBCursorDirection direction = "next");
+    [FIXME, NewObject] IDBRequest openKeyCursor(optional any query, optional IDBCursorDirection direction = "next");
+};

+ 1 - 0
Libraries/LibWeb/idl_files.cmake

@@ -248,6 +248,7 @@ libweb_js_bindings(HighResolutionTime/Performance)
 libweb_js_bindings(IndexedDB/IDBCursor)
 libweb_js_bindings(IndexedDB/IDBDatabase)
 libweb_js_bindings(IndexedDB/IDBFactory)
+libweb_js_bindings(IndexedDB/IDBIndex)
 libweb_js_bindings(IndexedDB/IDBOpenDBRequest)
 libweb_js_bindings(IndexedDB/IDBRequest)
 libweb_js_bindings(IndexedDB/IDBVersionChangeEvent)

+ 1 - 0
Meta/Lagom/Tools/CodeGenerators/LibWeb/BindingsGenerator/IDLGenerators.cpp

@@ -60,6 +60,7 @@ static bool is_platform_object(Type const& type)
         "FormData"sv,
         "HTMLCollection"sv,
         "IDBCursor"sv,
+        "IDBIndex"sv,
         "ImageBitmap"sv,
         "ImageData"sv,
         "Instance"sv,

+ 1 - 0
Tests/LibWeb/Text/expected/all-window-properties.txt

@@ -202,6 +202,7 @@ History
 IDBCursor
 IDBDatabase
 IDBFactory
+IDBIndex
 IDBOpenDBRequest
 IDBRequest
 IDBVersionChangeEvent