@synchronized-console/objectloader2 2.25.7 → 2.31.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commonjs/{operations → core}/interfaces.d.ts +5 -7
- 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 +120 -0
- package/dist/commonjs/core/objectLoader2.js.map +1 -0
- package/dist/{esm/operations → commonjs/core}/objectLoader2Factory.d.ts +10 -2
- package/dist/commonjs/core/objectLoader2Factory.d.ts.map +1 -0
- package/dist/commonjs/core/objectLoader2Factory.js +86 -0
- package/dist/commonjs/core/objectLoader2Factory.js.map +1 -0
- package/dist/commonjs/core/objectLoader2Factory.test.d.ts +2 -0
- package/dist/commonjs/core/objectLoader2Factory.test.d.ts.map +1 -0
- package/dist/commonjs/core/objectLoader2Factory.test.js +106 -0
- package/dist/commonjs/core/objectLoader2Factory.test.js.map +1 -0
- package/dist/{esm/operations → commonjs/core}/options.d.ts +4 -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/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/core/stages/indexedDatabase.d.ts +34 -0
- package/dist/commonjs/core/stages/indexedDatabase.d.ts.map +1 -0
- package/dist/commonjs/core/stages/indexedDatabase.js +150 -0
- package/dist/commonjs/core/stages/indexedDatabase.js.map +1 -0
- package/dist/commonjs/core/stages/memory/memoryDatabase.d.ts +11 -0
- package/dist/commonjs/core/stages/memory/memoryDatabase.d.ts.map +1 -0
- package/dist/commonjs/{operations/databases → core/stages/memory}/memoryDatabase.js +6 -3
- package/dist/commonjs/core/stages/memory/memoryDatabase.js.map +1 -0
- package/dist/commonjs/{operations/downloaders → core/stages/memory}/memoryDownloader.d.ts +4 -4
- 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 +8 -6
- package/dist/commonjs/core/stages/serverDownloader.d.ts.map +1 -0
- package/dist/commonjs/{operations/downloaders → core/stages}/serverDownloader.js +99 -50
- 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 +32 -0
- package/dist/commonjs/deferment/defermentManager.d.ts.map +1 -0
- package/dist/commonjs/deferment/defermentManager.js +85 -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 +193 -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 +4 -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/commonjs/{helpers → 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 +62 -0
- package/dist/commonjs/queues/batchingQueue.dispose.test.js.map +1 -0
- package/dist/commonjs/queues/batchingQueue.js +128 -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 +236 -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/keyedQueue.test.d.ts +2 -0
- package/dist/commonjs/queues/keyedQueue.test.d.ts.map +1 -0
- package/dist/commonjs/queues/keyedQueue.test.js +118 -0
- package/dist/commonjs/queues/keyedQueue.test.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 +6 -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 +5 -7
- 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 +113 -0
- package/dist/esm/core/objectLoader2.js.map +1 -0
- package/dist/{commonjs/operations → esm/core}/objectLoader2Factory.d.ts +10 -2
- package/dist/esm/core/objectLoader2Factory.d.ts.map +1 -0
- package/dist/esm/core/objectLoader2Factory.js +79 -0
- package/dist/esm/core/objectLoader2Factory.js.map +1 -0
- package/dist/esm/core/objectLoader2Factory.test.d.ts +2 -0
- package/dist/esm/core/objectLoader2Factory.test.d.ts.map +1 -0
- package/dist/esm/core/objectLoader2Factory.test.js +104 -0
- package/dist/esm/core/objectLoader2Factory.test.js.map +1 -0
- package/dist/{commonjs/operations → esm/core}/options.d.ts +4 -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/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/core/stages/indexedDatabase.d.ts +34 -0
- package/dist/esm/core/stages/indexedDatabase.d.ts.map +1 -0
- package/dist/esm/core/stages/indexedDatabase.js +146 -0
- package/dist/esm/core/stages/indexedDatabase.js.map +1 -0
- package/dist/esm/core/stages/memory/memoryDatabase.d.ts +11 -0
- package/dist/esm/core/stages/memory/memoryDatabase.d.ts.map +1 -0
- package/dist/esm/{operations/databases → core/stages/memory}/memoryDatabase.js +6 -3
- package/dist/esm/core/stages/memory/memoryDatabase.js.map +1 -0
- package/dist/esm/{operations/downloaders → core/stages/memory}/memoryDownloader.d.ts +4 -4
- 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 +8 -6
- package/dist/esm/core/stages/serverDownloader.d.ts.map +1 -0
- package/dist/esm/{operations/downloaders → core/stages}/serverDownloader.js +98 -49
- 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 +32 -0
- package/dist/esm/deferment/defermentManager.d.ts.map +1 -0
- package/dist/esm/deferment/defermentManager.js +80 -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 +191 -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 +4 -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/esm/{helpers → 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 +57 -0
- package/dist/esm/queues/batchingQueue.dispose.test.js.map +1 -0
- package/dist/esm/queues/batchingQueue.js +122 -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 +231 -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/keyedQueue.test.d.ts +2 -0
- package/dist/esm/queues/keyedQueue.test.d.ts.map +1 -0
- package/dist/esm/queues/keyedQueue.test.js +113 -0
- package/dist/esm/queues/keyedQueue.test.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 +6 -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 +5 -3
- package/src/{operations → core}/interfaces.ts +5 -5
- package/src/{operations → core}/objectLoader2.spec.ts +31 -11
- package/src/core/objectLoader2.ts +152 -0
- package/src/core/objectLoader2Factory.test.ts +135 -0
- package/src/core/objectLoader2Factory.ts +113 -0
- package/src/{operations → core}/options.ts +4 -1
- 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 +12 -8
- package/src/core/stages/indexedDatabase.ts +178 -0
- package/src/{operations/databases → core/stages/memory}/memoryDatabase.spec.ts +7 -7
- package/src/{operations/databases → core/stages/memory}/memoryDatabase.ts +9 -6
- package/src/{operations/downloaders → core/stages/memory}/memoryDownloader.spec.ts +5 -5
- package/src/{operations/downloaders → core/stages/memory}/memoryDownloader.ts +4 -4
- package/src/core/stages/serverDownloader.spec.ts +382 -0
- package/src/{operations/downloaders → core/stages}/serverDownloader.ts +115 -52
- 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 +225 -0
- package/src/deferment/defermentManager.ts +95 -0
- package/src/deferment/deferredBase.ts +29 -0
- package/src/index.ts +4 -2
- package/src/{helpers → queues}/aggregateQueue.ts +5 -1
- package/src/{helpers → queues}/asyncGeneratorQueue.ts +2 -1
- package/src/queues/batchingQueue.dispose.test.ts +72 -0
- package/src/queues/batchingQueue.test.ts +270 -0
- package/src/queues/batchingQueue.ts +140 -0
- package/src/{helpers → queues}/bufferQueue.ts +3 -0
- package/src/queues/keyedQueue.test.ts +146 -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 +116 -0
- package/src/types/types.ts +5 -50
- 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 +0 -12
- package/dist/commonjs/helpers/batchedPool.d.ts.map +0 -1
- package/dist/commonjs/helpers/batchedPool.js +0 -45
- 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 +0 -27
- 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 +0 -13
- 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 +0 -12
- package/dist/esm/helpers/batchedPool.d.ts.map +0 -1
- package/dist/esm/helpers/batchedPool.js +0 -42
- 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 +0 -27
- 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 +0 -13
- 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/batchedPool.ts +0 -56
- 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/downloaders/serverDownloader.spec.ts +0 -161
- 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 → core}/traverser.d.ts +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}/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,152 @@
|
|
|
1
|
+
import { Deferment } from '../deferment/defermentManager.js'
|
|
2
|
+
import AggregateQueue from '../queues/aggregateQueue.js'
|
|
3
|
+
import AsyncGeneratorQueue from '../queues/asyncGeneratorQueue.js'
|
|
4
|
+
import { CustomLogger, take } from '../types/functions.js'
|
|
5
|
+
import { Item, Base } from '../types/types.js'
|
|
6
|
+
import { Database, Downloader } from './interfaces.js'
|
|
7
|
+
import { ObjectLoader2Factory } from './objectLoader2Factory.js'
|
|
8
|
+
import { ObjectLoader2Options, CacheOptions } from './options.js'
|
|
9
|
+
import { CacheReader } from './stages/cacheReader.js'
|
|
10
|
+
import { CacheWriter } from './stages/cacheWriter.js'
|
|
11
|
+
|
|
12
|
+
const MAX_CLOSURES_TO_TAKE = 100
|
|
13
|
+
const EXPECTED_CLOSURE_VALUE = 100
|
|
14
|
+
|
|
15
|
+
export class ObjectLoader2 {
|
|
16
|
+
#rootId: string
|
|
17
|
+
|
|
18
|
+
#logger: CustomLogger
|
|
19
|
+
|
|
20
|
+
#database: Database
|
|
21
|
+
#downloader: Downloader
|
|
22
|
+
#cacheReader: CacheReader
|
|
23
|
+
#cacheWriter: CacheWriter
|
|
24
|
+
|
|
25
|
+
#deferments: Deferment
|
|
26
|
+
|
|
27
|
+
#gathered: AsyncGeneratorQueue<Item>
|
|
28
|
+
|
|
29
|
+
#root?: Item = undefined
|
|
30
|
+
#isRootStored = false
|
|
31
|
+
|
|
32
|
+
constructor(options: ObjectLoader2Options) {
|
|
33
|
+
this.#rootId = options.rootId
|
|
34
|
+
this.#logger = options.logger || ((): void => {})
|
|
35
|
+
this.#logger('ObjectLoader2 initialized with rootId:', this.#rootId)
|
|
36
|
+
|
|
37
|
+
const cacheOptions: CacheOptions = {
|
|
38
|
+
logger: this.#logger,
|
|
39
|
+
maxCacheReadSize: 10_000,
|
|
40
|
+
maxCacheWriteSize: 10_000,
|
|
41
|
+
maxWriteQueueSize: 40_000,
|
|
42
|
+
maxCacheBatchWriteWait: 100, //100 ms, next to nothing!
|
|
43
|
+
maxCacheBatchReadWait: 100 //100 ms, next to nothing!
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
this.#gathered = new AsyncGeneratorQueue()
|
|
47
|
+
|
|
48
|
+
this.#database = options.database
|
|
49
|
+
this.#deferments = options.deferments
|
|
50
|
+
this.#downloader = options.downloader
|
|
51
|
+
this.#cacheReader = new CacheReader(
|
|
52
|
+
this.#database,
|
|
53
|
+
this.#deferments,
|
|
54
|
+
this.#logger,
|
|
55
|
+
cacheOptions
|
|
56
|
+
)
|
|
57
|
+
this.#cacheReader.initializeQueue(this.#gathered, this.#downloader)
|
|
58
|
+
this.#cacheWriter = new CacheWriter(
|
|
59
|
+
this.#database,
|
|
60
|
+
this.#logger,
|
|
61
|
+
this.#deferments,
|
|
62
|
+
cacheOptions,
|
|
63
|
+
(id: string) => {
|
|
64
|
+
this.#cacheReader.requestItem(id)
|
|
65
|
+
}
|
|
66
|
+
)
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
async disposeAsync(): Promise<void> {
|
|
70
|
+
await Promise.all([
|
|
71
|
+
this.#gathered.disposeAsync(),
|
|
72
|
+
this.#downloader.disposeAsync(),
|
|
73
|
+
this.#cacheWriter.disposeAsync(),
|
|
74
|
+
this.#cacheReader.disposeAsync()
|
|
75
|
+
])
|
|
76
|
+
this.#deferments.dispose()
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
async getRootObject(): Promise<Item | undefined> {
|
|
80
|
+
if (!this.#root) {
|
|
81
|
+
this.#root = (await this.#database.getAll([this.#rootId]))[0]
|
|
82
|
+
if (!this.#root) {
|
|
83
|
+
this.#root = await this.#downloader.downloadSingle()
|
|
84
|
+
} else {
|
|
85
|
+
this.#isRootStored = true
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return this.#root
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
async getObject(params: { id: string }): Promise<Base> {
|
|
92
|
+
return await this.#cacheReader.getObject({ id: params.id })
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
async getTotalObjectCount(): Promise<number> {
|
|
96
|
+
const rootObj = await this.getRootObject()
|
|
97
|
+
const totalChildrenCount = Object.keys(rootObj?.base?.__closure || {}).length
|
|
98
|
+
return totalChildrenCount + 1 //count the root
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
async *getObjectIterator(): AsyncGenerator<Base> {
|
|
102
|
+
const rootItem = await this.getRootObject()
|
|
103
|
+
if (rootItem?.base === undefined) {
|
|
104
|
+
this.#logger('No root object found!')
|
|
105
|
+
return
|
|
106
|
+
}
|
|
107
|
+
if (!rootItem.base.__closure) {
|
|
108
|
+
yield rootItem.base
|
|
109
|
+
return
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
//sort the closures by their values descending
|
|
113
|
+
const sortedClosures = Object.entries(rootItem.base.__closure ?? []).sort(
|
|
114
|
+
(a, b) => b[1] - a[1]
|
|
115
|
+
)
|
|
116
|
+
this.#logger(
|
|
117
|
+
'calculated closures: ',
|
|
118
|
+
!take(sortedClosures.values(), MAX_CLOSURES_TO_TAKE).every(
|
|
119
|
+
(x) => x[1] === EXPECTED_CLOSURE_VALUE
|
|
120
|
+
)
|
|
121
|
+
)
|
|
122
|
+
const children = sortedClosures.map((x) => x[0])
|
|
123
|
+
const total = children.length + 1 // +1 for the root object
|
|
124
|
+
this.#downloader.initialize({
|
|
125
|
+
results: new AggregateQueue(this.#gathered, this.#cacheWriter),
|
|
126
|
+
total
|
|
127
|
+
})
|
|
128
|
+
//only for root
|
|
129
|
+
this.#gathered.add(rootItem)
|
|
130
|
+
this.#cacheReader.requestAll(children)
|
|
131
|
+
let count = 0
|
|
132
|
+
for await (const item of this.#gathered.consume()) {
|
|
133
|
+
yield item.base! //always defined, as we add it to the queue
|
|
134
|
+
count++
|
|
135
|
+
if (count >= total) {
|
|
136
|
+
break
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
if (!this.#isRootStored) {
|
|
140
|
+
await this.#database.putAll([rootItem])
|
|
141
|
+
this.#isRootStored = true
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
static createFromObjects(objects: Base[]): ObjectLoader2 {
|
|
146
|
+
return ObjectLoader2Factory.createFromObjects(objects)
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
static createFromJSON(json: string): ObjectLoader2 {
|
|
150
|
+
return ObjectLoader2Factory.createFromJSON(json)
|
|
151
|
+
}
|
|
152
|
+
}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/* eslint-disable camelcase */
|
|
2
|
+
import { describe, it, expect, beforeEach } from 'vitest'
|
|
3
|
+
import { ObjectLoader2Factory } from './objectLoader2Factory.js'
|
|
4
|
+
import { Base } from '../types/types.js'
|
|
5
|
+
|
|
6
|
+
describe('ObjectLoader2Factory', () => {
|
|
7
|
+
let testObjects: Base[]
|
|
8
|
+
|
|
9
|
+
beforeEach(() => {
|
|
10
|
+
testObjects = [
|
|
11
|
+
{
|
|
12
|
+
id: 'root-id',
|
|
13
|
+
synchronized_type: 'Base',
|
|
14
|
+
__closure: {
|
|
15
|
+
'child-1': 1,
|
|
16
|
+
'child-2': 2
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
id: 'child-1',
|
|
21
|
+
synchronized_type: 'Base'
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
id: 'child-2',
|
|
25
|
+
synchronized_type: 'Base'
|
|
26
|
+
}
|
|
27
|
+
]
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
describe('createFromObjects', () => {
|
|
31
|
+
it('should create ObjectLoader2 from array of objects', async () => {
|
|
32
|
+
const loader = ObjectLoader2Factory.createFromObjects(testObjects)
|
|
33
|
+
|
|
34
|
+
expect(loader).toBeDefined()
|
|
35
|
+
|
|
36
|
+
// Test that we can get the root object
|
|
37
|
+
const rootObject = await loader.getRootObject()
|
|
38
|
+
expect(rootObject?.baseId).toBe('root-id')
|
|
39
|
+
expect(rootObject?.base?.synchronized_type).toBe('Base')
|
|
40
|
+
|
|
41
|
+
await loader.disposeAsync()
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
it('should use first object as root', async () => {
|
|
45
|
+
const loader = ObjectLoader2Factory.createFromObjects(testObjects)
|
|
46
|
+
|
|
47
|
+
const rootObject = await loader.getRootObject()
|
|
48
|
+
expect(rootObject?.baseId).toBe('root-id')
|
|
49
|
+
expect(rootObject?.base?.__closure).toEqual({
|
|
50
|
+
'child-1': 1,
|
|
51
|
+
'child-2': 2
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
await loader.disposeAsync()
|
|
55
|
+
})
|
|
56
|
+
|
|
57
|
+
it('should allow iteration over all objects', async () => {
|
|
58
|
+
const loader = ObjectLoader2Factory.createFromObjects(testObjects)
|
|
59
|
+
|
|
60
|
+
const objects: Base[] = []
|
|
61
|
+
for await (const obj of loader.getObjectIterator()) {
|
|
62
|
+
objects.push(obj)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
expect(objects).toHaveLength(3)
|
|
66
|
+
expect(objects[0].id).toBe('root-id')
|
|
67
|
+
|
|
68
|
+
await loader.disposeAsync()
|
|
69
|
+
})
|
|
70
|
+
|
|
71
|
+
it('should get total object count correctly', async () => {
|
|
72
|
+
const loader = ObjectLoader2Factory.createFromObjects(testObjects)
|
|
73
|
+
|
|
74
|
+
const totalCount = await loader.getTotalObjectCount()
|
|
75
|
+
expect(totalCount).toBe(3) // root + 2 children
|
|
76
|
+
|
|
77
|
+
await loader.disposeAsync()
|
|
78
|
+
})
|
|
79
|
+
|
|
80
|
+
it('should handle empty objects array', () => {
|
|
81
|
+
expect(() => {
|
|
82
|
+
ObjectLoader2Factory.createFromObjects([])
|
|
83
|
+
}).toThrow()
|
|
84
|
+
})
|
|
85
|
+
|
|
86
|
+
it('should get individual objects by id', async () => {
|
|
87
|
+
const loader = ObjectLoader2Factory.createFromObjects(testObjects)
|
|
88
|
+
|
|
89
|
+
const rootObj = await loader.getObject({ id: 'root-id' })
|
|
90
|
+
expect(rootObj.id).toBe('root-id')
|
|
91
|
+
expect(rootObj.synchronized_type).toBe('Base')
|
|
92
|
+
|
|
93
|
+
const child1 = await loader.getObject({ id: 'child-1' })
|
|
94
|
+
expect(child1.id).toBe('child-1')
|
|
95
|
+
|
|
96
|
+
const child2 = await loader.getObject({ id: 'child-2' })
|
|
97
|
+
expect(child2.id).toBe('child-2')
|
|
98
|
+
|
|
99
|
+
await loader.disposeAsync()
|
|
100
|
+
})
|
|
101
|
+
|
|
102
|
+
it('should get individual objects by id that does not exist', async () => {
|
|
103
|
+
const loader = ObjectLoader2Factory.createFromObjects(testObjects)
|
|
104
|
+
|
|
105
|
+
const rootObj = await loader.getObject({ id: 'root-id' })
|
|
106
|
+
expect(rootObj.id).toBe('root-id')
|
|
107
|
+
expect(rootObj.synchronized_type).toBe('Base')
|
|
108
|
+
|
|
109
|
+
const getObjectPromise = loader.getObject({ id: 'child-11111' })
|
|
110
|
+
await expect(getObjectPromise).rejects.toThrow()
|
|
111
|
+
|
|
112
|
+
await loader.disposeAsync()
|
|
113
|
+
})
|
|
114
|
+
})
|
|
115
|
+
|
|
116
|
+
describe('createFromJSON', () => {
|
|
117
|
+
it('should create ObjectLoader2 from JSON string', async () => {
|
|
118
|
+
const json = JSON.stringify(testObjects)
|
|
119
|
+
const loader = ObjectLoader2Factory.createFromJSON(json)
|
|
120
|
+
|
|
121
|
+
expect(loader).toBeDefined()
|
|
122
|
+
|
|
123
|
+
const rootObject = await loader.getRootObject()
|
|
124
|
+
expect(rootObject?.baseId).toBe('root-id')
|
|
125
|
+
|
|
126
|
+
await loader.disposeAsync()
|
|
127
|
+
})
|
|
128
|
+
|
|
129
|
+
it('should handle invalid JSON', () => {
|
|
130
|
+
expect(() => {
|
|
131
|
+
ObjectLoader2Factory.createFromJSON('invalid json')
|
|
132
|
+
}).toThrow()
|
|
133
|
+
})
|
|
134
|
+
})
|
|
135
|
+
})
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { DefermentManager, MemoryOnlyDeferment } from '../deferment/defermentManager.js'
|
|
2
|
+
import {
|
|
3
|
+
CustomLogger,
|
|
4
|
+
Fetcher,
|
|
5
|
+
getFeatureFlag,
|
|
6
|
+
ObjectLoader2Flags
|
|
7
|
+
} from '../types/functions.js'
|
|
8
|
+
import { Base, ObjectAttributeMask } from '../types/types.js'
|
|
9
|
+
import { ObjectLoader2 } from './objectLoader2.js'
|
|
10
|
+
import { IndexedDatabase } from './stages/indexedDatabase.js'
|
|
11
|
+
import { MemoryDatabase } from './stages/memory/memoryDatabase.js'
|
|
12
|
+
import { MemoryDownloader } from './stages/memory/memoryDownloader.js'
|
|
13
|
+
import ServerDownloader from './stages/serverDownloader.js'
|
|
14
|
+
|
|
15
|
+
export interface ObjectLoader2FactoryOptions {
|
|
16
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
|
|
17
|
+
keyRange?: { bound: Function; lowerBound: Function; upperBound: Function }
|
|
18
|
+
indexedDB?: IDBFactory
|
|
19
|
+
fetch?: Fetcher
|
|
20
|
+
attributeMask?: ObjectAttributeMask
|
|
21
|
+
useCache?: boolean
|
|
22
|
+
debug?: boolean
|
|
23
|
+
logger?: CustomLogger
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export class ObjectLoader2Factory {
|
|
27
|
+
static createFromObjects(objects: Base[]): ObjectLoader2 {
|
|
28
|
+
const root = objects[0]
|
|
29
|
+
const records: Map<string, Base> = new Map<string, Base>()
|
|
30
|
+
objects.forEach((element) => {
|
|
31
|
+
records.set(element.id, element)
|
|
32
|
+
})
|
|
33
|
+
const loader = new ObjectLoader2({
|
|
34
|
+
rootId: root.id,
|
|
35
|
+
deferments: new MemoryOnlyDeferment(records),
|
|
36
|
+
database: new MemoryDatabase({ items: records }),
|
|
37
|
+
downloader: new MemoryDownloader(root.id, records)
|
|
38
|
+
})
|
|
39
|
+
return loader
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
static createFromJSON(json: string): ObjectLoader2 {
|
|
43
|
+
const jsonObj = JSON.parse(json) as Base[]
|
|
44
|
+
return this.createFromObjects(jsonObj)
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
static createFromUrl(params: {
|
|
48
|
+
serverUrl: string
|
|
49
|
+
streamId: string
|
|
50
|
+
objectId: string
|
|
51
|
+
token?: string
|
|
52
|
+
headers?: Headers
|
|
53
|
+
options?: ObjectLoader2FactoryOptions
|
|
54
|
+
attributeMask?: ObjectAttributeMask
|
|
55
|
+
objectTypeMask?: string[]
|
|
56
|
+
}): ObjectLoader2 {
|
|
57
|
+
const log = ObjectLoader2Factory.getLogger(params.options?.logger)
|
|
58
|
+
let database
|
|
59
|
+
if (
|
|
60
|
+
params.options?.debug === true ||
|
|
61
|
+
getFeatureFlag(ObjectLoader2Flags.DEBUG) === 'true'
|
|
62
|
+
) {
|
|
63
|
+
this.logger('Using DEBUG mode for ObjectLoader2Factory')
|
|
64
|
+
}
|
|
65
|
+
const useCache = params.options?.useCache ?? true
|
|
66
|
+
const flag = getFeatureFlag(ObjectLoader2Flags.USE_CACHE)
|
|
67
|
+
const flagAllowsCache = flag !== 'false'
|
|
68
|
+
|
|
69
|
+
if (useCache && flagAllowsCache) {
|
|
70
|
+
database = new IndexedDatabase({
|
|
71
|
+
indexedDB: params.options?.indexedDB,
|
|
72
|
+
keyRange: params.options?.keyRange
|
|
73
|
+
})
|
|
74
|
+
} else {
|
|
75
|
+
database = new MemoryDatabase({
|
|
76
|
+
items: new Map<string, Base>()
|
|
77
|
+
})
|
|
78
|
+
this.logger(
|
|
79
|
+
'Disabled persistent caching for ObjectLoader2. Using MemoryDatabase'
|
|
80
|
+
)
|
|
81
|
+
}
|
|
82
|
+
const logger = log || (((): void => {}) as CustomLogger)
|
|
83
|
+
const loader = new ObjectLoader2({
|
|
84
|
+
rootId: params.objectId,
|
|
85
|
+
deferments: new DefermentManager(logger),
|
|
86
|
+
downloader: new ServerDownloader({
|
|
87
|
+
serverUrl: params.serverUrl,
|
|
88
|
+
streamId: params.streamId,
|
|
89
|
+
objectId: params.objectId,
|
|
90
|
+
token: params.token,
|
|
91
|
+
headers: params.headers,
|
|
92
|
+
fetch: params.options?.fetch,
|
|
93
|
+
attributeMask: params.attributeMask,
|
|
94
|
+
objectTypeMask: params.objectTypeMask,
|
|
95
|
+
logger
|
|
96
|
+
}),
|
|
97
|
+
database,
|
|
98
|
+
logger
|
|
99
|
+
})
|
|
100
|
+
return loader
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
static getLogger(providedLogger?: CustomLogger): CustomLogger | undefined {
|
|
104
|
+
if (getFeatureFlag(ObjectLoader2Flags.DEBUG) === 'true') {
|
|
105
|
+
return providedLogger || this.logger
|
|
106
|
+
}
|
|
107
|
+
return providedLogger
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
static logger: CustomLogger = (m?: string, ...optionalParams: unknown[]) => {
|
|
111
|
+
console.log(`[debug] ${m}`, ...optionalParams)
|
|
112
|
+
}
|
|
113
|
+
}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Deferment } from '../deferment/defermentManager.js'
|
|
2
|
+
import { CustomLogger } from '../types/functions.js'
|
|
3
|
+
import { Base } from '../types/types.js'
|
|
2
4
|
import { Downloader, Database } from './interfaces.js'
|
|
3
5
|
|
|
4
6
|
export interface ObjectLoader2Options {
|
|
5
7
|
rootId: string
|
|
8
|
+
deferments: Deferment
|
|
6
9
|
downloader: Downloader
|
|
7
10
|
database: Database
|
|
8
11
|
logger?: CustomLogger
|
|
@@ -3,16 +3,16 @@
|
|
|
3
3
|
exports[`IndexedDatabase > should add and get multiple items 1`] = `
|
|
4
4
|
[
|
|
5
5
|
{
|
|
6
|
-
"
|
|
7
|
-
"item": {
|
|
6
|
+
"base": {
|
|
8
7
|
"foo": "bar",
|
|
9
8
|
},
|
|
9
|
+
"baseId": "id1",
|
|
10
10
|
},
|
|
11
11
|
{
|
|
12
|
-
"
|
|
13
|
-
"item": {
|
|
12
|
+
"base": {
|
|
14
13
|
"foo": "bar",
|
|
15
14
|
},
|
|
15
|
+
"baseId": "id2",
|
|
16
16
|
},
|
|
17
17
|
]
|
|
18
18
|
`;
|
package/src/{operations/downloaders → core/stages}/__snapshots__/serverDownloader.spec.ts.snap
RENAMED
|
@@ -56,6 +56,31 @@ exports[`downloader > download batch of three 1`] = `
|
|
|
56
56
|
]
|
|
57
57
|
`;
|
|
58
58
|
|
|
59
|
+
exports[`downloader > download batch of three with Objects.Other.RawEncoding 1`] = `
|
|
60
|
+
[
|
|
61
|
+
{
|
|
62
|
+
"base": {
|
|
63
|
+
"id": "id1",
|
|
64
|
+
"synchronized_type": "type",
|
|
65
|
+
},
|
|
66
|
+
"baseId": "id1",
|
|
67
|
+
"size": 34,
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"base": undefined,
|
|
71
|
+
"baseId": "id2",
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"base": {
|
|
75
|
+
"id": "id3",
|
|
76
|
+
"synchronized_type": "type",
|
|
77
|
+
},
|
|
78
|
+
"baseId": "id3",
|
|
79
|
+
"size": 34,
|
|
80
|
+
},
|
|
81
|
+
]
|
|
82
|
+
`;
|
|
83
|
+
|
|
59
84
|
exports[`downloader > download batch of two 1`] = `
|
|
60
85
|
[
|
|
61
86
|
{
|
|
@@ -1,19 +1,22 @@
|
|
|
1
|
-
import { describe,
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { describe, test, expect } from 'vitest'
|
|
2
|
+
import { DefermentManager } from '../../deferment/defermentManager.js'
|
|
3
|
+
import { Item, Base } from '../../types/types.js'
|
|
4
4
|
import { CacheReader } from './cacheReader.js'
|
|
5
|
-
import { MemoryDatabase } from '
|
|
5
|
+
import { MemoryDatabase } from './memory/memoryDatabase.js'
|
|
6
|
+
import { MemoryCache } from '../../deferment/MemoryCache.js'
|
|
6
7
|
|
|
7
8
|
describe('CacheReader testing', () => {
|
|
8
9
|
test('deferred getObject', async () => {
|
|
9
10
|
const i1: Item = { baseId: 'id1', base: { id: 'id', synchronized_type: 'type' } }
|
|
10
11
|
|
|
11
|
-
const
|
|
12
|
+
const cache = new MemoryCache({ maxSizeInMb: 1, ttlms: 1 }, () => {})
|
|
13
|
+
const deferments = new DefermentManager(() => {}, cache)
|
|
12
14
|
const cacheReader = new CacheReader(
|
|
13
15
|
new MemoryDatabase({
|
|
14
|
-
items: new Map<string, Base>([[i1.baseId, i1.base]])
|
|
16
|
+
items: new Map<string, Base>([[i1.baseId, i1.base!]])
|
|
15
17
|
}),
|
|
16
18
|
deferments,
|
|
19
|
+
() => {},
|
|
17
20
|
{
|
|
18
21
|
maxCacheReadSize: 1,
|
|
19
22
|
maxCacheWriteSize: 1,
|
|
@@ -26,7 +29,9 @@ describe('CacheReader testing', () => {
|
|
|
26
29
|
const objPromise = cacheReader.getObject({
|
|
27
30
|
id: i1.baseId
|
|
28
31
|
})
|
|
29
|
-
deferments.undefer(i1)
|
|
32
|
+
deferments.undefer(i1, (id: string) => {
|
|
33
|
+
throw new Error(`Requesting item ${id} not implemented`)
|
|
34
|
+
})
|
|
30
35
|
const base = await objPromise
|
|
31
36
|
|
|
32
37
|
expect(base).toMatchSnapshot()
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { Deferment } from '../../deferment/defermentManager.js'
|
|
2
|
+
import BatchingQueue from '../../queues/batchingQueue.js'
|
|
3
|
+
import Queue from '../../queues/queue.js'
|
|
4
|
+
import { CustomLogger } from '../../types/functions.js'
|
|
5
|
+
import { Item, Base } from '../../types/types.js'
|
|
6
|
+
import { Database } from '../interfaces.js'
|
|
7
|
+
import { CacheOptions } from '../options.js'
|
|
8
|
+
|
|
9
|
+
export class CacheReader {
|
|
10
|
+
#database: Database
|
|
11
|
+
#defermentManager: Deferment
|
|
12
|
+
#logger: CustomLogger
|
|
13
|
+
#options: CacheOptions
|
|
14
|
+
#readQueue: BatchingQueue<string> | undefined
|
|
15
|
+
#foundQueue: Queue<Item> | undefined
|
|
16
|
+
#notFoundQueue: Queue<string> | undefined
|
|
17
|
+
|
|
18
|
+
constructor(
|
|
19
|
+
database: Database,
|
|
20
|
+
defermentManager: Deferment,
|
|
21
|
+
logger: CustomLogger,
|
|
22
|
+
options: CacheOptions
|
|
23
|
+
) {
|
|
24
|
+
this.#database = database
|
|
25
|
+
this.#defermentManager = defermentManager
|
|
26
|
+
this.#logger = logger
|
|
27
|
+
this.#options = options
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
initializeQueue(foundQueue: Queue<Item>, notFoundQueue: Queue<string>): void {
|
|
31
|
+
this.#foundQueue = foundQueue
|
|
32
|
+
this.#notFoundQueue = notFoundQueue
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
getObject(params: { id: string }): Promise<Base> {
|
|
36
|
+
const [p, b] = this.#defermentManager.defer({ id: params.id })
|
|
37
|
+
if (!b) {
|
|
38
|
+
this.requestItem(params.id)
|
|
39
|
+
}
|
|
40
|
+
return p
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
#createReadQueue(): void {
|
|
44
|
+
if (!this.#readQueue) {
|
|
45
|
+
this.#readQueue = new BatchingQueue({
|
|
46
|
+
batchSize: this.#options.maxCacheReadSize,
|
|
47
|
+
maxWaitTime: this.#options.maxCacheBatchReadWait,
|
|
48
|
+
processFunction: this.#processBatch
|
|
49
|
+
})
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
requestItem(id: string): void {
|
|
54
|
+
this.#createReadQueue()
|
|
55
|
+
if (!this.#readQueue?.get(id)) {
|
|
56
|
+
this.#readQueue?.add(id, id)
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
requestAll(keys: string[]): void {
|
|
61
|
+
this.#createReadQueue()
|
|
62
|
+
|
|
63
|
+
this.#readQueue?.addAll(keys, keys)
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
#processBatch = async (batch: string[]): Promise<void> => {
|
|
67
|
+
const start = performance.now()
|
|
68
|
+
const items = await this.#database.getAll(batch)
|
|
69
|
+
for (let i = 0; i < items.length; i++) {
|
|
70
|
+
const item = items[i]
|
|
71
|
+
if (item) {
|
|
72
|
+
this.#foundQueue?.add(item)
|
|
73
|
+
this.#defermentManager.undefer(item, (id) => this.requestItem(id))
|
|
74
|
+
} else {
|
|
75
|
+
this.#notFoundQueue?.add(batch[i])
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
this.#logger(
|
|
79
|
+
`readBatch: batch ${batch.length}, time ${
|
|
80
|
+
performance.now() - start
|
|
81
|
+
} ms left ${this.#readQueue?.count()}`
|
|
82
|
+
)
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
disposeAsync(): Promise<void> {
|
|
86
|
+
return this.#readQueue?.disposeAsync() || Promise.resolve()
|
|
87
|
+
}
|
|
88
|
+
}
|