@speckle/objectloader2
Version:
This is an updated objectloader for the Speckle viewer written in typescript
58 lines • 1.9 kB
JavaScript
"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