lib:indexeddb ls

none

当前为 2024-04-19 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name lib:indexeddb ls
  3. // @version 1
  4. // @description none
  5. // @license GPLv3
  6. // @run-at document-start
  7. // @author You
  8. // @match *://*/*
  9. // @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=
  10. // @grant none
  11. // @namespace https://greasyfork.org/users/1184528
  12. // ==/UserScript==
  13. ;(() => {
  14. var x = loadlib("libloader")
  15. const a = loadlib("allfuncs", "indexeddb ls")
  16. x.savelib("indexeddb ls", async function (name = location.host) {
  17. var db = await a({
  18. storeName: name,
  19. keyPath: "id",
  20. }).indexeddb_setup()
  21. var localdb = await a(db).indexeddb_getall()
  22. function update(...args) {
  23. if (args.length === 2) {
  24. if (a(args[1]).gettype("object").val) args[1] = { ...args[1] }
  25. if (a(args[1]).gettype("array").val) args[1] = [...args[1]]
  26. a(db).indexeddb_set({
  27. id: args[0],
  28. val: args[1],
  29. })
  30. localdb = localdb.filter((e) => e.id !== args[0])
  31. localdb.push({
  32. id: args[0],
  33. val: args[1],
  34. })
  35. return args[1]
  36. } else {
  37. var temp = localdb.find((e) => e.id === args[0])
  38. return temp ? temp.val : undefined
  39. }
  40. }
  41. class ls {}
  42. ls.prototype.clear = async function () {}
  43. ls.prototype.all = function () {}
  44. ls.prototype.loadall = async function () {}
  45. ls.prototype.saveall = async function () {}
  46. var __ls = new Proxy(new ls(), {
  47. has(_obj, prop) {
  48. return !!localdb.find((e) => e.id === prop)
  49. },
  50. set(_obj, prop, val) {
  51. update(prop, val)
  52. },
  53. get(_obj, prop) {
  54. switch (prop) {
  55. case Symbol.iterator:
  56. return function* () {
  57. for (var i in localdb) {
  58. yield localdb[i]
  59. }
  60. }
  61. case Symbol.toStringTag:
  62. return "ls"
  63. case "clear":
  64. return async function () {
  65. localdb = []
  66. await a(db).indexeddb_clearall()
  67. return []
  68. }
  69. case "all":
  70. return localdb
  71. case "loadall":
  72. return async function () {
  73. localdb = await a(db).indexeddb_getall()
  74. }
  75. case "saveall":
  76. return async function () {
  77. localdb.forEach((item) => a(db).indexeddb_set(item))
  78. }
  79. default:
  80. var val = update(prop)
  81. if (a(val).gettype(["object", "array"]).val) {
  82. return new Proxy(val, {
  83. //...this,
  84. get(_o, _prop) {
  85. var val = _o[_prop]
  86. if (a(val).gettype(["object", "array"]).val)
  87. return new Proxy(val, this)
  88. return val
  89. },
  90. set(_o, _prop, _val) {
  91. _o[_prop] = _val
  92. return update(prop, val)
  93. },
  94. deleteProperty(_obj, _prop) {
  95. var m = delete val[_prop]
  96. update(prop, val)
  97. return m
  98. },
  99. ownKeys() {
  100. return Object.keys(val)
  101. },
  102. getOwnPropertyDescriptor(_target, _prop) {
  103. return Reflect.getOwnPropertyDescriptor(val, _prop)
  104. },
  105. has(_target, _prop) {
  106. return _prop in val
  107. },
  108. })
  109. }
  110. return val
  111. }
  112. },
  113. deleteProperty(_obj, prop) {
  114. if (!localdb.find((e) => e.id === prop)) return false
  115. a(db).indexeddb_remove(prop)
  116. localdb = localdb.filter((e) => e.id !== prop)
  117. return true
  118. },
  119. ownKeys() {
  120. return localdb.map((e) => e.id)
  121. },
  122. getOwnPropertyDescriptor(_target, name) {
  123. return {
  124. value: update(name),
  125. configurable: true,
  126. enumerable: true,
  127. }
  128. },
  129. has(_target, name) {
  130. return !!localdb.find((e) => e.id === name)
  131. },
  132. })
  133. return __ls
  134. })
  135. })()