UNPKG

@speckle/objectloader2

Version:

This is an updated objectloader for the Speckle viewer written in typescript

58 lines 1.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DefermentManager = void 0; const deferredBase_js_1 = require("./deferredBase.js"); class DefermentManager { outstanding = new Map(); logger; disposed = false; cache; constructor(cache, logger) { this.cache = cache; this.logger = logger; } defer(params) { if (this.disposed) throw new Error('DefermentManager is disposed'); const item = this.cache.get(params.id); if (item) { return [Promise.resolve(item.base), true]; } const deferredBase = this.outstanding.get(params.id); if (deferredBase) { return [deferredBase.getPromise(), true]; } const notYetFound = new deferredBase_js_1.DeferredBase(params.id); this.outstanding.set(params.id, notYetFound); return [notYetFound.getPromise(), false]; } undefer(item, requestItem) { if (this.disposed) throw new Error('DefermentManager is disposed'); const base = item.base; if (!base) { this.logger('undefer called with no base', item); return; } this.cache.add(item, (id) => { if (!this.outstanding.has(id)) { requestItem(id); } }); //order matters here with found before undefer const deferredBase = this.outstanding.get(item.baseId); if (deferredBase) { deferredBase.found(base); this.outstanding.delete(item.baseId); } } dispose() { if (this.disposed) return; this.disposed = true; this.logger('cleared deferments, left', this.outstanding.size); this.outstanding.clear(); } } exports.DefermentManager = DefermentManager; //# sourceMappingURL=defermentManager.js.map