/* COPYRIGHT Esri - https://js.arcgis.com/5.1.2/LICENSE.txt */
import r from"../../../core/Error.js";import e from"./CovJSONRaster.js";import t from"./ImageAuxRaster.js";import s from"./ImageServerRaster.js";import o from"./InMemoryRaster.js";import a from"./MRFRaster.js";import n from"./TIFFRaster.js";const c=new Map;c.set("MRF",{desc:"Meta Raster Format",constructor:a}),c.set("TIFF",{desc:"GeoTIFF",constructor:n}),c.set("RasterTileServer",{desc:"Raster Tile Server",constructor:s}),c.set("JPG",{desc:"JPG Raster Format",constructor:t}),c.set("PNG",{desc:"PNG Raster Format",constructor:t}),c.set("GIF",{desc:"GIF Raster Format",constructor:t}),c.set("BMP",{desc:"BMP Raster Format",constructor:t}),c.set("CovJSON",{desc:"COVJSON Raster Format",constructor:e}),c.set("MEMORY",{desc:"In Memory Raster Format",constructor:o});class l{static get supportedFormats(){const r=new Set;return c.forEach((e,t)=>r.add(t)),r}static async open(e){const{url:t,ioConfig:s,source:o,sourceJSON:a}=e;let n=e.datasetFormat??s?.datasetFormat;null==n&&(t.includes(".")?n=t.slice(t.lastIndexOf(".")+1).toUpperCase():"coverage"===o?.type?.toLowerCase()?n="CovJSON":o?.extent&&o.pixelblocks&&(n="MEMORY")),"OVR"===n||"TIF"===n?n="TIFF":"JPG"===n||"JPEG"===n||"JFIF"===n?n="JPG":"COVJSON"===n&&(n="CovJSON"),t.toLowerCase().includes("/imageserver")&&!t.toLowerCase().includes("/wcsserver")&&(n="RasterTileServer");const l={url:t,source:o,sourceJSON:a,datasetFormat:n,ioConfig:s??{bandIds:null,sampling:null}};if(Object.keys(l).forEach(r=>{null==l[r]&&delete l[r]}),n){if(!this.supportedFormats.has(n))throw new r("rasterfactory:open","not a supported format "+n);if("CRF"===n)throw new r("rasterfactory:open",`cannot open raster: ${t}`);const s=new(0,c.get(n).constructor)(l);return s.rasterJobHandler=e.rasterJobHandler,await s.open({signal:e.signal}),s}const u=Array.from(c.keys()).filter(r=>"CovJSON"!==r&&"Memory"!==r);let i=0;const m=()=>{if(n=u[i++],!n)return null;if("CRF"===n)return null;const r=new(0,c.get(n).constructor)(l);return r.rasterJobHandler=e.rasterJobHandler,r.open({signal:e.signal}).then(()=>r).catch(()=>m())};return m()}static register(r,e,t){c.has(r.toUpperCase())||c.set(r.toUpperCase(),{desc:e,constructor:t})}}export{l as default};
