requestUtils.js 1.8 KB

12345
  1. /*
  2. All material copyright ESRI, All Rights Reserved, unless otherwise specified.
  3. See https://js.arcgis.com/4.25/esri/copyright.txt for details.
  4. */
  5. import r from"../config.js";import has from"../core/has.js";import{isSome as e}from"../core/maybe.js";import{isAborted as o}from"../core/promiseUtils.js";import{getOrigin as t,hasSameOrigin as n,getAppUrl as s,urlToObject as i}from"../core/urlUtils.js";function c(r,t,n=!1,s){return new Promise(((i,c)=>{if(o(s))return void c(a());let m=()=>{f(),c(new Error(`Unable to load ${t}`))},u=()=>{const e=r;f(),i(e)},d=()=>{if(!r)return;const e=r;f(),e.src="",c(a())};const f=()=>{has("esri-image-decode")||(r.removeEventListener("error",m),r.removeEventListener("load",u)),m=null,u=null,r=null,e(s)&&s.removeEventListener("abort",d),d=null,n&&URL.revokeObjectURL(t)};e(s)&&s.addEventListener("abort",d),has("esri-image-decode")?r.decode().then(u,m):(r.addEventListener("error",m),r.addEventListener("load",u))}))}function a(){try{return new DOMException("Aborted","AbortError")}catch{const r=new Error;return r.name="AbortError",r}}function m(e){r.request.crossOriginNoCorsDomains||(r.request.crossOriginNoCorsDomains={});const o=r.request.crossOriginNoCorsDomains;for(let r of e)r=r.toLowerCase(),/^https?:\/\//.test(r)?o[t(r)??""]=0:(o[t("http://"+r)??""]=0,o[t("https://"+r)??""]=0)}function u(e){const o=r.request.crossOriginNoCorsDomains;if(o){let r=t(e);if(r)return r=r.toLowerCase(),!n(r,s())&&o[r]<Date.now()-36e5}return!1}async function d(e){const o=r.request.crossOriginNoCorsDomains,n=t(e);o&&n&&(o[n.toLowerCase()]=Date.now());const s=i(e);e=s.path,"json"===s.query?.f&&(e+="?f=json");try{await fetch(e,{mode:"no-cors",credentials:"include"})}catch{}}export{u as isNoCorsRequestRequired,c as loadImageAsync,m as registerNoCorsDomains,d as sendNoCorsRequest};