UNPKG

@arcgis/core

Version:

ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API

3 lines (2 loc) 2.1 kB
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.19/LICENSE.txt */ import{createTask as t}from"../../../core/asyncUtils.js";import r from"../../../core/Error.js";import{LRUCache as e}from"../../../core/LRUCache.js";import{abortMaybe as i}from"../../../core/maybe.js";import{createPanoramicMedia as o,createNonPanoramicMedia as a}from"../utils.js";import s from"./resolveMediaProps.js";class n{constructor(t){this._cache=new e(t?.maxEntries??20,t=>t?.destroy&&t.destroy()),this._inFlight=new Map}destroy(){this._cache.destroy(),this._inFlight.forEach(t=>t?.abort&&t.abort()),this._inFlight.clear()}enqueueDirectionalPrefetch(t,r,e=5){if(!r)return;const i=["towards","right","backwards","left"];for(const o of i){const i=c(r,o,e);for(const r of i)this.startPrefetchForNode(r,t)}}enqueueSequentialPrefetch(t,r,e=5){if(!r)return;let i=r.next,o=r.previous;for(let a=0;a<e;a++)i&&(this.startPrefetchForNode(i,t),i=i.next),o&&(this.startPrefetchForNode(o,t),o=o.previous)}clear(){this._cache.clear(),this._inFlight.forEach(i),this._inFlight.clear()}getCachedMedia(t){return this._cache.get(`${t}`)}async startPrefetchForNode(e,i){const n=e.id;if(!n)return;const c=`${n}`;if(this._cache.get(c))return;const h=this._inFlight.get(c);if(h){try{await h.promise}catch(f){}return}const l=t(async t=>{const n=await s(e.attributes,i,{signal:t}).catch(()=>null);if(!n||n.getDataSetFormatError)throw new r("NoMediaPropsError","Could not resolve media properties for prefetching");const{mediaUrl:h,datasetFormat:l,rotation:u,searchParams:m,mode:d,cameraHeading:g,matrix:p}=n;let F=null;F="panoramic"===d||360===e.attributes.horizontalFieldOfView?o({url:h,extension:l,matrix:p,cameraHeading:g}):a({url:h,rotation:u,customParameters:m,datasetFormat:l});try{await F.load({signal:t}),this._cache.put(c,F)}catch(f){F.destroy(),F=null}return F});this._inFlight.set(c,l);try{await l.promise}finally{this._inFlight.delete(c)}}}function c(t,e,i=5){if(!t)throw new r("MissingArgumentError"," start node is required");const o=[];let a=t,s=0;for(;a&&s<i;){const t=a[e];if(!t)break;o.push(t),a=t,s+=1}return o}export{n as default};