UNPKG

@speckle/objectloader2

Version:

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

79 lines 3.16 kB
import { DefermentManager, MemoryOnlyDeferment } from '../deferment/defermentManager.js'; import { getFeatureFlag, ObjectLoader2Flags } from '../types/functions.js'; import { ObjectLoader2 } from './objectLoader2.js'; import { IndexedDatabase } from './stages/indexedDatabase.js'; import { MemoryDatabase } from './stages/memory/memoryDatabase.js'; import { MemoryDownloader } from './stages/memory/memoryDownloader.js'; import ServerDownloader from './stages/serverDownloader.js'; export class ObjectLoader2Factory { static createFromObjects(objects) { const root = objects[0]; const records = new Map(); objects.forEach((element) => { records.set(element.id, element); }); const loader = new ObjectLoader2({ rootId: root.id, deferments: new MemoryOnlyDeferment(records), database: new MemoryDatabase({ items: records }), downloader: new MemoryDownloader(root.id, records) }); return loader; } static createFromJSON(json) { const jsonObj = JSON.parse(json); return this.createFromObjects(jsonObj); } static createFromUrl(params) { const log = ObjectLoader2Factory.getLogger(params.options?.logger); let database; if (params.options?.debug === true || getFeatureFlag(ObjectLoader2Flags.DEBUG) === 'true') { this.logger('Using DEBUG mode for ObjectLoader2Factory'); } const useCache = params.options?.useCache ?? true; const flag = getFeatureFlag(ObjectLoader2Flags.USE_CACHE); const flagAllowsCache = flag !== 'false'; if (useCache && flagAllowsCache) { database = new IndexedDatabase({ indexedDB: params.options?.indexedDB, keyRange: params.options?.keyRange }); } else { database = new MemoryDatabase({ items: new Map() }); this.logger('Disabled persistent caching for ObjectLoader2. Using MemoryDatabase'); } const logger = log || (() => { }); const loader = new ObjectLoader2({ rootId: params.objectId, deferments: new DefermentManager(logger), downloader: new ServerDownloader({ serverUrl: params.serverUrl, streamId: params.streamId, objectId: params.objectId, token: params.token, headers: params.headers, fetch: params.options?.fetch, attributeMask: params.attributeMask, objectTypeMask: params.objectTypeMask, logger }), database, logger }); return loader; } static getLogger(providedLogger) { if (getFeatureFlag(ObjectLoader2Flags.DEBUG) === 'true') { return providedLogger || this.logger; } return providedLogger; } static logger = (m, ...optionalParams) => { console.log(`[debug] ${m}`, ...optionalParams); }; } //# sourceMappingURL=objectLoader2Factory.js.map