@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
3 lines (2 loc) • 5.29 kB
JavaScript
/* COPYRIGHT Esri - https://js.arcgis.com/5.0.19/LICENSE.txt */
import{__decorate as e}from"tslib";import t from"../../request.js";import{some as r}from"../../core/iteratorUtils.js";import{getOrCreateMapValue as s}from"../../core/MapUtils.js";import{throwIfAborted as i}from"../../core/promiseUtils.js";import{join as o}from"../../core/urlUtils.js";import a from"../../core/Version.js";import{property as l,subclass as p}from"../../core/accessorSupport/decorators.js";import n from"../../geometry/Extent.js";import u from"../../geometry/SpatialReference.js";import{parse as c}from"../support/arcgisLayerUrl.js";import{id as y,popupEnabled as d}from"../support/commonProperties.js";import{isHostedLayer as m}from"../../portal/support/portalItemUtils.js";import{reader as f}from"../../core/accessorSupport/decorators/reader.js";const h=h=>{const b=h;let v=class extends b{constructor(){super(...arguments),this.capabilities=void 0,this.copyright=null,this.fullExtent=null,this.legendEnabled=!0,this.spatialReference=null,this.version=void 0,this._allLayersAndTablesMap=null}readCapabilities(e,t){const r=t.capabilities&&t.capabilities.split(",").map(e=>e.toLowerCase().trim());if(!r)return{operations:{supportsExportMap:!1,supportsExportTiles:!1,supportsIdentify:!1,supportsQuery:!1,supportsTileMap:!1},exportMap:null,exportTiles:null};const s=this.type,i="tile"!==s&&!!t.supportsDynamicLayers,o=r.includes("query"),l=r.includes("map"),p=!!t.exportTilesAllowed,n=r.includes("tilemap"),u=r.includes("data"),c="tile"!==s&&(!t.tileInfo||i),y="tile"!==s&&(!t.tileInfo||i),d="tile"!==s,m="tile"!==s&&i&&t.currentVersion>=11.1,f=t.cimVersion?a.parse(t.cimVersion):null,h=f?.greaterEqual(1,4)??!1,b=f?.greaterEqual(2,0)??!1;return{operations:{supportsExportMap:l,supportsExportTiles:p,supportsIdentify:o,supportsQuery:u,supportsTileMap:n},exportMap:l?{supportsArcadeExpressionForLabeling:h,supportsCIMSymbols:b,supportsDynamicLayers:i,supportsSublayerOrderBy:m,supportsSublayerDefinitionExpression:y,supportsSublayerVisibility:c,supportsSublayersChanges:d}:null,exportTiles:p?{maxExportTilesCount:+t.maxExportTilesCount}:null}}readVersion(e,t){let r=t.currentVersion;return r||(r=t.hasOwnProperty("capabilities")||t.hasOwnProperty("tables")?10:t.hasOwnProperty("supportedImageFormatTypes")?9.31:9.3),r}async fetchRelatedService(e){const t=this.portalItem;if(!t||!m(t))return null;this._relatedFeatureServicePromise||(this._relatedFeatureServicePromise=t.fetchRelatedItems({relationshipType:"Service2Service",direction:"reverse"},e).then(e=>e.find(e=>"Feature Service"===e.type)??null,()=>null));const r=await this._relatedFeatureServicePromise;return i(e),r?{itemId:r.id,url:r.url}:null}async fetchSublayerInfo(e,r){const{source:s}=e;if(this?.portalItem&&"tile"===this.type&&"map-layer"===s?.type&&m(this.portalItem)&&e.originIdOf("url")<2){const t=await this.fetchRelatedService(r);t&&(e.url=o(t.url,s.mapLayerId.toString()),e.layerItemId=t.itemId)}const{url:i}=e;let a;if("data-layer"===s.type){a=(await t(i,{responseType:"json",query:{f:"json",...this.customParameters,token:this.apiKey},...r})).data}else{let t=e.id;"map-layer"===s?.type&&(t=s.mapLayerId);try{a=(await this.fetchAllLayersAndTables(r)).get(t)}catch{}if(i&&e.originIdOf("url")>2)try{const e=await this._fetchAllLayersAndTablesFromService(i),t=c(i)?.sublayer??s.mapLayerId,r=structuredClone(e.get(t));if(null!=r){const e=["drawingInfo","maxScale","minScale","name"];for(const t of e)delete r[t];a={...a,...r}}}catch{}}return a}async fetchAllLayersAndTables(e){return this._fetchAllLayersAndTablesFromService(this.parsedUrl?.path,e)}async _fetchAllLayersAndTablesFromService(e,a){await this.load(a),this._allLayersAndTablesMap||=new Map;const l=c(e),p=s(this._allLayersAndTablesMap,l?.url.path,()=>t(o(l?.url.path,"/layers"),{query:{f:"json",...this.customParameters,token:this.apiKey}}).then(async e=>{const s=new Map,{layers:i,tables:o}=e.data,a=[...i??[],...o??[]];for(const t of a)s.set(t.id,t);if(r(s.values(),e=>null==e.capabilities||null==e.extent)){const{data:e}=await t(l?.url.path,{query:{f:"json",...this.customParameters,token:this.apiKey}}).catch(()=>({data:{capabilities:"",fullExtent:void 0}}));for(const t of s.values())t.capabilities??=e.capabilities??"",t.extent??=e.fullExtent}return{result:s}},e=>({error:e}))),n=await p;if(i(a),"result"in n)return n.result;throw n.error}};return e([l({readOnly:!0})],v.prototype,"capabilities",void 0),e([f("service","capabilities",["capabilities","cimVersion","currentVersion","exportTilesAllowed","maxExportTilesCount","supportsDynamicLayers","tileInfo"])],v.prototype,"readCapabilities",null),e([l({json:{read:{source:"copyrightText"}}})],v.prototype,"copyright",void 0),e([l({type:n})],v.prototype,"fullExtent",void 0),e([l(y)],v.prototype,"id",void 0),e([l({type:Boolean,json:{origins:{service:{read:{enabled:!1}}},read:{source:"showLegend"},write:{target:"showLegend"}}})],v.prototype,"legendEnabled",void 0),e([l(d)],v.prototype,"popupEnabled",void 0),e([l({type:u})],v.prototype,"spatialReference",void 0),e([l({readOnly:!0})],v.prototype,"version",void 0),e([f("service","version",["currentVersion","capabilities","tables","supportedImageFormatTypes"])],v.prototype,"readVersion",null),v=e([p("esri.layers.mixins.ArcGISMapService")],v),v};export{h as ArcGISMapService};