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