lib:indexeddb ls

none

目前為 2024-04-10 提交的版本,檢視 最新版本

// ==UserScript==
// @name         lib:indexeddb ls
// @version      0.2
// @description  none
// @license      GPLv3
// @run-at       document-start
// @author       You
// @match        *://*/*
// @icon         data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAMAAABiM0N1AAAAAXNSR0IB2cksfwAAAAlwSFlzAAAOxAAADsQBlSsOGwAAAHJQTFRFAAAAEIijAo2yAI60BYyuF4WaFIifAY6zBI2wB4usGIaZEYigIoiZCIyrE4igG4iYD4mjEomhFoedCoqpDIqnDomlBYyvE4efEYmiDYqlA42xBoytD4mkCYqqGYSUFYidC4qoC4upAo6yCoupDYqmCYur4zowOQAAACZ0Uk5TAO////9vr////1+/D/+/L+/Pf/////+f3///////H4////////+5G91rAAACgUlEQVR4nM2Y22KjIBCGidg1264liZqDadK03X3/V2wNKHMC7MpF/xthHD5mgERAqZhWhfYqH6K+Qf2qNNf625hCoFj9/gblMUi5q5jLkXLCKudgyiRm0FMK82cWJp1fLbV5VmvJbCIc0GCYaFqqlDJgADdBjncqAXYobm1xh72aFMflbysteFfdy2Yi1XGOm5HGBzQ1dq7TzEoxjeNTjQZb7VA3e1c7+ImgasAgQ9+xusNVNZIo5xmOMgihIS2PbCQIiHEUdTvhxCcS/kPomfFI2zHy2PkWmA6aNatIJpKFJyekyy02xh5Y3DI9T4aOT6VhIUrsNTFp1pf79Z4SIIVDegl6IJO6cHiL/GimIZDhgTu/BlYWCQzHMl0zBWT/T3KAhtxOuUB9FtBrpsz0RV4xsjHmW+UCaffcSy/5viMGer0/6HdFNMZBq/vjJL38H9Dqx4Fuy0Em12DbZy+9pGtiDijbglwAehyj11n0tRD3WUBm+lwulE/8h4BuA+iWAQQnteg2Xm63WQLTpnMnpjdge0Mgu/GRPsV4xdjQ94Lfi624fabhDkfUqIKNrM64Q837v8yL0prasepCgrtvw1sJpoqanGEX7b5mQboNW8eawXaWXTMfMGxub472hzWzHSn6Sg2G9+6TAyRruE71s+zAzjWaknoyJCQzwxrghH2k5FDT4eqWunuNxyN9QCGcxVod5oADbYnIUkDTGZEf1xDJnSFteQ3KdsT8zYDMQXcHxsevcLH1TrsABzkNPyA/L7b0jg704viMMlpQI96WsHknCt/3YH0kOEo9zcGkwrFK39ck72rmoehmKqo2RKlilzSy/nJKEV45CT38myJp456fezktHjN5aeMAAAAASUVORK5CYII=
// @grant        none
// @namespace https://gf.qytechs.cn/users/1184528
// ==/UserScript==
;(() => {
  var x = loadlib("libloader")
  const a = loadlib("allfuncs", "indexeddb ls")
  x.savelib("indexeddb ls", async function (name = location.host) {
    var db = await a({
      storeName: name,
      keyPath: "id",
    }).indexeddb_setup()
    var localdb = await a(db).indexeddb_getall()
    function update(...args) {
      if (args.length === 2) {
        if (a(args[1]).gettype("object").val) args[1] = { ...args[1] }
        if (a(args[1]).gettype("array").val) args[1] = [...args[1]]
        a(db).indexeddb_set({
          id: args[0],
          val: args[1],
        })
        localdb = localdb.filter((e) => e.id !== args[0])
        localdb.push({
          id: args[0],
          val: args[1],
        })
        return args[1]
      } else {
        var temp = localdb.find((e) => e.id === args[0])
        return temp ? temp.val : undefined
      }
    }
    class ls {}
    ls.prototype.clear = async function () {}
    ls.prototype.all = function () {}
    ls.prototype.loadall = async function () {}
    ls.prototype.saveall = async function () {}
    var __ls = new Proxy(new ls(), {
      has(_obj, prop) {
        return !!localdb.find((e) => e.id === prop)
      },
      set(_obj, prop, val) {
        update(prop, val)
      },
      get(_obj, prop) {
        switch (prop) {
          case Symbol.iterator:
            return function* () {
              for (var i in localdb) {
                yield localdb[i]
              }
            }
          case Symbol.toStringTag:
            return "ls"
          case "clear":
            return async function () {
              localdb = []
              await a(db).indexeddb_clearall()
              return []
            }
          case "all":
            return localdb
          case "loadall":
            return async function () {
              localdb = await a(db).indexeddb_getall()
            }
          case "saveall":
            return async function () {
              localdb.forEach((item) => a(db).indexeddb_set(item))
            }
          default:
            var val = update(prop)
            if (a(val).gettype(["object", "array"]).val) {
              return new Proxy(val, {
                //...this,
                get(_o, _prop) {
                  var val = _o[_prop]
                  if (a(val).gettype(["object", "array"]).val)
                    return new Proxy(val, this)
                  return val
                },
                set(_o, _prop, _val) {
                  _o[_prop] = _val
                  return update(prop, val)
                },
                deleteProperty(_obj, _prop) {
                  var m = delete val[_prop]
                  update(prop, val)
                  return m
                },
                ownKeys() {
                  return Object.keys(val)
                },
                getOwnPropertyDescriptor(_target, _prop) {
                  return Reflect.getOwnPropertyDescriptor(val, _prop)
                },
                has(_target, _prop) {
                  return _prop in val
                },
              })
            }
            return val
        }
      },
      deleteProperty(_obj, prop) {
        if (!localdb.find((e) => e.id === prop)) return false
        a(db).indexeddb_remove(prop)
        localdb = localdb.filter((e) => e.id !== prop)
        return true
      },
      ownKeys() {
        return localdb.map((e) => e.id)
      },
      getOwnPropertyDescriptor(_target, name) {
        return {
          value: update(name),
          configurable: true,
          enumerable: true,
        }
      },
      has(_target, name) {
        return !!localdb.find((e) => e.id === name)
      },
    })
    return __ls
  })
})()

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址