UNPKG

@arcgis/core

Version:

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

6 lines (5 loc) 2.47 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.33/esri/copyright.txt for details. */ import r from"../config.js";import has from"../core/has.js";import{isAborted as e}from"../core/promiseUtils.js";import{getOrigin as o,hasSameOrigin as t,changeHost as n,getAppUrl as s,urlToObject as i}from"../core/urlUtils.js";import{parse as c}from"../layers/support/arcgisLayerUrl.js";import{isSecureProxyService as a}from"../portal/support/urlUtils.js";function u(r,o,t=!1,n){return new Promise(((s,i)=>{if(e(n))return void i(l());let c=()=>{f(),i(new Error(`Unable to load ${o}`))},a=()=>{const e=r;f(),s(e)},u=()=>{if(!r)return;const e=r;f(),e.src="",i(l())};const f=()=>{has("esri-image-decode")||(r.removeEventListener("error",c),r.removeEventListener("load",a)),c=null,a=null,r=null,null!=n&&n.removeEventListener("abort",u),u=null,t&&URL.revokeObjectURL(o)};null!=n&&n.addEventListener("abort",u),has("esri-image-decode")?r.decode().then(a,c):(r.addEventListener("error",c),r.addEventListener("load",a))}))}function l(){try{return new DOMException("Aborted","AbortError")}catch{const r=new Error;return r.name="AbortError",r}}const f="Timeout exceeded";function m(){return new Error(f)}function p(r){return"object"==typeof r&&!!r&&"message"in r&&r.message===f}function d(e){r.request.crossOriginNoCorsDomains||(r.request.crossOriginNoCorsDomains={});const t=r.request.crossOriginNoCorsDomains;for(let r of e)r=r.toLowerCase(),/^https?:\/\//.test(r)?t[o(r)??""]=0:(t[o("http://"+r)??""]=0,t[o("https://"+r)??""]=0)}function w(e){const n=r.request.crossOriginNoCorsDomains;if(n){let r=o(e);if(r)return r=r.toLowerCase(),!t(r,s())&&n[r]<Date.now()-36e5}return!1}async function L(e){const t=i(e);e=t.path,"json"===t.query?.f&&(e+="?f=json");try{await fetch(e,{mode:"no-cors",credentials:"include"})}catch{}const n=r.request.crossOriginNoCorsDomains,s=o(e);n&&s&&(n[s.toLowerCase()]=Date.now())}const h=new Map;function v(r,e){const o=e?.preferredHost;if(!o||t(r,`https://${o}`,!0))return;const n=c(r);if(!n||"FeatureServer"!==n.serverType||a(r))return;const s=n.url.path.toLowerCase();h.has(s)||h.set(s,o)}function g(r){const e=c(r)?.url.path.toLowerCase();if(!e)return r;const o=h.get(e);return o?n(r,o):r}export{m as createTimeoutError,g as getPreferredUrl,w as isNoCorsRequestRequired,p as isTimeoutError,u as loadImageAsync,h as preferredHosts,d as registerNoCorsDomains,L as sendNoCorsRequest,v as setPreferredHost};