lib:indexeddb ls

none

当前为 2025-03-06 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name lib:indexeddb ls
  3. // @version 8
  4. // @description none
  5. // @license GPLv3
  6. // @run-at document-start
  7. // @author rssaromeo
  8. // @match *://*/*
  9. // @tag lib
  10. // @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=
  11. // @grant none
  12. // @exclude /livereload.net\/files\/ffopen\/index.html$/
  13. // @namespace https://greasyfork.org/users/1184528
  14. // ==/UserScript==
  15. ;(() => {
  16. function isFilesystemHandle(obj) {
  17. return (
  18. obj &&
  19. (obj instanceof FileSystemFileHandle ||
  20. obj instanceof FileSystemDirectoryHandle)
  21. )
  22. }
  23. var x = loadlib("libloader")
  24. const a = loadlib("newallfuncs", "indexeddb ls")
  25. x.savelib("indexeddb ls", async function newdbproxy(name) {
  26. var db = await a.indexeddb_setup({
  27. storeName: name,
  28. keyPath: "id",
  29. })
  30. let indexedData = await a.indexeddb_getall(db)
  31. var localData = {}
  32.  
  33. indexedData.forEach((item) => {
  34. localData[item.id] = item.val
  35. })
  36.  
  37. function set(prop, val) {
  38. if (prop == "all") {
  39. return new Promise(async (done) => {
  40. await proxy.clear()
  41. Object.entries(val).forEach((item) => {
  42. localData[item[0]] = item[1]
  43. })
  44. await proxy.saveall()
  45. return done(true)
  46. })
  47. } else {
  48. localData[prop] = val
  49. a.indexeddb_set(db, { id: prop, val: val })
  50. // log("indexeddb ls", "setting", prop, "to", val)
  51. }
  52. }
  53. function remove(prop) {
  54. delete localData[prop]
  55. a.indexeddb_remove(db, prop)
  56. }
  57.  
  58. const dbProxyHandler = {
  59. set(target, prop, value) {
  60. target[prop] = value
  61. set(prop, value)
  62. return true
  63. },
  64. get(target, prop) {
  65. switch (prop) {
  66. case Symbol.iterator:
  67. var ld = Object.entries(localData).map(([id, val]) => {
  68. return { id, val }
  69. })
  70. return function* () {
  71. for (var i in ld) {
  72. yield ld[i]
  73. }
  74. }
  75. case Symbol.toStringTag:
  76. return "ls"
  77. case "clear":
  78. return async function () {
  79. Object.keys(localData).forEach((key) => {
  80. Reflect.deleteProperty(localData, key)
  81. })
  82. await a.indexeddb_clearall(db)
  83. return localData
  84. }
  85. case "all":
  86. return localData
  87. case "loadall":
  88. return async function () {
  89. localData = {}
  90. var temp = await a.indexeddb_getall(db)
  91. temp.forEach((item) => {
  92. localData[item.id] = item.val
  93. })
  94. return localData
  95. }
  96. case "saveall":
  97. return async function () {
  98. Object.entries(localData)
  99. .map((e) => {
  100. return { id: e[0], val: e[1] }
  101. })
  102. .forEach((item) => a.indexeddb_set(db, item))
  103. }
  104. default:
  105. var value = Reflect.get(target, prop)
  106. if (
  107. a.gettype(value, ["object", "array"]) &&
  108. !isFilesystemHandle(value)
  109. ) {
  110. value = new Proxy(
  111. value,
  112. newnestedProxyHandler(prop, value)
  113. )
  114. }
  115. return value
  116. }
  117. },
  118. deleteProperty(target, prop) {
  119. var val = Reflect.deleteProperty(target, prop)
  120. remove(prop)
  121. return val
  122. },
  123. }
  124.  
  125. let proxy = new Proxy(localData, dbProxyHandler)
  126. function newnestedProxyHandler(mainprop, mainval) {
  127. return {
  128. mainprop,
  129. mainval,
  130. set(target, prop, value) {
  131. // trace(
  132. // "nested",
  133. // prop,
  134. // value,
  135. // this.mainprop,
  136. // this.mainval,
  137. // this
  138. // )
  139. target[prop] = value
  140. set(this.mainprop, this.mainval)
  141. return true
  142. },
  143. get(target, prop) {
  144. var val = target[prop]
  145. if (
  146. a.gettype(val, ["object", "array"]) &&
  147. !isFilesystemHandle(val)
  148. ) {
  149. return new Proxy(
  150. val,
  151. newnestedProxyHandler(mainprop, mainval)
  152. )
  153. }
  154. return val
  155. },
  156. deleteProperty(target, prop) {
  157. var val = Reflect.deleteProperty(target, prop)
  158. set(this.mainprop, this.mainval)
  159. return val
  160. },
  161. }
  162. }
  163. return proxy
  164. })
  165. })()