All BatchedQueues should drain when disposed (also adds query string for output: "debug=true") (#5098)
* ensure disposal is correct * add tests for disposal of batching queue * fixes for draining disposal * Update packages/objectloader2/src/queues/batchingQueue.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * fix comment * fix tests and build * add query string inspection of debug parameter * Update packages/objectloader2/src/queues/batchingQueue.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update packages/objectloader2/src/core/objectLoader2Factory.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * fix test * fix AI * export getQueryParameter to avoid dup code. Sandbox uses it too * add tests for functions * prettier fix --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -65,11 +65,10 @@ export class ObjectLoader2 {
|
||||
await Promise.all([
|
||||
this.#gathered.disposeAsync(),
|
||||
this.#downloader.disposeAsync(),
|
||||
this.#cacheWriter.disposeAsync()
|
||||
this.#cacheWriter.disposeAsync(),
|
||||
this.#cacheReader.disposeAsync()
|
||||
])
|
||||
this.#deferments.dispose()
|
||||
this.#cacheReader.dispose()
|
||||
this.#cache.dispose()
|
||||
}
|
||||
|
||||
async getRootObject(): Promise<Item | undefined> {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { CustomLogger } from '../types/functions.js'
|
||||
import { CustomLogger, getQueryParameter } from '../types/functions.js'
|
||||
import { Base } from '../types/types.js'
|
||||
import { ObjectLoader2 } from './objectLoader2.js'
|
||||
import IndexedDatabase from './stages/indexedDatabase.js'
|
||||
@@ -11,7 +11,7 @@ export interface ObjectLoader2FactoryOptions {
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
|
||||
keyRange?: { bound: Function; lowerBound: Function; upperBound: Function }
|
||||
indexedDB?: IDBFactory
|
||||
logger?: CustomLogger
|
||||
logger2?: CustomLogger
|
||||
}
|
||||
|
||||
export class ObjectLoader2Factory {
|
||||
@@ -42,6 +42,7 @@ export class ObjectLoader2Factory {
|
||||
headers?: Headers
|
||||
options?: ObjectLoader2FactoryOptions
|
||||
}): ObjectLoader2 {
|
||||
const log = ObjectLoader2Factory.getLogger(params.options?.logger2)
|
||||
let loader: ObjectLoader2
|
||||
if (params.options?.useMemoryCache) {
|
||||
loader = new ObjectLoader2({
|
||||
@@ -56,7 +57,7 @@ export class ObjectLoader2Factory {
|
||||
database: new MemoryDatabase({
|
||||
items: new Map<string, Base>()
|
||||
}),
|
||||
logger: params.options.logger
|
||||
logger: log
|
||||
})
|
||||
} else {
|
||||
loader = new ObjectLoader2({
|
||||
@@ -69,13 +70,24 @@ export class ObjectLoader2Factory {
|
||||
headers: params.headers
|
||||
}),
|
||||
database: new IndexedDatabase({
|
||||
logger: params.options?.logger,
|
||||
logger: log,
|
||||
indexedDB: params.options?.indexedDB,
|
||||
keyRange: params.options?.keyRange
|
||||
}),
|
||||
logger: params.options?.logger
|
||||
logger: log
|
||||
})
|
||||
}
|
||||
return loader
|
||||
}
|
||||
|
||||
static getLogger(providedLogger?: CustomLogger): CustomLogger | undefined {
|
||||
if (getQueryParameter('debug', 'false') === 'true') {
|
||||
return providedLogger || this.logger
|
||||
}
|
||||
return providedLogger
|
||||
}
|
||||
|
||||
static logger: CustomLogger = (m?: string, ...optionalParams: unknown[]) => {
|
||||
console.log(`[debug] ${m}`, ...optionalParams)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,6 +30,6 @@ describe('CacheReader testing', () => {
|
||||
const base = await objPromise
|
||||
|
||||
expect(base).toMatchSnapshot()
|
||||
cacheReader.dispose()
|
||||
await cacheReader.disposeAsync()
|
||||
})
|
||||
})
|
||||
|
||||
@@ -77,7 +77,7 @@ export class CacheReader {
|
||||
this.#logger('readBatch: left, time', items.length, performance.now() - start)
|
||||
}
|
||||
|
||||
dispose(): void {
|
||||
this.#readQueue?.dispose()
|
||||
disposeAsync(): Promise<void> {
|
||||
return this.#readQueue?.disposeAsync() || Promise.resolve()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,9 +38,8 @@ export class CacheWriter implements Queue<Item> {
|
||||
}
|
||||
|
||||
async disposeAsync(): Promise<void> {
|
||||
this.#writeQueue?.dispose()
|
||||
this.#disposed = true
|
||||
return Promise.resolve()
|
||||
await this.#writeQueue?.disposeAsync()
|
||||
}
|
||||
|
||||
get isDisposed(): boolean {
|
||||
|
||||
@@ -121,8 +121,7 @@ export default class IndexedDatabase implements Database {
|
||||
async disposeAsync(): Promise<void> {
|
||||
this.#cacheDB?.close()
|
||||
this.#cacheDB = undefined
|
||||
this.#writeQueue?.dispose()
|
||||
await this.#writeQueue?.disposeAsync()
|
||||
this.#writeQueue = undefined
|
||||
return Promise.resolve()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user