@speckle/objectloader2 2.25.7 → 2.25.9

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 (414) hide show
  1. package/dist/commonjs/{operations → core}/interfaces.d.ts +2 -2
  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 +128 -0
  7. package/dist/commonjs/core/objectLoader2.js.map +1 -0
  8. package/dist/commonjs/{operations → core}/objectLoader2Factory.d.ts +4 -2
  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 -9
  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/{esm/operations/databases → commonjs/core/stages/memory}/memoryDatabase.d.ts +4 -4
  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 -1
  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/core/stages/memory/memoryDownloader.js.map +1 -0
  38. package/dist/{esm/operations/downloaders → commonjs/core/stages}/serverDownloader.d.ts +4 -5
  39. package/dist/commonjs/core/stages/serverDownloader.d.ts.map +1 -0
  40. package/dist/commonjs/{operations/downloaders → core/stages}/serverDownloader.js +81 -31
  41. package/dist/commonjs/core/stages/serverDownloader.js.map +1 -0
  42. package/dist/commonjs/core/traverser.d.ts.map +1 -0
  43. package/dist/commonjs/{operations → core}/traverser.js +7 -7
  44. package/dist/commonjs/core/traverser.js.map +1 -0
  45. package/dist/commonjs/deferment/MemoryCache.d.ts +35 -0
  46. package/dist/commonjs/deferment/MemoryCache.d.ts.map +1 -0
  47. package/dist/commonjs/deferment/MemoryCache.js +162 -0
  48. package/dist/commonjs/deferment/MemoryCache.js.map +1 -0
  49. package/dist/commonjs/deferment/MemoryCache.test.d.ts +2 -0
  50. package/dist/commonjs/deferment/MemoryCache.test.d.ts.map +1 -0
  51. package/dist/commonjs/deferment/MemoryCache.test.js +153 -0
  52. package/dist/commonjs/deferment/MemoryCache.test.js.map +1 -0
  53. package/dist/commonjs/deferment/defermentManager.d.ts +16 -0
  54. package/dist/commonjs/deferment/defermentManager.d.ts.map +1 -0
  55. package/dist/commonjs/deferment/defermentManager.js +58 -0
  56. package/dist/commonjs/deferment/defermentManager.js.map +1 -0
  57. package/dist/commonjs/deferment/defermentManager.test.d.ts +2 -0
  58. package/dist/commonjs/deferment/defermentManager.test.d.ts.map +1 -0
  59. package/dist/commonjs/deferment/defermentManager.test.js +188 -0
  60. package/dist/commonjs/deferment/defermentManager.test.js.map +1 -0
  61. package/dist/commonjs/deferment/deferredBase.d.ts +12 -0
  62. package/dist/commonjs/deferment/deferredBase.d.ts.map +1 -0
  63. package/dist/commonjs/deferment/deferredBase.js +27 -0
  64. package/dist/commonjs/deferment/deferredBase.js.map +1 -0
  65. package/dist/commonjs/index.d.ts +3 -2
  66. package/dist/commonjs/index.d.ts.map +1 -1
  67. package/dist/commonjs/index.js +6 -3
  68. package/dist/commonjs/index.js.map +1 -1
  69. package/dist/commonjs/{helpers → queues}/aggregateQueue.d.ts +2 -1
  70. package/dist/commonjs/queues/aggregateQueue.d.ts.map +1 -0
  71. package/dist/commonjs/{helpers → queues}/aggregateQueue.js +4 -0
  72. package/dist/commonjs/queues/aggregateQueue.js.map +1 -0
  73. package/dist/{esm/helpers → commonjs/queues}/asyncGeneratorQueue.d.ts +1 -1
  74. package/dist/commonjs/queues/asyncGeneratorQueue.d.ts.map +1 -0
  75. package/dist/commonjs/{helpers → queues}/asyncGeneratorQueue.js +2 -1
  76. package/dist/commonjs/queues/asyncGeneratorQueue.js.map +1 -0
  77. package/dist/{esm/helpers → commonjs/queues}/batchedPool.d.ts +2 -1
  78. package/dist/commonjs/queues/batchedPool.d.ts.map +1 -0
  79. package/dist/commonjs/queues/batchedPool.js.map +1 -0
  80. package/dist/{esm/helpers → commonjs/queues}/batchingQueue.d.ts +4 -1
  81. package/dist/commonjs/queues/batchingQueue.d.ts.map +1 -0
  82. package/dist/commonjs/queues/batchingQueue.dispose.test.d.ts +2 -0
  83. package/dist/commonjs/queues/batchingQueue.dispose.test.d.ts.map +1 -0
  84. package/dist/commonjs/queues/batchingQueue.dispose.test.js +64 -0
  85. package/dist/commonjs/queues/batchingQueue.dispose.test.js.map +1 -0
  86. package/dist/commonjs/queues/batchingQueue.js +123 -0
  87. package/dist/commonjs/queues/batchingQueue.js.map +1 -0
  88. package/dist/commonjs/queues/batchingQueue.test.d.ts +2 -0
  89. package/dist/commonjs/queues/batchingQueue.test.d.ts.map +1 -0
  90. package/dist/commonjs/queues/batchingQueue.test.js +138 -0
  91. package/dist/commonjs/queues/batchingQueue.test.js.map +1 -0
  92. package/dist/{esm/helpers → commonjs/queues}/bufferQueue.d.ts +1 -0
  93. package/dist/commonjs/queues/bufferQueue.d.ts.map +1 -0
  94. package/dist/commonjs/{helpers → queues}/bufferQueue.js +3 -0
  95. package/dist/commonjs/queues/bufferQueue.js.map +1 -0
  96. package/dist/commonjs/{helpers → queues}/keyedQueue.d.ts +1 -0
  97. package/dist/commonjs/queues/keyedQueue.d.ts.map +1 -0
  98. package/dist/commonjs/{helpers → queues}/keyedQueue.js +11 -0
  99. package/dist/commonjs/queues/keyedQueue.js.map +1 -0
  100. package/dist/commonjs/queues/queue.d.ts +5 -0
  101. package/dist/commonjs/queues/queue.d.ts.map +1 -0
  102. package/dist/commonjs/{helpers → queues}/queue.js.map +1 -1
  103. package/dist/commonjs/types/functions.d.ts +21 -0
  104. package/dist/commonjs/types/functions.d.ts.map +1 -0
  105. package/dist/commonjs/types/functions.js +92 -0
  106. package/dist/commonjs/types/functions.js.map +1 -0
  107. package/dist/commonjs/types/types.d.ts +1 -7
  108. package/dist/commonjs/types/types.d.ts.map +1 -1
  109. package/dist/commonjs/types/types.js +0 -36
  110. package/dist/commonjs/types/types.js.map +1 -1
  111. package/dist/esm/{operations → core}/interfaces.d.ts +2 -2
  112. package/dist/esm/core/interfaces.d.ts.map +1 -0
  113. package/dist/esm/core/interfaces.js.map +1 -0
  114. package/dist/esm/{operations → core}/objectLoader2.d.ts +1 -1
  115. package/dist/esm/core/objectLoader2.d.ts.map +1 -0
  116. package/dist/esm/core/objectLoader2.js +121 -0
  117. package/dist/esm/core/objectLoader2.js.map +1 -0
  118. package/dist/esm/{operations → core}/objectLoader2Factory.d.ts +4 -2
  119. package/dist/esm/core/objectLoader2Factory.d.ts.map +1 -0
  120. package/dist/esm/core/objectLoader2Factory.js +67 -0
  121. package/dist/esm/core/objectLoader2Factory.js.map +1 -0
  122. package/dist/{commonjs/operations → esm/core}/options.d.ts +2 -1
  123. package/dist/esm/core/options.d.ts.map +1 -0
  124. package/dist/esm/{operations → core}/options.js.map +1 -1
  125. package/dist/esm/core/stages/ItemStore.d.ts +37 -0
  126. package/dist/esm/core/stages/ItemStore.d.ts.map +1 -0
  127. package/dist/esm/core/stages/ItemStore.js +163 -0
  128. package/dist/esm/core/stages/ItemStore.js.map +1 -0
  129. package/dist/esm/core/stages/cacheReader.d.ts +18 -0
  130. package/dist/esm/core/stages/cacheReader.d.ts.map +1 -0
  131. package/dist/esm/core/stages/cacheReader.js +65 -0
  132. package/dist/esm/core/stages/cacheReader.js.map +1 -0
  133. package/dist/esm/core/stages/cacheWriter.d.ts +15 -0
  134. package/dist/esm/core/stages/cacheWriter.d.ts.map +1 -0
  135. package/dist/esm/core/stages/cacheWriter.js +43 -0
  136. package/dist/esm/core/stages/cacheWriter.js.map +1 -0
  137. package/dist/esm/{operations/databases → core/stages}/indexedDatabase.d.ts +2 -9
  138. package/dist/esm/core/stages/indexedDatabase.d.ts.map +1 -0
  139. package/dist/esm/core/stages/indexedDatabase.js +28 -0
  140. package/dist/esm/core/stages/indexedDatabase.js.map +1 -0
  141. package/dist/{commonjs/operations/databases → esm/core/stages/memory}/memoryDatabase.d.ts +4 -4
  142. package/dist/esm/core/stages/memory/memoryDatabase.d.ts.map +1 -0
  143. package/dist/esm/{operations/databases → core/stages/memory}/memoryDatabase.js +4 -1
  144. package/dist/esm/core/stages/memory/memoryDatabase.js.map +1 -0
  145. package/dist/esm/{operations/downloaders → core/stages/memory}/memoryDownloader.d.ts +3 -3
  146. package/dist/esm/core/stages/memory/memoryDownloader.d.ts.map +1 -0
  147. package/dist/esm/core/stages/memory/memoryDownloader.js.map +1 -0
  148. package/dist/{commonjs/operations/downloaders → esm/core/stages}/serverDownloader.d.ts +4 -5
  149. package/dist/esm/core/stages/serverDownloader.d.ts.map +1 -0
  150. package/dist/esm/{operations/downloaders → core/stages}/serverDownloader.js +80 -30
  151. package/dist/esm/core/stages/serverDownloader.js.map +1 -0
  152. package/dist/esm/core/traverser.d.ts.map +1 -0
  153. package/dist/esm/{operations → core}/traverser.js +1 -1
  154. package/dist/esm/core/traverser.js.map +1 -0
  155. package/dist/esm/deferment/MemoryCache.d.ts +35 -0
  156. package/dist/esm/deferment/MemoryCache.d.ts.map +1 -0
  157. package/dist/esm/deferment/MemoryCache.js +157 -0
  158. package/dist/esm/deferment/MemoryCache.js.map +1 -0
  159. package/dist/esm/deferment/MemoryCache.test.d.ts +2 -0
  160. package/dist/esm/deferment/MemoryCache.test.d.ts.map +1 -0
  161. package/dist/esm/deferment/MemoryCache.test.js +151 -0
  162. package/dist/esm/deferment/MemoryCache.test.js.map +1 -0
  163. package/dist/esm/deferment/defermentManager.d.ts +16 -0
  164. package/dist/esm/deferment/defermentManager.d.ts.map +1 -0
  165. package/dist/esm/deferment/defermentManager.js +54 -0
  166. package/dist/esm/deferment/defermentManager.js.map +1 -0
  167. package/dist/esm/deferment/defermentManager.test.d.ts +2 -0
  168. package/dist/esm/deferment/defermentManager.test.d.ts.map +1 -0
  169. package/dist/esm/deferment/defermentManager.test.js +186 -0
  170. package/dist/esm/deferment/defermentManager.test.js.map +1 -0
  171. package/dist/esm/deferment/deferredBase.d.ts +12 -0
  172. package/dist/esm/deferment/deferredBase.d.ts.map +1 -0
  173. package/dist/esm/deferment/deferredBase.js +23 -0
  174. package/dist/esm/deferment/deferredBase.js.map +1 -0
  175. package/dist/esm/index.d.ts +3 -2
  176. package/dist/esm/index.d.ts.map +1 -1
  177. package/dist/esm/index.js +3 -2
  178. package/dist/esm/index.js.map +1 -1
  179. package/dist/esm/{helpers → queues}/aggregateQueue.d.ts +2 -1
  180. package/dist/esm/queues/aggregateQueue.d.ts.map +1 -0
  181. package/dist/esm/{helpers → queues}/aggregateQueue.js +4 -0
  182. package/dist/esm/queues/aggregateQueue.js.map +1 -0
  183. package/dist/{commonjs/helpers → esm/queues}/asyncGeneratorQueue.d.ts +1 -1
  184. package/dist/esm/queues/asyncGeneratorQueue.d.ts.map +1 -0
  185. package/dist/esm/{helpers → queues}/asyncGeneratorQueue.js +2 -1
  186. package/dist/esm/queues/asyncGeneratorQueue.js.map +1 -0
  187. package/dist/{commonjs/helpers → esm/queues}/batchedPool.d.ts +2 -1
  188. package/dist/esm/queues/batchedPool.d.ts.map +1 -0
  189. package/dist/esm/queues/batchedPool.js.map +1 -0
  190. package/dist/{commonjs/helpers → esm/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 +59 -0
  195. package/dist/esm/queues/batchingQueue.dispose.test.js.map +1 -0
  196. package/dist/esm/queues/batchingQueue.js +117 -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 +133 -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/queue.d.ts +5 -0
  211. package/dist/esm/queues/queue.d.ts.map +1 -0
  212. package/dist/esm/{helpers → queues}/queue.js.map +1 -1
  213. package/dist/esm/types/functions.d.ts +21 -0
  214. package/dist/esm/types/functions.d.ts.map +1 -0
  215. package/dist/esm/types/functions.js +83 -0
  216. package/dist/esm/types/functions.js.map +1 -0
  217. package/dist/esm/types/types.d.ts +1 -7
  218. package/dist/esm/types/types.d.ts.map +1 -1
  219. package/dist/esm/types/types.js +1 -32
  220. package/dist/esm/types/types.js.map +1 -1
  221. package/package.json +2 -3
  222. package/readme.md +64 -16
  223. package/src/{operations → core}/interfaces.ts +2 -2
  224. package/src/{operations → core}/objectLoader2.spec.ts +22 -9
  225. package/src/core/objectLoader2.ts +162 -0
  226. package/src/core/objectLoader2Factory.ts +87 -0
  227. package/src/{operations → core}/options.ts +2 -1
  228. package/src/core/stages/ItemStore.ts +196 -0
  229. package/src/{operations/databases → core/stages}/__snapshots__/indexedDatabase.spec.ts.snap +4 -4
  230. package/src/{operations/downloaders → core/stages}/__snapshots__/serverDownloader.spec.ts.snap +25 -0
  231. package/src/{helpers → core/stages}/cacheReader.spec.ts +12 -7
  232. package/src/core/stages/cacheReader.ts +88 -0
  233. package/src/core/stages/cacheWriter.spec.ts +213 -0
  234. package/src/core/stages/cacheWriter.ts +64 -0
  235. package/src/{operations/databases → core/stages}/indexedDatabase.spec.ts +7 -3
  236. package/src/core/stages/indexedDatabase.ts +49 -0
  237. package/src/{operations/databases → core/stages/memory}/memoryDatabase.spec.ts +5 -5
  238. package/src/{operations/databases → core/stages/memory}/memoryDatabase.ts +7 -4
  239. package/src/{operations/downloaders → core/stages/memory}/memoryDownloader.spec.ts +3 -3
  240. package/src/{operations/downloaders → core/stages/memory}/memoryDownloader.ts +3 -3
  241. package/src/{operations/downloaders → core/stages}/serverDownloader.spec.ts +102 -11
  242. package/src/{operations/downloaders → core/stages}/serverDownloader.ts +87 -30
  243. package/src/{operations → core}/traverser.ts +2 -1
  244. package/src/deferment/MemoryCache.test.ts +187 -0
  245. package/src/deferment/MemoryCache.ts +189 -0
  246. package/src/deferment/defermentManager.test.ts +220 -0
  247. package/src/deferment/defermentManager.ts +59 -0
  248. package/src/deferment/deferredBase.ts +29 -0
  249. package/src/index.ts +3 -2
  250. package/src/{helpers → queues}/aggregateQueue.ts +5 -1
  251. package/src/{helpers → queues}/asyncGeneratorQueue.ts +2 -1
  252. package/src/{helpers → queues}/batchedPool.ts +3 -1
  253. package/src/queues/batchingQueue.dispose.test.ts +74 -0
  254. package/src/queues/batchingQueue.test.ts +149 -0
  255. package/src/queues/batchingQueue.ts +138 -0
  256. package/src/{helpers → queues}/bufferQueue.ts +3 -0
  257. package/src/{helpers → queues}/keyedQueue.ts +12 -0
  258. package/src/{helpers → queues}/queue.ts +1 -0
  259. package/src/test/e2e.spec.ts +2 -2
  260. package/src/types/functions.spec.ts +155 -0
  261. package/src/types/functions.ts +118 -0
  262. package/src/types/types.ts +1 -51
  263. package/dist/commonjs/helpers/aggregateQueue.d.ts.map +0 -1
  264. package/dist/commonjs/helpers/aggregateQueue.js.map +0 -1
  265. package/dist/commonjs/helpers/asyncGeneratorQueue.d.ts.map +0 -1
  266. package/dist/commonjs/helpers/asyncGeneratorQueue.js.map +0 -1
  267. package/dist/commonjs/helpers/batchedPool.d.ts.map +0 -1
  268. package/dist/commonjs/helpers/batchedPool.js.map +0 -1
  269. package/dist/commonjs/helpers/batchingQueue.d.ts.map +0 -1
  270. package/dist/commonjs/helpers/batchingQueue.js +0 -77
  271. package/dist/commonjs/helpers/batchingQueue.js.map +0 -1
  272. package/dist/commonjs/helpers/bufferQueue.d.ts.map +0 -1
  273. package/dist/commonjs/helpers/bufferQueue.js.map +0 -1
  274. package/dist/commonjs/helpers/cachePump.d.ts +0 -22
  275. package/dist/commonjs/helpers/cachePump.d.ts.map +0 -1
  276. package/dist/commonjs/helpers/cachePump.js +0 -86
  277. package/dist/commonjs/helpers/cachePump.js.map +0 -1
  278. package/dist/commonjs/helpers/cacheReader.d.ts +0 -14
  279. package/dist/commonjs/helpers/cacheReader.d.ts.map +0 -1
  280. package/dist/commonjs/helpers/cacheReader.js +0 -58
  281. package/dist/commonjs/helpers/cacheReader.js.map +0 -1
  282. package/dist/commonjs/helpers/defermentManager.d.ts +0 -28
  283. package/dist/commonjs/helpers/defermentManager.d.ts.map +0 -1
  284. package/dist/commonjs/helpers/defermentManager.js +0 -150
  285. package/dist/commonjs/helpers/defermentManager.js.map +0 -1
  286. package/dist/commonjs/helpers/deferredBase.d.ts +0 -19
  287. package/dist/commonjs/helpers/deferredBase.d.ts.map +0 -1
  288. package/dist/commonjs/helpers/deferredBase.js +0 -51
  289. package/dist/commonjs/helpers/deferredBase.js.map +0 -1
  290. package/dist/commonjs/helpers/keyedQueue.d.ts.map +0 -1
  291. package/dist/commonjs/helpers/keyedQueue.js.map +0 -1
  292. package/dist/commonjs/helpers/memoryPump.d.ts +0 -15
  293. package/dist/commonjs/helpers/memoryPump.d.ts.map +0 -1
  294. package/dist/commonjs/helpers/memoryPump.js +0 -34
  295. package/dist/commonjs/helpers/memoryPump.js.map +0 -1
  296. package/dist/commonjs/helpers/pump.d.ts +0 -8
  297. package/dist/commonjs/helpers/pump.d.ts.map +0 -1
  298. package/dist/commonjs/helpers/pump.js +0 -3
  299. package/dist/commonjs/helpers/pump.js.map +0 -1
  300. package/dist/commonjs/helpers/queue.d.ts +0 -4
  301. package/dist/commonjs/helpers/queue.d.ts.map +0 -1
  302. package/dist/commonjs/operations/databases/indexedDatabase.d.ts.map +0 -1
  303. package/dist/commonjs/operations/databases/indexedDatabase.js +0 -98
  304. package/dist/commonjs/operations/databases/indexedDatabase.js.map +0 -1
  305. package/dist/commonjs/operations/databases/memoryDatabase.d.ts.map +0 -1
  306. package/dist/commonjs/operations/databases/memoryDatabase.js.map +0 -1
  307. package/dist/commonjs/operations/downloaders/memoryDownloader.d.ts.map +0 -1
  308. package/dist/commonjs/operations/downloaders/memoryDownloader.js.map +0 -1
  309. package/dist/commonjs/operations/downloaders/serverDownloader.d.ts.map +0 -1
  310. package/dist/commonjs/operations/downloaders/serverDownloader.js.map +0 -1
  311. package/dist/commonjs/operations/interfaces.d.ts.map +0 -1
  312. package/dist/commonjs/operations/interfaces.js.map +0 -1
  313. package/dist/commonjs/operations/objectLoader2.d.ts.map +0 -1
  314. package/dist/commonjs/operations/objectLoader2.js +0 -101
  315. package/dist/commonjs/operations/objectLoader2.js.map +0 -1
  316. package/dist/commonjs/operations/objectLoader2Factory.d.ts.map +0 -1
  317. package/dist/commonjs/operations/objectLoader2Factory.js +0 -68
  318. package/dist/commonjs/operations/objectLoader2Factory.js.map +0 -1
  319. package/dist/commonjs/operations/options.d.ts.map +0 -1
  320. package/dist/commonjs/operations/traverser.d.ts.map +0 -1
  321. package/dist/commonjs/operations/traverser.js.map +0 -1
  322. package/dist/esm/helpers/aggregateQueue.d.ts.map +0 -1
  323. package/dist/esm/helpers/aggregateQueue.js.map +0 -1
  324. package/dist/esm/helpers/asyncGeneratorQueue.d.ts.map +0 -1
  325. package/dist/esm/helpers/asyncGeneratorQueue.js.map +0 -1
  326. package/dist/esm/helpers/batchedPool.d.ts.map +0 -1
  327. package/dist/esm/helpers/batchedPool.js.map +0 -1
  328. package/dist/esm/helpers/batchingQueue.d.ts.map +0 -1
  329. package/dist/esm/helpers/batchingQueue.js +0 -71
  330. package/dist/esm/helpers/batchingQueue.js.map +0 -1
  331. package/dist/esm/helpers/bufferQueue.d.ts.map +0 -1
  332. package/dist/esm/helpers/bufferQueue.js.map +0 -1
  333. package/dist/esm/helpers/cachePump.d.ts +0 -22
  334. package/dist/esm/helpers/cachePump.d.ts.map +0 -1
  335. package/dist/esm/helpers/cachePump.js +0 -79
  336. package/dist/esm/helpers/cachePump.js.map +0 -1
  337. package/dist/esm/helpers/cacheReader.d.ts +0 -14
  338. package/dist/esm/helpers/cacheReader.d.ts.map +0 -1
  339. package/dist/esm/helpers/cacheReader.js +0 -51
  340. package/dist/esm/helpers/cacheReader.js.map +0 -1
  341. package/dist/esm/helpers/defermentManager.d.ts +0 -28
  342. package/dist/esm/helpers/defermentManager.d.ts.map +0 -1
  343. package/dist/esm/helpers/defermentManager.js +0 -146
  344. package/dist/esm/helpers/defermentManager.js.map +0 -1
  345. package/dist/esm/helpers/deferredBase.d.ts +0 -19
  346. package/dist/esm/helpers/deferredBase.d.ts.map +0 -1
  347. package/dist/esm/helpers/deferredBase.js +0 -47
  348. package/dist/esm/helpers/deferredBase.js.map +0 -1
  349. package/dist/esm/helpers/keyedQueue.d.ts.map +0 -1
  350. package/dist/esm/helpers/keyedQueue.js.map +0 -1
  351. package/dist/esm/helpers/memoryPump.d.ts +0 -15
  352. package/dist/esm/helpers/memoryPump.d.ts.map +0 -1
  353. package/dist/esm/helpers/memoryPump.js +0 -30
  354. package/dist/esm/helpers/memoryPump.js.map +0 -1
  355. package/dist/esm/helpers/pump.d.ts +0 -8
  356. package/dist/esm/helpers/pump.d.ts.map +0 -1
  357. package/dist/esm/helpers/pump.js +0 -2
  358. package/dist/esm/helpers/pump.js.map +0 -1
  359. package/dist/esm/helpers/queue.d.ts +0 -4
  360. package/dist/esm/helpers/queue.d.ts.map +0 -1
  361. package/dist/esm/operations/databases/indexedDatabase.d.ts.map +0 -1
  362. package/dist/esm/operations/databases/indexedDatabase.js +0 -93
  363. package/dist/esm/operations/databases/indexedDatabase.js.map +0 -1
  364. package/dist/esm/operations/databases/memoryDatabase.d.ts.map +0 -1
  365. package/dist/esm/operations/databases/memoryDatabase.js.map +0 -1
  366. package/dist/esm/operations/downloaders/memoryDownloader.d.ts.map +0 -1
  367. package/dist/esm/operations/downloaders/memoryDownloader.js.map +0 -1
  368. package/dist/esm/operations/downloaders/serverDownloader.d.ts.map +0 -1
  369. package/dist/esm/operations/downloaders/serverDownloader.js.map +0 -1
  370. package/dist/esm/operations/interfaces.d.ts.map +0 -1
  371. package/dist/esm/operations/interfaces.js.map +0 -1
  372. package/dist/esm/operations/objectLoader2.d.ts.map +0 -1
  373. package/dist/esm/operations/objectLoader2.js +0 -94
  374. package/dist/esm/operations/objectLoader2.js.map +0 -1
  375. package/dist/esm/operations/objectLoader2Factory.d.ts.map +0 -1
  376. package/dist/esm/operations/objectLoader2Factory.js +0 -61
  377. package/dist/esm/operations/objectLoader2Factory.js.map +0 -1
  378. package/dist/esm/operations/options.d.ts.map +0 -1
  379. package/dist/esm/operations/traverser.d.ts.map +0 -1
  380. package/dist/esm/operations/traverser.js.map +0 -1
  381. package/src/helpers/__snapshots__/cachePump.spec.ts.snap +0 -31
  382. package/src/helpers/__snapshots__/defermentManager.spec.ts.snap +0 -8
  383. package/src/helpers/batchingQueue.ts +0 -85
  384. package/src/helpers/cachePump.disposal.spec.ts +0 -51
  385. package/src/helpers/cachePump.spec.ts +0 -104
  386. package/src/helpers/cachePump.ts +0 -107
  387. package/src/helpers/cacheReader.ts +0 -64
  388. package/src/helpers/defermentManager.defermentTotals.spec.ts +0 -53
  389. package/src/helpers/defermentManager.disposal.spec.ts +0 -28
  390. package/src/helpers/defermentManager.spec.ts +0 -37
  391. package/src/helpers/defermentManager.ts +0 -160
  392. package/src/helpers/deferredBase.ts +0 -55
  393. package/src/helpers/memoryPump.ts +0 -40
  394. package/src/helpers/pump.ts +0 -8
  395. package/src/operations/databases/indexedDatabase.ts +0 -126
  396. package/src/operations/objectLoader2.ts +0 -119
  397. package/src/operations/objectLoader2Factory.ts +0 -78
  398. package/dist/commonjs/{operations → core}/interfaces.js +0 -0
  399. package/dist/commonjs/{operations → core}/options.js +0 -0
  400. package/dist/commonjs/{operations/downloaders → core/stages/memory}/memoryDownloader.js +0 -0
  401. package/dist/commonjs/{operations → core}/traverser.d.ts +0 -0
  402. package/dist/commonjs/{helpers → queues}/batchedPool.js +0 -0
  403. package/dist/commonjs/{helpers → queues}/queue.js +0 -0
  404. package/dist/esm/{operations → core}/interfaces.js +0 -0
  405. package/dist/esm/{operations → core}/options.js +0 -0
  406. package/dist/esm/{operations/downloaders → core/stages/memory}/memoryDownloader.js +0 -0
  407. package/dist/esm/{operations → core}/traverser.d.ts +0 -0
  408. package/dist/esm/{helpers → queues}/batchedPool.js +0 -0
  409. package/dist/esm/{helpers → queues}/queue.js +0 -0
  410. package/src/{operations → core}/__snapshots__/objectLoader2.spec.ts.snap +0 -0
  411. package/src/{operations → core}/__snapshots__/traverser.spec.ts.snap +0 -0
  412. package/src/{helpers → core/stages}/__snapshots__/cacheReader.spec.ts.snap +0 -0
  413. package/src/{operations/downloaders → core/stages/memory}/__snapshots__/memoryDownloader.spec.ts.snap +0 -0
  414. 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
+ }
@@ -1,10 +1,14 @@
1
1
  import { describe, it, expect, beforeEach, afterEach } from 'vitest'
2
2
  import { IDBFactory, IDBKeyRange } from 'fake-indexeddb'
3
+
4
+ import { Base, Item } from '../../types/types.js'
3
5
  import IndexedDatabase, { IndexedDatabaseOptions } from './indexedDatabase.js'
4
- import { Item } from '../../types/types.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
@@ -21,7 +25,7 @@ describe('IndexedDatabase', () => {
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.saveBatch({ batch: items })
25
29
  const result = await db.getAll(['id1', 'id2'])
26
30
  expect(result).toMatchSnapshot()
27
31
  expect(result).toEqual(items)
@@ -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
+ }
@@ -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.saveBatch({ batch: [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.saveBatch({ batch: items })
32
32
  const result = await db.getAll(['id1', 'id2'])
33
33
  expect(result).toEqual(items)
34
34
  })
@@ -36,8 +36,8 @@ 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.saveBatch({ batch: [item1] })
40
+ await db.saveBatch({ batch: [item2] })
41
41
  const result = await db.getAll(['id1'])
42
42
  expect(result).toEqual([item2])
43
43
  })
@@ -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,8 +22,11 @@ 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()
@@ -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
 
@@ -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>
@@ -3,14 +3,14 @@ import createFetchMock from 'vitest-fetch-mock'
3
3
  import { vi } from 'vitest'
4
4
  import { Item } from '../../types/types.js'
5
5
  import ServerDownloader from './serverDownloader.js'
6
- import { MemoryPump } from '../../helpers/memoryPump.js'
6
+ import AsyncGeneratorQueue from '../../queues/asyncGeneratorQueue.js'
7
7
 
8
8
  describe('downloader', () => {
9
9
  test('download batch of one', async () => {
10
10
  const fetchMocker = createFetchMock(vi)
11
11
  const i: Item = { baseId: 'id', base: { id: 'id', speckle_type: 'type' } }
12
12
  fetchMocker.mockResponseOnce('id\t' + JSON.stringify(i.base) + '\n')
13
- const pump = new MemoryPump()
13
+ const gathered = new AsyncGeneratorQueue<Item>()
14
14
  const downloader = new ServerDownloader({
15
15
  serverUrl: 'http://speckle.test',
16
16
  streamId: 'streamId',
@@ -18,12 +18,18 @@ describe('downloader', () => {
18
18
  token: 'token',
19
19
  fetch: fetchMocker
20
20
  })
21
- downloader.initializePool({ results: pump, total: 1, maxDownloadBatchWait: 200 })
21
+ downloader.initializePool({
22
+ results: gathered,
23
+ total: 1,
24
+ maxDownloadBatchWait: 200
25
+ })
22
26
  downloader.add('id')
23
- await downloader.disposeAsync()
24
27
  const r = []
25
- for await (const x of pump.gather([i.baseId])) {
28
+ for await (const x of gathered.consume()) {
26
29
  r.push(x)
30
+ if (r.length >= 1) {
31
+ break
32
+ }
27
33
  }
28
34
 
29
35
  expect(r).toMatchSnapshot()
@@ -38,7 +44,7 @@ describe('downloader', () => {
38
44
  'id1\t' + JSON.stringify(i1.base) + '\nid2\t' + JSON.stringify(i2.base) + '\n'
39
45
  )
40
46
 
41
- const pump = new MemoryPump()
47
+ const gathered = new AsyncGeneratorQueue<Item>()
42
48
  const downloader = new ServerDownloader({
43
49
  serverUrl: 'http://speckle.test',
44
50
  streamId: 'streamId',
@@ -47,13 +53,20 @@ describe('downloader', () => {
47
53
 
48
54
  fetch: fetchMocker
49
55
  })
50
- downloader.initializePool({ results: pump, total: 2, maxDownloadBatchWait: 200 })
56
+ downloader.initializePool({
57
+ results: gathered,
58
+ total: 2,
59
+ maxDownloadBatchWait: 200
60
+ })
51
61
  downloader.add('id1')
52
62
  downloader.add('id2')
53
63
  await downloader.disposeAsync()
54
64
  const r = []
55
- for await (const x of pump.gather([i1.baseId, i2.baseId])) {
65
+ for await (const x of gathered.consume()) {
56
66
  r.push(x)
67
+ if (r.length >= 2) {
68
+ break
69
+ }
57
70
  }
58
71
 
59
72
  expect(r).toMatchSnapshot()
@@ -75,7 +88,7 @@ describe('downloader', () => {
75
88
  '\n'
76
89
  )
77
90
 
78
- const pump = new MemoryPump()
91
+ const gathered = new AsyncGeneratorQueue<Item>()
79
92
  const downloader = new ServerDownloader({
80
93
  serverUrl: 'http://speckle.test',
81
94
  streamId: 'streamId',
@@ -84,20 +97,98 @@ describe('downloader', () => {
84
97
 
85
98
  fetch: fetchMocker
86
99
  })
87
- downloader.initializePool({ results: pump, total: 3, maxDownloadBatchWait: 200 })
100
+ downloader.initializePool({
101
+ results: gathered,
102
+ total: 3,
103
+ maxDownloadBatchWait: 200
104
+ })
88
105
  downloader.add('id1')
89
106
  downloader.add('id2')
90
107
  downloader.add('id3')
91
108
  await downloader.disposeAsync()
92
109
  const r = []
93
- for await (const x of pump.gather([i1.baseId, i2.baseId, i3.baseId])) {
110
+ for await (const x of gathered.consume()) {
94
111
  r.push(x)
112
+ if (r.length >= 3) {
113
+ break
114
+ }
95
115
  }
96
116
 
97
117
  expect(r).toMatchSnapshot()
98
118
  await downloader.disposeAsync()
99
119
  })
100
120
 
121
+ test('download batch of three with Objects.Other.RawEncoding', async () => {
122
+ const fetchMocker = createFetchMock(vi)
123
+ const i1: Item = { baseId: 'id1', base: { id: 'id1', speckle_type: 'type' } }
124
+ const i2: Item = {
125
+ baseId: 'id2',
126
+ base: { id: 'id2', speckle_type: 'Objects.Other.RawEncoding' }
127
+ }
128
+ const i3: Item = { baseId: 'id3', base: { id: 'id3', speckle_type: 'type' } }
129
+ fetchMocker.mockResponseOnce(
130
+ 'id1\t' +
131
+ JSON.stringify(i1.base) +
132
+ '\nid2\t' +
133
+ JSON.stringify(i2.base) +
134
+ '\nid3\t' +
135
+ JSON.stringify(i3.base) +
136
+ '\n'
137
+ )
138
+
139
+ const gathered = new AsyncGeneratorQueue<Item>()
140
+ const downloader = new ServerDownloader({
141
+ serverUrl: 'http://speckle.test',
142
+ streamId: 'streamId',
143
+ objectId: 'objectId',
144
+ token: 'token',
145
+
146
+ fetch: fetchMocker
147
+ })
148
+ downloader.initializePool({
149
+ results: gathered,
150
+ total: 3,
151
+ maxDownloadBatchWait: 200
152
+ })
153
+ downloader.add('id1')
154
+ downloader.add('id2')
155
+ downloader.add('id3')
156
+ await downloader.disposeAsync()
157
+ const r = []
158
+ for await (const x of gathered.consume()) {
159
+ r.push(x)
160
+ if (r.length >= 3) {
161
+ break
162
+ }
163
+ }
164
+
165
+ expect(r).toMatchSnapshot()
166
+ await downloader.disposeAsync()
167
+ })
168
+
169
+ test("download Objects.Other.RawEncoding doesn't exist", async () => {
170
+ const fetchMocker = createFetchMock(vi)
171
+ const i: Item = {
172
+ baseId: 'id',
173
+ base: {
174
+ id: 'id',
175
+ speckle_type: 'Objects.Other.RawEncoding',
176
+ __closure: { childIds: 1 }
177
+ }
178
+ }
179
+ fetchMocker.mockResponseOnce(JSON.stringify(i.base))
180
+ const downloader = new ServerDownloader({
181
+ serverUrl: 'http://speckle.test',
182
+ streamId: 'streamId',
183
+ objectId: i.baseId,
184
+ token: 'token',
185
+
186
+ fetch: fetchMocker
187
+ })
188
+ await expect(downloader.downloadSingle()).rejects.toThrow()
189
+ await downloader.disposeAsync()
190
+ })
191
+
101
192
  test('download single exists', async () => {
102
193
  const fetchMocker = createFetchMock(vi)
103
194
  const i: Item = {