@vertigis/arcgis-extensions 53.4.0 → 53.5.0

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.
Files changed (210) hide show
  1. package/AppConfig.schema.json +7 -0
  2. package/README.md +0 -1
  3. package/data/ArcGISServiceTableExtension.js +1 -1
  4. package/data/Feature.js +1 -1
  5. package/data/FeatureList.js +1 -1
  6. package/data/FeatureSettings.d.ts +1 -0
  7. package/data/FeatureSettings.js +1 -1
  8. package/data/FeatureSourceBase.d.ts +1 -0
  9. package/data/FeatureSourceBase.js +1 -1
  10. package/data/FieldExtension.d.ts +1 -0
  11. package/data/FieldExtension.js +1 -1
  12. package/data/PopupContentExtension.d.ts +1 -0
  13. package/data/PopupContentExtension.js +1 -1
  14. package/data/Schema.d.ts +4 -0
  15. package/data/Schema.js +1 -1
  16. package/data/_TableExtension.d.ts +6 -1
  17. package/data/_TableExtension.js +1 -1
  18. package/docs/html/assets/highlight.css +6 -6
  19. package/docs/html/assets/navigation.js +1 -1
  20. package/docs/html/assets/search.js +1 -1
  21. package/docs/html/classes/Entity.EntityBase.html +4 -3
  22. package/docs/html/classes/data_ArcGISServiceTableExtension.ArcGISServiceTableExtension.html +4 -3
  23. package/docs/html/classes/data_Attachment.Attachment.html +4 -3
  24. package/docs/html/classes/data_Feature.Feature.html +4 -3
  25. package/docs/html/classes/data_FeatureList.FeatureList.html +13 -34
  26. package/docs/html/classes/data_FeatureSettings.FeatureSettings.html +6 -4
  27. package/docs/html/classes/data_FeatureSourceBase.FeatureSourceBase.html +7 -6
  28. package/docs/html/classes/data_FeatureSourceBase.RelationshipCollection.html +13 -34
  29. package/docs/html/classes/data_FeatureStream.FeatureStream.html +4 -3
  30. package/docs/html/classes/data_FieldExtension.FieldExtension.html +7 -6
  31. package/docs/html/classes/data_PopupContentExtension.PopupContentExtension.html +6 -5
  32. package/docs/html/classes/data_RelationshipBase.RelationshipBase.html +4 -3
  33. package/docs/html/classes/data_Schema.Schema.html +7 -4
  34. package/docs/html/classes/data_TaskSettings.TaskSettings.html +6 -4
  35. package/docs/html/classes/data__TableExtension.TableExtension.html +4 -3
  36. package/docs/html/classes/data__TableExtension.TableFeatureSettings.html +6 -4
  37. package/docs/html/classes/data__TableExtension.TableSchema.html +8 -5
  38. package/docs/html/classes/layer_preset_LayerPreset.LayerPreset.html +4 -3
  39. package/docs/html/classes/mapping_ArcGISSublayerExtension.ArcGISSublayerExtension.html +4 -6
  40. package/docs/html/classes/mapping_ArcGISSublayerExtension.ArcGISSublayerRelationshipCollection.html +13 -34
  41. package/docs/html/classes/mapping_BasemapExtension.BasemapExtension.html +5 -7
  42. package/docs/html/classes/mapping_Bookmark.Bookmark.html +4 -3
  43. package/docs/html/classes/mapping_BuildingComponentSublayerExtension.BuildingComponentSublayerExtension.html +4 -6
  44. package/docs/html/classes/mapping_BuildingComponentSublayerExtension.BuildingComponentSublayerSchema.html +7 -4
  45. package/docs/html/classes/mapping_BuildingGroupSublayerExtension.BuildingGroupSublayerExtension.html +4 -6
  46. package/docs/html/classes/mapping_BuildingGroupSublayerExtension.BuildingGroupSublayerSchema.html +7 -4
  47. package/docs/html/classes/mapping_BuildingSceneLayerExtension.BuildingSceneLayerExtension.html +5 -8
  48. package/docs/html/classes/mapping_BuildingSceneLayerExtension.BuildingSceneLayerReadOnlySchema.html +7 -4
  49. package/docs/html/classes/mapping_BuildingSublayerExtension.BuildingSublayerExtension.html +4 -6
  50. package/docs/html/classes/mapping_BuildingSublayerExtension.BuildingSublayerFeatureSettings.html +6 -4
  51. package/docs/html/classes/mapping_BuildingSublayerExtension.BuildingSublayerSchema.html +7 -4
  52. package/docs/html/classes/mapping_CSVLayerExtension.CSVLayerExtension.html +5 -8
  53. package/docs/html/classes/mapping_ElevationLayerExtension.ElevationLayerExtension.html +5 -8
  54. package/docs/html/classes/mapping_FeatureCollectionLayerExtension.FeatureCollectionLayerExtension.html +5 -8
  55. package/docs/html/classes/mapping_FeatureLayerExtension.FeatureLayerExtension.html +5 -8
  56. package/docs/html/classes/mapping_FeatureLayerExtensionBase.FeatureLayerExtensionBase.html +5 -8
  57. package/docs/html/classes/mapping_FeatureLayerExtensionBase.FeatureLayerReadOnlySchema.html +7 -4
  58. package/docs/html/classes/mapping_FeatureLayerExtensionBase.FeatureLayerSchema.html +7 -4
  59. package/docs/html/classes/mapping_GeoJSONLayerExtension.GeoJSONLayerExtension.html +5 -8
  60. package/docs/html/classes/mapping_GeoRSSLayerExtension.GeoRSSLayerExtension.html +5 -8
  61. package/docs/html/classes/mapping_GraphicsLayerExtension.GraphicsLayerExtension.html +5 -8
  62. package/docs/html/classes/mapping_GroundExtension.GroundExtension.html +5 -7
  63. package/docs/html/classes/mapping_GroupLayerExtension.GroupLayerExtension.html +5 -8
  64. package/docs/html/classes/mapping_GroupLayerExtension.GroupLayerExtensionCollection.html +14 -35
  65. package/docs/html/classes/mapping_ImageryLayerExtension.ImageryLayerExtension.html +5 -8
  66. package/docs/html/classes/mapping_ImageryTileLayerExtension.ImageryTileLayerExtension.html +5 -8
  67. package/docs/html/classes/mapping_IntegratedMeshLayerExtension.IntegratedMeshLayerExtension.html +5 -8
  68. package/docs/html/classes/mapping_KMLLayerExtension.KMLLayerExtension.html +5 -8
  69. package/docs/html/classes/mapping_KMLSublayerExtension.KMLSublayerExtension.html +4 -6
  70. package/docs/html/classes/mapping_MapConstraints.MapConstraints.html +6 -4
  71. package/docs/html/classes/mapping_MapExtension.MapExtension.html +12 -7
  72. package/docs/html/classes/mapping_MapImageLayerExtension.MapImageLayerExtension.html +5 -8
  73. package/docs/html/classes/mapping_MapImageSublayerExtension.MapImageSublayerExtension.html +4 -6
  74. package/docs/html/classes/mapping_MapNotesLayerExtension.MapNotesLayerExtension.html +5 -8
  75. package/docs/html/classes/mapping_MapNotesSublayerExtension.MapNotesSublayerExtension.html +4 -6
  76. package/docs/html/classes/mapping_MapNotesSublayerExtension.MapNotesSublayerExtensionSchema.html +7 -4
  77. package/docs/html/classes/mapping_MediaLayerExtension.MediaLayerExtension.html +5 -8
  78. package/docs/html/classes/mapping_OpenStreetMapLayerExtension.OpenStreetMapLayerExtension.html +5 -8
  79. package/docs/html/classes/mapping_PointCloudLayerExtension.PointCloudLayerExtension.html +5 -8
  80. package/docs/html/classes/mapping_RouteLayerExtension.RouteLayerExtension.html +5 -8
  81. package/docs/html/classes/mapping_RouteLayerExtension.RouteLayerExtensionSchema.html +7 -4
  82. package/docs/html/classes/mapping_SceneLayerExtension.SceneLayerExtension.html +5 -8
  83. package/docs/html/classes/mapping_StreamLayerExtension.StreamLayerExtension.html +5 -8
  84. package/docs/html/classes/mapping_StreamLayerExtension.StreamLayerSchema.html +7 -4
  85. package/docs/html/classes/mapping_SubtypeGroupLayerExtension.SubtypeGroupLayerExtension.html +5 -8
  86. package/docs/html/classes/mapping_SubtypeGroupLayerExtension.SubtypeGroupLayerRelationshipCollection.html +13 -34
  87. package/docs/html/classes/mapping_SubtypeGroupLayerExtension.SubtypeGroupLayerSchema.html +7 -4
  88. package/docs/html/classes/mapping_SubtypeSublayerExtension.SubtypeSublayerExtension.html +4 -6
  89. package/docs/html/classes/mapping_SubtypeSublayerExtension.SubtypeSublayerRelationshipCollection.html +13 -34
  90. package/docs/html/classes/mapping_SubtypeSublayerExtension.SubtypeSublayerSchema.html +7 -4
  91. package/docs/html/classes/mapping_TileLayerExtension.TileLayerExtension.html +5 -8
  92. package/docs/html/classes/mapping_TileSublayerExtension.TileSublayerExtension.html +4 -6
  93. package/docs/html/classes/mapping_UnsupportedLayerExtension.UnsupportedLayerExtension.html +5 -8
  94. package/docs/html/classes/mapping_VectorTileLayerExtension.VectorTileLayerExtension.html +5 -8
  95. package/docs/html/classes/mapping_WFSLayerExtension.WFSLayerExtension.html +5 -8
  96. package/docs/html/classes/mapping_WMSLayerExtension.WMSLayerExtension.html +5 -8
  97. package/docs/html/classes/mapping_WMSSublayerExtension.WMSSublayerExtension.html +4 -6
  98. package/docs/html/classes/mapping_WMTSLayerExtension.WMTSLayerExtension.html +5 -8
  99. package/docs/html/classes/mapping_WebTileLayerExtension.WebTileLayerExtension.html +5 -8
  100. package/docs/html/classes/mapping__LayerExtension.LayerExtension.html +5 -8
  101. package/docs/html/classes/mapping__LayerExtension.LayerExtensionReadOnlySchema.html +7 -4
  102. package/docs/html/classes/mapping__LayerExtension.LayerExtensionSchema.html +7 -4
  103. package/docs/html/classes/mapping__LayerExtensionCollectionImpl.LayerExtensionCollectionImpl.html +14 -35
  104. package/docs/html/classes/mapping__SublayerExtension.SubSublayerExtensionCollection.html +14 -35
  105. package/docs/html/classes/mapping__SublayerExtension.SublayerExtension.html +4 -6
  106. package/docs/html/classes/mapping__SublayerExtension.SublayerSchema.html +7 -4
  107. package/docs/html/classes/mapping_support_ArrayWrappedCollection.ArrayWrappedCollection.html +13 -34
  108. package/docs/html/classes/mapping_support__LayerExtensionCollection.LayerExtensionCollectionBase.html +16 -37
  109. package/docs/html/classes/mapping_support__SublayerExtensionCollection.SublayerExtensionCollectionBase.html +16 -37
  110. package/docs/html/classes/menus_Menu.Menu.html +4 -3
  111. package/docs/html/classes/menus_MenuItem.MenuItem.html +4 -3
  112. package/docs/html/classes/support_FormatSettings.FormatSettings.html +6 -4
  113. package/docs/html/classes/support_HandlesMixin.HandlesMixin.html +5 -0
  114. package/docs/html/classes/support_InitializableBase.InitializableBase.html +10 -9
  115. package/docs/html/classes/support_InitializableCollectionProxy.InitializableCollectionProxy.html +15 -35
  116. package/docs/html/classes/support_ReadOnlyInitializableCollection.ReadOnlyInitializableCollection.html +15 -35
  117. package/docs/html/classes/support_Settings.Settings.html +10 -8
  118. package/docs/html/classes/support__ArcGISRelationshipCollection.ArcGISRelationshipCollection.html +13 -34
  119. package/docs/html/classes/tasks_geocoding_ArcGISGeocoder.ArcGISGeocoder.html +3 -2
  120. package/docs/html/classes/tasks_geocoding_Geocoder.Geocoder.html +3 -2
  121. package/docs/html/classes/tasks_identify_IdentifyService.IdentifyService.html +4 -3
  122. package/docs/html/classes/tasks_query_ArcGISRelationship.ArcGISRelationship.html +4 -3
  123. package/docs/html/classes/tasks_query_QueryBasedRelationship.QueryBasedRelationship.html +4 -3
  124. package/docs/html/classes/tasks_query_QueryService.QueryService.html +4 -3
  125. package/docs/html/classes/tasks_search_SearchService.SearchService.html +4 -3
  126. package/docs/html/classes/utilities_CaseInsensitiveObservableMap.CaseInsensitiveObservableMap.html +6 -4
  127. package/docs/html/classes/utilities_CollectionProxy.CollectionProxy.html +16 -36
  128. package/docs/html/classes/utilities_CopyOnWriteCollection.CopyOnWriteCollection.html +13 -34
  129. package/docs/html/classes/utilities_MapTransformCollection.MapTransformCollection.html +13 -34
  130. package/docs/html/classes/utilities_ObservableMap.ObservableMap.html +8 -6
  131. package/docs/html/classes/utilities_ReadOnlyCollection.ReadOnlyCollection.html +15 -35
  132. package/docs/html/classes/utilities_ReadOnlyMap.ReadOnlyMap.html +6 -4
  133. package/docs/html/classes/utilities__ReferenceCountedHandle.default.html +3 -1
  134. package/docs/html/functions/support_HandlesMixin.handles.html +4 -0
  135. package/docs/html/functions/support_observableUtils.observable-1.html +3 -3
  136. package/docs/html/functions/support_observableUtils.onWatch.html +1 -1
  137. package/docs/html/functions/support_observableUtils.watch.html +1 -1
  138. package/docs/html/functions/support_observableUtils.watchEach.html +1 -1
  139. package/docs/html/functions/utilities__layers.groundsAreEquivalent.html +4 -0
  140. package/docs/html/functions/utilities_checkArg.checkArg.html +1 -1
  141. package/docs/html/interfaces/data_Feature.PresentableAttributes.html +6 -4
  142. package/docs/html/interfaces/data_support_attachments.AttachmentEnabledLayer.html +1 -1
  143. package/docs/html/interfaces/utilities_CollectionProxy.CollectionProxyOptions.html +4 -0
  144. package/docs/html/modules/support_HandlesMixin.html +3 -0
  145. package/docs/html/modules/utilities_CollectionProxy.html +1 -0
  146. package/docs/html/modules/utilities__layers.html +1 -0
  147. package/docs/html/modules.html +1 -0
  148. package/docs/html/variables/version.version.html +1 -1
  149. package/mapping/ArcGISSublayerExtension.js +1 -1
  150. package/mapping/BasemapExtension.d.ts +4 -6
  151. package/mapping/BasemapExtension.js +1 -1
  152. package/mapping/BuildingComponentSublayerExtension.d.ts +1 -0
  153. package/mapping/BuildingComponentSublayerExtension.js +1 -1
  154. package/mapping/BuildingSceneLayerExtension.d.ts +1 -1
  155. package/mapping/BuildingSceneLayerExtension.js +1 -1
  156. package/mapping/CSVLayerExtension.js +1 -1
  157. package/mapping/FeatureLayerExtension.js +1 -1
  158. package/mapping/FeatureLayerExtensionBase.d.ts +1 -0
  159. package/mapping/FeatureLayerExtensionBase.js +1 -1
  160. package/mapping/GeoJSONLayerExtension.js +1 -1
  161. package/mapping/GeoRSSLayerExtension.js +1 -1
  162. package/mapping/GraphicsLayerExtension.js +1 -1
  163. package/mapping/GroundExtension.d.ts +0 -6
  164. package/mapping/GroundExtension.js +1 -1
  165. package/mapping/GroupLayerExtension.d.ts +1 -0
  166. package/mapping/GroupLayerExtension.js +1 -1
  167. package/mapping/ImageryLayerExtension.js +1 -1
  168. package/mapping/MapExtension.d.ts +18 -0
  169. package/mapping/MapExtension.js +1 -1
  170. package/mapping/MapImageSublayerExtension.js +1 -1
  171. package/mapping/MapNotesSublayerExtension.js +1 -1
  172. package/mapping/PointCloudLayerExtension.js +1 -1
  173. package/mapping/RouteLayerExtension.js +1 -1
  174. package/mapping/SceneLayerExtension.js +1 -1
  175. package/mapping/StreamLayerExtension.d.ts +1 -0
  176. package/mapping/StreamLayerExtension.js +1 -1
  177. package/mapping/SubtypeGroupLayerExtension.d.ts +2 -1
  178. package/mapping/SubtypeGroupLayerExtension.js +1 -1
  179. package/mapping/SubtypeSublayerExtension.d.ts +2 -0
  180. package/mapping/SubtypeSublayerExtension.js +1 -1
  181. package/mapping/WFSLayerExtension.js +1 -1
  182. package/mapping/WMTSLayerExtension.js +1 -1
  183. package/mapping/_LayerExtension.d.ts +5 -7
  184. package/mapping/_LayerExtension.js +1 -1
  185. package/mapping/_SublayerExtension.d.ts +14 -6
  186. package/mapping/_SublayerExtension.js +1 -1
  187. package/mapping/support/ArrayWrappedCollection.js +1 -1
  188. package/mapping/support/_LayerExtensionCollection.d.ts +1 -0
  189. package/mapping/support/_LayerExtensionCollection.js +1 -1
  190. package/mapping/support/_SublayerExtensionCollection.d.ts +1 -0
  191. package/mapping/support/_SublayerExtensionCollection.js +1 -1
  192. package/package.json +1 -1
  193. package/support/HandlesMixin.d.ts +27 -0
  194. package/support/HandlesMixin.js +1 -0
  195. package/support/InitializableBase.d.ts +1 -1
  196. package/support/InitializableBase.js +1 -1
  197. package/support/Settings.d.ts +2 -2
  198. package/support/Settings.js +1 -1
  199. package/utilities/CollectionProxy.d.ts +22 -3
  200. package/utilities/CollectionProxy.js +1 -1
  201. package/utilities/MapTransformCollection.js +1 -1
  202. package/utilities/ObservableMap.d.ts +1 -1
  203. package/utilities/ObservableMap.js +1 -1
  204. package/utilities/ReadOnlyMap.js +1 -1
  205. package/utilities/_ReferenceCountedHandle.d.ts +4 -0
  206. package/utilities/_ReferenceCountedHandle.js +1 -1
  207. package/utilities/_layers.d.ts +10 -1
  208. package/utilities/_layers.js +1 -1
  209. package/version.d.ts +1 -1
  210. package/version.js +1 -1
@@ -1 +1 @@
1
- import{__decorate as e}from"tslib";import t from"@arcgis/core/core/Collection";import{ArgumentError as i}from"../ArgumentError.js";import{InvalidOperationError as s}from"../InvalidOperationError.js";import{ItemType as r}from"../ItemType.js";import{FeatureSourceBase as a}from"../data/FeatureSourceBase.js";import{FieldExtension as n}from"../data/FieldExtension.js";import{PopupContentExtension as o}from"../data/PopupContentExtension.js";import{Schema as l}from"../data/Schema.js";import{layerToJson as y,getLayerJsonType as h,jsonToLayer as d,applyJsonToLayer as u}from"../json/LayerJson.js";import{DefaultArcGISRequestHelper as p}from"../support/ArcGISRequestHelper.js";import{ReadOnlyInitializableCollection as c}from"../support/ReadOnlyInitializableCollection.js";import{serializable as f}from"../support/Serializable.js";import{createIHandle as _,notifyChange as b,onWatch as m,watch as g,watchEach as E}from"../support/observableUtils.js";import x from"../utilities/_ReferenceCountedHandle.js";import{getEquivalencyTypeForLayers as S,getLayerUrl as L,isLayer as v}from"../utilities/_layers.js";import{checkArg as w}from"../utilities/checkArg.js";import{compare as M}from"../utilities/collection.js";import{load as I}from"../utilities/esri.js";import{isGroupLayerExtension as P}from"../utilities/extensions.js";import{hasMmapLayer as A}from"../utilities/layers.js";import{getLogger as C}from"../utilities/log.js";import{deepClone as j,objectKeys as z}from"../utilities/object.js";import{toPortalItem as H}from"../utilities/portal.js";import{onCollectionPropertyChange as T}from"../utilities/watch.js";import{_assignSublayerExtensions as R}from"./_SublayerExtension.js";import{ExtensionBaseLayerListSettings as O,fromLayerListMode as V}from"./support/LayerListSettings.js";import{SublayerExtensionCollectionBase as D}from"./support/_SublayerExtensionCollection.js";const F="Invalid type of layer for this type of layer extension.",B="This type of layer does not have features.",$="This type of layer cannot have sublayers.",N=Object.freeze({supportsAdd:!1,supportsUpdate:!1,supportsDelete:!1,supportsEditing:!1,supportsQuery:!1,supportsAttachmentEditing:!1,supportsStandardizedQueries:!1});export class LayerExtension extends a{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 p),this._requestHelper}set requestHelper(e){this._requestHelper=e}get title(){return this.layer?.title??this._deferredLayerProperties?.title??("string"==typeof this._deferredLayerProperties?.$ref?this._deferredLayerProperties?.$ref:this._deferredLayerProperties?.$ref?.title??this._deferredLayerProperties?.$ref?.id)??"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 canChangeLabels(){return!1}get canChangeRenderer(){return!1}get canChangeDefinitionExpression(){return!1}get initialDefinitionExpression(){return this._initialDefinitionExpression}get initialRenderer(){return this._initialRenderer}get initialVisibility(){return this._initialVisibility??this.layer?.visible??!1}get _layerId(){return this.layer?.id??this._deferredLayerProperties?.$ref?.id}get _layerSupportsHideChildren(){return this.supportsSublayers}get _sublayers(){if(this.supportsSublayers)return this.layer?this.layer.sublayers:void 0}static factory;get dynamicallyAddedLayer(){return this._dynamicallyAddedLayer}set dynamicallyAddedLayer(e){this._dynamicallyAddedLayer=e}tpkSource;layerListSettings;allSublayerExtensions;get sublayersAreReadOnly(){return!0}_itemType=r.LAYER_EXTENSION;_watchHandles=[];_layerWatchHandles=[];_mapExtension;_basemapExtension;_groundExtension;_parentLayerExtension;_sublayerExtensions;_layer;_dynamicallyAddedLayer=!1;_deferredLayerProperties;_requestHelper;_initialDefinitionExpression;_initialRenderer;_initialVisibility;_visibilityMode="independent";_portalItem;constructor(e){super(e);const t={...this.getDefaults(),...e};w("properties.layer",t.layer).isNotMissing();const{layer:i}=t;let s;if(i?.hasOwnProperty("listMode")&&(s=V(i.listMode)),this.layerListSettings=this._createLayerListSettings({...s,...t.layerListSettings}),v(i))w("properties.layer",i).satisfies((e=>this._isSupportedLayer(e)),F),this._setLayer(i);else if(i){if(i.$portalItem){const e=i.$portalItem;this._portalItem=H(e)}this._deferredLayerProperties=i}this._sublayerExtensions=this._createSublayerExtensionCollection(),this.allSublayerExtensions=new W(this),m(this,"isEffectivelyVisible",(()=>g(this,"parentLayerExtension.isEffectivelyVisible",(()=>b(this,"isEffectivelyVisible")),{sync:!0}))),m(this,"_sublayers",(()=>g(this,"layer.sublayers",(()=>b(this,"_sublayers")),{sync:!0})))}static create(e){if(!LayerExtension.factory)throw new s("Cannot create layer extension: no layer extension factory has been registered.");return LayerExtension.factory.create(e)}static async fromPortalItem(e,t){w("portalItemLike",e).isNotMissing();const s=t??{};w("layerExtensionProperties.layer",s.layer).satisfies((e=>!v(e)));const r={...s.layer};w("layerExtensionProperties.layer.$ref",r.$ref).satisfies((e=>null==e));const a=new p,n=H(e);let o;await I(n);const l=n.typeKeywords??"";if("Map Service"===n.type)o=l.includes("Tiled")||l.includes("Hosted Service")?"ArcGISTiledMapServiceLayer":"ArcGISMapServiceLayer";else if("Feature Service"===n.type)o=l.includes("SubtypeGroupLayer")?"SubtypeGroupLayer":"ArcGISFeatureLayer";else if("Image Service"===n.type){const e=await LayerExtension._getLayerData(n.url,a);e.cacheType?"Map"===e.cacheType||l.includes("Tiled Imagery")?o="ArcGISTiledImageServiceLayer":"Elevation"===e.cacheType||l.includes("Elevation 3D Layer")?o="ArcGISTiledElevationServiceLayer":"Raster"===e.cacheType&&(o="ArcGISImageServiceLayer"):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();r.featureCollection=e}else if("WFS"===n.type){o="WFS";const e=await n.fetchData();Object.assign(r,e)}else if("WMTS"===n.type){o="WebTiledLayer";const e=await n.fetchData();Object.assign(r,e)}else if("WMS"===n.type){o="WMS";const e=await n.fetchData();Object.assign(r,e)}if(!o)throw new i("portalItem","Could not determine correct type of LayerExtension to create from portal item");if(r.layerType&&r.layerType!==o)throw new i("layerExtensionProperties.layer.layerType","Layer type defined in layer properties does not match layer type from portal item");return r.layerType=o,r.$portalItem=n,s.layer=r,LayerExtension.create(s)}static async _getLayerData(e,t){const i=await t.request(e,{query:{f:"json"}});if(!i?.data)throw new Error(`Response to request for url ${e} was invalid.`);return i.data}getFeatures(e,t){if(!this.hasFeatures)throw new s(B);return super.getFeatures(e,t)}getFullExtent(){return this.effectiveFullExtent}async addFeatures(e,t){if(w("features",e).isNotMissing(),!this.hasFeatures)throw new s(B);await super.addFeatures(e,t)}async updateFeatures(e,t){if(w("features",e).isNotMissing(),!this.hasFeatures)throw new s(B);await super.updateFeatures(e,t)}async deleteFeatures(e,t){if(w("features",e).isNotMissing(),!this.hasFeatures)throw new s(B);await super.deleteFeatures(e,t)}async _createBackingLayer(){this._portalItem||this.layer||this._deferredLayerProperties?.$ref?!this.layer&&this._portalItem&&this._setLayer(await this._createLayer(this.getDefaults().layer)):(this._setLayer(await this._createLayer(this._deferredLayerProperties)),w("properties.layer",this._layer).satisfies((e=>this._isSupportedLayer(e)),F),this._deferredLayerProperties=void 0)}_setMapExtension(e){if(this.mapExtension===e)return;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(),b(this,"mapExtension")}_setBasemapExtension(e){this.basemapExtension!==e&&(this._basemapExtension=e,this._resolveLayer(),e&&(this.taskSettings.parent=e.taskSettings),b(this,"basemapExtension"))}_setGroundExtension(e){this.groundExtension!==e&&(this._groundExtension=e,this._resolveLayer(),e&&(this.taskSettings.parent=e.taskSettings),b(this,"groundExtension"))}_setParentLayerExtension(e){if(this.parentLayerExtension===e)return;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(),b(this,"parentLayerExtension")}_resolveLayer(e){if(this.layer||!this._deferredLayerProperties)return;const t=e??this.basemapExtension?.basemap?.baseLayers??this.groundExtension?.ground?.layers??this.parentLayerExtension?.layer?.layers??this.mapExtension?.map.layers;if(!t)return;const i=[];let s;for(const e of t){const t=S(e,this._deferredLayerProperties);if("none"!==t){if("solid"===t){s=e;break}i.push(e)}}s||1!==i.length||(s=i[0]),s&&this._isSupportedLayer(s)&&(this._setLayer(s),this._deferredLayerProperties.$portalItem&&U().warn("LayerExtension defined with both $ref and $portalItem. Ignoring $portalItem."))}async _switchLayer(e){if(e===this.layer)return;w("newLayer",e).isNotMissing().satisfies((e=>this._isSupportedLayer(e)),F),this.isInitialized&&await I(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,e.hasOwnProperty("labelsVisible")&&this.layer.hasOwnProperty("labelsVisible")&&(e.labelsVisible=this.layer.labelsVisible);const i=this.schema.fieldExtensions.toArray(),s=this.featureSettings.popupContentExtensions.toArray();this._setLayer(e),i.forEach((e=>{const t=this.schema.fields.find((t=>n.matchesRef(e,{$ref:t.name})));t&&e._switchField(t)})),s.forEach(((e,t)=>{const i=this.featureSettings.popupContentExtensions.find((e=>o.matchesRef(s,t,e.toJSON().content)));i&&e._switchContent(i.content)}));const r=[];if(this._sublayers){const e=this._sublayers.filter((e=>t.has(e.id))).toArray();r.push(...e.map((async e=>{const i=t.get(e.id);await i._switchSublayer(e),this._sublayerExtensions._register(i)})))}this.isInitialized&&r.push(this._initializeChildren()),await Promise.all(r)}_getProjectWebmapJSON(){if(!this.layer)return;let e=y(this.layer);if(!this.dynamicallyAddedLayer){const{id:t,title:i,layerType:s,opacity:r}=e;e={id:t,title:i,layerType:s,visibility:this.layer.visible,opacity:r}}return e}_onSublayerAddedPostInitialize=async e=>{try{await e.initialize()}catch(t){U().error({message:`Error occurred while initializing sublayer extension for sublayer '${e.title??e.sublayer.id??e.id}'.`,error:t})}};async _onDestroy(){this._watchHandles.forEach((e=>e?.remove())),this._layerWatchHandles.forEach((e=>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=>{R(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=h(this._layer),t=this._getSerializableRefLayerProperties(),i=L(this._layer),s=i?{url:i}:{};return{$ref:{id:this._layer.id,title:this._layer.title,subtype:this._getSerializableLayerType(),...s},layerType:e,...t}}return y(this.layer)}return this._deferredLayerProperties?j(this._deferredLayerProperties):void 0},isDefault:()=>{throw new Error("Missing implementation for _getSerializableProperties() > layer > default. Subclasses of LayerExtension must implement this.")},deserialize:e=>{if(v(e)){if(e!==this.layer)throw new Error("Property 'layer' is read-only.")}else if(e){if(this._layer)return 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 s($);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 I(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 s(`No layer found matching reference "${"string"==typeof e?e:JSON.stringify(e)}".`):new s("Cannot resolve layer reference: missing parent.")}this._deferredLayerProperties&&(await this._applyLayerProperties(this._deferredLayerProperties,this.layer),this._deferredLayerProperties=void 0),await this._initializeLayer(),await I(this.layer),this.supportsSublayers&&!this.layer.sublayers&&this.layer._set("sublayers",new t),this._initialDefinitionExpression="definitionExpression"in this.layer?this.layer.definitionExpression:void 0,this._initialRenderer=this.renderer?.clone(),this._initialVisibility=this.layer.visible,this._sublayerExtensions.onParentInitialized()}async _postInitialize(){await super._postInitialize(),this.layerListSettings.onLayerExtensionInitialized(),this.supportsSublayers&&this._watchHandles.push(T(this,"layer.sublayers",(async e=>{const t=(e.added??[]).map((e=>this.sublayerExtensions.forSublayer(e)));await Promise.all(t.map(this._onSublayerAddedPostInitialize))})))}_applyPortalItemProperties(e){throw new s("Cannot use this type of layer extension with a PortalItem.")}async _initializeLayer(){}_createLayerListSettings(e){return new G(e,this)}_createSublayerExtensionCollection(){return new k(this)}_capabilities(){return N}*_initializableChildCollections(){yield*super._initializableChildCollections(),yield this.sublayerExtensions}async _createLayer(e){return d(e)}_applyLayerProperties(e,t){w("layerJson",e).isNotMissing();const i=e.layerType||e.type;return w("layerJson.layerType",i).satisfies((e=>!e||e===this.getDefault("layer")?.layerType)),w("layer",t).isNotMissing().satisfies((e=>this._isSupportedLayer(e))),u(e,t)}_setLayer(e){if(this._layer=e,this._layerWatchHandles.forEach((e=>e.remove())),this._layerWatchHandles.length=0,this._layerWatchHandles.push(g(e,"visible",((e,t,i)=>{this._onVisibleChanged(e),this.mapExtension?.emit("layer-visibility-change",i)})),m(this,"effectiveMinScale",(()=>g(this.layer,"minScale",(()=>b(this,"effectiveMinScale")),{sync:!0}))),m(this,"effectiveMaxScale",(()=>g(this.layer,"maxScale",(()=>b(this,"effectiveMaxScale")),{sync:!0}))),m(this,"title",(()=>g(this.layer,"title",(()=>b(this,"title")),{sync:!0})))),"definitionExpression"in e&&this._watchHandles.push(g(e,"definitionExpression",((e,t,i)=>{this.mapExtension?.emit("layer-definition-expression-change",i)}))),this.supportsSublayers)if(this._sublayers)this._setupSublayersHandles();else{const t=g(e,"sublayers",(()=>{this._setupSublayersHandles()}),{sync:!0,once:!0});this._layerWatchHandles.push(t)}b(this,"layer"),b(this,"title"),b(this,"effectiveMinScale"),b(this,"effectiveMaxScale"),b(this,"isEffectivelyVisible")}_setupSublayersHandles(){this._layerWatchHandles.push(this._sublayers.on("after-add",this._onSublayersAfterAdd),this._sublayers.on("after-remove",this._onSublayersAfterRemove),E(this._sublayers,"[].visible",this._onSublayersSublayerVisibleChanged,{sync:!0}))}_onVisibleChanged=e=>{if("inherited"===this.visibilityMode&&this.supportsSublayers&&this._sublayers)for(const t of this._sublayers.toArray())t.visible=e;b(this,"isEffectivelyVisible")};_onSublayersSublayerVisibleChanged=(e,t,i)=>{e&&"exclusive"===this.visibilityMode&&this._ensureAChildSublayerVisible(i)};_onSublayersAfterAdd=e=>{1!==this._sublayers.length||e.item.visible||"exclusive"!==this.visibilityMode?e.item.visible&&"exclusive"===this.visibilityMode&&(e.item.visible=!1):e.item.visible=!0};_onSublayersAfterRemove=e=>{0!==this._sublayers.length&&"exclusive"===this.visibilityMode&&e.item.visible&&this._ensureAChildSublayerVisible(this._sublayers.getItemAt(0))};_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 k extends D{constructor(e){super(e,"_sublayers"),this._layerExtension=e}add(e,t){if(w("sublayerX",e).isNotMissing(),!this._layerExtension.supportsSublayers)throw new s($);const i=e.sublayer?e.sublayer.layer:void 0;return i&&i!==this._layerExtension.layer&&i.sublayers.remove(e.sublayer),super.add(e,t)}}class W extends c{get _collection(){return this._layerExtension.sublayerExtensions.flatten((e=>e.sublayerExtensions))}_layerExtension;_onChangeLayerExtensionsHandle=new x((()=>{const e=new WeakMap,i=new Set,s=r=>{const a=new t(r.added).flatten((e=>e.sublayerExtensions)),n=new t(r.moved).flatten((e=>e.sublayerExtensions)),o=new t(r.removed).flatten((e=>e.sublayerExtensions));for(const t of a)if(!e.has(t)){const r=t.sublayerExtensions.on("change",s);e.set(t,r),i.add(r)}for(const t of o){const s=e.get(t);s&&(s.remove(),e.delete(t),i.delete(s))}this.emit("change",{added:a.toArray(),moved:n.toArray(),removed:o.toArray()})};i.add(this._layerExtension.sublayerExtensions.on("change",s));const r=this._layerExtension.sublayerExtensions.flatten((e=>e.sublayerExtensions));for(const t of r){const r=t.sublayerExtensions.on("change",s);e.set(t,r),i.add(r)}return _(i)}));_onAfterAddLayerExtensionsHandle=new x((()=>{const e=new WeakMap,t=new Set,i=i=>{const s=e.get(i);s&&(s.remove(),e.delete(i),t.delete(s))},s=e=>{const t=e.item,s=t.sublayerExtensions.flatten((e=>e.sublayerExtensions));for(const e of s)i(e);i(t)},r=i=>{this.emit("after-add",{...i});const a=i.item.sublayerExtensions.flatten((e=>e.sublayerExtensions));for(const n of a)if(this.emit("after-add",{...i,item:n}),!e.has(n)){const i=n.sublayerExtensions.on("after-add",r),a=n.sublayerExtensions.on("after-remove",s),o=_([i,a]);e.set(n,o),t.add(o)}};t.add(this._layerExtension.sublayerExtensions.on("after-add",r)),t.add(this._layerExtension.sublayerExtensions.on("after-remove",s));const a=this._layerExtension.sublayerExtensions.flatten((e=>e.sublayerExtensions));for(const i of a){const a=i.sublayerExtensions.on("after-add",r),n=i.sublayerExtensions.on("after-remove",s),o=_([a,n]);e.set(i,o),t.add(o)}return _(t)}));_onAfterRemoveLayerExtensionsHandle=new x((()=>{const e=new WeakMap,t=new Set,i=i=>{const s=e.get(i);s&&(s.remove(),e.delete(i),t.delete(s))},s=e=>{this.emit("after-remove",{...e});const t=e.item,s=t.sublayerExtensions.flatten((e=>e.sublayerExtensions));for(const t of s)this.emit("after-remove",{...e,item:t}),i(t);i(t)},r=i=>{const a=i.item,n=a.sublayerExtensions.on("after-add",r),o=a.sublayerExtensions.on("after-remove",s),l=_([n,o]);e.set(a,l),t.add(l)};t.add(this._layerExtension.sublayerExtensions.on("after-remove",s)),t.add(this._layerExtension.sublayerExtensions.on("after-add",r));const a=this._layerExtension.sublayerExtensions.flatten((e=>e.sublayerExtensions));for(const i of a){const a=i.sublayerExtensions.on("after-add",r),n=i.sublayerExtensions.on("after-remove",s),o=_([a,n]);e.set(i,o),t.add(o)}return _(t)}));constructor(e){super(),this._layerExtension=e}on(e,t){const i=[];return"change"===e?i.push(this._onChangeLayerExtensionsHandle.add()):"after-add"===e?i.push(this._onAfterAddLayerExtensionsHandle.add()):"after-remove"===e&&i.push(this._onAfterRemoveLayerExtensionsHandle.add()),i.push(super.on(e,t)),_(i)}findById(e){return w("id",e).isNotMissing(),this.find((t=>t.id===e))}findBySublayerId(e){return w("id",e).isNotMissing(),this.find((t=>t._sublayerId===e))}forSublayer(e){return w("sublayer",e).isNotMissing(),this.findBySublayerId(e.id)}_itemIsInitialized(e){return super._itemIsInitialized(e)&&!!e.sublayer}}let G=class extends O{get _esriLayer(){return this._extension.layer}get _listModePath(){return"layer.listMode"}get _supportsChildren(){return this._extension.supportsSublayers}};G=e([f],G);export{G as LayerExtensionLayerListSettings};export function toBindingOptions(e){return"object"==typeof e?e:{property:e}}let q=class extends l{_layerExtension;_layerBindings=new Map;constructor(e){super(),this._layerExtension=e,this._bindSettingsToLayerProperties(),e.layer?this._onLayerResolved(e.layer):g(e,"layer",(()=>{this._onLayerResolved(e.layer)}),{sync:!0,once:!0})}_getPropertyBindings(){return{}}_hasSettingIncludingAncestor(e){return!(!this._layerBindings.has(e)||!this._layerExtension.layer)||super._hasSettingIncludingAncestor(e)}_getSetting(e,t){if(this._layerBindings.has(e)){const t=toBindingOptions(this._layerBindings.get(e));if(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)){const i=toBindingOptions(this._layerBindings.get(e));if(i.readonly||i.hasOwnProperty("value"))throw new s(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 z(e)){const i=toBindingOptions(e[t]);this._layerBindings.set(t,i),i.hasOwnProperty("value")||m(this,t,(()=>g(this._layerExtension,`layer.${String(i.property)}`,(()=>b(this,t)),{sync:!i.hasOwnProperty("sync")||i.sync})))}}_onLayerResolved(e){for(const t of this._layerBindings.keys())this.isModified(t)&&(e[t]=this[t],this.reset(t))}};q=e([f],q);export{q as LayerExtensionSchema};export function _assignLayerExtensions(e,t){return M(e,t,{onNew:(t,i)=>{e.add(t instanceof LayerExtension?t:LayerExtension.create(t),J(t)?void 0:i)},onMatch:(t,i,s,r)=>{i instanceof LayerExtension||t.assignProperties(i),s===r||J(i)||e.reorder(t,r)},onMissing:t=>{(A([t])||P(t)&&0===t.layerExtensions.toArray().length)&&e.remove(t)},equals:(e,t)=>{const i="solid"===S(e.layer,t.layer);return t instanceof LayerExtension?e===t||i:i||e.id===t.id}})}function U(){return C("geocortex.api.mapping.LayerExtension")}function J(e){return e instanceof LayerExtension?!!e._deferredLayerProperties?.$ref:!v(e.layer)&&!!e.layer?.$ref}let Y=class extends q{_setSetting(e,t){if(this._layerBindings.has(e))throw new s(ERR_SCHEMA_READ_ONLY);super._setSetting(e,t)}};Y=e([f],Y);export{Y as LayerExtensionReadOnlySchema};export const ERR_SCHEMA_READ_ONLY="This schema property is read-only.";
1
+ import{__decorate as e}from"tslib";import t from"@arcgis/core/core/Collection";import{ArgumentError as i}from"../ArgumentError.js";import{InvalidOperationError as s}from"../InvalidOperationError.js";import{ItemType as r}from"../ItemType.js";import{FeatureSourceBase as a}from"../data/FeatureSourceBase.js";import{FieldExtension as n}from"../data/FieldExtension.js";import{PopupContentExtension as o}from"../data/PopupContentExtension.js";import{Schema as l}from"../data/Schema.js";import{applyJsonToLayer as y,getLayerJsonType as h,jsonToLayer as d,layerToJson as u}from"../json/LayerJson.js";import{DefaultArcGISRequestHelper as p}from"../support/ArcGISRequestHelper.js";import{ReadOnlyInitializableCollection as c}from"../support/ReadOnlyInitializableCollection.js";import{serializable as f}from"../support/Serializable.js";import{createIHandle as _,notifyChange as b,onWatch as m,watch as g,watchEach as x}from"../support/observableUtils.js";import E from"../utilities/_ReferenceCountedHandle.js";import{getEquivalencyTypeForLayers as S,getLayerUrl as L,isLayer as v}from"../utilities/_layers.js";import{checkArg as w}from"../utilities/checkArg.js";import{compare as M}from"../utilities/collection.js";import{load as I}from"../utilities/esri.js";import{isGroupLayerExtension as A}from"../utilities/extensions.js";import{hasMmapLayer as P}from"../utilities/layers.js";import{getLogger as C}from"../utilities/log.js";import{deepClone as j,objectKeys as z}from"../utilities/object.js";import{toPortalItem as H}from"../utilities/portal.js";import{onCollectionPropertyChange as T}from"../utilities/watch.js";import{_assignSublayerExtensions as R}from"./_SublayerExtension.js";import{ExtensionBaseLayerListSettings as O,fromLayerListMode as V}from"./support/LayerListSettings.js";import{SublayerExtensionCollectionBase as F}from"./support/_SublayerExtensionCollection.js";const D="Invalid type of layer for this type of layer extension.",B="This type of layer does not have features.",$="This type of layer cannot have sublayers.",N=Object.freeze({supportsAdd:!1,supportsUpdate:!1,supportsDelete:!1,supportsEditing:!1,supportsQuery:!1,supportsAttachmentEditing:!1,supportsStandardizedQueries:!1});export class LayerExtension extends a{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 p),this._requestHelper}set requestHelper(e){this._requestHelper=e}get title(){return this.layer?.title??this._deferredLayerProperties?.title??("string"==typeof this._deferredLayerProperties?.$ref?this._deferredLayerProperties?.$ref:this._deferredLayerProperties?.$ref?.title??this._deferredLayerProperties?.$ref?.id)??"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 canChangeLabels(){return!1}get canChangeRenderer(){return!1}get canChangeDefinitionExpression(){return!1}get initialDefinitionExpression(){return this._initialDefinitionExpression}get initialRenderer(){return this._initialRenderer}get initialVisibility(){return this._initialVisibility??this.layer?.visible??!1}get _layerId(){return this.layer?.id??this._deferredLayerProperties?.$ref?.id}get _layerSupportsHideChildren(){return this.supportsSublayers}get _sublayers(){if(this.supportsSublayers)return this.layer?this.layer.sublayers:void 0}static factory;get dynamicallyAddedLayer(){return this._dynamicallyAddedLayer}set dynamicallyAddedLayer(e){this._dynamicallyAddedLayer=e}static _layerWatchHandlesKey="layer-extension-layer-watch-handles";tpkSource;layerListSettings;allSublayerExtensions;get sublayersAreReadOnly(){return!0}_itemType=r.LAYER_EXTENSION;_mapExtension;_basemapExtension;_groundExtension;_parentLayerExtension;_sublayerExtensions;_layer;_dynamicallyAddedLayer=!1;_isSwitchingLayer=!1;_deferredLayerProperties;_requestHelper;_initialDefinitionExpression;_initialRenderer;_initialVisibility;_visibilityMode="independent";_portalItem;constructor(e){super(e);const t={...this.getDefaults(),...e};w("properties.layer",t.layer).isNotMissing();const{layer:i}=t;let s;if(i?.hasOwnProperty("listMode")&&(s=V(i.listMode)),this.layerListSettings=this._createLayerListSettings({...s,...t.layerListSettings}),v(i))w("properties.layer",i).satisfies((e=>this._isSupportedLayer(e)),D),this._setLayer(i);else if(i){if(i.$portalItem){const e=i.$portalItem;this._portalItem=H(e)}this._deferredLayerProperties=i}this._sublayerExtensions=this._createSublayerExtensionCollection(),this.allSublayerExtensions=new W(this),this._handles.add([m(this,"isEffectivelyVisible",(()=>g(this,"parentLayerExtension.isEffectivelyVisible",(()=>b(this,"isEffectivelyVisible")),{sync:!0}))),m(this,"_sublayers",(()=>g(this,"layer.sublayers",(()=>b(this,"_sublayers")),{sync:!0})))])}static create(e){if(!LayerExtension.factory)throw new s("Cannot create layer extension: no layer extension factory has been registered.");return LayerExtension.factory.create(e)}static async fromPortalItem(e,t){w("portalItemLike",e).isNotMissing();const s=t??{};w("layerExtensionProperties.layer",s.layer).satisfies((e=>!v(e)));const r={...s.layer};w("layerExtensionProperties.layer.$ref",r.$ref).satisfies((e=>null==e));const a=new p,n=H(e);let o;await I(n);const l=n.typeKeywords??"";if("Map Service"===n.type)o=l.includes("Tiled")||l.includes("Hosted Service")?"ArcGISTiledMapServiceLayer":"ArcGISMapServiceLayer";else if("Feature Service"===n.type)o=l.includes("SubtypeGroupLayer")?"SubtypeGroupLayer":"ArcGISFeatureLayer";else if("Image Service"===n.type){const e=await LayerExtension._getLayerData(n.url,a);e.cacheType?"Map"===e.cacheType||l.includes("Tiled Imagery")?o="ArcGISTiledImageServiceLayer":"Elevation"===e.cacheType||l.includes("Elevation 3D Layer")?o="ArcGISTiledElevationServiceLayer":"Raster"===e.cacheType&&(o="ArcGISImageServiceLayer"):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();r.featureCollection=e}else if("WFS"===n.type){o="WFS";const e=await n.fetchData();Object.assign(r,e)}else if("WMTS"===n.type){o="WebTiledLayer";const e=await n.fetchData();Object.assign(r,e)}else if("WMS"===n.type){o="WMS";const e=await n.fetchData();Object.assign(r,e)}if(!o)throw new i("portalItem","Could not determine correct type of LayerExtension to create from portal item");if(r.layerType&&r.layerType!==o)throw new i("layerExtensionProperties.layer.layerType","Layer type defined in layer properties does not match layer type from portal item");return r.layerType=o,r.$portalItem=n,s.layer=r,LayerExtension.create(s)}static async _getLayerData(e,t){const i=await t.request(e,{query:{f:"json"}});if(!i?.data)throw new Error(`Response to request for url ${e} was invalid.`);return i.data}getFeatures(e,t){if(!this.hasFeatures)throw new s(B);return super.getFeatures(e,t)}getFullExtent(){return this.effectiveFullExtent}async addFeatures(e,t){if(w("features",e).isNotMissing(),!this.hasFeatures)throw new s(B);await super.addFeatures(e,t)}async updateFeatures(e,t){if(w("features",e).isNotMissing(),!this.hasFeatures)throw new s(B);await super.updateFeatures(e,t)}async deleteFeatures(e,t){if(w("features",e).isNotMissing(),!this.hasFeatures)throw new s(B);await super.deleteFeatures(e,t)}async _createBackingLayer(){this._portalItem||this.layer||this._deferredLayerProperties?.$ref?!this.layer&&this._portalItem&&this._setLayer(await this._createLayer(this.getDefaults().layer)):(this._setLayer(await this._createLayer(this._deferredLayerProperties)),w("properties.layer",this._layer).satisfies((e=>this._isSupportedLayer(e)),D),this._deferredLayerProperties=void 0)}_setMapExtension(e){if(this.mapExtension===e)return;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(),b(this,"mapExtension")}_setBasemapExtension(e){this.basemapExtension!==e&&(this._basemapExtension=e,this._resolveLayer(),e&&(this.taskSettings.parent=e.taskSettings),b(this,"basemapExtension"))}_setGroundExtension(e){this.groundExtension!==e&&(this._groundExtension=e,this._resolveLayer(),e&&(this.taskSettings.parent=e.taskSettings),b(this,"groundExtension"))}_setParentLayerExtension(e){if(this.parentLayerExtension===e)return;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(),b(this,"parentLayerExtension")}_resolveLayer(e){if(this.layer||!this._deferredLayerProperties)return;const t=e??this.basemapExtension?.basemap?.baseLayers??this.groundExtension?.ground?.layers??this.parentLayerExtension?.layer?.layers??this.mapExtension?.map.layers;if(!t)return;const i=[];let s;for(const e of t){const t=S(e,this._deferredLayerProperties);if("none"!==t){if("solid"===t){s=e;break}i.push(e)}}s||1!==i.length||(s=i[0]),s&&this._isSupportedLayer(s)&&(this._setLayer(s),this._deferredLayerProperties.$portalItem&&K().warn("LayerExtension defined with both $ref and $portalItem. Ignoring $portalItem."))}async _switchLayer(e){if(e===this.layer)return;w("newLayer",e).isNotMissing().satisfies((e=>this._isSupportedLayer(e)),D),this._isSwitchingLayer=!0,this.isInitialized&&await I(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,e.hasOwnProperty("labelsVisible")&&this.layer.hasOwnProperty("labelsVisible")&&(e.labelsVisible=this.layer.labelsVisible);const i=this.schema.fieldExtensions.toArray(),s=this.featureSettings.popupContentExtensions.toArray();this._setLayer(e);const r=[];i.forEach((e=>{const t=this.schema.fields.find((t=>n.matchesRef(e,{$ref:t.name})));t?e._switchField(t):(e._setSchema(void 0),r.push(e.destroy()))})),s.forEach(((e,t)=>{const i=this.featureSettings.popupContentExtensions.find((e=>o.matchesRef(s,t,e.toJSON().content)));i?e._switchContent(i.content):(e._setFeatureSettings(void 0),r.push(e.destroy()))}));const a=new Set;if(this._sublayers){const e=this._sublayers.filter((e=>t.has(e.id))).toArray();r.push(...e.map((async e=>{const i=t.get(e.id);i&&(a.add(i),await i._switchSublayer(e),this._sublayerExtensions._register(i))})))}const l=[];for(const e of t.values())e&&!a.has(e)&&l.push(e);r.push(...l.map((async e=>{this._sublayerExtensions._detach(e),await e.destroy()}))),await Promise.all(r),this.isInitialized&&await this._initializeChildren(),this._isSwitchingLayer=!1}_getProjectWebmapJSON(){if(!this.layer)return;let e=u(this.layer);if(!this.dynamicallyAddedLayer){const{id:t,title:i,layerType:s,opacity:r}=e;e={id:t,title:i,layerType:s,visibility:this.layer.visible,opacity:r}}return e}_onSublayerAddedPostInitialize=async e=>{if(!this._isSwitchingLayer)try{await e.initialize()}catch(t){K().error({message:`Error occurred while initializing sublayer extension for sublayer '${e.title??e.sublayer.id??e.id}'.`,error:t})}};async _onDestroy(){await Promise.all(this.sublayerExtensions.map((e=>e.destroy()))),this._sublayerExtensions.destroy(),this.allSublayerExtensions.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=>{R(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=h(this._layer),t=this._getSerializableRefLayerProperties(),i=L(this._layer),s=i?{url:i}:{};return{$ref:{id:this._layer.id,title:this._layer.title,subtype:this._getSerializableLayerType(),...s},layerType:e,...t}}return u(this.layer)}return this._deferredLayerProperties?j(this._deferredLayerProperties):void 0},isDefault:()=>{throw new Error("Missing implementation for _getSerializableProperties() > layer > default. Subclasses of LayerExtension must implement this.")},deserialize:e=>{if(v(e)){if(e!==this.layer)throw new Error("Property 'layer' is read-only.")}else if(e){if(this._layer)return 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 s($);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 I(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 s(`No layer found matching reference "${"string"==typeof e?e:JSON.stringify(e)}".`):new s("Cannot resolve layer reference: missing parent.")}this._deferredLayerProperties&&(await this._applyLayerProperties(this._deferredLayerProperties,this.layer),this._deferredLayerProperties=void 0),await this._initializeLayer(),await I(this.layer),this.supportsSublayers&&!this.layer.sublayers&&this.layer._set("sublayers",new t),this._initialDefinitionExpression="definitionExpression"in this.layer?this.layer.definitionExpression:void 0,this._initialRenderer=this.renderer?.clone(),this._initialVisibility=this.layer.visible,this._sublayerExtensions.onParentInitialized()}async _postInitialize(){await super._postInitialize(),this.layerListSettings.onLayerExtensionInitialized(),this.supportsSublayers&&this._handles.add(T(this,"layer.sublayers",(async e=>{if(this._isSwitchingLayer)return;const t=(e.added??[]).map((e=>this.sublayerExtensions.forSublayer(e)));await Promise.all(t.map(this._onSublayerAddedPostInitialize))})))}_applyPortalItemProperties(e){throw new s("Cannot use this type of layer extension with a PortalItem.")}async _initializeLayer(){}_createLayerListSettings(e){return new G(e,this)}_createSublayerExtensionCollection(){return new k(this)}_capabilities(){return N}*_initializableChildCollections(){yield*super._initializableChildCollections(),yield this.sublayerExtensions}async _createLayer(e){return d(e)}_applyLayerProperties(e,t){w("layerJson",e).isNotMissing();const i=e.layerType||e.type;return w("layerJson.layerType",i).satisfies((e=>!e||e===this.getDefault("layer")?.layerType)),w("layer",t).isNotMissing().satisfies((e=>this._isSupportedLayer(e))),y(e,t)}_setLayer(e){if(this._layer=e,this._handles.remove(LayerExtension._layerWatchHandlesKey),this._handles.add([g(e,"visible",((e,t,i)=>{this._onVisibleChanged(e),this.mapExtension?.emit("layer-visibility-change",i)})),m(this,"effectiveMinScale",(()=>g(this.layer,"minScale",(()=>b(this,"effectiveMinScale")),{sync:!0}))),m(this,"effectiveMaxScale",(()=>g(this.layer,"maxScale",(()=>b(this,"effectiveMaxScale")),{sync:!0}))),m(this,"title",(()=>g(this.layer,"title",(()=>b(this,"title")),{sync:!0})))],LayerExtension._layerWatchHandlesKey),"definitionExpression"in e&&this._handles.add(g(e,"definitionExpression",((e,t,i)=>{this.mapExtension?.emit("layer-definition-expression-change",i)})),LayerExtension._layerWatchHandlesKey),this.supportsSublayers)if(this._sublayers)this._setupSublayersHandles();else{const t=g(e,"sublayers",(()=>{this._setupSublayersHandles()}),{sync:!0,once:!0});this._handles.add(t,LayerExtension._layerWatchHandlesKey)}b(this,"layer"),b(this,"title"),b(this,"effectiveMinScale"),b(this,"effectiveMaxScale"),b(this,"isEffectivelyVisible")}_setupSublayersHandles(){this._handles.add([this._sublayers.on("after-add",this._onSublayersAfterAdd),this._sublayers.on("after-remove",this._onSublayersAfterRemove),x(this._sublayers,"[].visible",this._onSublayersSublayerVisibleChanged,{sync:!0})],LayerExtension._layerWatchHandlesKey)}_onVisibleChanged=e=>{if("inherited"===this.visibilityMode&&this.supportsSublayers&&this._sublayers)for(const t of this._sublayers.toArray())t.visible=e;b(this,"isEffectivelyVisible")};_onSublayersSublayerVisibleChanged=(e,t,i)=>{e&&"exclusive"===this.visibilityMode&&this._ensureAChildSublayerVisible(i)};_onSublayersAfterAdd=e=>{1!==this._sublayers.length||e.item.visible||"exclusive"!==this.visibilityMode?e.item.visible&&"exclusive"===this.visibilityMode&&(e.item.visible=!1):e.item.visible=!0};_onSublayersAfterRemove=e=>{0!==this._sublayers.length&&"exclusive"===this.visibilityMode&&e.item.visible&&this._ensureAChildSublayerVisible(this._sublayers.getItemAt(0))};_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 k extends F{constructor(e){super(e,"_sublayers"),this._layerExtension=e}add(e,t){if(w("sublayerX",e).isNotMissing(),!this._layerExtension.supportsSublayers)throw new s($);const i=e.sublayer?e.sublayer.layer:void 0;return i&&i!==this._layerExtension.layer&&i.sublayers.remove(e.sublayer),super.add(e,t)}}class W extends c{get _collection(){return this._layerExtension.sublayerExtensions.flatten((e=>e.sublayerExtensions))}_layerExtension;_onChangeLayerExtensionsHandle=new E((()=>{const e=new WeakMap,i=new Set,s=r=>{const a=new t(r.added).flatten((e=>e.sublayerExtensions)),n=new t(r.moved).flatten((e=>e.sublayerExtensions)),o=new t(r.removed).flatten((e=>e.sublayerExtensions));for(const t of a)if(!e.has(t)){const r=t.sublayerExtensions.on("change",s);e.set(t,r),i.add(r)}for(const t of o){const s=e.get(t);s&&(s.remove(),e.delete(t),i.delete(s))}this.emit("change",{added:a.toArray(),moved:n.toArray(),removed:o.toArray()})};i.add(this._layerExtension.sublayerExtensions.on("change",s));const r=this._layerExtension.sublayerExtensions.flatten((e=>e.sublayerExtensions));for(const t of r){const r=t.sublayerExtensions.on("change",s);e.set(t,r),i.add(r)}return _(i)}));_onAfterAddLayerExtensionsHandle=new E((()=>{const e=new WeakMap,t=new Set,i=i=>{const s=e.get(i);s&&(s.remove(),e.delete(i),t.delete(s))},s=e=>{const t=e.item,s=t.sublayerExtensions.flatten((e=>e.sublayerExtensions));for(const e of s)i(e);i(t)},r=i=>{this.emit("after-add",{...i});const a=i.item.sublayerExtensions.flatten((e=>e.sublayerExtensions));for(const n of a)if(this.emit("after-add",{...i,item:n}),!e.has(n)){const i=n.sublayerExtensions.on("after-add",r),a=n.sublayerExtensions.on("after-remove",s),o=_([i,a]);e.set(n,o),t.add(o)}};t.add(this._layerExtension.sublayerExtensions.on("after-add",r)),t.add(this._layerExtension.sublayerExtensions.on("after-remove",s));const a=this._layerExtension.sublayerExtensions.flatten((e=>e.sublayerExtensions));for(const i of a){const a=i.sublayerExtensions.on("after-add",r),n=i.sublayerExtensions.on("after-remove",s),o=_([a,n]);e.set(i,o),t.add(o)}return _(t)}));_onAfterRemoveLayerExtensionsHandle=new E((()=>{const e=new WeakMap,t=new Set,i=i=>{const s=e.get(i);s&&(s.remove(),e.delete(i),t.delete(s))},s=e=>{this.emit("after-remove",{...e});const t=e.item,s=t.sublayerExtensions.flatten((e=>e.sublayerExtensions));for(const t of s)this.emit("after-remove",{...e,item:t}),i(t);i(t)},r=i=>{const a=i.item,n=a.sublayerExtensions.on("after-add",r),o=a.sublayerExtensions.on("after-remove",s),l=_([n,o]);e.set(a,l),t.add(l)};t.add(this._layerExtension.sublayerExtensions.on("after-remove",s)),t.add(this._layerExtension.sublayerExtensions.on("after-add",r));const a=this._layerExtension.sublayerExtensions.flatten((e=>e.sublayerExtensions));for(const i of a){const a=i.sublayerExtensions.on("after-add",r),n=i.sublayerExtensions.on("after-remove",s),o=_([a,n]);e.set(i,o),t.add(o)}return _(t)}));constructor(e){super(),this._layerExtension=e}destroy(){this._onChangeLayerExtensionsHandle.destroy(),this._onAfterAddLayerExtensionsHandle.destroy(),this._onAfterRemoveLayerExtensionsHandle.destroy(),super.destroy()}on(e,t){const i=[];return"change"===e?i.push(this._onChangeLayerExtensionsHandle.add()):"after-add"===e?i.push(this._onAfterAddLayerExtensionsHandle.add()):"after-remove"===e&&i.push(this._onAfterRemoveLayerExtensionsHandle.add()),i.push(super.on(e,t)),_(i)}findById(e){return w("id",e).isNotMissing(),this.find((t=>t.id===e))}findBySublayerId(e){return w("id",e).isNotMissing(),this.find((t=>t._sublayerId===e))}forSublayer(e){return w("sublayer",e).isNotMissing(),this.findBySublayerId(e.id)}_itemIsInitialized(e){return super._itemIsInitialized(e)&&!!e.sublayer}}let G=class extends O{get _esriLayer(){return this._extension.layer}get _listModePath(){return"layer.listMode"}get _supportsChildren(){return this._extension.supportsSublayers}};G=e([f],G);export{G as LayerExtensionLayerListSettings};export function toBindingOptions(e){return"object"==typeof e?e:{property:e}}let q=class extends l{_layerExtension;_layerBindings=new Map;constructor(e){super(),this._layerExtension=e,this._bindSettingsToLayerProperties(),e.layer?this._onLayerResolved(e.layer):this._handles.add(g(e,"layer",(()=>{this._onLayerResolved(e.layer)}),{sync:!0,once:!0}))}_getPropertyBindings(){return{}}_hasSettingIncludingAncestor(e){return!(!this._layerBindings.has(e)||!this._layerExtension.layer)||super._hasSettingIncludingAncestor(e)}_getSetting(e,t){if(this._layerBindings.has(e)){const t=toBindingOptions(this._layerBindings.get(e));if(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)){const i=toBindingOptions(this._layerBindings.get(e));if(i.readonly||i.hasOwnProperty("value"))throw new s(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 z(e)){const i=toBindingOptions(e[t]);this._layerBindings.set(t,i),i.hasOwnProperty("value")||this._handles.add(m(this,t,(()=>g(this._layerExtension,`layer.${String(i.property)}`,(()=>b(this,t)),{sync:!i.hasOwnProperty("sync")||i.sync}))))}}_onLayerResolved(e){for(const t of this._layerBindings.keys())this.isModified(t)&&(e[t]=this[t],this.reset(t))}};q=e([f],q);export{q as LayerExtensionSchema};export function _assignLayerExtensions(e,t){return M(e,t,{onNew:(t,i)=>{e.add(t instanceof LayerExtension?t:LayerExtension.create(t),U(t)?void 0:i)},onMatch:(t,i,s,r)=>{i instanceof LayerExtension||t.assignProperties(i),s===r||U(i)||e.reorder(t,r)},onMissing:t=>{(P([t])||A(t)&&0===t.layerExtensions.toArray().length)&&e.remove(t)},equals:(e,t)=>{const i="solid"===S(e.layer,t.layer);return t instanceof LayerExtension?e===t||i:i||e.id===t.id}})}function K(){return C("geocortex.api.mapping.LayerExtension")}function U(e){return e instanceof LayerExtension?!!e._deferredLayerProperties?.$ref:!v(e.layer)&&!!e.layer?.$ref}let J=class extends q{_setSetting(e,t){if(this._layerBindings.has(e))throw new s(ERR_SCHEMA_READ_ONLY);super._setSetting(e,t)}};J=e([f],J);export{J as LayerExtensionReadOnlySchema};export const ERR_SCHEMA_READ_ONLY="This schema property is read-only.";
@@ -1,5 +1,4 @@
1
1
  import Collection from "@arcgis/core/core/Collection";
2
- import type { ResourceHandle } from "@arcgis/core/core/Handles.js";
3
2
  import type Extent from "@arcgis/core/geometry/Extent";
4
3
  import type SpatialReference from "@arcgis/core/geometry/SpatialReference";
5
4
  import type Renderer from "@arcgis/core/renderers/Renderer";
@@ -141,6 +140,18 @@ export declare abstract class SublayerExtension<TProperties extends SublayerExte
141
140
  * sublayer extension creation.
142
141
  */
143
142
  static factory: SublayerExtensionFactory;
143
+ /**
144
+ * Handle group key for watches on the current sublayer instance.
145
+ */
146
+ private static readonly _sublayerWatchHandlesKey;
147
+ /**
148
+ * Handle group key for watches from parent LayerExtension.
149
+ */
150
+ private static readonly _layerExtensionWatchHandlesKey;
151
+ /**
152
+ * Handle group key for watches from parent SublayerExtension.
153
+ */
154
+ private static readonly _parentSublayerWatchHandlesKey;
144
155
  /**
145
156
  * The sublayer that is being extended.
146
157
  */
@@ -261,11 +272,6 @@ export declare abstract class SublayerExtension<TProperties extends SublayerExte
261
272
  * @inheritDoc
262
273
  */
263
274
  protected readonly _itemType: string;
264
- /**
265
- * A set of watch handles that get cleaned up when the class instance is
266
- * destroyed.
267
- */
268
- protected readonly _watchHandles: ResourceHandle[];
269
275
  private readonly _sublayerExtensions;
270
276
  private _layerExtension;
271
277
  private _parentSublayerExtension;
@@ -273,6 +279,7 @@ export declare abstract class SublayerExtension<TProperties extends SublayerExte
273
279
  private _initialRenderer;
274
280
  private _initialVisibility;
275
281
  private _sublayer;
282
+ private _isSwitchingSublayer;
276
283
  private _visibilityMode;
277
284
  private _deferredSublayerProperties;
278
285
  private _originalRef;
@@ -386,6 +393,7 @@ export declare class SublayerSchema extends Schema {
386
393
  constructor(sublayerExtension: SublayerExtension);
387
394
  get spatialReference(): SpatialReference;
388
395
  set spatialReference(value: SpatialReference);
396
+ destroy(): void;
389
397
  /**
390
398
  * Returns the property bindings.
391
399
  */
@@ -1 +1 @@
1
- import{__decorate as e}from"tslib";import t from"@arcgis/core/core/Collection";import{InvalidOperationError as i}from"../InvalidOperationError.js";import{isSublayerExtension as s,ItemType as r}from"../ItemType.js";import{FeatureSourceBase as a}from"../data/FeatureSourceBase.js";import{Schema as n}from"../data/Schema.js";import{serializable as l}from"../support/Serializable.js";import{createIHandle as o,notifyChange as u,onWatch as y,watch as h,watchEach as b}from"../support/observableUtils.js";import{isBuildingComponentSublayer as f,isBuildingGroupSublayer as c,isKMLSublayer as p,isMapImageSublayer as S,isMapNotesSublayer as d,isSubtypeSublayer as _,isTileLayer as g,isWMSSublayer as x,isWMTSSublayer as E}from"../utilities/_layers.js";import{checkArg as v}from"../utilities/checkArg.js";import{compare as m}from"../utilities/collection.js";import{load as w}from"../utilities/esri.js";import{parse as M}from"../utilities/format/number.js";import{getLogger as P}from"../utilities/log.js";import{deepClone as V,objectKeys as C}from"../utilities/object.js";import{onCollectionPropertyChange as A}from"../utilities/watch.js";import{toBindingOptions as z}from"./_LayerExtension.js";import{fromLayerListMode as $,LayerListSettings as R}from"./support/LayerListSettings.js";import{SublayerExtensionCollectionBase as F}from"./support/_SublayerExtensionCollection.js";const j=P("SublayerExtension"),I="Invalid type of sublayer for this type of sublayer extension.",T="This type of layer does not have features.",k="This type of sublayer extension cannot have child sublayer extensions.",L=Object.freeze({supportsAdd:!1,supportsUpdate:!1,supportsDelete:!1,supportsEditing:!1,supportsQuery:!1,supportsAttachmentEditing:!1,supportsStandardizedQueries:!1});export function getSublayerType(e){if(S(e))return g(e?.layer)?"ArcGISTiledSublayer":"ArcGISMapServiceSublayer";if(p(e))return"KMLSublayer";if(E(e))return"WMTSSublayer";if(x(e))return"WMSSublayer";if(f(e))return"BuildingComponentSublayer";if(c(e))return"BuildingGroupSublayer";if(_(e))return"SubtypeSublayer";if(d(e))return"MapNotesSublayer";throw new Error(`Unknown sublayer type for sublayer: "${e?.title}"`)}export class SublayerExtension extends a{static factory;get sublayer(){return this._sublayer}get layerExtension(){return this._layerExtension}get parentSublayerExtension(){return this._parentSublayerExtension}get hasFeatures(){return!1}get sublayerExtensions(){return this._sublayerExtensions}get renderer(){}layerListSettings;get visibilityMode(){return this.canToggleVisibility?this._visibilityMode:"inherited"}set visibilityMode(e){v("visibilityMode",e).satisfies((e=>this.canToggleVisibility||"inherited"===e),'Sublayers of this type only support a visibility mode of "inherited".'),this._visibilityMode=e,"exclusive"===e&&this._ensureAtMostOneChildSublayerVisible()}get capabilities(){return this._capabilities()}get effectiveMinScale(){const e=this.sublayer?this.sublayer.minScale:0;if(this.parentSublayerExtension){const t=this.parentSublayerExtension.effectiveMinScale||1/0;if(t<(e||1/0))return t}if(this.layerExtension){const t=this.layerExtension.effectiveMinScale||1/0;if(t<(e||1/0))return t}return e}get effectiveMaxScale(){const e=this.sublayer?this.sublayer.maxScale:0;return this.parentSublayerExtension&&this.parentSublayerExtension.effectiveMaxScale>e?this.parentSublayerExtension.effectiveMaxScale:this.layerExtension&&this.layerExtension.effectiveMaxScale>e?this.layerExtension.effectiveMaxScale:e}get isEffectivelyVisible(){const e=!!this.sublayer&&this.sublayer.visible;return this.parentSublayerExtension?this.parentSublayerExtension.isEffectivelyVisible&&e:this.layerExtension?this.layerExtension.isEffectivelyVisible&&e:e}get title(){return this.sublayer?.title??("string"==typeof this._deferredSublayerProperties?.$ref||"number"==typeof this._deferredSublayerProperties?.$ref?this._deferredSublayerProperties?.$ref.toString():this._deferredSublayerProperties?.$ref?.title??this._deferredSublayerProperties?.$ref?.id.toString())??"Sublayer"}get supportsSublayers(){return!1}get canToggleVisibility(){return!0}get canChangeOpacity(){return!0}get canChangeScale(){return!0}get canChangeRenderer(){return!1}get canChangeLabels(){return!1}get canChangeDefinitionExpression(){return!1}get _layerSupportsHideChildren(){return!1}get _sublayerId(){return this.sublayer?.id??("number"==typeof this._deferredSublayerProperties?.$ref?this._deferredSublayerProperties?.$ref:this._deferredSublayerProperties?.$ref?.id)}get _sublayers(){if(this.supportsSublayers)return this.sublayer?.sublayers}get effectiveFullExtent(){return this._effectiveFullExtent?this._effectiveFullExtent:this.parentSublayerExtension?this.parentSublayerExtension.effectiveFullExtent:this.layerExtension?this.layerExtension.effectiveFullExtent:void 0}get initialDefinitionExpression(){return this._initialDefinitionExpression}get initialRenderer(){return this._initialRenderer}get initialVisibility(){return this._initialVisibility??this.sublayer?.visible??!1}_effectiveFullExtent;_itemType=r.SUBLAYER_EXTENSION;_watchHandles=[];_sublayerExtensions;_layerExtension;_parentSublayerExtension;_initialDefinitionExpression;_initialRenderer;_initialVisibility;_sublayer;_visibilityMode;_deferredSublayerProperties;_originalRef;constructor(e){super(e);const t=e||{};this._visibilityMode=this.canToggleVisibility?"independent":"inherited",this._sublayerExtensions=this._createSublayerExtensionCollection();const i=t.sublayer;let s;i?.hasOwnProperty("listMode")&&(s=$(i.listMode)),this.layerListSettings=this._createLayerListSettings({...s,...t.layerListSettings}),O(i)?(v("properties.sublayer",i).satisfies((e=>this._isSupportedSublayer(e)),I),this._setSublayer(i)):i&&(this._deferredSublayerProperties=i),y(this,"isEffectivelyVisible",(()=>h(this,"parentSublayerExtension.isEffectivelyVisible",(()=>u(this,"isEffectivelyVisible")),{sync:!0})))}static create(e){if(!SublayerExtension.factory)throw new i("Cannot create sublayer extension: no sublayer extension factory has been registered.");return SublayerExtension.factory.create(e)}static _matchesRef(e,t,i){if(!e||!t?.$ref)return!1;let s=t.$ref;if("string"==typeof s){const e=M(s);s={id:isNaN(e)?s:e,title:s}}else"number"==typeof s&&(s={id:s});const r=_(e)?e.subtypeCode:e.id;return"both"===i?r===s.id&&e.title===s.title:"by-id"===i?r===s.id:"by-title"===i&&e.title===s.title}getFeatures(e,t){if(!this.hasFeatures)throw new i(T);return super.getFeatures(e,t)}getFullExtent(){return this.effectiveFullExtent}async addFeatures(e,t){if(v("features",e).isNotMissing(),!this.hasFeatures)throw new i(T);await super.addFeatures(e,t)}async updateFeatures(e,t){if(v("features",e).isNotMissing(),!this.hasFeatures)throw new i(T);await super.updateFeatures(e,t)}async deleteFeatures(e,t){if(v("features",e).isNotMissing(),!this.hasFeatures)throw new i(T);await super.deleteFeatures(e,t)}_resolveSublayer(){if(this._sublayer||!this._deferredSublayerProperties||!this.layerExtension?.layer||!this.layerExtension.layer.sublayers)return;const e=e=>t=>SublayerExtension._matchesRef(t,this._deferredSublayerProperties,e),t=this.layerExtension.layer.sublayers.flatten((e=>e.sublayers));let i=t.find(e("both"));if(i||(i=t.find(e("by-title"))),i||(i=t.find(e("by-id"))),i&&this._isSupportedSublayer(i)){this._setSublayer(i);const e={sublayer:{title:this.title,...this._deferredSublayerProperties}};this.assignProperties(e),this._originalRef=this._deferredSublayerProperties.$ref,this._deferredSublayerProperties=void 0}}_setLayerExtension(e){const t=this.layerExtension;this._layerExtension=e,this.layerExtension&&(y(this,"effectiveMinScale",(()=>h(this.layerExtension,"effectiveMinScale",(()=>u(this,"effectiveMinScale")),{sync:!0}))),y(this,"effectiveMaxScale",(()=>h(this.layerExtension,"effectiveMaxScale",(()=>u(this,"effectiveMaxScale")),{sync:!0}))),y(this,"isEffectivelyVisible",(()=>h(this.layerExtension,"isEffectivelyVisible",(()=>u(this,"isEffectivelyVisible")),{sync:!0})))),this._parentSublayerExtension||(t&&(this.featureSettings.formatSettings.parent===t.featureSettings.formatSettings&&(this.featureSettings.formatSettings.parent=void 0),this.taskSettings.parent===t.taskSettings&&(this.taskSettings.parent=void 0)),e&&(this.featureSettings.formatSettings.parent||(this.featureSettings.formatSettings.parent=e.featureSettings.formatSettings),this.taskSettings.parent||(this.taskSettings.parent=e.taskSettings))),this._resolveSublayer(),u(this,"layerExtension"),this.supportsSublayers&&this._sublayerExtensions.onLayerExtensionChanged()}_setParentSublayerExtension(e){if(this._parentSublayerExtension===e)return;const t=this._parentSublayerExtension;this._parentSublayerExtension=e,this.parentSublayerExtension&&(y(this,"effectiveMinScale",(()=>h(this.parentSublayerExtension,"effectiveMinScale",(()=>u(this,"effectiveMinScale")),{sync:!0}))),y(this,"effectiveMaxScale",(()=>h(this.parentSublayerExtension,"effectiveMaxScale",(()=>u(this,"effectiveMaxScale")),{sync:!0})))),t&&(this.featureSettings.formatSettings.parent===t.featureSettings.formatSettings&&(this.featureSettings.formatSettings.parent=this.layerExtension?this.layerExtension.featureSettings.formatSettings:void 0),this.taskSettings.parent===t.taskSettings&&(this.taskSettings.parent=this.layerExtension?this.layerExtension.taskSettings:void 0)),e&&((!this.featureSettings.formatSettings.parent||this.layerExtension&&this.featureSettings.formatSettings.parent===this.layerExtension.featureSettings.formatSettings)&&(this.featureSettings.formatSettings.parent=e.featureSettings.formatSettings),(!this.taskSettings.parent||this.layerExtension&&this.taskSettings.parent===this.layerExtension.taskSettings)&&(this.taskSettings.parent=e.taskSettings)),this._resolveSublayer(),u(this,"parentSublayerExtension")}async _switchSublayer(e){if(e===this.sublayer)return;v("newSublayer",e).isNotMissing().satisfies((e=>e.id===this.sublayer.id),"Sublayer ID must match existing sublayer.").satisfies((e=>this._isSupportedSublayer(e)),I),this.isInitialized&&await w(e);const t=new Map;if(this.sublayer?.sublayers)for(const e of this.sublayer.sublayers.toArray())t.set(e.id,this.sublayerExtensions.forSublayer(e));this.canToggleVisibility&&(e.visible=this.sublayer.visible),this.canChangeOpacity&&(e.opacity=this.sublayer.opacity),this._setSublayer(e);const i=[];if(this.supportsSublayers&&this.sublayer.sublayers){const e=this.sublayer.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)}async _postInitialize(){await super._postInitialize(),this.supportsSublayers&&this._watchHandles.push(A(this,"sublayer.sublayers",(async e=>{const t=(e.added??[]).map((e=>this.sublayerExtensions.forSublayer(e)));await Promise.all(t.map(this._onSublayerAddedPostInitialize))})))}_onSublayerAddedPostInitialize=async e=>{try{await e.initialize()}catch(t){j.error({message:`Error occurred while initializing sublayer extension for sublayer '${e.title??e.sublayer.id??e.id}'.`,error:t})}};async _onDestroy(){this._watchHandles.forEach((e=>e?.remove())),await Promise.all(this.sublayerExtensions.toArray().map((e=>e.destroy()))),await super._onDestroy()}_getSerializableProperties(){return{...super._getSerializableProperties(),visibilityMode:{serializeModes:["initial"],default:this.canToggleVisibility?"independent":"inherited"},layerListSettings:"initial",sublayerExtensions:{serializeModes:["initial","project"],serialize:()=>this.sublayerExtensions.map((e=>e.toItemUri())).toArray(),deserialize:e=>{_assignSublayerExtensions(this.sublayerExtensions,e,(e=>this._createSublayerExtension(e)))}},sublayer:{serializeModes:["initial","project"],serialize:()=>{if(this.sublayer){if(!this._layerExtension)return this._serializeSublayer(this._sublayer);{const e=getSublayerType(this._sublayer);if(this._originalRef)return{$ref:this._originalRef,$sublayerType:e};if(this._sublayer.title||this._sublayer.id)return{...this._createSublayerRef(),$sublayerType:e}}}else if(this._deferredSublayerProperties)return V(this._deferredSublayerProperties)},deserialize:e=>{if(O(e)){if(e!==this.sublayer)throw new Error("Property 'sublayer' is read-only.")}else{if(this._sublayer)return this._applySublayerProperties(e,this._sublayer);this._deferredSublayerProperties&&(this._deferredSublayerProperties={...this._deferredSublayerProperties,...e})}}},requestHelper:{serialize:!1}}}_createSublayerExtension(e){throw new i(k)}_createSchema(){return new N(this)}_createLayerListSettings(e){return new R(e)}_capabilities(){return L}async _onInitialize(){if(await super._onInitialize(),this._sublayer||this._deferredSublayerProperties?.$ref||(this._setSublayer(await this._createSublayer(this._deferredSublayerProperties)),this._deferredSublayerProperties=void 0),this._resolveSublayer(),!this._sublayer){const e=this._deferredSublayerProperties?.$ref;if(!this._layerExtension)throw new i("Cannot resolve sublayer reference: missing parent layer extension.");throw new i(`No sublayer found matching reference "${"string"==typeof e?e:JSON.stringify(e)}".`)}this._initialDefinitionExpression="definitionExpression"in this.sublayer?this.sublayer.definitionExpression:void 0,this._initialRenderer=this.renderer?.clone(),this._initialVisibility=this.sublayer.visible,this.supportsSublayers&&this._sublayerExtensions.onParentInitialized()}*_initializableChildCollections(){yield*super._initializableChildCollections(),yield this.sublayerExtensions}_createSublayerRef(){return{$ref:{id:_(this._sublayer)?this._sublayer.subtypeCode:this._sublayer.id,title:this._sublayer.title}}}_createSublayerExtensionCollection(){return new SubSublayerExtensionCollection(this)}_watchSublayerProperties(){this._watchHandles.push(y(this,"effectiveMinScale",(()=>h(this.sublayer,"minScale",(()=>u(this,"effectiveMinScale")),{sync:!0}))),y(this,"effectiveMaxScale",(()=>h(this.sublayer,"maxScale",(()=>u(this,"effectiveMaxScale")),{sync:!0}))),y(this,"title",(()=>h(this.sublayer,"title",(()=>u(this,"title")),{sync:!0}))))}_setSublayer(e){if(this._sublayer=e,this._watchHandles.push(h(e,"visible",((e,t,i)=>{this._onSetSublayerVisible(e),this.layerExtension?.mapExtension?.emit("layer-visibility-change",i)}),{sync:!0})),"definitionExpression"in e&&this._watchHandles.push(h(e,"definitionExpression",((e,t,i)=>{this.layerExtension?.mapExtension?.emit("layer-definition-expression-change",i)}))),this.supportsSublayers){let t;this._watchHandles.push(h(e,"sublayers",(e=>{t&&t.remove(),t=o([e.on("after-add",this._onSublayersAfterAdd),e.on("after-remove",this._onSublayersAfterRemove)]),this._ensureAtMostOneChildSublayerVisible()}),{sync:!0}),t,b(e,"sublayers.[].visible",this._onSetSublayersSublayerVisible,{sync:!0}))}this._onSetSublayerVisible(this.sublayer.visible),"exclusive"===this.visibilityMode&&this._ensureAtMostOneChildSublayerVisible(),this._watchSublayerProperties(),u(this,"sublayer"),u(this,"title"),u(this,"effectiveMinScale"),u(this,"effectiveMaxScale"),u(this,"isEffectivelyVisible")}_onSetSublayerVisible=e=>{if("inherited"===this.visibilityMode&&this.supportsSublayers&&this.sublayerExtensions)for(const t of this.sublayerExtensions.toArray())t.sublayer&&t.canToggleVisibility&&(t.sublayer.visible=e);u(this,"isEffectivelyVisible")};_onSetSublayersSublayerVisible=(e,t,i)=>{e&&"exclusive"===this.visibilityMode&&this._ensureAChildSublayerVisible(i)};_onSublayersAfterAdd=e=>{1!==this._sublayers.length||e.item.visible||"exclusive"!==this.visibilityMode?e.item.visible&&"exclusive"===this.visibilityMode&&(e.item.visible=!1):e.item.visible=!0};_onSublayersAfterRemove=e=>{0!==this._sublayers.length&&"exclusive"===this.visibilityMode&&e.item.visible&&this._ensureAChildSublayerVisible(this._sublayers.getItemAt(0))};_ensureAChildSublayerVisible(e){for(const t of this._sublayers.toArray())t!==e&&(t.visible=!1)}_ensureAtMostOneChildSublayerVisible(){this.sublayer&&this._sublayers&&this._ensureAChildSublayerVisible(this._sublayers.find((e=>e.visible)))}}let N=class extends n{_sublayerExtension;_sublayerBindings=new Map;constructor(e){super(),this._sublayerExtension=e,this._bindSettingsToSublayerProperties()}get spatialReference(){if(this._sublayerExtension.layerExtension)return this._sublayerExtension.layerExtension.schema.spatialReference}set spatialReference(e){throw new i("Cannot set sublayer schema spatial reference.")}_getPropertyBindings(){return{}}_hasSettingIncludingAncestor(e){return!(!this._sublayerBindings.has(e)||!this._sublayerExtension.sublayer)||super._hasSettingIncludingAncestor(e)}_bindSettingsToSublayerProperties(){const e=this._getPropertyBindings();for(const t of C(e)){const i=z(e[t]);this._sublayerBindings.set(t,i),i.hasOwnProperty("value")||y(this,t,(()=>h(this._sublayerExtension,`sublayer.${String(i.property)}`,(()=>u(this,t)),{sync:!i.hasOwnProperty("sync")||i.sync})))}}};N=e([l],N);export{N as SublayerSchema};export class SubSublayerExtensionCollection extends F{get _layerExtension(){return this._parent.layerExtension}constructor(e,t){super(e,t??"sublayer.sublayers")}add(e,s){if(v("sublayerX",e).isNotMissing(),!this._parent.supportsSublayers)throw new i(k);return e.sublayer&&this._parent.sublayer&&!this._parent.sublayer.sublayers&&(this._parent.sublayer.sublayers=new t),e.parentSublayerExtension&&e.parentSublayerExtension.sublayerExtensions.remove(e),super.add(e,s)}_onAdded(e){super._onAdded(e),e._setParentSublayerExtension(this._parent)}_onRemoved(e){super._onRemoved(e),e._setParentSublayerExtension(void 0)}}export function _assignSublayerExtensions(e,t,i){m(e,t,{onNew:(t,r)=>{try{e.add(s(t)?t:i(t),B(t)?void 0:r)}catch(e){j.warn({message:`Error occurred while adding sublayer extension for sublayer '${t.title??t.sublayer?.id??t.id}'.`,error:e})}},onMatch:(t,i,r,a)=>{try{s(i)||t.assignProperties(i),r===a||B(i)||e.reorder(t,a)}catch(e){j.warn({message:`Error occurred while assigning sublayer extension properties for sublayer '${t.title??t.sublayer?.id??t.id}'.`,error:e})}},equals:(e,t)=>{if(s(t)){if(e===t)return!0;const i=_(t.sublayer)?t.sublayer.subtypeCode:t.sublayer?.id;return SublayerExtension._matchesRef(e.sublayer,{$ref:{id:i,title:t.sublayer?.title}},"both")}return SublayerExtension._matchesRef(e.sublayer,t.sublayer,"both")||e.id===t.id}})}function O(e){return e&&"function"==typeof e.set}function B(e){return s(e)?!!e._deferredSublayerProperties?.$ref:!O(e.sublayer)&&!!e.sublayer?.$ref}
1
+ import{__decorate as e}from"tslib";import t from"@arcgis/core/core/Collection";import{InvalidOperationError as i}from"../InvalidOperationError.js";import{isSublayerExtension as s,ItemType as r}from"../ItemType.js";import{FeatureSourceBase as a}from"../data/FeatureSourceBase.js";import{FieldExtension as n}from"../data/FieldExtension.js";import{PopupContentExtension as l}from"../data/PopupContentExtension.js";import{Schema as o}from"../data/Schema.js";import{serializable as u}from"../support/Serializable.js";import{createIHandle as y,notifyChange as h,onWatch as b,watch as f,watchEach as d}from"../support/observableUtils.js";import{isBuildingComponentSublayer as c,isBuildingGroupSublayer as S,isKMLSublayer as p,isMapImageSublayer as _,isMapNotesSublayer as x,isSubtypeSublayer as g,isTileLayer as E,isWMSSublayer as m,isWMTSSublayer as v}from"../utilities/_layers.js";import{checkArg as w}from"../utilities/checkArg.js";import{compare as M}from"../utilities/collection.js";import{load as P}from"../utilities/esri.js";import{parse as C}from"../utilities/format/number.js";import{getLogger as V}from"../utilities/log.js";import{deepClone as A,objectKeys as z}from"../utilities/object.js";import{onCollectionPropertyChange as $}from"../utilities/watch.js";import{toBindingOptions as F}from"./_LayerExtension.js";import{fromLayerListMode as R,LayerListSettings as j}from"./support/LayerListSettings.js";import{SublayerExtensionCollectionBase as I}from"./support/_SublayerExtensionCollection.js";const T=V("SublayerExtension"),k="Invalid type of sublayer for this type of sublayer extension.",L="This type of layer does not have features.",H="This type of sublayer extension cannot have child sublayer extensions.",N=Object.freeze({supportsAdd:!1,supportsUpdate:!1,supportsDelete:!1,supportsEditing:!1,supportsQuery:!1,supportsAttachmentEditing:!1,supportsStandardizedQueries:!1});export function getSublayerType(e){if(_(e))return E(e?.layer)?"ArcGISTiledSublayer":"ArcGISMapServiceSublayer";if(p(e))return"KMLSublayer";if(v(e))return"WMTSSublayer";if(m(e))return"WMSSublayer";if(c(e))return"BuildingComponentSublayer";if(S(e))return"BuildingGroupSublayer";if(g(e))return"SubtypeSublayer";if(x(e))return"MapNotesSublayer";throw new Error(`Unknown sublayer type for sublayer: "${e?.title}"`)}export class SublayerExtension extends a{static factory;static _sublayerWatchHandlesKey="sublayer-extension-sublayer-watch-handles";static _layerExtensionWatchHandlesKey="sublayer-extension-layer-extension-watch-handles";static _parentSublayerWatchHandlesKey="sublayer-extension-parent-sublayer-watch-handles";get sublayer(){return this._sublayer}get layerExtension(){return this._layerExtension}get parentSublayerExtension(){return this._parentSublayerExtension}get hasFeatures(){return!1}get sublayerExtensions(){return this._sublayerExtensions}get renderer(){}layerListSettings;get visibilityMode(){return this.canToggleVisibility?this._visibilityMode:"inherited"}set visibilityMode(e){w("visibilityMode",e).satisfies((e=>this.canToggleVisibility||"inherited"===e),'Sublayers of this type only support a visibility mode of "inherited".'),this._visibilityMode=e,"exclusive"===e&&this._ensureAtMostOneChildSublayerVisible()}get capabilities(){return this._capabilities()}get effectiveMinScale(){const e=this.sublayer?this.sublayer.minScale:0;if(this.parentSublayerExtension){const t=this.parentSublayerExtension.effectiveMinScale||1/0;if(t<(e||1/0))return t}if(this.layerExtension){const t=this.layerExtension.effectiveMinScale||1/0;if(t<(e||1/0))return t}return e}get effectiveMaxScale(){const e=this.sublayer?this.sublayer.maxScale:0;return this.parentSublayerExtension&&this.parentSublayerExtension.effectiveMaxScale>e?this.parentSublayerExtension.effectiveMaxScale:this.layerExtension&&this.layerExtension.effectiveMaxScale>e?this.layerExtension.effectiveMaxScale:e}get isEffectivelyVisible(){const e=!!this.sublayer&&this.sublayer.visible;return this.parentSublayerExtension?this.parentSublayerExtension.isEffectivelyVisible&&e:this.layerExtension?this.layerExtension.isEffectivelyVisible&&e:e}get title(){return this.sublayer?.title??("string"==typeof this._deferredSublayerProperties?.$ref||"number"==typeof this._deferredSublayerProperties?.$ref?this._deferredSublayerProperties?.$ref.toString():this._deferredSublayerProperties?.$ref?.title??this._deferredSublayerProperties?.$ref?.id.toString())??"Sublayer"}get supportsSublayers(){return!1}get canToggleVisibility(){return!0}get canChangeOpacity(){return!0}get canChangeScale(){return!0}get canChangeRenderer(){return!1}get canChangeLabels(){return!1}get canChangeDefinitionExpression(){return!1}get _layerSupportsHideChildren(){return!1}get _sublayerId(){return this.sublayer?.id??("number"==typeof this._deferredSublayerProperties?.$ref?this._deferredSublayerProperties?.$ref:this._deferredSublayerProperties?.$ref?.id)}get _sublayers(){if(this.supportsSublayers)return this.sublayer?.sublayers}get effectiveFullExtent(){return this._effectiveFullExtent?this._effectiveFullExtent:this.parentSublayerExtension?this.parentSublayerExtension.effectiveFullExtent:this.layerExtension?this.layerExtension.effectiveFullExtent:void 0}get initialDefinitionExpression(){return this._initialDefinitionExpression}get initialRenderer(){return this._initialRenderer}get initialVisibility(){return this._initialVisibility??this.sublayer?.visible??!1}_effectiveFullExtent;_itemType=r.SUBLAYER_EXTENSION;_sublayerExtensions;_layerExtension;_parentSublayerExtension;_initialDefinitionExpression;_initialRenderer;_initialVisibility;_sublayer;_isSwitchingSublayer=!1;_visibilityMode;_deferredSublayerProperties;_originalRef;constructor(e){super(e);const t=e||{};this._visibilityMode=this.canToggleVisibility?"independent":"inherited",this._sublayerExtensions=this._createSublayerExtensionCollection();const i=t.sublayer;let s;i?.hasOwnProperty("listMode")&&(s=R(i.listMode)),this.layerListSettings=this._createLayerListSettings({...s,...t.layerListSettings}),W(i)?(w("properties.sublayer",i).satisfies((e=>this._isSupportedSublayer(e)),k),this._setSublayer(i)):i&&(this._deferredSublayerProperties=i),this._handles.add(b(this,"isEffectivelyVisible",(()=>f(this,"parentSublayerExtension.isEffectivelyVisible",(()=>h(this,"isEffectivelyVisible")),{sync:!0}))))}static create(e){if(!SublayerExtension.factory)throw new i("Cannot create sublayer extension: no sublayer extension factory has been registered.");return SublayerExtension.factory.create(e)}static _matchesRef(e,t,i){if(!e||!t?.$ref)return!1;let s=t.$ref;if("string"==typeof s){const e=C(s);s={id:isNaN(e)?s:e,title:s}}else"number"==typeof s&&(s={id:s});const r=g(e)?e.subtypeCode:e.id;return"both"===i?r===s.id&&e.title===s.title:"by-id"===i?r===s.id:"by-title"===i&&e.title===s.title}getFeatures(e,t){if(!this.hasFeatures)throw new i(L);return super.getFeatures(e,t)}getFullExtent(){return this.effectiveFullExtent}async addFeatures(e,t){if(w("features",e).isNotMissing(),!this.hasFeatures)throw new i(L);await super.addFeatures(e,t)}async updateFeatures(e,t){if(w("features",e).isNotMissing(),!this.hasFeatures)throw new i(L);await super.updateFeatures(e,t)}async deleteFeatures(e,t){if(w("features",e).isNotMissing(),!this.hasFeatures)throw new i(L);await super.deleteFeatures(e,t)}_resolveSublayer(){if(this._sublayer||!this._deferredSublayerProperties||!this.layerExtension?.layer||!this.layerExtension.layer.sublayers)return;const e=e=>t=>SublayerExtension._matchesRef(t,this._deferredSublayerProperties,e),t=this.layerExtension.layer.sublayers.flatten((e=>e.sublayers));let i=t.find(e("both"));if(i||(i=t.find(e("by-title"))),i||(i=t.find(e("by-id"))),i&&this._isSupportedSublayer(i)){this._setSublayer(i);const e={sublayer:{title:this.title,...this._deferredSublayerProperties}};this.assignProperties(e),this._originalRef=this._deferredSublayerProperties.$ref,this._deferredSublayerProperties=void 0}}_setLayerExtension(e){const t=this.layerExtension;this._handles.remove(SublayerExtension._layerExtensionWatchHandlesKey),this._layerExtension=e,this.layerExtension&&this._handles.add([b(this,"effectiveMinScale",(()=>f(this.layerExtension,"effectiveMinScale",(()=>h(this,"effectiveMinScale")),{sync:!0}))),b(this,"effectiveMaxScale",(()=>f(this.layerExtension,"effectiveMaxScale",(()=>h(this,"effectiveMaxScale")),{sync:!0}))),b(this,"isEffectivelyVisible",(()=>f(this.layerExtension,"isEffectivelyVisible",(()=>h(this,"isEffectivelyVisible")),{sync:!0})))],SublayerExtension._layerExtensionWatchHandlesKey),this._parentSublayerExtension||(t&&(this.featureSettings.formatSettings.parent===t.featureSettings.formatSettings&&(this.featureSettings.formatSettings.parent=void 0),this.taskSettings.parent===t.taskSettings&&(this.taskSettings.parent=void 0)),e&&(this.featureSettings.formatSettings.parent||(this.featureSettings.formatSettings.parent=e.featureSettings.formatSettings),this.taskSettings.parent||(this.taskSettings.parent=e.taskSettings))),this._resolveSublayer(),h(this,"layerExtension"),this.supportsSublayers&&this._sublayerExtensions.onLayerExtensionChanged()}_setParentSublayerExtension(e){if(this._parentSublayerExtension===e)return;const t=this._parentSublayerExtension;this._handles.remove(SublayerExtension._parentSublayerWatchHandlesKey),this._parentSublayerExtension=e,this.parentSublayerExtension&&this._handles.add([b(this,"effectiveMinScale",(()=>f(this.parentSublayerExtension,"effectiveMinScale",(()=>h(this,"effectiveMinScale")),{sync:!0}))),b(this,"effectiveMaxScale",(()=>f(this.parentSublayerExtension,"effectiveMaxScale",(()=>h(this,"effectiveMaxScale")),{sync:!0})))],SublayerExtension._parentSublayerWatchHandlesKey),t&&(this.featureSettings.formatSettings.parent===t.featureSettings.formatSettings&&(this.featureSettings.formatSettings.parent=this.layerExtension?this.layerExtension.featureSettings.formatSettings:void 0),this.taskSettings.parent===t.taskSettings&&(this.taskSettings.parent=this.layerExtension?this.layerExtension.taskSettings:void 0)),e&&((!this.featureSettings.formatSettings.parent||this.layerExtension&&this.featureSettings.formatSettings.parent===this.layerExtension.featureSettings.formatSettings)&&(this.featureSettings.formatSettings.parent=e.featureSettings.formatSettings),(!this.taskSettings.parent||this.layerExtension&&this.taskSettings.parent===this.layerExtension.taskSettings)&&(this.taskSettings.parent=e.taskSettings)),this._resolveSublayer(),h(this,"parentSublayerExtension")}async _switchSublayer(e){if(e===this.sublayer)return;w("newSublayer",e).isNotMissing().satisfies((e=>e.id===this.sublayer.id),"Sublayer ID must match existing sublayer.").satisfies((e=>this._isSupportedSublayer(e)),k),this._isSwitchingSublayer=!0,this.isInitialized&&await P(e);const t=new Map;if(this.sublayer?.sublayers)for(const e of this.sublayer.sublayers.toArray())t.set(e.id,this.sublayerExtensions.forSublayer(e));const i=this.schema.fieldExtensions.toArray(),s=this.featureSettings.popupContentExtensions.toArray();this.canToggleVisibility&&(e.visible=this.sublayer.visible),this.canChangeOpacity&&(e.opacity=this.sublayer.opacity),this._setSublayer(e);const r=[],a=new Set;i.forEach((e=>{const t=this.schema.fields.find((t=>n.matchesRef(e,{$ref:t.name})));t&&(e._switchField(t),a.add(e))})),r.push(...i.filter((e=>!a.has(e))).map((async e=>{e._setSchema(void 0),await e.destroy()})));const o=new Set;s.forEach(((e,t)=>{const i=this.featureSettings.popupContentExtensions.find((e=>l.matchesRef(s,t,e.toJSON().content)));i&&(e._switchContent(i.content),o.add(e))})),r.push(...s.filter((e=>!o.has(e))).map((async e=>{e._setFeatureSettings(void 0),await e.destroy()})));const u=new Set;if(this.supportsSublayers&&this.sublayer.sublayers){const e=this.sublayer.sublayers.filter((e=>t.has(e.id))).toArray();r.push(...e.map((async e=>{const i=t.get(e.id);i&&(u.add(i),await i._switchSublayer(e),this._sublayerExtensions._register(i))})))}const y=[];for(const e of t.values())e&&!u.has(e)&&y.push(e);r.push(...y.map((async e=>{this._sublayerExtensions._detach(e),await e.destroy()}))),await Promise.all(r),this.isInitialized&&await this._initializeChildren(),this._isSwitchingSublayer=!1}async _postInitialize(){await super._postInitialize(),this.supportsSublayers&&this._handles.add($(this,"sublayer.sublayers",(async e=>{if(this._isSwitchingSublayer)return;const t=(e.added??[]).map((e=>this.sublayerExtensions.forSublayer(e)));await Promise.all(t.map(this._onSublayerAddedPostInitialize))})))}_onSublayerAddedPostInitialize=async e=>{if(!this._isSwitchingSublayer)try{await e.initialize()}catch(t){T.error({message:`Error occurred while initializing sublayer extension for sublayer '${e.title??e.sublayer.id??e.id}'.`,error:t})}};async _onDestroy(){await Promise.all(this.sublayerExtensions.map((e=>e.destroy()))),this._sublayerExtensions.destroy(),await super._onDestroy()}_getSerializableProperties(){return{...super._getSerializableProperties(),visibilityMode:{serializeModes:["initial"],default:this.canToggleVisibility?"independent":"inherited"},layerListSettings:"initial",sublayerExtensions:{serializeModes:["initial","project"],serialize:()=>this.sublayerExtensions.map((e=>e.toItemUri())).toArray(),deserialize:e=>{_assignSublayerExtensions(this.sublayerExtensions,e,(e=>this._createSublayerExtension(e)))}},sublayer:{serializeModes:["initial","project"],serialize:()=>{if(this.sublayer){if(!this._layerExtension)return this._serializeSublayer(this._sublayer);{const e=getSublayerType(this._sublayer);if(this._originalRef)return{$ref:this._originalRef,$sublayerType:e};if(this._sublayer.title||this._sublayer.id)return{...this._createSublayerRef(),$sublayerType:e}}}else if(this._deferredSublayerProperties)return A(this._deferredSublayerProperties)},deserialize:e=>{if(W(e)){if(e!==this.sublayer)throw new Error("Property 'sublayer' is read-only.")}else{if(this._sublayer)return this._applySublayerProperties(e,this._sublayer);this._deferredSublayerProperties&&(this._deferredSublayerProperties={...this._deferredSublayerProperties,...e})}}},requestHelper:{serialize:!1}}}_createSublayerExtension(e){throw new i(H)}_createSchema(){return new O(this)}_createLayerListSettings(e){return new j(e)}_capabilities(){return N}async _onInitialize(){if(await super._onInitialize(),this._sublayer||this._deferredSublayerProperties?.$ref||(this._setSublayer(await this._createSublayer(this._deferredSublayerProperties)),this._deferredSublayerProperties=void 0),this._resolveSublayer(),!this._sublayer){const e=this._deferredSublayerProperties?.$ref;if(!this._layerExtension)throw new i("Cannot resolve sublayer reference: missing parent layer extension.");throw new i(`No sublayer found matching reference "${"string"==typeof e?e:JSON.stringify(e)}".`)}this._initialDefinitionExpression="definitionExpression"in this.sublayer?this.sublayer.definitionExpression:void 0,this._initialRenderer=this.renderer?.clone(),this._initialVisibility=this.sublayer.visible,this.supportsSublayers&&this._sublayerExtensions.onParentInitialized()}*_initializableChildCollections(){yield*super._initializableChildCollections(),yield this.sublayerExtensions}_createSublayerRef(){return{$ref:{id:g(this._sublayer)?this._sublayer.subtypeCode:this._sublayer.id,title:this._sublayer.title}}}_createSublayerExtensionCollection(){return new SubSublayerExtensionCollection(this)}_watchSublayerProperties(){this._handles.add([b(this,"effectiveMinScale",(()=>f(this.sublayer,"minScale",(()=>h(this,"effectiveMinScale")),{sync:!0}))),b(this,"effectiveMaxScale",(()=>f(this.sublayer,"maxScale",(()=>h(this,"effectiveMaxScale")),{sync:!0}))),b(this,"title",(()=>f(this.sublayer,"title",(()=>h(this,"title")),{sync:!0})))],SublayerExtension._sublayerWatchHandlesKey)}_setSublayer(e){if(this._handles.remove(SublayerExtension._sublayerWatchHandlesKey),this._sublayer=e,this._handles.add(f(e,"visible",((e,t,i)=>{this._onSetSublayerVisible(e),this.layerExtension?.mapExtension?.emit("layer-visibility-change",i)}),{sync:!0}),SublayerExtension._sublayerWatchHandlesKey),"definitionExpression"in e&&this._handles.add(f(e,"definitionExpression",((e,t,i)=>{this.layerExtension?.mapExtension?.emit("layer-definition-expression-change",i)})),SublayerExtension._sublayerWatchHandlesKey),this.supportsSublayers){let t;this._handles.add([f(e,"sublayers",(e=>{t?.remove(),t=y([e.on("after-add",this._onSublayersAfterAdd),e.on("after-remove",this._onSublayersAfterRemove)]),this._ensureAtMostOneChildSublayerVisible()}),{sync:!0}),{remove:()=>{t?.remove(),t=void 0}},d(e,"sublayers.[].visible",this._onSetSublayersSublayerVisible,{sync:!0})],SublayerExtension._sublayerWatchHandlesKey)}this._onSetSublayerVisible(this.sublayer.visible),"exclusive"===this.visibilityMode&&this._ensureAtMostOneChildSublayerVisible(),this._watchSublayerProperties(),h(this,"sublayer"),h(this,"title"),h(this,"effectiveMinScale"),h(this,"effectiveMaxScale"),h(this,"isEffectivelyVisible")}_onSetSublayerVisible=e=>{if("inherited"===this.visibilityMode&&this.supportsSublayers&&this.sublayerExtensions)for(const t of this.sublayerExtensions.toArray())t.sublayer&&t.canToggleVisibility&&(t.sublayer.visible=e);h(this,"isEffectivelyVisible")};_onSetSublayersSublayerVisible=(e,t,i)=>{e&&"exclusive"===this.visibilityMode&&this._ensureAChildSublayerVisible(i)};_onSublayersAfterAdd=e=>{1!==this._sublayers.length||e.item.visible||"exclusive"!==this.visibilityMode?e.item.visible&&"exclusive"===this.visibilityMode&&(e.item.visible=!1):e.item.visible=!0};_onSublayersAfterRemove=e=>{0!==this._sublayers.length&&"exclusive"===this.visibilityMode&&e.item.visible&&this._ensureAChildSublayerVisible(this._sublayers.getItemAt(0))};_ensureAChildSublayerVisible(e){for(const t of this._sublayers.toArray())t!==e&&(t.visible=!1)}_ensureAtMostOneChildSublayerVisible(){this.sublayer&&this._sublayers&&this._ensureAChildSublayerVisible(this._sublayers.find((e=>e.visible)))}}let O=class extends o{_sublayerExtension;_sublayerBindings=new Map;constructor(e){super(),this._sublayerExtension=e,this._bindSettingsToSublayerProperties()}get spatialReference(){if(this._sublayerExtension.layerExtension)return this._sublayerExtension.layerExtension.schema.spatialReference}set spatialReference(e){throw new i("Cannot set sublayer schema spatial reference.")}destroy(){return this._sublayerBindings.clear(),super.destroy()}_getPropertyBindings(){return{}}_hasSettingIncludingAncestor(e){return!(!this._sublayerBindings.has(e)||!this._sublayerExtension.sublayer)||super._hasSettingIncludingAncestor(e)}_bindSettingsToSublayerProperties(){const e=this._getPropertyBindings();for(const t of z(e)){const i=F(e[t]);this._sublayerBindings.set(t,i),i.hasOwnProperty("value")||this._handles.add(b(this,t,(()=>f(this._sublayerExtension,`sublayer.${String(i.property)}`,(()=>h(this,t)),{sync:!i.hasOwnProperty("sync")||i.sync}))))}}};O=e([u],O);export{O as SublayerSchema};export class SubSublayerExtensionCollection extends I{get _layerExtension(){return this._parent.layerExtension}constructor(e,t){super(e,t??"sublayer.sublayers")}add(e,s){if(w("sublayerX",e).isNotMissing(),!this._parent.supportsSublayers)throw new i(H);return e.sublayer&&this._parent.sublayer&&!this._parent.sublayer.sublayers&&(this._parent.sublayer.sublayers=new t),e.parentSublayerExtension&&e.parentSublayerExtension.sublayerExtensions.remove(e),super.add(e,s)}_onAdded(e){super._onAdded(e),e._setParentSublayerExtension(this._parent)}_onRemoved(e){super._onRemoved(e),e._setParentSublayerExtension(void 0)}}export function _assignSublayerExtensions(e,t,i){M(e,t,{onNew:(t,r)=>{try{e.add(s(t)?t:i(t),K(t)?void 0:r)}catch(e){T.warn({message:`Error occurred while adding sublayer extension for sublayer '${t.title??t.sublayer?.id??t.id}'.`,error:e})}},onMatch:(t,i,r,a)=>{try{s(i)||t.assignProperties(i),r===a||K(i)||e.reorder(t,a)}catch(e){T.warn({message:`Error occurred while assigning sublayer extension properties for sublayer '${t.title??t.sublayer?.id??t.id}'.`,error:e})}},equals:(e,t)=>{if(s(t)){if(e===t)return!0;const i=g(t.sublayer)?t.sublayer.subtypeCode:t.sublayer?.id;return SublayerExtension._matchesRef(e.sublayer,{$ref:{id:i,title:t.sublayer?.title}},"both")}return SublayerExtension._matchesRef(e.sublayer,t.sublayer,"both")||e.id===t.id}})}function W(e){return e&&"function"==typeof e.set}function K(e){return s(e)?!!e._deferredSublayerProperties?.$ref:!W(e.sublayer)&&!!e.sublayer?.$ref}
@@ -1 +1 @@
1
- import t from"@arcgis/core/core/Collection";import{watch as r}from"../../support/observableUtils.js";import{CollectionProxy as e}from"../../utilities/CollectionProxy.js";export class ArrayWrappedCollection extends e{_parent;_targetProperty;_arrayProperty;get _target(){return this._targetProperty?this._getProp(this._parent,this._targetProperty):this._parent}constructor(e,o){if(super(),o)this._parent=e,this._targetProperty=e.hasOwnProperty("sublayer")?"sublayer":"layer",this._arrayProperty=o;else{const{parent:t,targetProperty:r,arrayProperty:o}=e;this._parent=t,this._targetProperty=r,this._arrayProperty=o}if(this._target)this._onTargetResolved(this._target);else{this._collection=new t;const e=r(this._parent,this._targetProperty,(()=>{const t=this._target;t&&(this.length&&this._setProp(t,this._arrayProperty,this.toArray()),this._onTargetResolved(t),e.remove())}),{sync:!0})}}add(t,r){const e=this._target;return e&&!this._getProp(e,this._arrayProperty)&&(this._setProp(e,this._arrayProperty,[]),this._collection=o(this._getProp(e,this._arrayProperty)??[])),super.add(t,r)}_onTargetResolved(t){this._collection=o(this._getProp(t,this._arrayProperty)??[]),r(this._parent,this._targetProperty?`${this._targetProperty}.${this._arrayProperty}`:this._arrayProperty,(()=>{this._target&&(this._collection=o(this._getProp(this._target,this._arrayProperty)??[]))}),{sync:!0})}_setProp(t,r,e){if(!r)return t;const o=r.split(".");let s=t;for(;s&&"object"==typeof s&&o.length>1;)s=s[o.shift()];return s&&"object"==typeof s&&(s[o[0]]=e),t}_getProp(t,r){if(!r)return;const e=r.split(".");let o=t;for(;o&&"object"==typeof o&&e.length;)o=o[e.shift()];return e.length?void 0:o}}function o(r){const e=Array.isArray(r)?r:[],o=new t;return Object.defineProperty(o,"_items",{get:()=>e}),Object.defineProperty(o,"length",{get:()=>e.length,set:t=>e.length=t}),o}
1
+ import t from"@arcgis/core/core/Collection";import{watch as r}from"../../support/observableUtils.js";import{CollectionProxy as e}from"../../utilities/CollectionProxy.js";export class ArrayWrappedCollection extends e{_parent;_targetProperty;_arrayProperty;get _target(){return this._targetProperty?this._getProp(this._parent,this._targetProperty):this._parent}constructor(e,o){if(super(),o)this._parent=e,this._targetProperty=e.hasOwnProperty("sublayer")?"sublayer":"layer",this._arrayProperty=o;else{const{parent:t,targetProperty:r,arrayProperty:o}=e;this._parent=t,this._targetProperty=r,this._arrayProperty=o}this._target?this._onTargetResolved(this._target):(this._collection=new t,this._handles.add(r(this._parent,this._targetProperty,(()=>{const t=this._target;t&&(this.length&&this._setProp(t,this._arrayProperty,this.toArray()),this._onTargetResolved(t),this._handles.remove("array-wrapped-collection-target-resolved-handle"))}),{sync:!0}),"array-wrapped-collection-target-resolved-handle"))}add(t,r){const e=this._target;return e&&!this._getProp(e,this._arrayProperty)&&(this._setProp(e,this._arrayProperty,[]),this._collection=o(this._getProp(e,this._arrayProperty)??[])),super.add(t,r)}_onTargetResolved(t){this._handles.remove("array-wrapped-collection-array-watch-handles"),this._collection=o(this._getProp(t,this._arrayProperty)??[]),this._handles.add(r(this._parent,this._targetProperty?`${this._targetProperty}.${this._arrayProperty}`:this._arrayProperty,(()=>{this._target&&(this._collection=o(this._getProp(this._target,this._arrayProperty)??[]))}),{sync:!0}),"array-wrapped-collection-array-watch-handles")}_setProp(t,r,e){if(!r)return t;const o=r.split(".");let a=t;for(;a&&"object"==typeof a&&o.length>1;)a=a[o.shift()];return a&&"object"==typeof a&&(a[o[0]]=e),t}_getProp(t,r){if(!r)return;const e=r.split(".");let o=t;for(;o&&"object"==typeof o&&e.length;)o=o[e.shift()];return e.length?void 0:o}}function o(r){const e=Array.isArray(r)?r:[],o=new t;return Object.defineProperty(o,"_items",{get:()=>e}),Object.defineProperty(o,"length",{get:()=>e.length,set:t=>e.length=t}),o}
@@ -84,6 +84,7 @@ export declare abstract class LayerExtensionCollectionBase extends Initializable
84
84
  constructor(parent: Observable, layersProperty: string);
85
85
  on<Type extends EventNames<this>>(eventName: Type, listener: EventedCallback<this["@eventTypes"][Type]>): ResourceHandle;
86
86
  clone(): LayerExtensionCollectionBase;
87
+ destroy(): void;
87
88
  /**
88
89
  * @inheritDoc
89
90
  */
@@ -1 +1 @@
1
- import e from"@arcgis/core/core/Collection";import{InvalidOperationError as t}from"../../InvalidOperationError.js";import{InitializableCollectionProxy as i}from"../../support/InitializableCollectionProxy.js";import{createIHandle as r,notifyChange as s,onWatch as a,watch as n,watchEvent as o}from"../../support/observableUtils.js";import h from"../../utilities/_ReferenceCountedHandle.js";import{checkArg as d}from"../../utilities/checkArg.js";import{layersAreEquivalent as l}from"../../utilities/layers.js";import{getLogger as y}from"../../utilities/log.js";import{onCollectionPropertyChange as _}from"../../utilities/watch.js";import{UnsupportedLayerExtension as m}from"../UnsupportedLayerExtension.js";import{LayerExtension as f}from"../_LayerExtension.js";export class LayerExtensionCollectionBase extends i{_parent;get _collection(){return this._layers.map((e=>this._forLayer(e))).concat(this._uninitializedLayerExtensions).filter((e=>!(e instanceof m)))}get _layers(){const t=this._layersProperty.split(".");let i=this._parent;for(const e of t){if(null==i){i=void 0;break}i=i[e]}return i||(this._tempLayers||(this._tempLayers=new e),i=this._tempLayers),i}_layerExtensionMap=new WeakMap;_uninitializedLayerExtensions=new e;_layersProperty;_tempLayers;_onChangeLayersHandle=new h((()=>_(this._parent,this._layersProperty,(e=>{try{const t={added:(e.added||[]).map((e=>this._forLayer(e))),moved:(e.moved||[]).map((e=>this._forLayer(e))),removed:(e.removed||[]).map((e=>this._forLayer(e)))};this.emit("change",t)}catch(e){e instanceof Error&&y("geocortex.api.support.LayerExtensionCollection").error(e.message)}}))));_onBeforeAddLayersHandle=new h((()=>o(this._parent,this._layersProperty,["before-add",e=>this.emit("before-add",{...e,item:this._forLayer(e.item)})])));_onBeforeRemoveLayersHandle=new h((()=>o(this._parent,this._layersProperty,["before-remove",e=>this.emit("before-remove",{...e,item:this._forLayer(e.item)})])));_onBeforeChangesLayersHandle=new h((()=>o(this._parent,this._layersProperty,["before-changes",e=>this.emit("before-changes",{...e})])));_onAfterAddLayersHandle=new h((()=>o(this._parent,this._layersProperty,["after-add",e=>this.emit("after-add",{...e,item:this._forLayer(e.item)})],(e=>{if(null!=e)for(const t of e)this.emit("after-add",{item:this._forLayer(t)})}))));_onAfterRemoveLayersHandle=new h((()=>o(this._parent,this._layersProperty,["after-remove",e=>this.emit("after-remove",{...e,item:this._forLayer(e.item)})],((e,t)=>{if(null!=t)for(const e of t)this.emit("after-remove",{item:this._forLayer(e)})}))));_onAfterChangesLayersHandle=new h((()=>o(this._parent,this._layersProperty,["after-changes",e=>this.emit("after-changes",{...e})],(()=>{this.emit("after-changes",{target:this})}))));constructor(e,t){super(),this._parent=e,this._layersProperty=t,a(this,"length",(()=>n(this._parent,`${this._layersProperty}.length`,(()=>s(this,"length")),{sync:!0})))}on(e,t){const i=[];return"change"===e?i.push(this._onChangeLayersHandle.add()):"before-add"===e?i.push(this._onBeforeAddLayersHandle.add()):"before-remove"===e?i.push(this._onBeforeRemoveLayersHandle.add()):"before-changes"===e?i.push(this._onBeforeChangesLayersHandle.add()):"after-add"===e?i.push(this._onAfterAddLayersHandle.add()):"after-remove"===e?i.push(this._onAfterRemoveLayersHandle.add()):"after-changes"===e&&i.push(this._onAfterChangesLayersHandle.add()),i.push(super.on(e,t)),r(i)}clone(){const e=super.clone();return e._layerExtensionMap=this._layerExtensionMap,e}findById(e){return d("id",e).isNotMissing(),this.find((t=>t.id===e))}findByLayerId(e){return d("id",e).isNotMissing(),this.find((t=>t.layer.id===e))}forLayer(e){if(d("layer",e).isNotMissing(),this._layers.includes(e))return this._forLayer(e)}add(e,t){return d("layerX",e).isNotMissing(),this._register(e),e.layer?this._layers.includes(e.layer)?void 0!==t&&this._layers.reorder(e.layer,t):this._layers.add(e.layer,t):e.isInitialized||n(e,"layer",(e=>{e&&(this._forLayer(e),this._layers.includes(e)||this._layers.add(e,t))}),{sync:!0,once:!0}),this}removeAt(e){const t=this.getItemAt(e);if(void 0!==t){if(this._uninitializedLayerExtensions.includes(t)){this._uninitializedLayerExtensions.remove(t);const e={added:[],moved:[],removed:[t],target:this};this.emit("after-remove",{item:t}),this.emit("after-changes"),this.emit("change",e)}else this._layers.remove(t.layer);return this._onRemoved(t),t}}reorder(e,i){if(this._uninitializedLayerExtensions.includes(e)){if(this._uninitializedLayerExtensions.some((e=>e.isInitialized)))throw new t("Unable to reorder a mix of initialized / uninitialized layers.");this._uninitializedLayerExtensions.reorder(e,i)}if(e?.layer&&this._layers.includes(e.layer))return this._layers.reorder(e.layer,i),e}sort(e){return this._layers.sort(((t,i)=>e(this._forLayer(t),this._forLayer(i)))),this}onParentInitialized(){this._tempLayers?.length&&(this.addMany(this._tempLayers.map((e=>this._forLayer(e)))),this._tempLayers=void 0)}onMapExtensionChanged(){for(const e of this.toArray())e._setMapExtension(this._mapExtension)}_forLayer(e){for(const e of this._uninitializedLayerExtensions)e.layer||e._resolveLayer(this._layers),e.layer&&(this._layerExtensionMap.set(e.layer,e),this._uninitializedLayerExtensions.remove(e),this._mapExtension&&!e.mapExtension&&e._setMapExtension(this._mapExtension));if(!this._layerExtensionMap.has(e)){const t=this._uninitializedLayerExtensions.find((t=>l(e,t._deferredLayerProperties)));if(t)return t;const i=("map"===this._mapExtension?.viewMode?this._mapExtension?._scene:this._mapExtension?._map)?.allLayers.find((t=>l(t,e))),r=this._layerExtensionMap.get(i),s={layer:e};r&&(s.layerListSettings=r.layerListSettings.toJSON());const a=f.create(s);this._register(a)}return this._layerExtensionMap.get(e)}_register(e){if(d("layerX",e).isNotMissing(),e._setMapExtension(this._mapExtension),e.layer||e._resolveLayer(this._layers),e.layer){const t=this._layerExtensionMap.get(e.layer);if(e===t)return;if(this._layerExtensionMap.set(e.layer,e),t&&(this._onRemoved(t),this._layers.includes(e.layer))){const i={added:[e],moved:[],removed:[t],target:this};this.emit("after-add",{item:e}),null!=t&&this.emit("after-remove",{item:t}),this.emit("after-changes"),this.emit("change",i)}}else{this._uninitializedLayerExtensions.add(e);const t={added:[e],moved:[],removed:[],target:this};this.emit("after-add",{item:e}),this.emit("after-changes"),this.emit("change",t)}this._onAdded(e)}_itemIsInitialized(e){return super._itemIsInitialized(e)&&!!e.layer}_onAdded(e){}_onRemoved(e){e._setMapExtension(void 0)}}
1
+ import e from"@arcgis/core/core/Collection";import{InvalidOperationError as t}from"../../InvalidOperationError.js";import{InitializableCollectionProxy as i}from"../../support/InitializableCollectionProxy.js";import{createIHandle as s,notifyChange as r,onWatch as a,watch as n,watchEvent as o}from"../../support/observableUtils.js";import h from"../../utilities/_ReferenceCountedHandle.js";import{checkArg as d}from"../../utilities/checkArg.js";import{layersAreEquivalent as l}from"../../utilities/layers.js";import{getLogger as y}from"../../utilities/log.js";import{onCollectionPropertyChange as _}from"../../utilities/watch.js";import{UnsupportedLayerExtension as m}from"../UnsupportedLayerExtension.js";import{LayerExtension as f}from"../_LayerExtension.js";export class LayerExtensionCollectionBase extends i{_parent;get _collection(){return this._layers.map((e=>this._forLayer(e))).concat(this._uninitializedLayerExtensions).filter((e=>!(e instanceof m)))}get _layers(){const t=this._layersProperty.split(".");let i=this._parent;for(const e of t){if(null==i){i=void 0;break}i=i[e]}return i||(this._tempLayers||(this._tempLayers=new e),i=this._tempLayers),i}_layerExtensionMap=new WeakMap;_uninitializedLayerExtensions=new e;_layersProperty;_tempLayers;_onChangeLayersHandle=new h((()=>_(this._parent,this._layersProperty,(e=>{try{const t={added:(e.added||[]).map((e=>this._forLayer(e))),moved:(e.moved||[]).map((e=>this._forLayer(e))),removed:(e.removed||[]).map((e=>this._forLayer(e)))};this.emit("change",t)}catch(e){e instanceof Error&&y("geocortex.api.support.LayerExtensionCollection").error(e.message)}}))));_onBeforeAddLayersHandle=new h((()=>o(this._parent,this._layersProperty,["before-add",e=>this.emit("before-add",{...e,item:this._forLayer(e.item)})])));_onBeforeRemoveLayersHandle=new h((()=>o(this._parent,this._layersProperty,["before-remove",e=>this.emit("before-remove",{...e,item:this._forLayer(e.item)})])));_onBeforeChangesLayersHandle=new h((()=>o(this._parent,this._layersProperty,["before-changes",e=>this.emit("before-changes",{...e})])));_onAfterAddLayersHandle=new h((()=>o(this._parent,this._layersProperty,["after-add",e=>this.emit("after-add",{...e,item:this._forLayer(e.item)})],(e=>{if(null!=e)for(const t of e)this.emit("after-add",{item:this._forLayer(t)})}))));_onAfterRemoveLayersHandle=new h((()=>o(this._parent,this._layersProperty,["after-remove",e=>this.emit("after-remove",{...e,item:this._forLayer(e.item)})],((e,t)=>{if(null!=t)for(const e of t)this.emit("after-remove",{item:this._forLayer(e)})}))));_onAfterChangesLayersHandle=new h((()=>o(this._parent,this._layersProperty,["after-changes",e=>this.emit("after-changes",{...e})],(()=>{this.emit("after-changes",{target:this})}))));constructor(e,t){super(),this._parent=e,this._layersProperty=t,this._handles.add(a(this,"length",(()=>n(this._parent,`${this._layersProperty}.length`,(()=>r(this,"length")),{sync:!0}))))}on(e,t){const i=[];return"change"===e?i.push(this._onChangeLayersHandle.add()):"before-add"===e?i.push(this._onBeforeAddLayersHandle.add()):"before-remove"===e?i.push(this._onBeforeRemoveLayersHandle.add()):"before-changes"===e?i.push(this._onBeforeChangesLayersHandle.add()):"after-add"===e?i.push(this._onAfterAddLayersHandle.add()):"after-remove"===e?i.push(this._onAfterRemoveLayersHandle.add()):"after-changes"===e&&i.push(this._onAfterChangesLayersHandle.add()),i.push(super.on(e,t)),s(i)}clone(){const e=super.clone();return e._layerExtensionMap=this._layerExtensionMap,e}destroy(){this._onChangeLayersHandle.destroy(),this._onBeforeAddLayersHandle.destroy(),this._onBeforeRemoveLayersHandle.destroy(),this._onBeforeChangesLayersHandle.destroy(),this._onAfterAddLayersHandle.destroy(),this._onAfterRemoveLayersHandle.destroy(),this._onAfterChangesLayersHandle.destroy(),this.forEach((e=>{this._onRemoved(e)})),this._uninitializedLayerExtensions.forEach((e=>{this._onRemoved(e)})),this._uninitializedLayerExtensions.removeAll(),this._layerExtensionMap=new WeakMap,super.destroy()}findById(e){return d("id",e).isNotMissing(),this.find((t=>t.id===e))}findByLayerId(e){return d("id",e).isNotMissing(),this.find((t=>t.layer.id===e))}forLayer(e){if(d("layer",e).isNotMissing(),this._layers.includes(e))return this._forLayer(e)}add(e,t){return d("layerX",e).isNotMissing(),this._register(e),e.layer?this._layers.includes(e.layer)?void 0!==t&&this._layers.reorder(e.layer,t):this._layers.add(e.layer,t):e.isInitialized||this._handles.add(n(e,"layer",(e=>{e&&(this._forLayer(e),this._layers.includes(e)||this._layers.add(e,t))}),{sync:!0,once:!0}),e),this}removeAt(e){const t=this.getItemAt(e);if(void 0!==t){if(this._uninitializedLayerExtensions.includes(t)){this._uninitializedLayerExtensions.remove(t);const e={added:[],moved:[],removed:[t],target:this};this.emit("after-remove",{item:t}),this.emit("after-changes"),this.emit("change",e)}else this._layers.remove(t.layer);return this._onRemoved(t),t}}reorder(e,i){if(this._uninitializedLayerExtensions.includes(e)){if(this._uninitializedLayerExtensions.some((e=>e.isInitialized)))throw new t("Unable to reorder a mix of initialized / uninitialized layers.");this._uninitializedLayerExtensions.reorder(e,i)}if(e?.layer&&this._layers.includes(e.layer))return this._layers.reorder(e.layer,i),e}sort(e){return this._layers.sort(((t,i)=>e(this._forLayer(t),this._forLayer(i)))),this}onParentInitialized(){this._tempLayers?.length&&(this.addMany(this._tempLayers.map((e=>this._forLayer(e)))),this._tempLayers=void 0)}onMapExtensionChanged(){for(const e of this)e._setMapExtension(this._mapExtension)}_forLayer(e){for(const e of this._uninitializedLayerExtensions)e.layer||e._resolveLayer(this._layers),e.layer&&(this._layerExtensionMap.set(e.layer,e),this._uninitializedLayerExtensions.remove(e),this._mapExtension&&!e.mapExtension&&e._setMapExtension(this._mapExtension));if(!this._layerExtensionMap.has(e)){const t=this._uninitializedLayerExtensions.find((t=>l(e,t._deferredLayerProperties)));if(t)return t;const i=("map"===this._mapExtension?.viewMode?this._mapExtension?._scene:this._mapExtension?._map)?.allLayers.find((t=>l(t,e))),s=this._layerExtensionMap.get(i),r={layer:e};s&&(r.layerListSettings=s.layerListSettings.toJSON());const a=f.create(r);this._register(a)}return this._layerExtensionMap.get(e)}_register(e){if(d("layerX",e).isNotMissing(),e._setMapExtension(this._mapExtension),e.layer||e._resolveLayer(this._layers),e.layer){const t=this._layerExtensionMap.get(e.layer);if(e===t)return;if(this._layerExtensionMap.set(e.layer,e),t&&(this._onRemoved(t),this._mapExtension?.isSwitchingMap&&t?.destroy(),this._layers.includes(e.layer))){const i={added:[e],moved:[],removed:[t],target:this};this.emit("after-add",{item:e}),null!=t&&this.emit("after-remove",{item:t}),this.emit("after-changes"),this.emit("change",i)}}else{this._uninitializedLayerExtensions.add(e);const t={added:[e],moved:[],removed:[],target:this};this.emit("after-add",{item:e}),this.emit("after-changes"),this.emit("change",t)}this._onAdded(e)}_detach(e){d("layerX",e).isNotMissing(),this._onRemoved(e)}_itemIsInitialized(e){return super._itemIsInitialized(e)&&!!e.layer}_onAdded(e){}_onRemoved(e){this._handles.remove(e),e._setMapExtension(void 0)}}
@@ -88,6 +88,7 @@ export declare abstract class SublayerExtensionCollectionBase extends Initializa
88
88
  * @inheritDoc
89
89
  */
90
90
  findById(id: string): SublayerExtension;
91
+ destroy(): void;
91
92
  /**
92
93
  * @inheritDoc
93
94
  */
@@ -1 +1 @@
1
- import e from"@arcgis/core/core/Collection";import{InitializableCollectionProxy as t}from"../../support/InitializableCollectionProxy.js";import{createIHandle as s,notifyChange as r,onWatch as i,watch as a,watchEvent as n}from"../../support/observableUtils.js";import o from"../../utilities/_ReferenceCountedHandle.js";import{checkArg as l}from"../../utilities/checkArg.js";import{onCollectionPropertyChange as h}from"../../utilities/watch.js";import{SublayerExtension as u}from"../_SublayerExtension.js";export class SublayerExtensionCollectionBase extends t{_parent;get _collection(){return this._sublayers.map((e=>this._forSublayer(e))).concat(Array.from(this._uninitializedSublayerExtensions))}get _sublayers(){const t=this._sublayersProperty.split(".");let s=this._parent;for(const e of t){if(null==s){s=void 0;break}s=s[e]}return s||(this._tempSublayers||(this._tempSublayers=new e),s=this._tempSublayers),s}_sublayersProperty;_tempSublayers;_sublayerExtensionMap=new WeakMap;_uninitializedSublayerExtensions=new Set;_onChangeSublayersHandle=new o((()=>h(this._parent,this._sublayersProperty,(e=>{const t={added:(e.added||[]).map((e=>this._forSublayer(e))),moved:(e.moved||[]).map((e=>this._forSublayer(e))),removed:(e.removed||[]).map((e=>this._forSublayer(e)))};this.emit("change",t)}))));_onBeforeAddSublayersHandle=new o((()=>n(this._parent,this._sublayersProperty,["before-add",e=>this.emit("before-add",{...e,item:this._forSublayer(e.item)})])));_onBeforeRemoveSublayersHandle=new o((()=>n(this._parent,this._sublayersProperty,["before-remove",e=>this.emit("before-remove",{...e,item:this._forSublayer(e.item)})])));_onBeforeChangesSublayersHandle=new o((()=>n(this._parent,this._sublayersProperty,["before-changes",e=>this.emit("before-changes",{...e})])));_onAfterAddSublayersHandle=new o((()=>n(this._parent,this._sublayersProperty,["after-add",e=>this.emit("after-add",{...e,item:this._forSublayer(e.item)})],(e=>{if(null!=e)for(const t of e)this.emit("after-add",{item:this._forSublayer(t)})}))));_onAfterRemoveSublayersHandle=new o((()=>n(this._parent,this._sublayersProperty,["after-remove",e=>this.emit("after-remove",{...e,item:this._forSublayer(e.item)})],((e,t)=>{if(null!=t)for(const e of t)this.emit("after-remove",{item:this._forSublayer(e)})}))));_onAfterChangesSublayersHandle=new o((()=>n(this._parent,this._sublayersProperty,["after-changes",e=>this.emit("after-changes",{...e,target:this})],(()=>{this.emit("after-changes",{target:this})}))));constructor(e,t){super(),this._parent=e,this._sublayersProperty=t,i(this,"length",(()=>a(this._parent,`${this._sublayersProperty}.length`,(()=>r(this,"length")),{sync:!0})))}on(e,t){const r=[];return"change"===e?r.push(this._onChangeSublayersHandle.add()):"before-add"===e?r.push(this._onBeforeAddSublayersHandle.add()):"before-remove"===e?r.push(this._onBeforeRemoveSublayersHandle.add()):"before-changes"===e?r.push(this._onBeforeChangesSublayersHandle.add()):"after-add"===e?r.push(this._onAfterAddSublayersHandle.add()):"after-remove"===e?r.push(this._onAfterRemoveSublayersHandle.add()):"after-changes"===e&&r.push(this._onAfterChangesSublayersHandle.add()),r.push(super.on(e,t)),s(r)}clone(){const e=super.clone();return e._sublayerExtensionMap=this._sublayerExtensionMap,e}findById(e){return l("id",e).isNotMissing(),this.find((t=>t.id===e))}findBySublayerId(e){return l("id",e).isNotMissing(),this.find((t=>t._sublayerId===e))}forSublayer(e){if(l("sublayer",e).isNotMissing(),!(this._sublayers.indexOf(e)<0))return this._forSublayer(e)}add(e,t){return l("sublayerX",e).isNotMissing(),this._register(e),e.sublayer&&(this._sublayers.includes(e.sublayer)?void 0!==t&&this.reorder(e,t):this._sublayers.add(e.sublayer,t)),this}removeAt(e){const t=this.getItemAt(e);if(void 0!==t){if(this._uninitializedSublayerExtensions.has(t)){this._uninitializedSublayerExtensions.delete(t);const e={added:[],moved:[],removed:[t],target:this};this.emit("after-remove",{item:t}),this.emit("after-changes",{}),this.emit("change",e)}else this._sublayers.removeAt(e);return this._onRemoved(t),t}}reorder(e,t){if(!e)return;const s=this._sublayers.indexOf(e.sublayer);return s<0?void 0:(s!==t&&this._sublayers.reorder(e.sublayer,t),e)}sort(e){return this._sublayers.sort(((t,s)=>e(this._forSublayer(t),this._forSublayer(s)))),this}onParentInitialized(){this._tempSublayers?.length&&(this.addMany(this._tempSublayers.map((e=>this._forSublayer(e)))),this._tempSublayers=void 0)}onLayerExtensionChanged(){for(const e of this.toArray())e._setLayerExtension(this._layerExtension)}_register(e){if(l("sublayerX",e).isNotMissing(),e._setLayerExtension(this._layerExtension),e.sublayer||e._resolveSublayer(),e.sublayer){const t=this._sublayerExtensionMap.get(e.sublayer);if(e===t)return;if(this._sublayerExtensionMap.set(e.sublayer,e),t&&(this._onRemoved(t),this._sublayers.includes(e.sublayer))){const s={added:[e],moved:[],removed:[t],target:this};this.emit("after-add",{item:e}),null!=t&&this.emit("after-remove",{item:t}),this.emit("after-changes",{target:this}),this.emit("change",s)}}else{this._uninitializedSublayerExtensions.add(e);const t={added:[e],moved:[],removed:[],target:this};this.emit("after-add",{item:e}),this.emit("after-changes",{target:this}),this.emit("change",t)}this._onAdded(e)}_itemIsInitialized(e){return super._itemIsInitialized(e)&&!!e.sublayer}_onAdded(e){}_onRemoved(e){e._setLayerExtension(void 0)}_forSublayer(e){for(const e of this._uninitializedSublayerExtensions)e._resolveSublayer(),e.sublayer&&(this._sublayerExtensionMap.set(e.sublayer,e),this._uninitializedSublayerExtensions.delete(e));if(!this._sublayerExtensionMap.has(e)){const t=u.create({sublayer:e});this._register(t)}return this._sublayerExtensionMap.get(e)}}
1
+ import e from"@arcgis/core/core/Collection";import{InitializableCollectionProxy as t}from"../../support/InitializableCollectionProxy.js";import{createIHandle as s,notifyChange as r,onWatch as i,watch as a,watchEvent as n}from"../../support/observableUtils.js";import o from"../../utilities/_ReferenceCountedHandle.js";import{checkArg as l}from"../../utilities/checkArg.js";import{onCollectionPropertyChange as h}from"../../utilities/watch.js";import{SublayerExtension as d}from"../_SublayerExtension.js";export class SublayerExtensionCollectionBase extends t{_parent;get _collection(){return this._sublayers.map((e=>this._forSublayer(e))).concat(Array.from(this._uninitializedSublayerExtensions))}get _sublayers(){const t=this._sublayersProperty.split(".");let s=this._parent;for(const e of t){if(null==s){s=void 0;break}s=s[e]}return s||(this._tempSublayers||(this._tempSublayers=new e),s=this._tempSublayers),s}_sublayersProperty;_tempSublayers;_sublayerExtensionMap=new WeakMap;_uninitializedSublayerExtensions=new Set;_onChangeSublayersHandle=new o((()=>h(this._parent,this._sublayersProperty,(e=>{const t={added:(e.added||[]).map((e=>this._forSublayer(e))),moved:(e.moved||[]).map((e=>this._forSublayer(e))),removed:(e.removed||[]).map((e=>this._forSublayer(e)))};this.emit("change",t)}))));_onBeforeAddSublayersHandle=new o((()=>n(this._parent,this._sublayersProperty,["before-add",e=>this.emit("before-add",{...e,item:this._forSublayer(e.item)})])));_onBeforeRemoveSublayersHandle=new o((()=>n(this._parent,this._sublayersProperty,["before-remove",e=>this.emit("before-remove",{...e,item:this._forSublayer(e.item)})])));_onBeforeChangesSublayersHandle=new o((()=>n(this._parent,this._sublayersProperty,["before-changes",e=>this.emit("before-changes",{...e})])));_onAfterAddSublayersHandle=new o((()=>n(this._parent,this._sublayersProperty,["after-add",e=>this.emit("after-add",{...e,item:this._forSublayer(e.item)})],(e=>{if(null!=e)for(const t of e)this.emit("after-add",{item:this._forSublayer(t)})}))));_onAfterRemoveSublayersHandle=new o((()=>n(this._parent,this._sublayersProperty,["after-remove",e=>this.emit("after-remove",{...e,item:this._forSublayer(e.item)})],((e,t)=>{if(null!=t)for(const e of t)this.emit("after-remove",{item:this._forSublayer(e)})}))));_onAfterChangesSublayersHandle=new o((()=>n(this._parent,this._sublayersProperty,["after-changes",e=>this.emit("after-changes",{...e,target:this})],(()=>{this.emit("after-changes",{target:this})}))));constructor(e,t){super(),this._parent=e,this._sublayersProperty=t,this._handles.add(i(this,"length",(()=>a(this._parent,`${this._sublayersProperty}.length`,(()=>r(this,"length")),{sync:!0}))))}on(e,t){const r=[];return"change"===e?r.push(this._onChangeSublayersHandle.add()):"before-add"===e?r.push(this._onBeforeAddSublayersHandle.add()):"before-remove"===e?r.push(this._onBeforeRemoveSublayersHandle.add()):"before-changes"===e?r.push(this._onBeforeChangesSublayersHandle.add()):"after-add"===e?r.push(this._onAfterAddSublayersHandle.add()):"after-remove"===e?r.push(this._onAfterRemoveSublayersHandle.add()):"after-changes"===e&&r.push(this._onAfterChangesSublayersHandle.add()),r.push(super.on(e,t)),s(r)}clone(){const e=super.clone();return e._sublayerExtensionMap=this._sublayerExtensionMap,e}findById(e){return l("id",e).isNotMissing(),this.find((t=>t.id===e))}destroy(){this._onChangeSublayersHandle.destroy(),this._onBeforeAddSublayersHandle.destroy(),this._onBeforeRemoveSublayersHandle.destroy(),this._onBeforeChangesSublayersHandle.destroy(),this._onAfterAddSublayersHandle.destroy(),this._onAfterRemoveSublayersHandle.destroy(),this._onAfterChangesSublayersHandle.destroy(),this.forEach((e=>{this._onRemoved(e)})),this._uninitializedSublayerExtensions.clear(),this._tempSublayers&&(this._tempSublayers.removeAll(),this._tempSublayers=void 0),this._sublayerExtensionMap=new WeakMap,super.destroy()}findBySublayerId(e){return l("id",e).isNotMissing(),this.find((t=>t._sublayerId===e))}forSublayer(e){if(l("sublayer",e).isNotMissing(),!(this._sublayers.indexOf(e)<0))return this._forSublayer(e)}add(e,t){return l("sublayerX",e).isNotMissing(),this._register(e),e.sublayer&&(this._sublayers.includes(e.sublayer)?void 0!==t&&this.reorder(e,t):this._sublayers.add(e.sublayer,t)),this}removeAt(e){const t=this.getItemAt(e);if(void 0!==t){if(this._uninitializedSublayerExtensions.has(t)){this._uninitializedSublayerExtensions.delete(t);const e={added:[],moved:[],removed:[t],target:this};this.emit("after-remove",{item:t}),this.emit("after-changes",{}),this.emit("change",e)}else this._sublayers.removeAt(e);return this._onRemoved(t),t}}reorder(e,t){if(!e)return;const s=this._sublayers.indexOf(e.sublayer);return s<0?void 0:(s!==t&&this._sublayers.reorder(e.sublayer,t),e)}sort(e){return this._sublayers.sort(((t,s)=>e(this._forSublayer(t),this._forSublayer(s)))),this}onParentInitialized(){this._tempSublayers?.length&&(this.addMany(this._tempSublayers.map((e=>this._forSublayer(e)))),this._tempSublayers=void 0)}onLayerExtensionChanged(){for(const e of this)e._setLayerExtension(this._layerExtension)}_register(e){if(l("sublayerX",e).isNotMissing(),e._setLayerExtension(this._layerExtension),e.sublayer||e._resolveSublayer(),e.sublayer){const t=this._sublayerExtensionMap.get(e.sublayer);if(e===t)return;if(this._sublayerExtensionMap.set(e.sublayer,e),t){if(this._onRemoved(t),this._sublayers.includes(e.sublayer)){const s={added:[e],moved:[],removed:[t],target:this};this.emit("after-add",{item:e}),null!=t&&this.emit("after-remove",{item:t}),this.emit("after-changes",{target:this}),this.emit("change",s)}t.destroy()}}else{this._uninitializedSublayerExtensions.add(e);const t={added:[e],moved:[],removed:[],target:this};this.emit("after-add",{item:e}),this.emit("after-changes",{target:this}),this.emit("change",t)}this._onAdded(e)}_detach(e){l("sublayerX",e).isNotMissing(),this._onRemoved(e)}_itemIsInitialized(e){return super._itemIsInitialized(e)&&!!e.sublayer}_onAdded(e){}_onRemoved(e){e._setLayerExtension(void 0)}_forSublayer(e){for(const e of this._uninitializedSublayerExtensions)e._resolveSublayer(),e.sublayer&&(this._sublayerExtensionMap.set(e.sublayer,e),this._uninitializedSublayerExtensions.delete(e));if(!this._sublayerExtensionMap.has(e)){const t=d.create({sublayer:e});this._register(t)}return this._sublayerExtensionMap.get(e)}}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@vertigis/arcgis-extensions",
3
3
  "license": "SEE LICENSE IN LICENSE",
4
- "version": "53.4.0",
4
+ "version": "53.5.0",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://dev.azure.com/vertigis/Studio/_git/arcgis-extensions-ts"
@@ -0,0 +1,27 @@
1
+ import type { GroupKey } from "@arcgis/core/core/Accessor.js";
2
+ import Handles from "@arcgis/core/core/Handles.js";
3
+ type DestroyResult = void | Promise<void>;
4
+ type Constructor<TInstance = object> = abstract new (...args: any[]) => TInstance;
5
+ interface HasDestroy<TResult extends DestroyResult = DestroyResult> {
6
+ destroy(): TResult;
7
+ }
8
+ type DestroyResultOf<TConstructor extends Constructor> = InstanceType<TConstructor> extends HasDestroy<infer TResult> ? TResult : void;
9
+ type HandlesConstructor<TBase extends Constructor> = abstract new (...args: ConstructorParameters<TBase>) => InstanceType<TBase> & HandlesMixin<DestroyResultOf<TBase>>;
10
+ /**
11
+ * Supporting mixin declaration for {@link handles}.
12
+ */
13
+ export declare class HandlesMixin<TResult extends DestroyResult = void> {
14
+ protected readonly _handles: Handles<GroupKey<unknown>>;
15
+ destroy(): TResult;
16
+ }
17
+ /**
18
+ * Adds a protected _handles property backed by Esri handles.
19
+ */
20
+ export declare function handles(): abstract new () => HandlesMixin<void>;
21
+ /**
22
+ * Adds a protected _handles property backed by Esri handles.
23
+ *
24
+ * @param obj The base class to add handles to.
25
+ */
26
+ export declare function handles<TBase extends Constructor>(obj: TBase): HandlesConstructor<TBase>;
27
+ export {};
@@ -0,0 +1 @@
1
+ import s from"@arcgis/core/core/Handles.js";class e{}export function handles(r){const t=r?.prototype?.destroy;return class extends(r??e){_handles=new s;destroy(){return this._handles.destroy(),t?.call(this)??void 0}}}
@@ -70,7 +70,7 @@ export interface InitializableBaseEvents {
70
70
  */
71
71
  initializeWarning: InitializeWarningEvent;
72
72
  }
73
- declare const InitializableBase_base: (abstract new (_properties?: InitializableBaseProperties) => SerializableBase<InitializableBaseProperties>) & (abstract new (...args: any[]) => ObservableMixin);
73
+ declare const InitializableBase_base: abstract new (_properties?: InitializableBaseProperties) => SerializableBase<InitializableBaseProperties> & ObservableMixin & import("./HandlesMixin.js").HandlesMixin<void>;
74
74
  /**
75
75
  * A base class that contains logic for initializing items.
76
76
  */
@@ -1 +1 @@
1
- import{getLogger as i}from"../utilities/log.js";import{parallelEach as e}from"../utilities/promise.js";import{InitializeError as t}from"./InitializeError.js";import{SerializableBase as r}from"./Serializable.js";import{notifyChange as s,observable as a}from"./observableUtils.js";export class InitializableBase extends(a(r)){get isInitialized(){return this._isInitialized}get isDestroyed(){return this._isDestroyed}get failureMode(){return this._failureMode}set failureMode(i){this._failureMode=i}_isInitialized=!1;_isDestroyed=!1;_initializePromise;_destroyPromise;_failureMode="warn";async initialize(){return void 0===this._initializePromise&&(this._initializePromise=(async()=>{try{await this.finishAssignProperties(),await this._onInitialize(),await this._initializeChildren(),await this._postInitialize()}catch(i){throw i instanceof Error?(this._initializePromise=void 0,new t(this.failureMode,i,this)):i}this._isInitialized=!0,s(this,"isInitialized")})()),this._initializePromise}async destroy(){return void 0===this._destroyPromise&&(this._destroyPromise=(async()=>{try{await this._onDestroy()}catch(i){throw this._destroyPromise=void 0,i}this._isDestroyed=!0,s(this,"isDestroyed")})()),this._destroyPromise}toJSON(i="all"){return super.toJSON(i)}assignProperties(i){super.assignProperties(i)}assignPropertiesAsync(i){return super.assignPropertiesAsync(i)}getDefaults(){return super.getDefaults()}getDefault(i){return super.getDefault(i)}getSerializableProperties(i){return super.getSerializableProperties(i)}_getSerializableProperties(){return{...super._getSerializableProperties(),failureMode:{serializeModes:["initial"],default:"warn"}}}async _onInitialize(){}async _postInitialize(){}async _onDestroy(){}async _initializeChildren(){await e(this._initializableChildCollections(),(i=>initializeCollection(i,{target:this,onInitializeWarning:i=>this.emit("initializeWarning",i)})))}*_initializableChildCollections(){}}const o={onInitializeWarning:()=>{}};export async function initializeCollection(r,s=o){const{onInitializeWarning:a,target:n}=s;await e(r.toArray(),(async e=>{const r=e.on("initializeWarning",a);try{await e.initialize()}catch(r){const s=r instanceof t?r:new t(e.failureMode,r,e);if("error"===s.failureMode)throw s;"warn"===s.failureMode&&i("geocortex.api.support.InitializeBase").warn({message:"Error attempting to initialize child item: {0}.",error:s},s.error.message);a({error:s,target:n})}finally{r.remove()}}))}
1
+ import{getLogger as i}from"../utilities/log.js";import{parallelEach as e}from"../utilities/promise.js";import{handles as t}from"./HandlesMixin.js";import{InitializeError as r}from"./InitializeError.js";import{SerializableBase as s}from"./Serializable.js";import{notifyChange as a,observable as o}from"./observableUtils.js";export class InitializableBase extends(t(o(s))){get isInitialized(){return this._isInitialized}get isDestroyed(){return this._isDestroyed}get failureMode(){return this._failureMode}set failureMode(i){this._failureMode=i}_isInitialized=!1;_isDestroyed=!1;_initializePromise;_destroyPromise;_failureMode="warn";async initialize(){return void 0===this._initializePromise&&(this._initializePromise=(async()=>{try{await this.finishAssignProperties(),await this._onInitialize(),await this._initializeChildren(),await this._postInitialize()}catch(i){throw i instanceof Error?(this._initializePromise=void 0,new r(this.failureMode,i,this)):i}this._isInitialized=!0,a(this,"isInitialized")})()),this._initializePromise}async destroy(){return void 0===this._destroyPromise&&(this._destroyPromise=(async()=>{try{await this._onDestroy(),super.destroy()}catch(i){throw this._destroyPromise=void 0,i}this._isDestroyed=!0,a(this,"isDestroyed")})()),this._destroyPromise}toJSON(i="all"){return super.toJSON(i)}assignProperties(i){super.assignProperties(i)}assignPropertiesAsync(i){return super.assignPropertiesAsync(i)}getDefaults(){return super.getDefaults()}getDefault(i){return super.getDefault(i)}getSerializableProperties(i){return super.getSerializableProperties(i)}_getSerializableProperties(){return{...super._getSerializableProperties(),failureMode:{serializeModes:["initial"],default:"warn"}}}async _onInitialize(){}async _postInitialize(){}async _onDestroy(){}async _initializeChildren(){await e(this._initializableChildCollections(),(i=>initializeCollection(i,{target:this,onInitializeWarning:i=>this.emit("initializeWarning",i)})))}*_initializableChildCollections(){}}const n={onInitializeWarning:()=>{}};export async function initializeCollection(t,s=n){const{onInitializeWarning:a,target:o}=s;await e(t.toArray(),(async e=>{const t=e.on("initializeWarning",a);try{await e.initialize()}catch(t){const s=t instanceof r?t:new r(e.failureMode,t,e);if("error"===s.failureMode)throw s;"warn"===s.failureMode&&i("geocortex.api.support.InitializeBase").warn({message:"Error attempting to initialize child item: {0}.",error:s},s.error.message);a({error:s,target:o})}finally{t.remove()}}))}
@@ -15,20 +15,20 @@ export interface SettingsEvents<T> {
15
15
  property: keyof T;
16
16
  };
17
17
  }
18
- declare const Settings_base: (abstract new (_properties?: unknown) => SerializableBase<unknown>) & (abstract new (...args: any[]) => import("./observableUtils.js").ObservableMixin);
18
+ declare const Settings_base: abstract new (_properties?: unknown) => SerializableBase<unknown> & import("./observableUtils.js").ObservableMixin & import("./HandlesMixin.js").HandlesMixin<void>;
19
19
  /**
20
20
  * Helper class for implementing a collection of settings that can be inherited
21
21
  * at runtime from a parent collection of settings. Setting a value locally will
22
22
  * override the inherited setting.
23
23
  */
24
24
  export declare abstract class Settings<TProperties> extends Settings_base {
25
+ private static readonly _parentHandleKey;
25
26
  /**
26
27
  * @deprecated Do not directly reference this property. Use EventNames and
27
28
  * EventTypes helpers from @arcgis/core/Evented.
28
29
  */
29
30
  "@eventTypes": SettingsEvents<this>;
30
31
  private _parent;
31
- private _parentHandle;
32
32
  /**
33
33
  * Locally overridden setting values, keyed by setting name.
34
34
  */
@@ -1 +1 @@
1
- import e from"@arcgis/core/core/Collection";import{CopyOnWriteCollection as t}from"../utilities/CopyOnWriteCollection.js";import{every as i}from"../utilities/iterable.js";import{objectKeys as s}from"../utilities/object.js";import{isDefault as r,SerializableBase as n,shouldExcludeDefaults as o}from"./Serializable.js";import{notifyChange as h,observable as a}from"./observableUtils.js";export class Settings extends(a(n)){_parent;_parentHandle;_overrides;get parent(){return this._parent}set parent(e){this._setParent(e)}reset(e){if(this._overrides)if(e)this._overrides.delete(e),this._notifySettingChange(e);else{const e=[...this._overrides.keys()];this._overrides.clear();for(const t of e)this._notifySettingChange(t)}}isModified(e){if(!this._overrides)return!1;if(e){if(!this._overrides.has(e))return!1;const i=this._overrides.get(e);return i instanceof t?i.isModified:!(i instanceof Settings)||i.isModified()}return!i(this._overrides.values(),(e=>e instanceof t&&!e.isModified||e instanceof Settings&&!e.isModified()))}toJSON(e="all"){if(!this._overrides?.size&&"initial-with-defaults"!==e)return o(e)?void 0:{};const t=super.toJSON(e);if(t&&"initial-with-defaults"!==e)for(const e of s(t))this.isModified(e)||delete t[e];return o(e)&&r(t)?void 0:t}getDefaults(){return{}}_hasSettingIncludingAncestor(e){return!!this._overrides?.has(e)||!!this.parent&&this.parent._hasSettingIncludingAncestor(e)}_getSetting(e,t){return this._overrides?.has(e)?this._overrides.get(e):this.parent&&this._hasSettingIncludingAncestor(e)?this.parent[e]:t}_getCollectionSetting(i){if(!this._overrides?.has(i)){const s=this.parent?this.parent[i]:new e;null==this._overrides&&(this._overrides=new Map),this._overrides.set(i,new t(s))}return this._overrides.get(i)}_getNestedSettings(e,t){if(!this._overrides?.has(e)){const i=t();this.parent&&(i.parent=this.parent[e]),null==this._overrides&&(this._overrides=new Map),this._overrides.set(e,i)}return this._overrides.get(e)}_setSetting(e,t){null==this._overrides&&(this._overrides=new Map),this._overrides.set(e,t),this._notifySettingChange(e)}_setParent(i){if(this._parent!==i&&(null!=this._parent||null!=i)){if(null!=this._parentHandle&&(this._parentHandle.remove(),this._parentHandle=void 0),this._parent=i,null!=this._parent){const e=new WeakRef(this),t=this._parent.on("property-change",(i=>{const s=e.deref();null!=s?s._notifySettingChange(i.property):t.remove()}));this._parentHandle=t}if(this._overrides)for(const[s,r]of this._overrides)r instanceof t?r.originalCollection=i?i[s]:new e:r instanceof Settings&&(r.parent=i?i[s]:void 0);h(this)}}_notifySettingChange(e){this.emit("property-change",{property:e}),h(this,e)}}
1
+ import e from"@arcgis/core/core/Collection";import{CopyOnWriteCollection as t}from"../utilities/CopyOnWriteCollection.js";import{every as i}from"../utilities/iterable.js";import{objectKeys as s}from"../utilities/object.js";import{handles as r}from"./HandlesMixin.js";import{isDefault as n,SerializableBase as o,shouldExcludeDefaults as a}from"./Serializable.js";import{notifyChange as h,observable as d}from"./observableUtils.js";export class Settings extends(r(d(o))){static _parentHandleKey="settings-parent-handle";_parent;_overrides;get parent(){return this._parent}set parent(e){this._setParent(e)}reset(e){if(this._overrides)if(e)this._overrides.delete(e),this._notifySettingChange(e);else{const e=[...this._overrides.keys()];this._overrides.clear();for(const t of e)this._notifySettingChange(t)}}isModified(e){if(!this._overrides)return!1;if(e){if(!this._overrides.has(e))return!1;const i=this._overrides.get(e);return i instanceof t?i.isModified:!(i instanceof Settings)||i.isModified()}return!i(this._overrides.values(),(e=>e instanceof t&&!e.isModified||e instanceof Settings&&!e.isModified()))}toJSON(e="all"){if(!this._overrides?.size&&"initial-with-defaults"!==e)return a(e)?void 0:{};const t=super.toJSON(e);if(t&&"initial-with-defaults"!==e)for(const e of s(t))this.isModified(e)||delete t[e];return a(e)&&n(t)?void 0:t}getDefaults(){return{}}_hasSettingIncludingAncestor(e){return!!this._overrides?.has(e)||!!this.parent&&this.parent._hasSettingIncludingAncestor(e)}_getSetting(e,t){return this._overrides?.has(e)?this._overrides.get(e):this.parent&&this._hasSettingIncludingAncestor(e)?this.parent[e]:t}_getCollectionSetting(i){if(!this._overrides?.has(i)){const s=this.parent?this.parent[i]:new e;null==this._overrides&&(this._overrides=new Map),this._overrides.set(i,new t(s))}return this._overrides.get(i)}_getNestedSettings(e,t){if(!this._overrides?.has(e)){const i=t();this.parent&&(i.parent=this.parent[e]),null==this._overrides&&(this._overrides=new Map),this._overrides.set(e,i)}return this._overrides.get(e)}_setSetting(e,t){null==this._overrides&&(this._overrides=new Map),this._overrides.set(e,t),this._notifySettingChange(e)}_setParent(i){if(this._parent!==i&&(null!=this._parent||null!=i)){if(this._handles.remove(Settings._parentHandleKey),this._parent=i,null!=this._parent){const e=new WeakRef(this),t=this._parent.on("property-change",(i=>{const s=e.deref();null!=s?s._notifySettingChange(i.property):t.remove()}));this._handles.add(t,Settings._parentHandleKey)}if(this._overrides)for(const[s,r]of this._overrides)r instanceof t?r.originalCollection=i?i[s]:new e:r instanceof Settings&&(r.parent=i?i[s]:void 0);h(this)}}_notifySettingChange(e){this.emit("property-change",{property:e}),h(this,e)}}
@@ -9,7 +9,16 @@ import { type IHandle } from "../support/observableUtils.js";
9
9
  */
10
10
  export interface CollectionProxy<T> extends Collection<T> {
11
11
  }
12
- declare const CollectionProxy_base: typeof Evented & (abstract new (...args: any[]) => import("../support/observableUtils.js").ObservableMixin);
12
+ /**
13
+ * Options for the CollectionProxy constructor.
14
+ */
15
+ export interface CollectionProxyOptions {
16
+ /**
17
+ * If true, destroy will also destroy the wrapped collection.
18
+ */
19
+ destroyBackingCollection?: boolean;
20
+ }
21
+ declare const CollectionProxy_base: abstract new (...args: any[]) => Evented & import("../support/observableUtils.js").ObservableMixin & import("../support/HandlesMixin.js").HandlesMixin<void>;
13
22
  /**
14
23
  * Base class for implementing a Collection proxy, i.e. a class that wraps an
15
24
  * existing collection and provides additional functionality or logic. The
@@ -29,7 +38,6 @@ export declare abstract class CollectionProxy<T> extends CollectionProxy_base im
29
38
  * compatibility with Esri's API.
30
39
  */
31
40
  declaredClass: string;
32
- private readonly _handles;
33
41
  /**
34
42
  * The number of items in the collection.
35
43
  */
@@ -52,14 +60,16 @@ export declare abstract class CollectionProxy<T> extends CollectionProxy_base im
52
60
  private _destroyed;
53
61
  private _initialized;
54
62
  private _collectionField;
63
+ private _destroyBackingCollection;
55
64
  /**
56
65
  * Initializes a new instance of the
57
66
  * {@link utilities/CollectionProxy!CollectionProxy} class.
58
67
  *
59
68
  * @param collection The underlying collection to delegate to, or a function
60
69
  * that produces the underlying collection.
70
+ * @param options Controls lifecycle behavior for the wrapped collection.
61
71
  */
62
- constructor(collection?: Collection<T>);
72
+ constructor(collection?: Collection<T>, options?: CollectionProxyOptions);
63
73
  /**
64
74
  * @inheritDoc
65
75
  */
@@ -360,8 +370,17 @@ export declare abstract class CollectionProxy<T> extends CollectionProxy_base im
360
370
  * @inheritdoc
361
371
  */
362
372
  watch(path: string | string[], callback: (newValue: any, oldValue: any, propertyName: string, target: any) => void, sync?: boolean): IHandle;
373
+ /**
374
+ * @inheritdoc
375
+ */
363
376
  addHandles<T>(handles: IHandle | IHandle[], groupKey?: GroupKey<T>): void;
377
+ /**
378
+ * @inheritdoc
379
+ */
364
380
  removeHandles<T>(groupKey?: GroupKey<T>): void;
381
+ /**
382
+ * @inheritdoc
383
+ */
365
384
  hasHandles<T>(groupKey?: GroupKey<T>): boolean;
366
385
  /**
367
386
  * @deprecated - Unsupported on CollectionProxy.
@@ -1 +1 @@
1
- import{Evented as t}from"@arcgis/core/core/Evented.js";import{notifyChange as e,observable as o,onWatch as i,watch as n}from"../support/observableUtils.js";import{_generateChangeEvent as r}from"./collection.js";const s="collection-proxy-collection-change-handles";export class CollectionProxy extends(o(t)){declaredClass="esri.core.Collection";_handles=new Map;get length(){return this._collection.length}get destroyed(){return this._destroyed}set destroyed(t){this._destroyed=t}get initialized(){return this._initialized}set initialized(t){this._initialized=t}get _collection(){if(void 0===this._collectionField)throw new Error("CollectionProxy requires a backing collection.");return this._collectionField}set _collection(t){if(this._collectionField===t)return;const o=this._collectionField;this.removeHandles(s);const i=r(o,t);if(null!=i){for(const t of i.added){const e={item:t,cancellable:!1,defaultPrevented:!1,preventDefault:()=>{},target:this};this.emit("before-add",e)}for(const t of i.removed){const e={item:t,cancellable:!1,defaultPrevented:!1,preventDefault:()=>{},target:this};this.emit("before-remove",e)}this.emit("before-changes",{cancellable:!1,defaultPrevented:!1,preventDefault:()=>{},item:void 0})}if(this._collectionField=t,this._addForwardingEvents(),null!=i){this.emit("change",i);for(const t of i.added)this.emit("after-add",{item:t});for(const t of i.removed)this.emit("after-remove",{item:t});this.emit("after-changes")}e(this,"length")}_destroyed=!1;_initialized=!0;_collectionField;constructor(t){super(),this._collectionField=t,this._addForwardingEvents()}*[Symbol.iterator](){for(const t of this._collection)yield t}add(t,e){return this._collection.add(t,e),this}addMany(t,e){if(!t)return this;if(arguments.length>1){let o=e;for(let e=0;e<t.length;e++)"function"==typeof t.getItemAt?this.add(t.getItemAt(e),o++):this.add(t[e],o++)}else for(let e=0;e<t.length;e++)"function"==typeof t.getItemAt?this.add(t.getItemAt(e)):this.add(t[e]);return this}clone(){const t=Object.create(Object.getPrototypeOf(this));return t._collection=this._collection,t}concat(t){return this._collection.concat(t)}destroyAll(){return this._collection.destroyAll()}destroyMany(t){return this._collection.destroyMany(t)}drain(t,e){this._collection.drain(t,e)}destroy(){this.removeHandles(),this._destroyed=!0,this._initialized=!1,this._collection.destroy()}every(t){return this._collection.every(t)}filter(t){return this._collection.filter(t)}find(t){return this._collection.find(t)}findIndex(t){return this._collection.findIndex(t)}flatten(t){return this._collection.flatten(t)}forEach(t){return this._collection.forEach(t)}at(t){return this.getItemAt(t)}getItemAt(t){return this._collection.getItemAt(t)}includes(t){return this._collection.includes(t)}indexOf(t,e){return this._collection.indexOf(t,e)}join(t){return this._collection.join(t)}lastIndexOf(t,e){return this._collection.lastIndexOf(t,e)}map(t){return this._collection.map(t)}pop(){return this.removeAt(this.length-1)}push(t){return this.add(t,this.length),this.length}reduce(t,e){return this._collection.reduce(t,e)}reduceRight(t,e){return this._collection.reduceRight(t,e)}remove(t){return this.removeAt(this.indexOf(t))}removeAll(){const t=[];for(;this.length;){const e=this.pop();e&&t.push(e)}return t}removeAt(t){return this._collection.removeAt(t)}removeMany(t){const e=[];for(let o=0;o<t.length;o++){const i="function"==typeof t.getItemAt?t.getItemAt(o):t[o],n=this.indexOf(i);if(n>=0){const t=this.removeAt(n);t&&e.push(t)}}return e}reorder(t,e){return this._collection.reorder(t,e)}reverse(){return this._collection.reverse(),this}shift(){return this.removeAt(0)}slice(t,e){return this._collection.slice(t,e)}some(t){return this._collection.some(t)}sort(t){return this._collection.sort(t),this}splice(t,e,...o){const i=[];for(let o=e;o>0;o--){const e=this.removeAt(t);e&&i.push(e)}let n=t;return o.forEach((t=>{this.add(t,n),n++})),i}toArray(){return this._collection.toArray()}unshift(t){return this.add(t,0),this.length}set(t,e){throw new Error("set is not supported on CollectionProxy.")}get(t){throw new Error("get is not supported on CollectionProxy.")}watch(t,e,o){throw new Error("watch is not supported on CollectionProxy. Use watch from @vertigis/arcgis-extensions/support/observableUtils instead.")}addHandles(t,e){const o=Array.isArray(t)?t:[t],i=e??"default";this._handles.has(i)||this._handles.set(i,[]),this._handles.get(i).push(...o)}removeHandles(t){if(null==t)for(const t of this._handles.values())for(const e of t)e.remove();else{const e=this._handles.get(t);if(null!=e){for(const t of e)t.remove();this._handles.delete(t)}}}hasHandles(t){return null==t?this._handles.size>0:this._handles.has(t)}notifyChange(t){throw new Error("notifyChange is not supported on CollectionProxy.")}_get(t){const e=t.split(".");let o=this;for(;o&&"object"==typeof o&&e.length;)o=o[e.shift()];return e.length?void 0:o}_set(t,e){const o=t.split(".");let i=this;for(;i&&"object"==typeof i&&o.length>1;)i=i[o.shift()];return i&&"object"==typeof i&&(i[o[0]]=e),this}_addForwardingEvents(){null!=this._collectionField&&this.addHandles([this._collectionField.on("before-add",(t=>this.emit("before-add",t))),this._collectionField.on("before-changes",(t=>this.emit("before-changes",t))),this._collectionField.on("before-remove",(t=>this.emit("before-remove",t))),this._collectionField.on("change",(t=>this.emit("change",t))),this._collectionField.on("after-add",(t=>this.emit("after-add",t))),this._collectionField.on("after-changes",(t=>this.emit("after-changes",t))),this._collectionField.on("after-remove",(t=>this.emit("after-remove",t))),i(this,"length",(()=>n(this._collectionField,"length",(()=>e(this,"length")),{sync:!0})))],s)}}
1
+ import{Evented as t}from"@arcgis/core/core/Evented.js";import{handles as e}from"../support/HandlesMixin.js";import{notifyChange as o,observable as i,onWatch as r,watch as n}from"../support/observableUtils.js";import{_generateChangeEvent as l}from"./collection.js";const s="collection-proxy-collection-change-handles";export class CollectionProxy extends(e(i(t))){declaredClass="esri.core.Collection";get length(){return this._collection.length}get destroyed(){return this._destroyed}set destroyed(t){this._destroyed=t}get initialized(){return this._initialized}set initialized(t){this._initialized=t}get _collection(){if(void 0===this._collectionField)throw new Error("CollectionProxy requires a backing collection.");return this._collectionField}set _collection(t){if(this._collectionField===t)return;const e=this._collectionField;this._handles.remove(s);const i=l(e,t);if(null!=i){for(const t of i.added){const e={item:t,cancellable:!1,defaultPrevented:!1,preventDefault:()=>{},target:this};this.emit("before-add",e)}for(const t of i.removed){const e={item:t,cancellable:!1,defaultPrevented:!1,preventDefault:()=>{},target:this};this.emit("before-remove",e)}this.emit("before-changes",{cancellable:!1,defaultPrevented:!1,preventDefault:()=>{},item:void 0})}if(this._collectionField=t,this._addForwardingEvents(),null!=i){this.emit("change",i);for(const t of i.added)this.emit("after-add",{item:t});for(const t of i.removed)this.emit("after-remove",{item:t});this.emit("after-changes")}o(this,"length")}_destroyed=!1;_initialized=!0;_collectionField;_destroyBackingCollection=!1;constructor(t,e){super(),this._collectionField=t,this._destroyBackingCollection=e?.destroyBackingCollection??!1,this._addForwardingEvents()}*[Symbol.iterator](){for(const t of this._collection)yield t}add(t,e){return this._collection.add(t,e),this}addMany(t,e){if(!t)return this;if(arguments.length>1){let o=e;for(let e=0;e<t.length;e++)"function"==typeof t.getItemAt?this.add(t.getItemAt(e),o++):this.add(t[e],o++)}else for(let e=0;e<t.length;e++)"function"==typeof t.getItemAt?this.add(t.getItemAt(e)):this.add(t[e]);return this}clone(){const t=Object.create(Object.getPrototypeOf(this));return t._collection=this._collection,t._destroyBackingCollection=this._destroyBackingCollection,t}concat(t){return this._collection.concat(t)}destroyAll(){return this._collection.destroyAll()}destroyMany(t){return this._collection.destroyMany(t)}drain(t,e){this._collection.drain(t,e)}destroy(){this._destroyed=!0,this._initialized=!1,super.destroy(),this._destroyBackingCollection&&this._collectionField?.destroy()}every(t){return this._collection.every(t)}filter(t){return this._collection.filter(t)}find(t){return this._collection.find(t)}findIndex(t){return this._collection.findIndex(t)}flatten(t){return this._collection.flatten(t)}forEach(t){return this._collection.forEach(t)}at(t){return this.getItemAt(t)}getItemAt(t){return this._collection.getItemAt(t)}includes(t){return this._collection.includes(t)}indexOf(t,e){return this._collection.indexOf(t,e)}join(t){return this._collection.join(t)}lastIndexOf(t,e){return this._collection.lastIndexOf(t,e)}map(t){return this._collection.map(t)}pop(){return this.removeAt(this.length-1)}push(t){return this.add(t,this.length),this.length}reduce(t,e){return this._collection.reduce(t,e)}reduceRight(t,e){return this._collection.reduceRight(t,e)}remove(t){return this.removeAt(this.indexOf(t))}removeAll(){const t=[];for(;this.length;){const e=this.pop();e&&t.push(e)}return t}removeAt(t){return this._collection.removeAt(t)}removeMany(t){const e=[];for(let o=0;o<t.length;o++){const i="function"==typeof t.getItemAt?t.getItemAt(o):t[o],r=this.indexOf(i);if(r>=0){const t=this.removeAt(r);t&&e.push(t)}}return e}reorder(t,e){return this._collection.reorder(t,e)}reverse(){return this._collection.reverse(),this}shift(){return this.removeAt(0)}slice(t,e){return this._collection.slice(t,e)}some(t){return this._collection.some(t)}sort(t){return this._collection.sort(t),this}splice(t,e,...o){const i=[];for(let o=e;o>0;o--){const e=this.removeAt(t);e&&i.push(e)}let r=t;return o.forEach((t=>{this.add(t,r),r++})),i}toArray(){return this._collection.toArray()}unshift(t){return this.add(t,0),this.length}set(t,e){throw new Error("set is not supported on CollectionProxy.")}get(t){throw new Error("get is not supported on CollectionProxy.")}watch(t,e,o){throw new Error("watch is not supported on CollectionProxy. Use watch from @vertigis/arcgis-extensions/support/observableUtils instead.")}addHandles(t,e){this._handles.add(t,e)}removeHandles(t){this._handles.remove(t)}hasHandles(t){return this._handles.has(t)}notifyChange(t){throw new Error("notifyChange is not supported on CollectionProxy.")}_get(t){const e=t.split(".");let o=this;for(;o&&"object"==typeof o&&e.length;)o=o[e.shift()];return e.length?void 0:o}_set(t,e){const o=t.split(".");let i=this;for(;i&&"object"==typeof i&&o.length>1;)i=i[o.shift()];return i&&"object"==typeof i&&(i[o[0]]=e),this}_addForwardingEvents(){null!=this._collectionField&&this._handles.add([this._collectionField.on("before-add",(t=>this.emit("before-add",t))),this._collectionField.on("before-changes",(t=>this.emit("before-changes",t))),this._collectionField.on("before-remove",(t=>this.emit("before-remove",t))),this._collectionField.on("change",(t=>this.emit("change",t))),this._collectionField.on("after-add",(t=>this.emit("after-add",t))),this._collectionField.on("after-changes",(t=>this.emit("after-changes",t))),this._collectionField.on("after-remove",(t=>this.emit("after-remove",t))),r(this,"length",(()=>n(this._collectionField,"length",(()=>o(this,"length")),{sync:!0})))],s)}}