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:
Adam Hathcock
2025-07-21 12:01:27 +01:00
committed by GitHub
parent 8b73e63bc2
commit 477db6ef02
14 changed files with 412 additions and 113 deletions
@@ -3,7 +3,11 @@ import { Loader, LoaderEvent } from '../Loader.js'
import { SpeckleGeometryConverter } from './SpeckleGeometryConverter.js'
import { WorldTree, type SpeckleObject } from '../../../index.js'
import Logger from '../../utils/Logger.js'
import { ObjectLoader2, ObjectLoader2Factory } from '@speckle/objectloader2'
import {
getQueryParameter,
ObjectLoader2,
ObjectLoader2Factory
} from '@speckle/objectloader2'
import { TIME_MS } from '@speckle/shared'
export class SpeckleLoader extends Loader {
@@ -99,6 +103,7 @@ export class SpeckleLoader extends Loader {
const total = await this.loader.getTotalObjectCount()
let traversals = 0
let firstObjectPromise = null
this.progressListen()
Logger.warn('Downloading object ', this.resource)
@@ -186,6 +191,31 @@ export class SpeckleLoader extends Loader {
return p
}
private progressListen(): void {
if (getQueryParameter('debug', 'false') !== 'true') {
return
}
let dataProgress = 0
this.on(LoaderEvent.LoadProgress, (data) => {
const p = Math.floor(data.progress * 100)
if (p > dataProgress) {
Logger.log(`[debug] Loading ${p}%`)
dataProgress = p
}
})
this.on(LoaderEvent.Traversed, (data) => {
if (data.count % 500 === 0) {
Logger.log(`[debug] Traversed ${data.count}`)
}
})
this.on(LoaderEvent.Converted, (data) => {
if (data.count % 500 === 0) {
Logger.log(`[debug] Converted ${data.count}`)
}
})
}
cancel() {
this.isCancelled = true
this.isFinished = false