@speckle/objectloader2 2.25.4 → 2.25.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commonjs/{operations → core}/interfaces.d.ts +2 -5
- package/dist/commonjs/core/interfaces.d.ts.map +1 -0
- package/dist/commonjs/core/interfaces.js.map +1 -0
- package/dist/{esm/operations → commonjs/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/core/objectLoader2Factory.d.ts +27 -0
- 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 -7
- 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/commonjs/core/stages/memory/memoryDatabase.d.ts +13 -0
- package/dist/commonjs/core/stages/memory/memoryDatabase.d.ts.map +1 -0
- package/dist/commonjs/{operations/databases → core/stages/memory}/memoryDatabase.js +4 -8
- 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/{operations/downloaders → core/stages/memory}/memoryDownloader.js +1 -1
- 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 +82 -32
- 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 -3
- package/dist/commonjs/index.d.ts.map +1 -1
- package/dist/commonjs/index.js +6 -5
- 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 -5
- package/dist/esm/core/interfaces.d.ts.map +1 -0
- package/dist/esm/core/interfaces.js.map +1 -0
- package/dist/{commonjs/operations → esm/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/core/objectLoader2Factory.d.ts +27 -0
- 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 -7
- 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/esm/core/stages/memory/memoryDatabase.d.ts +13 -0
- package/dist/esm/core/stages/memory/memoryDatabase.d.ts.map +1 -0
- package/dist/esm/{operations/databases → core/stages/memory}/memoryDatabase.js +4 -8
- 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/{operations/downloaders → core/stages/memory}/memoryDownloader.js +1 -1
- 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 +81 -31
- 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 -3
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +3 -3
- 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 -3
- 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/core/stages/__snapshots__/indexedDatabase.spec.ts.snap +18 -0
- 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/core/stages/indexedDatabase.spec.ts +37 -0
- package/src/core/stages/indexedDatabase.ts +49 -0
- package/src/core/stages/memory/__snapshots__/memoryDownloader.spec.ts.snap +12 -0
- package/src/core/stages/memory/memoryDatabase.spec.ts +48 -0
- package/src/{operations/databases → core/stages/memory}/memoryDatabase.ts +7 -12
- package/src/core/stages/memory/memoryDownloader.spec.ts +49 -0
- package/src/{operations/downloaders → core/stages/memory}/memoryDownloader.ts +4 -4
- package/src/{operations/downloaders → core/stages}/serverDownloader.spec.ts +102 -11
- package/src/{operations/downloaders → core/stages}/serverDownloader.ts +88 -31
- 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 -3
- 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 +6 -4
- 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 -21
- package/dist/commonjs/helpers/cachePump.d.ts.map +0 -1
- package/dist/commonjs/helpers/cachePump.js +0 -80
- 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 -26
- package/dist/commonjs/helpers/defermentManager.d.ts.map +0 -1
- package/dist/commonjs/helpers/defermentManager.js +0 -131
- 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 -117
- package/dist/commonjs/operations/databases/indexedDatabase.js.map +0 -1
- package/dist/commonjs/operations/databases/memoryDatabase.d.ts +0 -16
- 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 -95
- package/dist/commonjs/operations/objectLoader2.js.map +0 -1
- package/dist/commonjs/operations/objectLoader2Factory.d.ts +0 -21
- package/dist/commonjs/operations/objectLoader2Factory.d.ts.map +0 -1
- package/dist/commonjs/operations/objectLoader2Factory.js +0 -50
- 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 -21
- package/dist/esm/helpers/cachePump.d.ts.map +0 -1
- package/dist/esm/helpers/cachePump.js +0 -73
- 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 -26
- package/dist/esm/helpers/defermentManager.d.ts.map +0 -1
- package/dist/esm/helpers/defermentManager.js +0 -127
- 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 -114
- package/dist/esm/operations/databases/indexedDatabase.js.map +0 -1
- package/dist/esm/operations/databases/memoryDatabase.d.ts +0 -16
- 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 -88
- package/dist/esm/operations/objectLoader2.js.map +0 -1
- package/dist/esm/operations/objectLoader2Factory.d.ts +0 -21
- package/dist/esm/operations/objectLoader2Factory.d.ts.map +0 -1
- package/dist/esm/operations/objectLoader2Factory.js +0 -43
- 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 -49
- package/src/helpers/cachePump.spec.ts +0 -103
- package/src/helpers/cachePump.ts +0 -99
- package/src/helpers/cacheReader.ts +0 -64
- package/src/helpers/defermentManager.disposal.spec.ts +0 -28
- package/src/helpers/defermentManager.spec.ts +0 -37
- package/src/helpers/defermentManager.ts +0 -141
- 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/__snapshots__/indexedDatabase.spec.ts.snap +0 -31
- package/src/operations/databases/indexedDatabase.spec.ts +0 -37
- package/src/operations/databases/indexedDatabase.ts +0 -150
- package/src/operations/objectLoader2.ts +0 -111
- package/src/operations/objectLoader2Factory.ts +0 -56
- package/dist/commonjs/{operations → core}/interfaces.js +0 -0
- package/dist/commonjs/{operations → core}/options.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 → 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 → core}/traverser.spec.ts +1 -1
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import { Database } from '../operations/interfaces.js'
|
|
2
|
-
import { CacheOptions } from '../operations/options.js'
|
|
3
|
-
import { Base, CustomLogger, Item } from '../types/types.js'
|
|
4
|
-
import BatchingQueue from './batchingQueue.js'
|
|
5
|
-
import { DefermentManager } from './defermentManager.js'
|
|
6
|
-
|
|
7
|
-
export class CacheReader {
|
|
8
|
-
#database: Database
|
|
9
|
-
#defermentManager: DefermentManager
|
|
10
|
-
#logger: CustomLogger
|
|
11
|
-
#options: CacheOptions
|
|
12
|
-
#readQueue: BatchingQueue<string> | undefined
|
|
13
|
-
|
|
14
|
-
constructor(
|
|
15
|
-
database: Database,
|
|
16
|
-
defermentManager: DefermentManager,
|
|
17
|
-
options: CacheOptions
|
|
18
|
-
) {
|
|
19
|
-
this.#database = database
|
|
20
|
-
this.#defermentManager = defermentManager
|
|
21
|
-
this.#options = options
|
|
22
|
-
this.#logger = options.logger || ((): void => {})
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
async getObject(params: { id: string }): Promise<Base> {
|
|
26
|
-
if (!this.#defermentManager.isDeferred(params.id)) {
|
|
27
|
-
this.#getItem(params.id)
|
|
28
|
-
}
|
|
29
|
-
return await this.#defermentManager.defer({ id: params.id })
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
#getItem(id: string): void {
|
|
33
|
-
if (!this.#readQueue) {
|
|
34
|
-
this.#readQueue = new BatchingQueue({
|
|
35
|
-
batchSize: this.#options.maxCacheReadSize,
|
|
36
|
-
maxWaitTime: this.#options.maxCacheBatchReadWait,
|
|
37
|
-
processFunction: this.#processBatch
|
|
38
|
-
})
|
|
39
|
-
}
|
|
40
|
-
if (!this.#readQueue.get(id)) {
|
|
41
|
-
this.#readQueue.add(id, id)
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
async getAll(keys: string[]): Promise<(Item | undefined)[]> {
|
|
46
|
-
return this.#database.getAll(keys)
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
#processBatch = async (batch: string[]): Promise<void> => {
|
|
50
|
-
const items = await this.#database.getAll(batch)
|
|
51
|
-
for (let i = 0; i < items.length; i++) {
|
|
52
|
-
if (items[i]) {
|
|
53
|
-
this.#defermentManager.undefer(items[i]!)
|
|
54
|
-
} else {
|
|
55
|
-
//this is okay!
|
|
56
|
-
//this.#logger(`Item ${batch[i]} not found in cache`)
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
async disposeAsync(): Promise<void> {
|
|
62
|
-
await this.#readQueue?.disposeAsync()
|
|
63
|
-
}
|
|
64
|
-
}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest'
|
|
2
|
-
import { DefermentManager } from './defermentManager.js'
|
|
3
|
-
import { DefermentManagerOptions } from '../operations/options.js'
|
|
4
|
-
import { Item } from '../types/types.js'
|
|
5
|
-
|
|
6
|
-
describe('DefermentManager disposal', () => {
|
|
7
|
-
const options: DefermentManagerOptions = { ttlms: 10, maxSizeInMb: 1 }
|
|
8
|
-
const makeItem = (id: string): Item => ({
|
|
9
|
-
baseId: id,
|
|
10
|
-
base: { id, speckle_type: 'test' }
|
|
11
|
-
})
|
|
12
|
-
|
|
13
|
-
it('should throw on get/defer/undefer after dispose', async () => {
|
|
14
|
-
const manager = new DefermentManager(options)
|
|
15
|
-
manager.dispose()
|
|
16
|
-
expect(() => manager.get('a')).toThrow('DefermentManager is disposed')
|
|
17
|
-
expect(() => manager.undefer(makeItem('a'))).toThrow('DefermentManager is disposed')
|
|
18
|
-
await expect(manager.defer({ id: 'a' })).rejects.toThrow(
|
|
19
|
-
'DefermentManager is disposed'
|
|
20
|
-
)
|
|
21
|
-
})
|
|
22
|
-
|
|
23
|
-
it('dispose is idempotent', () => {
|
|
24
|
-
const manager = new DefermentManager(options)
|
|
25
|
-
manager.dispose()
|
|
26
|
-
expect(() => manager.dispose()).not.toThrow()
|
|
27
|
-
})
|
|
28
|
-
})
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
2
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
3
|
-
import { describe, expect, test } from 'vitest'
|
|
4
|
-
import { DefermentManager } from './defermentManager.js'
|
|
5
|
-
|
|
6
|
-
describe('deferments', () => {
|
|
7
|
-
test('defer one', async () => {
|
|
8
|
-
const deferments = new DefermentManager({ maxSizeInMb: 1, ttlms: 1 })
|
|
9
|
-
const x = deferments.defer({ id: 'id' })
|
|
10
|
-
expect(x).toBeInstanceOf(Promise)
|
|
11
|
-
deferments.undefer({ baseId: 'id', base: { id: 'id', speckle_type: 'type' } })
|
|
12
|
-
const b = await x
|
|
13
|
-
expect(b).toMatchSnapshot()
|
|
14
|
-
})
|
|
15
|
-
|
|
16
|
-
test('expireAt timeout', async () => {
|
|
17
|
-
const now = 1
|
|
18
|
-
const deferments = new DefermentManager({ maxSizeInMb: 1, ttlms: 1 })
|
|
19
|
-
deferments['now'] = (): number => now
|
|
20
|
-
const x = deferments.defer({ id: 'id' })
|
|
21
|
-
expect(x).toBeInstanceOf(Promise)
|
|
22
|
-
const d = deferments.get('id')
|
|
23
|
-
expect(d).toBeDefined()
|
|
24
|
-
expect(d?.getId()).toBe('id')
|
|
25
|
-
expect((d as any).expiresAt).toBe(2)
|
|
26
|
-
expect((d as any).ttl).toBe(1)
|
|
27
|
-
expect((d as any).item).toBeUndefined()
|
|
28
|
-
expect(d?.isExpired(1)).toBe(false)
|
|
29
|
-
deferments.undefer({ baseId: 'id', base: { id: 'id', speckle_type: 'type' } })
|
|
30
|
-
await x
|
|
31
|
-
expect((d as any).expiresAt).toBe(2)
|
|
32
|
-
expect((d as any).ttl).toBe(1)
|
|
33
|
-
expect((d as any).item).toBeDefined()
|
|
34
|
-
expect(d?.isExpired(1)).toBe(false)
|
|
35
|
-
expect(d?.isExpired(3)).toBe(true)
|
|
36
|
-
})
|
|
37
|
-
})
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
import { DeferredBase } from './deferredBase.js'
|
|
2
|
-
import { Base, CustomLogger, Item } from '../types/types.js'
|
|
3
|
-
import { DefermentManagerOptions } from '../operations/options.js'
|
|
4
|
-
|
|
5
|
-
export class DefermentManager {
|
|
6
|
-
private deferments: Map<string, DeferredBase> = new Map()
|
|
7
|
-
private timer?: ReturnType<typeof setTimeout>
|
|
8
|
-
private logger: CustomLogger
|
|
9
|
-
private currentSize = 0
|
|
10
|
-
private disposed = false
|
|
11
|
-
|
|
12
|
-
constructor(private options: DefermentManagerOptions) {
|
|
13
|
-
this.resetGlobalTimer()
|
|
14
|
-
this.logger = options.logger || ((): void => {})
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
private now(): number {
|
|
18
|
-
return Date.now()
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
isDeferred(id: string): boolean {
|
|
22
|
-
return this.deferments.has(id)
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
get(id: string): DeferredBase | undefined {
|
|
26
|
-
if (this.disposed) throw new Error('DefermentManager is disposed')
|
|
27
|
-
return this.deferments.get(id)
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
async defer(params: { id: string }): Promise<Base> {
|
|
31
|
-
if (this.disposed) throw new Error('DefermentManager is disposed')
|
|
32
|
-
const now = this.now()
|
|
33
|
-
const deferredBase = this.deferments.get(params.id)
|
|
34
|
-
if (deferredBase) {
|
|
35
|
-
deferredBase.setAccess(now)
|
|
36
|
-
return deferredBase.getPromise()
|
|
37
|
-
}
|
|
38
|
-
const notYetFound = new DeferredBase(
|
|
39
|
-
this.options.ttlms,
|
|
40
|
-
params.id,
|
|
41
|
-
now + this.options.ttlms
|
|
42
|
-
)
|
|
43
|
-
this.deferments.set(params.id, notYetFound)
|
|
44
|
-
return notYetFound.getPromise()
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
undefer(item: Item): void {
|
|
48
|
-
if (this.disposed) throw new Error('DefermentManager is disposed')
|
|
49
|
-
const now = this.now()
|
|
50
|
-
this.currentSize += item.size || 0
|
|
51
|
-
//order matters here with found before undefer
|
|
52
|
-
const deferredBase = this.deferments.get(item.baseId)
|
|
53
|
-
if (deferredBase) {
|
|
54
|
-
deferredBase.found(item)
|
|
55
|
-
deferredBase.setAccess(now)
|
|
56
|
-
} else {
|
|
57
|
-
const existing = new DeferredBase(this.options.ttlms, item.baseId, now)
|
|
58
|
-
existing.found(item)
|
|
59
|
-
this.deferments.set(item.baseId, existing)
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
private resetGlobalTimer(): void {
|
|
64
|
-
const run = (): void => {
|
|
65
|
-
this.cleanDeferments()
|
|
66
|
-
this.timer = setTimeout(run, this.options.ttlms)
|
|
67
|
-
}
|
|
68
|
-
this.timer = setTimeout(run, this.options.ttlms)
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
dispose(): void {
|
|
72
|
-
if (this.disposed) return
|
|
73
|
-
this.disposed = true
|
|
74
|
-
if (this.timer) {
|
|
75
|
-
clearTimeout(this.timer)
|
|
76
|
-
this.timer = undefined
|
|
77
|
-
}
|
|
78
|
-
this.clearDeferments()
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
private clearDeferments(): void {
|
|
82
|
-
let waiting = 0
|
|
83
|
-
for (const deferredBase of this.deferments.values()) {
|
|
84
|
-
deferredBase.done(0)
|
|
85
|
-
if (deferredBase.getItem() === undefined) {
|
|
86
|
-
waiting++
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
this.currentSize = 0
|
|
90
|
-
this.deferments.clear()
|
|
91
|
-
this.logger('cleared deferments, left', waiting)
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
private cleanDeferments(): void {
|
|
95
|
-
const maxSizeBytes = this.options.maxSizeInMb * 1024 * 1024
|
|
96
|
-
if (this.currentSize < maxSizeBytes) {
|
|
97
|
-
this.logger(
|
|
98
|
-
'deferments size is ok, no need to clean',
|
|
99
|
-
this.currentSize,
|
|
100
|
-
maxSizeBytes
|
|
101
|
-
)
|
|
102
|
-
return
|
|
103
|
-
}
|
|
104
|
-
const now = this.now()
|
|
105
|
-
let cleaned = 0
|
|
106
|
-
const start = performance.now()
|
|
107
|
-
for (const deferredBase of Array.from(this.deferments.values())
|
|
108
|
-
.filter((x) => x.isExpired(now))
|
|
109
|
-
.sort((a, b) => this.compareMaybeBasesBySize(a.getItem(), b.getItem()))) {
|
|
110
|
-
if (deferredBase.done(now)) {
|
|
111
|
-
this.currentSize -= deferredBase.getItem()?.size || 0
|
|
112
|
-
this.deferments.delete(deferredBase.getId())
|
|
113
|
-
cleaned++
|
|
114
|
-
if (this.currentSize < maxSizeBytes) {
|
|
115
|
-
break
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
this.logger(
|
|
120
|
-
'cleaned deferments, cleaned, left',
|
|
121
|
-
cleaned,
|
|
122
|
-
this.deferments.size,
|
|
123
|
-
performance.now() - start
|
|
124
|
-
)
|
|
125
|
-
return
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
compareMaybeBasesBySize(a: Item | undefined, b: Item | undefined): number {
|
|
129
|
-
if (a === undefined && b === undefined) return 0
|
|
130
|
-
if (a === undefined) return -1
|
|
131
|
-
if (b === undefined) return 1
|
|
132
|
-
return this.compareMaybe(a.size, b.size)
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
compareMaybe(a: number | undefined, b: number | undefined): number {
|
|
136
|
-
if (a === undefined && b === undefined) return 0
|
|
137
|
-
if (a === undefined) return -1
|
|
138
|
-
if (b === undefined) return 1
|
|
139
|
-
return a - b
|
|
140
|
-
}
|
|
141
|
-
}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { Base, Item } 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
|
-
private item?: Item
|
|
8
|
-
|
|
9
|
-
private readonly id: string
|
|
10
|
-
private expiresAt: number // Timestamp in ms
|
|
11
|
-
private ttl: number // ttl in ms
|
|
12
|
-
|
|
13
|
-
constructor(ttl: number, id: string, expiresAt: number) {
|
|
14
|
-
this.expiresAt = expiresAt
|
|
15
|
-
this.ttl = ttl
|
|
16
|
-
this.id = id
|
|
17
|
-
this.promise = new Promise<Base>((resolve, reject) => {
|
|
18
|
-
this.resolve = resolve
|
|
19
|
-
this.reject = reject
|
|
20
|
-
})
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
getId(): string {
|
|
24
|
-
return this.id
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
getItem(): Item | undefined {
|
|
28
|
-
return this.item
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
getPromise(): Promise<Base> {
|
|
32
|
-
return this.promise
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
isExpired(now: number): boolean {
|
|
36
|
-
return this.item !== undefined && now > this.expiresAt
|
|
37
|
-
}
|
|
38
|
-
setAccess(now: number): void {
|
|
39
|
-
this.expiresAt = now + this.ttl
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
found(value: Item): void {
|
|
43
|
-
this.item = value
|
|
44
|
-
this.resolve(value.base)
|
|
45
|
-
}
|
|
46
|
-
done(now: number): boolean {
|
|
47
|
-
if (this.item) {
|
|
48
|
-
this.resolve(this.item.base)
|
|
49
|
-
}
|
|
50
|
-
if (this.isExpired(now)) {
|
|
51
|
-
return true
|
|
52
|
-
}
|
|
53
|
-
return false
|
|
54
|
-
}
|
|
55
|
-
}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { Item } from '../types/types.js'
|
|
2
|
-
import { Pump } from './pump.js'
|
|
3
|
-
import Queue from './queue.js'
|
|
4
|
-
|
|
5
|
-
export class MemoryPump implements Pump {
|
|
6
|
-
#items: Map<string, Item> = new Map()
|
|
7
|
-
|
|
8
|
-
add(item: Item): void {
|
|
9
|
-
this.#items.set(item.baseId, item)
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
async pumpItems(params: {
|
|
13
|
-
ids: string[]
|
|
14
|
-
foundItems: Queue<Item>
|
|
15
|
-
notFoundItems: Queue<string>
|
|
16
|
-
}): Promise<void> {
|
|
17
|
-
const { ids, foundItems, notFoundItems } = params
|
|
18
|
-
for (const id of ids) {
|
|
19
|
-
const item = this.#items.get(id)
|
|
20
|
-
if (item) {
|
|
21
|
-
foundItems.add(item)
|
|
22
|
-
} else {
|
|
23
|
-
notFoundItems.add(id)
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
return Promise.resolve()
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
async *gather(ids: string[]): AsyncGenerator<Item> {
|
|
30
|
-
for (const id of ids) {
|
|
31
|
-
const item = this.#items.get(id)
|
|
32
|
-
if (item) {
|
|
33
|
-
yield item
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
return Promise.resolve()
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
async disposeAsync(): Promise<void> {}
|
|
40
|
-
}
|
package/src/helpers/pump.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { Downloader } from '../operations/interfaces.js'
|
|
2
|
-
import { Item } from '../types/types.js'
|
|
3
|
-
import Queue from './queue.js'
|
|
4
|
-
|
|
5
|
-
export interface Pump extends Queue<Item> {
|
|
6
|
-
gather(ids: string[], downloader: Downloader): AsyncGenerator<Item>
|
|
7
|
-
disposeAsync(): Promise<void>
|
|
8
|
-
}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
|
|
2
|
-
|
|
3
|
-
exports[`database cache > write single item to queue use getItem 1`] = `
|
|
4
|
-
{
|
|
5
|
-
"base": {
|
|
6
|
-
"id": "id",
|
|
7
|
-
"speckle_type": "type",
|
|
8
|
-
},
|
|
9
|
-
"baseId": "id",
|
|
10
|
-
}
|
|
11
|
-
`;
|
|
12
|
-
|
|
13
|
-
exports[`database cache > write two items to queue use getItem 1`] = `
|
|
14
|
-
{
|
|
15
|
-
"base": {
|
|
16
|
-
"id": "id",
|
|
17
|
-
"speckle_type": "type",
|
|
18
|
-
},
|
|
19
|
-
"baseId": "id1",
|
|
20
|
-
}
|
|
21
|
-
`;
|
|
22
|
-
|
|
23
|
-
exports[`database cache > write two items to queue use getItem 2`] = `
|
|
24
|
-
{
|
|
25
|
-
"base": {
|
|
26
|
-
"id": "id",
|
|
27
|
-
"speckle_type": "type",
|
|
28
|
-
},
|
|
29
|
-
"baseId": "id2",
|
|
30
|
-
}
|
|
31
|
-
`;
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { describe, expect, test } from 'vitest'
|
|
2
|
-
import IndexedDatabase from './indexedDatabase.js'
|
|
3
|
-
import { IDBFactory, IDBKeyRange } from 'fake-indexeddb'
|
|
4
|
-
import { Item } from '../../types/types.js'
|
|
5
|
-
|
|
6
|
-
describe('database cache', () => {
|
|
7
|
-
test('write single item to queue use getItem', async () => {
|
|
8
|
-
const i: Item = { baseId: 'id', base: { id: 'id', speckle_type: 'type' } }
|
|
9
|
-
const database = new IndexedDatabase({
|
|
10
|
-
indexedDB: new IDBFactory(),
|
|
11
|
-
keyRange: IDBKeyRange
|
|
12
|
-
})
|
|
13
|
-
await database.add(i)
|
|
14
|
-
await database.disposeAsync()
|
|
15
|
-
|
|
16
|
-
const x = await database.getItem({ id: 'id' })
|
|
17
|
-
expect(x).toMatchSnapshot()
|
|
18
|
-
})
|
|
19
|
-
|
|
20
|
-
test('write two items to queue use getItem', async () => {
|
|
21
|
-
const i1: Item = { baseId: 'id1', base: { id: 'id', speckle_type: 'type' } }
|
|
22
|
-
const i2: Item = { baseId: 'id2', base: { id: 'id', speckle_type: 'type' } }
|
|
23
|
-
const database = new IndexedDatabase({
|
|
24
|
-
indexedDB: new IDBFactory(),
|
|
25
|
-
keyRange: IDBKeyRange
|
|
26
|
-
})
|
|
27
|
-
await database.add(i1)
|
|
28
|
-
await database.add(i2)
|
|
29
|
-
await database.disposeAsync()
|
|
30
|
-
|
|
31
|
-
const x1 = await database.getItem({ id: i1.baseId })
|
|
32
|
-
expect(x1).toMatchSnapshot()
|
|
33
|
-
|
|
34
|
-
const x2 = await database.getItem({ id: i2.baseId })
|
|
35
|
-
expect(x2).toMatchSnapshot()
|
|
36
|
-
})
|
|
37
|
-
})
|
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-unsafe-function-type */
|
|
2
|
-
import BatchingQueue from '../../helpers/batchingQueue.js'
|
|
3
|
-
import { CustomLogger, Item } from '../../types/types.js'
|
|
4
|
-
import { isSafari } from '@speckle/shared'
|
|
5
|
-
import { Dexie, DexieOptions, Table } from 'dexie'
|
|
6
|
-
import { Database } from '../interfaces.js'
|
|
7
|
-
|
|
8
|
-
class ObjectStore extends Dexie {
|
|
9
|
-
static #databaseName: string = 'speckle-cache'
|
|
10
|
-
objects!: Table<Item, string> // Table type: <entity, primaryKey>
|
|
11
|
-
|
|
12
|
-
constructor(options: DexieOptions) {
|
|
13
|
-
super(ObjectStore.#databaseName, options)
|
|
14
|
-
|
|
15
|
-
this.version(1).stores({
|
|
16
|
-
objects: 'baseId, item' // baseId is primary key
|
|
17
|
-
})
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export interface IndexedDatabaseOptions {
|
|
22
|
-
logger?: CustomLogger
|
|
23
|
-
indexedDB?: IDBFactory
|
|
24
|
-
keyRange?: {
|
|
25
|
-
bound: Function
|
|
26
|
-
lowerBound: Function
|
|
27
|
-
upperBound: Function
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export default class IndexedDatabase implements Database {
|
|
32
|
-
#options: IndexedDatabaseOptions
|
|
33
|
-
#logger: CustomLogger
|
|
34
|
-
|
|
35
|
-
#cacheDB?: ObjectStore
|
|
36
|
-
|
|
37
|
-
#writeQueue: BatchingQueue<Item> | undefined
|
|
38
|
-
|
|
39
|
-
// #count: number = 0
|
|
40
|
-
|
|
41
|
-
constructor(options: IndexedDatabaseOptions) {
|
|
42
|
-
this.#options = options
|
|
43
|
-
this.#logger = options.logger || ((): void => {})
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
async getAll(keys: string[]): Promise<(Item | undefined)[]> {
|
|
47
|
-
await this.#setupCacheDb()
|
|
48
|
-
let items: (Item | undefined)[] = []
|
|
49
|
-
// this.#count++
|
|
50
|
-
// const startTime = performance.now()
|
|
51
|
-
// this.#logger('Start read ' + x + ' ' + batch.length)
|
|
52
|
-
|
|
53
|
-
//faster than BulkGet with dexie
|
|
54
|
-
await this.#cacheDB!.transaction('r', this.#cacheDB!.objects, async () => {
|
|
55
|
-
const gets = keys.map((key) => this.#cacheDB!.objects.get(key))
|
|
56
|
-
const cachedData = await Promise.all(gets)
|
|
57
|
-
items = cachedData
|
|
58
|
-
})
|
|
59
|
-
// const endTime = performance.now()
|
|
60
|
-
// const duration = endTime - startTime
|
|
61
|
-
//this.#logger('Saved batch ' + x + ' ' + batch.length + ' ' + duration / TIME_MS.second)
|
|
62
|
-
|
|
63
|
-
return items
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
async #openDatabase(): Promise<ObjectStore> {
|
|
67
|
-
const db = new ObjectStore({
|
|
68
|
-
indexedDB: this.#options.indexedDB ?? globalThis.indexedDB,
|
|
69
|
-
IDBKeyRange: this.#options.keyRange ?? IDBKeyRange,
|
|
70
|
-
chromeTransactionDurability: 'relaxed'
|
|
71
|
-
})
|
|
72
|
-
await db.open()
|
|
73
|
-
return db
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
async #setupCacheDb(): Promise<void> {
|
|
77
|
-
if (this.#cacheDB !== undefined) {
|
|
78
|
-
return
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
// Initialize
|
|
82
|
-
await this.#safariFix()
|
|
83
|
-
this.#cacheDB = await this.#openDatabase()
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
//this is for testing only - in the real world we will not use this
|
|
87
|
-
async add(item: Item): Promise<void> {
|
|
88
|
-
await this.#setupCacheDb()
|
|
89
|
-
await this.#cacheDB!.transaction('rw', this.#cacheDB!.objects, async () => {
|
|
90
|
-
return await this.#cacheDB?.objects.add(item)
|
|
91
|
-
})
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
async getItem(params: { id: string }): Promise<Item | undefined> {
|
|
95
|
-
const { id } = params
|
|
96
|
-
await this.#setupCacheDb()
|
|
97
|
-
//might not be in the real DB yet, so check the write queue first
|
|
98
|
-
if (this.#writeQueue) {
|
|
99
|
-
const item = this.#writeQueue.get(id)
|
|
100
|
-
if (item) {
|
|
101
|
-
return item
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
return this.#cacheDB!.transaction('r', this.#cacheDB!.objects, async () => {
|
|
106
|
-
return await this.#cacheDB?.objects.get(id)
|
|
107
|
-
})
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
async cacheSaveBatch(params: { batch: Item[] }): Promise<void> {
|
|
111
|
-
await this.#setupCacheDb()
|
|
112
|
-
const { batch } = params
|
|
113
|
-
//const x = this.#count
|
|
114
|
-
//this.#count++
|
|
115
|
-
|
|
116
|
-
// const startTime = performance.now()
|
|
117
|
-
// this.#logger('Start save ' + x + ' ' + batch.length)
|
|
118
|
-
await this.#cacheDB!.objects.bulkPut(batch)
|
|
119
|
-
// const endTime = performance.now()
|
|
120
|
-
// const duration = endTime - startTime
|
|
121
|
-
//this.#logger('Saved batch ' + x + ' ' + batch.length + ' ' + duration / TIME_MS.second)
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
/**
|
|
125
|
-
* Fixes a Safari bug where IndexedDB requests get lost and never resolve - invoke before you use IndexedDB
|
|
126
|
-
* @link Credits and more info: https://github.com/jakearchibald/safari-14-idb-fix
|
|
127
|
-
*/
|
|
128
|
-
async #safariFix(): Promise<void> {
|
|
129
|
-
// No point putting other browsers or older versions of Safari through this mess.
|
|
130
|
-
if (!isSafari() || !this.#options.indexedDB?.databases) return Promise.resolve()
|
|
131
|
-
|
|
132
|
-
let intervalId: ReturnType<typeof setInterval>
|
|
133
|
-
|
|
134
|
-
return new Promise<void>((resolve: () => void) => {
|
|
135
|
-
const tryIdb = (): Promise<IDBDatabaseInfo[]> | undefined =>
|
|
136
|
-
this.#options.indexedDB?.databases().finally(resolve)
|
|
137
|
-
intervalId = setInterval(() => {
|
|
138
|
-
void tryIdb()
|
|
139
|
-
}, 100)
|
|
140
|
-
void tryIdb()
|
|
141
|
-
}).finally(() => clearInterval(intervalId))
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
async disposeAsync(): Promise<void> {
|
|
145
|
-
this.#cacheDB?.close()
|
|
146
|
-
this.#cacheDB = undefined
|
|
147
|
-
await this.#writeQueue?.disposeAsync()
|
|
148
|
-
this.#writeQueue = undefined
|
|
149
|
-
}
|
|
150
|
-
}
|