@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
3 lines (2 loc) • 2.53 kB
JavaScript
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.8/LICENSE.txt */
import t from"../../../request.js";import{equals as s}from"../../../core/arrayUtils.js";import{throwIfAborted as e}from"../../../core/promiseUtils.js";import{getFileFormatId as r,getMimeTypeOrFilenameFormatId as a}from"../../../layers/support/infoFor3D.js";class i{constructor(t,s,e){this.assetName=t,this.assetMimeType=s,this.parts=e}equals(t){return this===t||this.assetName===t.assetName&&this.assetMimeType===t.assetMimeType&&s(this.parts,t.parts,(t,s)=>t.equals(s))}isOnService(t){return this.parts.every(s=>s.isOnService(t))}makeHash(){let t="";for(const s of this.parts)t+=s.partHash;return t}async toBlob(t){const{parts:s}=this;if(1===s.length)return s[0].toBlob(t);const r=await Promise.all(s.map(s=>s.toBlob(t)));return e(t),new Blob(r)}}class n{constructor(t,s){this.partUrl=t,this.partHash=s}equals(t){return this===t||this.partUrl===t.partUrl&&this.partHash===t.partHash}isOnService(t){return this.partUrl.startsWith(`${t.path}/assets/`)}async toBlob(s){const{data:r}=await t(this.partUrl,{responseType:"blob"});return e(s),r}}function o(t){return l(t?.source)}const c=/^(model\/gltf\+json)|(model\/gltf-binary)$/,u=/\.(gltf|glb)/i;function l(t){switch(t?.type){case"client":return Array.isArray(t.files)?t.files.some(p):p(t.files);case"service":return t.assets.some(p);case"loadable":return!0;default:return!1}}function p(t){if(t instanceof File){const{type:s,name:e}=t;return c.test(s)||u.test(e)}return c.test(t.assetMimeType)||u.test(t.assetName)}function f(t,s){if(!t)return!1;const{source:e}=t;return h(e,s)}function m(t,s){if(t===s)return!0;const{source:e}=t,{source:r}=s;if(e===r)return!0;if("service"===e.type&&"service"===r.type){if(e.assets.length!==r.assets.length)return!1;const t=(t,s)=>t.assetName<s.assetName?-1:t.assetName>s.assetName?1:0,s=[...e.assets].sort(t),a=[...r.assets].sort(t);for(let e=0;e<s.length;++e)if(!s[e].equals(a[e]))return!1;return!0}return!1}function h(t,s){return"service"===t.type&&t.assets.every(t=>t.isOnService(s))}function y(t,s){return t instanceof File?r(t,s):a(t.assetMimeType,t.assetName,s)}function b(t){switch(t.type){case"client":return Array.isArray(t.files)?t.files:[t.files];case"service":return t.assets;case"loadable":return}}function v(t){return!!t.original}export{i as ServiceAsset,n as ServiceAssetPart,y as assetFormatId,f as externalIsOnService,b as externalSourceToMultiPart,m as externalSourcesAreEqual,p as isDisplayAsset,o as isDisplayExternal,l as isDisplaySource,v as isOriginalExternal};