@vertigis/arcgis-extensions 34.2.0 → 34.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/html/classes/mapping__layerextension.arraywrappedcollection.html +2 -2
- package/docs/html/classes/mapping__layerextension.layerextension.html +9 -9
- package/docs/html/classes/mapping__layerextension.layerextensionschema.html +6 -6
- package/docs/html/classes/mapping_buildingscenelayerextension.buildingscenelayerextension.html +6 -6
- package/docs/html/classes/mapping_buildingscenelayerextension.buildingscenelayerreadonlyschema.html +4 -4
- package/docs/html/classes/mapping_csvlayerextension.csvlayerextension.html +9 -9
- package/docs/html/classes/mapping_elevationlayerextension.elevationlayerextension.html +7 -7
- package/docs/html/classes/mapping_featurecollectionlayerextension.featurecollectionlayerextension.html +6 -6
- package/docs/html/classes/mapping_featurelayerextension.featurelayerextension.html +6 -6
- package/docs/html/classes/mapping_featurelayerextensionbase.featurelayerextensionbase.html +7 -7
- package/docs/html/classes/mapping_featurelayerextensionbase.featurelayerschema.html +4 -4
- package/docs/html/classes/mapping_georsslayerextension.georsslayerextension.html +8 -8
- package/docs/html/classes/mapping_graphicslayerextension.graphicslayerextension.html +6 -6
- package/docs/html/classes/mapping_grouplayerextension.grouplayerextension.html +6 -6
- package/docs/html/classes/mapping_imagerylayerextension.imagerylayerextension.html +8 -8
- package/docs/html/classes/mapping_imagerytilelayerextension.imagerytilelayerextension.html +6 -6
- package/docs/html/classes/mapping_integratedmeshlayerextension.integratedmeshlayerextension.html +8 -8
- package/docs/html/classes/mapping_kmllayerextension.kmllayerextension.html +6 -6
- package/docs/html/classes/mapping_mapimagelayerextension.mapimagelayerextension.html +8 -8
- package/docs/html/classes/mapping_openstreetmaplayerextension.openstreetmaplayerextension.html +9 -9
- package/docs/html/classes/mapping_pointcloudlayerextension.pointcloudlayerextension.html +8 -8
- package/docs/html/classes/mapping_scenelayerextension.scenelayerextension.html +8 -8
- package/docs/html/classes/mapping_streamlayerextension.streamlayerextension.html +8 -8
- package/docs/html/classes/mapping_streamlayerextension.streamlayerschema.html +4 -4
- package/docs/html/classes/mapping_tilelayerextension.tilelayerextension.html +6 -6
- package/docs/html/classes/mapping_vectortilelayerextension.vectortilelayerextension.html +7 -7
- package/docs/html/classes/mapping_webtilelayerextension.webtilelayerextension.html +9 -9
- package/docs/html/classes/mapping_wmslayerextension.wmslayerextension.html +7 -7
- package/docs/html/classes/mapping_wmtslayerextension.wmtslayerextension.html +7 -7
- package/docs/html/modules/mapping__layerextension.html +1 -1
- package/docs/html/modules/version.html +1 -1
- package/mapping/_LayerExtension.js +1 -1
- package/package.json +1 -1
- package/utilities/_layers.js +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{__decorate}from"tslib";import{ArgumentError}from"../ArgumentError.js";import{InvalidOperationError}from"../InvalidOperationError.js";import{ItemType}from"../ItemType.js";import{FeatureSourceBase}from"../data/FeatureSourceBase.js";import{Schema}from"../data/Schema.js";import{LayerBase as PortalLayerBase}from"../portal/LayerBase.js";import{ERR_LAYER_TYPE_MISMATCH}from"../portal/_layerHelper.js";import{DefaultArcGISRequestHelper}from"../support/ArcGISRequestHelper.js";import{ReadOnlyInitializableCollection}from"../support/ReadOnlyInitializableCollection.js";import{serializable}from"../support/Serializable.js";import{CollectionProxy}from"../utilities/CollectionProxy.js";import{isLayer}from"../utilities/_layers.js";import{checkArg}from"../utilities/checkArg.js";import{Collection,compare}from"../utilities/collection.js";import{load}from"../utilities/esri.js";import{isGroupLayerExtension}from"../utilities/extensions.js";import{hasMmapLayer}from"../utilities/layers.js";import{getLogger}from"../utilities/log.js";import{deepClone}from"../utilities/object.js";import{toPortalItem}from"../utilities/portal.js";import{onCollectionPropertyChange,watchEach}from"../utilities/watch.js";import{_assignSublayerExtensions}from"./_SublayerExtension.js";import{ExtensionBaseLayerListSettings,fromLayerListMode}from"./support/LayerListSettings.js";import{SublayerExtensionCollectionBase}from"./support/_SublayerExtensionCollection.js";const ERR_INVALID_LAYER_TYPE="Invalid type of layer for this type of layer extension.",ERR_FEATURES_NOT_SUPPORTED="This type of layer does not have features.",ERR_ADD_SUBLAYERX_NOT_SUPPORTED="This type of layer cannot have sublayers.",ERR_SCHEMA_READ_ONLY="This schema property is read-only.",DEFAULT_CAPABILITIES=Object.freeze({supportsAdd:!1,supportsUpdate:!1,supportsDelete:!1,supportsEditing:!1,supportsQuery:!1});export class LayerExtension extends FeatureSourceBase{constructor(e){super(e),this._itemType=ItemType.LAYER_EXTENSION,this._watchHandles=[],this._dynamicallyAddedLayer=!1,this._visibilityMode="independent",this._onSublayerAddedPostInitialize=async e=>{var t,i;try{await e.initialize()}catch(r){getLayerXLogger().error(`Error occurred while initializing sublayer extension for sublayer '${null!==(i=null!==(t=e.title)&&void 0!==t?t:e.sublayer.id)&&void 0!==i?i:e.id}'. ${r}`)}};const t={...this.getDefaults(),...e};checkArg("properties.layer",t.layer).isNotMissing();const{layer:i}=t;let r;if((null==i?void 0:i.hasOwnProperty("listMode"))&&(r=fromLayerListMode(i.listMode)),this.layerListSettings=this._createLayerListSettings({...r,...t.layerListSettings}),isLayer(i))checkArg("properties.layer",i).satisfies((e=>this._isSupportedLayer(e)),ERR_INVALID_LAYER_TYPE),this._setLayer(i);else if(i){if(i.$portalItem){const e=i.$portalItem;this._portalItem=toPortalItem(e)}this._deferredLayerProperties=i}this._sublayerExtensions=this._createSublayerExtensionCollection(),this.allSublayerExtensions=new AllSublayerExtensionCollectionImpl(this),this.watch("parentLayerExtension.isEffectivelyVisible",(()=>this.notifyChange("isEffectivelyVisible"))),this.watch("layer.sublayers",(()=>this.notifyChange("_sublayers")))}get layer(){return this._layer}get mapExtension(){return this._mapExtension}get basemapExtension(){return this._basemapExtension}get groundExtension(){return this._groundExtension}get parentLayerExtension(){return this._parentLayerExtension}get hasFeatures(){return!1}get capabilities(){return this._capabilities()}get renderer(){}get visibilityMode(){return this._visibilityMode}set visibilityMode(e){this._visibilityMode=e,"exclusive"===e&&this._ensureAtMostOneChildSublayerVisible()}get sublayerExtensions(){return this._sublayerExtensions}get requestHelper(){return this._requestHelper||(this._requestHelper=new DefaultArcGISRequestHelper),this._requestHelper}set requestHelper(e){this._requestHelper=e}get title(){var e,t,i,r,s,a,n,o,l,y,h,p;return null!==(p=null!==(r=null!==(t=null===(e=this.layer)||void 0===e?void 0:e.title)&&void 0!==t?t:null===(i=this._deferredLayerProperties)||void 0===i?void 0:i.title)&&void 0!==r?r:"string"==typeof(null===(s=this._deferredLayerProperties)||void 0===s?void 0:s.$ref)?null===(a=this._deferredLayerProperties)||void 0===a?void 0:a.$ref:null!==(l=null===(o=null===(n=this._deferredLayerProperties)||void 0===n?void 0:n.$ref)||void 0===o?void 0:o.title)&&void 0!==l?l:null===(h=null===(y=this._deferredLayerProperties)||void 0===y?void 0:y.$ref)||void 0===h?void 0:h.id)&&void 0!==p?p:"Layer"}get supportsSublayers(){return!1}get effectiveMinScale(){return this.layer&&this.layer.minScale||0}get effectiveMaxScale(){return this.layer&&this.layer.maxScale||0}get isEffectivelyVisible(){const e=!!this.layer&&this.layer.visible;return this.parentLayerExtension?this.parentLayerExtension.isEffectivelyVisible&&e:e}get effectiveFullExtent(){return this.layer?this.layer.fullExtent:void 0}get canChangeScale(){return!0}get canChangeOpacity(){return!0}get _layerSupportsHideChildren(){return this.supportsSublayers}get _sublayers(){if(this.supportsSublayers)return this.layer?this.layer.sublayers:void 0}get dynamicallyAddedLayer(){return this._dynamicallyAddedLayer}set dynamicallyAddedLayer(e){this._dynamicallyAddedLayer=e}static create(e){if(!LayerExtension.factory)throw new InvalidOperationError("Cannot create layer extension: no layer extension factory has been registered.");return LayerExtension.factory.create(e)}static async fromPortalItem(e,t){var i;checkArg("portalItemLike",e).isNotMissing();const r=null!=t?t:{};checkArg("layerExtensionProperties.layer",r.layer).satisfies((e=>!isLayer(e)));const s={...r.layer};checkArg("layerExtensionProperties.layer.$ref",s.$ref).satisfies((e=>null==e));const a=new DefaultArcGISRequestHelper,n=toPortalItem(e);let o;await load(n);const l=null!==(i=n.typeKeywords)&&void 0!==i?i:"";if("Map Service"===n.type)o=l.includes("Tiled")||l.includes("Hosted Service")?"ArcGISTiledMapServiceLayer":"ArcGISMapServiceLayer";else if("Feature Service"===n.type)o="ArcGISFeatureLayer";else if("Image Service"===n.type){const e=await LayerExtension._getLayerData(n.url,a);e.cacheType?"Map"===e.cacheType?o="ArcGISTiledImageServiceLayer":("Elevation"===e.cacheType||l.includes("Elevation 3D Layer"))&&(o="ArcGISTiledElevationServiceLayer"):o=e.singleFusedMapCache||e.tileInfo||l.includes("Hosted Service")?"ArcGISTiledImageServiceLayer":"ArcGISImageServiceLayer"}else if("CSV"===n.type)o="CSV";else if("KML"===n.type)o="KML";else if("Scene Service"===n.type)l.includes("3DObject")||l.includes("Point")?o="ArcGISSceneServiceLayer":l.includes("IntegratedMesh")?o="IntegratedMeshLayer":l.includes("PointCloud")?o="PointCloudLayer":l.includes("Building")&&(o="BuildingSceneLayer");else if("Stream Service"===n.type)o="ArcGISStreamLayer";else if("Vector Tile Service"===n.type)o="VectorTileLayer";else if("Feature Collection"===n.type){o="ArcGISFeatureLayer";const e=await n.fetchData();s.featureCollection=e}else if("WMTS"===n.type){o="WebTiledLayer";const e=await n.fetchData();Object.assign(s,e)}else if("WMS"===n.type){o="WMS";const e=await n.fetchData();Object.assign(s,e)}if(!o)throw new ArgumentError("portalItem","Could not determine correct type of LayerExtension to create from portal item");if(s.layerType&&s.layerType!==o)throw new ArgumentError("layerExtensionProperties.layer.layerType","Layer type defined in layer properties does not match layer type from portal item");return s.layerType=o,s.$portalItem=n,r.layer=s,LayerExtension.create(r)}static _matchesRef(e,t){if(!e||!t)return!1;const i=t.$ref;return"string"==typeof i?e.id===i||e.title===i:!!i&&(e.id===i.id||e.title===i.title&&!i.path)}static async _getLayerData(e,t){const i=await t.request(e,{query:{f:"json"}});if(!i||!i.data)throw new Error(`Response to request for url ${e} was invalid.`);return i.data}getFeatures(e,t){if(!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);return super.getFeatures(e,t)}getFullExtent(){return this.effectiveFullExtent}async addFeatures(e,t){if(checkArg("features",e).isNotMissing(),!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);await super.addFeatures(e,t)}async updateFeatures(e,t){if(checkArg("features",e).isNotMissing(),!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);await super.updateFeatures(e,t)}async deleteFeatures(e,t){if(checkArg("features",e).isNotMissing(),!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);await super.deleteFeatures(e,t)}async _createBackingLayer(){this._portalItem||this.layer||this._deferredLayerProperties&&this._deferredLayerProperties.$ref?!this.layer&&this._portalItem&&this._setLayer(await this._createLayer(this.getDefaults().layer)):(this._setLayer(await this._createLayer(this._deferredLayerProperties)),checkArg("properties.layer",this._layer).satisfies((e=>this._isSupportedLayer(e)),ERR_INVALID_LAYER_TYPE),this._deferredLayerProperties=void 0)}_setMapExtension(e){const t=this.mapExtension;this._mapExtension=e,t&&this.featureSettings.formatSettings.parent===t.formatSettings&&(this.featureSettings.formatSettings.parent=void 0),e&&(this.featureSettings.formatSettings.parent||(this.featureSettings.formatSettings.parent=e.formatSettings)),this._resolveLayer(),this.notifyChange("mapExtension")}_setBasemapExtension(e){this._basemapExtension=e,this._resolveLayer(),e&&(this.taskSettings.parent=e.taskSettings),this.notifyChange("basemapExtension")}_setGroundExtension(e){this._groundExtension=e,this._resolveLayer(),e&&(this.taskSettings.parent=e.taskSettings),this.notifyChange("groundExtension")}_setParentLayerExtension(e){const t=this._parentLayerExtension;this._parentLayerExtension=e,t&&(this.featureSettings.formatSettings.parent===t.featureSettings.formatSettings&&(this.featureSettings.formatSettings.parent=this.mapExtension?this.mapExtension.formatSettings:void 0),this.taskSettings.parent===t.taskSettings&&(this.taskSettings.parent=void 0)),e&&((!this.featureSettings.formatSettings.parent||this.mapExtension&&this.featureSettings.formatSettings.parent===this.mapExtension.formatSettings)&&(this.featureSettings.formatSettings.parent=e.featureSettings.formatSettings),this.taskSettings.parent||(this.taskSettings.parent=e.taskSettings)),this._resolveLayer(),this.notifyChange("parentLayerExtension")}_resolveLayer(e){var t,i,r;if(this.layer||!this._deferredLayerProperties)return;const s=e=>LayerExtension._matchesRef(e,this._deferredLayerProperties);let a;e?a=e.find(s):(null===(t=this.basemapExtension)||void 0===t?void 0:t.basemap)?(a=this.basemapExtension.basemap.baseLayers.find(s),a=a||this.basemapExtension.basemap.referenceLayers.find(s)):(null===(i=this.groundExtension)||void 0===i?void 0:i.ground)?a=this.groundExtension.ground.layers.find(s):(null===(r=this.parentLayerExtension)||void 0===r?void 0:r.layer)?a=this.parentLayerExtension.layer.layers.find(s):this.mapExtension&&(a=this.mapExtension.map.layers.find(s)),a&&this._isSupportedLayer(a)&&(this._setLayer(a),this._originalRef=this._deferredLayerProperties.$ref,this._deferredLayerProperties.$portalItem&&getLayerXLogger().warn("LayerExtension defined with both $ref and $portalItem. Ignoring $portalItem."))}async _switchLayer(e){if(e===this.layer)return;checkArg("newLayer",e).isNotMissing().satisfies((e=>this._isSupportedLayer(e)),ERR_INVALID_LAYER_TYPE),this.isInitialized&&await load(e);const t=new Map;if(this._sublayers)for(const e of this._sublayers.toArray())t.set(e.id,this.sublayerExtensions.forSublayer(e));e.visible=this.layer.visible,e.opacity=this.layer.opacity,e.listMode=this.layer.listMode,this._setLayer(e);const i=[];if(this._sublayers){const e=this._sublayers.filter((e=>t.has(e.id))).toArray();i.push(...e.map((async e=>{const i=t.get(e.id);await i._switchSublayer(e),this._sublayerExtensions._register(i)})))}this.isInitialized&&i.push(this._initializeChildren()),await Promise.all(i)}_getProjectWebmapJSON(){if(!this.layer)return;let e=PortalLayerBase.fromEsriApiLayer(this.layer);if(!this.dynamicallyAddedLayer){const{id:t,title:i,layerType:r,visibility:s,opacity:a}=e;e={id:t,title:i,layerType:r,visibility:s,opacity:a}}return e}async _onDestroy(){this._watchHandles.forEach((e=>null==e?void 0:e.remove())),await Promise.all(this.sublayerExtensions.toArray().map((e=>e.destroy()))),await super._onDestroy()}_getSerializableProperties(){return{...super._getSerializableProperties(),iconUrl:{serializeModes:["initial","project"],serialize:e=>"project"!==e||this.dynamicallyAddedLayer?this.iconUrl:this.getDefault("iconUrl")},visibilityMode:{serializeModes:["initial","project"],serialize:e=>"project"!==e||this.dynamicallyAddedLayer?this.visibilityMode:this.getDefault("visibilityMode"),default:"independent"},tpkSource:{serializeModes:["initial"]},layerListSettings:{serializeModes:["initial","project"],serialize:e=>"project"!==e||this.dynamicallyAddedLayer?this.layerListSettings:this.getDefault("layerListSettings")},sublayerExtensions:{serializeModes:["initial","project"],serialize:e=>this.sublayerExtensions.map((e=>e.toItemUri())).toArray(),deserialize:e=>{_assignSublayerExtensions(this.sublayerExtensions,e,(e=>this._createSublayerExtension(e)))}},layer:{serializeModes:["initial","project"],serialize:e=>{if(this.layer){if((this._mapExtension||this._parentLayerExtension||this._basemapExtension||this._groundExtension)&&(this._layer.id||this._layer.title)){const e=PortalLayerBase.getLayerType(this._layer),t=this._getSerializableRefLayerProperties();return{$ref:this._originalRef||{id:this._layer.id,title:this._layer.title,subtype:this._getSerializableLayerType()},layerType:e,...t}}return PortalLayerBase.fromEsriApiLayer(this.layer)}return this._deferredLayerProperties?deepClone(this._deferredLayerProperties):void 0},isDefault:()=>{throw new Error("Missing implementation for _getSerializableProperties() > layer > default. Subclasses of LayerExtension must implement this.")},deserialize:e=>{if(isLayer(e)){if(e!==this.layer)throw new Error("Property 'layer' is read-only.")}else e&&(this._layer?this._applyLayerProperties(e,this.layer):this._deferredLayerProperties&&(this._deferredLayerProperties={...this._deferredLayerProperties,...e}))}},dynamicallyAddedLayer:{serializeModes:["project"],default:!1},requestHelper:{serialize:!1}}}_getSerializableLayerType(){}_getSerializableRefLayerProperties(){return{}}_createSublayerExtension(e){if(!this.supportsSublayers)throw new InvalidOperationError(ERR_ADD_SUBLAYERX_NOT_SUPPORTED);throw new Error("Missing implementation for _createSublayerExtension(). Subclasses of LayerExtension that support sublayers must implement this.")}async _onInitialize(){if(await super._onInitialize(),await this._createBackingLayer(),this._portalItem&&(await load(this._portalItem),await this._applyPortalItemProperties(this._portalItem),this.layer.title=this._portalItem.title,this.layer.portalItem=this._portalItem,this.iconUrl||(this.iconUrl=this._portalItem.thumbnailUrl),await this._applyLayerProperties(this._deferredLayerProperties,this.layer),this._deferredLayerProperties=void 0),this._resolveLayer(),!this.layer){const e=this._deferredLayerProperties.$ref;throw this._mapExtension||this._parentLayerExtension||this._basemapExtension||this._groundExtension?new InvalidOperationError(`No layer found matching reference "${e}".`):new InvalidOperationError("Cannot resolve layer reference: missing parent.")}this._deferredLayerProperties&&(await this._applyLayerProperties(this._deferredLayerProperties,this.layer),this._deferredLayerProperties=void 0),await this._initializeLayer(),await load(this.layer),this.supportsSublayers&&!this.layer.sublayers&&this.layer._set("sublayers",new Collection),this._sublayerExtensions.onParentInitialized()}async _postInitialize(){await super._postInitialize(),this.layerListSettings.onLayerExtensionInitialized(),this._watchHandles.push(onCollectionPropertyChange(this,"layer.sublayers",(async e=>{var t;const i=(null!==(t=e.added)&&void 0!==t?t:[]).map((e=>this.sublayerExtensions.forSublayer(e)));await Promise.all(i.map(this._onSublayerAddedPostInitialize))})))}_applyPortalItemProperties(e){throw new InvalidOperationError("Cannot use this type of layer extension with a PortalItem.")}async _initializeLayer(){}_createLayerListSettings(e){return new LayerExtensionLayerListSettings(e,this)}_createSublayerExtensionCollection(){return new SublayerExtensionCollectionImpl(this)}_capabilities(){return DEFAULT_CAPABILITIES}*_initializableChildCollections(){yield*super._initializableChildCollections(),yield this.sublayerExtensions}async _createLayer(e){return PortalLayerBase.toEsriApiLayer(e)}_applyLayerProperties(e,t){checkArg("layerJson",e).isNotMissing();const i=e.layerType||e.type;return checkArg("layerJson.layerType",i).satisfies((e=>{var t;return!e||e===(null===(t=this.getDefault("layer"))||void 0===t?void 0:t.layerType)}),ERR_LAYER_TYPE_MISMATCH),checkArg("layer",t).isNotMissing().satisfies((e=>this._isSupportedLayer(e)),ERR_LAYER_TYPE_MISMATCH),PortalLayerBase.applyToEsriApiLayer(e,t)}_setLayer(e){if(this._layer=e,e.watch("visible",this._onVisibleChanged.bind(this)),this.layer.watch("minScale",(()=>this.notifyChange("effectiveMinScale"))),this.layer.watch("maxScale",(()=>this.notifyChange("effectiveMaxScale"))),this.layer.watch("title",(()=>this.notifyChange("title"))),this.supportsSublayers)if(this._sublayers)this._setupSublayersHandles();else{const t=e.watch("sublayers",(()=>{this._setupSublayersHandles(),t.remove()}),!0)}this.notifyChange("layer"),this.notifyChange("title"),this.notifyChange("effectiveMinScale"),this.notifyChange("effectiveMaxScale"),this.notifyChange("isEffectivelyVisible")}_setupSublayersHandles(){this._sublayers.on("change",this._onSublayersChange.bind(this)),watchEach(this._sublayers,"visible",this._onSublayersSublayerVisibleChanged.bind(this))}_onVisibleChanged(e){if("inherited"===this.visibilityMode&&this.supportsSublayers&&this._sublayers)for(const t of this._sublayers.toArray())t.visible=e;this.notifyChange("isEffectivelyVisible")}_onSublayersSublayerVisibleChanged(e,t,i,r){e&&"exclusive"===this.visibilityMode&&this._ensureAChildSublayerVisible(r)}_onSublayersChange(e){var t;(null===(t=e.added)||void 0===t?void 0:t.length)&&"exclusive"===this.visibilityMode&&this._ensureAChildSublayerVisible(e.added[e.added.length-1])}_ensureAChildSublayerVisible(e){for(const t of this._sublayers.toArray())t!==e&&(t.visible=!1)}_ensureAtMostOneChildSublayerVisible(){this.layer&&this._sublayers&&this._ensureAChildSublayerVisible(this._sublayers.find((e=>e.visible)))}}class SublayerExtensionCollectionImpl extends SublayerExtensionCollectionBase{constructor(e){super(e,"_sublayers"),this._layerExtension=e}add(e,t){if(checkArg("sublayerX",e).isNotMissing(),!this._layerExtension.supportsSublayers)throw new InvalidOperationError(ERR_ADD_SUBLAYERX_NOT_SUPPORTED);const i=e.sublayer?e.sublayer.layer:void 0;i&&i!==this._layerExtension.layer&&i.sublayers.remove(e.sublayer),super.add(e,t)}}class AllSublayerExtensionCollectionImpl extends ReadOnlyInitializableCollection{constructor(e){super(),this._layerExtension=e}get _collection(){return this._layerExtension.sublayerExtensions.flatten((e=>e.sublayerExtensions))}findById(e){return checkArg("id",e).isNotMissing(),this.find((t=>t.id===e))}findBySublayerId(e){return checkArg("id",e).isNotMissing(),this.find((t=>t.sublayer.id===e))}forSublayer(e){return checkArg("sublayer",e).isNotMissing(),this.findBySublayerId(e.id)}emit(e,t){if("change"===e){const i=new Collection;i.addMany(t.added);const r=i.flatten((e=>e.sublayerExtensions)).toArray(),s=new Collection;s.addMany(t.removed);const a=s.flatten((e=>e.sublayerExtensions)).toArray(),n=new Collection;n.addMany(t.moved);const o=n.flatten((e=>e.sublayerExtensions)).toArray();return super.emit(e,{added:r,removed:a,moved:o,target:this})}return super.emit(e,t)}_itemIsInitialized(e){return super._itemIsInitialized(e)&&!!e.sublayer}}let LayerExtensionLayerListSettings=class extends ExtensionBaseLayerListSettings{get _esriLayer(){return this._extension.layer}get _listModePath(){return"layer.listMode"}get _supportsChildren(){return this._extension.supportsSublayers}};LayerExtensionLayerListSettings=__decorate([serializable],LayerExtensionLayerListSettings);let LayerExtensionSchema=class extends Schema{constructor(e){if(super(),this._layerBindings=new Map,this._layerExtension=e,this._bindSettingsToLayerProperties(),e.layer)this._onLayerResolved(e.layer);else{const t=e.watch("layer",(()=>{this._onLayerResolved(e.layer),t.remove()}),!0)}}_getPropertyBindings(){return{}}_getSetting(e,t){if(this._layerBindings.has(e)){let t=this._layerBindings.get(e);if("string"==typeof t&&(t={property:t}),t.hasOwnProperty("value"))return t.value;if(this._layerExtension.layer)return this._layerExtension.layer[t.property]}return super._getSetting(e,t)}_setSetting(e,t){if(this._layerBindings.has(e)){let i=this._layerBindings.get(e);if("string"==typeof i&&(i={property:i}),i.readonly||i.hasOwnProperty("value"))throw new InvalidOperationError(ERR_SCHEMA_READ_ONLY);if(this._layerExtension.layer)return void(this._layerExtension.layer[i.property]=t)}super._setSetting(e,t)}_bindSettingsToLayerProperties(){const e=this._getPropertyBindings();for(const t of Object.keys(e)){let i=e[t];"string"==typeof i&&(i={property:i}),this._layerBindings.set(t,i),i.hasOwnProperty("value")||this._layerExtension.watch(`layer.${i.property}`,(()=>this.notifyChange(t)),!i.hasOwnProperty("sync")||i.sync)}}_onLayerResolved(e){for(const t of this._layerBindings.keys())this.isModified(t)&&(e[t]=this[t],this.reset(t))}};LayerExtensionSchema=__decorate([serializable],LayerExtensionSchema);export{LayerExtensionSchema};export class ArrayWrappedCollection extends CollectionProxy{constructor(e,t){if(super(),this._layerExtension=e,this._property=t,this._layerProperty=e instanceof LayerExtension?"layer":"sublayer",e[this._layerProperty])this._onLayerResolved(e[this._layerProperty]);else{this._collection=new Collection;const t=e.watch(this._layerProperty,(()=>{const i=e[this._layerProperty];this.length&&(i[this._property]=this.toArray()),this._onLayerResolved(i),t.remove()}),!0)}}add(e,t){const i=this._layerExtension[this._layerProperty];i&&!i[this._property]&&(i[this._property]=[],this._collection=wrapArrayWithCollection(i[this._property])),super.add(e,t)}_onLayerResolved(e){this._collection=wrapArrayWithCollection(e[this._property]||[]),e.watch(this._property,(()=>{this._collection=wrapArrayWithCollection(e[this._property]||[])}),!0)}}export function _assignLayerExtensions(e,t){return compare(e,t,{onNew:(t,i)=>{e.add(t instanceof LayerExtension?t:LayerExtension.create(t),isLayerRef(t)?void 0:i)},onMatch:(t,i,r,s)=>{i instanceof LayerExtension||t.assignProperties(i),r===s||isLayerRef(i)||e.reorder(t,s)},onMissing:t=>{(hasMmapLayer([t])||isGroupLayerExtension(t)&&0===t.layerExtensions.toArray().length)&&e.remove(t)},equals:(e,t)=>t instanceof LayerExtension?t===e:!!LayerExtension._matchesRef(e.layer,t.layer)||e.id===t.id})}function wrapArrayWithCollection(e){const t=new Collection;return Object.defineProperty(t,"_items",{get:()=>e}),Object.defineProperty(t,"length",{get:()=>e.length,set:t=>e.length=t}),t}function getLayerXLogger(){return getLogger("geocortex.api.mapping.LayerExtension")}function isLayerRef(e){var t,i;return e instanceof LayerExtension?!!(null===(t=e._deferredLayerProperties)||void 0===t?void 0:t.$ref):!isLayer(e.layer)&&!!(null===(i=e.layer)||void 0===i?void 0:i.$ref)}
|
|
1
|
+
import{__decorate}from"tslib";import{ArgumentError}from"../ArgumentError.js";import{InvalidOperationError}from"../InvalidOperationError.js";import{ItemType}from"../ItemType.js";import{FeatureSourceBase}from"../data/FeatureSourceBase.js";import{Schema}from"../data/Schema.js";import{LayerBase as PortalLayerBase}from"../portal/LayerBase.js";import{ERR_LAYER_TYPE_MISMATCH}from"../portal/_layerHelper.js";import{DefaultArcGISRequestHelper}from"../support/ArcGISRequestHelper.js";import{ReadOnlyInitializableCollection}from"../support/ReadOnlyInitializableCollection.js";import{serializable}from"../support/Serializable.js";import{CollectionProxy}from"../utilities/CollectionProxy.js";import{isLayer}from"../utilities/_layers.js";import{checkArg}from"../utilities/checkArg.js";import{Collection,compare}from"../utilities/collection.js";import{load}from"../utilities/esri.js";import{isGroupLayerExtension}from"../utilities/extensions.js";import{hasMmapLayer}from"../utilities/layers.js";import{getLogger}from"../utilities/log.js";import{deepClone}from"../utilities/object.js";import{toPortalItem}from"../utilities/portal.js";import{onCollectionPropertyChange,watchEach}from"../utilities/watch.js";import{_assignSublayerExtensions}from"./_SublayerExtension.js";import{ExtensionBaseLayerListSettings,fromLayerListMode}from"./support/LayerListSettings.js";import{SublayerExtensionCollectionBase}from"./support/_SublayerExtensionCollection.js";const ERR_INVALID_LAYER_TYPE="Invalid type of layer for this type of layer extension.",ERR_FEATURES_NOT_SUPPORTED="This type of layer does not have features.",ERR_ADD_SUBLAYERX_NOT_SUPPORTED="This type of layer cannot have sublayers.",ERR_SCHEMA_READ_ONLY="This schema property is read-only.",DEFAULT_CAPABILITIES=Object.freeze({supportsAdd:!1,supportsUpdate:!1,supportsDelete:!1,supportsEditing:!1,supportsQuery:!1});export class LayerExtension extends FeatureSourceBase{constructor(e){super(e),this._itemType=ItemType.LAYER_EXTENSION,this._watchHandles=[],this._dynamicallyAddedLayer=!1,this._visibilityMode="independent",this._onSublayerAddedPostInitialize=async e=>{var t,i;try{await e.initialize()}catch(r){getLayerXLogger().error(`Error occurred while initializing sublayer extension for sublayer '${null!==(i=null!==(t=e.title)&&void 0!==t?t:e.sublayer.id)&&void 0!==i?i:e.id}'. ${r}`)}};const t={...this.getDefaults(),...e};checkArg("properties.layer",t.layer).isNotMissing();const{layer:i}=t;let r;if((null==i?void 0:i.hasOwnProperty("listMode"))&&(r=fromLayerListMode(i.listMode)),this.layerListSettings=this._createLayerListSettings({...r,...t.layerListSettings}),isLayer(i))checkArg("properties.layer",i).satisfies((e=>this._isSupportedLayer(e)),ERR_INVALID_LAYER_TYPE),this._setLayer(i);else if(i){if(i.$portalItem){const e=i.$portalItem;this._portalItem=toPortalItem(e)}this._deferredLayerProperties=i}this._sublayerExtensions=this._createSublayerExtensionCollection(),this.allSublayerExtensions=new AllSublayerExtensionCollectionImpl(this),this.watch("parentLayerExtension.isEffectivelyVisible",(()=>this.notifyChange("isEffectivelyVisible"))),this.watch("layer.sublayers",(()=>this.notifyChange("_sublayers")))}get layer(){return this._layer}get mapExtension(){return this._mapExtension}get basemapExtension(){return this._basemapExtension}get groundExtension(){return this._groundExtension}get parentLayerExtension(){return this._parentLayerExtension}get hasFeatures(){return!1}get capabilities(){return this._capabilities()}get renderer(){}get visibilityMode(){return this._visibilityMode}set visibilityMode(e){this._visibilityMode=e,"exclusive"===e&&this._ensureAtMostOneChildSublayerVisible()}get sublayerExtensions(){return this._sublayerExtensions}get requestHelper(){return this._requestHelper||(this._requestHelper=new DefaultArcGISRequestHelper),this._requestHelper}set requestHelper(e){this._requestHelper=e}get title(){var e,t,i,r,s,a,n,o,l,y,h,p;return null!==(p=null!==(r=null!==(t=null===(e=this.layer)||void 0===e?void 0:e.title)&&void 0!==t?t:null===(i=this._deferredLayerProperties)||void 0===i?void 0:i.title)&&void 0!==r?r:"string"==typeof(null===(s=this._deferredLayerProperties)||void 0===s?void 0:s.$ref)?null===(a=this._deferredLayerProperties)||void 0===a?void 0:a.$ref:null!==(l=null===(o=null===(n=this._deferredLayerProperties)||void 0===n?void 0:n.$ref)||void 0===o?void 0:o.title)&&void 0!==l?l:null===(h=null===(y=this._deferredLayerProperties)||void 0===y?void 0:y.$ref)||void 0===h?void 0:h.id)&&void 0!==p?p:"Layer"}get supportsSublayers(){return!1}get effectiveMinScale(){return this.layer&&this.layer.minScale||0}get effectiveMaxScale(){return this.layer&&this.layer.maxScale||0}get isEffectivelyVisible(){const e=!!this.layer&&this.layer.visible;return this.parentLayerExtension?this.parentLayerExtension.isEffectivelyVisible&&e:e}get effectiveFullExtent(){return this.layer?this.layer.fullExtent:void 0}get canChangeScale(){return!0}get canChangeOpacity(){return!0}get _layerSupportsHideChildren(){return this.supportsSublayers}get _sublayers(){if(this.supportsSublayers)return this.layer?this.layer.sublayers:void 0}get dynamicallyAddedLayer(){return this._dynamicallyAddedLayer}set dynamicallyAddedLayer(e){this._dynamicallyAddedLayer=e}static create(e){if(!LayerExtension.factory)throw new InvalidOperationError("Cannot create layer extension: no layer extension factory has been registered.");return LayerExtension.factory.create(e)}static async fromPortalItem(e,t){var i;checkArg("portalItemLike",e).isNotMissing();const r=null!=t?t:{};checkArg("layerExtensionProperties.layer",r.layer).satisfies((e=>!isLayer(e)));const s={...r.layer};checkArg("layerExtensionProperties.layer.$ref",s.$ref).satisfies((e=>null==e));const a=new DefaultArcGISRequestHelper,n=toPortalItem(e);let o;await load(n);const l=null!==(i=n.typeKeywords)&&void 0!==i?i:"";if("Map Service"===n.type)o=l.includes("Tiled")||l.includes("Hosted Service")?"ArcGISTiledMapServiceLayer":"ArcGISMapServiceLayer";else if("Feature Service"===n.type)o="ArcGISFeatureLayer";else if("Image Service"===n.type){const e=await LayerExtension._getLayerData(n.url,a);e.cacheType?"Map"===e.cacheType?o="ArcGISTiledImageServiceLayer":("Elevation"===e.cacheType||l.includes("Elevation 3D Layer"))&&(o="ArcGISTiledElevationServiceLayer"):o=e.singleFusedMapCache||e.tileInfo||l.includes("Hosted Service")?"ArcGISTiledImageServiceLayer":"ArcGISImageServiceLayer"}else if("CSV"===n.type)o="CSV";else if("KML"===n.type)o="KML";else if("Scene Service"===n.type)l.includes("3DObject")||l.includes("Point")?o="ArcGISSceneServiceLayer":l.includes("IntegratedMesh")?o="IntegratedMeshLayer":l.includes("PointCloud")?o="PointCloudLayer":l.includes("Building")&&(o="BuildingSceneLayer");else if("Stream Service"===n.type)o="ArcGISStreamLayer";else if("Vector Tile Service"===n.type)o="VectorTileLayer";else if("Feature Collection"===n.type){o="ArcGISFeatureLayer";const e=await n.fetchData();s.featureCollection=e}else if("WMTS"===n.type){o="WebTiledLayer";const e=await n.fetchData();Object.assign(s,e)}else if("WMS"===n.type){o="WMS";const e=await n.fetchData();Object.assign(s,e)}if(!o)throw new ArgumentError("portalItem","Could not determine correct type of LayerExtension to create from portal item");if(s.layerType&&s.layerType!==o)throw new ArgumentError("layerExtensionProperties.layer.layerType","Layer type defined in layer properties does not match layer type from portal item");return s.layerType=o,s.$portalItem=n,r.layer=s,LayerExtension.create(r)}static _matchesRef(e,t){if(!e||!t)return!1;const i=t.$ref;return"string"==typeof i?e.id===i||e.title===i:!!i&&(e.id===i.id||e.title===i.title&&!i.path)}static async _getLayerData(e,t){const i=await t.request(e,{query:{f:"json"}});if(!i||!i.data)throw new Error(`Response to request for url ${e} was invalid.`);return i.data}getFeatures(e,t){if(!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);return super.getFeatures(e,t)}getFullExtent(){return this.effectiveFullExtent}async addFeatures(e,t){if(checkArg("features",e).isNotMissing(),!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);await super.addFeatures(e,t)}async updateFeatures(e,t){if(checkArg("features",e).isNotMissing(),!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);await super.updateFeatures(e,t)}async deleteFeatures(e,t){if(checkArg("features",e).isNotMissing(),!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);await super.deleteFeatures(e,t)}async _createBackingLayer(){this._portalItem||this.layer||this._deferredLayerProperties&&this._deferredLayerProperties.$ref?!this.layer&&this._portalItem&&this._setLayer(await this._createLayer(this.getDefaults().layer)):(this._setLayer(await this._createLayer(this._deferredLayerProperties)),checkArg("properties.layer",this._layer).satisfies((e=>this._isSupportedLayer(e)),ERR_INVALID_LAYER_TYPE),this._deferredLayerProperties=void 0)}_setMapExtension(e){const t=this.mapExtension;this._mapExtension=e,t&&this.featureSettings.formatSettings.parent===t.formatSettings&&(this.featureSettings.formatSettings.parent=void 0),e&&(this.featureSettings.formatSettings.parent||(this.featureSettings.formatSettings.parent=e.formatSettings)),this._resolveLayer(),this.notifyChange("mapExtension")}_setBasemapExtension(e){this._basemapExtension=e,this._resolveLayer(),e&&(this.taskSettings.parent=e.taskSettings),this.notifyChange("basemapExtension")}_setGroundExtension(e){this._groundExtension=e,this._resolveLayer(),e&&(this.taskSettings.parent=e.taskSettings),this.notifyChange("groundExtension")}_setParentLayerExtension(e){const t=this._parentLayerExtension;this._parentLayerExtension=e,t&&(this.featureSettings.formatSettings.parent===t.featureSettings.formatSettings&&(this.featureSettings.formatSettings.parent=this.mapExtension?this.mapExtension.formatSettings:void 0),this.taskSettings.parent===t.taskSettings&&(this.taskSettings.parent=void 0)),e&&((!this.featureSettings.formatSettings.parent||this.mapExtension&&this.featureSettings.formatSettings.parent===this.mapExtension.formatSettings)&&(this.featureSettings.formatSettings.parent=e.featureSettings.formatSettings),this.taskSettings.parent||(this.taskSettings.parent=e.taskSettings)),this._resolveLayer(),this.notifyChange("parentLayerExtension")}_resolveLayer(e){var t,i,r;if(this.layer||!this._deferredLayerProperties)return;const s=e=>LayerExtension._matchesRef(e,this._deferredLayerProperties);let a;e?a=e.find(s):(null===(t=this.basemapExtension)||void 0===t?void 0:t.basemap)?(a=this.basemapExtension.basemap.baseLayers.find(s),a=a||this.basemapExtension.basemap.referenceLayers.find(s)):(null===(i=this.groundExtension)||void 0===i?void 0:i.ground)?a=this.groundExtension.ground.layers.find(s):(null===(r=this.parentLayerExtension)||void 0===r?void 0:r.layer)?a=this.parentLayerExtension.layer.layers.find(s):this.mapExtension&&(a=this.mapExtension.map.layers.find(s)),a&&this._isSupportedLayer(a)&&(this._setLayer(a),this._originalRef=this._deferredLayerProperties.$ref,this._deferredLayerProperties.$portalItem&&getLayerXLogger().warn("LayerExtension defined with both $ref and $portalItem. Ignoring $portalItem."))}async _switchLayer(e){if(e===this.layer)return;checkArg("newLayer",e).isNotMissing().satisfies((e=>this._isSupportedLayer(e)),ERR_INVALID_LAYER_TYPE),this.isInitialized&&await load(e);const t=new Map;if(this._sublayers)for(const e of this._sublayers.toArray())t.set(e.id,this.sublayerExtensions.forSublayer(e));e.visible=this.layer.visible,e.opacity=this.layer.opacity,e.listMode=this.layer.listMode,this._setLayer(e);const i=[];if(this._sublayers){const e=this._sublayers.filter((e=>t.has(e.id))).toArray();i.push(...e.map((async e=>{const i=t.get(e.id);await i._switchSublayer(e),this._sublayerExtensions._register(i)})))}this.isInitialized&&i.push(this._initializeChildren()),await Promise.all(i)}_getProjectWebmapJSON(){if(!this.layer)return;let e=PortalLayerBase.fromEsriApiLayer(this.layer);if(!this.dynamicallyAddedLayer){const{id:t,title:i,layerType:r,visibility:s,opacity:a}=e;e={id:t,title:i,layerType:r,visibility:s,opacity:a}}return e}async _onDestroy(){this._watchHandles.forEach((e=>null==e?void 0:e.remove())),await Promise.all(this.sublayerExtensions.toArray().map((e=>e.destroy()))),await super._onDestroy()}_getSerializableProperties(){return{...super._getSerializableProperties(),iconUrl:{serializeModes:["initial","project"],serialize:e=>"project"!==e||this.dynamicallyAddedLayer?this.iconUrl:this.getDefault("iconUrl")},visibilityMode:{serializeModes:["initial","project"],serialize:e=>"project"!==e||this.dynamicallyAddedLayer?this.visibilityMode:this.getDefault("visibilityMode"),default:"independent"},tpkSource:{serializeModes:["initial"]},layerListSettings:{serializeModes:["initial","project"],serialize:e=>"project"!==e||this.dynamicallyAddedLayer?this.layerListSettings:this.getDefault("layerListSettings")},sublayerExtensions:{serializeModes:["initial","project"],serialize:e=>this.sublayerExtensions.map((e=>e.toItemUri())).toArray(),deserialize:e=>{_assignSublayerExtensions(this.sublayerExtensions,e,(e=>this._createSublayerExtension(e)))}},layer:{serializeModes:["initial","project"],serialize:e=>{if(this.layer){if((this._mapExtension||this._parentLayerExtension||this._basemapExtension||this._groundExtension)&&(this._layer.id||this._layer.title)){const e=PortalLayerBase.getLayerType(this._layer),t=this._getSerializableRefLayerProperties();return{$ref:this._originalRef||{id:this._layer.id,title:this._layer.title,subtype:this._getSerializableLayerType()},layerType:e,...t}}return PortalLayerBase.fromEsriApiLayer(this.layer)}return this._deferredLayerProperties?deepClone(this._deferredLayerProperties):void 0},isDefault:()=>{throw new Error("Missing implementation for _getSerializableProperties() > layer > default. Subclasses of LayerExtension must implement this.")},deserialize:e=>{if(isLayer(e)){if(e!==this.layer)throw new Error("Property 'layer' is read-only.")}else e&&(this._layer?this._applyLayerProperties(e,this.layer):this._deferredLayerProperties&&(this._deferredLayerProperties={...this._deferredLayerProperties,...e}))}},dynamicallyAddedLayer:{serializeModes:["project"],default:!1},requestHelper:{serialize:!1}}}_getSerializableLayerType(){}_getSerializableRefLayerProperties(){return{}}_createSublayerExtension(e){if(!this.supportsSublayers)throw new InvalidOperationError(ERR_ADD_SUBLAYERX_NOT_SUPPORTED);throw new Error("Missing implementation for _createSublayerExtension(). Subclasses of LayerExtension that support sublayers must implement this.")}async _onInitialize(){if(await super._onInitialize(),await this._createBackingLayer(),this._portalItem&&(await load(this._portalItem),await this._applyPortalItemProperties(this._portalItem),this.layer.title=this._portalItem.title,this.layer.portalItem=this._portalItem,this.iconUrl||(this.iconUrl=this._portalItem.thumbnailUrl),await this._applyLayerProperties(this._deferredLayerProperties,this.layer),this._deferredLayerProperties=void 0),this._resolveLayer(),!this.layer){const e=this._deferredLayerProperties.$ref;throw this._mapExtension||this._parentLayerExtension||this._basemapExtension||this._groundExtension?new InvalidOperationError(`No layer found matching reference "${"string"==typeof e?e:JSON.stringify(e)}".`):new InvalidOperationError("Cannot resolve layer reference: missing parent.")}this._deferredLayerProperties&&(await this._applyLayerProperties(this._deferredLayerProperties,this.layer),this._deferredLayerProperties=void 0),await this._initializeLayer(),await load(this.layer),this.supportsSublayers&&!this.layer.sublayers&&this.layer._set("sublayers",new Collection),this._sublayerExtensions.onParentInitialized()}async _postInitialize(){await super._postInitialize(),this.layerListSettings.onLayerExtensionInitialized(),this._watchHandles.push(onCollectionPropertyChange(this,"layer.sublayers",(async e=>{var t;const i=(null!==(t=e.added)&&void 0!==t?t:[]).map((e=>this.sublayerExtensions.forSublayer(e)));await Promise.all(i.map(this._onSublayerAddedPostInitialize))})))}_applyPortalItemProperties(e){throw new InvalidOperationError("Cannot use this type of layer extension with a PortalItem.")}async _initializeLayer(){}_createLayerListSettings(e){return new LayerExtensionLayerListSettings(e,this)}_createSublayerExtensionCollection(){return new SublayerExtensionCollectionImpl(this)}_capabilities(){return DEFAULT_CAPABILITIES}*_initializableChildCollections(){yield*super._initializableChildCollections(),yield this.sublayerExtensions}async _createLayer(e){return PortalLayerBase.toEsriApiLayer(e)}_applyLayerProperties(e,t){checkArg("layerJson",e).isNotMissing();const i=e.layerType||e.type;return checkArg("layerJson.layerType",i).satisfies((e=>{var t;return!e||e===(null===(t=this.getDefault("layer"))||void 0===t?void 0:t.layerType)}),ERR_LAYER_TYPE_MISMATCH),checkArg("layer",t).isNotMissing().satisfies((e=>this._isSupportedLayer(e)),ERR_LAYER_TYPE_MISMATCH),PortalLayerBase.applyToEsriApiLayer(e,t)}_setLayer(e){if(this._layer=e,e.watch("visible",this._onVisibleChanged.bind(this)),this.layer.watch("minScale",(()=>this.notifyChange("effectiveMinScale"))),this.layer.watch("maxScale",(()=>this.notifyChange("effectiveMaxScale"))),this.layer.watch("title",(()=>this.notifyChange("title"))),this.supportsSublayers)if(this._sublayers)this._setupSublayersHandles();else{const t=e.watch("sublayers",(()=>{this._setupSublayersHandles(),t.remove()}),!0)}this.notifyChange("layer"),this.notifyChange("title"),this.notifyChange("effectiveMinScale"),this.notifyChange("effectiveMaxScale"),this.notifyChange("isEffectivelyVisible")}_setupSublayersHandles(){this._sublayers.on("change",this._onSublayersChange.bind(this)),watchEach(this._sublayers,"visible",this._onSublayersSublayerVisibleChanged.bind(this))}_onVisibleChanged(e){if("inherited"===this.visibilityMode&&this.supportsSublayers&&this._sublayers)for(const t of this._sublayers.toArray())t.visible=e;this.notifyChange("isEffectivelyVisible")}_onSublayersSublayerVisibleChanged(e,t,i,r){e&&"exclusive"===this.visibilityMode&&this._ensureAChildSublayerVisible(r)}_onSublayersChange(e){var t;(null===(t=e.added)||void 0===t?void 0:t.length)&&"exclusive"===this.visibilityMode&&this._ensureAChildSublayerVisible(e.added[e.added.length-1])}_ensureAChildSublayerVisible(e){for(const t of this._sublayers.toArray())t!==e&&(t.visible=!1)}_ensureAtMostOneChildSublayerVisible(){this.layer&&this._sublayers&&this._ensureAChildSublayerVisible(this._sublayers.find((e=>e.visible)))}}class SublayerExtensionCollectionImpl extends SublayerExtensionCollectionBase{constructor(e){super(e,"_sublayers"),this._layerExtension=e}add(e,t){if(checkArg("sublayerX",e).isNotMissing(),!this._layerExtension.supportsSublayers)throw new InvalidOperationError(ERR_ADD_SUBLAYERX_NOT_SUPPORTED);const i=e.sublayer?e.sublayer.layer:void 0;i&&i!==this._layerExtension.layer&&i.sublayers.remove(e.sublayer),super.add(e,t)}}class AllSublayerExtensionCollectionImpl extends ReadOnlyInitializableCollection{constructor(e){super(),this._layerExtension=e}get _collection(){return this._layerExtension.sublayerExtensions.flatten((e=>e.sublayerExtensions))}findById(e){return checkArg("id",e).isNotMissing(),this.find((t=>t.id===e))}findBySublayerId(e){return checkArg("id",e).isNotMissing(),this.find((t=>t.sublayer.id===e))}forSublayer(e){return checkArg("sublayer",e).isNotMissing(),this.findBySublayerId(e.id)}emit(e,t){if("change"===e){const i=new Collection;i.addMany(t.added);const r=i.flatten((e=>e.sublayerExtensions)).toArray(),s=new Collection;s.addMany(t.removed);const a=s.flatten((e=>e.sublayerExtensions)).toArray(),n=new Collection;n.addMany(t.moved);const o=n.flatten((e=>e.sublayerExtensions)).toArray();return super.emit(e,{added:r,removed:a,moved:o,target:this})}return super.emit(e,t)}_itemIsInitialized(e){return super._itemIsInitialized(e)&&!!e.sublayer}}let LayerExtensionLayerListSettings=class extends ExtensionBaseLayerListSettings{get _esriLayer(){return this._extension.layer}get _listModePath(){return"layer.listMode"}get _supportsChildren(){return this._extension.supportsSublayers}};LayerExtensionLayerListSettings=__decorate([serializable],LayerExtensionLayerListSettings);let LayerExtensionSchema=class extends Schema{constructor(e){if(super(),this._layerBindings=new Map,this._layerExtension=e,this._bindSettingsToLayerProperties(),e.layer)this._onLayerResolved(e.layer);else{const t=e.watch("layer",(()=>{this._onLayerResolved(e.layer),t.remove()}),!0)}}_getPropertyBindings(){return{}}_getSetting(e,t){if(this._layerBindings.has(e)){let t=this._layerBindings.get(e);if("string"==typeof t&&(t={property:t}),t.hasOwnProperty("value"))return t.value;if(this._layerExtension.layer)return this._layerExtension.layer[t.property]}return super._getSetting(e,t)}_setSetting(e,t){if(this._layerBindings.has(e)){let i=this._layerBindings.get(e);if("string"==typeof i&&(i={property:i}),i.readonly||i.hasOwnProperty("value"))throw new InvalidOperationError(ERR_SCHEMA_READ_ONLY);if(this._layerExtension.layer)return void(this._layerExtension.layer[i.property]=t)}super._setSetting(e,t)}_bindSettingsToLayerProperties(){const e=this._getPropertyBindings();for(const t of Object.keys(e)){let i=e[t];"string"==typeof i&&(i={property:i}),this._layerBindings.set(t,i),i.hasOwnProperty("value")||this._layerExtension.watch(`layer.${i.property}`,(()=>this.notifyChange(t)),!i.hasOwnProperty("sync")||i.sync)}}_onLayerResolved(e){for(const t of this._layerBindings.keys())this.isModified(t)&&(e[t]=this[t],this.reset(t))}};LayerExtensionSchema=__decorate([serializable],LayerExtensionSchema);export{LayerExtensionSchema};export class ArrayWrappedCollection extends CollectionProxy{constructor(e,t){if(super(),this._layerExtension=e,this._property=t,this._layerProperty=e instanceof LayerExtension?"layer":"sublayer",e[this._layerProperty])this._onLayerResolved(e[this._layerProperty]);else{this._collection=new Collection;const t=e.watch(this._layerProperty,(()=>{const i=e[this._layerProperty];this.length&&(i[this._property]=this.toArray()),this._onLayerResolved(i),t.remove()}),!0)}}add(e,t){const i=this._layerExtension[this._layerProperty];i&&!i[this._property]&&(i[this._property]=[],this._collection=wrapArrayWithCollection(i[this._property])),super.add(e,t)}_onLayerResolved(e){this._collection=wrapArrayWithCollection(e[this._property]||[]),e.watch(this._property,(()=>{this._collection=wrapArrayWithCollection(e[this._property]||[])}),!0)}}export function _assignLayerExtensions(e,t){return compare(e,t,{onNew:(t,i)=>{e.add(t instanceof LayerExtension?t:LayerExtension.create(t),isLayerRef(t)?void 0:i)},onMatch:(t,i,r,s)=>{i instanceof LayerExtension||t.assignProperties(i),r===s||isLayerRef(i)||e.reorder(t,s)},onMissing:t=>{(hasMmapLayer([t])||isGroupLayerExtension(t)&&0===t.layerExtensions.toArray().length)&&e.remove(t)},equals:(e,t)=>t instanceof LayerExtension?t===e:!!LayerExtension._matchesRef(e.layer,t.layer)||e.id===t.id})}function wrapArrayWithCollection(e){const t=new Collection;return Object.defineProperty(t,"_items",{get:()=>e}),Object.defineProperty(t,"length",{get:()=>e.length,set:t=>e.length=t}),t}function getLayerXLogger(){return getLogger("geocortex.api.mapping.LayerExtension")}function isLayerRef(e){var t,i;return e instanceof LayerExtension?!!(null===(t=e._deferredLayerProperties)||void 0===t?void 0:t.$ref):!isLayer(e.layer)&&!!(null===(i=e.layer)||void 0===i?void 0:i.$ref)}
|
package/package.json
CHANGED
package/utilities/_layers.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{LayerBase as LayerJson}from"../portal/_LayerBase.js";import{WellKnownBasemap}from"../support/esri.js";import{isGroupLayerExtension}from"./extensions.js";import{isBasemap}from"./mapping.js";export function layersAreEquivalent(e,r){if(e===r)return!0;const a=isLayer(e)?LayerJson.getLayerType(e):e.layerType;if(a!==(isLayer(r)?LayerJson.getLayerType(r):r.layerType))return!1;if("OpenStreetMap"===a)return!0;if("ArcGISFeatureLayer"===a){const a=isFeatureLayer(e)?`${e.url}/${e.layerId}`:e.url,s=isFeatureLayer(r)?`${r.url}/${r.layerId}`:r.url;return e.id===r.id||e.url&&urlsAreEquivalent(a,s)}return e.id===r.id||e.url&&urlsAreEquivalent(e.url,r.url)||(e.styleUrl||r.styleUrl)&&urlsAreEquivalent(e.url||e.styleUrl,r.url||r.styleUrl)||e.key&&e.key===r.key||e.urlTemplate&&urlsAreEquivalent(e.urlTemplate,r.urlTemplate)}export function basemapsAreEquivalent(e,r){var a,s,t,i,l,n,o,c;if(e===r)return!0;if(!e||!r)return!1;let y,p,d,u;return isBasemap(e)?(y=e.baseLayers.toArray(),d=e.referenceLayers.toArray()):(y=null!==(s=null===(a=e.baseMapLayers)||void 0===a?void 0:a.filter((e=>!e.isReference)))&&void 0!==s?s:[],d=null!==(i=null===(t=e.baseMapLayers)||void 0===t?void 0:t.filter((e=>e.isReference)))&&void 0!==i?i:[]),isBasemap(r)?(p=r.baseLayers.toArray(),u=r.referenceLayers.toArray()):(p=null!==(n=null===(l=r.baseMapLayers)||void 0===l?void 0:l.filter((e=>!e.isReference)))&&void 0!==n?n:[],u=null!==(c=null===(o=r.baseMapLayers)||void 0===o?void 0:o.filter((e=>e.isReference)))&&void 0!==c?c:[]),y.length===p.length&&y.every(((e,r)=>layersAreEquivalent(e,p[r])))&&d.length===u.length&&d.every(((e,r)=>layersAreEquivalent(e,u[r])))}export const standardBasemaps={[WellKnownBasemap.DARK_GRAY]:{baseMapLayers:[{id:"dark-gray-base-layer",title:"World Dark Gray Base",url:"https://services.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Dark_Gray_Base/MapServer",layerType:"ArcGISTiledMapServiceLayer",showLegend:!1},{isReference:!0,id:"dark-gray-reference-layer",title:"World Dark Gray Reference",url:"https://services.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Dark_Gray_Reference/MapServer",layerType:"ArcGISTiledMapServiceLayer",showLegend:!1}]},[WellKnownBasemap.DARK_GRAY_VECTOR]:{baseMapLayers:[{id:"dark-gray-base-layer",layerType:"VectorTileLayer",showLegend:!1,title:"Dark Gray Base",styleUrl:"https://cdn.arcgis.com/sharing/rest/content/items/5e9b3685f4c24d8781073dd928ebda50/resources/styles/root.json"},{id:"dark-gray-reference-layer",layerType:"VectorTileLayer",showLegend:!1,title:"Dark Gray Reference",styleUrl:"https://cdn.arcgis.com/sharing/rest/content/items/747cb7a5329c478cbe6981076cc879c5/resources/styles/root.json",isReference:!0}]},[WellKnownBasemap.GRAY]:{baseMapLayers:[{id:"gray-base-layer",title:"World Light Gray Base",url:"https://services.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer",layerType:"ArcGISTiledMapServiceLayer",showLegend:!1},{isReference:!0,id:"gray-reference-layer",title:"World Light Gray Reference",url:"https://services.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Reference/MapServer",layerType:"ArcGISTiledMapServiceLayer",showLegend:!1}]},[WellKnownBasemap.GRAY_VECTOR]:{baseMapLayers:[{id:"gray-base-layer",layerType:"VectorTileLayer",showLegend:!1,title:"Light Gray Base",styleUrl:"https://cdn.arcgis.com/sharing/rest/content/items/291da5eab3a0412593b66d384379f89f/resources/styles/root.json"},{id:"gray-reference-layer",layerType:"VectorTileLayer",showLegend:!1,title:"Light Gray Reference",styleUrl:"https://cdn.arcgis.com/sharing/rest/content/items/1768e8369a214dfab4e2167d5c5f2454/resources/styles/root.json",isReference:!0}]},[WellKnownBasemap.HYBRID]:{baseMapLayers:[{id:"hybrid-base-layer",layerType:"ArcGISTiledMapServiceLayer",showLegend:!1,url:"https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer",title:"World Imagery"},{id:"hybrid-reference-layer",layerType:"ArcGISTiledMapServiceLayer",showLegend:!1,url:"https://services.arcgisonline.com/ArcGIS/rest/services/Reference/World_Boundaries_and_Places/MapServer",title:"World Boundaries and Places",isReference:!0}]},[WellKnownBasemap.HYBRID_VECTOR]:{baseMapLayers:[{id:"hybrid-base-layer",layerType:"ArcGISTiledMapServiceLayer",showLegend:!1,url:"https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer",title:"World Imagery"},{id:"hybrid-reference-layer",layerType:"VectorTileLayer",showLegend:!1,title:"Hybrid Reference Layer",styleUrl:"https://cdn.arcgis.com/sharing/rest/content/items/30d6b8271e1849cd9c3042060001f425/resources/styles/root.json",isReference:!0}]},[WellKnownBasemap.NATIONAL_GEOGRAPHIC]:{baseMapLayers:[{id:"national-geographic-base-layer",title:"NatGeo World Map",url:"https://services.arcgisonline.com/ArcGIS/rest/services/NatGeo_World_Map/MapServer",layerType:"ArcGISTiledMapServiceLayer",showLegend:!1}]},[WellKnownBasemap.OCEANS]:{baseMapLayers:[{id:"oceans-base-layer",layerType:"ArcGISTiledMapServiceLayer",showLegend:!1,url:"https://services.arcgisonline.com/arcgis/rest/services/Ocean/World_Ocean_Base/MapServer",title:"World Ocean Base"},{id:"oceans-reference-layer",layerType:"ArcGISTiledMapServiceLayer",showLegend:!1,title:"World Ocean Reference",url:"https://services.arcgisonline.com/arcgis/rest/services/Ocean/World_Ocean_Reference/MapServer",isReference:!0}]},[WellKnownBasemap.OCEANS_VECTOR]:{baseMapLayers:[{id:"oceans-base-layer",layerType:"ArcGISTiledMapServiceLayer",showLegend:!1,url:"https://services.arcgisonline.com/arcgis/rest/services/Ocean/World_Ocean_Base/MapServer",title:"World Ocean Base"},{id:"oceans-reference-layer",layerType:"VectorTileLayer",showLegend:!1,title:"World Ocean Reference",styleUrl:"https://cdn.arcgis.com/sharing/rest/content/items/89860a5baf424f3ea0c655115faababe/resources/styles/root.json",isReference:!0}]},[WellKnownBasemap.OPEN_STREET_MAP]:{baseMapLayers:[{id:"osm-base-layer",layerType:"OpenStreetMap",showLegend:!1,title:"OpenStreetMap"}]},[WellKnownBasemap.OPEN_STREET_MAP_VECTOR]:{baseMapLayers:[{id:"osm-base-layer",layerType:"VectorTileLayer",showLegend:!1,title:"OpenStreetMap",styleUrl:"https://cdn.arcgis.com/sharing/rest/content/items/3e1a00aeae81496587988075fe529f71/resources/styles/root.json"}]},[WellKnownBasemap.SATELLITE]:{baseMapLayers:[{id:"satellite-base-layer",title:"World Imagery",url:"https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer",layerType:"ArcGISTiledMapServiceLayer",showLegend:!1}]},[WellKnownBasemap.STREETS]:{baseMapLayers:[{id:"streets-base-layer",title:"World Street Map",url:"https://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer",layerType:"ArcGISTiledMapServiceLayer",showLegend:!1}]},[WellKnownBasemap.STREETS_NAVIGATION_VECTOR]:{baseMapLayers:[{id:"streets-navigation-vector-base-layer",title:"World Streets Navigation",layerType:"VectorTileLayer",showLegend:!1,styleUrl:"https://cdn.arcgis.com/sharing/rest/content/items/63c47b7177f946b49902c24129b87252/resources/styles/root.json"}]},[WellKnownBasemap.STREETS_NIGHT_VECTOR]:{baseMapLayers:[{id:"streets-night-vector-base-layer",title:"World Streets Night",layerType:"VectorTileLayer",showLegend:!1,styleUrl:"https://cdn.arcgis.com/sharing/rest/content/items/86f556a2d1fd468181855a35e344567f/resources/styles/root.json"}]},[WellKnownBasemap.STREETS_RELIEF_VECTOR]:{baseMapLayers:[{id:"world-hillshade-layer",title:"World Hillshade",url:"https://services.arcgisonline.com/arcgis/rest/services/Elevation/World_Hillshade/MapServer",layerType:"ArcGISTiledMapServiceLayer",showLegend:!1},{id:"streets-relief-vector-base-layer",title:"World Streets Relief",layerType:"VectorTileLayer",showLegend:!1,styleUrl:"https://cdn.arcgis.com/sharing/rest/content/items/b266e6d17fc345b498345613930fbd76/resources/styles/root.json"}]},[WellKnownBasemap.STREETS_VECTOR]:{baseMapLayers:[{id:"streets-vector-base-layer",title:"World Streets",layerType:"VectorTileLayer",showLegend:!1,styleUrl:"https://cdn.arcgis.com/sharing/rest/content/items/de26a3cf4cc9451298ea173c4b324736/resources/styles/root.json"}]},[WellKnownBasemap.TERRAIN]:{baseMapLayers:[{id:"terrain-base-layer",layerType:"ArcGISTiledMapServiceLayer",showLegend:!1,url:"https://services.arcgisonline.com/ArcGIS/rest/services/World_Terrain_Base/MapServer",title:"World Terrain Base"},{id:"terrain-reference-layer",layerType:"ArcGISTiledMapServiceLayer",showLegend:!1,url:"https://services.arcgisonline.com/ArcGIS/rest/services/Reference/World_Reference_Overlay/MapServer",title:"World Terrain Reference",isReference:!0}]},[WellKnownBasemap.TERRAIN_VECTOR]:{baseMapLayers:[{id:"world-hillshade",layerType:"ArcGISTiledMapServiceLayer",showLegend:!1,url:"https://services.arcgisonline.com/arcgis/rest/services/Elevation/World_Hillshade/MapServer",title:"World Hillshade"},{id:"terrain-base-layer",layerType:"VectorTileLayer",showLegend:!1,title:"World Terrain Base",styleUrl:"https://cdn.arcgis.com/sharing/rest/content/items/33064a20de0c48d2bb61efa8faca93a8/resources/styles/root.json"},{id:"terrain-reference-layer",layerType:"VectorTileLayer",showLegend:!1,title:"World Terrain Reference",styleUrl:"https://cdn.arcgis.com/sharing/rest/content/items/14fbc125ccc9488888b014db09f35f67/resources/styles/root.json",isReference:!0}]},[WellKnownBasemap.TOPO]:{baseMapLayers:[{id:"topo-base-layer",title:"World Topo Map",url:"https://services.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer",layerType:"ArcGISTiledMapServiceLayer",showLegend:!1}]},[WellKnownBasemap.TOPO_VECTOR]:{baseMapLayers:[{id:"world-hillshade-layer",title:"World Hillshade",url:"https://services.arcgisonline.com/arcgis/rest/services/Elevation/World_Hillshade/MapServer",layerType:"ArcGISTiledMapServiceLayer",showLegend:!1},{id:"topo-vector-base-layer",title:"World Topo",layerType:"VectorTileLayer",showLegend:!1,styleUrl:"https://cdn.arcgis.com/sharing/rest/content/items/7dc6cea0b1764a1f9af2e679f642f0f5/resources/styles/root.json"}]}};function urlsAreEquivalent(e,r){return e&&r?e.toLowerCase().replace("www.arcgis.com","cdn.arcgis.com")===r.toLowerCase().replace("www.arcgis.com","cdn.arcgis.com"):e==r}const LAYER_DECLARED_CLASS_REGEX=/^esri\.layers\.\w+Layer$/;export function isLayer(e){const r=null==e?void 0:e.declaredClass;return"string"==typeof r&&LAYER_DECLARED_CLASS_REGEX.test(r)}export function isCSVLayer(e){return"csv"===(null==e?void 0:e.type)}export function isStreamLayer(e){return"stream"===(null==e?void 0:e.type)}export function isFeatureLayerBase(e){return isCSVLayer(e)||isFeatureLayer(e)||isStreamLayer(e)}export function isFeatureLayer(e){return"feature"===(null==e?void 0:e.type)}export function isGeoRssLayer(e){return"geo-rss"===(null==e?void 0:e.type)}export function isGraphicsLayer(e){return"graphics"===(null==e?void 0:e.type)}export function isImageryLayer(e){return"imagery"===(null==e?void 0:e.type)}export function isKMLLayer(e){return"kml"===(null==e?void 0:e.type)}export function isMapImageLayer(e){return"map-image"===(null==e?void 0:e.type)}export function isOpenStreetMapLayer(e){return"open-street-map"===(null==e?void 0:e.type)}export function isWebTileLayer(e){return"web-tile"===(null==e?void 0:e.type)||"open-street-map"===(null==e?void 0:e.type)}export function isVectorTileLayer(e){return"vector-tile"===(null==e?void 0:e.type)}export function isElevationLayer(e){return"elevation"===(null==e?void 0:e.type)}export function isSceneLayer(e){return"scene"===(null==e?void 0:e.type)}export function isPointCloudLayer(e){return"point-cloud"===(null==e?void 0:e.type)}export function isIntegratedMeshLayer(e){return"integrated-mesh"===(null==e?void 0:e.type)}export function isGroupLayer(e){return"group"===(null==e?void 0:e.type)}export function isWMSLayer(e){return"wms"===(null==e?void 0:e.type)}export function isWMTSLayer(e){return"wmts"===(null==e?void 0:e.type)}export function isBuildingSceneLayer(e){return"building-scene"===(null==e?void 0:e.type)}export function isTileLayer(e){return"tile"===(null==e?void 0:e.type)}export function isImageryTileLayer(e){return"imagery-tile"===(null==e?void 0:e.type)}export function isTiledImageServiceLayer(e){return isTileLayer(e)&&isImageService(e)}export function isTiledMapServiceLayer(e){return isTileLayer(e)&&!isImageService(e)}function isImageService(e){var r,a;const s=null!==(r=e.url)&&void 0!==r?r:null===(a=e.portalItem)||void 0===a?void 0:a.url;return s&&/\/ImageServer(\/|\/?$)/i.test(s)}export function isMapImageSublayer(e){var r;return"esri.layers.support.Sublayer"===(null===(r=e)||void 0===r?void 0:r.declaredClass)}export function isKMLSublayer(e){var r;return"esri.layers.support.KMLSublayer"===(null===(r=e)||void 0===r?void 0:r.declaredClass)}export function isWMTSSublayer(e){var r;return"esri.layers.support.WMTSSublayer"===(null===(r=e)||void 0===r?void 0:r.declaredClass)}export function isWMSSublayer(e){var r;return"esri.layers.support.WMSSublayer"===(null===(r=e)||void 0===r?void 0:r.declaredClass)}export function isBuildingComponentSublayer(e){const r=e;return"building-component"===(null==r?void 0:r.type)}export function isBuildingGroupSublayer(e){const r=e;return"building-group"===(null==r?void 0:r.type)}export function isLayerWithLegendEnabledProperty(e){return!(isBuildingSceneLayer(e)||isCSVLayer(e)||isElevationLayer(e)||isGraphicsLayer(e)||isGroupLayer(e)||isIntegratedMeshLayer(e)||isKMLLayer(e)||isOpenStreetMapLayer(e)||isPointCloudLayer(e)||isWebTileLayer(e)||isWMTSLayer(e)||isVectorTileLayer(e))}export function hasMmapLayer(e){return e.some((e=>{var r;const a=e._deferredLayerProperties;return!("string"==typeof(null==a?void 0:a.$ref)||!(null===(r=null==a?void 0:a.$ref)||void 0===r?void 0:r.path))||!!isGroupLayerExtension(e)&&hasMmapLayer(e.layerExtensions.toArray())}))}
|
|
1
|
+
import{LayerBase as LayerJson}from"../portal/_LayerBase.js";import{WellKnownBasemap}from"../support/esri.js";import{isGroupLayerExtension}from"./extensions.js";import{isBasemap}from"./mapping.js";export function layersAreEquivalent(e,r){if(e===r)return!0;const a=isLayer(e)?LayerJson.getLayerType(e):e.layerType;if(a!==(isLayer(r)?LayerJson.getLayerType(r):r.layerType))return!1;if("OpenStreetMap"===a)return!0;if("ArcGISFeatureLayer"===a){const a=isFeatureLayer(e)?`${e.url}/${e.layerId}`:e.url,s=isFeatureLayer(r)?`${r.url}/${r.layerId}`:r.url;return e.id===r.id||e.url&&urlsAreEquivalent(a,s)}return e.id===r.id||e.url&&urlsAreEquivalent(e.url,r.url)||(e.styleUrl||r.styleUrl)&&urlsAreEquivalent(e.url||e.styleUrl,r.url||r.styleUrl)||e.key&&e.key===r.key||e.urlTemplate&&urlsAreEquivalent(e.urlTemplate,r.urlTemplate)}export function basemapsAreEquivalent(e,r){var a,s,t,i,l,n,o,c;if(e===r)return!0;if(!e||!r)return!1;let y,p,d,u;return isBasemap(e)?(y=e.baseLayers.toArray(),d=e.referenceLayers.toArray()):(y=null!==(s=null===(a=e.baseMapLayers)||void 0===a?void 0:a.filter((e=>!e.isReference)))&&void 0!==s?s:[],d=null!==(i=null===(t=e.baseMapLayers)||void 0===t?void 0:t.filter((e=>e.isReference)))&&void 0!==i?i:[]),isBasemap(r)?(p=r.baseLayers.toArray(),u=r.referenceLayers.toArray()):(p=null!==(n=null===(l=r.baseMapLayers)||void 0===l?void 0:l.filter((e=>!e.isReference)))&&void 0!==n?n:[],u=null!==(c=null===(o=r.baseMapLayers)||void 0===o?void 0:o.filter((e=>e.isReference)))&&void 0!==c?c:[]),y.length===p.length&&y.every(((e,r)=>layersAreEquivalent(e,p[r])))&&d.length===u.length&&d.every(((e,r)=>layersAreEquivalent(e,u[r])))}export const standardBasemaps={[WellKnownBasemap.DARK_GRAY]:{baseMapLayers:[{id:"dark-gray-base-layer",title:"World Dark Gray Base",url:"https://services.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Dark_Gray_Base/MapServer",layerType:"ArcGISTiledMapServiceLayer",showLegend:!1},{isReference:!0,id:"dark-gray-reference-layer",title:"World Dark Gray Reference",url:"https://services.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Dark_Gray_Reference/MapServer",layerType:"ArcGISTiledMapServiceLayer",showLegend:!1}]},[WellKnownBasemap.DARK_GRAY_VECTOR]:{baseMapLayers:[{id:"dark-gray-base-layer",layerType:"VectorTileLayer",showLegend:!1,title:"Dark Gray Base",styleUrl:"https://cdn.arcgis.com/sharing/rest/content/items/5e9b3685f4c24d8781073dd928ebda50/resources/styles/root.json"},{id:"dark-gray-reference-layer",layerType:"VectorTileLayer",showLegend:!1,title:"Dark Gray Reference",styleUrl:"https://cdn.arcgis.com/sharing/rest/content/items/747cb7a5329c478cbe6981076cc879c5/resources/styles/root.json",isReference:!0}]},[WellKnownBasemap.GRAY]:{baseMapLayers:[{id:"gray-base-layer",title:"World Light Gray Base",url:"https://services.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer",layerType:"ArcGISTiledMapServiceLayer",showLegend:!1},{isReference:!0,id:"gray-reference-layer",title:"World Light Gray Reference",url:"https://services.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Reference/MapServer",layerType:"ArcGISTiledMapServiceLayer",showLegend:!1}]},[WellKnownBasemap.GRAY_VECTOR]:{baseMapLayers:[{id:"gray-base-layer",layerType:"VectorTileLayer",showLegend:!1,title:"Light Gray Base",styleUrl:"https://cdn.arcgis.com/sharing/rest/content/items/291da5eab3a0412593b66d384379f89f/resources/styles/root.json"},{id:"gray-reference-layer",layerType:"VectorTileLayer",showLegend:!1,title:"Light Gray Reference",styleUrl:"https://cdn.arcgis.com/sharing/rest/content/items/1768e8369a214dfab4e2167d5c5f2454/resources/styles/root.json",isReference:!0}]},[WellKnownBasemap.HYBRID]:{baseMapLayers:[{id:"hybrid-base-layer",layerType:"ArcGISTiledMapServiceLayer",showLegend:!1,url:"https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer",title:"World Imagery"},{id:"hybrid-reference-layer",layerType:"ArcGISTiledMapServiceLayer",showLegend:!1,url:"https://services.arcgisonline.com/ArcGIS/rest/services/Reference/World_Boundaries_and_Places/MapServer",title:"World Boundaries and Places",isReference:!0}]},[WellKnownBasemap.HYBRID_VECTOR]:{baseMapLayers:[{id:"hybrid-base-layer",layerType:"ArcGISTiledMapServiceLayer",showLegend:!1,url:"https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer",title:"World Imagery"},{id:"hybrid-reference-layer",layerType:"VectorTileLayer",showLegend:!1,title:"Hybrid Reference Layer",styleUrl:"https://cdn.arcgis.com/sharing/rest/content/items/30d6b8271e1849cd9c3042060001f425/resources/styles/root.json",isReference:!0}]},[WellKnownBasemap.NATIONAL_GEOGRAPHIC]:{baseMapLayers:[{id:"national-geographic-base-layer",title:"NatGeo World Map",url:"https://services.arcgisonline.com/ArcGIS/rest/services/NatGeo_World_Map/MapServer",layerType:"ArcGISTiledMapServiceLayer",showLegend:!1}]},[WellKnownBasemap.OCEANS]:{baseMapLayers:[{id:"oceans-base-layer",layerType:"ArcGISTiledMapServiceLayer",showLegend:!1,url:"https://services.arcgisonline.com/arcgis/rest/services/Ocean/World_Ocean_Base/MapServer",title:"World Ocean Base"},{id:"oceans-reference-layer",layerType:"ArcGISTiledMapServiceLayer",showLegend:!1,title:"World Ocean Reference",url:"https://services.arcgisonline.com/arcgis/rest/services/Ocean/World_Ocean_Reference/MapServer",isReference:!0}]},[WellKnownBasemap.OCEANS_VECTOR]:{baseMapLayers:[{id:"oceans-base-layer",layerType:"ArcGISTiledMapServiceLayer",showLegend:!1,url:"https://services.arcgisonline.com/arcgis/rest/services/Ocean/World_Ocean_Base/MapServer",title:"World Ocean Base"},{id:"oceans-reference-layer",layerType:"VectorTileLayer",showLegend:!1,title:"World Ocean Reference",styleUrl:"https://cdn.arcgis.com/sharing/rest/content/items/89860a5baf424f3ea0c655115faababe/resources/styles/root.json",isReference:!0}]},[WellKnownBasemap.OPEN_STREET_MAP]:{baseMapLayers:[{id:"osm-base-layer",layerType:"OpenStreetMap",showLegend:!1,title:"OpenStreetMap"}]},[WellKnownBasemap.OPEN_STREET_MAP_VECTOR]:{baseMapLayers:[{id:"osm-base-layer",layerType:"VectorTileLayer",showLegend:!1,title:"OpenStreetMap",styleUrl:"https://cdn.arcgis.com/sharing/rest/content/items/3e1a00aeae81496587988075fe529f71/resources/styles/root.json"}]},[WellKnownBasemap.SATELLITE]:{baseMapLayers:[{id:"satellite-base-layer",title:"World Imagery",url:"https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer",layerType:"ArcGISTiledMapServiceLayer",showLegend:!1}]},[WellKnownBasemap.STREETS]:{baseMapLayers:[{id:"streets-base-layer",title:"World Street Map",url:"https://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer",layerType:"ArcGISTiledMapServiceLayer",showLegend:!1}]},[WellKnownBasemap.STREETS_NAVIGATION_VECTOR]:{baseMapLayers:[{id:"streets-navigation-vector-base-layer",title:"World Navigation Map",layerType:"VectorTileLayer",showLegend:!1,styleUrl:"https://cdn.arcgis.com/sharing/rest/content/items/63c47b7177f946b49902c24129b87252/resources/styles/root.json"}]},[WellKnownBasemap.STREETS_NIGHT_VECTOR]:{baseMapLayers:[{id:"streets-night-vector-base-layer",title:"World Street Map (Night)",layerType:"VectorTileLayer",showLegend:!1,styleUrl:"https://cdn.arcgis.com/sharing/rest/content/items/86f556a2d1fd468181855a35e344567f/resources/styles/root.json"}]},[WellKnownBasemap.STREETS_RELIEF_VECTOR]:{baseMapLayers:[{id:"world-hillshade-layer",title:"World Hillshade",url:"https://services.arcgisonline.com/arcgis/rest/services/Elevation/World_Hillshade/MapServer",layerType:"ArcGISTiledMapServiceLayer",showLegend:!1},{id:"streets-relief-vector-base-layer",title:"World Streets Relief",layerType:"VectorTileLayer",showLegend:!1,styleUrl:"https://cdn.arcgis.com/sharing/rest/content/items/b266e6d17fc345b498345613930fbd76/resources/styles/root.json"}]},[WellKnownBasemap.STREETS_VECTOR]:{baseMapLayers:[{id:"streets-vector-base-layer",title:"World Street Map",layerType:"VectorTileLayer",showLegend:!1,styleUrl:"https://cdn.arcgis.com/sharing/rest/content/items/de26a3cf4cc9451298ea173c4b324736/resources/styles/root.json"}]},[WellKnownBasemap.TERRAIN]:{baseMapLayers:[{id:"terrain-base-layer",layerType:"ArcGISTiledMapServiceLayer",showLegend:!1,url:"https://services.arcgisonline.com/ArcGIS/rest/services/World_Terrain_Base/MapServer",title:"World Terrain Base"},{id:"terrain-reference-layer",layerType:"ArcGISTiledMapServiceLayer",showLegend:!1,url:"https://services.arcgisonline.com/ArcGIS/rest/services/Reference/World_Reference_Overlay/MapServer",title:"World Terrain Reference",isReference:!0}]},[WellKnownBasemap.TERRAIN_VECTOR]:{baseMapLayers:[{id:"world-hillshade",layerType:"ArcGISTiledMapServiceLayer",showLegend:!1,url:"https://services.arcgisonline.com/arcgis/rest/services/Elevation/World_Hillshade/MapServer",title:"World Hillshade"},{id:"terrain-base-layer",layerType:"VectorTileLayer",showLegend:!1,title:"World Terrain Base",styleUrl:"https://cdn.arcgis.com/sharing/rest/content/items/33064a20de0c48d2bb61efa8faca93a8/resources/styles/root.json"},{id:"terrain-reference-layer",layerType:"VectorTileLayer",showLegend:!1,title:"World Terrain Reference",styleUrl:"https://cdn.arcgis.com/sharing/rest/content/items/14fbc125ccc9488888b014db09f35f67/resources/styles/root.json",isReference:!0}]},[WellKnownBasemap.TOPO]:{baseMapLayers:[{id:"topo-base-layer",title:"World Topo Map",url:"https://services.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer",layerType:"ArcGISTiledMapServiceLayer",showLegend:!1}]},[WellKnownBasemap.TOPO_VECTOR]:{baseMapLayers:[{id:"world-hillshade-layer",title:"World Hillshade",url:"https://services.arcgisonline.com/arcgis/rest/services/Elevation/World_Hillshade/MapServer",layerType:"ArcGISTiledMapServiceLayer",showLegend:!1},{id:"topo-vector-base-layer",title:"World Topographic Map",layerType:"VectorTileLayer",showLegend:!1,styleUrl:"https://cdn.arcgis.com/sharing/rest/content/items/7dc6cea0b1764a1f9af2e679f642f0f5/resources/styles/root.json"}]}};function urlsAreEquivalent(e,r){return e&&r?e.toLowerCase().replace("www.arcgis.com","cdn.arcgis.com")===r.toLowerCase().replace("www.arcgis.com","cdn.arcgis.com"):e==r}const LAYER_DECLARED_CLASS_REGEX=/^esri\.layers\.\w+Layer$/;export function isLayer(e){const r=null==e?void 0:e.declaredClass;return"string"==typeof r&&LAYER_DECLARED_CLASS_REGEX.test(r)}export function isCSVLayer(e){return"csv"===(null==e?void 0:e.type)}export function isStreamLayer(e){return"stream"===(null==e?void 0:e.type)}export function isFeatureLayerBase(e){return isCSVLayer(e)||isFeatureLayer(e)||isStreamLayer(e)}export function isFeatureLayer(e){return"feature"===(null==e?void 0:e.type)}export function isGeoRssLayer(e){return"geo-rss"===(null==e?void 0:e.type)}export function isGraphicsLayer(e){return"graphics"===(null==e?void 0:e.type)}export function isImageryLayer(e){return"imagery"===(null==e?void 0:e.type)}export function isKMLLayer(e){return"kml"===(null==e?void 0:e.type)}export function isMapImageLayer(e){return"map-image"===(null==e?void 0:e.type)}export function isOpenStreetMapLayer(e){return"open-street-map"===(null==e?void 0:e.type)}export function isWebTileLayer(e){return"web-tile"===(null==e?void 0:e.type)||"open-street-map"===(null==e?void 0:e.type)}export function isVectorTileLayer(e){return"vector-tile"===(null==e?void 0:e.type)}export function isElevationLayer(e){return"elevation"===(null==e?void 0:e.type)}export function isSceneLayer(e){return"scene"===(null==e?void 0:e.type)}export function isPointCloudLayer(e){return"point-cloud"===(null==e?void 0:e.type)}export function isIntegratedMeshLayer(e){return"integrated-mesh"===(null==e?void 0:e.type)}export function isGroupLayer(e){return"group"===(null==e?void 0:e.type)}export function isWMSLayer(e){return"wms"===(null==e?void 0:e.type)}export function isWMTSLayer(e){return"wmts"===(null==e?void 0:e.type)}export function isBuildingSceneLayer(e){return"building-scene"===(null==e?void 0:e.type)}export function isTileLayer(e){return"tile"===(null==e?void 0:e.type)}export function isImageryTileLayer(e){return"imagery-tile"===(null==e?void 0:e.type)}export function isTiledImageServiceLayer(e){return isTileLayer(e)&&isImageService(e)}export function isTiledMapServiceLayer(e){return isTileLayer(e)&&!isImageService(e)}function isImageService(e){var r,a;const s=null!==(r=e.url)&&void 0!==r?r:null===(a=e.portalItem)||void 0===a?void 0:a.url;return s&&/\/ImageServer(\/|\/?$)/i.test(s)}export function isMapImageSublayer(e){var r;return"esri.layers.support.Sublayer"===(null===(r=e)||void 0===r?void 0:r.declaredClass)}export function isKMLSublayer(e){var r;return"esri.layers.support.KMLSublayer"===(null===(r=e)||void 0===r?void 0:r.declaredClass)}export function isWMTSSublayer(e){var r;return"esri.layers.support.WMTSSublayer"===(null===(r=e)||void 0===r?void 0:r.declaredClass)}export function isWMSSublayer(e){var r;return"esri.layers.support.WMSSublayer"===(null===(r=e)||void 0===r?void 0:r.declaredClass)}export function isBuildingComponentSublayer(e){const r=e;return"building-component"===(null==r?void 0:r.type)}export function isBuildingGroupSublayer(e){const r=e;return"building-group"===(null==r?void 0:r.type)}export function isLayerWithLegendEnabledProperty(e){return!(isBuildingSceneLayer(e)||isCSVLayer(e)||isElevationLayer(e)||isGraphicsLayer(e)||isGroupLayer(e)||isIntegratedMeshLayer(e)||isKMLLayer(e)||isOpenStreetMapLayer(e)||isPointCloudLayer(e)||isWebTileLayer(e)||isWMTSLayer(e)||isVectorTileLayer(e))}export function hasMmapLayer(e){return e.some((e=>{var r;const a=e._deferredLayerProperties;return!("string"==typeof(null==a?void 0:a.$ref)||!(null===(r=null==a?void 0:a.$ref)||void 0===r?void 0:r.path))||!!isGroupLayerExtension(e)&&hasMmapLayer(e.layerExtensions.toArray())}))}
|
package/version.d.ts
CHANGED
package/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const version="34.2.
|
|
1
|
+
export const version="34.2.1";
|