@synchronized-console/objectloader2 2.25.7 → 2.31.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (423) hide show
  1. package/dist/commonjs/{operations → core}/interfaces.d.ts +5 -7
  2. package/dist/commonjs/core/interfaces.d.ts.map +1 -0
  3. package/dist/commonjs/core/interfaces.js.map +1 -0
  4. package/dist/commonjs/{operations → core}/objectLoader2.d.ts +1 -1
  5. package/dist/commonjs/core/objectLoader2.d.ts.map +1 -0
  6. package/dist/commonjs/core/objectLoader2.js +120 -0
  7. package/dist/commonjs/core/objectLoader2.js.map +1 -0
  8. package/dist/{esm/operations → commonjs/core}/objectLoader2Factory.d.ts +10 -2
  9. package/dist/commonjs/core/objectLoader2Factory.d.ts.map +1 -0
  10. package/dist/commonjs/core/objectLoader2Factory.js +86 -0
  11. package/dist/commonjs/core/objectLoader2Factory.js.map +1 -0
  12. package/dist/commonjs/core/objectLoader2Factory.test.d.ts +2 -0
  13. package/dist/commonjs/core/objectLoader2Factory.test.d.ts.map +1 -0
  14. package/dist/commonjs/core/objectLoader2Factory.test.js +106 -0
  15. package/dist/commonjs/core/objectLoader2Factory.test.js.map +1 -0
  16. package/dist/{esm/operations → commonjs/core}/options.d.ts +4 -1
  17. package/dist/commonjs/core/options.d.ts.map +1 -0
  18. package/dist/commonjs/{operations → core}/options.js.map +1 -1
  19. package/dist/commonjs/core/stages/cacheReader.d.ts +18 -0
  20. package/dist/commonjs/core/stages/cacheReader.d.ts.map +1 -0
  21. package/dist/commonjs/core/stages/cacheReader.js +72 -0
  22. package/dist/commonjs/core/stages/cacheReader.js.map +1 -0
  23. package/dist/commonjs/core/stages/cacheWriter.d.ts +15 -0
  24. package/dist/commonjs/core/stages/cacheWriter.d.ts.map +1 -0
  25. package/dist/commonjs/core/stages/cacheWriter.js +50 -0
  26. package/dist/commonjs/core/stages/cacheWriter.js.map +1 -0
  27. package/dist/commonjs/core/stages/indexedDatabase.d.ts +34 -0
  28. package/dist/commonjs/core/stages/indexedDatabase.d.ts.map +1 -0
  29. package/dist/commonjs/core/stages/indexedDatabase.js +150 -0
  30. package/dist/commonjs/core/stages/indexedDatabase.js.map +1 -0
  31. package/dist/commonjs/core/stages/memory/memoryDatabase.d.ts +11 -0
  32. package/dist/commonjs/core/stages/memory/memoryDatabase.d.ts.map +1 -0
  33. package/dist/commonjs/{operations/databases → core/stages/memory}/memoryDatabase.js +6 -3
  34. package/dist/commonjs/core/stages/memory/memoryDatabase.js.map +1 -0
  35. package/dist/commonjs/{operations/downloaders → core/stages/memory}/memoryDownloader.d.ts +4 -4
  36. package/dist/commonjs/core/stages/memory/memoryDownloader.d.ts.map +1 -0
  37. package/dist/commonjs/{operations/downloaders → core/stages/memory}/memoryDownloader.js +1 -1
  38. package/dist/commonjs/core/stages/memory/memoryDownloader.js.map +1 -0
  39. package/dist/{esm/operations/downloaders → commonjs/core/stages}/serverDownloader.d.ts +8 -6
  40. package/dist/commonjs/core/stages/serverDownloader.d.ts.map +1 -0
  41. package/dist/commonjs/{operations/downloaders → core/stages}/serverDownloader.js +99 -50
  42. package/dist/commonjs/core/stages/serverDownloader.js.map +1 -0
  43. package/dist/commonjs/core/traverser.d.ts.map +1 -0
  44. package/dist/commonjs/{operations → core}/traverser.js +7 -7
  45. package/dist/commonjs/core/traverser.js.map +1 -0
  46. package/dist/commonjs/deferment/MemoryCache.d.ts +35 -0
  47. package/dist/commonjs/deferment/MemoryCache.d.ts.map +1 -0
  48. package/dist/commonjs/deferment/MemoryCache.js +162 -0
  49. package/dist/commonjs/deferment/MemoryCache.js.map +1 -0
  50. package/dist/commonjs/deferment/MemoryCache.test.d.ts +2 -0
  51. package/dist/commonjs/deferment/MemoryCache.test.d.ts.map +1 -0
  52. package/dist/commonjs/deferment/MemoryCache.test.js +153 -0
  53. package/dist/commonjs/deferment/MemoryCache.test.js.map +1 -0
  54. package/dist/commonjs/deferment/defermentManager.d.ts +32 -0
  55. package/dist/commonjs/deferment/defermentManager.d.ts.map +1 -0
  56. package/dist/commonjs/deferment/defermentManager.js +85 -0
  57. package/dist/commonjs/deferment/defermentManager.js.map +1 -0
  58. package/dist/commonjs/deferment/defermentManager.test.d.ts +2 -0
  59. package/dist/commonjs/deferment/defermentManager.test.d.ts.map +1 -0
  60. package/dist/commonjs/deferment/defermentManager.test.js +193 -0
  61. package/dist/commonjs/deferment/defermentManager.test.js.map +1 -0
  62. package/dist/commonjs/deferment/deferredBase.d.ts +12 -0
  63. package/dist/commonjs/deferment/deferredBase.d.ts.map +1 -0
  64. package/dist/commonjs/deferment/deferredBase.js +27 -0
  65. package/dist/commonjs/deferment/deferredBase.js.map +1 -0
  66. package/dist/commonjs/index.d.ts +4 -2
  67. package/dist/commonjs/index.d.ts.map +1 -1
  68. package/dist/commonjs/index.js +6 -3
  69. package/dist/commonjs/index.js.map +1 -1
  70. package/dist/commonjs/{helpers → queues}/aggregateQueue.d.ts +2 -1
  71. package/dist/commonjs/queues/aggregateQueue.d.ts.map +1 -0
  72. package/dist/commonjs/{helpers → queues}/aggregateQueue.js +4 -0
  73. package/dist/commonjs/queues/aggregateQueue.js.map +1 -0
  74. package/dist/{esm/helpers → commonjs/queues}/asyncGeneratorQueue.d.ts +1 -1
  75. package/dist/commonjs/queues/asyncGeneratorQueue.d.ts.map +1 -0
  76. package/dist/commonjs/{helpers → queues}/asyncGeneratorQueue.js +2 -1
  77. package/dist/commonjs/queues/asyncGeneratorQueue.js.map +1 -0
  78. package/dist/commonjs/{helpers → queues}/batchingQueue.d.ts +4 -1
  79. package/dist/commonjs/queues/batchingQueue.d.ts.map +1 -0
  80. package/dist/commonjs/queues/batchingQueue.dispose.test.d.ts +2 -0
  81. package/dist/commonjs/queues/batchingQueue.dispose.test.d.ts.map +1 -0
  82. package/dist/commonjs/queues/batchingQueue.dispose.test.js +62 -0
  83. package/dist/commonjs/queues/batchingQueue.dispose.test.js.map +1 -0
  84. package/dist/commonjs/queues/batchingQueue.js +128 -0
  85. package/dist/commonjs/queues/batchingQueue.js.map +1 -0
  86. package/dist/commonjs/queues/batchingQueue.test.d.ts +2 -0
  87. package/dist/commonjs/queues/batchingQueue.test.d.ts.map +1 -0
  88. package/dist/commonjs/queues/batchingQueue.test.js +236 -0
  89. package/dist/commonjs/queues/batchingQueue.test.js.map +1 -0
  90. package/dist/{esm/helpers → commonjs/queues}/bufferQueue.d.ts +1 -0
  91. package/dist/commonjs/queues/bufferQueue.d.ts.map +1 -0
  92. package/dist/commonjs/{helpers → queues}/bufferQueue.js +3 -0
  93. package/dist/commonjs/queues/bufferQueue.js.map +1 -0
  94. package/dist/commonjs/{helpers → queues}/keyedQueue.d.ts +1 -0
  95. package/dist/commonjs/queues/keyedQueue.d.ts.map +1 -0
  96. package/dist/commonjs/{helpers → queues}/keyedQueue.js +11 -0
  97. package/dist/commonjs/queues/keyedQueue.js.map +1 -0
  98. package/dist/commonjs/queues/keyedQueue.test.d.ts +2 -0
  99. package/dist/commonjs/queues/keyedQueue.test.d.ts.map +1 -0
  100. package/dist/commonjs/queues/keyedQueue.test.js +118 -0
  101. package/dist/commonjs/queues/keyedQueue.test.js.map +1 -0
  102. package/dist/commonjs/queues/queue.d.ts +5 -0
  103. package/dist/commonjs/queues/queue.d.ts.map +1 -0
  104. package/dist/commonjs/{helpers → queues}/queue.js.map +1 -1
  105. package/dist/commonjs/types/functions.d.ts +21 -0
  106. package/dist/commonjs/types/functions.d.ts.map +1 -0
  107. package/dist/commonjs/types/functions.js +92 -0
  108. package/dist/commonjs/types/functions.js.map +1 -0
  109. package/dist/commonjs/types/types.d.ts +6 -7
  110. package/dist/commonjs/types/types.d.ts.map +1 -1
  111. package/dist/commonjs/types/types.js +0 -36
  112. package/dist/commonjs/types/types.js.map +1 -1
  113. package/dist/esm/{operations → core}/interfaces.d.ts +5 -7
  114. package/dist/esm/core/interfaces.d.ts.map +1 -0
  115. package/dist/esm/core/interfaces.js.map +1 -0
  116. package/dist/esm/{operations → core}/objectLoader2.d.ts +1 -1
  117. package/dist/esm/core/objectLoader2.d.ts.map +1 -0
  118. package/dist/esm/core/objectLoader2.js +113 -0
  119. package/dist/esm/core/objectLoader2.js.map +1 -0
  120. package/dist/{commonjs/operations → esm/core}/objectLoader2Factory.d.ts +10 -2
  121. package/dist/esm/core/objectLoader2Factory.d.ts.map +1 -0
  122. package/dist/esm/core/objectLoader2Factory.js +79 -0
  123. package/dist/esm/core/objectLoader2Factory.js.map +1 -0
  124. package/dist/esm/core/objectLoader2Factory.test.d.ts +2 -0
  125. package/dist/esm/core/objectLoader2Factory.test.d.ts.map +1 -0
  126. package/dist/esm/core/objectLoader2Factory.test.js +104 -0
  127. package/dist/esm/core/objectLoader2Factory.test.js.map +1 -0
  128. package/dist/{commonjs/operations → esm/core}/options.d.ts +4 -1
  129. package/dist/esm/core/options.d.ts.map +1 -0
  130. package/dist/esm/{operations → core}/options.js.map +1 -1
  131. package/dist/esm/core/stages/cacheReader.d.ts +18 -0
  132. package/dist/esm/core/stages/cacheReader.d.ts.map +1 -0
  133. package/dist/esm/core/stages/cacheReader.js +65 -0
  134. package/dist/esm/core/stages/cacheReader.js.map +1 -0
  135. package/dist/esm/core/stages/cacheWriter.d.ts +15 -0
  136. package/dist/esm/core/stages/cacheWriter.d.ts.map +1 -0
  137. package/dist/esm/core/stages/cacheWriter.js +43 -0
  138. package/dist/esm/core/stages/cacheWriter.js.map +1 -0
  139. package/dist/esm/core/stages/indexedDatabase.d.ts +34 -0
  140. package/dist/esm/core/stages/indexedDatabase.d.ts.map +1 -0
  141. package/dist/esm/core/stages/indexedDatabase.js +146 -0
  142. package/dist/esm/core/stages/indexedDatabase.js.map +1 -0
  143. package/dist/esm/core/stages/memory/memoryDatabase.d.ts +11 -0
  144. package/dist/esm/core/stages/memory/memoryDatabase.d.ts.map +1 -0
  145. package/dist/esm/{operations/databases → core/stages/memory}/memoryDatabase.js +6 -3
  146. package/dist/esm/core/stages/memory/memoryDatabase.js.map +1 -0
  147. package/dist/esm/{operations/downloaders → core/stages/memory}/memoryDownloader.d.ts +4 -4
  148. package/dist/esm/core/stages/memory/memoryDownloader.d.ts.map +1 -0
  149. package/dist/esm/{operations/downloaders → core/stages/memory}/memoryDownloader.js +1 -1
  150. package/dist/esm/core/stages/memory/memoryDownloader.js.map +1 -0
  151. package/dist/{commonjs/operations/downloaders → esm/core/stages}/serverDownloader.d.ts +8 -6
  152. package/dist/esm/core/stages/serverDownloader.d.ts.map +1 -0
  153. package/dist/esm/{operations/downloaders → core/stages}/serverDownloader.js +98 -49
  154. package/dist/esm/core/stages/serverDownloader.js.map +1 -0
  155. package/dist/esm/core/traverser.d.ts.map +1 -0
  156. package/dist/esm/{operations → core}/traverser.js +1 -1
  157. package/dist/esm/core/traverser.js.map +1 -0
  158. package/dist/esm/deferment/MemoryCache.d.ts +35 -0
  159. package/dist/esm/deferment/MemoryCache.d.ts.map +1 -0
  160. package/dist/esm/deferment/MemoryCache.js +157 -0
  161. package/dist/esm/deferment/MemoryCache.js.map +1 -0
  162. package/dist/esm/deferment/MemoryCache.test.d.ts +2 -0
  163. package/dist/esm/deferment/MemoryCache.test.d.ts.map +1 -0
  164. package/dist/esm/deferment/MemoryCache.test.js +151 -0
  165. package/dist/esm/deferment/MemoryCache.test.js.map +1 -0
  166. package/dist/esm/deferment/defermentManager.d.ts +32 -0
  167. package/dist/esm/deferment/defermentManager.d.ts.map +1 -0
  168. package/dist/esm/deferment/defermentManager.js +80 -0
  169. package/dist/esm/deferment/defermentManager.js.map +1 -0
  170. package/dist/esm/deferment/defermentManager.test.d.ts +2 -0
  171. package/dist/esm/deferment/defermentManager.test.d.ts.map +1 -0
  172. package/dist/esm/deferment/defermentManager.test.js +191 -0
  173. package/dist/esm/deferment/defermentManager.test.js.map +1 -0
  174. package/dist/esm/deferment/deferredBase.d.ts +12 -0
  175. package/dist/esm/deferment/deferredBase.d.ts.map +1 -0
  176. package/dist/esm/deferment/deferredBase.js +23 -0
  177. package/dist/esm/deferment/deferredBase.js.map +1 -0
  178. package/dist/esm/index.d.ts +4 -2
  179. package/dist/esm/index.d.ts.map +1 -1
  180. package/dist/esm/index.js +3 -2
  181. package/dist/esm/index.js.map +1 -1
  182. package/dist/esm/{helpers → queues}/aggregateQueue.d.ts +2 -1
  183. package/dist/esm/queues/aggregateQueue.d.ts.map +1 -0
  184. package/dist/esm/{helpers → queues}/aggregateQueue.js +4 -0
  185. package/dist/esm/queues/aggregateQueue.js.map +1 -0
  186. package/dist/{commonjs/helpers → esm/queues}/asyncGeneratorQueue.d.ts +1 -1
  187. package/dist/esm/queues/asyncGeneratorQueue.d.ts.map +1 -0
  188. package/dist/esm/{helpers → queues}/asyncGeneratorQueue.js +2 -1
  189. package/dist/esm/queues/asyncGeneratorQueue.js.map +1 -0
  190. package/dist/esm/{helpers → queues}/batchingQueue.d.ts +4 -1
  191. package/dist/esm/queues/batchingQueue.d.ts.map +1 -0
  192. package/dist/esm/queues/batchingQueue.dispose.test.d.ts +2 -0
  193. package/dist/esm/queues/batchingQueue.dispose.test.d.ts.map +1 -0
  194. package/dist/esm/queues/batchingQueue.dispose.test.js +57 -0
  195. package/dist/esm/queues/batchingQueue.dispose.test.js.map +1 -0
  196. package/dist/esm/queues/batchingQueue.js +122 -0
  197. package/dist/esm/queues/batchingQueue.js.map +1 -0
  198. package/dist/esm/queues/batchingQueue.test.d.ts +2 -0
  199. package/dist/esm/queues/batchingQueue.test.d.ts.map +1 -0
  200. package/dist/esm/queues/batchingQueue.test.js +231 -0
  201. package/dist/esm/queues/batchingQueue.test.js.map +1 -0
  202. package/dist/{commonjs/helpers → esm/queues}/bufferQueue.d.ts +1 -0
  203. package/dist/esm/queues/bufferQueue.d.ts.map +1 -0
  204. package/dist/esm/{helpers → queues}/bufferQueue.js +3 -0
  205. package/dist/esm/queues/bufferQueue.js.map +1 -0
  206. package/dist/esm/{helpers → queues}/keyedQueue.d.ts +1 -0
  207. package/dist/esm/queues/keyedQueue.d.ts.map +1 -0
  208. package/dist/esm/{helpers → queues}/keyedQueue.js +11 -0
  209. package/dist/esm/queues/keyedQueue.js.map +1 -0
  210. package/dist/esm/queues/keyedQueue.test.d.ts +2 -0
  211. package/dist/esm/queues/keyedQueue.test.d.ts.map +1 -0
  212. package/dist/esm/queues/keyedQueue.test.js +113 -0
  213. package/dist/esm/queues/keyedQueue.test.js.map +1 -0
  214. package/dist/esm/queues/queue.d.ts +5 -0
  215. package/dist/esm/queues/queue.d.ts.map +1 -0
  216. package/dist/esm/{helpers → queues}/queue.js.map +1 -1
  217. package/dist/esm/types/functions.d.ts +21 -0
  218. package/dist/esm/types/functions.d.ts.map +1 -0
  219. package/dist/esm/types/functions.js +83 -0
  220. package/dist/esm/types/functions.js.map +1 -0
  221. package/dist/esm/types/types.d.ts +6 -7
  222. package/dist/esm/types/types.d.ts.map +1 -1
  223. package/dist/esm/types/types.js +1 -32
  224. package/dist/esm/types/types.js.map +1 -1
  225. package/package.json +5 -3
  226. package/src/{operations → core}/interfaces.ts +5 -5
  227. package/src/{operations → core}/objectLoader2.spec.ts +31 -11
  228. package/src/core/objectLoader2.ts +152 -0
  229. package/src/core/objectLoader2Factory.test.ts +135 -0
  230. package/src/core/objectLoader2Factory.ts +113 -0
  231. package/src/{operations → core}/options.ts +4 -1
  232. package/src/{operations/databases → core/stages}/__snapshots__/indexedDatabase.spec.ts.snap +4 -4
  233. package/src/{operations/downloaders → core/stages}/__snapshots__/serverDownloader.spec.ts.snap +25 -0
  234. package/src/{helpers → core/stages}/cacheReader.spec.ts +12 -7
  235. package/src/core/stages/cacheReader.ts +88 -0
  236. package/src/core/stages/cacheWriter.spec.ts +213 -0
  237. package/src/core/stages/cacheWriter.ts +64 -0
  238. package/src/{operations/databases → core/stages}/indexedDatabase.spec.ts +12 -8
  239. package/src/core/stages/indexedDatabase.ts +178 -0
  240. package/src/{operations/databases → core/stages/memory}/memoryDatabase.spec.ts +7 -7
  241. package/src/{operations/databases → core/stages/memory}/memoryDatabase.ts +9 -6
  242. package/src/{operations/downloaders → core/stages/memory}/memoryDownloader.spec.ts +5 -5
  243. package/src/{operations/downloaders → core/stages/memory}/memoryDownloader.ts +4 -4
  244. package/src/core/stages/serverDownloader.spec.ts +382 -0
  245. package/src/{operations/downloaders → core/stages}/serverDownloader.ts +115 -52
  246. package/src/{operations → core}/traverser.ts +2 -1
  247. package/src/deferment/MemoryCache.test.ts +187 -0
  248. package/src/deferment/MemoryCache.ts +189 -0
  249. package/src/deferment/defermentManager.test.ts +225 -0
  250. package/src/deferment/defermentManager.ts +95 -0
  251. package/src/deferment/deferredBase.ts +29 -0
  252. package/src/index.ts +4 -2
  253. package/src/{helpers → queues}/aggregateQueue.ts +5 -1
  254. package/src/{helpers → queues}/asyncGeneratorQueue.ts +2 -1
  255. package/src/queues/batchingQueue.dispose.test.ts +72 -0
  256. package/src/queues/batchingQueue.test.ts +270 -0
  257. package/src/queues/batchingQueue.ts +140 -0
  258. package/src/{helpers → queues}/bufferQueue.ts +3 -0
  259. package/src/queues/keyedQueue.test.ts +146 -0
  260. package/src/{helpers → queues}/keyedQueue.ts +12 -0
  261. package/src/{helpers → queues}/queue.ts +1 -0
  262. package/src/test/e2e.spec.ts +2 -2
  263. package/src/types/functions.spec.ts +155 -0
  264. package/src/types/functions.ts +116 -0
  265. package/src/types/types.ts +5 -50
  266. package/dist/commonjs/helpers/aggregateQueue.d.ts.map +0 -1
  267. package/dist/commonjs/helpers/aggregateQueue.js.map +0 -1
  268. package/dist/commonjs/helpers/asyncGeneratorQueue.d.ts.map +0 -1
  269. package/dist/commonjs/helpers/asyncGeneratorQueue.js.map +0 -1
  270. package/dist/commonjs/helpers/batchedPool.d.ts +0 -12
  271. package/dist/commonjs/helpers/batchedPool.d.ts.map +0 -1
  272. package/dist/commonjs/helpers/batchedPool.js +0 -45
  273. package/dist/commonjs/helpers/batchedPool.js.map +0 -1
  274. package/dist/commonjs/helpers/batchingQueue.d.ts.map +0 -1
  275. package/dist/commonjs/helpers/batchingQueue.js +0 -77
  276. package/dist/commonjs/helpers/batchingQueue.js.map +0 -1
  277. package/dist/commonjs/helpers/bufferQueue.d.ts.map +0 -1
  278. package/dist/commonjs/helpers/bufferQueue.js.map +0 -1
  279. package/dist/commonjs/helpers/cachePump.d.ts +0 -22
  280. package/dist/commonjs/helpers/cachePump.d.ts.map +0 -1
  281. package/dist/commonjs/helpers/cachePump.js +0 -86
  282. package/dist/commonjs/helpers/cachePump.js.map +0 -1
  283. package/dist/commonjs/helpers/cacheReader.d.ts +0 -14
  284. package/dist/commonjs/helpers/cacheReader.d.ts.map +0 -1
  285. package/dist/commonjs/helpers/cacheReader.js +0 -58
  286. package/dist/commonjs/helpers/cacheReader.js.map +0 -1
  287. package/dist/commonjs/helpers/defermentManager.d.ts +0 -28
  288. package/dist/commonjs/helpers/defermentManager.d.ts.map +0 -1
  289. package/dist/commonjs/helpers/defermentManager.js +0 -150
  290. package/dist/commonjs/helpers/defermentManager.js.map +0 -1
  291. package/dist/commonjs/helpers/deferredBase.d.ts +0 -19
  292. package/dist/commonjs/helpers/deferredBase.d.ts.map +0 -1
  293. package/dist/commonjs/helpers/deferredBase.js +0 -51
  294. package/dist/commonjs/helpers/deferredBase.js.map +0 -1
  295. package/dist/commonjs/helpers/keyedQueue.d.ts.map +0 -1
  296. package/dist/commonjs/helpers/keyedQueue.js.map +0 -1
  297. package/dist/commonjs/helpers/memoryPump.d.ts +0 -15
  298. package/dist/commonjs/helpers/memoryPump.d.ts.map +0 -1
  299. package/dist/commonjs/helpers/memoryPump.js +0 -34
  300. package/dist/commonjs/helpers/memoryPump.js.map +0 -1
  301. package/dist/commonjs/helpers/pump.d.ts +0 -8
  302. package/dist/commonjs/helpers/pump.d.ts.map +0 -1
  303. package/dist/commonjs/helpers/pump.js +0 -3
  304. package/dist/commonjs/helpers/pump.js.map +0 -1
  305. package/dist/commonjs/helpers/queue.d.ts +0 -4
  306. package/dist/commonjs/helpers/queue.d.ts.map +0 -1
  307. package/dist/commonjs/operations/databases/indexedDatabase.d.ts +0 -27
  308. package/dist/commonjs/operations/databases/indexedDatabase.d.ts.map +0 -1
  309. package/dist/commonjs/operations/databases/indexedDatabase.js +0 -98
  310. package/dist/commonjs/operations/databases/indexedDatabase.js.map +0 -1
  311. package/dist/commonjs/operations/databases/memoryDatabase.d.ts +0 -13
  312. package/dist/commonjs/operations/databases/memoryDatabase.d.ts.map +0 -1
  313. package/dist/commonjs/operations/databases/memoryDatabase.js.map +0 -1
  314. package/dist/commonjs/operations/downloaders/memoryDownloader.d.ts.map +0 -1
  315. package/dist/commonjs/operations/downloaders/memoryDownloader.js.map +0 -1
  316. package/dist/commonjs/operations/downloaders/serverDownloader.d.ts.map +0 -1
  317. package/dist/commonjs/operations/downloaders/serverDownloader.js.map +0 -1
  318. package/dist/commonjs/operations/interfaces.d.ts.map +0 -1
  319. package/dist/commonjs/operations/interfaces.js.map +0 -1
  320. package/dist/commonjs/operations/objectLoader2.d.ts.map +0 -1
  321. package/dist/commonjs/operations/objectLoader2.js +0 -101
  322. package/dist/commonjs/operations/objectLoader2.js.map +0 -1
  323. package/dist/commonjs/operations/objectLoader2Factory.d.ts.map +0 -1
  324. package/dist/commonjs/operations/objectLoader2Factory.js +0 -68
  325. package/dist/commonjs/operations/objectLoader2Factory.js.map +0 -1
  326. package/dist/commonjs/operations/options.d.ts.map +0 -1
  327. package/dist/commonjs/operations/traverser.d.ts.map +0 -1
  328. package/dist/commonjs/operations/traverser.js.map +0 -1
  329. package/dist/esm/helpers/aggregateQueue.d.ts.map +0 -1
  330. package/dist/esm/helpers/aggregateQueue.js.map +0 -1
  331. package/dist/esm/helpers/asyncGeneratorQueue.d.ts.map +0 -1
  332. package/dist/esm/helpers/asyncGeneratorQueue.js.map +0 -1
  333. package/dist/esm/helpers/batchedPool.d.ts +0 -12
  334. package/dist/esm/helpers/batchedPool.d.ts.map +0 -1
  335. package/dist/esm/helpers/batchedPool.js +0 -42
  336. package/dist/esm/helpers/batchedPool.js.map +0 -1
  337. package/dist/esm/helpers/batchingQueue.d.ts.map +0 -1
  338. package/dist/esm/helpers/batchingQueue.js +0 -71
  339. package/dist/esm/helpers/batchingQueue.js.map +0 -1
  340. package/dist/esm/helpers/bufferQueue.d.ts.map +0 -1
  341. package/dist/esm/helpers/bufferQueue.js.map +0 -1
  342. package/dist/esm/helpers/cachePump.d.ts +0 -22
  343. package/dist/esm/helpers/cachePump.d.ts.map +0 -1
  344. package/dist/esm/helpers/cachePump.js +0 -79
  345. package/dist/esm/helpers/cachePump.js.map +0 -1
  346. package/dist/esm/helpers/cacheReader.d.ts +0 -14
  347. package/dist/esm/helpers/cacheReader.d.ts.map +0 -1
  348. package/dist/esm/helpers/cacheReader.js +0 -51
  349. package/dist/esm/helpers/cacheReader.js.map +0 -1
  350. package/dist/esm/helpers/defermentManager.d.ts +0 -28
  351. package/dist/esm/helpers/defermentManager.d.ts.map +0 -1
  352. package/dist/esm/helpers/defermentManager.js +0 -146
  353. package/dist/esm/helpers/defermentManager.js.map +0 -1
  354. package/dist/esm/helpers/deferredBase.d.ts +0 -19
  355. package/dist/esm/helpers/deferredBase.d.ts.map +0 -1
  356. package/dist/esm/helpers/deferredBase.js +0 -47
  357. package/dist/esm/helpers/deferredBase.js.map +0 -1
  358. package/dist/esm/helpers/keyedQueue.d.ts.map +0 -1
  359. package/dist/esm/helpers/keyedQueue.js.map +0 -1
  360. package/dist/esm/helpers/memoryPump.d.ts +0 -15
  361. package/dist/esm/helpers/memoryPump.d.ts.map +0 -1
  362. package/dist/esm/helpers/memoryPump.js +0 -30
  363. package/dist/esm/helpers/memoryPump.js.map +0 -1
  364. package/dist/esm/helpers/pump.d.ts +0 -8
  365. package/dist/esm/helpers/pump.d.ts.map +0 -1
  366. package/dist/esm/helpers/pump.js +0 -2
  367. package/dist/esm/helpers/pump.js.map +0 -1
  368. package/dist/esm/helpers/queue.d.ts +0 -4
  369. package/dist/esm/helpers/queue.d.ts.map +0 -1
  370. package/dist/esm/operations/databases/indexedDatabase.d.ts +0 -27
  371. package/dist/esm/operations/databases/indexedDatabase.d.ts.map +0 -1
  372. package/dist/esm/operations/databases/indexedDatabase.js +0 -93
  373. package/dist/esm/operations/databases/indexedDatabase.js.map +0 -1
  374. package/dist/esm/operations/databases/memoryDatabase.d.ts +0 -13
  375. package/dist/esm/operations/databases/memoryDatabase.d.ts.map +0 -1
  376. package/dist/esm/operations/databases/memoryDatabase.js.map +0 -1
  377. package/dist/esm/operations/downloaders/memoryDownloader.d.ts.map +0 -1
  378. package/dist/esm/operations/downloaders/memoryDownloader.js.map +0 -1
  379. package/dist/esm/operations/downloaders/serverDownloader.d.ts.map +0 -1
  380. package/dist/esm/operations/downloaders/serverDownloader.js.map +0 -1
  381. package/dist/esm/operations/interfaces.d.ts.map +0 -1
  382. package/dist/esm/operations/interfaces.js.map +0 -1
  383. package/dist/esm/operations/objectLoader2.d.ts.map +0 -1
  384. package/dist/esm/operations/objectLoader2.js +0 -94
  385. package/dist/esm/operations/objectLoader2.js.map +0 -1
  386. package/dist/esm/operations/objectLoader2Factory.d.ts.map +0 -1
  387. package/dist/esm/operations/objectLoader2Factory.js +0 -61
  388. package/dist/esm/operations/objectLoader2Factory.js.map +0 -1
  389. package/dist/esm/operations/options.d.ts.map +0 -1
  390. package/dist/esm/operations/traverser.d.ts.map +0 -1
  391. package/dist/esm/operations/traverser.js.map +0 -1
  392. package/src/helpers/__snapshots__/cachePump.spec.ts.snap +0 -31
  393. package/src/helpers/__snapshots__/defermentManager.spec.ts.snap +0 -8
  394. package/src/helpers/batchedPool.ts +0 -56
  395. package/src/helpers/batchingQueue.ts +0 -85
  396. package/src/helpers/cachePump.disposal.spec.ts +0 -51
  397. package/src/helpers/cachePump.spec.ts +0 -104
  398. package/src/helpers/cachePump.ts +0 -107
  399. package/src/helpers/cacheReader.ts +0 -64
  400. package/src/helpers/defermentManager.defermentTotals.spec.ts +0 -53
  401. package/src/helpers/defermentManager.disposal.spec.ts +0 -28
  402. package/src/helpers/defermentManager.spec.ts +0 -37
  403. package/src/helpers/defermentManager.ts +0 -160
  404. package/src/helpers/deferredBase.ts +0 -55
  405. package/src/helpers/memoryPump.ts +0 -40
  406. package/src/helpers/pump.ts +0 -8
  407. package/src/operations/databases/indexedDatabase.ts +0 -126
  408. package/src/operations/downloaders/serverDownloader.spec.ts +0 -161
  409. package/src/operations/objectLoader2.ts +0 -119
  410. package/src/operations/objectLoader2Factory.ts +0 -78
  411. package/dist/commonjs/{operations → core}/interfaces.js +0 -0
  412. package/dist/commonjs/{operations → core}/options.js +0 -0
  413. package/dist/commonjs/{operations → core}/traverser.d.ts +0 -0
  414. package/dist/commonjs/{helpers → queues}/queue.js +0 -0
  415. package/dist/esm/{operations → core}/interfaces.js +0 -0
  416. package/dist/esm/{operations → core}/options.js +0 -0
  417. package/dist/esm/{operations → core}/traverser.d.ts +0 -0
  418. package/dist/esm/{helpers → queues}/queue.js +0 -0
  419. package/src/{operations → core}/__snapshots__/objectLoader2.spec.ts.snap +0 -0
  420. package/src/{operations → core}/__snapshots__/traverser.spec.ts.snap +0 -0
  421. package/src/{helpers → core/stages}/__snapshots__/cacheReader.spec.ts.snap +0 -0
  422. package/src/{operations/downloaders → core/stages/memory}/__snapshots__/memoryDownloader.spec.ts.snap +0 -0
  423. package/src/{operations → core}/traverser.spec.ts +1 -1
@@ -0,0 +1,213 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'
2
+ import { Item } from '../../types/types.js'
3
+ import { CacheWriter } from './cacheWriter.js'
4
+ import { DefermentManager } from '../../deferment/defermentManager.js'
5
+ import { Database } from '../interfaces.js'
6
+ import { MemoryCache, MemoryCacheOptions } from '../../deferment/MemoryCache.js'
7
+ import { CacheOptions } from '../options.js'
8
+ import { CustomLogger } from '../../types/functions.js'
9
+
10
+ // Mock implementations
11
+ class MockDatabase implements Database {
12
+ savedItems: Item[] = []
13
+
14
+ getAll(/* keys */): Promise<(Item | undefined)[]> {
15
+ return Promise.resolve([])
16
+ }
17
+
18
+ putAll(batch: Item[]): Promise<void> {
19
+ this.savedItems.push(...batch)
20
+ return Promise.resolve()
21
+ }
22
+
23
+ dispose(): void {
24
+ this.savedItems = []
25
+ }
26
+ }
27
+
28
+ describe('CacheWriter', () => {
29
+ let database: MockDatabase
30
+ let defermentManager: DefermentManager
31
+ let cacheWriter: CacheWriter
32
+ let logger: CustomLogger
33
+ let requestItemMock: (id: string) => void
34
+ let options: CacheOptions
35
+ let memoryCache: MemoryCache
36
+
37
+ beforeEach(() => {
38
+ database = new MockDatabase()
39
+ logger = vi.fn() as CustomLogger
40
+ const memoryCacheOptions: MemoryCacheOptions = {
41
+ maxSizeInMb: 100,
42
+ ttlms: 60000
43
+ }
44
+ memoryCache = new MemoryCache(memoryCacheOptions, logger)
45
+ defermentManager = new DefermentManager(logger, memoryCache)
46
+ requestItemMock = vi.fn()
47
+
48
+ options = {
49
+ maxCacheWriteSize: 10,
50
+ maxCacheBatchWriteWait: 50,
51
+ maxCacheReadSize: 10,
52
+ maxCacheBatchReadWait: 50,
53
+ maxWriteQueueSize: 100
54
+ }
55
+
56
+ cacheWriter = new CacheWriter(
57
+ database,
58
+ logger,
59
+ defermentManager,
60
+ options,
61
+ requestItemMock
62
+ )
63
+ })
64
+
65
+ afterEach(async () => {
66
+ await cacheWriter.disposeAsync()
67
+ })
68
+
69
+ it('should write items to the database', async () => {
70
+ const item: Item = {
71
+ baseId: 'test-id',
72
+ base: { id: 'test-id', synchronized_type: 'test-type' }
73
+ }
74
+
75
+ cacheWriter.add(item)
76
+
77
+ // Wait for batch queue to process
78
+ await new Promise((resolve) =>
79
+ setTimeout(resolve, options.maxCacheBatchWriteWait + 10)
80
+ )
81
+
82
+ expect(database.savedItems).toHaveLength(1)
83
+ expect(database.savedItems[0].baseId).toBe('test-id')
84
+ expect(database.savedItems[0].base).toEqual({
85
+ id: 'test-id',
86
+ synchronized_type: 'test-type'
87
+ })
88
+ })
89
+
90
+ it('should write multiple items in a batch', async () => {
91
+ const items = [
92
+ {
93
+ baseId: 'item1',
94
+ base: { id: 'item1', synchronized_type: 'test-type' }
95
+ },
96
+ {
97
+ baseId: 'item2',
98
+ base: { id: 'item2', synchronized_type: 'test-type' }
99
+ },
100
+ {
101
+ baseId: 'item3',
102
+ base: { id: 'item3', synchronized_type: 'test-type' }
103
+ }
104
+ ]
105
+
106
+ items.forEach((item) => cacheWriter.add(item))
107
+
108
+ // Wait for batch queue to process
109
+ await new Promise((resolve) =>
110
+ setTimeout(resolve, options.maxCacheBatchWriteWait + 10)
111
+ )
112
+
113
+ expect(database.savedItems).toHaveLength(3)
114
+ expect(database.savedItems.map((item) => item.baseId)).toEqual([
115
+ 'item1',
116
+ 'item2',
117
+ 'item3'
118
+ ])
119
+ })
120
+
121
+ it('should call undefer on the defermentManager', () => {
122
+ const spy = vi.spyOn(defermentManager, 'undefer')
123
+ const item: Item = {
124
+ baseId: 'test-id',
125
+ base: { id: 'test-id', synchronized_type: 'test-type' }
126
+ }
127
+
128
+ cacheWriter.add(item)
129
+
130
+ expect(spy).toHaveBeenCalledWith(item, requestItemMock)
131
+ })
132
+
133
+ it('should handle items with id but no base', async () => {
134
+ const item: Item = {
135
+ baseId: 'test-id-no-base'
136
+ // No base property
137
+ }
138
+
139
+ // Adding an item with no base should not throw an error
140
+ expect(() => cacheWriter.add(item)).not.toThrow()
141
+
142
+ // Wait for batch queue to process
143
+ await new Promise((resolve) =>
144
+ setTimeout(resolve, options.maxCacheBatchWriteWait + 10)
145
+ )
146
+
147
+ expect(database.savedItems).toHaveLength(1)
148
+ expect(database.savedItems[0].baseId).toBe('test-id-no-base')
149
+ expect(database.savedItems[0].base).toBeUndefined()
150
+ })
151
+
152
+ it('should process items in batches according to maxCacheWriteSize', async () => {
153
+ const spy = vi.spyOn(database, 'putAll')
154
+ const smallBatchOptions: CacheOptions = {
155
+ ...options,
156
+ maxCacheWriteSize: 2, // Set small batch size
157
+ maxCacheBatchWriteWait: 100
158
+ }
159
+
160
+ const smallBatchCacheWriter = new CacheWriter(
161
+ database,
162
+ logger,
163
+ defermentManager,
164
+ smallBatchOptions,
165
+ requestItemMock
166
+ )
167
+
168
+ // Add 5 items
169
+ const items = Array.from({ length: 5 }, (_, i) => ({
170
+ baseId: `batch-item-${i}`,
171
+ base: { id: `batch-item-${i}`, synchronized_type: 'test-type' }
172
+ }))
173
+
174
+ items.forEach((item) => smallBatchCacheWriter.add(item))
175
+
176
+ // Wait for batch queue to process
177
+ await new Promise((resolve) =>
178
+ setTimeout(resolve, smallBatchOptions.maxCacheBatchWriteWait * 2 + 50)
179
+ )
180
+
181
+ // With batch size 2, we expect 3 calls to saveBatch: 2 items + 2 items + 1 item
182
+ expect(spy).toHaveBeenCalledTimes(3)
183
+
184
+ await smallBatchCacheWriter.disposeAsync()
185
+ })
186
+
187
+ it('should be disposed correctly', async () => {
188
+ expect(cacheWriter.isDisposed).toBe(false)
189
+ await cacheWriter.disposeAsync()
190
+ expect(cacheWriter.isDisposed).toBe(true)
191
+ })
192
+
193
+ it('should write directly with writeAll method', async () => {
194
+ const items = [
195
+ {
196
+ baseId: 'direct1',
197
+ base: { id: 'direct1', synchronized_type: 'test-type' }
198
+ },
199
+ {
200
+ baseId: 'direct2',
201
+ base: { id: 'direct2', synchronized_type: 'test-type' }
202
+ }
203
+ ]
204
+
205
+ await cacheWriter.writeAll(items)
206
+
207
+ expect(database.savedItems).toHaveLength(2)
208
+ expect(database.savedItems.map((item) => item.baseId)).toEqual([
209
+ 'direct1',
210
+ 'direct2'
211
+ ])
212
+ })
213
+ })
@@ -0,0 +1,64 @@
1
+ import { Deferment } from '../../deferment/defermentManager.js'
2
+ import BatchingQueue from '../../queues/batchingQueue.js'
3
+ import Queue from '../../queues/queue.js'
4
+ import { CustomLogger } from '../../types/functions.js'
5
+ import { Item } from '../../types/types.js'
6
+ import { Database } from '../interfaces.js'
7
+ import { CacheOptions } from '../options.js'
8
+
9
+ export class CacheWriter implements Queue<Item> {
10
+ #writeQueue: BatchingQueue<Item> | undefined
11
+ #database: Database
12
+ #deferment: Deferment
13
+ #requestItem: (id: string) => void
14
+ #logger: CustomLogger
15
+ #options: CacheOptions
16
+ #disposed = false
17
+
18
+ constructor(
19
+ database: Database,
20
+ logger: CustomLogger,
21
+ deferment: Deferment,
22
+ options: CacheOptions,
23
+ requestItem: (id: string) => void
24
+ ) {
25
+ this.#database = database
26
+ this.#options = options
27
+ this.#logger = logger
28
+ this.#deferment = deferment
29
+ this.#requestItem = requestItem
30
+ }
31
+
32
+ add(item: Item): void {
33
+ if (!this.#writeQueue) {
34
+ this.#writeQueue = new BatchingQueue({
35
+ batchSize: this.#options.maxCacheWriteSize,
36
+ maxWaitTime: this.#options.maxCacheBatchWriteWait,
37
+ processFunction: async (batch: Item[]): Promise<void> => {
38
+ await this.writeAll(batch)
39
+ }
40
+ })
41
+ }
42
+ this.#writeQueue.add(item.baseId, item)
43
+ this.#deferment.undefer(item, this.#requestItem)
44
+ }
45
+
46
+ async writeAll(items: Item[]): Promise<void> {
47
+ const start = performance.now()
48
+ await this.#database.putAll(items)
49
+ this.#logger(
50
+ `writeBatch: wrote ${items.length}, time ${
51
+ performance.now() - start
52
+ } ms left ${this.#writeQueue?.count()}`
53
+ )
54
+ }
55
+
56
+ async disposeAsync(): Promise<void> {
57
+ this.#disposed = true
58
+ await this.#writeQueue?.disposeAsync()
59
+ }
60
+
61
+ get isDisposed(): boolean {
62
+ return this.#disposed
63
+ }
64
+ }
@@ -1,10 +1,14 @@
1
1
  import { describe, it, expect, beforeEach, afterEach } from 'vitest'
2
2
  import { IDBFactory, IDBKeyRange } from 'fake-indexeddb'
3
- import IndexedDatabase, { IndexedDatabaseOptions } from './indexedDatabase.js'
4
- import { Item } from '../../types/types.js'
3
+
4
+ import { Base, Item } from '../../types/types.js'
5
+ import { IndexedDatabase, IndexedDatabaseOptions } from './indexedDatabase.js'
5
6
 
6
7
  // Mock Item
7
- const defaultItem = (id: string): Item => ({ baseId: id, item: { foo: 'bar' } })
8
+ const defaultItem = (id: string): Item => ({
9
+ baseId: id,
10
+ base: { foo: 'bar' } as unknown as Base
11
+ })
8
12
 
9
13
  describe('IndexedDatabase', () => {
10
14
  let db: IndexedDatabase
@@ -15,19 +19,19 @@ describe('IndexedDatabase', () => {
15
19
  db = new IndexedDatabase(options)
16
20
  })
17
21
 
18
- afterEach(async () => {
19
- await db.disposeAsync()
22
+ afterEach(() => {
23
+ db.dispose()
20
24
  })
21
25
 
22
26
  it('should add and get multiple items', async () => {
23
27
  const items = [defaultItem('id1'), defaultItem('id2')]
24
- await db.cacheSaveBatch({ batch: items })
28
+ await db.putAll(items)
25
29
  const result = await db.getAll(['id1', 'id2'])
26
30
  expect(result).toMatchSnapshot()
27
31
  expect(result).toEqual(items)
28
32
  })
29
33
 
30
- it('should dispose without error', async () => {
31
- await expect(db.disposeAsync()).resolves.not.toThrow()
34
+ it('should dispose without error', () => {
35
+ expect(() => db.dispose()).not.toThrow()
32
36
  })
33
37
  })
@@ -0,0 +1,178 @@
1
+ /* eslint-disable @typescript-eslint/no-base-to-string */
2
+ /* eslint-disable @typescript-eslint/prefer-promise-reject-errors */
3
+ /* eslint-disable @typescript-eslint/no-explicit-any */
4
+ /* eslint-disable @typescript-eslint/no-unsafe-function-type */
5
+ import { isSafari } from '@synchronized-console/shared'
6
+ import { Item } from '../../types/types.js'
7
+ import { Database } from '../interfaces.js'
8
+
9
+ /**
10
+ * A wrapper class for IndexedDB to simplify common database operations.
11
+ */
12
+ export interface IndexedDatabaseOptions {
13
+ indexedDB?: IDBFactory
14
+ keyRange?: {
15
+ bound: Function
16
+ lowerBound: Function
17
+ upperBound: Function
18
+ }
19
+ }
20
+ export class IndexedDatabase implements Database {
21
+ #options: IndexedDatabaseOptions
22
+
23
+ #db: IDBDatabase | undefined = undefined
24
+ readonly #dbName: string = 'synchronized-cache'
25
+ readonly #storeName: string = 'cache'
26
+
27
+ constructor(options: IndexedDatabaseOptions) {
28
+ this.#options = options
29
+ }
30
+
31
+ /**
32
+ * Initializes the database connection and creates the object store if needed.
33
+ * This must be called before any other database operations.
34
+ */
35
+ async init(): Promise<void> {
36
+ if (this.#db) return
37
+ await this.#safariFix()
38
+ return this.#openDatabase()
39
+ }
40
+
41
+ /**
42
+ * Opens the database, and if there's an error, deletes the database and tries again.
43
+ */
44
+ async #openDatabase(): Promise<void> {
45
+ const idb = this.#options.indexedDB ?? indexedDB
46
+
47
+ return new Promise((resolve, reject) => {
48
+ const request = idb.open(this.#dbName, 1)
49
+
50
+ request.onerror = (): any => {
51
+ console.warn(
52
+ `Failed to open database: ${this.#dbName}, deleting and trying again`
53
+ )
54
+ // Delete the database and try again
55
+ const deleteRequest = idb.deleteDatabase(this.#dbName)
56
+ deleteRequest.onsuccess = (): any => {
57
+ // Try opening again after deletion
58
+ void this.#openDatabase().then(resolve).catch(reject)
59
+ }
60
+ deleteRequest.onerror = (): any => {
61
+ reject(`Failed to delete and reopen database: ${this.#dbName}`)
62
+ }
63
+ }
64
+
65
+ request.onupgradeneeded = (event): any => {
66
+ const db = (event.target as IDBOpenDBRequest).result
67
+ if (db.objectStoreNames.contains(this.#storeName)) {
68
+ db.deleteObjectStore(this.#storeName)
69
+ }
70
+ db.createObjectStore(this.#storeName, { keyPath: 'baseId' })
71
+ }
72
+
73
+ request.onsuccess = (event): any => {
74
+ this.#db = (event.target as IDBOpenDBRequest).result
75
+ resolve()
76
+ }
77
+ })
78
+ }
79
+
80
+ #getDB(): IDBDatabase {
81
+ if (!this.#db) {
82
+ throw new Error('Database not initialized. Call init() first.')
83
+ }
84
+ return this.#db
85
+ }
86
+
87
+ /**
88
+ * Fixes a Safari bug where IndexedDB requests get lost and never resolve - invoke before you use IndexedDB
89
+ * @link Credits and more info: https://github.com/jakearchibald/safari-14-idb-fix
90
+ */
91
+ async #safariFix(): Promise<void> {
92
+ // No point putting other browsers or older versions of Safari through this mess.
93
+ if (!isSafari() || !this.#options.indexedDB?.databases) return Promise.resolve()
94
+
95
+ let intervalId: ReturnType<typeof setInterval>
96
+
97
+ return new Promise<void>((resolve: () => void) => {
98
+ const tryIdb = (): Promise<IDBDatabaseInfo[]> | undefined =>
99
+ this.#options.indexedDB?.databases().finally(resolve)
100
+ intervalId = setInterval(() => {
101
+ void tryIdb()
102
+ }, 100)
103
+ void tryIdb()
104
+ }).finally(() => clearInterval(intervalId))
105
+ }
106
+
107
+ /**
108
+ * Inserts or updates an array of items in a single transaction.
109
+ * @param data The array of items to insert.
110
+ */
111
+ async putAll(data: Item[]): Promise<void> {
112
+ await this.init() // Ensure the database is initialized
113
+ return new Promise((resolve, reject) => {
114
+ try {
115
+ const transaction = this.#getDB().transaction(this.#storeName, 'readwrite', {
116
+ durability: 'relaxed'
117
+ })
118
+ const store = transaction.objectStore(this.#storeName)
119
+
120
+ transaction.onerror = (): any => {
121
+ reject(`Transaction error: ${transaction.error}`)
122
+ }
123
+ transaction.oncomplete = (): any => {
124
+ resolve()
125
+ }
126
+
127
+ data.forEach((item) => store.put(item))
128
+ } catch (error) {
129
+ reject(error)
130
+ }
131
+ })
132
+ }
133
+
134
+ /**
135
+ * Retrieves an array of items from the object store based on their IDs.
136
+ * @param ids The array of IDs to retrieve.
137
+ */
138
+ async getAll(ids: string[]): Promise<(Item | undefined)[]> {
139
+ await this.init() // Ensure the database is initialized
140
+ return new Promise((resolve, reject) => {
141
+ if (ids.length === 0) {
142
+ return resolve([])
143
+ }
144
+ try {
145
+ const transaction = this.#getDB().transaction(this.#storeName, 'readonly', {
146
+ durability: 'relaxed'
147
+ })
148
+ const store = transaction.objectStore(this.#storeName)
149
+ const promises: Promise<Item | undefined>[] = []
150
+
151
+ for (const id of ids) {
152
+ promises.push(
153
+ new Promise((resolveGet, rejectGet) => {
154
+ const request = store.get(id)
155
+ request.onerror = (): void =>
156
+ rejectGet(`Request error for id ${id}: ${request.error}`)
157
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
158
+ request.onsuccess = (): void => resolveGet(request.result)
159
+ })
160
+ )
161
+ }
162
+
163
+ Promise.all(promises)
164
+ .then((results) => {
165
+ resolve(results)
166
+ })
167
+ .catch(reject)
168
+ } catch (error) {
169
+ reject(error)
170
+ }
171
+ })
172
+ }
173
+ dispose(): void {
174
+ if (!this.#db) return
175
+ this.#db.close()
176
+ this.#db = undefined
177
+ }
178
+ }
@@ -1,6 +1,6 @@
1
1
  import { describe, it, expect, beforeEach } from 'vitest'
2
+ import { Item, Base } from '../../../types/types.js'
2
3
  import { MemoryDatabase } from './memoryDatabase.js'
3
- import { Base, Item } from '../../types/types.js'
4
4
 
5
5
  const makeItem = (id: string, foo = 'bar'): Item => ({
6
6
  baseId: id,
@@ -21,14 +21,14 @@ describe('MemoryDatabase', () => {
21
21
 
22
22
  it('should add and retrieve a single item', async () => {
23
23
  const item = makeItem('id1')
24
- await db.cacheSaveBatch({ batch: [item] })
24
+ await db.putAll([item])
25
25
  const result = await db.getAll(['id1'])
26
26
  expect(result).toEqual([item])
27
27
  })
28
28
 
29
29
  it('should add and retrieve multiple items', async () => {
30
30
  const items = [makeItem('id1'), makeItem('id2', 'baz')]
31
- await db.cacheSaveBatch({ batch: items })
31
+ await db.putAll(items)
32
32
  const result = await db.getAll(['id1', 'id2'])
33
33
  expect(result).toEqual(items)
34
34
  })
@@ -36,13 +36,13 @@ describe('MemoryDatabase', () => {
36
36
  it('should overwrite items with the same key', async () => {
37
37
  const item1 = makeItem('id1', 'foo')
38
38
  const item2 = makeItem('id1', 'bar')
39
- await db.cacheSaveBatch({ batch: [item1] })
40
- await db.cacheSaveBatch({ batch: [item2] })
39
+ await db.putAll([item1])
40
+ await db.putAll([item2])
41
41
  const result = await db.getAll(['id1'])
42
42
  expect(result).toEqual([item2])
43
43
  })
44
44
 
45
- it('disposeAsync should resolve', async () => {
46
- await expect(db.disposeAsync()).resolves.not.toThrow()
45
+ it('dispose should not throw', () => {
46
+ db.dispose()
47
47
  })
48
48
  })
@@ -1,6 +1,6 @@
1
- import { Base, Item } from '../../types/types.js'
2
- import { Database } from '../interfaces.js'
3
- import { MemoryDatabaseOptions } from '../options.js'
1
+ import { Base, Item } from '../../../types/types.js'
2
+ import { Database } from '../../interfaces.js'
3
+ import { MemoryDatabaseOptions } from '../../options.js'
4
4
 
5
5
  export class MemoryDatabase implements Database {
6
6
  private items: Map<string, Base>
@@ -22,14 +22,17 @@ export class MemoryDatabase implements Database {
22
22
  return Promise.resolve(found)
23
23
  }
24
24
 
25
- cacheSaveBatch({ batch }: { batch: Item[] }): Promise<void> {
25
+ putAll(batch: Item[]): Promise<void> {
26
26
  for (const item of batch) {
27
+ if (!item.baseId || !item.base) {
28
+ throw new Error('Item must have a baseId and base')
29
+ }
27
30
  this.items.set(item.baseId, item.base)
28
31
  }
29
32
  return Promise.resolve()
30
33
  }
31
34
 
32
- disposeAsync(): Promise<void> {
33
- return Promise.resolve()
35
+ dispose(): void {
36
+ this.items.clear()
34
37
  }
35
38
  }
@@ -1,8 +1,8 @@
1
1
  import { describe, it, expect, beforeEach } from 'vitest'
2
2
  import { MemoryDownloader } from './memoryDownloader.js'
3
- import { Base, Item } from '../../types/types.js'
4
- import Queue from '../../helpers/queue.js'
5
- import BufferQueue from '../../helpers/bufferQueue.js'
3
+ import BufferQueue from '../../../queues/bufferQueue.js'
4
+ import Queue from '../../../queues/queue.js'
5
+ import { Base, Item } from '../../../types/types.js'
6
6
 
7
7
  const makeBase = (foo: string): Base => ({ foo } as unknown as Base)
8
8
 
@@ -33,13 +33,13 @@ describe('MemoryDownloader', () => {
33
33
  })
34
34
 
35
35
  it('should add found item to results queue', () => {
36
- downloader.initializePool({ results, total: 2 })
36
+ downloader.initialize({ results, total: 2 })
37
37
  downloader.add('id2')
38
38
  expect(items).toMatchSnapshot()
39
39
  })
40
40
 
41
41
  it('should throw if added item is missing', () => {
42
- downloader.initializePool({ results, total: 2 })
42
+ downloader.initialize({ results, total: 2 })
43
43
  expect(() => downloader.add('missing')).toThrow()
44
44
  })
45
45
 
@@ -1,6 +1,6 @@
1
- import Queue from '../../helpers/queue.js'
2
- import { Base, Item } from '../../types/types.js'
3
- import { Downloader } from '../interfaces.js'
1
+ import Queue from '../../../queues/queue.js'
2
+ import { Base, Item } from '../../../types/types.js'
3
+ import { Downloader } from '../../interfaces.js'
4
4
 
5
5
  export class MemoryDownloader implements Downloader {
6
6
  #items: Map<string, Base>
@@ -11,7 +11,7 @@ export class MemoryDownloader implements Downloader {
11
11
  this.#rootId = rootId
12
12
  this.#items = items
13
13
  }
14
- initializePool(params: {
14
+ initialize(params: {
15
15
  results: Queue<Item>
16
16
  total: number
17
17
  maxDownloadBatchWait?: number