// ==UserScript==
// @name indexeddb ls lib
// @version 0.1
// @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
})
})()