@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.
- package/dist/commonjs/{operations → core}/interfaces.d.ts +2 -2
- package/dist/commonjs/core/interfaces.d.ts.map +1 -0
- package/dist/commonjs/core/interfaces.js.map +1 -0
- package/dist/commonjs/{operations → core}/objectLoader2.d.ts +1 -1
- package/dist/commonjs/core/objectLoader2.d.ts.map +1 -0
- package/dist/commonjs/core/objectLoader2.js +128 -0
- package/dist/commonjs/core/objectLoader2.js.map +1 -0
- package/dist/commonjs/{operations → core}/objectLoader2Factory.d.ts +4 -2
- package/dist/commonjs/core/objectLoader2Factory.d.ts.map +1 -0
- package/dist/commonjs/core/objectLoader2Factory.js +74 -0
- package/dist/commonjs/core/objectLoader2Factory.js.map +1 -0
- package/dist/{esm/operations → commonjs/core}/options.d.ts +2 -1
- package/dist/commonjs/core/options.d.ts.map +1 -0
- package/dist/commonjs/{operations → core}/options.js.map +1 -1
- package/dist/commonjs/core/stages/ItemStore.d.ts +37 -0
- package/dist/commonjs/core/stages/ItemStore.d.ts.map +1 -0
- package/dist/commonjs/core/stages/ItemStore.js +167 -0
- package/dist/commonjs/core/stages/ItemStore.js.map +1 -0
- package/dist/commonjs/core/stages/cacheReader.d.ts +18 -0
- package/dist/commonjs/core/stages/cacheReader.d.ts.map +1 -0
- package/dist/commonjs/core/stages/cacheReader.js +72 -0
- package/dist/commonjs/core/stages/cacheReader.js.map +1 -0
- package/dist/commonjs/core/stages/cacheWriter.d.ts +15 -0
- package/dist/commonjs/core/stages/cacheWriter.d.ts.map +1 -0
- package/dist/commonjs/core/stages/cacheWriter.js +50 -0
- package/dist/commonjs/core/stages/cacheWriter.js.map +1 -0
- package/dist/commonjs/{operations/databases → core/stages}/indexedDatabase.d.ts +2 -9
- package/dist/commonjs/core/stages/indexedDatabase.d.ts.map +1 -0
- package/dist/commonjs/core/stages/indexedDatabase.js +31 -0
- package/dist/commonjs/core/stages/indexedDatabase.js.map +1 -0
- package/dist/{esm/operations/databases → commonjs/core/stages/memory}/memoryDatabase.d.ts +4 -4
- package/dist/commonjs/core/stages/memory/memoryDatabase.d.ts.map +1 -0
- package/dist/commonjs/{operations/databases → core/stages/memory}/memoryDatabase.js +4 -1
- package/dist/commonjs/core/stages/memory/memoryDatabase.js.map +1 -0
- package/dist/commonjs/{operations/downloaders → core/stages/memory}/memoryDownloader.d.ts +3 -3
- package/dist/commonjs/core/stages/memory/memoryDownloader.d.ts.map +1 -0
- package/dist/commonjs/core/stages/memory/memoryDownloader.js.map +1 -0
- package/dist/{esm/operations/downloaders → commonjs/core/stages}/serverDownloader.d.ts +4 -5
- package/dist/commonjs/core/stages/serverDownloader.d.ts.map +1 -0
- package/dist/commonjs/{operations/downloaders → core/stages}/serverDownloader.js +81 -31
- package/dist/commonjs/core/stages/serverDownloader.js.map +1 -0
- package/dist/commonjs/core/traverser.d.ts.map +1 -0
- package/dist/commonjs/{operations → core}/traverser.js +7 -7
- package/dist/commonjs/core/traverser.js.map +1 -0
- package/dist/commonjs/deferment/MemoryCache.d.ts +35 -0
- package/dist/commonjs/deferment/MemoryCache.d.ts.map +1 -0
- package/dist/commonjs/deferment/MemoryCache.js +162 -0
- package/dist/commonjs/deferment/MemoryCache.js.map +1 -0
- package/dist/commonjs/deferment/MemoryCache.test.d.ts +2 -0
- package/dist/commonjs/deferment/MemoryCache.test.d.ts.map +1 -0
- package/dist/commonjs/deferment/MemoryCache.test.js +153 -0
- package/dist/commonjs/deferment/MemoryCache.test.js.map +1 -0
- package/dist/commonjs/deferment/defermentManager.d.ts +16 -0
- package/dist/commonjs/deferment/defermentManager.d.ts.map +1 -0
- package/dist/commonjs/deferment/defermentManager.js +58 -0
- package/dist/commonjs/deferment/defermentManager.js.map +1 -0
- package/dist/commonjs/deferment/defermentManager.test.d.ts +2 -0
- package/dist/commonjs/deferment/defermentManager.test.d.ts.map +1 -0
- package/dist/commonjs/deferment/defermentManager.test.js +188 -0
- package/dist/commonjs/deferment/defermentManager.test.js.map +1 -0
- package/dist/commonjs/deferment/deferredBase.d.ts +12 -0
- package/dist/commonjs/deferment/deferredBase.d.ts.map +1 -0
- package/dist/commonjs/deferment/deferredBase.js +27 -0
- package/dist/commonjs/deferment/deferredBase.js.map +1 -0
- package/dist/commonjs/index.d.ts +3 -2
- package/dist/commonjs/index.d.ts.map +1 -1
- package/dist/commonjs/index.js +6 -3
- package/dist/commonjs/index.js.map +1 -1
- package/dist/commonjs/{helpers → queues}/aggregateQueue.d.ts +2 -1
- package/dist/commonjs/queues/aggregateQueue.d.ts.map +1 -0
- package/dist/commonjs/{helpers → queues}/aggregateQueue.js +4 -0
- package/dist/commonjs/queues/aggregateQueue.js.map +1 -0
- package/dist/{esm/helpers → commonjs/queues}/asyncGeneratorQueue.d.ts +1 -1
- package/dist/commonjs/queues/asyncGeneratorQueue.d.ts.map +1 -0
- package/dist/commonjs/{helpers → queues}/asyncGeneratorQueue.js +2 -1
- package/dist/commonjs/queues/asyncGeneratorQueue.js.map +1 -0
- package/dist/{esm/helpers → commonjs/queues}/batchedPool.d.ts +2 -1
- package/dist/commonjs/queues/batchedPool.d.ts.map +1 -0
- package/dist/commonjs/queues/batchedPool.js.map +1 -0
- package/dist/{esm/helpers → commonjs/queues}/batchingQueue.d.ts +4 -1
- package/dist/commonjs/queues/batchingQueue.d.ts.map +1 -0
- package/dist/commonjs/queues/batchingQueue.dispose.test.d.ts +2 -0
- package/dist/commonjs/queues/batchingQueue.dispose.test.d.ts.map +1 -0
- package/dist/commonjs/queues/batchingQueue.dispose.test.js +64 -0
- package/dist/commonjs/queues/batchingQueue.dispose.test.js.map +1 -0
- package/dist/commonjs/queues/batchingQueue.js +123 -0
- package/dist/commonjs/queues/batchingQueue.js.map +1 -0
- package/dist/commonjs/queues/batchingQueue.test.d.ts +2 -0
- package/dist/commonjs/queues/batchingQueue.test.d.ts.map +1 -0
- package/dist/commonjs/queues/batchingQueue.test.js +138 -0
- package/dist/commonjs/queues/batchingQueue.test.js.map +1 -0
- package/dist/{esm/helpers → commonjs/queues}/bufferQueue.d.ts +1 -0
- package/dist/commonjs/queues/bufferQueue.d.ts.map +1 -0
- package/dist/commonjs/{helpers → queues}/bufferQueue.js +3 -0
- package/dist/commonjs/queues/bufferQueue.js.map +1 -0
- package/dist/commonjs/{helpers → queues}/keyedQueue.d.ts +1 -0
- package/dist/commonjs/queues/keyedQueue.d.ts.map +1 -0
- package/dist/commonjs/{helpers → queues}/keyedQueue.js +11 -0
- package/dist/commonjs/queues/keyedQueue.js.map +1 -0
- package/dist/commonjs/queues/queue.d.ts +5 -0
- package/dist/commonjs/queues/queue.d.ts.map +1 -0
- package/dist/commonjs/{helpers → queues}/queue.js.map +1 -1
- package/dist/commonjs/types/functions.d.ts +21 -0
- package/dist/commonjs/types/functions.d.ts.map +1 -0
- package/dist/commonjs/types/functions.js +92 -0
- package/dist/commonjs/types/functions.js.map +1 -0
- package/dist/commonjs/types/types.d.ts +1 -7
- package/dist/commonjs/types/types.d.ts.map +1 -1
- package/dist/commonjs/types/types.js +0 -36
- package/dist/commonjs/types/types.js.map +1 -1
- package/dist/esm/{operations → core}/interfaces.d.ts +2 -2
- package/dist/esm/core/interfaces.d.ts.map +1 -0
- package/dist/esm/core/interfaces.js.map +1 -0
- package/dist/esm/{operations → core}/objectLoader2.d.ts +1 -1
- package/dist/esm/core/objectLoader2.d.ts.map +1 -0
- package/dist/esm/core/objectLoader2.js +121 -0
- package/dist/esm/core/objectLoader2.js.map +1 -0
- package/dist/esm/{operations → core}/objectLoader2Factory.d.ts +4 -2
- package/dist/esm/core/objectLoader2Factory.d.ts.map +1 -0
- package/dist/esm/core/objectLoader2Factory.js +67 -0
- package/dist/esm/core/objectLoader2Factory.js.map +1 -0
- package/dist/{commonjs/operations → esm/core}/options.d.ts +2 -1
- package/dist/esm/core/options.d.ts.map +1 -0
- package/dist/esm/{operations → core}/options.js.map +1 -1
- package/dist/esm/core/stages/ItemStore.d.ts +37 -0
- package/dist/esm/core/stages/ItemStore.d.ts.map +1 -0
- package/dist/esm/core/stages/ItemStore.js +163 -0
- package/dist/esm/core/stages/ItemStore.js.map +1 -0
- package/dist/esm/core/stages/cacheReader.d.ts +18 -0
- package/dist/esm/core/stages/cacheReader.d.ts.map +1 -0
- package/dist/esm/core/stages/cacheReader.js +65 -0
- package/dist/esm/core/stages/cacheReader.js.map +1 -0
- package/dist/esm/core/stages/cacheWriter.d.ts +15 -0
- package/dist/esm/core/stages/cacheWriter.d.ts.map +1 -0
- package/dist/esm/core/stages/cacheWriter.js +43 -0
- package/dist/esm/core/stages/cacheWriter.js.map +1 -0
- package/dist/esm/{operations/databases → core/stages}/indexedDatabase.d.ts +2 -9
- package/dist/esm/core/stages/indexedDatabase.d.ts.map +1 -0
- package/dist/esm/core/stages/indexedDatabase.js +28 -0
- package/dist/esm/core/stages/indexedDatabase.js.map +1 -0
- package/dist/{commonjs/operations/databases → esm/core/stages/memory}/memoryDatabase.d.ts +4 -4
- package/dist/esm/core/stages/memory/memoryDatabase.d.ts.map +1 -0
- package/dist/esm/{operations/databases → core/stages/memory}/memoryDatabase.js +4 -1
- package/dist/esm/core/stages/memory/memoryDatabase.js.map +1 -0
- package/dist/esm/{operations/downloaders → core/stages/memory}/memoryDownloader.d.ts +3 -3
- package/dist/esm/core/stages/memory/memoryDownloader.d.ts.map +1 -0
- package/dist/esm/core/stages/memory/memoryDownloader.js.map +1 -0
- package/dist/{commonjs/operations/downloaders → esm/core/stages}/serverDownloader.d.ts +4 -5
- package/dist/esm/core/stages/serverDownloader.d.ts.map +1 -0
- package/dist/esm/{operations/downloaders → core/stages}/serverDownloader.js +80 -30
- package/dist/esm/core/stages/serverDownloader.js.map +1 -0
- package/dist/esm/core/traverser.d.ts.map +1 -0
- package/dist/esm/{operations → core}/traverser.js +1 -1
- package/dist/esm/core/traverser.js.map +1 -0
- package/dist/esm/deferment/MemoryCache.d.ts +35 -0
- package/dist/esm/deferment/MemoryCache.d.ts.map +1 -0
- package/dist/esm/deferment/MemoryCache.js +157 -0
- package/dist/esm/deferment/MemoryCache.js.map +1 -0
- package/dist/esm/deferment/MemoryCache.test.d.ts +2 -0
- package/dist/esm/deferment/MemoryCache.test.d.ts.map +1 -0
- package/dist/esm/deferment/MemoryCache.test.js +151 -0
- package/dist/esm/deferment/MemoryCache.test.js.map +1 -0
- package/dist/esm/deferment/defermentManager.d.ts +16 -0
- package/dist/esm/deferment/defermentManager.d.ts.map +1 -0
- package/dist/esm/deferment/defermentManager.js +54 -0
- package/dist/esm/deferment/defermentManager.js.map +1 -0
- package/dist/esm/deferment/defermentManager.test.d.ts +2 -0
- package/dist/esm/deferment/defermentManager.test.d.ts.map +1 -0
- package/dist/esm/deferment/defermentManager.test.js +186 -0
- package/dist/esm/deferment/defermentManager.test.js.map +1 -0
- package/dist/esm/deferment/deferredBase.d.ts +12 -0
- package/dist/esm/deferment/deferredBase.d.ts.map +1 -0
- package/dist/esm/deferment/deferredBase.js +23 -0
- package/dist/esm/deferment/deferredBase.js.map +1 -0
- package/dist/esm/index.d.ts +3 -2
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +3 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/{helpers → queues}/aggregateQueue.d.ts +2 -1
- package/dist/esm/queues/aggregateQueue.d.ts.map +1 -0
- package/dist/esm/{helpers → queues}/aggregateQueue.js +4 -0
- package/dist/esm/queues/aggregateQueue.js.map +1 -0
- package/dist/{commonjs/helpers → esm/queues}/asyncGeneratorQueue.d.ts +1 -1
- package/dist/esm/queues/asyncGeneratorQueue.d.ts.map +1 -0
- package/dist/esm/{helpers → queues}/asyncGeneratorQueue.js +2 -1
- package/dist/esm/queues/asyncGeneratorQueue.js.map +1 -0
- package/dist/{commonjs/helpers → esm/queues}/batchedPool.d.ts +2 -1
- package/dist/esm/queues/batchedPool.d.ts.map +1 -0
- package/dist/esm/queues/batchedPool.js.map +1 -0
- package/dist/{commonjs/helpers → esm/queues}/batchingQueue.d.ts +4 -1
- package/dist/esm/queues/batchingQueue.d.ts.map +1 -0
- package/dist/esm/queues/batchingQueue.dispose.test.d.ts +2 -0
- package/dist/esm/queues/batchingQueue.dispose.test.d.ts.map +1 -0
- package/dist/esm/queues/batchingQueue.dispose.test.js +59 -0
- package/dist/esm/queues/batchingQueue.dispose.test.js.map +1 -0
- package/dist/esm/queues/batchingQueue.js +117 -0
- package/dist/esm/queues/batchingQueue.js.map +1 -0
- package/dist/esm/queues/batchingQueue.test.d.ts +2 -0
- package/dist/esm/queues/batchingQueue.test.d.ts.map +1 -0
- package/dist/esm/queues/batchingQueue.test.js +133 -0
- package/dist/esm/queues/batchingQueue.test.js.map +1 -0
- package/dist/{commonjs/helpers → esm/queues}/bufferQueue.d.ts +1 -0
- package/dist/esm/queues/bufferQueue.d.ts.map +1 -0
- package/dist/esm/{helpers → queues}/bufferQueue.js +3 -0
- package/dist/esm/queues/bufferQueue.js.map +1 -0
- package/dist/esm/{helpers → queues}/keyedQueue.d.ts +1 -0
- package/dist/esm/queues/keyedQueue.d.ts.map +1 -0
- package/dist/esm/{helpers → queues}/keyedQueue.js +11 -0
- package/dist/esm/queues/keyedQueue.js.map +1 -0
- package/dist/esm/queues/queue.d.ts +5 -0
- package/dist/esm/queues/queue.d.ts.map +1 -0
- package/dist/esm/{helpers → queues}/queue.js.map +1 -1
- package/dist/esm/types/functions.d.ts +21 -0
- package/dist/esm/types/functions.d.ts.map +1 -0
- package/dist/esm/types/functions.js +83 -0
- package/dist/esm/types/functions.js.map +1 -0
- package/dist/esm/types/types.d.ts +1 -7
- package/dist/esm/types/types.d.ts.map +1 -1
- package/dist/esm/types/types.js +1 -32
- package/dist/esm/types/types.js.map +1 -1
- package/package.json +2 -3
- package/readme.md +64 -16
- package/src/{operations → core}/interfaces.ts +2 -2
- package/src/{operations → core}/objectLoader2.spec.ts +22 -9
- package/src/core/objectLoader2.ts +162 -0
- package/src/core/objectLoader2Factory.ts +87 -0
- package/src/{operations → core}/options.ts +2 -1
- package/src/core/stages/ItemStore.ts +196 -0
- package/src/{operations/databases → core/stages}/__snapshots__/indexedDatabase.spec.ts.snap +4 -4
- package/src/{operations/downloaders → core/stages}/__snapshots__/serverDownloader.spec.ts.snap +25 -0
- package/src/{helpers → core/stages}/cacheReader.spec.ts +12 -7
- package/src/core/stages/cacheReader.ts +88 -0
- package/src/core/stages/cacheWriter.spec.ts +213 -0
- package/src/core/stages/cacheWriter.ts +64 -0
- package/src/{operations/databases → core/stages}/indexedDatabase.spec.ts +7 -3
- package/src/core/stages/indexedDatabase.ts +49 -0
- package/src/{operations/databases → core/stages/memory}/memoryDatabase.spec.ts +5 -5
- package/src/{operations/databases → core/stages/memory}/memoryDatabase.ts +7 -4
- package/src/{operations/downloaders → core/stages/memory}/memoryDownloader.spec.ts +3 -3
- package/src/{operations/downloaders → core/stages/memory}/memoryDownloader.ts +3 -3
- package/src/{operations/downloaders → core/stages}/serverDownloader.spec.ts +102 -11
- package/src/{operations/downloaders → core/stages}/serverDownloader.ts +87 -30
- package/src/{operations → core}/traverser.ts +2 -1
- package/src/deferment/MemoryCache.test.ts +187 -0
- package/src/deferment/MemoryCache.ts +189 -0
- package/src/deferment/defermentManager.test.ts +220 -0
- package/src/deferment/defermentManager.ts +59 -0
- package/src/deferment/deferredBase.ts +29 -0
- package/src/index.ts +3 -2
- package/src/{helpers → queues}/aggregateQueue.ts +5 -1
- package/src/{helpers → queues}/asyncGeneratorQueue.ts +2 -1
- package/src/{helpers → queues}/batchedPool.ts +3 -1
- package/src/queues/batchingQueue.dispose.test.ts +74 -0
- package/src/queues/batchingQueue.test.ts +149 -0
- package/src/queues/batchingQueue.ts +138 -0
- package/src/{helpers → queues}/bufferQueue.ts +3 -0
- package/src/{helpers → queues}/keyedQueue.ts +12 -0
- package/src/{helpers → queues}/queue.ts +1 -0
- package/src/test/e2e.spec.ts +2 -2
- package/src/types/functions.spec.ts +155 -0
- package/src/types/functions.ts +118 -0
- package/src/types/types.ts +1 -51
- package/dist/commonjs/helpers/aggregateQueue.d.ts.map +0 -1
- package/dist/commonjs/helpers/aggregateQueue.js.map +0 -1
- package/dist/commonjs/helpers/asyncGeneratorQueue.d.ts.map +0 -1
- package/dist/commonjs/helpers/asyncGeneratorQueue.js.map +0 -1
- package/dist/commonjs/helpers/batchedPool.d.ts.map +0 -1
- package/dist/commonjs/helpers/batchedPool.js.map +0 -1
- package/dist/commonjs/helpers/batchingQueue.d.ts.map +0 -1
- package/dist/commonjs/helpers/batchingQueue.js +0 -77
- package/dist/commonjs/helpers/batchingQueue.js.map +0 -1
- package/dist/commonjs/helpers/bufferQueue.d.ts.map +0 -1
- package/dist/commonjs/helpers/bufferQueue.js.map +0 -1
- package/dist/commonjs/helpers/cachePump.d.ts +0 -22
- package/dist/commonjs/helpers/cachePump.d.ts.map +0 -1
- package/dist/commonjs/helpers/cachePump.js +0 -86
- package/dist/commonjs/helpers/cachePump.js.map +0 -1
- package/dist/commonjs/helpers/cacheReader.d.ts +0 -14
- package/dist/commonjs/helpers/cacheReader.d.ts.map +0 -1
- package/dist/commonjs/helpers/cacheReader.js +0 -58
- package/dist/commonjs/helpers/cacheReader.js.map +0 -1
- package/dist/commonjs/helpers/defermentManager.d.ts +0 -28
- package/dist/commonjs/helpers/defermentManager.d.ts.map +0 -1
- package/dist/commonjs/helpers/defermentManager.js +0 -150
- package/dist/commonjs/helpers/defermentManager.js.map +0 -1
- package/dist/commonjs/helpers/deferredBase.d.ts +0 -19
- package/dist/commonjs/helpers/deferredBase.d.ts.map +0 -1
- package/dist/commonjs/helpers/deferredBase.js +0 -51
- package/dist/commonjs/helpers/deferredBase.js.map +0 -1
- package/dist/commonjs/helpers/keyedQueue.d.ts.map +0 -1
- package/dist/commonjs/helpers/keyedQueue.js.map +0 -1
- package/dist/commonjs/helpers/memoryPump.d.ts +0 -15
- package/dist/commonjs/helpers/memoryPump.d.ts.map +0 -1
- package/dist/commonjs/helpers/memoryPump.js +0 -34
- package/dist/commonjs/helpers/memoryPump.js.map +0 -1
- package/dist/commonjs/helpers/pump.d.ts +0 -8
- package/dist/commonjs/helpers/pump.d.ts.map +0 -1
- package/dist/commonjs/helpers/pump.js +0 -3
- package/dist/commonjs/helpers/pump.js.map +0 -1
- package/dist/commonjs/helpers/queue.d.ts +0 -4
- package/dist/commonjs/helpers/queue.d.ts.map +0 -1
- package/dist/commonjs/operations/databases/indexedDatabase.d.ts.map +0 -1
- package/dist/commonjs/operations/databases/indexedDatabase.js +0 -98
- package/dist/commonjs/operations/databases/indexedDatabase.js.map +0 -1
- package/dist/commonjs/operations/databases/memoryDatabase.d.ts.map +0 -1
- package/dist/commonjs/operations/databases/memoryDatabase.js.map +0 -1
- package/dist/commonjs/operations/downloaders/memoryDownloader.d.ts.map +0 -1
- package/dist/commonjs/operations/downloaders/memoryDownloader.js.map +0 -1
- package/dist/commonjs/operations/downloaders/serverDownloader.d.ts.map +0 -1
- package/dist/commonjs/operations/downloaders/serverDownloader.js.map +0 -1
- package/dist/commonjs/operations/interfaces.d.ts.map +0 -1
- package/dist/commonjs/operations/interfaces.js.map +0 -1
- package/dist/commonjs/operations/objectLoader2.d.ts.map +0 -1
- package/dist/commonjs/operations/objectLoader2.js +0 -101
- package/dist/commonjs/operations/objectLoader2.js.map +0 -1
- package/dist/commonjs/operations/objectLoader2Factory.d.ts.map +0 -1
- package/dist/commonjs/operations/objectLoader2Factory.js +0 -68
- package/dist/commonjs/operations/objectLoader2Factory.js.map +0 -1
- package/dist/commonjs/operations/options.d.ts.map +0 -1
- package/dist/commonjs/operations/traverser.d.ts.map +0 -1
- package/dist/commonjs/operations/traverser.js.map +0 -1
- package/dist/esm/helpers/aggregateQueue.d.ts.map +0 -1
- package/dist/esm/helpers/aggregateQueue.js.map +0 -1
- package/dist/esm/helpers/asyncGeneratorQueue.d.ts.map +0 -1
- package/dist/esm/helpers/asyncGeneratorQueue.js.map +0 -1
- package/dist/esm/helpers/batchedPool.d.ts.map +0 -1
- package/dist/esm/helpers/batchedPool.js.map +0 -1
- package/dist/esm/helpers/batchingQueue.d.ts.map +0 -1
- package/dist/esm/helpers/batchingQueue.js +0 -71
- package/dist/esm/helpers/batchingQueue.js.map +0 -1
- package/dist/esm/helpers/bufferQueue.d.ts.map +0 -1
- package/dist/esm/helpers/bufferQueue.js.map +0 -1
- package/dist/esm/helpers/cachePump.d.ts +0 -22
- package/dist/esm/helpers/cachePump.d.ts.map +0 -1
- package/dist/esm/helpers/cachePump.js +0 -79
- package/dist/esm/helpers/cachePump.js.map +0 -1
- package/dist/esm/helpers/cacheReader.d.ts +0 -14
- package/dist/esm/helpers/cacheReader.d.ts.map +0 -1
- package/dist/esm/helpers/cacheReader.js +0 -51
- package/dist/esm/helpers/cacheReader.js.map +0 -1
- package/dist/esm/helpers/defermentManager.d.ts +0 -28
- package/dist/esm/helpers/defermentManager.d.ts.map +0 -1
- package/dist/esm/helpers/defermentManager.js +0 -146
- package/dist/esm/helpers/defermentManager.js.map +0 -1
- package/dist/esm/helpers/deferredBase.d.ts +0 -19
- package/dist/esm/helpers/deferredBase.d.ts.map +0 -1
- package/dist/esm/helpers/deferredBase.js +0 -47
- package/dist/esm/helpers/deferredBase.js.map +0 -1
- package/dist/esm/helpers/keyedQueue.d.ts.map +0 -1
- package/dist/esm/helpers/keyedQueue.js.map +0 -1
- package/dist/esm/helpers/memoryPump.d.ts +0 -15
- package/dist/esm/helpers/memoryPump.d.ts.map +0 -1
- package/dist/esm/helpers/memoryPump.js +0 -30
- package/dist/esm/helpers/memoryPump.js.map +0 -1
- package/dist/esm/helpers/pump.d.ts +0 -8
- package/dist/esm/helpers/pump.d.ts.map +0 -1
- package/dist/esm/helpers/pump.js +0 -2
- package/dist/esm/helpers/pump.js.map +0 -1
- package/dist/esm/helpers/queue.d.ts +0 -4
- package/dist/esm/helpers/queue.d.ts.map +0 -1
- package/dist/esm/operations/databases/indexedDatabase.d.ts.map +0 -1
- package/dist/esm/operations/databases/indexedDatabase.js +0 -93
- package/dist/esm/operations/databases/indexedDatabase.js.map +0 -1
- package/dist/esm/operations/databases/memoryDatabase.d.ts.map +0 -1
- package/dist/esm/operations/databases/memoryDatabase.js.map +0 -1
- package/dist/esm/operations/downloaders/memoryDownloader.d.ts.map +0 -1
- package/dist/esm/operations/downloaders/memoryDownloader.js.map +0 -1
- package/dist/esm/operations/downloaders/serverDownloader.d.ts.map +0 -1
- package/dist/esm/operations/downloaders/serverDownloader.js.map +0 -1
- package/dist/esm/operations/interfaces.d.ts.map +0 -1
- package/dist/esm/operations/interfaces.js.map +0 -1
- package/dist/esm/operations/objectLoader2.d.ts.map +0 -1
- package/dist/esm/operations/objectLoader2.js +0 -94
- package/dist/esm/operations/objectLoader2.js.map +0 -1
- package/dist/esm/operations/objectLoader2Factory.d.ts.map +0 -1
- package/dist/esm/operations/objectLoader2Factory.js +0 -61
- package/dist/esm/operations/objectLoader2Factory.js.map +0 -1
- package/dist/esm/operations/options.d.ts.map +0 -1
- package/dist/esm/operations/traverser.d.ts.map +0 -1
- package/dist/esm/operations/traverser.js.map +0 -1
- package/src/helpers/__snapshots__/cachePump.spec.ts.snap +0 -31
- package/src/helpers/__snapshots__/defermentManager.spec.ts.snap +0 -8
- package/src/helpers/batchingQueue.ts +0 -85
- package/src/helpers/cachePump.disposal.spec.ts +0 -51
- package/src/helpers/cachePump.spec.ts +0 -104
- package/src/helpers/cachePump.ts +0 -107
- package/src/helpers/cacheReader.ts +0 -64
- package/src/helpers/defermentManager.defermentTotals.spec.ts +0 -53
- package/src/helpers/defermentManager.disposal.spec.ts +0 -28
- package/src/helpers/defermentManager.spec.ts +0 -37
- package/src/helpers/defermentManager.ts +0 -160
- package/src/helpers/deferredBase.ts +0 -55
- package/src/helpers/memoryPump.ts +0 -40
- package/src/helpers/pump.ts +0 -8
- package/src/operations/databases/indexedDatabase.ts +0 -126
- package/src/operations/objectLoader2.ts +0 -119
- package/src/operations/objectLoader2Factory.ts +0 -78
- package/dist/commonjs/{operations → core}/interfaces.js +0 -0
- package/dist/commonjs/{operations → core}/options.js +0 -0
- package/dist/commonjs/{operations/downloaders → core/stages/memory}/memoryDownloader.js +0 -0
- package/dist/commonjs/{operations → core}/traverser.d.ts +0 -0
- package/dist/commonjs/{helpers → queues}/batchedPool.js +0 -0
- package/dist/commonjs/{helpers → queues}/queue.js +0 -0
- package/dist/esm/{operations → core}/interfaces.js +0 -0
- package/dist/esm/{operations → core}/options.js +0 -0
- package/dist/esm/{operations/downloaders → core/stages/memory}/memoryDownloader.js +0 -0
- package/dist/esm/{operations → core}/traverser.d.ts +0 -0
- package/dist/esm/{helpers → queues}/batchedPool.js +0 -0
- package/dist/esm/{helpers → queues}/queue.js +0 -0
- package/src/{operations → core}/__snapshots__/objectLoader2.spec.ts.snap +0 -0
- package/src/{operations → core}/__snapshots__/traverser.spec.ts.snap +0 -0
- package/src/{helpers → core/stages}/__snapshots__/cacheReader.spec.ts.snap +0 -0
- package/src/{operations/downloaders → core/stages/memory}/__snapshots__/memoryDownloader.spec.ts.snap +0 -0
- package/src/{operations → core}/traverser.spec.ts +1 -1
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import { vi, describe, it, expect } from 'vitest'
|
|
2
|
+
import { DefermentManager } from './defermentManager.js'
|
|
3
|
+
import { MemoryCache } from './MemoryCache.js'
|
|
4
|
+
import { CustomLogger } from '../types/functions.js'
|
|
5
|
+
import { Item } from '../types/types.js'
|
|
6
|
+
|
|
7
|
+
describe('DefermentManager', () => {
|
|
8
|
+
it('should be created', () => {
|
|
9
|
+
const mockLogger: CustomLogger = vi.fn()
|
|
10
|
+
const mockCache = {
|
|
11
|
+
get: vi.fn(),
|
|
12
|
+
add: vi.fn()
|
|
13
|
+
} as unknown as MemoryCache
|
|
14
|
+
const defermentManager = new DefermentManager(mockCache, mockLogger)
|
|
15
|
+
expect(defermentManager).toBeDefined()
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
describe('defer', () => {
|
|
19
|
+
it('should return a resolved promise if item is in cache', async () => {
|
|
20
|
+
const mockLogger: CustomLogger = vi.fn()
|
|
21
|
+
const get = vi.fn()
|
|
22
|
+
const add = vi.fn()
|
|
23
|
+
const mockCache = {
|
|
24
|
+
get,
|
|
25
|
+
add
|
|
26
|
+
} as unknown as MemoryCache
|
|
27
|
+
const defermentManager = new DefermentManager(mockCache, mockLogger)
|
|
28
|
+
|
|
29
|
+
const item: Item = {
|
|
30
|
+
// eslint-disable-next-line camelcase
|
|
31
|
+
base: { id: 'testId', speckle_type: 'Base' },
|
|
32
|
+
baseId: 'testId'
|
|
33
|
+
}
|
|
34
|
+
get.mockReturnValue(item)
|
|
35
|
+
|
|
36
|
+
const [promise, wasInCache] = defermentManager.defer({ id: 'testId' })
|
|
37
|
+
const result = await promise
|
|
38
|
+
|
|
39
|
+
expect(wasInCache).toBe(true)
|
|
40
|
+
expect(result).toEqual(item.base)
|
|
41
|
+
expect(get).toHaveBeenCalledWith('testId')
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
it('should return the same promise if item is already outstanding', () => {
|
|
45
|
+
const mockLogger: CustomLogger = vi.fn()
|
|
46
|
+
const get = vi.fn()
|
|
47
|
+
const add = vi.fn()
|
|
48
|
+
const mockCache = {
|
|
49
|
+
get,
|
|
50
|
+
add
|
|
51
|
+
} as unknown as MemoryCache
|
|
52
|
+
const defermentManager = new DefermentManager(mockCache, mockLogger)
|
|
53
|
+
|
|
54
|
+
const [promise1, wasInCache1] = defermentManager.defer({ id: 'testId' })
|
|
55
|
+
const [promise2, wasInCache2] = defermentManager.defer({ id: 'testId' })
|
|
56
|
+
|
|
57
|
+
expect(wasInCache1).toBe(false)
|
|
58
|
+
expect(wasInCache2).toBe(true)
|
|
59
|
+
expect(promise1).toBe(promise2)
|
|
60
|
+
})
|
|
61
|
+
|
|
62
|
+
it('should create a new deferred base if not in cache and not outstanding', () => {
|
|
63
|
+
const mockLogger: CustomLogger = vi.fn()
|
|
64
|
+
const get = vi.fn()
|
|
65
|
+
const add = vi.fn()
|
|
66
|
+
const mockCache = {
|
|
67
|
+
get,
|
|
68
|
+
add
|
|
69
|
+
} as unknown as MemoryCache
|
|
70
|
+
const defermentManager = new DefermentManager(mockCache, mockLogger)
|
|
71
|
+
|
|
72
|
+
const [promise, wasInCache] = defermentManager.defer({ id: 'testId' })
|
|
73
|
+
|
|
74
|
+
expect(wasInCache).toBe(false)
|
|
75
|
+
expect(promise).toBeInstanceOf(Promise)
|
|
76
|
+
})
|
|
77
|
+
|
|
78
|
+
it('should throw if disposed', () => {
|
|
79
|
+
const mockLogger: CustomLogger = vi.fn()
|
|
80
|
+
const get = vi.fn()
|
|
81
|
+
const add = vi.fn()
|
|
82
|
+
const mockCache = {
|
|
83
|
+
get,
|
|
84
|
+
add
|
|
85
|
+
} as unknown as MemoryCache
|
|
86
|
+
const defermentManager = new DefermentManager(mockCache, mockLogger)
|
|
87
|
+
|
|
88
|
+
defermentManager.dispose()
|
|
89
|
+
expect(() => defermentManager.defer({ id: 'testId' })).toThrow(
|
|
90
|
+
'DefermentManager is disposed'
|
|
91
|
+
)
|
|
92
|
+
})
|
|
93
|
+
})
|
|
94
|
+
|
|
95
|
+
describe('undefer', () => {
|
|
96
|
+
it('should resolve the promise when an outstanding item is found', async () => {
|
|
97
|
+
const mockLogger: CustomLogger = vi.fn()
|
|
98
|
+
const get = vi.fn()
|
|
99
|
+
const add = vi.fn()
|
|
100
|
+
const mockCache = {
|
|
101
|
+
get,
|
|
102
|
+
add
|
|
103
|
+
} as unknown as MemoryCache
|
|
104
|
+
const defermentManager = new DefermentManager(mockCache, mockLogger)
|
|
105
|
+
const requestItem = vi.fn()
|
|
106
|
+
|
|
107
|
+
const [promise] = defermentManager.defer({ id: 'testId' })
|
|
108
|
+
|
|
109
|
+
const item: Item = {
|
|
110
|
+
// eslint-disable-next-line camelcase
|
|
111
|
+
base: { id: 'testId', speckle_type: 'Base' },
|
|
112
|
+
baseId: 'testId'
|
|
113
|
+
}
|
|
114
|
+
defermentManager.undefer(item, requestItem)
|
|
115
|
+
|
|
116
|
+
const result = await promise
|
|
117
|
+
expect(result).toEqual(item.base)
|
|
118
|
+
})
|
|
119
|
+
|
|
120
|
+
it('should log an error if item has no base', () => {
|
|
121
|
+
const mockLogger: CustomLogger = vi.fn()
|
|
122
|
+
const get = vi.fn()
|
|
123
|
+
const add = vi.fn()
|
|
124
|
+
const mockCache = {
|
|
125
|
+
get,
|
|
126
|
+
add
|
|
127
|
+
} as unknown as MemoryCache
|
|
128
|
+
const defermentManager = new DefermentManager(mockCache, mockLogger)
|
|
129
|
+
const requestItem = vi.fn()
|
|
130
|
+
|
|
131
|
+
const item: Item = { baseId: 'testId' }
|
|
132
|
+
defermentManager.undefer(item, requestItem)
|
|
133
|
+
expect(mockLogger).toHaveBeenCalledWith('undefer called with no base', item)
|
|
134
|
+
})
|
|
135
|
+
|
|
136
|
+
it('should add to cache and request item if not outstanding', () => {
|
|
137
|
+
const mockLogger: CustomLogger = vi.fn()
|
|
138
|
+
const get = vi.fn()
|
|
139
|
+
const add = vi.fn()
|
|
140
|
+
const mockCache = {
|
|
141
|
+
get,
|
|
142
|
+
add
|
|
143
|
+
} as unknown as MemoryCache
|
|
144
|
+
const defermentManager = new DefermentManager(mockCache, mockLogger)
|
|
145
|
+
const requestItem = vi.fn()
|
|
146
|
+
|
|
147
|
+
const item: Item = {
|
|
148
|
+
// eslint-disable-next-line camelcase
|
|
149
|
+
base: { id: 'testId', speckle_type: 'Base' },
|
|
150
|
+
baseId: 'testId'
|
|
151
|
+
}
|
|
152
|
+
add.mockImplementation((_item: Item, getDependencies?: (id: string) => void) => {
|
|
153
|
+
if (getDependencies) getDependencies('testId')
|
|
154
|
+
})
|
|
155
|
+
|
|
156
|
+
defermentManager.undefer(item, requestItem)
|
|
157
|
+
|
|
158
|
+
expect(add).toHaveBeenCalledWith(item, expect.any(Function))
|
|
159
|
+
expect(requestItem).toHaveBeenCalledWith('testId')
|
|
160
|
+
})
|
|
161
|
+
|
|
162
|
+
it('should throw if disposed', () => {
|
|
163
|
+
const mockLogger: CustomLogger = vi.fn()
|
|
164
|
+
const get = vi.fn()
|
|
165
|
+
const add = vi.fn()
|
|
166
|
+
const mockCache = {
|
|
167
|
+
get,
|
|
168
|
+
add
|
|
169
|
+
} as unknown as MemoryCache
|
|
170
|
+
const defermentManager = new DefermentManager(mockCache, mockLogger)
|
|
171
|
+
const requestItem = vi.fn()
|
|
172
|
+
|
|
173
|
+
defermentManager.dispose()
|
|
174
|
+
const item: Item = {
|
|
175
|
+
// eslint-disable-next-line camelcase
|
|
176
|
+
base: { id: 'testId', speckle_type: 'Base' },
|
|
177
|
+
baseId: 'testId'
|
|
178
|
+
}
|
|
179
|
+
expect(() => defermentManager.undefer(item, requestItem)).toThrow(
|
|
180
|
+
'DefermentManager is disposed'
|
|
181
|
+
)
|
|
182
|
+
})
|
|
183
|
+
})
|
|
184
|
+
|
|
185
|
+
describe('dispose', () => {
|
|
186
|
+
it('should clear all outstanding deferments', () => {
|
|
187
|
+
const mockLogger: CustomLogger = vi.fn()
|
|
188
|
+
const get = vi.fn()
|
|
189
|
+
const add = vi.fn()
|
|
190
|
+
const mockCache = {
|
|
191
|
+
get,
|
|
192
|
+
add
|
|
193
|
+
} as unknown as MemoryCache
|
|
194
|
+
const defermentManager = new DefermentManager(mockCache, mockLogger)
|
|
195
|
+
|
|
196
|
+
void defermentManager.defer({ id: 'testId' })
|
|
197
|
+
defermentManager.dispose()
|
|
198
|
+
// @ts-expect-error - accessing private property for testing
|
|
199
|
+
expect(defermentManager.outstanding.size).toBe(0)
|
|
200
|
+
})
|
|
201
|
+
|
|
202
|
+
it('should not do anything if already disposed', () => {
|
|
203
|
+
const mockLogger: CustomLogger = vi.fn()
|
|
204
|
+
const get = vi.fn()
|
|
205
|
+
const add = vi.fn()
|
|
206
|
+
const mockCache = {
|
|
207
|
+
get,
|
|
208
|
+
add
|
|
209
|
+
} as unknown as MemoryCache
|
|
210
|
+
const defermentManager = new DefermentManager(mockCache, mockLogger)
|
|
211
|
+
|
|
212
|
+
defermentManager.dispose()
|
|
213
|
+
// @ts-expect-error - accessing private property for testing
|
|
214
|
+
const outstanding = defermentManager.outstanding
|
|
215
|
+
const clearSpy = vi.spyOn(outstanding, 'clear')
|
|
216
|
+
defermentManager.dispose()
|
|
217
|
+
expect(clearSpy).not.toHaveBeenCalled()
|
|
218
|
+
})
|
|
219
|
+
})
|
|
220
|
+
})
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { DeferredBase } from './deferredBase.js'
|
|
2
|
+
import { CustomLogger } from '../types/functions.js'
|
|
3
|
+
import { Item, Base } from '../types/types.js'
|
|
4
|
+
import { MemoryCache } from './MemoryCache.js'
|
|
5
|
+
|
|
6
|
+
export class DefermentManager {
|
|
7
|
+
private outstanding: Map<string, DeferredBase> = new Map()
|
|
8
|
+
private logger: CustomLogger
|
|
9
|
+
private disposed = false
|
|
10
|
+
private cache: MemoryCache
|
|
11
|
+
|
|
12
|
+
constructor(cache: MemoryCache, logger: CustomLogger) {
|
|
13
|
+
this.cache = cache
|
|
14
|
+
this.logger = logger
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
defer(params: { id: string }): [Promise<Base>, boolean] {
|
|
18
|
+
if (this.disposed) throw new Error('DefermentManager is disposed')
|
|
19
|
+
const item = this.cache.get(params.id)
|
|
20
|
+
if (item) {
|
|
21
|
+
return [Promise.resolve(item.base!), true]
|
|
22
|
+
}
|
|
23
|
+
const deferredBase = this.outstanding.get(params.id)
|
|
24
|
+
if (deferredBase) {
|
|
25
|
+
return [deferredBase.getPromise(), true]
|
|
26
|
+
}
|
|
27
|
+
const notYetFound = new DeferredBase(params.id)
|
|
28
|
+
this.outstanding.set(params.id, notYetFound)
|
|
29
|
+
return [notYetFound.getPromise(), false]
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
undefer(item: Item, requestItem: (id: string) => void): void {
|
|
33
|
+
if (this.disposed) throw new Error('DefermentManager is disposed')
|
|
34
|
+
const base = item.base
|
|
35
|
+
if (!base) {
|
|
36
|
+
this.logger('undefer called with no base', item)
|
|
37
|
+
return
|
|
38
|
+
}
|
|
39
|
+
this.cache.add(item, (id) => {
|
|
40
|
+
if (!this.outstanding.has(id)) {
|
|
41
|
+
requestItem(id)
|
|
42
|
+
}
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
//order matters here with found before undefer
|
|
46
|
+
const deferredBase = this.outstanding.get(item.baseId)
|
|
47
|
+
if (deferredBase) {
|
|
48
|
+
deferredBase.found(base)
|
|
49
|
+
this.outstanding.delete(item.baseId)
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
dispose(): void {
|
|
54
|
+
if (this.disposed) return
|
|
55
|
+
this.disposed = true
|
|
56
|
+
this.logger('cleared deferments, left', this.outstanding.size)
|
|
57
|
+
this.outstanding.clear()
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Base } from '../types/types.js'
|
|
2
|
+
|
|
3
|
+
export class DeferredBase {
|
|
4
|
+
private promise: Promise<Base>
|
|
5
|
+
private resolve!: (value: Base) => void
|
|
6
|
+
private reject!: (reason?: Error) => void
|
|
7
|
+
|
|
8
|
+
private readonly id: string
|
|
9
|
+
|
|
10
|
+
constructor(id: string) {
|
|
11
|
+
this.id = id
|
|
12
|
+
this.promise = new Promise<Base>((resolve, reject) => {
|
|
13
|
+
this.resolve = resolve
|
|
14
|
+
this.reject = reject
|
|
15
|
+
})
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
getId(): string {
|
|
19
|
+
return this.id
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
getPromise(): Promise<Base> {
|
|
23
|
+
return this.promise
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
found(value: Base): void {
|
|
27
|
+
this.resolve(value)
|
|
28
|
+
}
|
|
29
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
export { ObjectLoader2 } from './
|
|
2
|
-
export { ObjectLoader2Factory } from './
|
|
1
|
+
export { ObjectLoader2 } from './core/objectLoader2.js'
|
|
2
|
+
export { ObjectLoader2Factory } from './core/objectLoader2Factory.js'
|
|
3
|
+
export { getFeatureFlag, ObjectLoader2Flags } from './types/functions.js'
|
|
@@ -8,13 +8,17 @@ export default class AggregateQueue<T> implements Queue<T> {
|
|
|
8
8
|
this.#queue1 = queue1
|
|
9
9
|
this.#queue2 = queue2
|
|
10
10
|
}
|
|
11
|
+
async disposeAsync(): Promise<void> {
|
|
12
|
+
await this.#queue1.disposeAsync()
|
|
13
|
+
await this.#queue2.disposeAsync()
|
|
14
|
+
}
|
|
11
15
|
|
|
12
16
|
add(value: T): void {
|
|
13
17
|
this.#queue1.add(value)
|
|
14
18
|
this.#queue2.add(value)
|
|
15
19
|
}
|
|
16
20
|
|
|
17
|
-
values():
|
|
21
|
+
values(): never {
|
|
18
22
|
throw new Error('Not implemented')
|
|
19
23
|
}
|
|
20
24
|
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { describe, test, expect, vi } from 'vitest'
|
|
2
|
+
import BatchingQueue from './batchingQueue.js'
|
|
3
|
+
|
|
4
|
+
describe('BatchingQueue disposal', () => {
|
|
5
|
+
test('should drain the queue on dispose', async () => {
|
|
6
|
+
const processFunction = vi.fn().mockResolvedValue(undefined)
|
|
7
|
+
const queue = new BatchingQueue<{ id: string }>({
|
|
8
|
+
batchSize: 5,
|
|
9
|
+
maxWaitTime: 1000,
|
|
10
|
+
processFunction
|
|
11
|
+
})
|
|
12
|
+
|
|
13
|
+
const items = Array.from({ length: 3 }, (_, i) => ({ id: `item-${i}` }))
|
|
14
|
+
items.forEach((item) => queue.add(item.id, item))
|
|
15
|
+
|
|
16
|
+
expect(queue.count()).toBe(3)
|
|
17
|
+
|
|
18
|
+
await queue.disposeAsync()
|
|
19
|
+
|
|
20
|
+
expect(processFunction).toHaveBeenCalledWith(items)
|
|
21
|
+
expect(queue.count()).toBe(0)
|
|
22
|
+
expect(queue.isDisposed()).toBe(true)
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
test('should wait for processing to finish before disposing', async () => {
|
|
26
|
+
let resolveProcess: (value: void | PromiseLike<void>) => void = () => {}
|
|
27
|
+
const processPromise = new Promise<void>((resolve) => {
|
|
28
|
+
resolveProcess = resolve
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
const processFunction = vi.fn().mockImplementation(() => processPromise)
|
|
32
|
+
|
|
33
|
+
const queue = new BatchingQueue<{ id: string }>({
|
|
34
|
+
batchSize: 2,
|
|
35
|
+
maxWaitTime: 100,
|
|
36
|
+
processFunction
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
const items1 = [{ id: 'item-1' }, { id: 'item-2' }]
|
|
40
|
+
items1.forEach((item) => queue.add(item.id, item))
|
|
41
|
+
|
|
42
|
+
// First batch is processing
|
|
43
|
+
expect(processFunction).toHaveBeenCalledWith(items1)
|
|
44
|
+
|
|
45
|
+
const items2 = [{ id: 'item-3' }]
|
|
46
|
+
items2.forEach((item) => queue.add(item.id, item))
|
|
47
|
+
|
|
48
|
+
const disposePromise = queue.disposeAsync()
|
|
49
|
+
|
|
50
|
+
// Queue should be disposed now, but processing is still ongoing
|
|
51
|
+
expect(queue.isDisposed()).toBe(true)
|
|
52
|
+
resolveProcess()
|
|
53
|
+
await disposePromise
|
|
54
|
+
|
|
55
|
+
expect(processFunction).toHaveBeenCalledTimes(2)
|
|
56
|
+
expect(processFunction).toHaveBeenCalledWith(items2)
|
|
57
|
+
expect(queue.count()).toBe(0)
|
|
58
|
+
expect(queue.isDisposed()).toBe(true)
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
test('adding items after dispose should do nothing', async () => {
|
|
62
|
+
const processFunction = vi.fn().mockResolvedValue(undefined)
|
|
63
|
+
const queue = new BatchingQueue<string>({
|
|
64
|
+
batchSize: 5,
|
|
65
|
+
maxWaitTime: 1000,
|
|
66
|
+
processFunction
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
await queue.disposeAsync()
|
|
70
|
+
queue.add('key1', 'item1')
|
|
71
|
+
expect(queue.count()).toBe(0)
|
|
72
|
+
expect(processFunction).not.toHaveBeenCalled()
|
|
73
|
+
})
|
|
74
|
+
})
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { describe, test, expect, vi } from 'vitest'
|
|
2
|
+
import BatchingQueue from './batchingQueue.js'
|
|
3
|
+
|
|
4
|
+
describe('BatchingQueue', () => {
|
|
5
|
+
test('should add items and process them in batches', async () => {
|
|
6
|
+
const processSpy = vi.fn()
|
|
7
|
+
const queue = new BatchingQueue({
|
|
8
|
+
batchSize: 2,
|
|
9
|
+
maxWaitTime: 100,
|
|
10
|
+
processFunction: async (batch: string[]): Promise<void> => {
|
|
11
|
+
await new Promise((resolve) => setTimeout(resolve, 0))
|
|
12
|
+
processSpy(batch)
|
|
13
|
+
}
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
try {
|
|
17
|
+
queue.add('key1', 'item1')
|
|
18
|
+
queue.add('key2', 'item2')
|
|
19
|
+
|
|
20
|
+
await new Promise((resolve) => setTimeout(resolve, 200))
|
|
21
|
+
|
|
22
|
+
expect(processSpy).toHaveBeenCalledTimes(1)
|
|
23
|
+
expect(processSpy).toHaveBeenCalledWith(['item1', 'item2'])
|
|
24
|
+
} finally {
|
|
25
|
+
await queue.disposeAsync()
|
|
26
|
+
}
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
test('should process items after timeout if batch size is not reached', async () => {
|
|
30
|
+
const processSpy = vi.fn()
|
|
31
|
+
const queue = new BatchingQueue({
|
|
32
|
+
batchSize: 5,
|
|
33
|
+
maxWaitTime: 100,
|
|
34
|
+
processFunction: async (batch: string[]): Promise<void> => {
|
|
35
|
+
await new Promise((resolve) => setTimeout(resolve, 0))
|
|
36
|
+
processSpy(batch)
|
|
37
|
+
}
|
|
38
|
+
})
|
|
39
|
+
|
|
40
|
+
try {
|
|
41
|
+
queue.add('key1', 'item1')
|
|
42
|
+
queue.add('key2', 'item2')
|
|
43
|
+
|
|
44
|
+
await new Promise((resolve) => setTimeout(resolve, 200))
|
|
45
|
+
|
|
46
|
+
expect(processSpy).toHaveBeenCalledTimes(1)
|
|
47
|
+
expect(processSpy).toHaveBeenCalledWith(['item1', 'item2'])
|
|
48
|
+
} finally {
|
|
49
|
+
await queue.disposeAsync()
|
|
50
|
+
}
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
test('should handle multiple batches correctly', async () => {
|
|
54
|
+
const processSpy = vi.fn()
|
|
55
|
+
const queue = new BatchingQueue({
|
|
56
|
+
batchSize: 2,
|
|
57
|
+
maxWaitTime: 100,
|
|
58
|
+
processFunction: async (batch: string[]): Promise<void> => {
|
|
59
|
+
await new Promise((resolve) => setTimeout(resolve, 0))
|
|
60
|
+
processSpy(batch)
|
|
61
|
+
}
|
|
62
|
+
})
|
|
63
|
+
|
|
64
|
+
try {
|
|
65
|
+
queue.add('key1', 'item1')
|
|
66
|
+
queue.add('key2', 'item2')
|
|
67
|
+
queue.add('key3', 'item3')
|
|
68
|
+
queue.add('key4', 'item4')
|
|
69
|
+
|
|
70
|
+
await new Promise((resolve) => setTimeout(resolve, 200))
|
|
71
|
+
|
|
72
|
+
expect(processSpy).toHaveBeenCalledTimes(2)
|
|
73
|
+
expect(processSpy).toHaveBeenCalledWith(['item1', 'item2'])
|
|
74
|
+
expect(processSpy).toHaveBeenCalledWith(['item3', 'item4'])
|
|
75
|
+
} finally {
|
|
76
|
+
await queue.disposeAsync()
|
|
77
|
+
}
|
|
78
|
+
})
|
|
79
|
+
|
|
80
|
+
test('should retrieve items by key', async () => {
|
|
81
|
+
const queue = new BatchingQueue<string>({
|
|
82
|
+
batchSize: 3,
|
|
83
|
+
maxWaitTime: 100,
|
|
84
|
+
processFunction: async (): Promise<void> => {
|
|
85
|
+
await new Promise((resolve) => setTimeout(resolve, 0))
|
|
86
|
+
}
|
|
87
|
+
})
|
|
88
|
+
try {
|
|
89
|
+
queue.add('key1', 'item1')
|
|
90
|
+
queue.add('key2', 'item2')
|
|
91
|
+
|
|
92
|
+
expect(queue.get('key1')).toBe('item1')
|
|
93
|
+
expect(queue.get('key2')).toBe('item2')
|
|
94
|
+
expect(queue.get('key3')).toBeUndefined()
|
|
95
|
+
} finally {
|
|
96
|
+
await queue.disposeAsync()
|
|
97
|
+
}
|
|
98
|
+
})
|
|
99
|
+
|
|
100
|
+
test('should return correct count of items', async () => {
|
|
101
|
+
const queue = new BatchingQueue<string>({
|
|
102
|
+
batchSize: 3,
|
|
103
|
+
maxWaitTime: 100,
|
|
104
|
+
processFunction: async (): Promise<void> => {
|
|
105
|
+
await new Promise((resolve) => setTimeout(resolve, 0))
|
|
106
|
+
}
|
|
107
|
+
})
|
|
108
|
+
try {
|
|
109
|
+
expect(queue.count()).toBe(0)
|
|
110
|
+
|
|
111
|
+
queue.add('key1', 'item1')
|
|
112
|
+
queue.add('key2', 'item2')
|
|
113
|
+
|
|
114
|
+
expect(queue.count()).toBe(2)
|
|
115
|
+
} finally {
|
|
116
|
+
await queue.disposeAsync()
|
|
117
|
+
}
|
|
118
|
+
})
|
|
119
|
+
|
|
120
|
+
test('should not process items if already processing', async () => {
|
|
121
|
+
const processSpy = vi.fn()
|
|
122
|
+
const queue = new BatchingQueue({
|
|
123
|
+
batchSize: 2,
|
|
124
|
+
maxWaitTime: 100,
|
|
125
|
+
processFunction: async (batch: string[]): Promise<void> => {
|
|
126
|
+
processSpy(batch)
|
|
127
|
+
await new Promise((resolve) => setTimeout(resolve, 300))
|
|
128
|
+
}
|
|
129
|
+
})
|
|
130
|
+
|
|
131
|
+
try {
|
|
132
|
+
queue.add('key1', 'item1')
|
|
133
|
+
queue.add('key2', 'item2')
|
|
134
|
+
queue.add('key3', 'item3')
|
|
135
|
+
|
|
136
|
+
await new Promise((resolve) => setTimeout(resolve, 200))
|
|
137
|
+
|
|
138
|
+
expect(processSpy).toHaveBeenCalledTimes(1)
|
|
139
|
+
expect(processSpy).toHaveBeenCalledWith(['item1', 'item2'])
|
|
140
|
+
|
|
141
|
+
await new Promise((resolve) => setTimeout(resolve, 500))
|
|
142
|
+
|
|
143
|
+
expect(processSpy).toHaveBeenCalledTimes(2)
|
|
144
|
+
expect(processSpy).toHaveBeenCalledWith(['item3'])
|
|
145
|
+
} finally {
|
|
146
|
+
await queue.disposeAsync()
|
|
147
|
+
}
|
|
148
|
+
})
|
|
149
|
+
})
|