lib:indexeddb ls

none

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