@vertigis/arcgis-extensions 34.0.0 → 34.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/data/Feature.js +1 -1
  2. package/data/_TableExtension.js +1 -1
  3. package/data/convert.js +1 -1
  4. package/docs/html/classes/data__tableextension.tableextension.html +8 -8
  5. package/docs/html/classes/data__tableextension.tablefeaturesettings.html +10 -10
  6. package/docs/html/classes/data__tableextension.tableschema.html +13 -13
  7. package/docs/html/classes/data_arcgisservicetableextension.arcgisservicetableextension.html +3 -3
  8. package/docs/html/classes/mapping__layerextension.arraywrappedcollection.html +2 -2
  9. package/docs/html/classes/mapping__layerextension.layerextension.html +41 -41
  10. package/docs/html/classes/mapping__layerextension.layerextensionschema.html +6 -6
  11. package/docs/html/classes/mapping__sublayerextension.sublayerextension.html +32 -32
  12. package/docs/html/classes/mapping__sublayerextension.sublayerschema.html +4 -4
  13. package/docs/html/classes/mapping__sublayerextension.subsublayerextensioncollection.html +6 -6
  14. package/docs/html/classes/mapping_arcgissublayerextension.arcgissublayerextension.html +19 -19
  15. package/docs/html/classes/mapping_arcgissublayerextension.arcgissublayerschema.html +2 -2
  16. package/docs/html/classes/mapping_buildingcomponentsublayerextension.buildingcomponentsublayerextension.html +20 -20
  17. package/docs/html/classes/mapping_buildingcomponentsublayerextension.buildingcomponentsublayerschema.html +2 -2
  18. package/docs/html/classes/mapping_buildinggroupsublayerextension.buildinggroupsublayerextension.html +22 -22
  19. package/docs/html/classes/mapping_buildinggroupsublayerextension.buildinggroupsublayerschema.html +4 -4
  20. package/docs/html/classes/mapping_buildingscenelayerextension.buildingscenelayerextension.html +32 -32
  21. package/docs/html/classes/mapping_buildingscenelayerextension.buildingscenelayerreadonlyschema.html +4 -4
  22. package/docs/html/classes/mapping_buildingsublayerextension.buildingsublayerextension.html +28 -28
  23. package/docs/html/classes/mapping_buildingsublayerextension.buildingsublayerschema.html +3 -3
  24. package/docs/html/classes/mapping_csvlayerextension.csvlayerextension.html +39 -39
  25. package/docs/html/classes/mapping_elevationlayerextension.elevationlayerextension.html +37 -37
  26. package/docs/html/classes/mapping_featurecollectionlayerextension.featurecollectionlayerextension.html +33 -33
  27. package/docs/html/classes/mapping_featurelayerextension.featurelayerextension.html +35 -35
  28. package/docs/html/classes/mapping_featurelayerextensionbase.featurelayerextensionbase.html +37 -37
  29. package/docs/html/classes/mapping_featurelayerextensionbase.featurelayerschema.html +4 -4
  30. package/docs/html/classes/mapping_georsslayerextension.georsslayerextension.html +37 -37
  31. package/docs/html/classes/mapping_graphicslayerextension.graphicslayerextension.html +32 -32
  32. package/docs/html/classes/mapping_grouplayerextension.grouplayerextension.html +30 -30
  33. package/docs/html/classes/mapping_imagerylayerextension.imagerylayerextension.html +37 -37
  34. package/docs/html/classes/mapping_imagerytilelayerextension.imagerytilelayerextension.html +34 -34
  35. package/docs/html/classes/mapping_integratedmeshlayerextension.integratedmeshlayerextension.html +38 -38
  36. package/docs/html/classes/mapping_kmllayerextension.kmllayerextension.html +34 -34
  37. package/docs/html/classes/mapping_kmlsublayerextension.kmlsublayerextension.html +24 -24
  38. package/docs/html/classes/mapping_mapextension.mapextension.html +13 -13
  39. package/docs/html/classes/mapping_mapimagelayerextension.mapimagelayerextension.html +35 -35
  40. package/docs/html/classes/mapping_mapimagesublayerextension.mapimagesublayerextension.html +16 -16
  41. package/docs/html/classes/mapping_openstreetmaplayerextension.openstreetmaplayerextension.html +39 -39
  42. package/docs/html/classes/mapping_pointcloudlayerextension.pointcloudlayerextension.html +37 -37
  43. package/docs/html/classes/mapping_scenelayerextension.scenelayerextension.html +37 -37
  44. package/docs/html/classes/mapping_streamlayerextension.streamlayerextension.html +38 -38
  45. package/docs/html/classes/mapping_streamlayerextension.streamlayerschema.html +4 -4
  46. package/docs/html/classes/mapping_tilelayerextension.tilelayerextension.html +33 -33
  47. package/docs/html/classes/mapping_tilesublayerextension.tilesublayerextension.html +17 -17
  48. package/docs/html/classes/mapping_vectortilelayerextension.vectortilelayerextension.html +36 -36
  49. package/docs/html/classes/mapping_webtilelayerextension.webtilelayerextension.html +39 -39
  50. package/docs/html/classes/mapping_wmslayerextension.wmslayerextension.html +34 -34
  51. package/docs/html/classes/mapping_wmssublayerextension.wmssublayerextension.html +24 -24
  52. package/docs/html/classes/mapping_wmtslayerextension.wmtslayerextension.html +34 -34
  53. package/docs/html/classes/mapping_wmtssublayerextension.wmtssublayerextension.html +23 -23
  54. package/docs/html/modules/data_convert.html +1 -1
  55. package/docs/html/modules/data_feature.html +2 -2
  56. package/docs/html/modules/mapping__layerextension.html +1 -1
  57. package/docs/html/modules/mapping_mapextension.html +1 -1
  58. package/docs/html/modules/version.html +1 -1
  59. package/mapping/MapExtension.js +1 -1
  60. package/mapping/_LayerExtension.js +1 -1
  61. package/mapping/_SublayerExtension.js +1 -1
  62. package/package.json +3 -2
  63. package/version.d.ts +1 -1
  64. package/version.js +1 -1
@@ -242,7 +242,7 @@
242
242
  <aside class="tsd-sources">
243
243
  <p>Inherited from <a href="mapping__sublayerextension.sublayerextension.html">SublayerExtension</a>.<a href="mapping__sublayerextension.sublayerextension.html#_effectivefullextent">_effectiveFullExtent</a></p>
244
244
  <ul>
245
- <li>Defined in src/mapping/_SublayerExtension.ts:417</li>
245
+ <li>Defined in src/mapping/_SublayerExtension.ts:425</li>
246
246
  </ul>
247
247
  </aside>
248
248
  <div class="tsd-comment tsd-typography">
@@ -274,7 +274,7 @@
274
274
  <aside class="tsd-sources">
275
275
  <p>Inherited from <a href="mapping__sublayerextension.sublayerextension.html">SublayerExtension</a>.<a href="mapping__sublayerextension.sublayerextension.html#_itemtype">_itemType</a></p>
276
276
  <ul>
277
- <li>Defined in src/mapping/_SublayerExtension.ts:422</li>
277
+ <li>Defined in src/mapping/_SublayerExtension.ts:430</li>
278
278
  </ul>
279
279
  </aside>
280
280
  </section>
@@ -285,7 +285,7 @@
285
285
  <aside class="tsd-sources">
286
286
  <p>Inherited from <a href="mapping__sublayerextension.sublayerextension.html">SublayerExtension</a>.<a href="mapping__sublayerextension.sublayerextension.html#_watchhandles">_watchHandles</a></p>
287
287
  <ul>
288
- <li>Defined in src/mapping/_SublayerExtension.ts:428</li>
288
+ <li>Defined in src/mapping/_SublayerExtension.ts:436</li>
289
289
  </ul>
290
290
  </aside>
291
291
  <div class="tsd-comment tsd-typography">
@@ -481,7 +481,7 @@
481
481
  <li class="tsd-description">
482
482
  <aside class="tsd-sources">
483
483
  <ul>
484
- <li>Defined in src/mapping/_SublayerExtension.ts:375</li>
484
+ <li>Defined in src/mapping/_SublayerExtension.ts:383</li>
485
485
  </ul>
486
486
  </aside>
487
487
  <div class="tsd-comment tsd-typography">
@@ -974,7 +974,7 @@
974
974
  <li class="tsd-description">
975
975
  <aside class="tsd-sources">
976
976
  <ul>
977
- <li>Defined in src/mapping/_SublayerExtension.ts:349</li>
977
+ <li>Defined in src/mapping/_SublayerExtension.ts:357</li>
978
978
  </ul>
979
979
  </aside>
980
980
  <div class="tsd-comment tsd-typography">
@@ -1136,7 +1136,7 @@
1136
1136
  <aside class="tsd-sources">
1137
1137
  <p>Inherited from <a href="mapping__sublayerextension.sublayerextension.html">SublayerExtension</a>.<a href="mapping__sublayerextension.sublayerextension.html#_capabilities">_capabilities</a></p>
1138
1138
  <ul>
1139
- <li>Defined in src/mapping/_SublayerExtension.ts:977</li>
1139
+ <li>Defined in src/mapping/_SublayerExtension.ts:985</li>
1140
1140
  </ul>
1141
1141
  </aside>
1142
1142
  <div class="tsd-comment tsd-typography">
@@ -1206,7 +1206,7 @@
1206
1206
  <aside class="tsd-sources">
1207
1207
  <p>Inherited from <a href="mapping__sublayerextension.sublayerextension.html">SublayerExtension</a>.<a href="mapping__sublayerextension.sublayerextension.html#_createlayerlistsettings">_createLayerListSettings</a></p>
1208
1208
  <ul>
1209
- <li>Defined in src/mapping/_SublayerExtension.ts:953</li>
1209
+ <li>Defined in src/mapping/_SublayerExtension.ts:961</li>
1210
1210
  </ul>
1211
1211
  </aside>
1212
1212
  <div class="tsd-comment tsd-typography">
@@ -1262,7 +1262,7 @@
1262
1262
  <aside class="tsd-sources">
1263
1263
  <p>Inherited from <a href="mapping__sublayerextension.sublayerextension.html">SublayerExtension</a>.<a href="mapping__sublayerextension.sublayerextension.html#_createschema">_createSchema</a></p>
1264
1264
  <ul>
1265
- <li>Defined in src/mapping/_SublayerExtension.ts:943</li>
1265
+ <li>Defined in src/mapping/_SublayerExtension.ts:951</li>
1266
1266
  </ul>
1267
1267
  </aside>
1268
1268
  <div class="tsd-comment tsd-typography">
@@ -1315,7 +1315,7 @@
1315
1315
  <aside class="tsd-sources">
1316
1316
  <p>Inherited from <a href="mapping__sublayerextension.sublayerextension.html">SublayerExtension</a>.<a href="mapping__sublayerextension.sublayerextension.html#_createsublayerextension">_createSublayerExtension</a></p>
1317
1317
  <ul>
1318
- <li>Defined in src/mapping/_SublayerExtension.ts:936</li>
1318
+ <li>Defined in src/mapping/_SublayerExtension.ts:944</li>
1319
1319
  </ul>
1320
1320
  </aside>
1321
1321
  <div class="tsd-comment tsd-typography">
@@ -1347,7 +1347,7 @@
1347
1347
  <aside class="tsd-sources">
1348
1348
  <p>Inherited from <a href="mapping__sublayerextension.sublayerextension.html">SublayerExtension</a>.<a href="mapping__sublayerextension.sublayerextension.html#_createsublayerextensioncollection">_createSublayerExtensionCollection</a></p>
1349
1349
  <ul>
1350
- <li>Defined in src/mapping/_SublayerExtension.ts:1035</li>
1350
+ <li>Defined in src/mapping/_SublayerExtension.ts:1043</li>
1351
1351
  </ul>
1352
1352
  </aside>
1353
1353
  <div class="tsd-comment tsd-typography">
@@ -1371,7 +1371,7 @@
1371
1371
  <aside class="tsd-sources">
1372
1372
  <p>Inherited from <a href="mapping__sublayerextension.sublayerextension.html">SublayerExtension</a>.<a href="mapping__sublayerextension.sublayerextension.html#_createsublayerref">_createSublayerRef</a></p>
1373
1373
  <ul>
1374
- <li>Defined in src/mapping/_SublayerExtension.ts:1027</li>
1374
+ <li>Defined in src/mapping/_SublayerExtension.ts:1035</li>
1375
1375
  </ul>
1376
1376
  </aside>
1377
1377
  <div class="tsd-comment tsd-typography">
@@ -1552,7 +1552,7 @@
1552
1552
  <aside class="tsd-sources">
1553
1553
  <p>Inherited from <a href="mapping__sublayerextension.sublayerextension.html">SublayerExtension</a>.<a href="mapping__sublayerextension.sublayerextension.html#_initializablechildcollections">_initializableChildCollections</a></p>
1554
1554
  <ul>
1555
- <li>Defined in src/mapping/_SublayerExtension.ts:1012</li>
1555
+ <li>Defined in src/mapping/_SublayerExtension.ts:1020</li>
1556
1556
  </ul>
1557
1557
  </aside>
1558
1558
  <div class="tsd-comment tsd-typography">
@@ -1667,7 +1667,7 @@
1667
1667
  <aside class="tsd-sources">
1668
1668
  <p>Inherited from <a href="mapping__sublayerextension.sublayerextension.html">SublayerExtension</a>.<a href="mapping__sublayerextension.sublayerextension.html#_ondestroy">_onDestroy</a></p>
1669
1669
  <ul>
1670
- <li>Defined in src/mapping/_SublayerExtension.ts:852</li>
1670
+ <li>Defined in src/mapping/_SublayerExtension.ts:860</li>
1671
1671
  </ul>
1672
1672
  </aside>
1673
1673
  <div class="tsd-comment tsd-typography">
@@ -1691,7 +1691,7 @@
1691
1691
  <aside class="tsd-sources">
1692
1692
  <p>Inherited from <a href="mapping__sublayerextension.sublayerextension.html">SublayerExtension</a>.<a href="mapping__sublayerextension.sublayerextension.html#_oninitialize">_onInitialize</a></p>
1693
1693
  <ul>
1694
- <li>Defined in src/mapping/_SublayerExtension.ts:984</li>
1694
+ <li>Defined in src/mapping/_SublayerExtension.ts:992</li>
1695
1695
  </ul>
1696
1696
  </aside>
1697
1697
  <div class="tsd-comment tsd-typography">
@@ -1715,7 +1715,7 @@
1715
1715
  <aside class="tsd-sources">
1716
1716
  <p>Inherited from <a href="mapping__sublayerextension.sublayerextension.html">SublayerExtension</a>.<a href="mapping__sublayerextension.sublayerextension.html#_onsublayeraddedpostinitialize">_onSublayerAddedPostInitialize</a></p>
1717
1717
  <ul>
1718
- <li>Defined in src/mapping/_SublayerExtension.ts:835</li>
1718
+ <li>Defined in src/mapping/_SublayerExtension.ts:843</li>
1719
1719
  </ul>
1720
1720
  </aside>
1721
1721
  <div class="tsd-comment tsd-typography">
@@ -1748,7 +1748,7 @@
1748
1748
  <aside class="tsd-sources">
1749
1749
  <p>Inherited from <a href="mapping__sublayerextension.sublayerextension.html">SublayerExtension</a>.<a href="mapping__sublayerextension.sublayerextension.html#_postinitialize">_postInitialize</a></p>
1750
1750
  <ul>
1751
- <li>Defined in src/mapping/_SublayerExtension.ts:817</li>
1751
+ <li>Defined in src/mapping/_SublayerExtension.ts:825</li>
1752
1752
  </ul>
1753
1753
  </aside>
1754
1754
  <div class="tsd-comment tsd-typography">
@@ -1970,7 +1970,7 @@
1970
1970
  <aside class="tsd-sources">
1971
1971
  <p>Inherited from <a href="mapping__sublayerextension.sublayerextension.html">SublayerExtension</a>.<a href="mapping__sublayerextension.sublayerextension.html#addfeatures">addFeatures</a></p>
1972
1972
  <ul>
1973
- <li>Defined in src/mapping/_SublayerExtension.ts:561</li>
1973
+ <li>Defined in src/mapping/_SublayerExtension.ts:569</li>
1974
1974
  </ul>
1975
1975
  </aside>
1976
1976
  <div class="tsd-comment tsd-typography">
@@ -2092,7 +2092,7 @@
2092
2092
  <aside class="tsd-sources">
2093
2093
  <p>Inherited from <a href="mapping__sublayerextension.sublayerextension.html">SublayerExtension</a>.<a href="mapping__sublayerextension.sublayerextension.html#deletefeatures">deleteFeatures</a></p>
2094
2094
  <ul>
2095
- <li>Defined in src/mapping/_SublayerExtension.ts:585</li>
2095
+ <li>Defined in src/mapping/_SublayerExtension.ts:593</li>
2096
2096
  </ul>
2097
2097
  </aside>
2098
2098
  <div class="tsd-comment tsd-typography">
@@ -2115,7 +2115,7 @@
2115
2115
  <aside class="tsd-sources">
2116
2116
  <p>Inherited from <a href="mapping__sublayerextension.sublayerextension.html">SublayerExtension</a>.<a href="mapping__sublayerextension.sublayerextension.html#deletefeatures">deleteFeatures</a></p>
2117
2117
  <ul>
2118
- <li>Defined in src/mapping/_SublayerExtension.ts:589</li>
2118
+ <li>Defined in src/mapping/_SublayerExtension.ts:597</li>
2119
2119
  </ul>
2120
2120
  </aside>
2121
2121
  <div class="tsd-comment tsd-typography">
@@ -2378,7 +2378,7 @@
2378
2378
  <aside class="tsd-sources">
2379
2379
  <p>Inherited from <a href="mapping__sublayerextension.sublayerextension.html">SublayerExtension</a>.<a href="mapping__sublayerextension.sublayerextension.html#getfeatures">getFeatures</a></p>
2380
2380
  <ul>
2381
- <li>Defined in src/mapping/_SublayerExtension.ts:543</li>
2381
+ <li>Defined in src/mapping/_SublayerExtension.ts:551</li>
2382
2382
  </ul>
2383
2383
  </aside>
2384
2384
  <div class="tsd-comment tsd-typography">
@@ -2411,7 +2411,7 @@
2411
2411
  <aside class="tsd-sources">
2412
2412
  <p>Inherited from <a href="mapping__sublayerextension.sublayerextension.html">SublayerExtension</a>.<a href="mapping__sublayerextension.sublayerextension.html#getfullextent">getFullExtent</a></p>
2413
2413
  <ul>
2414
- <li>Defined in src/mapping/_SublayerExtension.ts:554</li>
2414
+ <li>Defined in src/mapping/_SublayerExtension.ts:562</li>
2415
2415
  </ul>
2416
2416
  </aside>
2417
2417
  <div class="tsd-comment tsd-typography">
@@ -2707,7 +2707,7 @@
2707
2707
  <aside class="tsd-sources">
2708
2708
  <p>Inherited from <a href="mapping__sublayerextension.sublayerextension.html">SublayerExtension</a>.<a href="mapping__sublayerextension.sublayerextension.html#updatefeatures">updateFeatures</a></p>
2709
2709
  <ul>
2710
- <li>Defined in src/mapping/_SublayerExtension.ts:573</li>
2710
+ <li>Defined in src/mapping/_SublayerExtension.ts:581</li>
2711
2711
  </ul>
2712
2712
  </aside>
2713
2713
  <div class="tsd-comment tsd-typography">
@@ -2785,7 +2785,7 @@
2785
2785
  <aside class="tsd-sources">
2786
2786
  <p>Inherited from <a href="mapping__sublayerextension.sublayerextension.html">SublayerExtension</a>.<a href="mapping__sublayerextension.sublayerextension.html#create">create</a></p>
2787
2787
  <ul>
2788
- <li>Defined in src/mapping/_SublayerExtension.ts:489</li>
2788
+ <li>Defined in src/mapping/_SublayerExtension.ts:497</li>
2789
2789
  </ul>
2790
2790
  </aside>
2791
2791
  <div class="tsd-comment tsd-typography">
@@ -147,7 +147,7 @@
147
147
  <li class="tsd-description">
148
148
  <aside class="tsd-sources">
149
149
  <ul>
150
- <li>Defined in src/data/convert.ts:718</li>
150
+ <li>Defined in src/data/convert.ts:726</li>
151
151
  </ul>
152
152
  </aside>
153
153
  <div class="tsd-comment tsd-typography">
@@ -129,7 +129,7 @@
129
129
  <li class="tsd-description">
130
130
  <aside class="tsd-sources">
131
131
  <ul>
132
- <li>Defined in src/data/Feature.ts:1539</li>
132
+ <li>Defined in src/data/Feature.ts:1541</li>
133
133
  </ul>
134
134
  </aside>
135
135
  <div class="tsd-comment tsd-typography">
@@ -197,7 +197,7 @@
197
197
  <li class="tsd-description">
198
198
  <aside class="tsd-sources">
199
199
  <ul>
200
- <li>Defined in src/data/Feature.ts:747</li>
200
+ <li>Defined in src/data/Feature.ts:749</li>
201
201
  </ul>
202
202
  </aside>
203
203
  <div class="tsd-comment tsd-typography">
@@ -100,7 +100,7 @@
100
100
  <div class="tsd-signature tsd-kind-icon">Layer<wbr>Extension<wbr>Schema<wbr>Property<wbr>Binding<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">string</span><span class="tsd-signature-symbol"> | </span><span class="tsd-signature-symbol">{ </span>property<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">string</span><span class="tsd-signature-symbol">; </span>readonly<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">; </span>sync<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">boolean</span><span class="tsd-signature-symbol">; </span>value<span class="tsd-signature-symbol">?: </span><span class="tsd-signature-type">unknown</span><span class="tsd-signature-symbol"> }</span></div>
101
101
  <aside class="tsd-sources">
102
102
  <ul>
103
- <li>Defined in src/mapping/_LayerExtension.ts:1522</li>
103
+ <li>Defined in src/mapping/_LayerExtension.ts:1530</li>
104
104
  </ul>
105
105
  </aside>
106
106
  <div class="tsd-comment tsd-typography">
@@ -101,7 +101,7 @@
101
101
  <div class="tsd-signature tsd-kind-icon">Feature<wbr>Source<wbr>Predicate<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">(</span>source<span class="tsd-signature-symbol">: </span><a href="../interfaces/data_featuresource.featuresource.html" class="tsd-signature-type" data-tsd-kind="Interface">FeatureSource</a><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol"> =&gt; </span><span class="tsd-signature-type">boolean</span></div>
102
102
  <aside class="tsd-sources">
103
103
  <ul>
104
- <li>Defined in src/mapping/MapExtension.ts:2588</li>
104
+ <li>Defined in src/mapping/MapExtension.ts:2603</li>
105
105
  </ul>
106
106
  </aside>
107
107
  <div class="tsd-comment tsd-typography">
@@ -81,7 +81,7 @@
81
81
  <section class="tsd-panel tsd-member tsd-kind-variable tsd-parent-kind-module">
82
82
  <a name="version-1" class="tsd-anchor"></a>
83
83
  <h3><span class="tsd-flag ts-flagConst">Const</span> version</h3>
84
- <div class="tsd-signature tsd-kind-icon">version<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">&quot;34.0.0&quot;</span><span class="tsd-signature-symbol"> = &quot;34.0.0&quot;</span></div>
84
+ <div class="tsd-signature tsd-kind-icon">version<span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">&quot;34.1.1&quot;</span><span class="tsd-signature-symbol"> = &quot;34.1.1&quot;</span></div>
85
85
  <aside class="tsd-sources">
86
86
  <ul>
87
87
  <li>Defined in src/version.ts:4</li>
@@ -1 +1 @@
1
- import{__decorate}from"tslib";import EsriViewpoint from"@arcgis/core/Viewpoint";import{ArgumentError}from"../ArgumentError.js";import{EntityBase}from"../Entity.js";import{InvalidOperationError}from"../InvalidOperationError.js";import{isBasemapExtension,isBookmark,isGroundExtension,isLayerPreset,isMenu,isTableExtension,ItemType}from"../ItemType.js";import{TableExtension}from"../data/TableExtension.js";import{LayerPreset}from"../layer-preset/LayerPreset.js";import{Menu}from"../menus/Menu.js";import{toEsriApiGeometry}from"../portal/Geometry.js";import{WebMap as WebMapJson}from"../portal/WebMap.js";import{WebScene as WebSceneJson}from"../portal/WebScene.js";import{resolveRelativeHrefs}from"../portal/_utils.js";import{DefaultArcGISRequestHelper}from"../support/ArcGISRequestHelper.js";import{FormatSettings}from"../support/FormatSettings.js";import{InitializableCollectionProxy}from"../support/InitializableCollectionProxy.js";import{ReadOnlyInitializableCollection}from"../support/ReadOnlyInitializableCollection.js";import{serializable}from"../support/Serializable.js";import{WellKnownBasemap}from"../support/esri.js";import{ReadOnlyCollection}from"../utilities/ReadOnlyCollection.js";import{basemapsAreEquivalent,createStandardBasemap,isStandardBasemap}from"../utilities/basemaps.js";import{checkArg}from"../utilities/checkArg.js";import{Collection,compare}from"../utilities/collection.js";import{load}from"../utilities/esri.js";import{isGroupLayerExtension}from"../utilities/extensions.js";import{project}from"../utilities/geometry.js";import{find}from"../utilities/iterable.js";import{layersAreEquivalent}from"../utilities/layers.js";import{getLogger}from"../utilities/log.js";import{getMapSpatialReference,isMap,isWebMap,isWebScene}from"../utilities/mapping.js";import{toPortalItem as toPortalItemBase}from"../utilities/portal.js";import{parallelEach}from"../utilities/promise.js";import{onCollectionPropertyChange,onEach}from"../utilities/watch.js";import{BasemapExtension}from"./BasemapExtension.js";import{Bookmark}from"./Bookmark.js";import{GroundExtension}from"./GroundExtension.js";import{MapConstraints}from"./MapConstraints.js";import{_assignLayerExtensions,LayerExtension}from"./_LayerExtension.js";import{LayerExtensionCollectionBase}from"./support/_LayerExtensionCollection.js";const log=getLogger("MapExtension");let MapExtension=class extends EntityBase{constructor(e){var t;super(e),this.isSwitchingMap=!1,this._layerViews=new Collection,this._itemType=ItemType.MAP_EXTENSION,this._skipBasemapOptions=!1;let i={...e};this._basemapOptions=new BasemapExtensionCollection(this),this._groundExtensions=new WeakMap,this._layerExtensions=this._createLayerExtensionCollection(),this.tableExtensions=this._createTableExtensionCollection(),this.formatSettings=this._createFormatSettings(),this._bookmarks=new Collection,this.constraints=new MapConstraints,this.watch(["_map","_scene"],(e=>{e&&(onEach(e.layers,"layerview-create",(e=>{this._layerViews.add(e.layerView)})),onEach(e.layers,"layerview-destroy",(e=>{this._layerViews.remove(e.layerView)})))}));const{webMap:s,webScene:a,initialViewMode:n,map:o,basemapOptions:r}=i;if(this._webMap=s,this._webScene=a,this._webMapItem=toPortalItem(s),this._webSceneItem=toPortalItem(a),this.initialViewMode=n,isWebScene(o)&&a)throw new ArgumentError("Cannot specify webScene property if map is initialized to a WebScene instance.");if(isMap(o)&&s)throw new ArgumentError("Cannot specify webMap property if map is initialized to a 2D Map instance.");if(isWebScene(o)||isWebMap(o)||isMap(o))this.assignProperties({basemapOptions:r}),this._skipBasemapOptions=!!r;else{const{map:e,layerExtensions:t,tableExtensions:s,groundExtension:a,basemapOptions:n,basemapExtension:o,...r}=i;this._deferredProperties={map:e,layerExtensions:t,tableExtensions:s,groundExtension:a,basemapOptions:n,basemapExtension:o},i=r,n&&(this._skipBasemapOptions=!0)}this._initMapFromProperties(i),this.watch("map.basemap",(()=>this._onBasemapChange()),!0),this.watch("map.ground",(()=>this._onGroundChange()),!0),this.allLayerExtensions=new AllLayerExtensionCollectionImpl(this),(null===(t=this.map)||void 0===t?void 0:t.basemap)&&this._onBasemapChange()}get webMap(){return this._webMap}get webScene(){return this._webScene}get map(){return this._currentMap}get viewMode(){return this.map?isWebScene(this.map)?"scene":"map":this.initialViewMode}get initialViewMode(){return this.webMap&&this.webScene?this._initialViewMode||"map":isWebScene(this.map)||this.webScene&&!this.webMap?"scene":"map"}set initialViewMode(e){this._initialViewMode=e}get requestHelper(){return this._requestHelper||(this._requestHelper=new DefaultArcGISRequestHelper),this._requestHelper}set requestHelper(e){this._requestHelper=e}get basemapExtension(){return this._basemapExtension}set basemapExtension(e){const t=this._basemapExtension;if(t!==e)if(t&&t._setMapExtension(void 0),e){if(e._setMapExtension(this),this.isInitialized&&!e.basemap){if(e.isInitialized)throw e._setMapExtension(void 0),new InvalidOperationError("Cannot set MapExtension.basemapExtension without a valid Esri Basemap object");e.initialize()}this._ensureIsBasemapOption(e),this.map&&e.basemap&&e.basemap!==this.map.basemap?this.map.basemap=e.basemap:this._basemapExtension=e}else this.map.basemap=void 0,this._basemapExtension=void 0}get groundExtension(){var e;return this._groundExtension||(this.groundExtension=new GroundExtension({ground:null===(e=this.map)||void 0===e?void 0:e.ground})),this._groundExtension}set groundExtension(e){if(!e)throw new InvalidOperationError("Cannot set map.ground to undefined");const t=this._groundExtension;t!==e&&(t&&t._setMapExtension(void 0),e._setMapExtension(this),e._resolveGround(),e.ground?(this._groundExtensions.set(e.ground,e),this.map&&e.ground!==this.map.ground?this.map.ground=e.ground:this._groundExtension=e):this._groundExtension=e)}get basemapOptions(){return this._basemapOptions}get bookmarks(){return this._bookmarks}get initialBasemapExtension(){return this._initialBasemapExtension}get initialLayerPreset(){return this._initialLayerPreset}set initialLayerPreset(e){if(!e)return void(this._initialLayerPreset=void 0);const t=isLayerPreset(e)?e:new LayerPreset(e);this._initialLayerPreset=t}get _spatialReference(){return getMapSpatialReference(this.map)}get webMapItemTitle(){if(this._webMapItem)return this._webMapItem.title}get webSceneItemTitle(){if(this._webSceneItem)return this._webSceneItem.title}get title(){return this._title?this._title:this._webMapItem&&"map"===this.viewMode?this.webMapItemTitle:this._webSceneItem&&"scene"===this.viewMode?this.webSceneItemTitle:void 0}set title(e){this._title=e}get contextMenu(){return this._contextMenu}set contextMenu(e){this._contextMenu=e,e&&this.isInitialized&&!e.isInitialized&&(async()=>{try{await e.initialize()}catch(e){e instanceof Error&&log.error({message:"An error occurred while initializing context menu.",error:e})}})()}get layerExtensions(){return this._layerExtensions}getAllFeatureSources(e=(()=>!0)){const t=[],i=a=>{a.hasFeatures&&t.push(a);for(const t of a.sublayerExtensions.initializedItems.filter(e).toArray())s(t);if(isGroupLayerExtension(a))for(const t of a.layerExtensions.initializedItems.filter(e).toArray())i(t)},s=i=>{t.push(i);for(const t of i.sublayerExtensions.initializedItems.filter(e).toArray())s(t)};for(const t of this.layerExtensions.initializedItems.filter(e).toArray())i(t);for(const i of this.tableExtensions.initializedItems.filter(e).toArray())t.push(i);if(this.basemapExtension){for(const t of this.basemapExtension.baseLayerExtensions.initializedItems.filter(e).toArray())i(t);for(const t of this.basemapExtension.referenceLayerExtensions.initializedItems.filter(e).toArray())i(t)}return t}isSupportedViewMode(e){return e===this.viewMode||!(!this.webMap&&!this.webScene)&&("scene"===e?!!this.webScene:!!this.webMap)}async switchViewMode(e){if(checkArg("viewMode",e).isNotMissing().satisfies((e=>this.isSupportedViewMode(e)),"Unsupported view mode."),this.viewMode===e)return;let t;"scene"===e?(await this._createScene(),t=this._scene):(await this._createMap(),t=this._map),t.basemap=this.map.basemap,await this.switchMap(t),this._notifyChange("viewMode"),this._notifyChange("title")}async switchMap(e){if(checkArg("newMap",e).isNotMissing(),e===this.map)return;if(!this.map)return void this._setMap(e);this.isSwitchingMap=!0,this.isInitialized&&await load(e);const t=new Map;this.map.layers.forEach((e=>t.set(e,this.layerExtensions.forLayer(e))));const{basemapExtension:i}=this;this._setMap(e),this._updateBookmarks();const s=[];for(const e of this.map.layers.toArray()){const i=find(t.entries(),(([t])=>layersAreEquivalent(t,e)));i&&s.push((async()=>{const t=i[1];await t._switchLayer(e),this._layerExtensions._register(t)})())}this.map.basemap&&i&&basemapsAreEquivalent(this.map.basemap,i.basemap)&&s.push((async()=>{await i._switchBasemap(this.map.basemap),this.basemapExtension=i})()),this.isInitialized&&s.push(this._initializeChildren()),await Promise.all(s),this.isSwitchingMap=!1}async setWebMap(e){if(!e&&this.webMap&&!this.webScene)throw new InvalidOperationError("Cannot unset both webMap and webScene.");this._webMap=e,this._map=void 0,this._createMapPromise=void 0,this._webMapItem=toPortalItem(e),await load(this._webMapItem),"map"===this.viewMode&&(e?(this._basemapOptions.isExplicitlyModified||this._basemapOptions.removeAllInternal(),await this._createMap(),await this.switchMap(this._map),await this._createStandardBasemapOptions(),this._basemapOptions.reorderInternal(this.basemapExtension,0),this._initialBasemapExtension=this.basemapExtension):await this.switchViewMode("scene")),this._notifyChange("webMap"),this._notifyChange("initialViewMode"),this._notifyChange("title")}async setWebScene(e){if(!e&&this.webScene&&!this.webMap)throw new InvalidOperationError("Cannot unset both webMap and webScene.");this._webScene=e,this._scene=void 0,this._createScenePromise=void 0,this._webSceneItem=toPortalItem(e),await load(this._webSceneItem),"scene"===this.viewMode&&(e?(this._basemapOptions.isExplicitlyModified||this._basemapOptions.removeAllInternal(),await this._createScene(),await this.switchMap(this._scene),await this._createStandardBasemapOptions(),this._basemapOptions.reorderInternal(this.basemapExtension,0),this._initialBasemapExtension=this.basemapExtension):await this.switchViewMode("map")),this._notifyChange("webScene"),this._notifyChange("initialViewMode"),this._notifyChange("title")}getDefaults(){const e=super.getDefaults();return e.initialViewMode="map",e}async _createScene(){var e;if(!this._scene&&this.webScene)return this._createScenePromise=null!==(e=this._createScenePromise)&&void 0!==e?e:(async()=>{if(isPortalItem(this.webScene)){const e=new((await import("@arcgis/core/WebScene")).default);await this._loadAndApplyPortalItemData(this._webSceneItem,e),this._scene=e}else this._scene=await WebSceneJson.toEsriApiWebScene(this.webScene)})()}async _createMap(){var e;if(!this._map&&this.webMap)return this._createMapPromise=null!==(e=this._createMapPromise)&&void 0!==e?e:(async()=>{if(isPortalItem(this.webMap)){const e=new((await import("@arcgis/core/WebMap")).default);await this._loadAndApplyPortalItemData(this._webMapItem,e),this._map=e}else this._map=await WebMapJson.toEsriApiWebMap(this.webMap)})()}_getSerializableProperties(){return{...super._getSerializableProperties(),layerExtensions:{serializeModes:["initial","project"],deserialize:e=>{var t,i;if(this.map&&e){const s=null!==(i=null===(t="map"===this.viewMode?this._scene:this._map)||void 0===t?void 0:t.layers.toArray())&&void 0!==i?i:[],a=e.filter((e=>!s.includes(e.layer)&&!s.some((t=>LayerExtension._matchesRef(t,e.layer)))));_assignLayerExtensions(this.layerExtensions,a)}},serialize:e=>{var t,i,s,a;if(null===(t=this._deferredProperties)||void 0===t?void 0:t.layerExtensions)return this._deferredProperties.layerExtensions;{const t="map"===this.viewMode,n=null===(i=t?this._map:this._scene)||void 0===i?void 0:i.layers.toArray();let o=null!==(a=null===(s=t?this._scene:this._map)||void 0===s?void 0:s.layers.toArray())&&void 0!==a?a:[];return o=o.filter((e=>!n.find((t=>layersAreEquivalent(t,e))))),this.layerExtensions.concat(o.map((e=>this._layerExtensions._forLayer(e)))).filter((t=>"initial"!==e||!t.dynamicallyAddedLayer)).toArray()}}},tableExtensions:{serializeModes:["initial","project"],deserialize:e=>{this.map?compare(this.tableExtensions,e,{onNew:(e,t)=>{this.tableExtensions.add(isTableExtension(e)?e:TableExtension.create(e),t)},onMatch:(e,t,i,s)=>{isTableExtension(t)||e.assignProperties(t),i!==s&&this.tableExtensions.reorder(e,s)},equals:(e,t)=>isTableExtension(t)?t===e:!!TableExtension._matchesRef(e,t.table)||e.id===t.id}):this._deferredProperties={...this._deferredProperties,tableExtensions:e}},serialize:()=>{var e,t;return(null===(e=this._deferredProperties)||void 0===e?void 0:e.tableExtensions)?null===(t=this._deferredProperties)||void 0===t?void 0:t.tableExtensions:this.tableExtensions.toArray()}},basemapExtension:{serializeModes:["project"],deserialize:e=>{this.map?e?isBasemapExtension(e)?this.basemapExtension=e:this.basemapExtension?this.basemapExtension.assignProperties(e):this.basemapExtension=BasemapExtension.create(e):this.basemapExtension=void 0:this._deferredProperties={...this._deferredProperties,basemapExtension:e}},serialize:()=>{var e,t;return(null===(e=this._deferredProperties)||void 0===e?void 0:e.basemapExtension)?null===(t=this._deferredProperties)||void 0===t?void 0:t.basemapExtension:this.basemapExtension}},basemapOptions:{serializeModes:["initial"],deserialize:e=>{this._skipBasemapOptions?this._skipBasemapOptions=!1:(compare(this.basemapOptions,e,{onNew:(e,t)=>{this.basemapOptions.add(isBasemapExtension(e)?e:BasemapExtension.create(e),t)},onMatch:(e,t,i,s)=>{isBasemapExtension(t)||e.assignProperties(t),i!==s&&this.basemapOptions.reorder(e,s)},onMissing:e=>{this.basemapOptions.remove(e)},equals:(e,t)=>{if(isBasemapExtension(t))return t===e;if(e.id&&t.id)return e.id===t.id;{const i=e.toJSON();return basemapsAreEquivalent(i.basemap,t.basemap||t.baseMap)}}}),this.basemapExtension&&this._ensureIsBasemapOption(this.basemapExtension),this.isInitialized&&parallelEach(this.basemapOptions.toArray(),(e=>e._createBackingBasemap())))},serialize:()=>{var e,t;return(null===(e=this._deferredProperties)||void 0===e?void 0:e.basemapOptions)?null===(t=this._deferredProperties)||void 0===t?void 0:t.basemapOptions:this.basemapOptions.toArray()}},groundExtension:{serializeModes:["initial"],deserialize:e=>{this.map?isGroundExtension(e)?this.groundExtension=e:this.groundExtension.assignProperties(e):this._deferredProperties={...this._deferredProperties,groundExtension:e}},serialize:()=>{var e,t;return(null===(e=this._deferredProperties)||void 0===e?void 0:e.groundExtension)?null===(t=this._deferredProperties)||void 0===t?void 0:t.groundExtension:this.groundExtension}},bookmarks:{serialize:()=>this.bookmarks.map((e=>e.toJSON())).toArray(),deserialize:e=>{this.bookmarks.addMany(e.map((e=>isBookmark(e)?e:new Bookmark(e))))}},webMap:{serializeModes:["initial"],deserialize:!1},webScene:{serializeModes:["initial"],deserialize:!1},initialLayerPreset:"initial",initialViewMode:{serializeModes:["initial","project"],serialize:e=>"project"===e?this.viewMode:"scene"!==this.initialViewMode||!this.webScene&&this.webMap?"map":"scene",deserialize:e=>{this.viewMode!==e&&(this._deserializedViewMode=e),this._initialViewMode=e},isDefault:(e,t)=>"project"!==t&&"map"===e},formatSettings:"initial",constraints:"initial",title:"initial",onClick:"initial",onHover:"initial",onHoverEnd:"initial",onInitialized:"initial",onViewpointChanged:"initial",contextMenu:{serializeModes:["initial"],deserialize:e=>{e?isMenu(e)?this.contextMenu=e:this.contextMenu?this.contextMenu.assignProperties(e):this.contextMenu=Menu.create(e):this.contextMenu=void 0}},map:{serializeModes:["project"],serialize:()=>({operationalLayers:this.layerExtensions.toArray().filter((e=>e.layer)).map((e=>e._getProjectWebmapJSON())),tables:this.tableExtensions.toArray().filter((e=>e.table)).map((e=>({id:e.table.id,title:e.table.title})))}),deserialize:e=>{if(this.map)if(isMap(e)||isWebMap(e)||isWebScene(e)){if(e!==this.map)throw new ArgumentError("properties.map","Property 'map' is read-only.")}else this._deserializedMapPromise=(async()=>{this._deserializedViewMode&&this.webMap&&this.webScene&&(this._deserializedViewModePromise=this.switchViewMode(this._deserializedViewMode),await this._deserializedViewModePromise,this._deserializedViewMode=void 0,this._deserializedViewModePromise=void 0),await this._applyMapProperties(e,this.map),this._deserializedMapPromise=void 0})();else this._deferredProperties={...this._deferredProperties,map:e}}},requestHelper:{serialize:!1}}}async _applyMapProperties(e,t,i){await parallelEach(this.basemapOptions.toArray(),(e=>e._createBackingBasemap()));let s=e;const a=this.basemapOptions.find((e=>basemapsAreEquivalent(e.basemap,s.baseMap)));a&&(t.basemap=a.basemap,s={...s,baseMap:{...s.baseMap,title:t.basemap.title}}),isWebScene(t)?await WebSceneJson.applyToEsriApiWebScene(s,t,i):await WebMapJson.applyToEsriApiMap(s,t,i)}_createFormatSettings(){return new FormatSettings}_createLayerExtensionCollection(){return new LayerExtensionCollectionImpl(this)}_createTableExtensionCollection(){return new TableExtensionCollectionImpl(this)}async _onInitialize(){var e;await super._onInitialize();const{basemapExtension:t,basemapOptions:i,groundExtension:s,webMap:a,webScene:n,map:o,...r}=null!==(e=this._deferredProperties)&&void 0!==e?e:{};if(i&&this.assignProperties({basemapOptions:i}),this.map||("scene"===this.initialViewMode?this._setMap(new((await import("@arcgis/core/WebScene")).default)):this._setMap(new((await import("@arcgis/core/WebMap")).default))),this.map.basemap&&this._onBasemapChange(),(a||n)&&await this._applyMapProperties("scene"===this.initialViewMode?n:a,this.map),t&&(this.assignProperties({basemapExtension:t}),await this.basemapExtension._createBackingBasemap()),s&&this.assignProperties({groundExtension:s}),this._webMapItem||this._webSceneItem){await Promise.all([load(this.map),load(this._webMapItem),load(this._webSceneItem)]),validatePortalItem(this._webMapItem,"webMap","Web Map"),validatePortalItem(this._webSceneItem,"webScene","Web Scene");const e=isWebScene(this.map)?this._webSceneItem:this._webMapItem;await this._loadAndApplyPortalItemData(e)}else await load(this.map);o&&await this._applyMapProperties(o,this.map),this.assignProperties(r),this._deferredProperties=void 0,this._initialBasemapExtension=this.basemapExtension,this._updateBookmarks(),this.contextMenu&&await this.contextMenu.initialize();for(const e of this.layerExtensions.toArray())await e._createBackingLayer();await Promise.all(this.tableExtensions.map((e=>e._createBackingTable())).toArray())}async _postInitialize(){await super._postInitialize(),await this._createStandardBasemapOptions(),await parallelEach(this.basemapOptions.toArray(),(e=>e._createBackingBasemap())),this.initialLayerPreset&&await this.initialLayerPreset.applyTo(this)}*_initializableChildCollections(){yield*super._initializableChildCollections();const e=new Collection(this.layerExtensions.filter((e=>!!e.layer)));e.remove=e=>{this.layerExtensions.remove(e)};const t=new Collection(this.tableExtensions.filter((e=>!!e.table)));if(t.remove=e=>{this.tableExtensions.remove(e)},yield e,yield t,this.basemapExtension){const e=new Collection;e.add(this.basemapExtension),yield e}const i=new Collection;i.add(this.groundExtension),yield i}_initMapFromProperties(e){const t=e.map;isMap(t)||isWebMap(t)||isWebScene(t)?this._setMap(t):"scene"===this.initialViewMode?e.webScene&&!isPortalItem(e.webScene)&&(this._deferredProperties={webScene:e.webScene,...this._deferredProperties}):e.webMap&&!isPortalItem(e.webMap)&&(this._deferredProperties={webMap:e.webMap,...this._deferredProperties})}_setMap(e){var t,i;isWebScene(e)?this._scene=e:this._map=e,this._currentMap=e,(null===(t=this.basemapExtension)||void 0===t?void 0:t.basemap)&&!e.basemap&&(e.basemap=this.basemapExtension.basemap),(null===(i=this.groundExtension)||void 0===i?void 0:i.ground)&&!e.ground&&(e.ground=this.groundExtension.ground),this._notifyChange("map")}async _loadAndApplyPortalItemData(e,t){var i;await load(e);const s=await e.fetchData();resolveRelativeHrefs(s,e),await this._inferLayerTypes(s),(null===(i=this.basemapExtension)||void 0===i?void 0:i.basemap)&&!t&&delete s.baseMap,GroundExtension.isDefaultGround(this.groundExtension.ground)||t||delete s.ground;const a=t||this.map;await load(a),await this._applyMapProperties(s,a,e),a.portalItem=e;const{viewpoint:n,spatialReference:o}=a.initialViewProperties;n&&n.targetGeometry&&!n.targetGeometry.spatialReference.equals(o)&&(a.initialViewProperties.viewpoint.targetGeometry=(await project([n.targetGeometry],o))[0]),n&&n.camera&&(n.camera.position.spatialReference=o.clone())}_onBasemapChange(){if(this._basemapExtension){if(this.basemapExtension.basemap==this.map.basemap)return;this._basemapExtension._setMapExtension(void 0)}if(this.map.basemap){let e=this.basemapOptions.find((e=>e.basemap===this.map.basemap));e||(e=BasemapExtension.create({basemap:this.map.basemap}),this._basemapOptions.addInternal(e,0)),e.mapExtension!==this&&e._setMapExtension(this),this._basemapExtension=e}else this._basemapExtension=void 0;this._notifyChange("basemapExtension")}_onGroundChange(){if(this._groundExtension){if(this.groundExtension.ground===this.map.ground)return void(this._groundExtensions.has(this.map.ground)||this._groundExtensions.set(this.map.ground,this.groundExtension));this.groundExtension._setMapExtension(void 0)}this._groundExtensions.has(this.map.ground)||this._groundExtensions.set(this.map.ground,new GroundExtension({ground:this.map.ground}));const e=this._groundExtensions.get(this.map.ground);e.mapExtension!==this&&e._setMapExtension(this),this._groundExtension=e,this._notifyChange("groundExtension")}async _inferLayerTypes(e){var t;const i=[];if(e.operationalLayers)for(const t of e.operationalLayers)i.push(this._inferLayerType(t));if(e.baseMap&&i.push(this._inferBasemapLayerTypes(e.baseMap)),e.hasOwnProperty("ground")&&i.push(this._inferGroundLayerTypes(e.ground)),null===(t=e.presentation)||void 0===t?void 0:t.slides)for(const t of e.presentation.slides)t.baseMap&&"string"!=typeof t.baseMap&&i.push(this._inferBasemapLayerTypes(t.baseMap));await Promise.all(i)}async _inferBasemapLayerTypes(e){const t=[];if(e.baseMapLayers)for(const i of e.baseMapLayers)t.push(this._inferLayerType(i));await Promise.all(t)}async _inferGroundLayerTypes(e){const t=[];if(e.layers)for(const i of e.layers)t.push(this._inferLayerType(i));await Promise.all(t)}async _inferLayerType(e){if(!e.layerType)if(e.type)e.layerType=e.type;else if(e.url){const t=e.url;if(t.match(".*MapServer/\\d{1,}/?$")||t.match(".*FeatureServer/\\d{1,}/?$"))e.layerType="ArcGISFeatureLayer";else if(t.match(".*StreamServer/?$"))e.layerType="ArcGISStreamLayer";else if(t.match(".*ImageServer/?$")){const i=await this._getLayerData(t);i.cacheType?"Map"===i.cacheType?e.layerType="ArcGISTiledImageServiceLayer":"Elevation"===i.cacheType&&(e.layerType="ArcGISTiledElevationServiceLayer"):e.layerType="ArcGISImageServiceLayer"}else if(t.match(".*MapServer/?$")){const i=await this._getLayerData(t);e.layerType=i.tileInfo?"ArcGISTiledMapServiceLayer":"ArcGISMapServiceLayer"}else if(t.match(".*\\.(csv|txt)$"))e.layerType="CSV";else if(t.match(".*\\.kml$"))e.layerType="KML";else if(t.match(".*SceneServer/layers/\\d{1,}/?$")){const i=await this._getLayerData(t);"3DObject"===i.layerType?e.layerType="ArcGISSceneServiceLayer":"IntegratedMesh"===i.layerType?e.layerType="IntegratedMeshLayer":"PointCloud"===i.layerType&&(e.layerType="PointCloudLayer")}else t.match(".*(\\.xml|rss/?)$")&&(e.layerType="GeoRSS")}else if(e.layers){e.layerType="GroupLayer";const t=[];for(const i of e.layers)t.push(this._inferLayerType(i));await Promise.all(t)}else e.templateUrl&&e.tileInfo?e.layerType="WebTiledLayer":e.featureCollection?e.layerType="ArcGISFeatureLayer":e.styleUrl?e.layerType="VectorTileLayer":e.mapUrl&&(e.layerType="WMS")}async _getLayerData(e){const t=await this.requestHelper.request(e,{query:{f:"json"}});if(!t||!t.data)throw new Error(`Response to request for url ${e} was invalid.`);return t.data}async _createStandardBasemapOptions(){const e=this._spatialReference;!this._basemapOptions.isExplicitlyModified&&e&&e.isWebMercator&&await parallelEach([WellKnownBasemap.SATELLITE,WellKnownBasemap.HYBRID_VECTOR,WellKnownBasemap.STREETS_VECTOR,WellKnownBasemap.TOPO_VECTOR,WellKnownBasemap.STREETS_NAVIGATION_VECTOR,WellKnownBasemap.STREETS_NIGHT_VECTOR,WellKnownBasemap.TERRAIN_VECTOR,WellKnownBasemap.DARK_GRAY_VECTOR,WellKnownBasemap.GRAY_VECTOR,WellKnownBasemap.NATIONAL_GEOGRAPHIC,WellKnownBasemap.OCEANS_VECTOR,WellKnownBasemap.OPEN_STREET_MAP_VECTOR],(async e=>{const t=await createStandardBasemap(e);basemapsAreEquivalent(this.map.basemap,t)?this._basemapOptions.addInternal(this.basemapExtension):this._basemapOptions.addInternal(BasemapExtension.create({basemap:t}),void 0,!1)}))}_ensureIsBasemapOption(e){const t=this.basemapOptions.findIndex((t=>t.basemap===e.basemap));t>=0?this._basemapOptions.getItemAt(t)!==e&&(this._basemapOptions.removeAtInternal(t),this._basemapOptions.addInternal(e,t)):this._basemapOptions.addInternal(e,0)}_updateBookmarks(){var e,t,i;this.bookmarks.removeMany(this.bookmarks.filter((e=>"map"===e.source))),isWebMap(this.map)&&(null===(e=this.map.bookmarks)||void 0===e?void 0:e.length)>0?this.map.bookmarks.forEach((e=>{const t=toEsriApiGeometry(e.extent),i=new EsriViewpoint({targetGeometry:t});this.bookmarks.add(new Bookmark({source:"map",title:e.name,viewpoint:i}))})):isWebScene(this.map)&&(null===(i=null===(t=this.map.presentation)||void 0===t?void 0:t.slides)||void 0===i?void 0:i.length)>0&&this.map.presentation.slides.forEach((e=>{const t={source:"map",title:e.title.text,viewpoint:e.viewpoint},i=new Bookmark(t);this.bookmarks.add(i)}))}};MapExtension=__decorate([serializable],MapExtension);export{MapExtension};class LayerExtensionCollectionImpl extends LayerExtensionCollectionBase{constructor(e){super(e,"map.layers")}get _mapExtension(){return this._parent}toJSON(){const e=[];return this.forEach((t=>{e.push(`item://${encodeURIComponent(ItemType.LAYER_EXTENSION)}/${encodeURIComponent(t.id)}`)})),e}}class BasemapExtensionCollection extends InitializableCollectionProxy{constructor(e){super(new Collection),this.isExplicitlyModified=!1,this._mapExtension=e}add(e,t){super.add(e,t),this.isExplicitlyModified=!0,1===this.length&&this._mapExtension.map&&!this._mapExtension.basemapExtension&&(this._mapExtension.basemapExtension=e)}addMany(e,t){super.addMany(e,t),this.isExplicitlyModified=!0}addInternal(e,t,i=!0){const s=e=>{const t="-vector";return(null==e?void 0:e.endsWith(t))?e.substring(0,e.length-t.length):e};let a;if(e.basemap){const t=s(e.basemap.id);if(a=this.findIndex((e=>{var i;return s(null===(i=e.basemap)||void 0===i?void 0:i.id)===t})),isStandardBasemap(e.basemap)&&a>=0){if(!i)return;super.removeAt(a)}}super.add(e,null!=t?t:a>=0?a:void 0)}removeAt(e){const t=super.removeAt(e);return t&&(this.isExplicitlyModified=!0,t===this._mapExtension.basemapExtension&&(e<this.length?this._mapExtension.basemapExtension=this.getItemAt(e):this.length?this._mapExtension.basemapExtension=this.getItemAt(e-1):this._mapExtension.basemapExtension=void 0)),t}removeAll(){this._mapExtension.basemapExtension=void 0,super.removeAll()}removeAtInternal(e){return super.removeAt(e)}removeAllInternal(){for(;this.length;)this.removeAtInternal(this.length-1)}reorder(e,t){return super.reorder(e,t),this.isExplicitlyModified=!0,e}reorderInternal(e,t){return super.reorder(e,t)}_itemIsInitialized(e){return super._itemIsInitialized(e)&&!!e.basemap}}class TableExtensionCollectionImpl extends InitializableCollectionProxy{constructor(e){super(),this._tableExtensionMap=new WeakMap,this._uninitializedTableExtensions=new Set,this._mapExtension=e,onCollectionPropertyChange(this._mapExtension,"map.tables",(e=>{const t={added:(e.added||[]).map((e=>this._forTable(e))),moved:(e.moved||[]).map((e=>this._forTable(e))),removed:(e.removed||[]).map((e=>this._forTable(e))),target:this};this.emit("change",t)})),this._mapExtension.watch("map.tables.length",(()=>this._notifyChange("length")))}get _collection(){return this._tables.map((e=>this._forTable(e))).concat(Array.from(this._uninitializedTableExtensions))}get _tables(){var e,t;return null!==(t=null===(e=this._mapExtension.map)||void 0===e?void 0:e.tables)&&void 0!==t?t:new ReadOnlyCollection(new Collection)}toJSON(){const e=[];return this.forEach((t=>{e.push(`item://${encodeURIComponent(ItemType.TABLE_EXTENSION)}/${encodeURIComponent(t.id)}`)})),e}clone(){const e=new TableExtensionCollectionImpl(this._mapExtension);return e._tableExtensionMap=this._tableExtensionMap,e}findById(e){return checkArg("id",e).isNotMissing(),this.find((t=>t.id===e))}findByTableId(e){return checkArg("id",e).isNotMissing(),this.find((t=>t.table.id===e))}forTable(e){if(checkArg("table",e).isNotMissing(),this._tables.includes(e))return this._forTable(e)}add(e,t){if(checkArg("tableX",e).isNotMissing(),e.mapExtension&&e.mapExtension.tableExtensions.remove(e),e._setMapExtension(this._mapExtension),e.table){const i=this._tableExtensionMap.get(e.table);if(this._tableExtensionMap.set(e.table,e),i&&i!==e&&this._onRemoved(i),this._tables.includes(e.table))if(void 0===t){const t={added:[e],moved:[],removed:i?[i]:[],target:this};this.emit("change",t)}else this._tables.reorder(e.table,t);else this._tables.add(e.table,t)}else{this._uninitializedTableExtensions.add(e);const t={added:[e],moved:[],removed:[],target:this};this.emit("change",t)}this._onAdded(e)}removeAt(e){const t=this.getItemAt(e);if(void 0!==t){if(this._uninitializedTableExtensions.has(t)){this._uninitializedTableExtensions.delete(t);const e={added:[],moved:[],removed:[t],target:this};this.emit("change",e)}else this._tables.remove(t.table);return this._onRemoved(t),t}}reorder(e,t){if(e&&this._tables.includes(e.table))return this._tables.reorder(e.table,t),e}sort(e){this._tables.sort(((t,i)=>e(this._forTable(t),this._forTable(i))))}_itemIsInitialized(e){return super._itemIsInitialized(e)&&!!e.table}_onAdded(e){}_onRemoved(e){e._setMapExtension(void 0)}_forTable(e){for(const e of this._uninitializedTableExtensions)e._resolveTable(),e.table&&(this._tableExtensionMap.set(e.table,e),this._uninitializedTableExtensions.delete(e));if(!this._tableExtensionMap.has(e)){const t=TableExtension.create({table:e});this._tableExtensionMap.set(e,t),t._setMapExtension(this._mapExtension),this._onAdded(t)}return this._tableExtensionMap.get(e)}}class AllLayerExtensionCollectionImpl extends ReadOnlyInitializableCollection{constructor(e){super(),this._mapExtension=e}get _collection(){let e=this._mapExtension.layerExtensions.flatten((e=>isGroupLayerExtension(e)?e.layerExtensions:[]));return this._mapExtension.basemapExtension&&(e=e.concat(this._mapExtension.basemapExtension.baseLayerExtensions.toArray()).concat(this._mapExtension.basemapExtension.referenceLayerExtensions.toArray())),e=e.concat(this._mapExtension.groundExtension.layerExtensions.toArray()),e}findById(e){return checkArg("id",e).isNotMissing(),this.find((t=>t.id===e))}findByLayerId(e){return checkArg("id",e).isNotMissing(),this.find((t=>t.layer.id===e))}forLayer(e){return checkArg("layer",e).isNotMissing(),this.findByLayerId(e.id)}emit(e,t){if("change"===e){const i=new Collection;i.addMany(t.added);const s=i.flatten((e=>isGroupLayerExtension(e)?e.layerExtensions:[])).toArray(),a=new Collection;a.addMany(t.removed);const n=a.flatten((e=>isGroupLayerExtension(e)?e.layerExtensions:[])).toArray(),o=new Collection;o.addMany(t.moved);const r=o.flatten((e=>isGroupLayerExtension(e)?e.layerExtensions:[])).toArray();super.emit(e,{added:s,removed:n,moved:r,target:this})}return super.emit(e,t)}_itemIsInitialized(e){return super._itemIsInitialized(e)&&!!e.layer}}function toPortalItem(e){if("object"!=typeof e||!e||!e.baseMap)return toPortalItemBase(e)}function isPortalItem(e){return"object"!=typeof e||e&&!e.baseMap}function validatePortalItem(e,t,i){if((null==e?void 0:e.type)&&e.type!==i)throw new Error(`Invalid portal item type "${e.type}" for property ${t}.`)}
1
+ import{__decorate}from"tslib";import EsriViewpoint from"@arcgis/core/Viewpoint";import{ArgumentError}from"../ArgumentError.js";import{EntityBase}from"../Entity.js";import{InvalidOperationError}from"../InvalidOperationError.js";import{isBasemapExtension,isBookmark,isGroundExtension,isLayerPreset,isMenu,isTableExtension,ItemType}from"../ItemType.js";import{TableExtension}from"../data/TableExtension.js";import{LayerPreset}from"../layer-preset/LayerPreset.js";import{Menu}from"../menus/Menu.js";import{toEsriApiGeometry}from"../portal/Geometry.js";import{WebMap as WebMapJson}from"../portal/WebMap.js";import{WebScene as WebSceneJson}from"../portal/WebScene.js";import{resolveRelativeHrefs}from"../portal/_utils.js";import{DefaultArcGISRequestHelper}from"../support/ArcGISRequestHelper.js";import{FormatSettings}from"../support/FormatSettings.js";import{InitializableCollectionProxy}from"../support/InitializableCollectionProxy.js";import{ReadOnlyInitializableCollection}from"../support/ReadOnlyInitializableCollection.js";import{serializable}from"../support/Serializable.js";import{WellKnownBasemap}from"../support/esri.js";import{ReadOnlyCollection}from"../utilities/ReadOnlyCollection.js";import{basemapsAreEquivalent,createStandardBasemap,isStandardBasemap}from"../utilities/basemaps.js";import{checkArg}from"../utilities/checkArg.js";import{Collection,compare}from"../utilities/collection.js";import{load}from"../utilities/esri.js";import{isGroupLayerExtension}from"../utilities/extensions.js";import{project}from"../utilities/geometry.js";import{find}from"../utilities/iterable.js";import{layersAreEquivalent}from"../utilities/layers.js";import{getLogger}from"../utilities/log.js";import{getMapSpatialReference,isMap,isWebMap,isWebScene}from"../utilities/mapping.js";import{toPortalItem as toPortalItemBase}from"../utilities/portal.js";import{parallelEach}from"../utilities/promise.js";import{onCollectionPropertyChange,onEach}from"../utilities/watch.js";import{BasemapExtension}from"./BasemapExtension.js";import{Bookmark}from"./Bookmark.js";import{GroundExtension}from"./GroundExtension.js";import{MapConstraints}from"./MapConstraints.js";import{_assignLayerExtensions,LayerExtension}from"./_LayerExtension.js";import{LayerExtensionCollectionBase}from"./support/_LayerExtensionCollection.js";const log=getLogger("MapExtension");let MapExtension=class extends EntityBase{constructor(e){var t;super(e),this.isSwitchingMap=!1,this._layerViews=new Collection,this._itemType=ItemType.MAP_EXTENSION,this._skipBasemapOptions=!1;let i={...e};this._basemapOptions=new BasemapExtensionCollection(this),this._groundExtensions=new WeakMap,this._layerExtensions=this._createLayerExtensionCollection(),this.tableExtensions=this._createTableExtensionCollection(),this.formatSettings=this._createFormatSettings(),this._bookmarks=new Collection,this.constraints=new MapConstraints,this.watch(["_map","_scene"],(e=>{e&&(onEach(e.layers,"layerview-create",(e=>{this._layerViews.add(e.layerView)})),onEach(e.layers,"layerview-destroy",(e=>{this._layerViews.remove(e.layerView)})))}));const{webMap:s,webScene:a,initialViewMode:n,map:o,basemapOptions:r}=i;if(this._webMap=s,this._webScene=a,this._webMapItem=toPortalItem(s),this._webSceneItem=toPortalItem(a),this.initialViewMode=n,isWebScene(o)&&a)throw new ArgumentError("Cannot specify webScene property if map is initialized to a WebScene instance.");if(isMap(o)&&s)throw new ArgumentError("Cannot specify webMap property if map is initialized to a 2D Map instance.");if(isWebScene(o)||isWebMap(o)||isMap(o))this.assignProperties({basemapOptions:r}),this._skipBasemapOptions=!!r;else{const{map:e,layerExtensions:t,tableExtensions:s,groundExtension:a,basemapOptions:n,basemapExtension:o,...r}=i;this._deferredProperties={map:e,layerExtensions:t,tableExtensions:s,groundExtension:a,basemapOptions:n,basemapExtension:o},i=r,n&&(this._skipBasemapOptions=!0)}this._initMapFromProperties(i),this.watch("map.basemap",(()=>this._onBasemapChange()),!0),this.watch("map.ground",(()=>this._onGroundChange()),!0),this.allLayerExtensions=new AllLayerExtensionCollectionImpl(this),(null===(t=this.map)||void 0===t?void 0:t.basemap)&&this._onBasemapChange()}get webMap(){return this._webMap}get webScene(){return this._webScene}get map(){return this._currentMap}get viewMode(){return this.map?isWebScene(this.map)?"scene":"map":this.initialViewMode}get initialViewMode(){return this.webMap&&this.webScene?this._initialViewMode||"map":isWebScene(this.map)||this.webScene&&!this.webMap?"scene":"map"}set initialViewMode(e){this._initialViewMode=e}get requestHelper(){return this._requestHelper||(this._requestHelper=new DefaultArcGISRequestHelper),this._requestHelper}set requestHelper(e){this._requestHelper=e}get basemapExtension(){return this._basemapExtension}set basemapExtension(e){const t=this._basemapExtension;if(t!==e)if(t&&t._setMapExtension(void 0),e){if(e._setMapExtension(this),this.isInitialized&&!e.basemap){if(e.isInitialized)throw e._setMapExtension(void 0),new InvalidOperationError("Cannot set MapExtension.basemapExtension without a valid Esri Basemap object");e.initialize()}this._ensureIsBasemapOption(e),this.map&&e.basemap&&e.basemap!==this.map.basemap?this.map.basemap=e.basemap:this._basemapExtension=e}else this.map.basemap=void 0,this._basemapExtension=void 0}get groundExtension(){var e;return this._groundExtension||(this.groundExtension=new GroundExtension({ground:null===(e=this.map)||void 0===e?void 0:e.ground})),this._groundExtension}set groundExtension(e){if(!e)throw new InvalidOperationError("Cannot set map.ground to undefined");const t=this._groundExtension;t!==e&&(t&&t._setMapExtension(void 0),e._setMapExtension(this),e._resolveGround(),e.ground?(this._groundExtensions.set(e.ground,e),this.map&&e.ground!==this.map.ground?this.map.ground=e.ground:this._groundExtension=e):this._groundExtension=e)}get basemapOptions(){return this._basemapOptions}get bookmarks(){return this._bookmarks}get initialBasemapExtension(){return this._initialBasemapExtension}get initialLayerPreset(){return this._initialLayerPreset}set initialLayerPreset(e){if(!e)return void(this._initialLayerPreset=void 0);const t=isLayerPreset(e)?e:new LayerPreset(e);this._initialLayerPreset=t}get _spatialReference(){return getMapSpatialReference(this.map)}get webMapItemTitle(){if(this._webMapItem)return this._webMapItem.title}get webSceneItemTitle(){if(this._webSceneItem)return this._webSceneItem.title}get title(){return this._title?this._title:this._webMapItem&&"map"===this.viewMode?this.webMapItemTitle:this._webSceneItem&&"scene"===this.viewMode?this.webSceneItemTitle:void 0}set title(e){this._title=e}get contextMenu(){return this._contextMenu}set contextMenu(e){this._contextMenu=e,e&&this.isInitialized&&!e.isInitialized&&(async()=>{try{await e.initialize()}catch(e){e instanceof Error&&log.error({message:"An error occurred while initializing context menu.",error:e})}})()}get layerExtensions(){return this._layerExtensions}getAllFeatureSources(e=(()=>!0)){const t=[],i=a=>{a.hasFeatures&&t.push(a);for(const t of a.sublayerExtensions.initializedItems.filter(e).toArray())s(t);if(isGroupLayerExtension(a))for(const t of a.layerExtensions.initializedItems.filter(e).toArray())i(t)},s=i=>{t.push(i);for(const t of i.sublayerExtensions.initializedItems.filter(e).toArray())s(t)};for(const t of this.layerExtensions.initializedItems.filter(e).toArray())i(t);for(const i of this.tableExtensions.initializedItems.filter(e).toArray())t.push(i);if(this.basemapExtension){for(const t of this.basemapExtension.baseLayerExtensions.initializedItems.filter(e).toArray())i(t);for(const t of this.basemapExtension.referenceLayerExtensions.initializedItems.filter(e).toArray())i(t)}return t}isSupportedViewMode(e){return e===this.viewMode||!(!this.webMap&&!this.webScene)&&("scene"===e?!!this.webScene:!!this.webMap)}async switchViewMode(e){if(checkArg("viewMode",e).isNotMissing().satisfies((e=>this.isSupportedViewMode(e)),"Unsupported view mode."),this.viewMode===e)return;let t;"scene"===e?(await this._createScene(),t=this._scene):(await this._createMap(),t=this._map),t.basemap=this.map.basemap,await this.switchMap(t),this._notifyChange("viewMode"),this._notifyChange("title")}async switchMap(e){if(checkArg("newMap",e).isNotMissing(),e===this.map)return;if(!this.map)return void this._setMap(e);this.isSwitchingMap=!0,this.isInitialized&&await load(e);const t=new Map;this.map.layers.forEach((e=>t.set(e,this.layerExtensions.forLayer(e))));const{basemapExtension:i}=this;this._setMap(e),this._updateBookmarks();const s=[];for(const e of this.map.layers.toArray()){const i=find(t.entries(),(([t])=>layersAreEquivalent(t,e)));if(i)s.push((async()=>{const t=i[1];await t._switchLayer(e),this._layerExtensions._register(t)})());else{const t=this._layerExtensions._forLayer(e);(null==t?void 0:t.layer)!==e&&s.push(t._switchLayer(e))}}this.map.basemap&&i&&basemapsAreEquivalent(this.map.basemap,i.basemap)&&s.push((async()=>{await i._switchBasemap(this.map.basemap),this.basemapExtension=i})()),this.isInitialized&&s.push(this._initializeChildren()),await Promise.all(s),this.isSwitchingMap=!1}async setWebMap(e){if(!e&&this.webMap&&!this.webScene)throw new InvalidOperationError("Cannot unset both webMap and webScene.");this._webMap=e,this._map=void 0,this._createMapPromise=void 0,this._webMapItem=toPortalItem(e),await load(this._webMapItem),"map"===this.viewMode&&(e?(this._basemapOptions.isExplicitlyModified||this._basemapOptions.removeAllInternal(),await this._createMap(),await this.switchMap(this._map),await this._createStandardBasemapOptions(),this._basemapOptions.reorderInternal(this.basemapExtension,0),this._initialBasemapExtension=this.basemapExtension):await this.switchViewMode("scene")),this._notifyChange("webMap"),this._notifyChange("initialViewMode"),this._notifyChange("title")}async setWebScene(e){if(!e&&this.webScene&&!this.webMap)throw new InvalidOperationError("Cannot unset both webMap and webScene.");this._webScene=e,this._scene=void 0,this._createScenePromise=void 0,this._webSceneItem=toPortalItem(e),await load(this._webSceneItem),"scene"===this.viewMode&&(e?(this._basemapOptions.isExplicitlyModified||this._basemapOptions.removeAllInternal(),await this._createScene(),await this.switchMap(this._scene),await this._createStandardBasemapOptions(),this._basemapOptions.reorderInternal(this.basemapExtension,0),this._initialBasemapExtension=this.basemapExtension):await this.switchViewMode("map")),this._notifyChange("webScene"),this._notifyChange("initialViewMode"),this._notifyChange("title")}getDefaults(){const e=super.getDefaults();return e.initialViewMode="map",e}async _createScene(){var e;if(!this._scene&&this.webScene)return this._createScenePromise=null!==(e=this._createScenePromise)&&void 0!==e?e:(async()=>{if(isPortalItem(this.webScene)){const e=new((await import("@arcgis/core/WebScene")).default);await this._loadAndApplyPortalItemData(this._webSceneItem,e),this._scene=e}else this._scene=await WebSceneJson.toEsriApiWebScene(this.webScene)})()}async _createMap(){var e;if(!this._map&&this.webMap)return this._createMapPromise=null!==(e=this._createMapPromise)&&void 0!==e?e:(async()=>{if(isPortalItem(this.webMap)){const e=new((await import("@arcgis/core/WebMap")).default);await this._loadAndApplyPortalItemData(this._webMapItem,e),this._map=e}else this._map=await WebMapJson.toEsriApiWebMap(this.webMap)})()}_getSerializableProperties(){return{...super._getSerializableProperties(),layerExtensions:{serializeModes:["initial","project"],deserialize:e=>{var t,i;if(this.map&&e){const s=null!==(i=null===(t="map"===this.viewMode?this._scene:this._map)||void 0===t?void 0:t.layers.toArray())&&void 0!==i?i:[],a=e.filter((e=>!s.includes(e.layer)&&!s.some((t=>e.layer&&(LayerExtension._matchesRef(t,e.layer)||layersAreEquivalent(t,e.layer))))));_assignLayerExtensions(this.layerExtensions,a)}},serialize:e=>{var t,i,s,a;if(null===(t=this._deferredProperties)||void 0===t?void 0:t.layerExtensions)return this._deferredProperties.layerExtensions;{const t="map"===this.viewMode,n=null===(i=t?this._map:this._scene)||void 0===i?void 0:i.layers.toArray();let o=null!==(a=null===(s=t?this._scene:this._map)||void 0===s?void 0:s.layers.toArray())&&void 0!==a?a:[];return o=o.filter((e=>!n.find((t=>layersAreEquivalent(t,e))))),this.layerExtensions.concat(o.map((e=>this._layerExtensions._forLayer(e)))).filter((t=>"initial"!==e||!t.dynamicallyAddedLayer)).toArray()}}},tableExtensions:{serializeModes:["initial","project"],deserialize:e=>{this.map?compare(this.tableExtensions,e,{onNew:(e,t)=>{this.tableExtensions.add(isTableExtension(e)?e:TableExtension.create(e),t)},onMatch:(e,t,i,s)=>{isTableExtension(t)||e.assignProperties(t),i!==s&&this.tableExtensions.reorder(e,s)},equals:(e,t)=>isTableExtension(t)?t===e:!!TableExtension._matchesRef(e,t.table)||e.id===t.id}):this._deferredProperties={...this._deferredProperties,tableExtensions:e}},serialize:()=>{var e,t;return(null===(e=this._deferredProperties)||void 0===e?void 0:e.tableExtensions)?null===(t=this._deferredProperties)||void 0===t?void 0:t.tableExtensions:this.tableExtensions.toArray()}},basemapExtension:{serializeModes:["project"],deserialize:e=>{this.map?e?isBasemapExtension(e)?this.basemapExtension=e:this.basemapExtension?this.basemapExtension.assignProperties(e):this.basemapExtension=BasemapExtension.create(e):this.basemapExtension=void 0:this._deferredProperties={...this._deferredProperties,basemapExtension:e}},serialize:()=>{var e,t;return(null===(e=this._deferredProperties)||void 0===e?void 0:e.basemapExtension)?null===(t=this._deferredProperties)||void 0===t?void 0:t.basemapExtension:this.basemapExtension}},basemapOptions:{serializeModes:["initial"],deserialize:e=>{this._skipBasemapOptions?this._skipBasemapOptions=!1:(compare(this.basemapOptions,e,{onNew:(e,t)=>{this.basemapOptions.add(isBasemapExtension(e)?e:BasemapExtension.create(e),t)},onMatch:(e,t,i,s)=>{isBasemapExtension(t)||e.assignProperties(t),i!==s&&this.basemapOptions.reorder(e,s)},onMissing:e=>{this.basemapOptions.remove(e)},equals:(e,t)=>{if(isBasemapExtension(t))return t===e;if(e.id&&t.id)return e.id===t.id;{const i=e.toJSON();return basemapsAreEquivalent(i.basemap,t.basemap||t.baseMap)}}}),this.basemapExtension&&this._ensureIsBasemapOption(this.basemapExtension),this.isInitialized&&parallelEach(this.basemapOptions.toArray(),(e=>e._createBackingBasemap())))},serialize:()=>{var e,t;return(null===(e=this._deferredProperties)||void 0===e?void 0:e.basemapOptions)?null===(t=this._deferredProperties)||void 0===t?void 0:t.basemapOptions:this.basemapOptions.toArray()}},groundExtension:{serializeModes:["initial"],deserialize:e=>{this.map?isGroundExtension(e)?this.groundExtension=e:this.groundExtension.assignProperties(e):this._deferredProperties={...this._deferredProperties,groundExtension:e}},serialize:()=>{var e,t;return(null===(e=this._deferredProperties)||void 0===e?void 0:e.groundExtension)?null===(t=this._deferredProperties)||void 0===t?void 0:t.groundExtension:this.groundExtension}},bookmarks:{serialize:()=>this.bookmarks.map((e=>e.toJSON())).toArray(),deserialize:e=>{this.bookmarks.addMany(e.map((e=>isBookmark(e)?e:new Bookmark(e))))}},webMap:{serializeModes:["initial"],deserialize:!1},webScene:{serializeModes:["initial"],deserialize:!1},initialLayerPreset:"initial",initialViewMode:{serializeModes:["initial","project"],serialize:e=>"project"===e?this.viewMode:"scene"!==this.initialViewMode||!this.webScene&&this.webMap?"map":"scene",deserialize:e=>{this.viewMode!==e&&(this._deserializedViewMode=e),this._initialViewMode=e},isDefault:(e,t)=>"project"!==t&&"map"===e},formatSettings:"initial",constraints:"initial",title:"initial",onClick:"initial",onHover:"initial",onHoverEnd:"initial",onInitialized:"initial",onViewpointChanged:"initial",contextMenu:{serializeModes:["initial"],deserialize:e=>{e?isMenu(e)?this.contextMenu=e:this.contextMenu?this.contextMenu.assignProperties(e):this.contextMenu=Menu.create(e):this.contextMenu=void 0}},map:{serializeModes:["project"],serialize:()=>({operationalLayers:this.layerExtensions.toArray().filter((e=>e.layer)).map((e=>e._getProjectWebmapJSON())),tables:this.tableExtensions.toArray().filter((e=>e.table)).map((e=>({id:e.table.id,title:e.table.title})))}),deserialize:e=>{if(this.map)if(isMap(e)||isWebMap(e)||isWebScene(e)){if(e!==this.map)throw new ArgumentError("properties.map","Property 'map' is read-only.")}else this._deserializedMapPromise=(async()=>{this._deserializedViewMode&&this.webMap&&this.webScene&&(this._deserializedViewModePromise=this.switchViewMode(this._deserializedViewMode),await this._deserializedViewModePromise,this._deserializedViewMode=void 0,this._deserializedViewModePromise=void 0),await this._applyMapProperties(e,this.map),this._deserializedMapPromise=void 0})();else this._deferredProperties={...this._deferredProperties,map:e}}},requestHelper:{serialize:!1}}}async _applyMapProperties(e,t,i){await parallelEach(this.basemapOptions.toArray(),(e=>e._createBackingBasemap()));let s=e;const a=this.basemapOptions.find((e=>basemapsAreEquivalent(e.basemap,s.baseMap)));a&&(t.basemap=a.basemap,s={...s,baseMap:{...s.baseMap,title:t.basemap.title}}),isWebScene(t)?await WebSceneJson.applyToEsriApiWebScene(s,t,i):await WebMapJson.applyToEsriApiMap(s,t,i)}_createFormatSettings(){return new FormatSettings}_createLayerExtensionCollection(){return new LayerExtensionCollectionImpl(this)}_createTableExtensionCollection(){return new TableExtensionCollectionImpl(this)}async _onInitialize(){var e;await super._onInitialize();const{basemapExtension:t,basemapOptions:i,groundExtension:s,webMap:a,webScene:n,map:o,...r}=null!==(e=this._deferredProperties)&&void 0!==e?e:{};if(i&&this.assignProperties({basemapOptions:i}),this.map||("scene"===this.initialViewMode?this._setMap(new((await import("@arcgis/core/WebScene")).default)):this._setMap(new((await import("@arcgis/core/WebMap")).default))),this.map.basemap&&this._onBasemapChange(),(a||n)&&await this._applyMapProperties("scene"===this.initialViewMode?n:a,this.map),t&&(this.assignProperties({basemapExtension:t}),await this.basemapExtension._createBackingBasemap()),s&&this.assignProperties({groundExtension:s}),this._webMapItem||this._webSceneItem){await Promise.all([load(this.map),load(this._webMapItem),load(this._webSceneItem)]),validatePortalItem(this._webMapItem,"webMap","Web Map"),validatePortalItem(this._webSceneItem,"webScene","Web Scene");const e=isWebScene(this.map)?this._webSceneItem:this._webMapItem;await this._loadAndApplyPortalItemData(e)}else await load(this.map);o&&await this._applyMapProperties(o,this.map),this.assignProperties(r),this._deferredProperties=void 0,this._initialBasemapExtension=this.basemapExtension,this._updateBookmarks(),this.contextMenu&&await this.contextMenu.initialize();for(const e of this.layerExtensions.toArray())await e._createBackingLayer();await Promise.all(this.tableExtensions.map((e=>e._createBackingTable())).toArray())}async _postInitialize(){await super._postInitialize(),await this._createStandardBasemapOptions(),await parallelEach(this.basemapOptions.toArray(),(e=>e._createBackingBasemap())),this.initialLayerPreset&&await this.initialLayerPreset.applyTo(this)}*_initializableChildCollections(){yield*super._initializableChildCollections();const e=new Collection(this.layerExtensions.filter((e=>!!e.layer)));e.remove=e=>{this.layerExtensions.remove(e)};const t=new Collection(this.tableExtensions.filter((e=>!!e.table)));if(t.remove=e=>{this.tableExtensions.remove(e)},yield e,yield t,this.basemapExtension){const e=new Collection;e.add(this.basemapExtension),yield e}const i=new Collection;i.add(this.groundExtension),yield i}_initMapFromProperties(e){const t=e.map;isMap(t)||isWebMap(t)||isWebScene(t)?this._setMap(t):"scene"===this.initialViewMode?e.webScene&&!isPortalItem(e.webScene)&&(this._deferredProperties={webScene:e.webScene,...this._deferredProperties}):e.webMap&&!isPortalItem(e.webMap)&&(this._deferredProperties={webMap:e.webMap,...this._deferredProperties})}_setMap(e){var t,i;isWebScene(e)?this._scene=e:this._map=e,this._currentMap=e,(null===(t=this.basemapExtension)||void 0===t?void 0:t.basemap)&&!e.basemap&&(e.basemap=this.basemapExtension.basemap),(null===(i=this.groundExtension)||void 0===i?void 0:i.ground)&&!e.ground&&(e.ground=this.groundExtension.ground),this._notifyChange("map")}async _loadAndApplyPortalItemData(e,t){var i;await load(e);const s=await e.fetchData();resolveRelativeHrefs(s,e),await this._inferLayerTypes(s),(null===(i=this.basemapExtension)||void 0===i?void 0:i.basemap)&&!t&&delete s.baseMap,GroundExtension.isDefaultGround(this.groundExtension.ground)||t||delete s.ground;const a=t||this.map;await load(a),await this._applyMapProperties(s,a,e),a.portalItem=e;const{viewpoint:n,spatialReference:o}=a.initialViewProperties;n&&n.targetGeometry&&!n.targetGeometry.spatialReference.equals(o)&&(a.initialViewProperties.viewpoint.targetGeometry=(await project([n.targetGeometry],o))[0]),n&&n.camera&&(n.camera.position.spatialReference=o.clone())}_onBasemapChange(){if(this._basemapExtension){if(this.basemapExtension.basemap==this.map.basemap)return;this._basemapExtension._setMapExtension(void 0)}if(this.map.basemap){let e=this.basemapOptions.find((e=>e.basemap===this.map.basemap));e||(e=BasemapExtension.create({basemap:this.map.basemap}),this._basemapOptions.addInternal(e,0)),e.mapExtension!==this&&e._setMapExtension(this),this._basemapExtension=e}else this._basemapExtension=void 0;this._notifyChange("basemapExtension")}_onGroundChange(){if(this._groundExtension){if(this.groundExtension.ground===this.map.ground)return void(this._groundExtensions.has(this.map.ground)||this._groundExtensions.set(this.map.ground,this.groundExtension));this.groundExtension._setMapExtension(void 0)}this._groundExtensions.has(this.map.ground)||this._groundExtensions.set(this.map.ground,new GroundExtension({ground:this.map.ground}));const e=this._groundExtensions.get(this.map.ground);e.mapExtension!==this&&e._setMapExtension(this),this._groundExtension=e,this._notifyChange("groundExtension")}async _inferLayerTypes(e){var t;const i=[];if(e.operationalLayers)for(const t of e.operationalLayers)i.push(this._inferLayerType(t));if(e.baseMap&&i.push(this._inferBasemapLayerTypes(e.baseMap)),e.hasOwnProperty("ground")&&i.push(this._inferGroundLayerTypes(e.ground)),null===(t=e.presentation)||void 0===t?void 0:t.slides)for(const t of e.presentation.slides)t.baseMap&&"string"!=typeof t.baseMap&&i.push(this._inferBasemapLayerTypes(t.baseMap));await Promise.all(i)}async _inferBasemapLayerTypes(e){const t=[];if(e.baseMapLayers)for(const i of e.baseMapLayers)t.push(this._inferLayerType(i));await Promise.all(t)}async _inferGroundLayerTypes(e){const t=[];if(e.layers)for(const i of e.layers)t.push(this._inferLayerType(i));await Promise.all(t)}async _inferLayerType(e){if(!e.layerType)if(e.type)e.layerType=e.type;else if(e.url){const t=e.url;if(t.match(".*MapServer/\\d{1,}/?$")||t.match(".*FeatureServer/\\d{1,}/?$"))e.layerType="ArcGISFeatureLayer";else if(t.match(".*StreamServer/?$"))e.layerType="ArcGISStreamLayer";else if(t.match(".*ImageServer/?$")){const i=await this._getLayerData(t);i.cacheType?"Map"===i.cacheType?e.layerType="ArcGISTiledImageServiceLayer":"Elevation"===i.cacheType&&(e.layerType="ArcGISTiledElevationServiceLayer"):e.layerType="ArcGISImageServiceLayer"}else if(t.match(".*MapServer/?$")){const i=await this._getLayerData(t);e.layerType=i.tileInfo?"ArcGISTiledMapServiceLayer":"ArcGISMapServiceLayer"}else if(t.match(".*\\.(csv|txt)$"))e.layerType="CSV";else if(t.match(".*\\.kml$"))e.layerType="KML";else if(t.match(".*SceneServer/layers/\\d{1,}/?$")){const i=await this._getLayerData(t);"3DObject"===i.layerType?e.layerType="ArcGISSceneServiceLayer":"IntegratedMesh"===i.layerType?e.layerType="IntegratedMeshLayer":"PointCloud"===i.layerType&&(e.layerType="PointCloudLayer")}else t.match(".*(\\.xml|rss/?)$")&&(e.layerType="GeoRSS")}else if(e.layers){e.layerType="GroupLayer";const t=[];for(const i of e.layers)t.push(this._inferLayerType(i));await Promise.all(t)}else e.templateUrl&&e.tileInfo?e.layerType="WebTiledLayer":e.featureCollection?e.layerType="ArcGISFeatureLayer":e.styleUrl?e.layerType="VectorTileLayer":e.mapUrl&&(e.layerType="WMS")}async _getLayerData(e){const t=await this.requestHelper.request(e,{query:{f:"json"}});if(!t||!t.data)throw new Error(`Response to request for url ${e} was invalid.`);return t.data}async _createStandardBasemapOptions(){const e=this._spatialReference;!this._basemapOptions.isExplicitlyModified&&e&&e.isWebMercator&&await parallelEach([WellKnownBasemap.SATELLITE,WellKnownBasemap.HYBRID_VECTOR,WellKnownBasemap.STREETS_VECTOR,WellKnownBasemap.TOPO_VECTOR,WellKnownBasemap.STREETS_NAVIGATION_VECTOR,WellKnownBasemap.STREETS_NIGHT_VECTOR,WellKnownBasemap.TERRAIN_VECTOR,WellKnownBasemap.DARK_GRAY_VECTOR,WellKnownBasemap.GRAY_VECTOR,WellKnownBasemap.NATIONAL_GEOGRAPHIC,WellKnownBasemap.OCEANS_VECTOR,WellKnownBasemap.OPEN_STREET_MAP_VECTOR],(async e=>{const t=await createStandardBasemap(e);basemapsAreEquivalent(this.map.basemap,t)?this._basemapOptions.addInternal(this.basemapExtension):this._basemapOptions.addInternal(BasemapExtension.create({basemap:t}),void 0,!1)}))}_ensureIsBasemapOption(e){const t=this.basemapOptions.findIndex((t=>t.basemap===e.basemap));t>=0?this._basemapOptions.getItemAt(t)!==e&&(this._basemapOptions.removeAtInternal(t),this._basemapOptions.addInternal(e,t)):this._basemapOptions.addInternal(e,0)}_updateBookmarks(){var e,t,i;this.bookmarks.removeMany(this.bookmarks.filter((e=>"map"===e.source))),isWebMap(this.map)&&(null===(e=this.map.bookmarks)||void 0===e?void 0:e.length)>0?this.map.bookmarks.forEach((e=>{const t=toEsriApiGeometry(e.extent),i=new EsriViewpoint({targetGeometry:t});this.bookmarks.add(new Bookmark({source:"map",title:e.name,viewpoint:i}))})):isWebScene(this.map)&&(null===(i=null===(t=this.map.presentation)||void 0===t?void 0:t.slides)||void 0===i?void 0:i.length)>0&&this.map.presentation.slides.forEach((e=>{const t={source:"map",title:e.title.text,viewpoint:e.viewpoint},i=new Bookmark(t);this.bookmarks.add(i)}))}};MapExtension=__decorate([serializable],MapExtension);export{MapExtension};class LayerExtensionCollectionImpl extends LayerExtensionCollectionBase{constructor(e){super(e,"map.layers")}get _mapExtension(){return this._parent}toJSON(){const e=[];return this.forEach((t=>{e.push(`item://${encodeURIComponent(ItemType.LAYER_EXTENSION)}/${encodeURIComponent(t.id)}`)})),e}}class BasemapExtensionCollection extends InitializableCollectionProxy{constructor(e){super(new Collection),this.isExplicitlyModified=!1,this._mapExtension=e}add(e,t){super.add(e,t),this.isExplicitlyModified=!0,1===this.length&&this._mapExtension.map&&!this._mapExtension.basemapExtension&&(this._mapExtension.basemapExtension=e)}addMany(e,t){super.addMany(e,t),this.isExplicitlyModified=!0}addInternal(e,t,i=!0){const s=e=>{const t="-vector";return(null==e?void 0:e.endsWith(t))?e.substring(0,e.length-t.length):e};let a;if(e.basemap){const t=s(e.basemap.id);if(a=this.findIndex((e=>{var i;return s(null===(i=e.basemap)||void 0===i?void 0:i.id)===t})),isStandardBasemap(e.basemap)&&a>=0){if(!i)return;super.removeAt(a)}}super.add(e,null!=t?t:a>=0?a:void 0)}removeAt(e){const t=super.removeAt(e);return t&&(this.isExplicitlyModified=!0,t===this._mapExtension.basemapExtension&&(e<this.length?this._mapExtension.basemapExtension=this.getItemAt(e):this.length?this._mapExtension.basemapExtension=this.getItemAt(e-1):this._mapExtension.basemapExtension=void 0)),t}removeAll(){this._mapExtension.basemapExtension=void 0,super.removeAll()}removeAtInternal(e){return super.removeAt(e)}removeAllInternal(){for(;this.length;)this.removeAtInternal(this.length-1)}reorder(e,t){return super.reorder(e,t),this.isExplicitlyModified=!0,e}reorderInternal(e,t){return super.reorder(e,t)}_itemIsInitialized(e){return super._itemIsInitialized(e)&&!!e.basemap}}class TableExtensionCollectionImpl extends InitializableCollectionProxy{constructor(e){super(),this._tableExtensionMap=new WeakMap,this._uninitializedTableExtensions=new Set,this._mapExtension=e,onCollectionPropertyChange(this._mapExtension,"map.tables",(e=>{const t={added:(e.added||[]).map((e=>this._forTable(e))),moved:(e.moved||[]).map((e=>this._forTable(e))),removed:(e.removed||[]).map((e=>this._forTable(e))),target:this};this.emit("change",t)})),this._mapExtension.watch("map.tables.length",(()=>this._notifyChange("length")))}get _collection(){return this._tables.map((e=>this._forTable(e))).concat(Array.from(this._uninitializedTableExtensions))}get _tables(){var e,t;return null!==(t=null===(e=this._mapExtension.map)||void 0===e?void 0:e.tables)&&void 0!==t?t:new ReadOnlyCollection(new Collection)}toJSON(){const e=[];return this.forEach((t=>{e.push(`item://${encodeURIComponent(ItemType.TABLE_EXTENSION)}/${encodeURIComponent(t.id)}`)})),e}clone(){const e=new TableExtensionCollectionImpl(this._mapExtension);return e._tableExtensionMap=this._tableExtensionMap,e}findById(e){return checkArg("id",e).isNotMissing(),this.find((t=>t.id===e))}findByTableId(e){return checkArg("id",e).isNotMissing(),this.find((t=>t.table.id===e))}forTable(e){if(checkArg("table",e).isNotMissing(),this._tables.includes(e))return this._forTable(e)}add(e,t){if(checkArg("tableX",e).isNotMissing(),e.mapExtension&&e.mapExtension.tableExtensions.remove(e),e._setMapExtension(this._mapExtension),e.table){const i=this._tableExtensionMap.get(e.table);if(this._tableExtensionMap.set(e.table,e),i&&i!==e&&this._onRemoved(i),this._tables.includes(e.table))if(void 0===t){const t={added:[e],moved:[],removed:i?[i]:[],target:this};this.emit("change",t)}else this._tables.reorder(e.table,t);else this._tables.add(e.table,t)}else{this._uninitializedTableExtensions.add(e);const t={added:[e],moved:[],removed:[],target:this};this.emit("change",t)}this._onAdded(e)}removeAt(e){const t=this.getItemAt(e);if(void 0!==t){if(this._uninitializedTableExtensions.has(t)){this._uninitializedTableExtensions.delete(t);const e={added:[],moved:[],removed:[t],target:this};this.emit("change",e)}else this._tables.remove(t.table);return this._onRemoved(t),t}}reorder(e,t){if(e&&this._tables.includes(e.table))return this._tables.reorder(e.table,t),e}sort(e){this._tables.sort(((t,i)=>e(this._forTable(t),this._forTable(i))))}_itemIsInitialized(e){return super._itemIsInitialized(e)&&!!e.table}_onAdded(e){}_onRemoved(e){e._setMapExtension(void 0)}_forTable(e){for(const e of this._uninitializedTableExtensions)e._resolveTable(),e.table&&(this._tableExtensionMap.set(e.table,e),this._uninitializedTableExtensions.delete(e));if(!this._tableExtensionMap.has(e)){const t=TableExtension.create({table:e});this._tableExtensionMap.set(e,t),t._setMapExtension(this._mapExtension),this._onAdded(t)}return this._tableExtensionMap.get(e)}}class AllLayerExtensionCollectionImpl extends ReadOnlyInitializableCollection{constructor(e){super(),this._mapExtension=e}get _collection(){let e=this._mapExtension.layerExtensions.flatten((e=>isGroupLayerExtension(e)?e.layerExtensions:[]));return this._mapExtension.basemapExtension&&(e=e.concat(this._mapExtension.basemapExtension.baseLayerExtensions.toArray()).concat(this._mapExtension.basemapExtension.referenceLayerExtensions.toArray())),e=e.concat(this._mapExtension.groundExtension.layerExtensions.toArray()),e}findById(e){return checkArg("id",e).isNotMissing(),this.find((t=>t.id===e))}findByLayerId(e){return checkArg("id",e).isNotMissing(),this.find((t=>t.layer.id===e))}forLayer(e){return checkArg("layer",e).isNotMissing(),this.findByLayerId(e.id)}emit(e,t){if("change"===e){const i=new Collection;i.addMany(t.added);const s=i.flatten((e=>isGroupLayerExtension(e)?e.layerExtensions:[])).toArray(),a=new Collection;a.addMany(t.removed);const n=a.flatten((e=>isGroupLayerExtension(e)?e.layerExtensions:[])).toArray(),o=new Collection;o.addMany(t.moved);const r=o.flatten((e=>isGroupLayerExtension(e)?e.layerExtensions:[])).toArray();super.emit(e,{added:s,removed:n,moved:r,target:this})}return super.emit(e,t)}_itemIsInitialized(e){return super._itemIsInitialized(e)&&!!e.layer}}function toPortalItem(e){if("object"!=typeof e||!e||!e.baseMap)return toPortalItemBase(e)}function isPortalItem(e){return"object"!=typeof e||e&&!e.baseMap}function validatePortalItem(e,t,i){if((null==e?void 0:e.type)&&e.type!==i)throw new Error(`Invalid portal item type "${e.type}" for property ${t}.`)}
@@ -1 +1 @@
1
- import{__decorate}from"tslib";import{ArgumentError}from"../ArgumentError.js";import{InvalidOperationError}from"../InvalidOperationError.js";import{ItemType}from"../ItemType.js";import{FeatureSourceBase}from"../data/FeatureSourceBase.js";import{Schema}from"../data/Schema.js";import{LayerBase as PortalLayerBase}from"../portal/LayerBase.js";import{ERR_LAYER_TYPE_MISMATCH}from"../portal/_layerHelper.js";import{DefaultArcGISRequestHelper}from"../support/ArcGISRequestHelper.js";import{ReadOnlyInitializableCollection}from"../support/ReadOnlyInitializableCollection.js";import{serializable}from"../support/Serializable.js";import{CollectionProxy}from"../utilities/CollectionProxy.js";import{isLayer}from"../utilities/_layers.js";import{checkArg}from"../utilities/checkArg.js";import{Collection,compare}from"../utilities/collection.js";import{load}from"../utilities/esri.js";import{isGroupLayerExtension}from"../utilities/extensions.js";import{hasMmapLayer}from"../utilities/layers.js";import{getLogger}from"../utilities/log.js";import{deepClone}from"../utilities/object.js";import{toPortalItem}from"../utilities/portal.js";import{onCollectionPropertyChange,watchEach}from"../utilities/watch.js";import{_assignSublayerExtensions}from"./_SublayerExtension.js";import{ExtensionBaseLayerListSettings,fromLayerListMode}from"./support/LayerListSettings.js";import{SublayerExtensionCollectionBase}from"./support/_SublayerExtensionCollection.js";const ERR_INVALID_LAYER_TYPE="Invalid type of layer for this type of layer extension.",ERR_FEATURES_NOT_SUPPORTED="This type of layer does not have features.",ERR_ADD_SUBLAYERX_NOT_SUPPORTED="This type of layer cannot have sublayers.",ERR_SCHEMA_READ_ONLY="This schema property is read-only.",DEFAULT_CAPABILITIES=Object.freeze({supportsAdd:!1,supportsUpdate:!1,supportsDelete:!1,supportsEditing:!1,supportsQuery:!1});export class LayerExtension extends FeatureSourceBase{constructor(e){super(e),this._itemType=ItemType.LAYER_EXTENSION,this._watchHandles=[],this._dynamicallyAddedLayer=!1,this._visibilityMode="independent",this._onSublayerAddedPostInitialize=async e=>{var t,i;try{await e.initialize()}catch(r){getLayerXLogger().error(`Error occurred while initializing sublayer extension for sublayer '${null!==(i=null!==(t=e.title)&&void 0!==t?t:e.sublayer.id)&&void 0!==i?i:e.id}'. ${r}`)}};const t={...this.getDefaults(),...e};checkArg("properties.layer",t.layer).isNotMissing();const{layer:i}=t;let r;if((null==i?void 0:i.hasOwnProperty("listMode"))&&(r=fromLayerListMode(i.listMode)),this.layerListSettings=this._createLayerListSettings({...r,...t.layerListSettings}),isLayer(i))checkArg("properties.layer",i).satisfies((e=>this._isSupportedLayer(e)),ERR_INVALID_LAYER_TYPE),this._setLayer(i);else if(i){if(i.$portalItem){const e=i.$portalItem;this._portalItem=toPortalItem(e)}this._deferredLayerProperties=i}this._sublayerExtensions=this._createSublayerExtensionCollection(),this.allSublayerExtensions=new AllSublayerExtensionCollectionImpl(this),this.watch("parentLayerExtension.isEffectivelyVisible",(()=>this.notifyChange("isEffectivelyVisible"))),this.watch("layer.sublayers",(()=>this.notifyChange("_sublayers")))}get layer(){return this._layer}get mapExtension(){return this._mapExtension}get basemapExtension(){return this._basemapExtension}get groundExtension(){return this._groundExtension}get parentLayerExtension(){return this._parentLayerExtension}get hasFeatures(){return!1}get capabilities(){return this._capabilities()}get renderer(){}get visibilityMode(){return this._visibilityMode}set visibilityMode(e){this._visibilityMode=e,"exclusive"===e&&this._ensureAtMostOneChildSublayerVisible()}get sublayerExtensions(){return this._sublayerExtensions}get requestHelper(){return this._requestHelper||(this._requestHelper=new DefaultArcGISRequestHelper),this._requestHelper}set requestHelper(e){this._requestHelper=e}get title(){return this.layer?this.layer.title:void 0}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 _layerSupportsHideChildren(){return this.supportsSublayers}get _sublayers(){if(this.supportsSublayers)return this.layer?this.layer.sublayers:void 0}get dynamicallyAddedLayer(){return this._dynamicallyAddedLayer}set dynamicallyAddedLayer(e){this._dynamicallyAddedLayer=e}static create(e){if(!LayerExtension.factory)throw new InvalidOperationError("Cannot create layer extension: no layer extension factory has been registered.");return LayerExtension.factory.create(e)}static async fromPortalItem(e,t){var i;checkArg("portalItemLike",e).isNotMissing();const r=null!=t?t:{};checkArg("layerExtensionProperties.layer",r.layer).satisfies((e=>!isLayer(e)));const s={...r.layer};checkArg("layerExtensionProperties.layer.$ref",s.$ref).satisfies((e=>null==e));const a=new DefaultArcGISRequestHelper,n=toPortalItem(e);let o;await load(n);const l=null!==(i=n.typeKeywords)&&void 0!==i?i:"";if("Map Service"===n.type)o=l.includes("Tiled")||l.includes("Hosted Service")?"ArcGISTiledMapServiceLayer":"ArcGISMapServiceLayer";else if("Feature Service"===n.type)o="ArcGISFeatureLayer";else if("Image Service"===n.type){const e=await LayerExtension._getLayerData(n.url,a);e.cacheType?"Map"===e.cacheType?o="ArcGISTiledImageServiceLayer":("Elevation"===e.cacheType||l.includes("Elevation 3D Layer"))&&(o="ArcGISTiledElevationServiceLayer"):o=e.singleFusedMapCache||e.tileInfo||l.includes("Hosted Service")?"ArcGISTiledImageServiceLayer":"ArcGISImageServiceLayer"}else if("CSV"===n.type)o="CSV";else if("KML"===n.type)o="KML";else if("Scene Service"===n.type)l.includes("3DObject")||l.includes("Point")?o="ArcGISSceneServiceLayer":l.includes("IntegratedMesh")?o="IntegratedMeshLayer":l.includes("PointCloud")?o="PointCloudLayer":l.includes("Building")&&(o="BuildingSceneLayer");else if("Stream Service"===n.type)o="ArcGISStreamLayer";else if("Vector Tile Service"===n.type)o="VectorTileLayer";else if("Feature Collection"===n.type){o="ArcGISFeatureLayer";const e=await n.fetchData();s.featureCollection=e}else if("WMTS"===n.type){o="WebTiledLayer";const e=await n.fetchData();Object.assign(s,e)}else if("WMS"===n.type){o="WMS";const e=await n.fetchData();Object.assign(s,e)}if(!o)throw new ArgumentError("portalItem","Could not determine correct type of LayerExtension to create from portal item");if(s.layerType&&s.layerType!==o)throw new ArgumentError("layerExtensionProperties.layer.layerType","Layer type defined in layer properties does not match layer type from portal item");return s.layerType=o,s.$portalItem=n,r.layer=s,LayerExtension.create(r)}static _matchesRef(e,t){if(!e||!t)return!1;const i=t.$ref;return"string"==typeof i?e.id===i||e.title===i:!!i&&(e.id===i.id||e.title===i.title&&!i.path)}static async _getLayerData(e,t){const i=await t.request(e,{query:{f:"json"}});if(!i||!i.data)throw new Error(`Response to request for url ${e} was invalid.`);return i.data}getFeatures(e,t){if(!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);return super.getFeatures(e,t)}getFullExtent(){return this.effectiveFullExtent}async addFeatures(e,t){if(checkArg("features",e).isNotMissing(),!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);await super.addFeatures(e,t)}async updateFeatures(e,t){if(checkArg("features",e).isNotMissing(),!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);await super.updateFeatures(e,t)}async deleteFeatures(e,t){if(checkArg("features",e).isNotMissing(),!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);await super.deleteFeatures(e,t)}async _createBackingLayer(){this._portalItem||this.layer||this._deferredLayerProperties&&this._deferredLayerProperties.$ref?!this.layer&&this._portalItem&&this._setLayer(await this._createLayer(this.getDefaults().layer)):(this._setLayer(await this._createLayer(this._deferredLayerProperties)),checkArg("properties.layer",this._layer).satisfies((e=>this._isSupportedLayer(e)),ERR_INVALID_LAYER_TYPE),this._deferredLayerProperties=void 0)}_setMapExtension(e){const t=this.mapExtension;this._mapExtension=e,t&&this.featureSettings.formatSettings.parent===t.formatSettings&&(this.featureSettings.formatSettings.parent=void 0),e&&(this.featureSettings.formatSettings.parent||(this.featureSettings.formatSettings.parent=e.formatSettings)),this._resolveLayer(),this.notifyChange("mapExtension")}_setBasemapExtension(e){this._basemapExtension=e,this._resolveLayer(),e&&(this.taskSettings.parent=e.taskSettings),this.notifyChange("basemapExtension")}_setGroundExtension(e){this._groundExtension=e,this._resolveLayer(),e&&(this.taskSettings.parent=e.taskSettings),this.notifyChange("groundExtension")}_setParentLayerExtension(e){const t=this._parentLayerExtension;this._parentLayerExtension=e,t&&(this.featureSettings.formatSettings.parent===t.featureSettings.formatSettings&&(this.featureSettings.formatSettings.parent=this.mapExtension?this.mapExtension.formatSettings:void 0),this.taskSettings.parent===t.taskSettings&&(this.taskSettings.parent=void 0)),e&&((!this.featureSettings.formatSettings.parent||this.mapExtension&&this.featureSettings.formatSettings.parent===this.mapExtension.formatSettings)&&(this.featureSettings.formatSettings.parent=e.featureSettings.formatSettings),this.taskSettings.parent||(this.taskSettings.parent=e.taskSettings)),this._resolveLayer(),this.notifyChange("parentLayerExtension")}_resolveLayer(e){var t,i,r;if(this.layer||!this._deferredLayerProperties)return;const s=e=>LayerExtension._matchesRef(e,this._deferredLayerProperties);let a;e?a=e.find(s):(null===(t=this.basemapExtension)||void 0===t?void 0:t.basemap)?(a=this.basemapExtension.basemap.baseLayers.find(s),a=a||this.basemapExtension.basemap.referenceLayers.find(s)):(null===(i=this.groundExtension)||void 0===i?void 0:i.ground)?a=this.groundExtension.ground.layers.find(s):(null===(r=this.parentLayerExtension)||void 0===r?void 0:r.layer)?a=this.parentLayerExtension.layer.layers.find(s):this.mapExtension&&(a=this.mapExtension.map.layers.find(s)),a&&this._isSupportedLayer(a)&&(this._setLayer(a),this._originalRef=this._deferredLayerProperties.$ref,this._deferredLayerProperties.$portalItem&&getLayerXLogger().warn("LayerExtension defined with both $ref and $portalItem. Ignoring $portalItem."))}async _switchLayer(e){if(e===this.layer)return;checkArg("newLayer",e).isNotMissing().satisfies((e=>this._isSupportedLayer(e)),ERR_INVALID_LAYER_TYPE),this.isInitialized&&await load(e);const t=new Map;if(this._sublayers)for(const e of this._sublayers.toArray())t.set(e.id,this.sublayerExtensions.forSublayer(e));e.visible=this.layer.visible,e.opacity=this.layer.opacity,e.listMode=this.layer.listMode,this._setLayer(e);const i=[];if(this._sublayers){const e=this._sublayers.filter((e=>t.has(e.id))).toArray();i.push(...e.map((async e=>{const i=t.get(e.id);await i._switchSublayer(e),this._sublayerExtensions._register(i)})))}this.isInitialized&&i.push(this._initializeChildren()),await Promise.all(i)}_getProjectWebmapJSON(){if(!this.layer)return;let e=PortalLayerBase.fromEsriApiLayer(this.layer);if(!this.dynamicallyAddedLayer){const{id:t,title:i,layerType:r,visibility:s,opacity:a}=e;e={id:t,title:i,layerType:r,visibility:s,opacity:a}}return e}async _onDestroy(){this._watchHandles.forEach((e=>null==e?void 0:e.remove())),await Promise.all(this.sublayerExtensions.toArray().map((e=>e.destroy()))),await super._onDestroy()}_getSerializableProperties(){return{...super._getSerializableProperties(),iconUrl:{serializeModes:["initial","project"],serialize:e=>"project"!==e||this.dynamicallyAddedLayer?this.iconUrl:this.getDefault("iconUrl")},visibilityMode:{serializeModes:["initial","project"],serialize:e=>"project"!==e||this.dynamicallyAddedLayer?this.visibilityMode:this.getDefault("visibilityMode"),default:"independent"},tpkSource:{serializeModes:["initial"]},layerListSettings:{serializeModes:["initial","project"],serialize:e=>"project"!==e||this.dynamicallyAddedLayer?this.layerListSettings:this.getDefault("layerListSettings")},sublayerExtensions:{serializeModes:["initial","project"],serialize:e=>this.sublayerExtensions.map((e=>e.toItemUri())).toArray(),deserialize:e=>{_assignSublayerExtensions(this.sublayerExtensions,e,(e=>this._createSublayerExtension(e)))}},layer:{serializeModes:["initial","project"],serialize:e=>{if(this.layer){if((this._mapExtension||this._parentLayerExtension||this._basemapExtension||this._groundExtension)&&(this._layer.id||this._layer.title)){const e=PortalLayerBase.getLayerType(this._layer),t=this._getSerializableRefLayerProperties();return{$ref:this._originalRef||{id:this._layer.id,title:this._layer.title,subtype:this._getSerializableLayerType()},layerType:e,...t}}return PortalLayerBase.fromEsriApiLayer(this.layer)}return this._deferredLayerProperties?deepClone(this._deferredLayerProperties):void 0},isDefault:()=>{throw new Error("Missing implementation for _getSerializableProperties() > layer > default. Subclasses of LayerExtension must implement this.")},deserialize:e=>{if(isLayer(e)){if(e!==this.layer)throw new Error("Property 'layer' is read-only.")}else e&&(this._layer?this._applyLayerProperties(e,this.layer):this._deferredLayerProperties&&(this._deferredLayerProperties={...this._deferredLayerProperties,...e}))}},dynamicallyAddedLayer:{serializeModes:["project"],default:!1},requestHelper:{serialize:!1}}}_getSerializableLayerType(){}_getSerializableRefLayerProperties(){return{}}_createSublayerExtension(e){if(!this.supportsSublayers)throw new InvalidOperationError(ERR_ADD_SUBLAYERX_NOT_SUPPORTED);throw new Error("Missing implementation for _createSublayerExtension(). Subclasses of LayerExtension that support sublayers must implement this.")}async _onInitialize(){if(await super._onInitialize(),await this._createBackingLayer(),this._portalItem&&(await load(this._portalItem),await this._applyPortalItemProperties(this._portalItem),this.layer.title=this._portalItem.title,this.layer.portalItem=this._portalItem,this.iconUrl||(this.iconUrl=this._portalItem.thumbnailUrl),await this._applyLayerProperties(this._deferredLayerProperties,this.layer),this._deferredLayerProperties=void 0),this._resolveLayer(),!this.layer){const e=this._deferredLayerProperties.$ref;throw this._mapExtension||this._parentLayerExtension||this._basemapExtension||this._groundExtension?new InvalidOperationError(`No layer found matching reference "${e}".`):new InvalidOperationError("Cannot resolve layer reference: missing parent.")}this._deferredLayerProperties&&(await this._applyLayerProperties(this._deferredLayerProperties,this.layer),this._deferredLayerProperties=void 0),await this._initializeLayer(),await load(this.layer),this.supportsSublayers&&!this.layer.sublayers&&this.layer._set("sublayers",new Collection),this._sublayerExtensions.onParentInitialized()}async _postInitialize(){await super._postInitialize(),this.layerListSettings.onLayerExtensionInitialized(),this._watchHandles.push(onCollectionPropertyChange(this,"layer.sublayers",(async e=>{var t;const i=(null!==(t=e.added)&&void 0!==t?t:[]).map((e=>this.sublayerExtensions.forSublayer(e)));await Promise.all(i.map(this._onSublayerAddedPostInitialize))})))}_applyPortalItemProperties(e){throw new InvalidOperationError("Cannot use this type of layer extension with a PortalItem.")}async _initializeLayer(){}_createLayerListSettings(e){return new LayerExtensionLayerListSettings(e,this)}_createSublayerExtensionCollection(){return new SublayerExtensionCollectionImpl(this)}_capabilities(){return DEFAULT_CAPABILITIES}*_initializableChildCollections(){yield*super._initializableChildCollections(),yield this.sublayerExtensions}async _createLayer(e){return PortalLayerBase.toEsriApiLayer(e)}_applyLayerProperties(e,t){checkArg("layerJson",e).isNotMissing();const i=e.layerType||e.type;return checkArg("layerJson.layerType",i).satisfies((e=>{var t;return!e||e===(null===(t=this.getDefault("layer"))||void 0===t?void 0:t.layerType)}),ERR_LAYER_TYPE_MISMATCH),checkArg("layer",t).isNotMissing().satisfies((e=>this._isSupportedLayer(e)),ERR_LAYER_TYPE_MISMATCH),PortalLayerBase.applyToEsriApiLayer(e,t)}_setLayer(e){if(this._layer=e,e.watch("visible",this._onVisibleChanged.bind(this)),this.layer.watch("minScale",(()=>this.notifyChange("effectiveMinScale"))),this.layer.watch("maxScale",(()=>this.notifyChange("effectiveMaxScale"))),this.layer.watch("title",(()=>this.notifyChange("title"))),this.supportsSublayers)if(this._sublayers)this._setupSublayersHandles();else{const t=e.watch("sublayers",(()=>{this._setupSublayersHandles(),t.remove()}),!0)}this.notifyChange("layer"),this.notifyChange("title"),this.notifyChange("effectiveMinScale"),this.notifyChange("effectiveMaxScale"),this.notifyChange("isEffectivelyVisible")}_setupSublayersHandles(){this._sublayers.on("change",this._onSublayersChange.bind(this)),watchEach(this._sublayers,"visible",this._onSublayersSublayerVisibleChanged.bind(this))}_onVisibleChanged(e){if("inherited"===this.visibilityMode&&this.supportsSublayers&&this._sublayers)for(const t of this._sublayers.toArray())t.visible=e;this.notifyChange("isEffectivelyVisible")}_onSublayersSublayerVisibleChanged(e,t,i,r){e&&"exclusive"===this.visibilityMode&&this._ensureAChildSublayerVisible(r)}_onSublayersChange(e){var t;(null===(t=e.added)||void 0===t?void 0:t.length)&&"exclusive"===this.visibilityMode&&this._ensureAChildSublayerVisible(e.added[e.added.length-1])}_ensureAChildSublayerVisible(e){for(const t of this._sublayers.toArray())t!==e&&(t.visible=!1)}_ensureAtMostOneChildSublayerVisible(){this.layer&&this._sublayers&&this._ensureAChildSublayerVisible(this._sublayers.find((e=>e.visible)))}}class SublayerExtensionCollectionImpl extends SublayerExtensionCollectionBase{constructor(e){super(e,"_sublayers"),this._layerExtension=e}add(e,t){if(checkArg("sublayerX",e).isNotMissing(),!this._layerExtension.supportsSublayers)throw new InvalidOperationError(ERR_ADD_SUBLAYERX_NOT_SUPPORTED);const i=e.sublayer?e.sublayer.layer:void 0;i&&i!==this._layerExtension.layer&&i.sublayers.remove(e.sublayer),super.add(e,t)}}class AllSublayerExtensionCollectionImpl extends ReadOnlyInitializableCollection{constructor(e){super(),this._layerExtension=e}get _collection(){return this._layerExtension.sublayerExtensions.flatten((e=>e.sublayerExtensions))}findById(e){return checkArg("id",e).isNotMissing(),this.find((t=>t.id===e))}findBySublayerId(e){return checkArg("id",e).isNotMissing(),this.find((t=>t.sublayer.id===e))}forSublayer(e){return checkArg("sublayer",e).isNotMissing(),this.findBySublayerId(e.id)}emit(e,t){if("change"===e){const i=new Collection;i.addMany(t.added);const r=i.flatten((e=>e.sublayerExtensions)).toArray(),s=new Collection;s.addMany(t.removed);const a=s.flatten((e=>e.sublayerExtensions)).toArray(),n=new Collection;n.addMany(t.moved);const o=n.flatten((e=>e.sublayerExtensions)).toArray();return super.emit(e,{added:r,removed:a,moved:o,target:this})}return super.emit(e,t)}_itemIsInitialized(e){return super._itemIsInitialized(e)&&!!e.sublayer}}let LayerExtensionLayerListSettings=class extends ExtensionBaseLayerListSettings{get _esriLayer(){return this._extension.layer}get _listModePath(){return"layer.listMode"}get _supportsChildren(){return this._extension.supportsSublayers}};LayerExtensionLayerListSettings=__decorate([serializable],LayerExtensionLayerListSettings);let LayerExtensionSchema=class extends Schema{constructor(e){if(super(),this._layerBindings=new Map,this._layerExtension=e,this._bindSettingsToLayerProperties(),e.layer)this._onLayerResolved(e.layer);else{const t=e.watch("layer",(()=>{this._onLayerResolved(e.layer),t.remove()}),!0)}}_getPropertyBindings(){return{}}_getSetting(e,t){if(this._layerBindings.has(e)){let t=this._layerBindings.get(e);if("string"==typeof t&&(t={property:t}),t.hasOwnProperty("value"))return t.value;if(this._layerExtension.layer)return this._layerExtension.layer[t.property]}return super._getSetting(e,t)}_setSetting(e,t){if(this._layerBindings.has(e)){let i=this._layerBindings.get(e);if("string"==typeof i&&(i={property:i}),i.readonly||i.hasOwnProperty("value"))throw new InvalidOperationError(ERR_SCHEMA_READ_ONLY);if(this._layerExtension.layer)return void(this._layerExtension.layer[i.property]=t)}super._setSetting(e,t)}_bindSettingsToLayerProperties(){const e=this._getPropertyBindings();for(const t of Object.keys(e)){let i=e[t];"string"==typeof i&&(i={property:i}),this._layerBindings.set(t,i),i.hasOwnProperty("value")||this._layerExtension.watch(`layer.${i.property}`,(()=>this.notifyChange(t)),!i.hasOwnProperty("sync")||i.sync)}}_onLayerResolved(e){for(const t of this._layerBindings.keys())this.isModified(t)&&(e[t]=this[t],this.reset(t))}};LayerExtensionSchema=__decorate([serializable],LayerExtensionSchema);export{LayerExtensionSchema};export class ArrayWrappedCollection extends CollectionProxy{constructor(e,t){if(super(),this._layerExtension=e,this._property=t,this._layerProperty=e instanceof LayerExtension?"layer":"sublayer",e[this._layerProperty])this._onLayerResolved(e[this._layerProperty]);else{this._collection=new Collection;const t=e.watch(this._layerProperty,(()=>{const i=e[this._layerProperty];this.length&&(i[this._property]=this.toArray()),this._onLayerResolved(i),t.remove()}),!0)}}add(e,t){const i=this._layerExtension[this._layerProperty];i&&!i[this._property]&&(i[this._property]=[],this._collection=wrapArrayWithCollection(i[this._property])),super.add(e,t)}_onLayerResolved(e){this._collection=wrapArrayWithCollection(e[this._property]||[]),e.watch(this._property,(()=>{this._collection=wrapArrayWithCollection(e[this._property]||[])}),!0)}}export function _assignLayerExtensions(e,t){return compare(e,t,{onNew:(t,i)=>{e.add(t instanceof LayerExtension?t:LayerExtension.create(t),isLayerRef(t)?void 0:i)},onMatch:(t,i,r,s)=>{i instanceof LayerExtension||t.assignProperties(i),r===s||isLayerRef(i)||e.reorder(t,s)},onMissing:t=>{(hasMmapLayer([t])||isGroupLayerExtension(t)&&0===t.layerExtensions.toArray().length)&&e.remove(t)},equals:(e,t)=>t instanceof LayerExtension?t===e:!!LayerExtension._matchesRef(e.layer,t.layer)||e.id===t.id})}function wrapArrayWithCollection(e){const t=new Collection;return Object.defineProperty(t,"_items",{get:()=>e}),Object.defineProperty(t,"length",{get:()=>e.length,set:t=>e.length=t}),t}function getLayerXLogger(){return getLogger("geocortex.api.mapping.LayerExtension")}function isLayerRef(e){var t,i;return e instanceof LayerExtension?!!(null===(t=e._deferredLayerProperties)||void 0===t?void 0:t.$ref):!isLayer(e.layer)&&!!(null===(i=e.layer)||void 0===i?void 0:i.$ref)}
1
+ import{__decorate}from"tslib";import{ArgumentError}from"../ArgumentError.js";import{InvalidOperationError}from"../InvalidOperationError.js";import{ItemType}from"../ItemType.js";import{FeatureSourceBase}from"../data/FeatureSourceBase.js";import{Schema}from"../data/Schema.js";import{LayerBase as PortalLayerBase}from"../portal/LayerBase.js";import{ERR_LAYER_TYPE_MISMATCH}from"../portal/_layerHelper.js";import{DefaultArcGISRequestHelper}from"../support/ArcGISRequestHelper.js";import{ReadOnlyInitializableCollection}from"../support/ReadOnlyInitializableCollection.js";import{serializable}from"../support/Serializable.js";import{CollectionProxy}from"../utilities/CollectionProxy.js";import{isLayer}from"../utilities/_layers.js";import{checkArg}from"../utilities/checkArg.js";import{Collection,compare}from"../utilities/collection.js";import{load}from"../utilities/esri.js";import{isGroupLayerExtension}from"../utilities/extensions.js";import{hasMmapLayer}from"../utilities/layers.js";import{getLogger}from"../utilities/log.js";import{deepClone}from"../utilities/object.js";import{toPortalItem}from"../utilities/portal.js";import{onCollectionPropertyChange,watchEach}from"../utilities/watch.js";import{_assignSublayerExtensions}from"./_SublayerExtension.js";import{ExtensionBaseLayerListSettings,fromLayerListMode}from"./support/LayerListSettings.js";import{SublayerExtensionCollectionBase}from"./support/_SublayerExtensionCollection.js";const ERR_INVALID_LAYER_TYPE="Invalid type of layer for this type of layer extension.",ERR_FEATURES_NOT_SUPPORTED="This type of layer does not have features.",ERR_ADD_SUBLAYERX_NOT_SUPPORTED="This type of layer cannot have sublayers.",ERR_SCHEMA_READ_ONLY="This schema property is read-only.",DEFAULT_CAPABILITIES=Object.freeze({supportsAdd:!1,supportsUpdate:!1,supportsDelete:!1,supportsEditing:!1,supportsQuery:!1});export class LayerExtension extends FeatureSourceBase{constructor(e){super(e),this._itemType=ItemType.LAYER_EXTENSION,this._watchHandles=[],this._dynamicallyAddedLayer=!1,this._visibilityMode="independent",this._onSublayerAddedPostInitialize=async e=>{var t,i;try{await e.initialize()}catch(r){getLayerXLogger().error(`Error occurred while initializing sublayer extension for sublayer '${null!==(i=null!==(t=e.title)&&void 0!==t?t:e.sublayer.id)&&void 0!==i?i:e.id}'. ${r}`)}};const t={...this.getDefaults(),...e};checkArg("properties.layer",t.layer).isNotMissing();const{layer:i}=t;let r;if((null==i?void 0:i.hasOwnProperty("listMode"))&&(r=fromLayerListMode(i.listMode)),this.layerListSettings=this._createLayerListSettings({...r,...t.layerListSettings}),isLayer(i))checkArg("properties.layer",i).satisfies((e=>this._isSupportedLayer(e)),ERR_INVALID_LAYER_TYPE),this._setLayer(i);else if(i){if(i.$portalItem){const e=i.$portalItem;this._portalItem=toPortalItem(e)}this._deferredLayerProperties=i}this._sublayerExtensions=this._createSublayerExtensionCollection(),this.allSublayerExtensions=new AllSublayerExtensionCollectionImpl(this),this.watch("parentLayerExtension.isEffectivelyVisible",(()=>this.notifyChange("isEffectivelyVisible"))),this.watch("layer.sublayers",(()=>this.notifyChange("_sublayers")))}get layer(){return this._layer}get mapExtension(){return this._mapExtension}get basemapExtension(){return this._basemapExtension}get groundExtension(){return this._groundExtension}get parentLayerExtension(){return this._parentLayerExtension}get hasFeatures(){return!1}get capabilities(){return this._capabilities()}get renderer(){}get visibilityMode(){return this._visibilityMode}set visibilityMode(e){this._visibilityMode=e,"exclusive"===e&&this._ensureAtMostOneChildSublayerVisible()}get sublayerExtensions(){return this._sublayerExtensions}get requestHelper(){return this._requestHelper||(this._requestHelper=new DefaultArcGISRequestHelper),this._requestHelper}set requestHelper(e){this._requestHelper=e}get title(){var e,t,i,r,s,a,n,o,l,y,h,p;return null!==(p=null!==(r=null!==(t=null===(e=this.layer)||void 0===e?void 0:e.title)&&void 0!==t?t:null===(i=this._deferredLayerProperties)||void 0===i?void 0:i.title)&&void 0!==r?r:"string"==typeof(null===(s=this._deferredLayerProperties)||void 0===s?void 0:s.$ref)?null===(a=this._deferredLayerProperties)||void 0===a?void 0:a.$ref:null!==(l=null===(o=null===(n=this._deferredLayerProperties)||void 0===n?void 0:n.$ref)||void 0===o?void 0:o.title)&&void 0!==l?l:null===(h=null===(y=this._deferredLayerProperties)||void 0===y?void 0:y.$ref)||void 0===h?void 0:h.id)&&void 0!==p?p:"Layer"}get supportsSublayers(){return!1}get effectiveMinScale(){return this.layer&&this.layer.minScale||0}get effectiveMaxScale(){return this.layer&&this.layer.maxScale||0}get isEffectivelyVisible(){const e=!!this.layer&&this.layer.visible;return this.parentLayerExtension?this.parentLayerExtension.isEffectivelyVisible&&e:e}get effectiveFullExtent(){return this.layer?this.layer.fullExtent:void 0}get _layerSupportsHideChildren(){return this.supportsSublayers}get _sublayers(){if(this.supportsSublayers)return this.layer?this.layer.sublayers:void 0}get dynamicallyAddedLayer(){return this._dynamicallyAddedLayer}set dynamicallyAddedLayer(e){this._dynamicallyAddedLayer=e}static create(e){if(!LayerExtension.factory)throw new InvalidOperationError("Cannot create layer extension: no layer extension factory has been registered.");return LayerExtension.factory.create(e)}static async fromPortalItem(e,t){var i;checkArg("portalItemLike",e).isNotMissing();const r=null!=t?t:{};checkArg("layerExtensionProperties.layer",r.layer).satisfies((e=>!isLayer(e)));const s={...r.layer};checkArg("layerExtensionProperties.layer.$ref",s.$ref).satisfies((e=>null==e));const a=new DefaultArcGISRequestHelper,n=toPortalItem(e);let o;await load(n);const l=null!==(i=n.typeKeywords)&&void 0!==i?i:"";if("Map Service"===n.type)o=l.includes("Tiled")||l.includes("Hosted Service")?"ArcGISTiledMapServiceLayer":"ArcGISMapServiceLayer";else if("Feature Service"===n.type)o="ArcGISFeatureLayer";else if("Image Service"===n.type){const e=await LayerExtension._getLayerData(n.url,a);e.cacheType?"Map"===e.cacheType?o="ArcGISTiledImageServiceLayer":("Elevation"===e.cacheType||l.includes("Elevation 3D Layer"))&&(o="ArcGISTiledElevationServiceLayer"):o=e.singleFusedMapCache||e.tileInfo||l.includes("Hosted Service")?"ArcGISTiledImageServiceLayer":"ArcGISImageServiceLayer"}else if("CSV"===n.type)o="CSV";else if("KML"===n.type)o="KML";else if("Scene Service"===n.type)l.includes("3DObject")||l.includes("Point")?o="ArcGISSceneServiceLayer":l.includes("IntegratedMesh")?o="IntegratedMeshLayer":l.includes("PointCloud")?o="PointCloudLayer":l.includes("Building")&&(o="BuildingSceneLayer");else if("Stream Service"===n.type)o="ArcGISStreamLayer";else if("Vector Tile Service"===n.type)o="VectorTileLayer";else if("Feature Collection"===n.type){o="ArcGISFeatureLayer";const e=await n.fetchData();s.featureCollection=e}else if("WMTS"===n.type){o="WebTiledLayer";const e=await n.fetchData();Object.assign(s,e)}else if("WMS"===n.type){o="WMS";const e=await n.fetchData();Object.assign(s,e)}if(!o)throw new ArgumentError("portalItem","Could not determine correct type of LayerExtension to create from portal item");if(s.layerType&&s.layerType!==o)throw new ArgumentError("layerExtensionProperties.layer.layerType","Layer type defined in layer properties does not match layer type from portal item");return s.layerType=o,s.$portalItem=n,r.layer=s,LayerExtension.create(r)}static _matchesRef(e,t){if(!e||!t)return!1;const i=t.$ref;return"string"==typeof i?e.id===i||e.title===i:!!i&&(e.id===i.id||e.title===i.title&&!i.path)}static async _getLayerData(e,t){const i=await t.request(e,{query:{f:"json"}});if(!i||!i.data)throw new Error(`Response to request for url ${e} was invalid.`);return i.data}getFeatures(e,t){if(!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);return super.getFeatures(e,t)}getFullExtent(){return this.effectiveFullExtent}async addFeatures(e,t){if(checkArg("features",e).isNotMissing(),!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);await super.addFeatures(e,t)}async updateFeatures(e,t){if(checkArg("features",e).isNotMissing(),!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);await super.updateFeatures(e,t)}async deleteFeatures(e,t){if(checkArg("features",e).isNotMissing(),!this.hasFeatures)throw new InvalidOperationError(ERR_FEATURES_NOT_SUPPORTED);await super.deleteFeatures(e,t)}async _createBackingLayer(){this._portalItem||this.layer||this._deferredLayerProperties&&this._deferredLayerProperties.$ref?!this.layer&&this._portalItem&&this._setLayer(await this._createLayer(this.getDefaults().layer)):(this._setLayer(await this._createLayer(this._deferredLayerProperties)),checkArg("properties.layer",this._layer).satisfies((e=>this._isSupportedLayer(e)),ERR_INVALID_LAYER_TYPE),this._deferredLayerProperties=void 0)}_setMapExtension(e){const t=this.mapExtension;this._mapExtension=e,t&&this.featureSettings.formatSettings.parent===t.formatSettings&&(this.featureSettings.formatSettings.parent=void 0),e&&(this.featureSettings.formatSettings.parent||(this.featureSettings.formatSettings.parent=e.formatSettings)),this._resolveLayer(),this.notifyChange("mapExtension")}_setBasemapExtension(e){this._basemapExtension=e,this._resolveLayer(),e&&(this.taskSettings.parent=e.taskSettings),this.notifyChange("basemapExtension")}_setGroundExtension(e){this._groundExtension=e,this._resolveLayer(),e&&(this.taskSettings.parent=e.taskSettings),this.notifyChange("groundExtension")}_setParentLayerExtension(e){const t=this._parentLayerExtension;this._parentLayerExtension=e,t&&(this.featureSettings.formatSettings.parent===t.featureSettings.formatSettings&&(this.featureSettings.formatSettings.parent=this.mapExtension?this.mapExtension.formatSettings:void 0),this.taskSettings.parent===t.taskSettings&&(this.taskSettings.parent=void 0)),e&&((!this.featureSettings.formatSettings.parent||this.mapExtension&&this.featureSettings.formatSettings.parent===this.mapExtension.formatSettings)&&(this.featureSettings.formatSettings.parent=e.featureSettings.formatSettings),this.taskSettings.parent||(this.taskSettings.parent=e.taskSettings)),this._resolveLayer(),this.notifyChange("parentLayerExtension")}_resolveLayer(e){var t,i,r;if(this.layer||!this._deferredLayerProperties)return;const s=e=>LayerExtension._matchesRef(e,this._deferredLayerProperties);let a;e?a=e.find(s):(null===(t=this.basemapExtension)||void 0===t?void 0:t.basemap)?(a=this.basemapExtension.basemap.baseLayers.find(s),a=a||this.basemapExtension.basemap.referenceLayers.find(s)):(null===(i=this.groundExtension)||void 0===i?void 0:i.ground)?a=this.groundExtension.ground.layers.find(s):(null===(r=this.parentLayerExtension)||void 0===r?void 0:r.layer)?a=this.parentLayerExtension.layer.layers.find(s):this.mapExtension&&(a=this.mapExtension.map.layers.find(s)),a&&this._isSupportedLayer(a)&&(this._setLayer(a),this._originalRef=this._deferredLayerProperties.$ref,this._deferredLayerProperties.$portalItem&&getLayerXLogger().warn("LayerExtension defined with both $ref and $portalItem. Ignoring $portalItem."))}async _switchLayer(e){if(e===this.layer)return;checkArg("newLayer",e).isNotMissing().satisfies((e=>this._isSupportedLayer(e)),ERR_INVALID_LAYER_TYPE),this.isInitialized&&await load(e);const t=new Map;if(this._sublayers)for(const e of this._sublayers.toArray())t.set(e.id,this.sublayerExtensions.forSublayer(e));e.visible=this.layer.visible,e.opacity=this.layer.opacity,e.listMode=this.layer.listMode,this._setLayer(e);const i=[];if(this._sublayers){const e=this._sublayers.filter((e=>t.has(e.id))).toArray();i.push(...e.map((async e=>{const i=t.get(e.id);await i._switchSublayer(e),this._sublayerExtensions._register(i)})))}this.isInitialized&&i.push(this._initializeChildren()),await Promise.all(i)}_getProjectWebmapJSON(){if(!this.layer)return;let e=PortalLayerBase.fromEsriApiLayer(this.layer);if(!this.dynamicallyAddedLayer){const{id:t,title:i,layerType:r,visibility:s,opacity:a}=e;e={id:t,title:i,layerType:r,visibility:s,opacity:a}}return e}async _onDestroy(){this._watchHandles.forEach((e=>null==e?void 0:e.remove())),await Promise.all(this.sublayerExtensions.toArray().map((e=>e.destroy()))),await super._onDestroy()}_getSerializableProperties(){return{...super._getSerializableProperties(),iconUrl:{serializeModes:["initial","project"],serialize:e=>"project"!==e||this.dynamicallyAddedLayer?this.iconUrl:this.getDefault("iconUrl")},visibilityMode:{serializeModes:["initial","project"],serialize:e=>"project"!==e||this.dynamicallyAddedLayer?this.visibilityMode:this.getDefault("visibilityMode"),default:"independent"},tpkSource:{serializeModes:["initial"]},layerListSettings:{serializeModes:["initial","project"],serialize:e=>"project"!==e||this.dynamicallyAddedLayer?this.layerListSettings:this.getDefault("layerListSettings")},sublayerExtensions:{serializeModes:["initial","project"],serialize:e=>this.sublayerExtensions.map((e=>e.toItemUri())).toArray(),deserialize:e=>{_assignSublayerExtensions(this.sublayerExtensions,e,(e=>this._createSublayerExtension(e)))}},layer:{serializeModes:["initial","project"],serialize:e=>{if(this.layer){if((this._mapExtension||this._parentLayerExtension||this._basemapExtension||this._groundExtension)&&(this._layer.id||this._layer.title)){const e=PortalLayerBase.getLayerType(this._layer),t=this._getSerializableRefLayerProperties();return{$ref:this._originalRef||{id:this._layer.id,title:this._layer.title,subtype:this._getSerializableLayerType()},layerType:e,...t}}return PortalLayerBase.fromEsriApiLayer(this.layer)}return this._deferredLayerProperties?deepClone(this._deferredLayerProperties):void 0},isDefault:()=>{throw new Error("Missing implementation for _getSerializableProperties() > layer > default. Subclasses of LayerExtension must implement this.")},deserialize:e=>{if(isLayer(e)){if(e!==this.layer)throw new Error("Property 'layer' is read-only.")}else e&&(this._layer?this._applyLayerProperties(e,this.layer):this._deferredLayerProperties&&(this._deferredLayerProperties={...this._deferredLayerProperties,...e}))}},dynamicallyAddedLayer:{serializeModes:["project"],default:!1},requestHelper:{serialize:!1}}}_getSerializableLayerType(){}_getSerializableRefLayerProperties(){return{}}_createSublayerExtension(e){if(!this.supportsSublayers)throw new InvalidOperationError(ERR_ADD_SUBLAYERX_NOT_SUPPORTED);throw new Error("Missing implementation for _createSublayerExtension(). Subclasses of LayerExtension that support sublayers must implement this.")}async _onInitialize(){if(await super._onInitialize(),await this._createBackingLayer(),this._portalItem&&(await load(this._portalItem),await this._applyPortalItemProperties(this._portalItem),this.layer.title=this._portalItem.title,this.layer.portalItem=this._portalItem,this.iconUrl||(this.iconUrl=this._portalItem.thumbnailUrl),await this._applyLayerProperties(this._deferredLayerProperties,this.layer),this._deferredLayerProperties=void 0),this._resolveLayer(),!this.layer){const e=this._deferredLayerProperties.$ref;throw this._mapExtension||this._parentLayerExtension||this._basemapExtension||this._groundExtension?new InvalidOperationError(`No layer found matching reference "${e}".`):new InvalidOperationError("Cannot resolve layer reference: missing parent.")}this._deferredLayerProperties&&(await this._applyLayerProperties(this._deferredLayerProperties,this.layer),this._deferredLayerProperties=void 0),await this._initializeLayer(),await load(this.layer),this.supportsSublayers&&!this.layer.sublayers&&this.layer._set("sublayers",new Collection),this._sublayerExtensions.onParentInitialized()}async _postInitialize(){await super._postInitialize(),this.layerListSettings.onLayerExtensionInitialized(),this._watchHandles.push(onCollectionPropertyChange(this,"layer.sublayers",(async e=>{var t;const i=(null!==(t=e.added)&&void 0!==t?t:[]).map((e=>this.sublayerExtensions.forSublayer(e)));await Promise.all(i.map(this._onSublayerAddedPostInitialize))})))}_applyPortalItemProperties(e){throw new InvalidOperationError("Cannot use this type of layer extension with a PortalItem.")}async _initializeLayer(){}_createLayerListSettings(e){return new LayerExtensionLayerListSettings(e,this)}_createSublayerExtensionCollection(){return new SublayerExtensionCollectionImpl(this)}_capabilities(){return DEFAULT_CAPABILITIES}*_initializableChildCollections(){yield*super._initializableChildCollections(),yield this.sublayerExtensions}async _createLayer(e){return PortalLayerBase.toEsriApiLayer(e)}_applyLayerProperties(e,t){checkArg("layerJson",e).isNotMissing();const i=e.layerType||e.type;return checkArg("layerJson.layerType",i).satisfies((e=>{var t;return!e||e===(null===(t=this.getDefault("layer"))||void 0===t?void 0:t.layerType)}),ERR_LAYER_TYPE_MISMATCH),checkArg("layer",t).isNotMissing().satisfies((e=>this._isSupportedLayer(e)),ERR_LAYER_TYPE_MISMATCH),PortalLayerBase.applyToEsriApiLayer(e,t)}_setLayer(e){if(this._layer=e,e.watch("visible",this._onVisibleChanged.bind(this)),this.layer.watch("minScale",(()=>this.notifyChange("effectiveMinScale"))),this.layer.watch("maxScale",(()=>this.notifyChange("effectiveMaxScale"))),this.layer.watch("title",(()=>this.notifyChange("title"))),this.supportsSublayers)if(this._sublayers)this._setupSublayersHandles();else{const t=e.watch("sublayers",(()=>{this._setupSublayersHandles(),t.remove()}),!0)}this.notifyChange("layer"),this.notifyChange("title"),this.notifyChange("effectiveMinScale"),this.notifyChange("effectiveMaxScale"),this.notifyChange("isEffectivelyVisible")}_setupSublayersHandles(){this._sublayers.on("change",this._onSublayersChange.bind(this)),watchEach(this._sublayers,"visible",this._onSublayersSublayerVisibleChanged.bind(this))}_onVisibleChanged(e){if("inherited"===this.visibilityMode&&this.supportsSublayers&&this._sublayers)for(const t of this._sublayers.toArray())t.visible=e;this.notifyChange("isEffectivelyVisible")}_onSublayersSublayerVisibleChanged(e,t,i,r){e&&"exclusive"===this.visibilityMode&&this._ensureAChildSublayerVisible(r)}_onSublayersChange(e){var t;(null===(t=e.added)||void 0===t?void 0:t.length)&&"exclusive"===this.visibilityMode&&this._ensureAChildSublayerVisible(e.added[e.added.length-1])}_ensureAChildSublayerVisible(e){for(const t of this._sublayers.toArray())t!==e&&(t.visible=!1)}_ensureAtMostOneChildSublayerVisible(){this.layer&&this._sublayers&&this._ensureAChildSublayerVisible(this._sublayers.find((e=>e.visible)))}}class SublayerExtensionCollectionImpl extends SublayerExtensionCollectionBase{constructor(e){super(e,"_sublayers"),this._layerExtension=e}add(e,t){if(checkArg("sublayerX",e).isNotMissing(),!this._layerExtension.supportsSublayers)throw new InvalidOperationError(ERR_ADD_SUBLAYERX_NOT_SUPPORTED);const i=e.sublayer?e.sublayer.layer:void 0;i&&i!==this._layerExtension.layer&&i.sublayers.remove(e.sublayer),super.add(e,t)}}class AllSublayerExtensionCollectionImpl extends ReadOnlyInitializableCollection{constructor(e){super(),this._layerExtension=e}get _collection(){return this._layerExtension.sublayerExtensions.flatten((e=>e.sublayerExtensions))}findById(e){return checkArg("id",e).isNotMissing(),this.find((t=>t.id===e))}findBySublayerId(e){return checkArg("id",e).isNotMissing(),this.find((t=>t.sublayer.id===e))}forSublayer(e){return checkArg("sublayer",e).isNotMissing(),this.findBySublayerId(e.id)}emit(e,t){if("change"===e){const i=new Collection;i.addMany(t.added);const r=i.flatten((e=>e.sublayerExtensions)).toArray(),s=new Collection;s.addMany(t.removed);const a=s.flatten((e=>e.sublayerExtensions)).toArray(),n=new Collection;n.addMany(t.moved);const o=n.flatten((e=>e.sublayerExtensions)).toArray();return super.emit(e,{added:r,removed:a,moved:o,target:this})}return super.emit(e,t)}_itemIsInitialized(e){return super._itemIsInitialized(e)&&!!e.sublayer}}let LayerExtensionLayerListSettings=class extends ExtensionBaseLayerListSettings{get _esriLayer(){return this._extension.layer}get _listModePath(){return"layer.listMode"}get _supportsChildren(){return this._extension.supportsSublayers}};LayerExtensionLayerListSettings=__decorate([serializable],LayerExtensionLayerListSettings);let LayerExtensionSchema=class extends Schema{constructor(e){if(super(),this._layerBindings=new Map,this._layerExtension=e,this._bindSettingsToLayerProperties(),e.layer)this._onLayerResolved(e.layer);else{const t=e.watch("layer",(()=>{this._onLayerResolved(e.layer),t.remove()}),!0)}}_getPropertyBindings(){return{}}_getSetting(e,t){if(this._layerBindings.has(e)){let t=this._layerBindings.get(e);if("string"==typeof t&&(t={property:t}),t.hasOwnProperty("value"))return t.value;if(this._layerExtension.layer)return this._layerExtension.layer[t.property]}return super._getSetting(e,t)}_setSetting(e,t){if(this._layerBindings.has(e)){let i=this._layerBindings.get(e);if("string"==typeof i&&(i={property:i}),i.readonly||i.hasOwnProperty("value"))throw new InvalidOperationError(ERR_SCHEMA_READ_ONLY);if(this._layerExtension.layer)return void(this._layerExtension.layer[i.property]=t)}super._setSetting(e,t)}_bindSettingsToLayerProperties(){const e=this._getPropertyBindings();for(const t of Object.keys(e)){let i=e[t];"string"==typeof i&&(i={property:i}),this._layerBindings.set(t,i),i.hasOwnProperty("value")||this._layerExtension.watch(`layer.${i.property}`,(()=>this.notifyChange(t)),!i.hasOwnProperty("sync")||i.sync)}}_onLayerResolved(e){for(const t of this._layerBindings.keys())this.isModified(t)&&(e[t]=this[t],this.reset(t))}};LayerExtensionSchema=__decorate([serializable],LayerExtensionSchema);export{LayerExtensionSchema};export class ArrayWrappedCollection extends CollectionProxy{constructor(e,t){if(super(),this._layerExtension=e,this._property=t,this._layerProperty=e instanceof LayerExtension?"layer":"sublayer",e[this._layerProperty])this._onLayerResolved(e[this._layerProperty]);else{this._collection=new Collection;const t=e.watch(this._layerProperty,(()=>{const i=e[this._layerProperty];this.length&&(i[this._property]=this.toArray()),this._onLayerResolved(i),t.remove()}),!0)}}add(e,t){const i=this._layerExtension[this._layerProperty];i&&!i[this._property]&&(i[this._property]=[],this._collection=wrapArrayWithCollection(i[this._property])),super.add(e,t)}_onLayerResolved(e){this._collection=wrapArrayWithCollection(e[this._property]||[]),e.watch(this._property,(()=>{this._collection=wrapArrayWithCollection(e[this._property]||[])}),!0)}}export function _assignLayerExtensions(e,t){return compare(e,t,{onNew:(t,i)=>{e.add(t instanceof LayerExtension?t:LayerExtension.create(t),isLayerRef(t)?void 0:i)},onMatch:(t,i,r,s)=>{i instanceof LayerExtension||t.assignProperties(i),r===s||isLayerRef(i)||e.reorder(t,s)},onMissing:t=>{(hasMmapLayer([t])||isGroupLayerExtension(t)&&0===t.layerExtensions.toArray().length)&&e.remove(t)},equals:(e,t)=>t instanceof LayerExtension?t===e:!!LayerExtension._matchesRef(e.layer,t.layer)||e.id===t.id})}function wrapArrayWithCollection(e){const t=new Collection;return Object.defineProperty(t,"_items",{get:()=>e}),Object.defineProperty(t,"length",{get:()=>e.length,set:t=>e.length=t}),t}function getLayerXLogger(){return getLogger("geocortex.api.mapping.LayerExtension")}function isLayerRef(e){var t,i;return e instanceof LayerExtension?!!(null===(t=e._deferredLayerProperties)||void 0===t?void 0:t.$ref):!isLayer(e.layer)&&!!(null===(i=e.layer)||void 0===i?void 0:i.$ref)}