@speckle/objectloader2 2.25.4 → 2.25.8

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 (419) hide show
  1. package/dist/commonjs/{operations → core}/interfaces.d.ts +2 -5
  2. package/dist/commonjs/core/interfaces.d.ts.map +1 -0
  3. package/dist/commonjs/core/interfaces.js.map +1 -0
  4. package/dist/{esm/operations → commonjs/core}/objectLoader2.d.ts +1 -1
  5. package/dist/commonjs/core/objectLoader2.d.ts.map +1 -0
  6. package/dist/commonjs/core/objectLoader2.js +128 -0
  7. package/dist/commonjs/core/objectLoader2.js.map +1 -0
  8. package/dist/commonjs/core/objectLoader2Factory.d.ts +27 -0
  9. package/dist/commonjs/core/objectLoader2Factory.d.ts.map +1 -0
  10. package/dist/commonjs/core/objectLoader2Factory.js +74 -0
  11. package/dist/commonjs/core/objectLoader2Factory.js.map +1 -0
  12. package/dist/{esm/operations → commonjs/core}/options.d.ts +2 -1
  13. package/dist/commonjs/core/options.d.ts.map +1 -0
  14. package/dist/commonjs/{operations → core}/options.js.map +1 -1
  15. package/dist/commonjs/core/stages/ItemStore.d.ts +37 -0
  16. package/dist/commonjs/core/stages/ItemStore.d.ts.map +1 -0
  17. package/dist/commonjs/core/stages/ItemStore.js +167 -0
  18. package/dist/commonjs/core/stages/ItemStore.js.map +1 -0
  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/{operations/databases → core/stages}/indexedDatabase.d.ts +2 -7
  28. package/dist/commonjs/core/stages/indexedDatabase.d.ts.map +1 -0
  29. package/dist/commonjs/core/stages/indexedDatabase.js +31 -0
  30. package/dist/commonjs/core/stages/indexedDatabase.js.map +1 -0
  31. package/dist/commonjs/core/stages/memory/memoryDatabase.d.ts +13 -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 +4 -8
  34. package/dist/commonjs/core/stages/memory/memoryDatabase.js.map +1 -0
  35. package/dist/commonjs/{operations/downloaders → core/stages/memory}/memoryDownloader.d.ts +3 -3
  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 +4 -5
  40. package/dist/commonjs/core/stages/serverDownloader.d.ts.map +1 -0
  41. package/dist/commonjs/{operations/downloaders → core/stages}/serverDownloader.js +82 -32
  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 +16 -0
  55. package/dist/commonjs/deferment/defermentManager.d.ts.map +1 -0
  56. package/dist/commonjs/deferment/defermentManager.js +58 -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 +188 -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 +3 -3
  67. package/dist/commonjs/index.d.ts.map +1 -1
  68. package/dist/commonjs/index.js +6 -5
  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/{esm/helpers → commonjs/queues}/batchedPool.d.ts +2 -1
  79. package/dist/commonjs/queues/batchedPool.d.ts.map +1 -0
  80. package/dist/commonjs/queues/batchedPool.js.map +1 -0
  81. package/dist/{esm/helpers → commonjs/queues}/batchingQueue.d.ts +4 -1
  82. package/dist/commonjs/queues/batchingQueue.d.ts.map +1 -0
  83. package/dist/commonjs/queues/batchingQueue.dispose.test.d.ts +2 -0
  84. package/dist/commonjs/queues/batchingQueue.dispose.test.d.ts.map +1 -0
  85. package/dist/commonjs/queues/batchingQueue.dispose.test.js +64 -0
  86. package/dist/commonjs/queues/batchingQueue.dispose.test.js.map +1 -0
  87. package/dist/commonjs/queues/batchingQueue.js +123 -0
  88. package/dist/commonjs/queues/batchingQueue.js.map +1 -0
  89. package/dist/commonjs/queues/batchingQueue.test.d.ts +2 -0
  90. package/dist/commonjs/queues/batchingQueue.test.d.ts.map +1 -0
  91. package/dist/commonjs/queues/batchingQueue.test.js +138 -0
  92. package/dist/commonjs/queues/batchingQueue.test.js.map +1 -0
  93. package/dist/{esm/helpers → commonjs/queues}/bufferQueue.d.ts +1 -0
  94. package/dist/commonjs/queues/bufferQueue.d.ts.map +1 -0
  95. package/dist/commonjs/{helpers → queues}/bufferQueue.js +3 -0
  96. package/dist/commonjs/queues/bufferQueue.js.map +1 -0
  97. package/dist/commonjs/{helpers → queues}/keyedQueue.d.ts +1 -0
  98. package/dist/commonjs/queues/keyedQueue.d.ts.map +1 -0
  99. package/dist/commonjs/{helpers → queues}/keyedQueue.js +11 -0
  100. package/dist/commonjs/queues/keyedQueue.js.map +1 -0
  101. package/dist/commonjs/queues/queue.d.ts +5 -0
  102. package/dist/commonjs/queues/queue.d.ts.map +1 -0
  103. package/dist/commonjs/{helpers → queues}/queue.js.map +1 -1
  104. package/dist/commonjs/types/functions.d.ts +21 -0
  105. package/dist/commonjs/types/functions.d.ts.map +1 -0
  106. package/dist/commonjs/types/functions.js +92 -0
  107. package/dist/commonjs/types/functions.js.map +1 -0
  108. package/dist/commonjs/types/types.d.ts +1 -7
  109. package/dist/commonjs/types/types.d.ts.map +1 -1
  110. package/dist/commonjs/types/types.js +0 -36
  111. package/dist/commonjs/types/types.js.map +1 -1
  112. package/dist/esm/{operations → core}/interfaces.d.ts +2 -5
  113. package/dist/esm/core/interfaces.d.ts.map +1 -0
  114. package/dist/esm/core/interfaces.js.map +1 -0
  115. package/dist/{commonjs/operations → esm/core}/objectLoader2.d.ts +1 -1
  116. package/dist/esm/core/objectLoader2.d.ts.map +1 -0
  117. package/dist/esm/core/objectLoader2.js +121 -0
  118. package/dist/esm/core/objectLoader2.js.map +1 -0
  119. package/dist/esm/core/objectLoader2Factory.d.ts +27 -0
  120. package/dist/esm/core/objectLoader2Factory.d.ts.map +1 -0
  121. package/dist/esm/core/objectLoader2Factory.js +67 -0
  122. package/dist/esm/core/objectLoader2Factory.js.map +1 -0
  123. package/dist/{commonjs/operations → esm/core}/options.d.ts +2 -1
  124. package/dist/esm/core/options.d.ts.map +1 -0
  125. package/dist/esm/{operations → core}/options.js.map +1 -1
  126. package/dist/esm/core/stages/ItemStore.d.ts +37 -0
  127. package/dist/esm/core/stages/ItemStore.d.ts.map +1 -0
  128. package/dist/esm/core/stages/ItemStore.js +163 -0
  129. package/dist/esm/core/stages/ItemStore.js.map +1 -0
  130. package/dist/esm/core/stages/cacheReader.d.ts +18 -0
  131. package/dist/esm/core/stages/cacheReader.d.ts.map +1 -0
  132. package/dist/esm/core/stages/cacheReader.js +65 -0
  133. package/dist/esm/core/stages/cacheReader.js.map +1 -0
  134. package/dist/esm/core/stages/cacheWriter.d.ts +15 -0
  135. package/dist/esm/core/stages/cacheWriter.d.ts.map +1 -0
  136. package/dist/esm/core/stages/cacheWriter.js +43 -0
  137. package/dist/esm/core/stages/cacheWriter.js.map +1 -0
  138. package/dist/esm/{operations/databases → core/stages}/indexedDatabase.d.ts +2 -7
  139. package/dist/esm/core/stages/indexedDatabase.d.ts.map +1 -0
  140. package/dist/esm/core/stages/indexedDatabase.js +28 -0
  141. package/dist/esm/core/stages/indexedDatabase.js.map +1 -0
  142. package/dist/esm/core/stages/memory/memoryDatabase.d.ts +13 -0
  143. package/dist/esm/core/stages/memory/memoryDatabase.d.ts.map +1 -0
  144. package/dist/esm/{operations/databases → core/stages/memory}/memoryDatabase.js +4 -8
  145. package/dist/esm/core/stages/memory/memoryDatabase.js.map +1 -0
  146. package/dist/esm/{operations/downloaders → core/stages/memory}/memoryDownloader.d.ts +3 -3
  147. package/dist/esm/core/stages/memory/memoryDownloader.d.ts.map +1 -0
  148. package/dist/esm/{operations/downloaders → core/stages/memory}/memoryDownloader.js +1 -1
  149. package/dist/esm/core/stages/memory/memoryDownloader.js.map +1 -0
  150. package/dist/{commonjs/operations/downloaders → esm/core/stages}/serverDownloader.d.ts +4 -5
  151. package/dist/esm/core/stages/serverDownloader.d.ts.map +1 -0
  152. package/dist/esm/{operations/downloaders → core/stages}/serverDownloader.js +81 -31
  153. package/dist/esm/core/stages/serverDownloader.js.map +1 -0
  154. package/dist/esm/core/traverser.d.ts.map +1 -0
  155. package/dist/esm/{operations → core}/traverser.js +1 -1
  156. package/dist/esm/core/traverser.js.map +1 -0
  157. package/dist/esm/deferment/MemoryCache.d.ts +35 -0
  158. package/dist/esm/deferment/MemoryCache.d.ts.map +1 -0
  159. package/dist/esm/deferment/MemoryCache.js +157 -0
  160. package/dist/esm/deferment/MemoryCache.js.map +1 -0
  161. package/dist/esm/deferment/MemoryCache.test.d.ts +2 -0
  162. package/dist/esm/deferment/MemoryCache.test.d.ts.map +1 -0
  163. package/dist/esm/deferment/MemoryCache.test.js +151 -0
  164. package/dist/esm/deferment/MemoryCache.test.js.map +1 -0
  165. package/dist/esm/deferment/defermentManager.d.ts +16 -0
  166. package/dist/esm/deferment/defermentManager.d.ts.map +1 -0
  167. package/dist/esm/deferment/defermentManager.js +54 -0
  168. package/dist/esm/deferment/defermentManager.js.map +1 -0
  169. package/dist/esm/deferment/defermentManager.test.d.ts +2 -0
  170. package/dist/esm/deferment/defermentManager.test.d.ts.map +1 -0
  171. package/dist/esm/deferment/defermentManager.test.js +186 -0
  172. package/dist/esm/deferment/defermentManager.test.js.map +1 -0
  173. package/dist/esm/deferment/deferredBase.d.ts +12 -0
  174. package/dist/esm/deferment/deferredBase.d.ts.map +1 -0
  175. package/dist/esm/deferment/deferredBase.js +23 -0
  176. package/dist/esm/deferment/deferredBase.js.map +1 -0
  177. package/dist/esm/index.d.ts +3 -3
  178. package/dist/esm/index.d.ts.map +1 -1
  179. package/dist/esm/index.js +3 -3
  180. package/dist/esm/index.js.map +1 -1
  181. package/dist/esm/{helpers → queues}/aggregateQueue.d.ts +2 -1
  182. package/dist/esm/queues/aggregateQueue.d.ts.map +1 -0
  183. package/dist/esm/{helpers → queues}/aggregateQueue.js +4 -0
  184. package/dist/esm/queues/aggregateQueue.js.map +1 -0
  185. package/dist/{commonjs/helpers → esm/queues}/asyncGeneratorQueue.d.ts +1 -1
  186. package/dist/esm/queues/asyncGeneratorQueue.d.ts.map +1 -0
  187. package/dist/esm/{helpers → queues}/asyncGeneratorQueue.js +2 -1
  188. package/dist/esm/queues/asyncGeneratorQueue.js.map +1 -0
  189. package/dist/{commonjs/helpers → esm/queues}/batchedPool.d.ts +2 -1
  190. package/dist/esm/queues/batchedPool.d.ts.map +1 -0
  191. package/dist/esm/queues/batchedPool.js.map +1 -0
  192. package/dist/{commonjs/helpers → esm/queues}/batchingQueue.d.ts +4 -1
  193. package/dist/esm/queues/batchingQueue.d.ts.map +1 -0
  194. package/dist/esm/queues/batchingQueue.dispose.test.d.ts +2 -0
  195. package/dist/esm/queues/batchingQueue.dispose.test.d.ts.map +1 -0
  196. package/dist/esm/queues/batchingQueue.dispose.test.js +59 -0
  197. package/dist/esm/queues/batchingQueue.dispose.test.js.map +1 -0
  198. package/dist/esm/queues/batchingQueue.js +117 -0
  199. package/dist/esm/queues/batchingQueue.js.map +1 -0
  200. package/dist/esm/queues/batchingQueue.test.d.ts +2 -0
  201. package/dist/esm/queues/batchingQueue.test.d.ts.map +1 -0
  202. package/dist/esm/queues/batchingQueue.test.js +133 -0
  203. package/dist/esm/queues/batchingQueue.test.js.map +1 -0
  204. package/dist/{commonjs/helpers → esm/queues}/bufferQueue.d.ts +1 -0
  205. package/dist/esm/queues/bufferQueue.d.ts.map +1 -0
  206. package/dist/esm/{helpers → queues}/bufferQueue.js +3 -0
  207. package/dist/esm/queues/bufferQueue.js.map +1 -0
  208. package/dist/esm/{helpers → queues}/keyedQueue.d.ts +1 -0
  209. package/dist/esm/queues/keyedQueue.d.ts.map +1 -0
  210. package/dist/esm/{helpers → queues}/keyedQueue.js +11 -0
  211. package/dist/esm/queues/keyedQueue.js.map +1 -0
  212. package/dist/esm/queues/queue.d.ts +5 -0
  213. package/dist/esm/queues/queue.d.ts.map +1 -0
  214. package/dist/esm/{helpers → queues}/queue.js.map +1 -1
  215. package/dist/esm/types/functions.d.ts +21 -0
  216. package/dist/esm/types/functions.d.ts.map +1 -0
  217. package/dist/esm/types/functions.js +83 -0
  218. package/dist/esm/types/functions.js.map +1 -0
  219. package/dist/esm/types/types.d.ts +1 -7
  220. package/dist/esm/types/types.d.ts.map +1 -1
  221. package/dist/esm/types/types.js +1 -32
  222. package/dist/esm/types/types.js.map +1 -1
  223. package/package.json +2 -3
  224. package/readme.md +64 -16
  225. package/src/{operations → core}/interfaces.ts +2 -3
  226. package/src/{operations → core}/objectLoader2.spec.ts +22 -9
  227. package/src/core/objectLoader2.ts +162 -0
  228. package/src/core/objectLoader2Factory.ts +87 -0
  229. package/src/{operations → core}/options.ts +2 -1
  230. package/src/core/stages/ItemStore.ts +196 -0
  231. package/src/core/stages/__snapshots__/indexedDatabase.spec.ts.snap +18 -0
  232. package/src/{operations/downloaders → core/stages}/__snapshots__/serverDownloader.spec.ts.snap +25 -0
  233. package/src/{helpers → core/stages}/cacheReader.spec.ts +12 -7
  234. package/src/core/stages/cacheReader.ts +88 -0
  235. package/src/core/stages/cacheWriter.spec.ts +213 -0
  236. package/src/core/stages/cacheWriter.ts +64 -0
  237. package/src/core/stages/indexedDatabase.spec.ts +37 -0
  238. package/src/core/stages/indexedDatabase.ts +49 -0
  239. package/src/core/stages/memory/__snapshots__/memoryDownloader.spec.ts.snap +12 -0
  240. package/src/core/stages/memory/memoryDatabase.spec.ts +48 -0
  241. package/src/{operations/databases → core/stages/memory}/memoryDatabase.ts +7 -12
  242. package/src/core/stages/memory/memoryDownloader.spec.ts +49 -0
  243. package/src/{operations/downloaders → core/stages/memory}/memoryDownloader.ts +4 -4
  244. package/src/{operations/downloaders → core/stages}/serverDownloader.spec.ts +102 -11
  245. package/src/{operations/downloaders → core/stages}/serverDownloader.ts +88 -31
  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 +220 -0
  250. package/src/deferment/defermentManager.ts +59 -0
  251. package/src/deferment/deferredBase.ts +29 -0
  252. package/src/index.ts +3 -3
  253. package/src/{helpers → queues}/aggregateQueue.ts +5 -1
  254. package/src/{helpers → queues}/asyncGeneratorQueue.ts +2 -1
  255. package/src/{helpers → queues}/batchedPool.ts +3 -1
  256. package/src/queues/batchingQueue.dispose.test.ts +74 -0
  257. package/src/queues/batchingQueue.test.ts +149 -0
  258. package/src/queues/batchingQueue.ts +138 -0
  259. package/src/{helpers → queues}/bufferQueue.ts +3 -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 +6 -4
  263. package/src/types/functions.spec.ts +155 -0
  264. package/src/types/functions.ts +118 -0
  265. package/src/types/types.ts +1 -51
  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.map +0 -1
  271. package/dist/commonjs/helpers/batchedPool.js.map +0 -1
  272. package/dist/commonjs/helpers/batchingQueue.d.ts.map +0 -1
  273. package/dist/commonjs/helpers/batchingQueue.js +0 -77
  274. package/dist/commonjs/helpers/batchingQueue.js.map +0 -1
  275. package/dist/commonjs/helpers/bufferQueue.d.ts.map +0 -1
  276. package/dist/commonjs/helpers/bufferQueue.js.map +0 -1
  277. package/dist/commonjs/helpers/cachePump.d.ts +0 -21
  278. package/dist/commonjs/helpers/cachePump.d.ts.map +0 -1
  279. package/dist/commonjs/helpers/cachePump.js +0 -80
  280. package/dist/commonjs/helpers/cachePump.js.map +0 -1
  281. package/dist/commonjs/helpers/cacheReader.d.ts +0 -14
  282. package/dist/commonjs/helpers/cacheReader.d.ts.map +0 -1
  283. package/dist/commonjs/helpers/cacheReader.js +0 -58
  284. package/dist/commonjs/helpers/cacheReader.js.map +0 -1
  285. package/dist/commonjs/helpers/defermentManager.d.ts +0 -26
  286. package/dist/commonjs/helpers/defermentManager.d.ts.map +0 -1
  287. package/dist/commonjs/helpers/defermentManager.js +0 -131
  288. package/dist/commonjs/helpers/defermentManager.js.map +0 -1
  289. package/dist/commonjs/helpers/deferredBase.d.ts +0 -19
  290. package/dist/commonjs/helpers/deferredBase.d.ts.map +0 -1
  291. package/dist/commonjs/helpers/deferredBase.js +0 -51
  292. package/dist/commonjs/helpers/deferredBase.js.map +0 -1
  293. package/dist/commonjs/helpers/keyedQueue.d.ts.map +0 -1
  294. package/dist/commonjs/helpers/keyedQueue.js.map +0 -1
  295. package/dist/commonjs/helpers/memoryPump.d.ts +0 -15
  296. package/dist/commonjs/helpers/memoryPump.d.ts.map +0 -1
  297. package/dist/commonjs/helpers/memoryPump.js +0 -34
  298. package/dist/commonjs/helpers/memoryPump.js.map +0 -1
  299. package/dist/commonjs/helpers/pump.d.ts +0 -8
  300. package/dist/commonjs/helpers/pump.d.ts.map +0 -1
  301. package/dist/commonjs/helpers/pump.js +0 -3
  302. package/dist/commonjs/helpers/pump.js.map +0 -1
  303. package/dist/commonjs/helpers/queue.d.ts +0 -4
  304. package/dist/commonjs/helpers/queue.d.ts.map +0 -1
  305. package/dist/commonjs/operations/databases/indexedDatabase.d.ts.map +0 -1
  306. package/dist/commonjs/operations/databases/indexedDatabase.js +0 -117
  307. package/dist/commonjs/operations/databases/indexedDatabase.js.map +0 -1
  308. package/dist/commonjs/operations/databases/memoryDatabase.d.ts +0 -16
  309. package/dist/commonjs/operations/databases/memoryDatabase.d.ts.map +0 -1
  310. package/dist/commonjs/operations/databases/memoryDatabase.js.map +0 -1
  311. package/dist/commonjs/operations/downloaders/memoryDownloader.d.ts.map +0 -1
  312. package/dist/commonjs/operations/downloaders/memoryDownloader.js.map +0 -1
  313. package/dist/commonjs/operations/downloaders/serverDownloader.d.ts.map +0 -1
  314. package/dist/commonjs/operations/downloaders/serverDownloader.js.map +0 -1
  315. package/dist/commonjs/operations/interfaces.d.ts.map +0 -1
  316. package/dist/commonjs/operations/interfaces.js.map +0 -1
  317. package/dist/commonjs/operations/objectLoader2.d.ts.map +0 -1
  318. package/dist/commonjs/operations/objectLoader2.js +0 -95
  319. package/dist/commonjs/operations/objectLoader2.js.map +0 -1
  320. package/dist/commonjs/operations/objectLoader2Factory.d.ts +0 -21
  321. package/dist/commonjs/operations/objectLoader2Factory.d.ts.map +0 -1
  322. package/dist/commonjs/operations/objectLoader2Factory.js +0 -50
  323. package/dist/commonjs/operations/objectLoader2Factory.js.map +0 -1
  324. package/dist/commonjs/operations/options.d.ts.map +0 -1
  325. package/dist/commonjs/operations/traverser.d.ts.map +0 -1
  326. package/dist/commonjs/operations/traverser.js.map +0 -1
  327. package/dist/esm/helpers/aggregateQueue.d.ts.map +0 -1
  328. package/dist/esm/helpers/aggregateQueue.js.map +0 -1
  329. package/dist/esm/helpers/asyncGeneratorQueue.d.ts.map +0 -1
  330. package/dist/esm/helpers/asyncGeneratorQueue.js.map +0 -1
  331. package/dist/esm/helpers/batchedPool.d.ts.map +0 -1
  332. package/dist/esm/helpers/batchedPool.js.map +0 -1
  333. package/dist/esm/helpers/batchingQueue.d.ts.map +0 -1
  334. package/dist/esm/helpers/batchingQueue.js +0 -71
  335. package/dist/esm/helpers/batchingQueue.js.map +0 -1
  336. package/dist/esm/helpers/bufferQueue.d.ts.map +0 -1
  337. package/dist/esm/helpers/bufferQueue.js.map +0 -1
  338. package/dist/esm/helpers/cachePump.d.ts +0 -21
  339. package/dist/esm/helpers/cachePump.d.ts.map +0 -1
  340. package/dist/esm/helpers/cachePump.js +0 -73
  341. package/dist/esm/helpers/cachePump.js.map +0 -1
  342. package/dist/esm/helpers/cacheReader.d.ts +0 -14
  343. package/dist/esm/helpers/cacheReader.d.ts.map +0 -1
  344. package/dist/esm/helpers/cacheReader.js +0 -51
  345. package/dist/esm/helpers/cacheReader.js.map +0 -1
  346. package/dist/esm/helpers/defermentManager.d.ts +0 -26
  347. package/dist/esm/helpers/defermentManager.d.ts.map +0 -1
  348. package/dist/esm/helpers/defermentManager.js +0 -127
  349. package/dist/esm/helpers/defermentManager.js.map +0 -1
  350. package/dist/esm/helpers/deferredBase.d.ts +0 -19
  351. package/dist/esm/helpers/deferredBase.d.ts.map +0 -1
  352. package/dist/esm/helpers/deferredBase.js +0 -47
  353. package/dist/esm/helpers/deferredBase.js.map +0 -1
  354. package/dist/esm/helpers/keyedQueue.d.ts.map +0 -1
  355. package/dist/esm/helpers/keyedQueue.js.map +0 -1
  356. package/dist/esm/helpers/memoryPump.d.ts +0 -15
  357. package/dist/esm/helpers/memoryPump.d.ts.map +0 -1
  358. package/dist/esm/helpers/memoryPump.js +0 -30
  359. package/dist/esm/helpers/memoryPump.js.map +0 -1
  360. package/dist/esm/helpers/pump.d.ts +0 -8
  361. package/dist/esm/helpers/pump.d.ts.map +0 -1
  362. package/dist/esm/helpers/pump.js +0 -2
  363. package/dist/esm/helpers/pump.js.map +0 -1
  364. package/dist/esm/helpers/queue.d.ts +0 -4
  365. package/dist/esm/helpers/queue.d.ts.map +0 -1
  366. package/dist/esm/operations/databases/indexedDatabase.d.ts.map +0 -1
  367. package/dist/esm/operations/databases/indexedDatabase.js +0 -114
  368. package/dist/esm/operations/databases/indexedDatabase.js.map +0 -1
  369. package/dist/esm/operations/databases/memoryDatabase.d.ts +0 -16
  370. package/dist/esm/operations/databases/memoryDatabase.d.ts.map +0 -1
  371. package/dist/esm/operations/databases/memoryDatabase.js.map +0 -1
  372. package/dist/esm/operations/downloaders/memoryDownloader.d.ts.map +0 -1
  373. package/dist/esm/operations/downloaders/memoryDownloader.js.map +0 -1
  374. package/dist/esm/operations/downloaders/serverDownloader.d.ts.map +0 -1
  375. package/dist/esm/operations/downloaders/serverDownloader.js.map +0 -1
  376. package/dist/esm/operations/interfaces.d.ts.map +0 -1
  377. package/dist/esm/operations/interfaces.js.map +0 -1
  378. package/dist/esm/operations/objectLoader2.d.ts.map +0 -1
  379. package/dist/esm/operations/objectLoader2.js +0 -88
  380. package/dist/esm/operations/objectLoader2.js.map +0 -1
  381. package/dist/esm/operations/objectLoader2Factory.d.ts +0 -21
  382. package/dist/esm/operations/objectLoader2Factory.d.ts.map +0 -1
  383. package/dist/esm/operations/objectLoader2Factory.js +0 -43
  384. package/dist/esm/operations/objectLoader2Factory.js.map +0 -1
  385. package/dist/esm/operations/options.d.ts.map +0 -1
  386. package/dist/esm/operations/traverser.d.ts.map +0 -1
  387. package/dist/esm/operations/traverser.js.map +0 -1
  388. package/src/helpers/__snapshots__/cachePump.spec.ts.snap +0 -31
  389. package/src/helpers/__snapshots__/defermentManager.spec.ts.snap +0 -8
  390. package/src/helpers/batchingQueue.ts +0 -85
  391. package/src/helpers/cachePump.disposal.spec.ts +0 -49
  392. package/src/helpers/cachePump.spec.ts +0 -103
  393. package/src/helpers/cachePump.ts +0 -99
  394. package/src/helpers/cacheReader.ts +0 -64
  395. package/src/helpers/defermentManager.disposal.spec.ts +0 -28
  396. package/src/helpers/defermentManager.spec.ts +0 -37
  397. package/src/helpers/defermentManager.ts +0 -141
  398. package/src/helpers/deferredBase.ts +0 -55
  399. package/src/helpers/memoryPump.ts +0 -40
  400. package/src/helpers/pump.ts +0 -8
  401. package/src/operations/databases/__snapshots__/indexedDatabase.spec.ts.snap +0 -31
  402. package/src/operations/databases/indexedDatabase.spec.ts +0 -37
  403. package/src/operations/databases/indexedDatabase.ts +0 -150
  404. package/src/operations/objectLoader2.ts +0 -111
  405. package/src/operations/objectLoader2Factory.ts +0 -56
  406. package/dist/commonjs/{operations → core}/interfaces.js +0 -0
  407. package/dist/commonjs/{operations → core}/options.js +0 -0
  408. package/dist/commonjs/{operations → core}/traverser.d.ts +0 -0
  409. package/dist/commonjs/{helpers → queues}/batchedPool.js +0 -0
  410. package/dist/commonjs/{helpers → queues}/queue.js +0 -0
  411. package/dist/esm/{operations → core}/interfaces.js +0 -0
  412. package/dist/esm/{operations → core}/options.js +0 -0
  413. package/dist/esm/{operations → core}/traverser.d.ts +0 -0
  414. package/dist/esm/{helpers → queues}/batchedPool.js +0 -0
  415. package/dist/esm/{helpers → queues}/queue.js +0 -0
  416. package/src/{operations → core}/__snapshots__/objectLoader2.spec.ts.snap +0 -0
  417. package/src/{operations → core}/__snapshots__/traverser.spec.ts.snap +0 -0
  418. package/src/{helpers → core/stages}/__snapshots__/cacheReader.spec.ts.snap +0 -0
  419. 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
+ saveBatch({ batch }: { batch: Item[] }): Promise<void> {
19
+ this.savedItems.push(...batch)
20
+ return Promise.resolve()
21
+ }
22
+
23
+ disposeAsync(): Promise<void> {
24
+ return Promise.resolve()
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(memoryCache, logger)
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', speckle_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
+ speckle_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', speckle_type: 'test-type' }
95
+ },
96
+ {
97
+ baseId: 'item2',
98
+ base: { id: 'item2', speckle_type: 'test-type' }
99
+ },
100
+ {
101
+ baseId: 'item3',
102
+ base: { id: 'item3', speckle_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', speckle_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, 'saveBatch')
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}`, speckle_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', speckle_type: 'test-type' }
198
+ },
199
+ {
200
+ baseId: 'direct2',
201
+ base: { id: 'direct2', speckle_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 { DefermentManager } 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
+ #defermentManager: DefermentManager
13
+ #requestItem: (id: string) => void
14
+ #logger: CustomLogger
15
+ #options: CacheOptions
16
+ #disposed = false
17
+
18
+ constructor(
19
+ database: Database,
20
+ logger: CustomLogger,
21
+ defermentManager: DefermentManager,
22
+ options: CacheOptions,
23
+ requestItem: (id: string) => void
24
+ ) {
25
+ this.#database = database
26
+ this.#options = options
27
+ this.#logger = logger
28
+ this.#defermentManager = defermentManager
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.#defermentManager.undefer(item, this.#requestItem)
44
+ }
45
+
46
+ async writeAll(items: Item[]): Promise<void> {
47
+ const start = performance.now()
48
+ await this.#database.saveBatch({ batch: 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
+ }
@@ -0,0 +1,37 @@
1
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest'
2
+ import { IDBFactory, IDBKeyRange } from 'fake-indexeddb'
3
+
4
+ import { Base, Item } from '../../types/types.js'
5
+ import IndexedDatabase, { IndexedDatabaseOptions } from './indexedDatabase.js'
6
+
7
+ // Mock Item
8
+ const defaultItem = (id: string): Item => ({
9
+ baseId: id,
10
+ base: { foo: 'bar' } as unknown as Base
11
+ })
12
+
13
+ describe('IndexedDatabase', () => {
14
+ let db: IndexedDatabase
15
+ let options: IndexedDatabaseOptions
16
+
17
+ beforeEach(() => {
18
+ options = { indexedDB: new IDBFactory(), keyRange: IDBKeyRange }
19
+ db = new IndexedDatabase(options)
20
+ })
21
+
22
+ afterEach(async () => {
23
+ await db.disposeAsync()
24
+ })
25
+
26
+ it('should add and get multiple items', async () => {
27
+ const items = [defaultItem('id1'), defaultItem('id2')]
28
+ await db.saveBatch({ batch: items })
29
+ const result = await db.getAll(['id1', 'id2'])
30
+ expect(result).toMatchSnapshot()
31
+ expect(result).toEqual(items)
32
+ })
33
+
34
+ it('should dispose without error', async () => {
35
+ await expect(db.disposeAsync()).resolves.not.toThrow()
36
+ })
37
+ })
@@ -0,0 +1,49 @@
1
+ /* eslint-disable @typescript-eslint/no-unsafe-function-type */
2
+ import { Item } from '../../types/types.js'
3
+ import { Database } from '../interfaces.js'
4
+ import BatchingQueue from '../../queues/batchingQueue.js'
5
+ import { ItemStore } from './ItemStore.js'
6
+
7
+ export interface IndexedDatabaseOptions {
8
+ indexedDB?: IDBFactory
9
+ keyRange?: {
10
+ bound: Function
11
+ lowerBound: Function
12
+ upperBound: Function
13
+ }
14
+ }
15
+
16
+ export default class IndexedDatabase implements Database {
17
+ #options: IndexedDatabaseOptions
18
+ #cacheDB: ItemStore
19
+ #writeQueue: BatchingQueue<Item> | undefined
20
+
21
+ constructor(options: IndexedDatabaseOptions) {
22
+ this.#options = options
23
+ this.#cacheDB = new ItemStore(
24
+ {
25
+ indexedDB: this.#options.indexedDB,
26
+ keyRange: this.#options.keyRange
27
+ },
28
+ 'speckle-cache',
29
+ 'cache'
30
+ )
31
+ }
32
+
33
+ async getAll(keys: string[]): Promise<(Item | undefined)[]> {
34
+ await this.#cacheDB.init()
35
+ return await this.#cacheDB.bulkGet(keys)
36
+ }
37
+
38
+ async saveBatch(params: { batch: Item[] }): Promise<void> {
39
+ await this.#cacheDB.init()
40
+ const { batch } = params
41
+ await this.#cacheDB.bulkInsert(batch)
42
+ }
43
+
44
+ async disposeAsync(): Promise<void> {
45
+ await this.#writeQueue?.disposeAsync()
46
+ this.#writeQueue = undefined
47
+ this.#cacheDB.close()
48
+ }
49
+ }
@@ -0,0 +1,12 @@
1
+ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
+
3
+ exports[`MemoryDownloader > should add found item to results queue 1`] = `
4
+ Map {
5
+ "id1" => {
6
+ "foo": "foo",
7
+ },
8
+ "id2" => {
9
+ "foo": "bar",
10
+ },
11
+ }
12
+ `;
@@ -0,0 +1,48 @@
1
+ import { describe, it, expect, beforeEach } from 'vitest'
2
+ import { Item, Base } from '../../../types/types.js'
3
+ import { MemoryDatabase } from './memoryDatabase.js'
4
+
5
+ const makeItem = (id: string, foo = 'bar'): Item => ({
6
+ baseId: id,
7
+ base: { foo } as unknown as Base
8
+ })
9
+
10
+ describe('MemoryDatabase', () => {
11
+ let db: MemoryDatabase
12
+
13
+ beforeEach(() => {
14
+ db = new MemoryDatabase()
15
+ })
16
+
17
+ it('should return undefined for missing keys', async () => {
18
+ const result = await db.getAll(['missing'])
19
+ expect(result).toEqual([undefined])
20
+ })
21
+
22
+ it('should add and retrieve a single item', async () => {
23
+ const item = makeItem('id1')
24
+ await db.saveBatch({ batch: [item] })
25
+ const result = await db.getAll(['id1'])
26
+ expect(result).toEqual([item])
27
+ })
28
+
29
+ it('should add and retrieve multiple items', async () => {
30
+ const items = [makeItem('id1'), makeItem('id2', 'baz')]
31
+ await db.saveBatch({ batch: items })
32
+ const result = await db.getAll(['id1', 'id2'])
33
+ expect(result).toEqual(items)
34
+ })
35
+
36
+ it('should overwrite items with the same key', async () => {
37
+ const item1 = makeItem('id1', 'foo')
38
+ const item2 = makeItem('id1', 'bar')
39
+ await db.saveBatch({ batch: [item1] })
40
+ await db.saveBatch({ batch: [item2] })
41
+ const result = await db.getAll(['id1'])
42
+ expect(result).toEqual([item2])
43
+ })
44
+
45
+ it('disposeAsync should resolve', async () => {
46
+ await expect(db.disposeAsync()).resolves.not.toThrow()
47
+ })
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,21 +22,16 @@ export class MemoryDatabase implements Database {
22
22
  return Promise.resolve(found)
23
23
  }
24
24
 
25
- cacheSaveBatch({ batch }: { batch: Item[] }): Promise<void> {
25
+ saveBatch({ batch }: { 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
- getItem(params: { id: string }): Promise<Item | undefined> {
33
- const item = this.items.get(params.id)
34
- if (item) {
35
- return Promise.resolve({ baseId: params.id, base: item })
36
- }
37
- return Promise.resolve(undefined)
38
- }
39
-
40
35
  disposeAsync(): Promise<void> {
41
36
  return Promise.resolve()
42
37
  }
@@ -0,0 +1,49 @@
1
+ import { describe, it, expect, beforeEach } from 'vitest'
2
+ import { MemoryDownloader } from './memoryDownloader.js'
3
+ import BufferQueue from '../../../queues/bufferQueue.js'
4
+ import Queue from '../../../queues/queue.js'
5
+ import { Base, Item } from '../../../types/types.js'
6
+
7
+ const makeBase = (foo: string): Base => ({ foo } as unknown as Base)
8
+
9
+ describe('MemoryDownloader', () => {
10
+ let items: Map<string, Base>
11
+ let downloader: MemoryDownloader
12
+ let results: Queue<Item>
13
+
14
+ beforeEach(() => {
15
+ items = new Map([
16
+ ['id1', makeBase('foo')],
17
+ ['id2', makeBase('bar')]
18
+ ])
19
+ downloader = new MemoryDownloader('id1', items)
20
+ results = new BufferQueue<Item>()
21
+ })
22
+
23
+ it('should download the root item', async () => {
24
+ const item = await downloader.downloadSingle()
25
+ expect(item).toEqual({ baseId: 'id1', base: { foo: 'foo' } })
26
+ })
27
+
28
+ it('should throw if root item is missing', async () => {
29
+ const missingDownloader = new MemoryDownloader('missing', items)
30
+ await expect(missingDownloader.downloadSingle()).rejects.toThrow(
31
+ 'Method not implemented.'
32
+ )
33
+ })
34
+
35
+ it('should add found item to results queue', () => {
36
+ downloader.initializePool({ results, total: 2 })
37
+ downloader.add('id2')
38
+ expect(items).toMatchSnapshot()
39
+ })
40
+
41
+ it('should throw if added item is missing', () => {
42
+ downloader.initializePool({ results, total: 2 })
43
+ expect(() => downloader.add('missing')).toThrow()
44
+ })
45
+
46
+ it('disposeAsync should resolve', async () => {
47
+ await expect(downloader.disposeAsync()).resolves.not.toThrow()
48
+ })
49
+ })
@@ -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>
@@ -23,7 +23,7 @@ export class MemoryDownloader implements Downloader {
23
23
  if (root) {
24
24
  return Promise.resolve({ baseId: this.#rootId, base: root })
25
25
  }
26
- throw new Error('Method not implemented.')
26
+ return Promise.reject(new Error('Method not implemented.'))
27
27
  }
28
28
  disposeAsync(): Promise<void> {
29
29
  return Promise.resolve()