lib:indexeddb ls

none

目前為 2024-08-18 提交的版本,檢視 最新版本

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