@arcgis/core 5.1.0-next.95 → 5.1.0-next.97

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 (138) hide show
  1. package/Graphic.d.ts +16 -1
  2. package/Graphic.js +1 -1
  3. package/applications/MapViewer/templateUtils.js +1 -1
  4. package/assets/esri/core/workers/RemoteClient.js +1 -1
  5. package/assets/esri/core/workers/chunks/0175098da590a7109539.js +1 -0
  6. package/assets/esri/core/workers/chunks/0e6feed31340cf3c1966.js +1 -0
  7. package/assets/esri/core/workers/chunks/26f28406056ddc0e159c.js +1 -0
  8. package/assets/esri/core/workers/chunks/27d6ad4ca5ab8c9d62cd.js +1 -0
  9. package/assets/esri/core/workers/chunks/{23241e6093e245f9c774.js → 2b00229c238aae70b948.js} +1 -1
  10. package/assets/esri/core/workers/chunks/{6b4c99c7648f37feec00.js → 308e1b0aea941958de44.js} +1 -1
  11. package/assets/esri/core/workers/chunks/34c11e7c8762fe0c19fb.js +1 -0
  12. package/assets/esri/core/workers/chunks/34e026549ba2822b8ebd.js +1 -0
  13. package/assets/esri/core/workers/chunks/4020f95d8131493f799e.js +1 -0
  14. package/assets/esri/core/workers/chunks/40bc7c65b708fcc80fab.js +1 -0
  15. package/assets/esri/core/workers/chunks/{8de61993e114f453579b.js → 40e887e87ae24ace27a5.js} +1 -1
  16. package/assets/esri/core/workers/chunks/4255ad7601c7a7621b71.js +1 -0
  17. package/assets/esri/core/workers/chunks/{5853925d2f7fb550bd2e.js → 44b5e4640fe547285e0c.js} +1 -1
  18. package/assets/esri/core/workers/chunks/58c15c42e6a618386a2f.js +1 -0
  19. package/assets/esri/core/workers/chunks/6d59a9cf533ebc590f70.js +1 -0
  20. package/assets/esri/core/workers/chunks/{0f527961805cd45c14e2.js → 708bd77e6d723e3f0aa8.js} +1 -1
  21. package/assets/esri/core/workers/chunks/7485d59d60d61737d662.js +1 -0
  22. package/assets/esri/core/workers/chunks/7dc9ff66e1eceadbae24.js +1 -0
  23. package/assets/esri/core/workers/chunks/9954928d6430e2bfdb1a.js +1 -0
  24. package/assets/esri/core/workers/chunks/9a29b7f9e6281ee40c37.js +1 -0
  25. package/assets/esri/core/workers/chunks/9f4a9b193485f88d4461.js +1 -0
  26. package/assets/esri/core/workers/chunks/a001e7e8a39f27284d87.js +1 -0
  27. package/assets/esri/core/workers/chunks/a93a058678c8c8996d54.js +1 -0
  28. package/assets/esri/core/workers/chunks/acb8cff06142f828fb78.js +1 -0
  29. package/assets/esri/core/workers/chunks/{bf73232057ebc1ecc0ad.js → b06cc59068d32baaaa87.js} +1 -1
  30. package/assets/esri/core/workers/chunks/b63cbf6c2c9ec1b02b9a.js +1 -0
  31. package/assets/esri/core/workers/chunks/b891d95b7858665cd6c1.js +1 -0
  32. package/assets/esri/core/workers/chunks/bfb417d72d0c90e116fe.js +1 -0
  33. package/assets/esri/core/workers/chunks/c0c693c2e0043ecba4a5.js +1 -0
  34. package/assets/esri/core/workers/chunks/{fa869bfe4366f7f49cca.js → e5f8c73349407c25956b.js} +1 -1
  35. package/assets/esri/core/workers/chunks/e8a885b576da3ec145d3.js +1 -0
  36. package/assets/esri/core/workers/chunks/{bd721bbc7afc75d3bddb.js → eda51e512eff551ad858.js} +1 -1
  37. package/assets/esri/core/workers/chunks/f27397379c6c88bc6ef4.js +1 -0
  38. package/assets/esri/core/workers/chunks/f91a2c69a93295cf4de6.js +1 -0
  39. package/assets/esri/core/workers/chunks/fec3fffcf854a6226df4.js +1 -0
  40. package/chunks/GaussianSplat.glsl.js +9 -9
  41. package/chunks/NativeLine.glsl.js +4 -4
  42. package/config.js +1 -1
  43. package/kernel.js +1 -1
  44. package/layers/SceneLayer.d.ts +59 -32
  45. package/layers/graphics/data/QueryEngineCapabilities.js +1 -1
  46. package/layers/graphics/sources/OGCFeatureSource.js +1 -1
  47. package/layers/graphics/sources/geojson/GeoJSONSourceWorker.js +1 -1
  48. package/layers/graphics/sources/support/MemorySourceWorker.js +1 -1
  49. package/layers/graphics/sources/support/ParquetSourceWorker.js +1 -1
  50. package/layers/mixins/ArcGISImageService.js +1 -1
  51. package/layers/raster/formats/Lerc.js +1 -1
  52. package/layers/raster/formats/RasterCodec.js +1 -1
  53. package/layers/scene/ModelFileInfo.d.ts +6 -2
  54. package/layers/scene/ModelInfo.d.ts +16 -7
  55. package/layers/scene/types.d.ts +2 -0
  56. package/layers/support/ExportImageServiceParameters.js +1 -1
  57. package/layers/support/capabilities.js +1 -1
  58. package/layers/support/serviceCapabilitiesUtils.js +1 -1
  59. package/layers/types.d.ts +25 -2
  60. package/package.json +1 -1
  61. package/rest/knowledgeGraph/CreateReplicaResponse.d.ts +5 -4
  62. package/rest/knowledgeGraph/wasmInterface/wasmToReplicaFactories.js +1 -1
  63. package/rest/query/operations/queryUtils.js +1 -1
  64. package/rest/support/OutDistance.js +1 -1
  65. package/rest/support/Query.d.ts +39 -1
  66. package/rest/support/Query.js +1 -1
  67. package/support/revision.js +1 -1
  68. package/tables/AttributeTableTemplate.d.ts +1 -1
  69. package/tables/elements/AttributeTableGroupElement.d.ts +1 -1
  70. package/tables/support/tablesUtils.d.ts +2 -2
  71. package/tables/support/templateUtils.d.ts +136 -0
  72. package/tables/support/templateUtils.js +2 -0
  73. package/tables/support/types.d.ts +90 -0
  74. package/views/2d/engine/webgl/definitions.js +1 -1
  75. package/views/2d/engine/webgl/shaderGraph/techniques/animated/attributes.js +1 -1
  76. package/views/2d/engine/webgl/shaderGraph/techniques/fill/FillMeshWriter.js +1 -1
  77. package/views/2d/engine/webgl/shaderGraph/techniques/labels/LabelMeshWriter.js +1 -1
  78. package/views/2d/engine/webgl/shaderGraph/techniques/line/LineMeshWriter.js +1 -1
  79. package/views/2d/engine/webgl/shaderGraph/techniques/markers/MarkerMeshWriter.js +1 -1
  80. package/views/2d/engine/webgl/shaderGraph/techniques/pieChart/PieChartMeshWriter.js +1 -1
  81. package/views/2d/engine/webgl/shaderGraph/techniques/pieChart/PieChartShader.js +1 -1
  82. package/views/2d/engine/webgl/shaderGraph/techniques/text/TextMeshWriter.js +1 -1
  83. package/views/2d/engine/webgl/shaderGraph/techniques/text/TextShader.js +1 -1
  84. package/views/2d/engine/webgl/shaders/sources/shaderRepository.js +1 -1
  85. package/views/2d/layers/BaseLayerView2D.d.ts +2 -2
  86. package/views/2d/layers/BaseLayerViewGL2D.d.ts +2 -2
  87. package/views/3d/support/QualityProfile.js +1 -1
  88. package/views/3d/support/gaussianSplatting/GaussianSplatDataStore.js +1 -1
  89. package/views/3d/support/gaussianSplatting/GaussianSplatIntersectionHandler.js +1 -1
  90. package/views/3d/support/gaussianSplatting/GaussianTile.js +1 -1
  91. package/views/3d/webgl-engine/core/shaderLibrary/shading/ReadShadowMap.glsl.js +6 -19
  92. package/views/3d/webgl-engine/lib/GaussianSplatRenderNode.js +1 -1
  93. package/views/3d/webgl-engine/shaders/GaussianSplatTechniqueConfiguration.js +1 -1
  94. package/views/3d/webgl-engine/shaders/NativeLine.glsl.js +1 -1
  95. package/widgets/BatchAttributeForm/BatchAttributeFormViewModel.d.ts +40 -1
  96. package/widgets/BatchAttributeForm/BatchAttributeFormViewModel.js +1 -1
  97. package/widgets/BatchAttributeForm/ReactiveGraphic.js +1 -1
  98. package/widgets/BatchAttributeForm/expressions/types.d.ts +1 -0
  99. package/widgets/BatchAttributeForm/inputs/AttachmentElementInput.d.ts +52 -1
  100. package/widgets/BatchAttributeForm/inputs/AttachmentElementInput.js +1 -1
  101. package/widgets/BatchAttributeForm/inputs/BatchFormInputs.d.ts +3 -0
  102. package/widgets/BatchAttributeForm/inputs/BatchFormInputs.js +1 -1
  103. package/widgets/BatchAttributeForm/inputs/EditableInput.d.ts +2 -0
  104. package/widgets/BatchAttributeForm/inputs/EditableInput.js +1 -1
  105. package/widgets/BatchAttributeForm/inputs/support/inputUtils.js +1 -1
  106. package/widgets/BatchAttributeForm/types.d.ts +79 -0
  107. package/widgets/Editor/Edits.js +1 -1
  108. package/widgets/Editor/UpdateFeaturesWorkflow.js +1 -1
  109. package/widgets/FeatureTable/FeatureTableViewModel.js +1 -1
  110. package/assets/esri/core/workers/chunks/0ab1384282afc8731857.js +0 -1
  111. package/assets/esri/core/workers/chunks/130abc6a353e4d79a1b1.js +0 -1
  112. package/assets/esri/core/workers/chunks/1a68a249540fda9083a9.js +0 -1
  113. package/assets/esri/core/workers/chunks/1ae016e4f5e39c34a941.js +0 -1
  114. package/assets/esri/core/workers/chunks/2f6ba01ea8b8f193bea5.js +0 -1
  115. package/assets/esri/core/workers/chunks/31837f2f8859e2cf2efd.js +0 -1
  116. package/assets/esri/core/workers/chunks/41e811138c96d85fd3e8.js +0 -1
  117. package/assets/esri/core/workers/chunks/43b5cfb34b11c4124b51.js +0 -1
  118. package/assets/esri/core/workers/chunks/44b30dfce12824ee1f33.js +0 -1
  119. package/assets/esri/core/workers/chunks/4644e1b00fd4e628219d.js +0 -1
  120. package/assets/esri/core/workers/chunks/5648379d1ed4ca02eedd.js +0 -1
  121. package/assets/esri/core/workers/chunks/6666cd3bf1a3d175dc8c.js +0 -1
  122. package/assets/esri/core/workers/chunks/7536f0683e488159d8bd.js +0 -1
  123. package/assets/esri/core/workers/chunks/8bfe4841c83eb3abfbe8.js +0 -1
  124. package/assets/esri/core/workers/chunks/a12fd6a445f42326642f.js +0 -1
  125. package/assets/esri/core/workers/chunks/a8e2fbbfbdf1c3203d5e.js +0 -1
  126. package/assets/esri/core/workers/chunks/a94674826e5893c9d197.js +0 -1
  127. package/assets/esri/core/workers/chunks/b2504657d3ef8769005e.js +0 -1
  128. package/assets/esri/core/workers/chunks/b90db0829da3f96e4a19.js +0 -1
  129. package/assets/esri/core/workers/chunks/bd9dae2d5ec199f8e9ba.js +0 -1
  130. package/assets/esri/core/workers/chunks/be19d4a6fb9b1c923127.js +0 -1
  131. package/assets/esri/core/workers/chunks/c2589e5e0e0f81a378c2.js +0 -1
  132. package/assets/esri/core/workers/chunks/c33f1f722499a5c6fc11.js +0 -1
  133. package/assets/esri/core/workers/chunks/e03713dee3205c96d53f.js +0 -1
  134. package/assets/esri/core/workers/chunks/ead6e4d0a515c0913bee.js +0 -1
  135. package/assets/esri/core/workers/chunks/f95e3333a65a0c09fd1e.js +0 -1
  136. package/assets/esri/core/workers/chunks/ffb8fa77297578afef7c.js +0 -1
  137. package/tables/types.d.ts +0 -18
  138. package/widgets/FeatureTable/support/templateUtils.js +0 -2
@@ -81,7 +81,7 @@ export interface SceneLayerProperties extends LayerProperties, APIKeyMixinProper
81
81
  *
82
82
  * > [!WARNING]
83
83
  * >
84
- * > The `relative-to-scene` mode does not affect 3D Object [SceneLayers](https://developers.arcgis.com/javascript/latest/references/core/layers/SceneLayer/).
84
+ * > The `relative-to-scene` mode does not affect 3D object [SceneLayers](https://developers.arcgis.com/javascript/latest/references/core/layers/SceneLayer/).
85
85
  * > [SceneLayers](https://developers.arcgis.com/javascript/latest/references/core/layers/SceneLayer/) with [Point](https://developers.arcgis.com/javascript/latest/references/core/geometry/Point/) geometries support all the elevation modes
86
86
  * > listed in the [ElevationInfo](https://developers.arcgis.com/javascript/latest/references/core/symbols/support/ElevationInfo/).
87
87
  * > [ElevationInfo.featureExpressionInfo](https://developers.arcgis.com/javascript/latest/references/core/symbols/support/ElevationInfo/#featureExpressionInfo) is not supported when the elevation info is
@@ -339,8 +339,7 @@ export interface SceneLayerEvents extends EditBusLayerEvents, LayerEvents {}
339
339
  * ## Overview
340
340
  *
341
341
  * The SceneLayer is a layer type designed for on-demand streaming and displaying large
342
- * amounts of data in a [SceneView](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/). SceneLayers support two geometry types:
343
- * [Point](https://developers.arcgis.com/javascript/latest/references/core/geometry/Point/) and 3D Objects (e.g. Buildings).
342
+ * amounts of data in a [SceneView](https://developers.arcgis.com/javascript/latest/references/core/views/SceneView/). SceneLayers support point and 3D object features, such as buildings.
344
343
  *
345
344
  * [![san-francisco-buildings](https://developers.arcgis.com/javascript/latest/assets/references/core/layers/scenelayer-buildings.avif)](https://tiles.arcgis.com/tiles/z2tnIkrLQ2BRzr6P/arcgis/rest/services/SanFrancisco_Bldgs/SceneServer)
346
345
  *
@@ -353,8 +352,8 @@ export interface SceneLayerEvents extends EditBusLayerEvents, LayerEvents {}
353
352
  * ## Publishing a SceneLayer
354
353
  *
355
354
  * The SceneLayer displays data coming from a
356
- * [Scene Service](https://enterprise.arcgis.com/en/server/latest/publish-services/windows/scene-services.htm).
357
- * Scene Services can hold large volumes of features in an open format that is suitable for web streaming.
355
+ * [Scene service](https://enterprise.arcgis.com/en/server/latest/publish-services/windows/scene-services.htm).
356
+ * Scene services can hold large volumes of features in an open format that is suitable for web streaming.
358
357
  * The SceneLayer loads these features progressively, starting from coarse representations and refines them to
359
358
  * higher detail as necessary for close-up views.
360
359
  *
@@ -400,7 +399,7 @@ export interface SceneLayerEvents extends EditBusLayerEvents, LayerEvents {}
400
399
  * <span id="data-visualization"></span>
401
400
  * ## Data Visualization
402
401
  *
403
- * Just like other layers, SceneLayers can be visualized using renderers. 3D Objects in a SceneLayer can be styled
402
+ * Just like other layers, SceneLayers can be visualized using renderers. 3D object features in a SceneLayer can be styled
404
403
  * using [MeshSymbol3D](https://developers.arcgis.com/javascript/latest/references/core/symbols/MeshSymbol3D/) with a [FillSymbol3DLayer](https://developers.arcgis.com/javascript/latest/references/core/symbols/FillSymbol3DLayer/).
405
404
  *
406
405
  * ```js
@@ -428,7 +427,7 @@ export interface SceneLayerEvents extends EditBusLayerEvents, LayerEvents {}
428
427
  * feature along a continuous white to blue color ramp. White features represent buildings that are farther away from
429
428
  * a public transport station and deep blue features represent buildings that are very close to one
430
429
  * (less than 1 minute walking time). Buildings with values between the low and high values are assigned intermediate
431
- * colors. To improve the perception of shapes of 3D Object SceneLayers, they can also be visualized with
430
+ * colors. To improve the perception of shapes of 3D object scene layers, they can also be visualized with
432
431
  * [edges](https://developers.arcgis.com/javascript/latest/references/core/symbols/edges/Edges3D/). See this
433
432
  * [sample](https://developers.arcgis.com/javascript/latest/sample-code/layers-scenelayer-edges/) to explore this example further, or read the
434
433
  * [visualization overview](https://developers.arcgis.com/javascript/latest/visualization-overview/) to learn more about data visualization techniques.
@@ -473,7 +472,7 @@ export interface SceneLayerEvents extends EditBusLayerEvents, LayerEvents {}
473
472
  * <span id="popups"></span>
474
473
  * ## Popups
475
474
  *
476
- * Point and 3D Object SceneLayers can have customized popup content using the
475
+ * Point and 3D object scene layers can have customized popup content using the
477
476
  * [popupTemplate](https://developers.arcgis.com/javascript/latest/references/core/layers/SceneLayer/#popupTemplate) property. A SceneLayer with associated feature layer
478
477
  * will query the associated feature layer for attributes. For a SceneLayer with cached attributes only, attributes come from the cache.
479
478
  * Arcade expressions for `expressionInfo` in a [popupTemplate](https://developers.arcgis.com/javascript/latest/references/core/layers/SceneLayer/#popupTemplate) are also supported.
@@ -481,7 +480,7 @@ export interface SceneLayerEvents extends EditBusLayerEvents, LayerEvents {}
481
480
  * ![custom-popups](https://developers.arcgis.com/javascript/latest/assets/images/guide/scene-layer/custom-popups.avif)
482
481
  *
483
482
  * <span id="querying"></span>
484
- * ## Querying
483
+ * ## Query SceneLayer data
485
484
  *
486
485
  * The SceneLayer and the [SceneLayerView](https://developers.arcgis.com/javascript/latest/references/core/views/layers/SceneLayerView/) both support queries, but act differently.
487
486
  *
@@ -499,7 +498,7 @@ export interface SceneLayerEvents extends EditBusLayerEvents, LayerEvents {}
499
498
  * to inspect which fields are available on the client.
500
499
  * On a [SceneLayerView](https://developers.arcgis.com/javascript/latest/references/core/views/layers/SceneLayerView/) spatial queries are possible by setting the
501
500
  * [Query.geometry](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#geometry) and the [Query.spatialRelationship](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#spatialRelationship)
502
- * of the query. Note that for 3D Object SceneLayers these spatial relationships are evaluated based on the
501
+ * of the query. Note that for 3D object scene layers these spatial relationships are evaluated based on the
503
502
  * [Extent](https://developers.arcgis.com/javascript/latest/references/core/geometry/Extent/) and not the footprint of the feature.
504
503
  * The queries on the [SceneLayerView](https://developers.arcgis.com/javascript/latest/references/core/views/layers/SceneLayerView/) return results for features that are currently loaded in the view.
505
504
  *
@@ -529,16 +528,34 @@ export interface SceneLayerEvents extends EditBusLayerEvents, LayerEvents {}
529
528
  *
530
529
  * </details>
531
530
  *
531
+ * <span id="get-models"></span>
532
+ * ## Get feature source and derived models
533
+ *
534
+ * 3D object scene layer features can have multiple associated models. This can include a source model and one or more
535
+ * derived models generated from it by the service for specific uses, such as a `.glb` model prepared for web display.
536
+ * Use [queryModel()](https://developers.arcgis.com/javascript/latest/references/core/layers/SceneLayer/#queryModel) to retrieve a model for a feature, or
537
+ * [queryModels()](https://developers.arcgis.com/javascript/latest/references/core/layers/SceneLayer/#queryModels) to retrieve model metadata for multiple features. Requestable model formats
538
+ * are listed in `capabilities.data.queryFormats`.
539
+ *
532
540
  * <span id="get-geometry-extent"></span>
533
- * ## Get geometry/extent of SceneLayers
541
+ * ## Get feature geometry
542
+ *
543
+ * For 3D object scene layers, feature geometry is a displayable [Mesh](https://developers.arcgis.com/javascript/latest/references/core/geometry/Mesh/) derived from the
544
+ * feature's model and used to render the feature in the scene.
545
+ * Retrieve it with [queryFeatures()](https://developers.arcgis.com/javascript/latest/references/core/layers/SceneLayer/#queryFeatures) by setting [Query.returnGeometry](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#returnGeometry)
546
+ * to `true` when `capabilities.query.supportsReturnMesh` is `true`.
547
+ *
548
+ * Point scene layers return [Point](https://developers.arcgis.com/javascript/latest/references/core/geometry/Point/) geometry when setting [Query.returnGeometry](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#returnGeometry)
549
+ * to `true` on any of the query methods.
550
+ *
551
+ * <span id="get-extent"></span>
552
+ * ## Get feature extent
534
553
  *
535
- * 3D Object SceneLayers do not return the raw geometry as this is a binary format. To obtain spatial information you can query the 2D extent or 3D extent of features in a SceneLayer.
536
- * The 2D extent can be retrieved for all features (even the ones that are not loaded yet) with [queryExtent()](https://developers.arcgis.com/javascript/latest/references/core/layers/SceneLayer/#queryExtent) method on the SceneLayer.
537
- * This method only succeeds if the layer has an associated feature layer.
538
- * The 3D extent can only be queried for the features that are already loaded, by using the [SceneLayerView.queryExtent()](https://developers.arcgis.com/javascript/latest/references/core/views/layers/SceneLayerView/#queryExtent) method on the
539
- * [SceneLayerView](https://developers.arcgis.com/javascript/latest/references/core/views/layers/SceneLayerView/).
554
+ * The 2D extent can be retrieved for all features (even the ones that are not loaded yet) with the
555
+ * [queryExtent()](https://developers.arcgis.com/javascript/latest/references/core/layers/SceneLayer/#queryExtent) method on the SceneLayer. This method only succeeds if the layer has an
556
+ * associated feature layer. The 3D extent can only be queried for the features that are already loaded, by using the
557
+ * [SceneLayerView.queryExtent()](https://developers.arcgis.com/javascript/latest/references/core/views/layers/SceneLayerView/#queryExtent) method on the [SceneLayerView](https://developers.arcgis.com/javascript/latest/references/core/views/layers/SceneLayerView/).
540
558
  *
541
- * Point SceneLayers return geometry when setting [Query.returnGeometry](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#returnGeometry) to `true` on any of the query methods.
542
559
  * Additionally, the 2D extent of multiple points can be retrieved using [queryExtent()](https://developers.arcgis.com/javascript/latest/references/core/layers/SceneLayer/#queryExtent) on the SceneLayer.
543
560
  * It is not possible to get the extent for a SceneLayer with cached attributes only.
544
561
  *
@@ -692,7 +709,7 @@ export default class SceneLayer extends SceneLayerSuperclass {
692
709
  *
693
710
  * > [!WARNING]
694
711
  * >
695
- * > The `relative-to-scene` mode does not affect 3D Object [SceneLayers](https://developers.arcgis.com/javascript/latest/references/core/layers/SceneLayer/).
712
+ * > The `relative-to-scene` mode does not affect 3D object [SceneLayers](https://developers.arcgis.com/javascript/latest/references/core/layers/SceneLayer/).
696
713
  * > [SceneLayers](https://developers.arcgis.com/javascript/latest/references/core/layers/SceneLayer/) with [Point](https://developers.arcgis.com/javascript/latest/references/core/geometry/Point/) geometries support all the elevation modes
697
714
  * > listed in the [ElevationInfo](https://developers.arcgis.com/javascript/latest/references/core/symbols/support/ElevationInfo/).
698
715
  * > [ElevationInfo.featureExpressionInfo](https://developers.arcgis.com/javascript/latest/references/core/symbols/support/ElevationInfo/#featureExpressionInfo) is not supported when the elevation info is
@@ -1313,33 +1330,43 @@ export default class SceneLayer extends SceneLayerSuperclass {
1313
1330
  */
1314
1331
  queryFeatures(query?: QueryProperties | null | undefined, options?: AbortOptions): Promise<FeatureSet>;
1315
1332
  /**
1316
- * Queries a single model for the feature identified by object ID. The format of the returned model can be specified
1317
- * in the options. If the format is not specified, then this will return the original source model of the feature.
1318
- * Known possible formats include `dae`, `dwg`, `fbx`, `glb`, `glt`, `ifc`, `obj`, `shapebuffer`, `shapebufferg`,
1319
- * `usd`, `usda`, `usdc` and `usdz`. The formats supported by the service are available in
1320
- * [capabilities](https://developers.arcgis.com/javascript/latest/references/core/layers/SceneLayer/#capabilities).
1333
+ * Queries a single model for the feature identified by object ID. This method is available for 3D object scene layers
1334
+ * that have an associated feature layer with 3D object support.
1321
1335
  *
1322
- * If you are only interested in querying all model formats for one or more features, use
1323
- * [queryModels()](https://developers.arcgis.com/javascript/latest/references/core/layers/SceneLayer/#queryModels) instead.
1336
+ * If the format is not specified, this method returns the source model of the feature when one is available. If a
1337
+ * format is specified, the method returns the matching source or derived model for that feature. Known possible
1338
+ * formats include `dae`, `dwg`, `fbx`, `glb`, `glt`, `ifc`, `obj`, `shapebuffer`, `shapebufferg`, `usd`, `usda`,
1339
+ * `usdc` and `usdz`. The formats supported by the service are listed in `capabilities.data.queryFormats` on the
1340
+ * layer's [capabilities](https://developers.arcgis.com/javascript/latest/references/core/layers/SceneLayer/#capabilities).
1341
+ *
1342
+ * Use this method when you need one model for one feature. To query all model formats for one or more features, use
1343
+ * [queryModels()](https://developers.arcgis.com/javascript/latest/references/core/layers/SceneLayer/#queryModels). To retrieve displayable [Mesh](https://developers.arcgis.com/javascript/latest/references/core/geometry/Mesh/) geometry instead, use
1344
+ * [queryFeatures()](https://developers.arcgis.com/javascript/latest/references/core/layers/SceneLayer/#queryFeatures) with [Query.returnGeometry](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#returnGeometry) set to `true`.
1324
1345
  *
1325
1346
  * @param objectId - Object ID of the feature whose model should be queried.
1326
1347
  * @param options - Optional model query options.
1327
- * @returns Resolves to a single model or `undefined` when no matching model is available.
1348
+ * @returns Resolves to a single model or `undefined` when no matching source or format-specific model is available.
1328
1349
  * @since 5.1
1329
1350
  * @see layers/SceneLayer#queryModels
1330
1351
  */
1331
1352
  queryModel(objectId: ObjectId, options?: QueryModelOptions): Promise<ModelInfo | undefined>;
1332
1353
  /**
1333
- * Queries all model metadata for features matching the given query. A feature may have multiple models associated
1334
- * with it. A typical case is that a feature has a source 3D model (for example a .ifc model) and a derived .glb
1335
- * model for display.
1354
+ * Queries model metadata for features matching the given query. This method is available for 3D object scene layers
1355
+ * that have an associated feature layer with 3D object support.
1356
+ *
1357
+ * A feature may have multiple models associated with it. For example, a feature can have a source model in one
1358
+ * format and one or more derived models, such as a `.glb` model for display in web browsers.
1359
+ *
1360
+ * This method returns metadata only. Use [ModelFileInfo.arrayBuffer()](https://developers.arcgis.com/javascript/latest/references/core/layers/scene/ModelFileInfo/#arrayBuffer) to download file content
1361
+ * on demand. To retrieve displayable [Mesh](https://developers.arcgis.com/javascript/latest/references/core/geometry/Mesh/) geometry instead, use
1362
+ * [queryFeatures()](https://developers.arcgis.com/javascript/latest/references/core/layers/SceneLayer/#queryFeatures) with [Query.returnGeometry](https://developers.arcgis.com/javascript/latest/references/core/rest/support/Query/#returnGeometry) set to `true`.
1336
1363
  *
1337
1364
  * If you are only interested in querying a single model format for a feature, use
1338
1365
  * [queryModel()](https://developers.arcgis.com/javascript/latest/references/core/layers/SceneLayer/#queryModel) instead.
1339
1366
  *
1340
- * @param query - Specifies the query parameters.
1341
- * @param options - An object with the following properties.
1342
- * @returns Resolves to a map keyed by object ID containing model metadata for each feature.
1367
+ * @param query - Specifies the query parameters used to select features.
1368
+ * @param options - Optional abort options.
1369
+ * @returns Resolves to a map keyed by object ID containing model metadata for each matching feature.
1343
1370
  * @since 5.1
1344
1371
  * @see layers/SceneLayer#queryModel
1345
1372
  */
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
2
- const t={supportsStatistics:!0,supportsPercentileStatistics:!0,supportsSpatialAggregationStatistics:!0,supportedSpatialAggregationStatistics:{envelope:!0,centroid:!0,convexHull:!0},supportsAggregateIds:!0,supportsCentroid:!0,supportsCentroidOnDegeneratedQuantizedGeometry:!0,supportsCacheHint:!0,supportsCurrentUser:!1,supportsDegeneratedQuantizedGeometry:!1,supportsDistance:!0,supportsDistinct:!0,supportsExtent:!0,supportsGeometryProperties:!1,supportsHavingClause:!0,supportsOrderBy:!0,supportsPagination:!0,supportsPaginationOnAggregatedQueries:!1,supportsQuantization:!0,supportsQuantizationEditMode:!1,supportsQueryGeometry:!0,supportsResultType:!0,supportsReturnMesh:!1,supportsReturnExceededLimitGeometries:!1,supportsSqlExpression:!0,supportsMaxRecordCountFactor:!1,supportsStandardizedQueriesOnly:!0,supportsTopFeaturesQuery:!1,supportsQueryByAnonymous:!0,supportsQueryByOthers:!0,supportsHistoricMoment:!1,supportsFormatPBF:!1,supportsFormatPBFWithCurves:!1,supportsDisjointSpatialRelationship:!0,supportsDefaultSpatialReference:!1,supportsFullTextSearch:!1,supportsCompactGeometry:!1,maxRecordCountFactor:void 0,maxRecordCount:void 0,maxUniqueIDCount:void 0,relativeTimeBinWindow:0,standardMaxRecordCount:void 0,standardMaxRecordCountNoGeometry:void 0,tileMaxRecordCount:void 0,supportsTrueCurve:!1},s={supportsDate:!0,supportsFixedInterval:!0,supportsAutoInterval:!0,supportsFixedBoundaries:!0,supportsStackBy:!0,supportsSplitBy:!0,supportsSnapToData:!1,supportsReturnFullIntervalBin:!1,supportsFirstDayOfWeek:!1,supportsNormalization:!0,supportedStatistics:{count:!0,sum:!0,avg:!0,var:!0,stddev:!0,min:!0,max:!0,percentileContinuous:!0,percentileDiscrete:!0,envelope:!0,centroid:!0,convexHull:!0},supportedNormalizationTypes:{field:!0,log:!0,naturalLog:!0,percentOfTotal:!0,squareRoot:!0}};export{s as queryBinsCapabilities,t as queryCapabilities};
2
+ const t={supportsStatistics:!0,supportsPercentileStatistics:!0,supportsSpatialAggregationStatistics:!0,supportedSpatialAggregationStatistics:{envelope:!0,centroid:!0,convexHull:!0},supportsStatisticsAggregatedIds:!0,supportsCentroid:!0,supportsCentroidOnDegeneratedQuantizedGeometry:!0,supportsCacheHint:!0,supportsCurrentUser:!1,supportsDegeneratedQuantizedGeometry:!1,supportsDistance:!0,supportsOutDistance:!0,supportsDistinct:!0,supportsExtent:!0,supportsGeometryProperties:!1,supportsHavingClause:!0,supportsOrderBy:!0,supportsPagination:!0,supportsPaginationOnAggregatedQueries:!1,supportsQuantization:!0,supportsQuantizationEditMode:!1,supportsQueryGeometry:!0,supportsResultType:!0,supportsReturnMesh:!1,supportsReturnExceededLimitGeometries:!1,supportsSqlExpression:!0,supportsMaxRecordCountFactor:!1,supportsStandardizedQueriesOnly:!0,supportsTopFeaturesQuery:!1,supportsQueryByAnonymous:!0,supportsQueryByOthers:!0,supportsHistoricMoment:!1,supportsFormatPBF:!1,supportsFormatPBFWithCurves:!1,supportsDisjointSpatialRelationship:!0,supportsDefaultSpatialReference:!1,supportsFullTextSearch:!1,supportsCompactGeometry:!1,maxRecordCountFactor:void 0,maxRecordCount:void 0,maxUniqueIDCount:void 0,relativeTimeBinWindow:0,standardMaxRecordCount:void 0,standardMaxRecordCountNoGeometry:void 0,tileMaxRecordCount:void 0,supportsTrueCurve:!1},s={supportsDate:!0,supportsFixedInterval:!0,supportsAutoInterval:!0,supportsFixedBoundaries:!0,supportsStackBy:!0,supportsSplitBy:!0,supportsSnapToData:!1,supportsReturnFullIntervalBin:!1,supportsFirstDayOfWeek:!1,supportsNormalization:!0,supportedStatistics:{count:!0,sum:!0,avg:!0,var:!0,stddev:!0,min:!0,max:!0,percentileContinuous:!0,percentileDiscrete:!0,envelope:!0,centroid:!0,convexHull:!0},supportedNormalizationTypes:{field:!0,log:!0,naturalLog:!0,percentOfTotal:!0,squareRoot:!0}};export{s as queryBinsCapabilities,t as queryCapabilities};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
2
- import{__decorate as e}from"tslib";import t from"../../../core/Error.js";import{Loadable as s}from"../../../core/Loadable.js";import{escapeRegExpString as r}from"../../../core/string.js";import{property as o,subclass as p}from"../../../core/accessorSupport/decorators.js";import i from"../../../geometry/SpatialReference.js";import{typeKebabDictionary as u}from"../../../geometry/support/typeUtils.js";import{queryFeatureSetJSON as a,crsDefault as n,getSpatialReferenceWkid as c,getServerLandingPage as l,getServerConformance as d,getServerCollectionsPage as m,getServerOpenApi as y,getCollectionDefinition as f,crsPrefix as g}from"../../ogc/ogcFeatureUtils.js";import{zeroQueryBins as h}from"../../support/capabilities.js";import S from"../../../rest/support/FeatureSet.js";let C=class extends s{constructor(){super(...arguments),this.featureDefinition=null,this.type="ogc-feature"}load(e){return this.addResolvingPromise(this._loadOGCServices(this.layer,e)),this.when()}getSource(){const{featureDefinition:{collection:e,layerDefinition:t,spatialReference:s,supportedCrs:r},layer:{apiKey:o,customParameters:p,effectiveMaxRecordCount:i}}=this;return{type:"ogc-source",collection:e,layerDefinition:t,maxRecordCount:i,queryParameters:{apiKey:o,customParameters:p},spatialReference:s,supportedCrs:r}}queryExtent(e,t={}){return null}queryFeatureCount(e,t={}){return null}queryFeatures(e,t={}){return this.queryFeaturesJSON(e,t).then(e=>S.fromJSON(e))}queryFeaturesJSON(e,t={}){const s=this.getSource();return this.load(t).then(()=>a(s,e,t))}queryObjectIds(e,t={}){return null}serviceSupportsSpatialReference(e){const{isWebMercator:t,isWGS84:s,latestWkid:r,wkid:o}=e,{supportedCrs:p}=this.featureDefinition;return s||t||!!o&&!!p[o]||!!r&&!!p[r]}_conformsToType(e,t){const s=new RegExp(`^${r(t)}$`,"i");return e.conformsTo.some(e=>s.test(e))??!1}_getCapabilities(e,t){return{analytics:{supportsCacheHint:!1},attachment:null,data:{isVersioned:!1,isBranchVersioned:!1,supportedCurveTypes:[],supportsAttachment:!1,supportsM:!1,supportsTrueCurve:!1,supportsZ:e},metadata:{supportsAdvancedFieldProperties:!1},operations:{supportsCalculate:!1,supportsTruncate:!1,supportsValidateSql:!1,supportsAdd:!1,supportsDelete:!1,supportsEditing:!1,supportsChangeTracking:!1,supportsQuery:!1,supportsQueryBins:!1,supportsQueryPivot:!1,supportsQueryAnalytics:!1,supportsQueryAttachments:!1,supportsQueryTopFeatures:!1,supportsResizeAttachments:!1,supportsSync:!1,supportsUpdate:!1,supportsExceedsLimitStatistics:!1,supportsAsyncConvert3D:!1},query:{maxRecordCount:t,maxRecordCountFactor:void 0,maxUniqueIDCount:void 0,relativeTimeBinWindow:void 0,standardMaxRecordCount:void 0,standardMaxRecordCountNoGeometry:void 0,supportsAggregateIds:!1,supportsCacheHint:!1,supportsCentroid:!1,supportsCentroidOnDegeneratedQuantizedGeometry:!1,supportsCurrentUser:!1,supportsDegeneratedQuantizedGeometry:!1,supportsDisjointSpatialRelationship:!1,supportsDistance:!1,supportsDistinct:!1,supportsExtent:!1,supportsFormatPBF:!1,supportsFormatPBFWithCurves:!1,supportsGeometryProperties:!1,supportsHavingClause:!1,supportsHistoricMoment:!1,supportsMaxRecordCountFactor:!1,supportsOrderBy:!1,supportsPagination:!1,supportsPaginationOnAggregatedQueries:!1,supportsPercentileStatistics:!1,supportsQuantization:!1,supportsQuantizationEditMode:!1,supportsQueryByAnonymous:!1,supportsQueryByOthers:!1,supportsQueryGeometry:!1,supportsResultType:!1,supportsReturnMesh:!1,supportsReturnExceededLimitGeometries:!1,supportsStandardizedQueriesOnly:!1,supportsTopFeaturesQuery:!1,supportsStatistics:!1,supportsSpatialAggregationStatistics:!1,supportedSpatialAggregationStatistics:{envelope:!1,centroid:!1,convexHull:!1},supportsDefaultSpatialReference:!1,supportsFullTextSearch:!1,supportsCompactGeometry:!1,supportsSqlExpression:!1,supportsTrueCurve:!1,tileMaxRecordCount:void 0},queryRelated:{supportsCount:!1,supportsOrderBy:!1,supportsPagination:!1,supportsCacheHint:!1},queryTopFeatures:{supportsCacheHint:!1},queryAttributeBins:h,editing:{supportsDeleteByAnonymous:!1,supportsDeleteByOthers:!1,supportsGeometryUpdate:!1,supportsGlobalId:!1,supportsReturnServiceEditsInSourceSpatialReference:!1,supportsRollbackOnFailure:!1,supportsTrueCurveUpdate:!1,supportsTrueCurveUpdateByTrueCurveClientsOnly:!0,supportsUpdateByAnonymous:!1,supportsUpdateByOthers:!1,supportsUploadWithItemId:!1,supportsUpdateWithoutM:!1,supportsAsyncApplyEdits:!1,zDefault:void 0}}}_getMaxRecordCount(e){const t=e?.components?.parameters;return t?.limit?.schema?.maximum??t?.limitFeatures?.schema?.maximum}_getStorageSpatialReference(e){const t=e.storageCrs??n,s=c(t);return null==s?i.WGS84:new i({wkid:s})}_getSupportedSpatialReferences(e,t){const s="#/crs",r=e.crs??[n],o=r.includes(s)?r.filter(e=>e!==s).concat(t.crs??[]):r,p=/^http:\/\/www\.opengis.net\/def\/crs\/epsg\/.*\/3785$/i;return o.filter(e=>!p.test(e))}async _loadOGCServices(e,s){const o=null!=s?s.signal:null,{apiKey:p,collectionId:i,customParameters:a,fields:n,geometryType:h,hasZ:S,objectIdField:C,timeInfo:v,url:R}=e,w={fields:n?.map(e=>e.toJSON()),geometryType:u.toJSON(h),hasZ:S,objectIdField:C,timeInfo:v?.toJSON()},x={apiKey:p,customParameters:a,signal:o},T=await l(R,x),[F,O]=await Promise.all([d(T,x),m(T,x)]);if(!this._conformsToType(F,"http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/geojson"))throw new t("ogc-feature-layer:no-geojson-support","Server does not support geojson");const D=O.collections.find(({id:e})=>e===i);if(!D)throw new t("ogc-feature-layer:collection-not-found","Server does not contain the named collection");const A=this._conformsToType(F,"http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/oas30")?await y(T,x):null,j=await f(D,w,x),P=this._getMaxRecordCount(A),Q=this._getCapabilities(j.hasZ,P),B=this._getStorageSpatialReference(D).toJSON(),q=this._getSupportedSpatialReferences(D,O),G=new RegExp(`^${r(g)}`,"i"),b={};for(const t of q){const e=c(t);null!=e&&(b[e]||(b[e]=t.replace(G,"")))}this.featureDefinition={capabilities:Q,collection:D,layerDefinition:j,spatialReference:B,supportedCrs:b}}};e([o()],C.prototype,"featureDefinition",void 0),e([o({constructOnly:!0})],C.prototype,"layer",void 0),e([o()],C.prototype,"type",void 0),C=e([p("esri.layers.graphics.sources.OGCFeatureSource")],C);export{C as OGCFeatureSource};
2
+ import{__decorate as e}from"tslib";import t from"../../../core/Error.js";import{Loadable as s}from"../../../core/Loadable.js";import{escapeRegExpString as r}from"../../../core/string.js";import{property as o,subclass as p}from"../../../core/accessorSupport/decorators.js";import i from"../../../geometry/SpatialReference.js";import{typeKebabDictionary as u}from"../../../geometry/support/typeUtils.js";import{queryFeatureSetJSON as a,crsDefault as n,getSpatialReferenceWkid as c,getServerLandingPage as l,getServerConformance as d,getServerCollectionsPage as m,getServerOpenApi as y,getCollectionDefinition as f,crsPrefix as g}from"../../ogc/ogcFeatureUtils.js";import{zeroQueryBins as h}from"../../support/capabilities.js";import S from"../../../rest/support/FeatureSet.js";let C=class extends s{constructor(){super(...arguments),this.featureDefinition=null,this.type="ogc-feature"}load(e){return this.addResolvingPromise(this._loadOGCServices(this.layer,e)),this.when()}getSource(){const{featureDefinition:{collection:e,layerDefinition:t,spatialReference:s,supportedCrs:r},layer:{apiKey:o,customParameters:p,effectiveMaxRecordCount:i}}=this;return{type:"ogc-source",collection:e,layerDefinition:t,maxRecordCount:i,queryParameters:{apiKey:o,customParameters:p},spatialReference:s,supportedCrs:r}}queryExtent(e,t={}){return null}queryFeatureCount(e,t={}){return null}queryFeatures(e,t={}){return this.queryFeaturesJSON(e,t).then(e=>S.fromJSON(e))}queryFeaturesJSON(e,t={}){const s=this.getSource();return this.load(t).then(()=>a(s,e,t))}queryObjectIds(e,t={}){return null}serviceSupportsSpatialReference(e){const{isWebMercator:t,isWGS84:s,latestWkid:r,wkid:o}=e,{supportedCrs:p}=this.featureDefinition;return s||t||!!o&&!!p[o]||!!r&&!!p[r]}_conformsToType(e,t){const s=new RegExp(`^${r(t)}$`,"i");return e.conformsTo.some(e=>s.test(e))??!1}_getCapabilities(e,t){return{analytics:{supportsCacheHint:!1},attachment:null,data:{isVersioned:!1,isBranchVersioned:!1,supportedCurveTypes:[],supportsAttachment:!1,supportsM:!1,supportsTrueCurve:!1,supportsZ:e},metadata:{supportsAdvancedFieldProperties:!1},operations:{supportsCalculate:!1,supportsTruncate:!1,supportsValidateSql:!1,supportsAdd:!1,supportsDelete:!1,supportsEditing:!1,supportsChangeTracking:!1,supportsQuery:!1,supportsQueryBins:!1,supportsQueryPivot:!1,supportsQueryAnalytics:!1,supportsQueryAttachments:!1,supportsQueryTopFeatures:!1,supportsResizeAttachments:!1,supportsSync:!1,supportsUpdate:!1,supportsExceedsLimitStatistics:!1,supportsAsyncConvert3D:!1},query:{maxRecordCount:t,maxRecordCountFactor:void 0,maxUniqueIDCount:void 0,relativeTimeBinWindow:void 0,standardMaxRecordCount:void 0,standardMaxRecordCountNoGeometry:void 0,supportsStatisticsAggregatedIds:!1,supportsCacheHint:!1,supportsCentroid:!1,supportsCentroidOnDegeneratedQuantizedGeometry:!1,supportsCurrentUser:!1,supportsDegeneratedQuantizedGeometry:!1,supportsDisjointSpatialRelationship:!1,supportsDistance:!1,supportsOutDistance:!1,supportsDistinct:!1,supportsExtent:!1,supportsFormatPBF:!1,supportsFormatPBFWithCurves:!1,supportsGeometryProperties:!1,supportsHavingClause:!1,supportsHistoricMoment:!1,supportsMaxRecordCountFactor:!1,supportsOrderBy:!1,supportsPagination:!1,supportsPaginationOnAggregatedQueries:!1,supportsPercentileStatistics:!1,supportsQuantization:!1,supportsQuantizationEditMode:!1,supportsQueryByAnonymous:!1,supportsQueryByOthers:!1,supportsQueryGeometry:!1,supportsResultType:!1,supportsReturnMesh:!1,supportsReturnExceededLimitGeometries:!1,supportsStandardizedQueriesOnly:!1,supportsTopFeaturesQuery:!1,supportsStatistics:!1,supportsSpatialAggregationStatistics:!1,supportedSpatialAggregationStatistics:{envelope:!1,centroid:!1,convexHull:!1},supportsDefaultSpatialReference:!1,supportsFullTextSearch:!1,supportsCompactGeometry:!1,supportsSqlExpression:!1,supportsTrueCurve:!1,tileMaxRecordCount:void 0},queryRelated:{supportsCount:!1,supportsOrderBy:!1,supportsPagination:!1,supportsCacheHint:!1},queryTopFeatures:{supportsCacheHint:!1},queryAttributeBins:h,editing:{supportsDeleteByAnonymous:!1,supportsDeleteByOthers:!1,supportsGeometryUpdate:!1,supportsGlobalId:!1,supportsReturnServiceEditsInSourceSpatialReference:!1,supportsRollbackOnFailure:!1,supportsTrueCurveUpdate:!1,supportsTrueCurveUpdateByTrueCurveClientsOnly:!0,supportsUpdateByAnonymous:!1,supportsUpdateByOthers:!1,supportsUploadWithItemId:!1,supportsUpdateWithoutM:!1,supportsAsyncApplyEdits:!1,zDefault:void 0}}}_getMaxRecordCount(e){const t=e?.components?.parameters;return t?.limit?.schema?.maximum??t?.limitFeatures?.schema?.maximum}_getStorageSpatialReference(e){const t=e.storageCrs??n,s=c(t);return null==s?i.WGS84:new i({wkid:s})}_getSupportedSpatialReferences(e,t){const s="#/crs",r=e.crs??[n],o=r.includes(s)?r.filter(e=>e!==s).concat(t.crs??[]):r,p=/^http:\/\/www\.opengis.net\/def\/crs\/epsg\/.*\/3785$/i;return o.filter(e=>!p.test(e))}async _loadOGCServices(e,s){const o=null!=s?s.signal:null,{apiKey:p,collectionId:i,customParameters:a,fields:n,geometryType:h,hasZ:S,objectIdField:C,timeInfo:v,url:R}=e,w={fields:n?.map(e=>e.toJSON()),geometryType:u.toJSON(h),hasZ:S,objectIdField:C,timeInfo:v?.toJSON()},x={apiKey:p,customParameters:a,signal:o},O=await l(R,x),[T,F]=await Promise.all([d(O,x),m(O,x)]);if(!this._conformsToType(T,"http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/geojson"))throw new t("ogc-feature-layer:no-geojson-support","Server does not support geojson");const D=F.collections.find(({id:e})=>e===i);if(!D)throw new t("ogc-feature-layer:collection-not-found","Server does not contain the named collection");const A=this._conformsToType(T,"http://www.opengis.net/spec/ogcapi-features-1/1.0/conf/oas30")?await y(O,x):null,j=await f(D,w,x),P=this._getMaxRecordCount(A),Q=this._getCapabilities(j.hasZ,P),B=this._getStorageSpatialReference(D).toJSON(),q=this._getSupportedSpatialReferences(D,F),G=new RegExp(`^${r(g)}`,"i"),b={};for(const t of q){const e=c(t);null!=e&&(b[e]||(b[e]=t.replace(G,"")))}this.featureDefinition={capabilities:Q,collection:D,layerDefinition:j,spatialReference:B,supportedCrs:b}}};e([o()],C.prototype,"featureDefinition",void 0),e([o({constructOnly:!0})],C.prototype,"layer",void 0),e([o()],C.prototype,"type",void 0),C=e([p("esri.layers.graphics.sources.OGCFeatureSource")],C);export{C as OGCFeatureSource};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
2
- import e from"../../../../request.js";import{createTask as t}from"../../../../core/asyncUtils.js";import s from"../../../../core/Error.js";import i from"../../../../core/Logger.js";import{isAbortError as r}from"../../../../core/promiseUtils.js";import{getJsonType as n}from"../../../../geometry/support/jsonTypeUtils.js";import{wgs84 as a,equals as o}from"../../../../geometry/support/spatialReferenceUtils.js";import{convertFromGeometry as u,convertToGeometry as l,convertFromFeatures as d,convertToFeature as p,convertFromFeature as c}from"../../featureConversionUtils.js";import y from"../../data/FeatureStore.js";import{checkProjectionSupport as f,project as m}from"../../data/projectionSupport.js";import{QueryEngine as h}from"../../data/QueryEngine.js";import{inferLayerProperties as g,createOptimizedFeatures as _,validateGeoJSON as I}from"./geojson.js";import{createDefaultTemplate as E,createDefaultAttributesFunction as F,createDrawingInfo as j}from"../support/clientSideDefaults.js";import{queryBinsCapabilities as T,loadGeometryEngineForSimplify as b,mixAttributes as w,createFeatureEditSuccessResult as q,createFeatureEditErrorResult as x,simplify as S}from"../support/sourceUtils.js";import R from"../../../support/FieldsIndex.js";import{kebabDict as C}from"../../../support/fieldType.js";import{getFieldDefaultValue as A,getFieldDefaultLength as O}from"../../../support/fieldUtils.js";import{utc as Q}from"../../../../time/constants.js";const k={hasAttachments:!1,capabilities:"query, editing, create, delete, update",useStandardizedQueries:!0,supportsCoordinatesQuantization:!0,supportsReturningQueryGeometry:!0,advancedQueryCapabilities:{supportsQueryAttachments:!1,supportsQueryAttachmentsCountOnly:!1,supportsQueryAttachmentOrderByFields:!1,supportsQueryAttachmentWithTypeWildcard:!1,supportsQueryBins:!0,supportsQueryPivot:!1,supportsQueryWithCacheHint:!0,supportsQueryWithDistance:!0,supportsQueryWithResultType:!0,supportsSpatialAggregationStatistics:!0,supportedSpatialAggregationStatistics:["EnvelopeAggregate","CentroidAggregate","ConvexHullAggregate"],supportsStatistics:!0,supportsPercentileStatistics:!0,supportsReturningGeometryCentroid:!0,supportsDistinct:!0,supportsReturningQueryExtent:!0,supportsReturningGeometryProperties:!1,supportsHavingClause:!0,supportsOrderBy:!0,supportsPagination:!0,supportsSqlExpression:!0,supportsDisjointSpatialRel:!0},queryBinsCapabilities:T};class D{constructor(){this._featureIdInfo=null,this._queryEngine=null,this._snapshotFeatures=async e=>{const t=await this._fetch(e);return this._createFeatures(t)}}destroy(){this._queryEngine?.destroy(),this._queryEngine=this._createDefaultAttributes=null}async load(e,t={}){this._loadOptions={url:e.url,customParameters:e.customParameters};const i=[],[r]=await Promise.all([e.url?this._fetch(t?.signal):null,this._checkProjection(e.spatialReference)]),n=g(r,{geometryType:e.geometryType}),o=e.fields||n.fields||[],u=null!=e.hasZ?e.hasZ:n.hasZ,l=n.geometryType;let d=e.objectIdField||n.objectIdFieldName||"__OBJECTID";const p=e.spatialReference||a;let c=e.timeInfo;o===n.fields&&n.unknownFields.length>0&&i.push({name:"geojson-layer:unknown-field-types",message:"Some fields types couldn't be inferred from the features and were dropped",details:{unknownFields:n.unknownFields}});const f=new R(o);let m=f.get(d);m?("esriFieldTypeString"!==m.type&&(m.type="esriFieldTypeOID"),m.editable=!1,m.nullable=!1,d=m.name):(m={alias:d,name:d,type:"string"===n.objectIdFieldType?"esriFieldTypeString":"esriFieldTypeOID",editable:!1,nullable:!1},o.unshift(m));const _={};for(const a of o){if(null==a.name&&(a.name=a.alias),null==a.alias&&(a.alias=a.name),!a.name)throw new s("geojson-layer:invalid-field-name","field name is missing",{field:a});if(!C.jsonValues.includes(a.type))throw new s("geojson-layer:invalid-field-type",`invalid type for field "${a.name}"`,{field:a});if(a.name!==m.name){const e=A(a);void 0!==e&&(_[a.name]=e)}null==a.length&&(a.length=O(a))}if(c){if(c.startTimeField){const e=f.get(c.startTimeField);e?(c.startTimeField=e.name,e.type="esriFieldTypeDate"):c.startTimeField=null}if(c.endTimeField){const e=f.get(c.endTimeField);e?(c.endTimeField=e.name,e.type="esriFieldTypeDate"):c.endTimeField=null}if(c.trackIdField){const e=f.get(c.trackIdField);e?c.trackIdField=e.name:(c.trackIdField=null,i.push({name:"geojson-layer:invalid-timeInfo-trackIdField",message:"trackIdField is missing",details:{timeInfo:c}}))}c.startTimeField||c.endTimeField||(i.push({name:"geojson-layer:invalid-timeInfo",message:"startTimeField and endTimeField are missing",details:{timeInfo:c}}),c=null)}const I=l?j(l):void 0,T=f.dateFields.length?{timeZoneIANA:Q}:null,b={warnings:i,featureErrors:[],layerDefinition:{...k,drawingInfo:I??void 0,templates:E(_),extent:void 0,geometryType:l,objectIdField:d,fields:o,hasZ:!!u,timeInfo:c,dateFieldsTimeReference:T}};this._featureIdInfo={type:"object-id",fieldName:d},this._queryEngine=new h({fieldsIndex:R.fromLayerJSON({fields:o,timeInfo:c,dateFieldsTimeReference:T}),geometryType:l,hasM:!1,hasZ:u,featureIdInfo:this._featureIdInfo,spatialReference:p,timeInfo:c,featureStore:new y({geometryType:l,hasM:!1,hasZ:u})});const w=this._queryEngine.fieldsIndex.requiredFields.indexOf(m);w>-1&&this._queryEngine.fieldsIndex.requiredFields.splice(w,1),this._createDefaultAttributes=F(_,d);const q=this._createFeatures(r);this._objectIdGenerator=this._createObjectIdGenerator(this._queryEngine,q);const x=this._normalizeFeatures(q,b.featureErrors);this._queryEngine.featureStore.addMany(x);const{fullExtent:S,timeExtent:D}=await this._queryEngine.fetchRecomputedExtents();if(b.layerDefinition.extent=S,D){const{start:e,end:t}=D;b.layerDefinition.timeInfo.timeExtent=[e,t]}return b}async applyEdits(e){const{spatialReference:t,geometryType:s}=this._queryEngine;return await Promise.all([b(t,s),f(e.adds,t),f(e.updates,t)]),await this._waitSnapshotComplete(),this._applyEdits(e)}async queryFeatures(e={},t={}){return await this._waitSnapshotComplete(),this._queryEngine.executeQuery(e,t.signal)}async queryFeatureCount(e={},t={}){return await this._waitSnapshotComplete(),this._queryEngine.executeQueryForCount(e,t.signal)}async queryObjectIds(e={},t={}){return await this._waitSnapshotComplete(),this._queryEngine.executeQueryForIds(e,t.signal)}async queryExtent(e={},t={}){return await this._waitSnapshotComplete(),this._queryEngine.executeQueryForExtent(e,t.signal)}async querySnapping(e,t={}){return await this._waitSnapshotComplete(),await this._queryEngine.executeQueryForSnapping(e,t.signal)}async queryAttributeBins(e,t={}){return await this._waitSnapshotComplete(),this._queryEngine.executeAttributeBinsQuery(e,t.signal)}async refresh(e){this._loadOptions.customParameters=e,this._snapshotTask?.abort(),this._snapshotTask=t(this._snapshotFeatures),this._snapshotTask.promise.then(e=>{this._queryEngine.featureStore.clear(),this._objectIdGenerator=this._createObjectIdGenerator(this._queryEngine,e);const t=this._normalizeFeatures(e);t&&this._queryEngine.featureStore.addMany(t)},e=>{this._queryEngine.featureStore.clear(),r(e)||i.getLogger("esri.layers.GeoJSONLayer").error(new s("geojson-layer:refresh","An error occurred during refresh",{error:e}))}),await this._waitSnapshotComplete();const{fullExtent:n,timeExtent:a}=await this._queryEngine.fetchRecomputedExtents();return{extent:n,timeExtent:a}}_createFeatures(e){if(null==e)return[];const{geometryType:t,hasZ:s}=this._queryEngine,i=this._featureIdInfo.fieldName,r=_(e,{geometryType:t,hasZ:s,objectIdField:i});if(!o(this._queryEngine.spatialReference,a))for(const n of r)null!=n.geometry&&(n.geometry=u(m(l(n.geometry,this._queryEngine.geometryType,this._queryEngine.hasZ,!1),a,this._queryEngine.spatialReference)));return r}async _waitSnapshotComplete(){if(this._snapshotTask&&!this._snapshotTask.finished){try{await this._snapshotTask.promise}catch{}return this._waitSnapshotComplete()}}async _fetch(t){const{url:s,customParameters:i}=this._loadOptions,r=(await e(s??"",{responseType:"json",query:{...i},signal:t})).data;return I(r),r}_normalizeFeatures(e,t){const{fieldsIndex:s}=this._queryEngine,i=[],r=this._featureIdInfo.fieldName;for(const n of e){const e=this._createDefaultAttributes(),a=w(s,e,n.attributes,!0);a?t?.push(a):(this._assignObjectId(e,n.attributes,!0),n.attributes=e,n.objectId=e[r],i.push(n))}return i}async _applyEdits(e){const{adds:t,updates:s,deletes:i}=e,r={addResults:[],deleteResults:[],updateResults:[],uidToObjectId:{}};if(t?.length&&this._applyAddEdits(r,t),s?.length&&this._applyUpdateEdits(r,s),i?.length){for(const e of i)r.deleteResults.push(q(e));this._queryEngine.featureStore.removeManyById(i)}const{fullExtent:n,timeExtent:a}=await this._queryEngine.fetchRecomputedExtents();return{extent:n,timeExtent:a,featureEditResults:r}}_applyAddEdits(e,t){const{addResults:s}=e,{geometryType:i,hasM:r,hasZ:a,spatialReference:o,featureStore:u,fieldsIndex:l}=this._queryEngine,p=this._featureIdInfo.fieldName,c=[];for(const d of t){if(d.geometry&&i!==n(d.geometry)){s.push(x("Incorrect geometry type."));continue}const t=this._createDefaultAttributes(),r=w(l,t,d.attributes);if(r)s.push(r);else{if(this._assignObjectId(t,d.attributes),d.attributes=t,null!=d.uid){const t=d.attributes[p];e.uidToObjectId[d.uid]=t}if(null!=d.geometry){const e=d.geometry.spatialReference??o;d.geometry=m(S(d.geometry,e),e,o)}c.push(d),s.push(q(d.attributes[p]))}}u.addMany(d([],c,i,a,r,this._featureIdInfo))}_applyUpdateEdits({updateResults:e},t){const{geometryType:s,hasM:i,hasZ:r,spatialReference:a,featureStore:o,fieldsIndex:u}=this._queryEngine,l=this._featureIdInfo.fieldName;for(const d of t){const{attributes:t,geometry:y}=d,f=t?.[l];if(null==f){e.push(x(`Identifier field ${l} missing`));continue}if(!o.has(f)){e.push(x(`Feature with object id ${f} missing`));continue}const h=p(o.getFeature(f),s,r,i);if(null!=y){if(s!==n(y)){e.push(x("Incorrect geometry type."));continue}const t=y.spatialReference??a;h.geometry=m(S(y,t),t,a)}if(t){const s=w(u,h.attributes,t);if(s){e.push(s);continue}}o.add(c(h,s,r,i,this._featureIdInfo)),e.push(q(f))}}_createObjectIdGenerator(e,t){const s=this._featureIdInfo.fieldName,i=e.fieldsIndex.get(s);if("esriFieldTypeString"===i.type)return()=>i.name+"-"+Date.now().toString(16);let r=Number.NEGATIVE_INFINITY;for(const n of t)n.objectId&&(r=Math.max(r,n.objectId));return r=Math.max(0,r)+1,()=>r++}_assignObjectId(e,t,s=!1){const i=this._featureIdInfo.fieldName;e[i]=s&&i in t?t[i]:this._objectIdGenerator()}async _checkProjection(e){try{await f(a,e)}catch{throw new s("geojson-layer","Projection not supported")}}}export{D as default};
2
+ import e from"../../../../request.js";import{createTask as t}from"../../../../core/asyncUtils.js";import s from"../../../../core/Error.js";import i from"../../../../core/Logger.js";import{isAbortError as r}from"../../../../core/promiseUtils.js";import{getJsonType as n}from"../../../../geometry/support/jsonTypeUtils.js";import{wgs84 as a,equals as o}from"../../../../geometry/support/spatialReferenceUtils.js";import{convertFromGeometry as u,convertToGeometry as l,convertFromFeatures as d,convertToFeature as p,convertFromFeature as c}from"../../featureConversionUtils.js";import y from"../../data/FeatureStore.js";import{checkProjectionSupport as f,project as m}from"../../data/projectionSupport.js";import{QueryEngine as h}from"../../data/QueryEngine.js";import{inferLayerProperties as g,createOptimizedFeatures as _,validateGeoJSON as I}from"./geojson.js";import{createDefaultTemplate as E,createDefaultAttributesFunction as F,createDrawingInfo as j}from"../support/clientSideDefaults.js";import{queryBinsCapabilities as T,loadGeometryEngineForSimplify as b,mixAttributes as w,createFeatureEditSuccessResult as q,createFeatureEditErrorResult as x,simplify as S}from"../support/sourceUtils.js";import R from"../../../support/FieldsIndex.js";import{kebabDict as C}from"../../../support/fieldType.js";import{getFieldDefaultValue as A,getFieldDefaultLength as O}from"../../../support/fieldUtils.js";import{utc as Q}from"../../../../time/constants.js";const k={hasAttachments:!1,capabilities:"query, editing, create, delete, update",useStandardizedQueries:!0,supportsCoordinatesQuantization:!0,supportsReturningQueryGeometry:!0,advancedQueryCapabilities:{supportsQueryAttachments:!1,supportsQueryAttachmentsCountOnly:!1,supportsQueryAttachmentOrderByFields:!1,supportsQueryAttachmentWithTypeWildcard:!1,supportsQueryBins:!0,supportsQueryPivot:!1,supportsQueryWithCacheHint:!0,supportsQueryWithDistance:!0,supportsOutDistance:!1,supportsQueryWithResultType:!0,supportsSpatialAggregationStatistics:!0,supportedSpatialAggregationStatistics:["EnvelopeAggregate","CentroidAggregate","ConvexHullAggregate"],supportsStatistics:!0,supportsPercentileStatistics:!0,supportsReturningGeometryCentroid:!0,supportsDistinct:!0,supportsReturningQueryExtent:!0,supportsReturningGeometryProperties:!1,supportsHavingClause:!0,supportsOrderBy:!0,supportsPagination:!0,supportsSqlExpression:!0,supportsDisjointSpatialRel:!0},queryBinsCapabilities:T};class D{constructor(){this._featureIdInfo=null,this._queryEngine=null,this._snapshotFeatures=async e=>{const t=await this._fetch(e);return this._createFeatures(t)}}destroy(){this._queryEngine?.destroy(),this._queryEngine=this._createDefaultAttributes=null}async load(e,t={}){this._loadOptions={url:e.url,customParameters:e.customParameters};const i=[],[r]=await Promise.all([e.url?this._fetch(t?.signal):null,this._checkProjection(e.spatialReference)]),n=g(r,{geometryType:e.geometryType}),o=e.fields||n.fields||[],u=null!=e.hasZ?e.hasZ:n.hasZ,l=n.geometryType;let d=e.objectIdField||n.objectIdFieldName||"__OBJECTID";const p=e.spatialReference||a;let c=e.timeInfo;o===n.fields&&n.unknownFields.length>0&&i.push({name:"geojson-layer:unknown-field-types",message:"Some fields types couldn't be inferred from the features and were dropped",details:{unknownFields:n.unknownFields}});const f=new R(o);let m=f.get(d);m?("esriFieldTypeString"!==m.type&&(m.type="esriFieldTypeOID"),m.editable=!1,m.nullable=!1,d=m.name):(m={alias:d,name:d,type:"string"===n.objectIdFieldType?"esriFieldTypeString":"esriFieldTypeOID",editable:!1,nullable:!1},o.unshift(m));const _={};for(const a of o){if(null==a.name&&(a.name=a.alias),null==a.alias&&(a.alias=a.name),!a.name)throw new s("geojson-layer:invalid-field-name","field name is missing",{field:a});if(!C.jsonValues.includes(a.type))throw new s("geojson-layer:invalid-field-type",`invalid type for field "${a.name}"`,{field:a});if(a.name!==m.name){const e=A(a);void 0!==e&&(_[a.name]=e)}null==a.length&&(a.length=O(a))}if(c){if(c.startTimeField){const e=f.get(c.startTimeField);e?(c.startTimeField=e.name,e.type="esriFieldTypeDate"):c.startTimeField=null}if(c.endTimeField){const e=f.get(c.endTimeField);e?(c.endTimeField=e.name,e.type="esriFieldTypeDate"):c.endTimeField=null}if(c.trackIdField){const e=f.get(c.trackIdField);e?c.trackIdField=e.name:(c.trackIdField=null,i.push({name:"geojson-layer:invalid-timeInfo-trackIdField",message:"trackIdField is missing",details:{timeInfo:c}}))}c.startTimeField||c.endTimeField||(i.push({name:"geojson-layer:invalid-timeInfo",message:"startTimeField and endTimeField are missing",details:{timeInfo:c}}),c=null)}const I=l?j(l):void 0,T=f.dateFields.length?{timeZoneIANA:Q}:null,b={warnings:i,featureErrors:[],layerDefinition:{...k,drawingInfo:I??void 0,templates:E(_),extent:void 0,geometryType:l,objectIdField:d,fields:o,hasZ:!!u,timeInfo:c,dateFieldsTimeReference:T}};this._featureIdInfo={type:"object-id",fieldName:d},this._queryEngine=new h({fieldsIndex:R.fromLayerJSON({fields:o,timeInfo:c,dateFieldsTimeReference:T}),geometryType:l,hasM:!1,hasZ:u,featureIdInfo:this._featureIdInfo,spatialReference:p,timeInfo:c,featureStore:new y({geometryType:l,hasM:!1,hasZ:u})});const w=this._queryEngine.fieldsIndex.requiredFields.indexOf(m);w>-1&&this._queryEngine.fieldsIndex.requiredFields.splice(w,1),this._createDefaultAttributes=F(_,d);const q=this._createFeatures(r);this._objectIdGenerator=this._createObjectIdGenerator(this._queryEngine,q);const x=this._normalizeFeatures(q,b.featureErrors);this._queryEngine.featureStore.addMany(x);const{fullExtent:S,timeExtent:D}=await this._queryEngine.fetchRecomputedExtents();if(b.layerDefinition.extent=S,D){const{start:e,end:t}=D;b.layerDefinition.timeInfo.timeExtent=[e,t]}return b}async applyEdits(e){const{spatialReference:t,geometryType:s}=this._queryEngine;return await Promise.all([b(t,s),f(e.adds,t),f(e.updates,t)]),await this._waitSnapshotComplete(),this._applyEdits(e)}async queryFeatures(e={},t={}){return await this._waitSnapshotComplete(),this._queryEngine.executeQuery(e,t.signal)}async queryFeatureCount(e={},t={}){return await this._waitSnapshotComplete(),this._queryEngine.executeQueryForCount(e,t.signal)}async queryObjectIds(e={},t={}){return await this._waitSnapshotComplete(),this._queryEngine.executeQueryForIds(e,t.signal)}async queryExtent(e={},t={}){return await this._waitSnapshotComplete(),this._queryEngine.executeQueryForExtent(e,t.signal)}async querySnapping(e,t={}){return await this._waitSnapshotComplete(),await this._queryEngine.executeQueryForSnapping(e,t.signal)}async queryAttributeBins(e,t={}){return await this._waitSnapshotComplete(),this._queryEngine.executeAttributeBinsQuery(e,t.signal)}async refresh(e){this._loadOptions.customParameters=e,this._snapshotTask?.abort(),this._snapshotTask=t(this._snapshotFeatures),this._snapshotTask.promise.then(e=>{this._queryEngine.featureStore.clear(),this._objectIdGenerator=this._createObjectIdGenerator(this._queryEngine,e);const t=this._normalizeFeatures(e);t&&this._queryEngine.featureStore.addMany(t)},e=>{this._queryEngine.featureStore.clear(),r(e)||i.getLogger("esri.layers.GeoJSONLayer").error(new s("geojson-layer:refresh","An error occurred during refresh",{error:e}))}),await this._waitSnapshotComplete();const{fullExtent:n,timeExtent:a}=await this._queryEngine.fetchRecomputedExtents();return{extent:n,timeExtent:a}}_createFeatures(e){if(null==e)return[];const{geometryType:t,hasZ:s}=this._queryEngine,i=this._featureIdInfo.fieldName,r=_(e,{geometryType:t,hasZ:s,objectIdField:i});if(!o(this._queryEngine.spatialReference,a))for(const n of r)null!=n.geometry&&(n.geometry=u(m(l(n.geometry,this._queryEngine.geometryType,this._queryEngine.hasZ,!1),a,this._queryEngine.spatialReference)));return r}async _waitSnapshotComplete(){if(this._snapshotTask&&!this._snapshotTask.finished){try{await this._snapshotTask.promise}catch{}return this._waitSnapshotComplete()}}async _fetch(t){const{url:s,customParameters:i}=this._loadOptions,r=(await e(s??"",{responseType:"json",query:{...i},signal:t})).data;return I(r),r}_normalizeFeatures(e,t){const{fieldsIndex:s}=this._queryEngine,i=[],r=this._featureIdInfo.fieldName;for(const n of e){const e=this._createDefaultAttributes(),a=w(s,e,n.attributes,!0);a?t?.push(a):(this._assignObjectId(e,n.attributes,!0),n.attributes=e,n.objectId=e[r],i.push(n))}return i}async _applyEdits(e){const{adds:t,updates:s,deletes:i}=e,r={addResults:[],deleteResults:[],updateResults:[],uidToObjectId:{}};if(t?.length&&this._applyAddEdits(r,t),s?.length&&this._applyUpdateEdits(r,s),i?.length){for(const e of i)r.deleteResults.push(q(e));this._queryEngine.featureStore.removeManyById(i)}const{fullExtent:n,timeExtent:a}=await this._queryEngine.fetchRecomputedExtents();return{extent:n,timeExtent:a,featureEditResults:r}}_applyAddEdits(e,t){const{addResults:s}=e,{geometryType:i,hasM:r,hasZ:a,spatialReference:o,featureStore:u,fieldsIndex:l}=this._queryEngine,p=this._featureIdInfo.fieldName,c=[];for(const d of t){if(d.geometry&&i!==n(d.geometry)){s.push(x("Incorrect geometry type."));continue}const t=this._createDefaultAttributes(),r=w(l,t,d.attributes);if(r)s.push(r);else{if(this._assignObjectId(t,d.attributes),d.attributes=t,null!=d.uid){const t=d.attributes[p];e.uidToObjectId[d.uid]=t}if(null!=d.geometry){const e=d.geometry.spatialReference??o;d.geometry=m(S(d.geometry,e),e,o)}c.push(d),s.push(q(d.attributes[p]))}}u.addMany(d([],c,i,a,r,this._featureIdInfo))}_applyUpdateEdits({updateResults:e},t){const{geometryType:s,hasM:i,hasZ:r,spatialReference:a,featureStore:o,fieldsIndex:u}=this._queryEngine,l=this._featureIdInfo.fieldName;for(const d of t){const{attributes:t,geometry:y}=d,f=t?.[l];if(null==f){e.push(x(`Identifier field ${l} missing`));continue}if(!o.has(f)){e.push(x(`Feature with object id ${f} missing`));continue}const h=p(o.getFeature(f),s,r,i);if(null!=y){if(s!==n(y)){e.push(x("Incorrect geometry type."));continue}const t=y.spatialReference??a;h.geometry=m(S(y,t),t,a)}if(t){const s=w(u,h.attributes,t);if(s){e.push(s);continue}}o.add(c(h,s,r,i,this._featureIdInfo)),e.push(q(f))}}_createObjectIdGenerator(e,t){const s=this._featureIdInfo.fieldName,i=e.fieldsIndex.get(s);if("esriFieldTypeString"===i.type)return()=>i.name+"-"+Date.now().toString(16);let r=Number.NEGATIVE_INFINITY;for(const n of t)n.objectId&&(r=Math.max(r,n.objectId));return r=Math.max(0,r)+1,()=>r++}_assignObjectId(e,t,s=!1){const i=this._featureIdInfo.fieldName;e[i]=s&&i in t?t[i]:this._objectIdGenerator()}async _checkProjection(e){try{await f(a,e)}catch{throw new s("geojson-layer","Projection not supported")}}}export{D as default};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
2
- import e from"../../../../core/Error.js";import{getJsonType as t,isPoint as i}from"../../../../geometry/support/jsonTypeUtils.js";import{wgs84 as s}from"../../../../geometry/support/spatialReferenceUtils.js";import{convertFromFeatures as n,convertToFeature as r,convertFromFeature as a}from"../../featureConversionUtils.js";import{initialObjectId as o,findLastObjectIdFromFeatures as u}from"../../objectIdUtils.js";import l from"../../data/FeatureStore.js";import{checkProjectionSupport as d,project as p}from"../../data/projectionSupport.js";import{QueryEngine as f}from"../../data/QueryEngine.js";import{createDefaultAttributesFunction as c,createDefaultTemplate as y,createDrawingInfo as m}from"./clientSideDefaults.js";import{queryBinsCapabilities as h,loadGeometryEngineForSimplify as g,createFeatureEditErrorResult as I,mixAttributes as b,createFeatureEditSuccessResult as F,simplify as j}from"./sourceUtils.js";import _ from"../../../support/FieldsIndex.js";import{kebabDict as q}from"../../../support/fieldType.js";import{getFieldDefaultLength as E,getFieldDefaultValue as T}from"../../../support/fieldUtils.js";import{utc as x}from"../../../../time/constants.js";const R=s,v={xmin:-180,ymin:-90,xmax:180,ymax:90,spatialReference:s},O={hasAttachments:!1,capabilities:"query, editing, create, delete, update",useStandardizedQueries:!0,supportsCoordinatesQuantization:!0,supportsReturningQueryGeometry:!0,advancedQueryCapabilities:{supportsQueryAttachments:!1,supportsQueryAttachmentsCountOnly:!1,supportsQueryAttachmentOrderByFields:!1,supportsQueryAttachmentWithTypeWildcard:!1,supportsQueryBins:!0,supportsQueryPivot:!1,supportsSpatialAggregationStatistics:!0,supportedSpatialAggregationStatistics:["EnvelopeAggregate","CentroidAggregate","ConvexHullAggregate"],supportsStatistics:!0,supportsPercentileStatistics:!0,supportsReturningGeometryCentroid:!0,supportsQueryWithDistance:!0,supportsDistinct:!0,supportsReturningQueryExtent:!0,supportsReturningGeometryProperties:!1,supportsHavingClause:!0,supportsOrderBy:!0,supportsPagination:!0,supportsQueryWithResultType:!0,supportsSqlExpression:!0,supportsDisjointSpatialRel:!0,supportsQueryWithCacheHint:!0},queryBinsCapabilities:h};function S(e){return i(e)?null!=e.z:!!e.hasZ}function w(e){return i(e)?null!=e.m:!!e.hasM}function D(e,t){let i;const s=[];if("unique-id-composite"===t.type){const n=[];for(const i of t.fieldNames)e.attributes[i]?n.push(e.attributes[i]):s.push(i);i=0===s.length?JSON.stringify(n):null}else i=e.attributes[t.fieldName],i||s.push(t.fieldName);return{objectId:i,missingFields:s}}class Q{constructor(){this._uniqueIdInfo=null,this._queryEngine=null,this._nextObjectId=null}destroy(){this._queryEngine?.destroy(),this._queryEngine=this._createDefaultAttributes=null}async load(t){const i=[],{features:s}=t,n=this._inferLayerProperties(s,t.fields),r=t.fields||[],a=null!=t.hasM?t.hasM:!!n.hasM,p=null!=t.hasZ?t.hasZ:!!n.hasZ,h=!t.spatialReference&&!n.spatialReference,g=h?R:t.spatialReference||n.spatialReference,I=h?v:null,b=t.geometryType||n.geometryType,F=!b,j=t.uniqueIdInfo;let S=t.objectIdField??n.objectIdField,w=t.timeInfo;const D=new _(r);if(!F&&(h&&i.push({name:"feature-layer:spatial-reference-not-found",message:"Spatial reference not provided or found in features. Defaults to WGS84"}),!b))throw new e("feature-layer:missing-property","geometryType not set and couldn't be inferred from the provided features");if(j){const t=new Set(r.map(({name:e})=>e));if(!j.fields.every(e=>t.has(e))){const i=j.fields.filter(e=>!t.has(e));throw new e("feature-layer:missing-property","UniqueIdFields not set and couldn't be found in the provided fields. Fields: "+i+" are mssing.")}S=null}else if(!S)throw new e("feature-layer:missing-property","objectIdField not set and uniqueIdInfo not provided.");if(n.objectIdField&&S!==n.objectIdField&&(i.push({name:"feature-layer:duplicated-oid-field",message:`Provided objectIdField "${S}" doesn't match the field name "${n.objectIdField}", found in the provided fields`}),S=n.objectIdField),S&&!n.objectIdField){const e=D.get(S);e?(S=e.name,e.type="esriFieldTypeOID",e.editable=!1,e.nullable=!1):r.unshift({alias:S,name:S,type:"esriFieldTypeOID",editable:!1,nullable:!1})}for(const o of r){if(null==o.name&&(o.name=o.alias),null==o.alias&&(o.alias=o.name),!o.name)throw new e("feature-layer:invalid-field-name","field name is missing",{field:o});if(o.name===S&&(o.type="esriFieldTypeOID"),!q.jsonValues.includes(o.type))throw new e("feature-layer:invalid-field-type",`invalid type for field "${o.name}"`,{field:o});null==o.length&&(o.length=E(o))}const Q={};for(const e of r)if("esriFieldTypeOID"!==e.type&&"esriFieldTypeGlobalID"!==e.type){const t=T(e);void 0!==t&&(Q[e.name]=t)}if(w){if(w.startTimeField){const e=D.get(w.startTimeField);e?(w.startTimeField=e.name,e.type="esriFieldTypeDate"):w.startTimeField=null}if(w.endTimeField){const e=D.get(w.endTimeField);e?(w.endTimeField=e.name,e.type="esriFieldTypeDate"):w.endTimeField=null}if(w.trackIdField){const e=D.get(w.trackIdField);e?w.trackIdField=e.name:(w.trackIdField=null,i.push({name:"feature-layer:invalid-timeInfo-trackIdField",message:"trackIdField is missing",details:{timeInfo:w}}))}w.startTimeField||w.endTimeField||(i.push({name:"feature-layer:invalid-timeInfo",message:"startTimeField and endTimeField are missing or invalid",details:{timeInfo:w}}),w=null)}const A=D.dateFields.length?{timeZoneIANA:t.dateFieldsTimeZone??x}:null;this._createDefaultAttributes=c(Q,S),this._uniqueIdInfo=t.uniqueIdInfo??void 0;const M={warnings:i,featureErrors:[],layerDefinition:{...O,drawingInfo:m(b),templates:y(Q),extent:I,geometryType:b,objectIdField:S,fields:r,hasZ:p,hasM:a,timeInfo:w,dateFieldsTimeReference:A,uniqueIdInfo:this._uniqueIdInfo??void 0},assignedObjectIds:{}},C=this._uniqueIdInfo?.OIDFieldContainsHashValue?"simple"===this._uniqueIdInfo.type?{type:"unique-id-simple",fieldName:this._uniqueIdInfo.fields[0]}:{type:"unique-id-composite",fieldNames:this._uniqueIdInfo.fields}:{type:"object-id",fieldName:S};if(this._queryEngine=new f({fieldsIndex:_.fromLayerJSON({fields:r,timeInfo:w,dateFieldsTimeReference:A}),geometryType:b,hasM:a,hasZ:p,featureIdInfo:C,spatialReference:g,featureStore:new l({geometryType:b,hasM:a,hasZ:p}),timeInfo:w}),!s?.length)return this._nextObjectId=o,M;if(S){const e=u(S,s);this._nextObjectId=e+1}return await d(s,g),this._loadInitialFeatures(M,s)}async applyEdits(e){const{spatialReference:t,geometryType:i}=this._queryEngine;return await Promise.all([g(t,i),d(e.adds,t),d(e.updates,t)]),this._applyEdits(e)}queryFeatures(e,t={}){return this._queryEngine.executeQuery(e,t.signal)}queryFeatureCount(e,t={}){return this._queryEngine.executeQueryForCount(e,t.signal)}queryObjectIds(e,t={}){return this._queryEngine.executeQueryForIds(e,t.signal)}queryExtent(e,t={}){return this._queryEngine.executeQueryForExtent(e,t.signal)}querySnapping(e,t={}){return this._queryEngine.executeQueryForSnapping(e,t.signal)}queryAttributeBins(e,t={}){return this._queryEngine.executeAttributeBinsQuery(e,t.signal)}_inferLayerProperties(e,i){let s,n,r=null,a=null,o=null;for(const u of e){const e=u.geometry;if(null!=e&&(r||(r=t(e)),a||(a=e.spatialReference),null==s&&(s=S(e)),null==n&&(n=w(e)),r&&a&&null!=s&&null!=n))break}if(i&&i.length){let e=null;i.some(t=>{const i="esriFieldTypeOID"===t.type,s=!t.type&&t.name&&"objectid"===t.name.toLowerCase();return e=t,i||s})&&(o=e.name)}return{geometryType:r,spatialReference:a,objectIdField:o,hasM:n,hasZ:s}}async _loadInitialFeatures(e,i){const{geometryType:s,hasM:r,hasZ:a,spatialReference:o,featureStore:u,fieldsIndex:l,featureIdInfo:d}=this._queryEngine,f=[];for(const n of i){if(null!=n.uid&&(e.assignedObjectIds[n.uid]=-1),n.geometry&&s!==t(n.geometry)){e.featureErrors.push(I("Incorrect geometry type."));continue}const i=this._createDefaultAttributes(),r=b(l,i,n.attributes,!0);r?e.featureErrors.push(r):(this._assignObjectId(i,n.attributes,!0),n.attributes=i,n.uid&&(e.assignedObjectIds[n.uid]=D(n,d).objectId),null!=n.geometry&&(n.geometry=p(n.geometry,n.geometry.spatialReference,o)),f.push(n))}u.addMany(n([],f,s,a,r,d));const{fullExtent:c,timeExtent:y}=await this._queryEngine.fetchRecomputedExtents();if(e.layerDefinition.extent=c,y){const{start:t,end:i}=y;e.layerDefinition.timeInfo.timeExtent=[t,i]}return e}async _applyEdits(e){const{adds:t,updates:i,deletes:s}=e,n={addResults:[],deleteResults:[],updateResults:[],uidToObjectId:{}};if(t?.length&&this._applyAddEdits(n,t),i?.length&&this._applyUpdateEdits(n,i),s?.length){for(const e of s)n.deleteResults.push(F(e));this._queryEngine.featureStore.removeManyById(s)}const{fullExtent:r,timeExtent:a}=await this._queryEngine.fetchRecomputedExtents();return{extent:r,timeExtent:a,featureEditResults:n}}_applyAddEdits(e,i){const{addResults:s,updateResults:r}=e,{geometryType:a,hasM:o,hasZ:u,spatialReference:l,featureStore:d,featureIdInfo:f,fieldsIndex:c}=this._queryEngine,y=[];for(const m of i){if(m.geometry&&a!==t(m.geometry)){s.push(I("Incorrect geometry type."));continue}const i=this._createDefaultAttributes(),h=b(c,i,m.attributes);if(h){s.push(h);continue}this._assignObjectId(i,m.attributes),m.attributes=i;const{objectId:g,missingFields:_}=D(m,f);if(g){if(null!=m.uid&&(e.uidToObjectId[m.uid]=g),null!=m.geometry){const e=m.geometry.spatialReference??l;m.geometry=p(j(m.geometry,e),e,l)}y.push(m);const t=F(g);d.has(g)?r.push(t):s.push(t),d.addMany(n([],y,a,u,o,f))}else s.push(I(`Missing unique id field value for fields: ${_.join()}`))}}_applyUpdateEdits({updateResults:e},i){const{geometryType:s,hasM:n,hasZ:o,spatialReference:u,featureStore:l,fieldsIndex:d,featureIdInfo:f}=this._queryEngine;for(const c of i){const{attributes:i,geometry:y}=c,{objectId:m,missingFields:h}=D(c,f);if(null==m){const t="unique-id-composite"===f.type?h:f.fieldName;e.push(I(`Identifier fields: ${t} missing`));continue}if(!l.has(m)){e.push(I(`Feature with object id ${m} missing`));continue}const g=r(l.getFeature(m),s,o,n);if(null!=y){if(s!==t(y)){e.push(I("Incorrect geometry type."));continue}const i=y.spatialReference??u;g.geometry=p(j(y,i),i,u)}if(i){const t=b(d,g.attributes,i);if(t){e.push(t);continue}}l.add(a(g,s,o,n,f)),e.push(F(m))}}_assignObjectId(e,t,i=!1){if("object-id"===this._queryEngine.featureIdInfo.type){const s=this._queryEngine.featureIdInfo.fieldName;i&&t&&isFinite(t[s])?e[s]=t[s]:e[s]=this._nextObjectId++}}}export{Q as default};
2
+ import e from"../../../../core/Error.js";import{getJsonType as t,isPoint as i}from"../../../../geometry/support/jsonTypeUtils.js";import{wgs84 as s}from"../../../../geometry/support/spatialReferenceUtils.js";import{convertFromFeatures as n,convertToFeature as r,convertFromFeature as a}from"../../featureConversionUtils.js";import{initialObjectId as o,findLastObjectIdFromFeatures as u}from"../../objectIdUtils.js";import l from"../../data/FeatureStore.js";import{checkProjectionSupport as d,project as p}from"../../data/projectionSupport.js";import{QueryEngine as f}from"../../data/QueryEngine.js";import{createDefaultAttributesFunction as c,createDefaultTemplate as y,createDrawingInfo as m}from"./clientSideDefaults.js";import{queryBinsCapabilities as h,loadGeometryEngineForSimplify as g,createFeatureEditErrorResult as I,mixAttributes as b,createFeatureEditSuccessResult as F,simplify as j}from"./sourceUtils.js";import _ from"../../../support/FieldsIndex.js";import{kebabDict as q}from"../../../support/fieldType.js";import{getFieldDefaultLength as E,getFieldDefaultValue as T}from"../../../support/fieldUtils.js";import{utc as x}from"../../../../time/constants.js";const R=s,O={xmin:-180,ymin:-90,xmax:180,ymax:90,spatialReference:s},v={hasAttachments:!1,capabilities:"query, editing, create, delete, update",useStandardizedQueries:!0,supportsCoordinatesQuantization:!0,supportsReturningQueryGeometry:!0,advancedQueryCapabilities:{supportsQueryAttachments:!1,supportsQueryAttachmentsCountOnly:!1,supportsQueryAttachmentOrderByFields:!1,supportsQueryAttachmentWithTypeWildcard:!1,supportsQueryBins:!0,supportsQueryPivot:!1,supportsSpatialAggregationStatistics:!0,supportedSpatialAggregationStatistics:["EnvelopeAggregate","CentroidAggregate","ConvexHullAggregate"],supportsStatistics:!0,supportsPercentileStatistics:!0,supportsReturningGeometryCentroid:!0,supportsQueryWithDistance:!0,supportsOutDistance:!1,supportsDistinct:!0,supportsReturningQueryExtent:!0,supportsReturningGeometryProperties:!1,supportsHavingClause:!0,supportsOrderBy:!0,supportsPagination:!0,supportsQueryWithResultType:!0,supportsSqlExpression:!0,supportsDisjointSpatialRel:!0,supportsQueryWithCacheHint:!0},queryBinsCapabilities:h};function S(e){return i(e)?null!=e.z:!!e.hasZ}function w(e){return i(e)?null!=e.m:!!e.hasM}function D(e,t){let i;const s=[];if("unique-id-composite"===t.type){const n=[];for(const i of t.fieldNames)e.attributes[i]?n.push(e.attributes[i]):s.push(i);i=0===s.length?JSON.stringify(n):null}else i=e.attributes[t.fieldName],i||s.push(t.fieldName);return{objectId:i,missingFields:s}}class Q{constructor(){this._uniqueIdInfo=null,this._queryEngine=null,this._nextObjectId=null}destroy(){this._queryEngine?.destroy(),this._queryEngine=this._createDefaultAttributes=null}async load(t){const i=[],{features:s}=t,n=this._inferLayerProperties(s,t.fields),r=t.fields||[],a=null!=t.hasM?t.hasM:!!n.hasM,p=null!=t.hasZ?t.hasZ:!!n.hasZ,h=!t.spatialReference&&!n.spatialReference,g=h?R:t.spatialReference||n.spatialReference,I=h?O:null,b=t.geometryType||n.geometryType,F=!b,j=t.uniqueIdInfo;let S=t.objectIdField??n.objectIdField,w=t.timeInfo;const D=new _(r);if(!F&&(h&&i.push({name:"feature-layer:spatial-reference-not-found",message:"Spatial reference not provided or found in features. Defaults to WGS84"}),!b))throw new e("feature-layer:missing-property","geometryType not set and couldn't be inferred from the provided features");if(j){const t=new Set(r.map(({name:e})=>e));if(!j.fields.every(e=>t.has(e))){const i=j.fields.filter(e=>!t.has(e));throw new e("feature-layer:missing-property","UniqueIdFields not set and couldn't be found in the provided fields. Fields: "+i+" are mssing.")}S=null}else if(!S)throw new e("feature-layer:missing-property","objectIdField not set and uniqueIdInfo not provided.");if(n.objectIdField&&S!==n.objectIdField&&(i.push({name:"feature-layer:duplicated-oid-field",message:`Provided objectIdField "${S}" doesn't match the field name "${n.objectIdField}", found in the provided fields`}),S=n.objectIdField),S&&!n.objectIdField){const e=D.get(S);e?(S=e.name,e.type="esriFieldTypeOID",e.editable=!1,e.nullable=!1):r.unshift({alias:S,name:S,type:"esriFieldTypeOID",editable:!1,nullable:!1})}for(const o of r){if(null==o.name&&(o.name=o.alias),null==o.alias&&(o.alias=o.name),!o.name)throw new e("feature-layer:invalid-field-name","field name is missing",{field:o});if(o.name===S&&(o.type="esriFieldTypeOID"),!q.jsonValues.includes(o.type))throw new e("feature-layer:invalid-field-type",`invalid type for field "${o.name}"`,{field:o});null==o.length&&(o.length=E(o))}const Q={};for(const e of r)if("esriFieldTypeOID"!==e.type&&"esriFieldTypeGlobalID"!==e.type){const t=T(e);void 0!==t&&(Q[e.name]=t)}if(w){if(w.startTimeField){const e=D.get(w.startTimeField);e?(w.startTimeField=e.name,e.type="esriFieldTypeDate"):w.startTimeField=null}if(w.endTimeField){const e=D.get(w.endTimeField);e?(w.endTimeField=e.name,e.type="esriFieldTypeDate"):w.endTimeField=null}if(w.trackIdField){const e=D.get(w.trackIdField);e?w.trackIdField=e.name:(w.trackIdField=null,i.push({name:"feature-layer:invalid-timeInfo-trackIdField",message:"trackIdField is missing",details:{timeInfo:w}}))}w.startTimeField||w.endTimeField||(i.push({name:"feature-layer:invalid-timeInfo",message:"startTimeField and endTimeField are missing or invalid",details:{timeInfo:w}}),w=null)}const A=D.dateFields.length?{timeZoneIANA:t.dateFieldsTimeZone??x}:null;this._createDefaultAttributes=c(Q,S),this._uniqueIdInfo=t.uniqueIdInfo??void 0;const M={warnings:i,featureErrors:[],layerDefinition:{...v,drawingInfo:m(b),templates:y(Q),extent:I,geometryType:b,objectIdField:S,fields:r,hasZ:p,hasM:a,timeInfo:w,dateFieldsTimeReference:A,uniqueIdInfo:this._uniqueIdInfo??void 0},assignedObjectIds:{}},C=this._uniqueIdInfo?.OIDFieldContainsHashValue?"simple"===this._uniqueIdInfo.type?{type:"unique-id-simple",fieldName:this._uniqueIdInfo.fields[0]}:{type:"unique-id-composite",fieldNames:this._uniqueIdInfo.fields}:{type:"object-id",fieldName:S};if(this._queryEngine=new f({fieldsIndex:_.fromLayerJSON({fields:r,timeInfo:w,dateFieldsTimeReference:A}),geometryType:b,hasM:a,hasZ:p,featureIdInfo:C,spatialReference:g,featureStore:new l({geometryType:b,hasM:a,hasZ:p}),timeInfo:w}),!s?.length)return this._nextObjectId=o,M;if(S){const e=u(S,s);this._nextObjectId=e+1}return await d(s,g),this._loadInitialFeatures(M,s)}async applyEdits(e){const{spatialReference:t,geometryType:i}=this._queryEngine;return await Promise.all([g(t,i),d(e.adds,t),d(e.updates,t)]),this._applyEdits(e)}queryFeatures(e,t={}){return this._queryEngine.executeQuery(e,t.signal)}queryFeatureCount(e,t={}){return this._queryEngine.executeQueryForCount(e,t.signal)}queryObjectIds(e,t={}){return this._queryEngine.executeQueryForIds(e,t.signal)}queryExtent(e,t={}){return this._queryEngine.executeQueryForExtent(e,t.signal)}querySnapping(e,t={}){return this._queryEngine.executeQueryForSnapping(e,t.signal)}queryAttributeBins(e,t={}){return this._queryEngine.executeAttributeBinsQuery(e,t.signal)}_inferLayerProperties(e,i){let s,n,r=null,a=null,o=null;for(const u of e){const e=u.geometry;if(null!=e&&(r||(r=t(e)),a||(a=e.spatialReference),null==s&&(s=S(e)),null==n&&(n=w(e)),r&&a&&null!=s&&null!=n))break}if(i&&i.length){let e=null;i.some(t=>{const i="esriFieldTypeOID"===t.type,s=!t.type&&t.name&&"objectid"===t.name.toLowerCase();return e=t,i||s})&&(o=e.name)}return{geometryType:r,spatialReference:a,objectIdField:o,hasM:n,hasZ:s}}async _loadInitialFeatures(e,i){const{geometryType:s,hasM:r,hasZ:a,spatialReference:o,featureStore:u,fieldsIndex:l,featureIdInfo:d}=this._queryEngine,f=[];for(const n of i){if(null!=n.uid&&(e.assignedObjectIds[n.uid]=-1),n.geometry&&s!==t(n.geometry)){e.featureErrors.push(I("Incorrect geometry type."));continue}const i=this._createDefaultAttributes(),r=b(l,i,n.attributes,!0);r?e.featureErrors.push(r):(this._assignObjectId(i,n.attributes,!0),n.attributes=i,n.uid&&(e.assignedObjectIds[n.uid]=D(n,d).objectId),null!=n.geometry&&(n.geometry=p(n.geometry,n.geometry.spatialReference,o)),f.push(n))}u.addMany(n([],f,s,a,r,d));const{fullExtent:c,timeExtent:y}=await this._queryEngine.fetchRecomputedExtents();if(e.layerDefinition.extent=c,y){const{start:t,end:i}=y;e.layerDefinition.timeInfo.timeExtent=[t,i]}return e}async _applyEdits(e){const{adds:t,updates:i,deletes:s}=e,n={addResults:[],deleteResults:[],updateResults:[],uidToObjectId:{}};if(t?.length&&this._applyAddEdits(n,t),i?.length&&this._applyUpdateEdits(n,i),s?.length){for(const e of s)n.deleteResults.push(F(e));this._queryEngine.featureStore.removeManyById(s)}const{fullExtent:r,timeExtent:a}=await this._queryEngine.fetchRecomputedExtents();return{extent:r,timeExtent:a,featureEditResults:n}}_applyAddEdits(e,i){const{addResults:s,updateResults:r}=e,{geometryType:a,hasM:o,hasZ:u,spatialReference:l,featureStore:d,featureIdInfo:f,fieldsIndex:c}=this._queryEngine,y=[];for(const m of i){if(m.geometry&&a!==t(m.geometry)){s.push(I("Incorrect geometry type."));continue}const i=this._createDefaultAttributes(),h=b(c,i,m.attributes);if(h){s.push(h);continue}this._assignObjectId(i,m.attributes),m.attributes=i;const{objectId:g,missingFields:_}=D(m,f);if(g){if(null!=m.uid&&(e.uidToObjectId[m.uid]=g),null!=m.geometry){const e=m.geometry.spatialReference??l;m.geometry=p(j(m.geometry,e),e,l)}y.push(m);const t=F(g);d.has(g)?r.push(t):s.push(t),d.addMany(n([],y,a,u,o,f))}else s.push(I(`Missing unique id field value for fields: ${_.join()}`))}}_applyUpdateEdits({updateResults:e},i){const{geometryType:s,hasM:n,hasZ:o,spatialReference:u,featureStore:l,fieldsIndex:d,featureIdInfo:f}=this._queryEngine;for(const c of i){const{attributes:i,geometry:y}=c,{objectId:m,missingFields:h}=D(c,f);if(null==m){const t="unique-id-composite"===f.type?h:f.fieldName;e.push(I(`Identifier fields: ${t} missing`));continue}if(!l.has(m)){e.push(I(`Feature with object id ${m} missing`));continue}const g=r(l.getFeature(m),s,o,n);if(null!=y){if(s!==t(y)){e.push(I("Incorrect geometry type."));continue}const i=y.spatialReference??u;g.geometry=p(j(y,i),i,u)}if(i){const t=b(d,g.attributes,i);if(t){e.push(t);continue}}l.add(a(g,s,o,n,f)),e.push(F(m))}}_assignObjectId(e,t,i=!1){if("object-id"===this._queryEngine.featureIdInfo.type){const s=this._queryEngine.featureIdInfo.fieldName;i&&t&&isFinite(t[s])?e[s]=t[s]:e[s]=this._nextObjectId++}}}export{Q as default};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.1/LICENSE.txt */
2
- import{__addDisposableResource as e,__disposeResources as t}from"tslib";import r from"../../../../core/Collection.js";import{toConst as s}from"../../../../core/compilerUtils.js";import i from"../../../../core/Error.js";import has from"../../../../core/has.js";import o from"../../../../core/Logger.js";import{onAbortOrThrow as a,throwIfAborted as n}from"../../../../core/promiseUtils.js";import{QueueProcessor as u}from"../../../../core/QueueProcessor.js";import{parseWhereClause as p}from"../../../../core/sql.js";import l from"../../../../geometry/SpatialReference.js";import{set as c,create as d,expandWithRect as f,expandWithAABB as m,negativeInfinity as y,fromRect as h}from"../../../../geometry/support/aaBoundingBox.js";import{getQueryResultExtent as g,QueryEngine as w}from"../../data/QueryEngine.js";import{QueryEngineResult as _}from"../../data/QueryEngineResult.js";import{normalizeQueryLike as I}from"../../data/queryUtils.js";import{createDrawingInfo as F}from"./clientSideDefaults.js";import{getParquetFileId as x,getParquetRowId as R}from"./parquetIdUtils.js";import S from"../../../support/Field.js";import q from"../../../support/FieldsIndex.js";import{fromParquetGeometryEncodingJSON as C}from"../../../support/parquetEncodingUtils.js";import{completeParquetLayerInfo as E,fromParquetJSONGeometryType as v,toParquetJSONGeometryType as b}from"../../../support/parquetUtils.js";import{loadParquetModule as O}from"../../../../libs/parquet/loadParquetModule.js";import{createParquetFile as Q,readGeoMetadata as T}from"../../../../libs/parquet/parquet.js";import{FeatureStoreQueryAdapter as j}from"../../../../views/2d/layers/features/FeatureStoreQueryAdapter.js";import{FeatureSnapshotSourceChunk as P}from"../../../../views/2d/layers/features/sources/strategies/chunks/FeatureSnapshotSourceChunk.js";import{FeatureSourceChunkStore as M}from"../../../../views/2d/layers/features/sources/strategies/chunks/SourceChunkStore.js";import{FeatureMetadata as A}from"../../../../views/2d/layers/features/support/FeatureMetadata.js";import{FeatureSetReaderParquet as G}from"../../../../views/2d/layers/features/support/FeatureSetReaderParquet.js";const B=new j,D=4,z="__OBJECTID",W=new TextDecoder;class U{constructor(){this._fileInfos=new Map,this._queue=new u({concurrency:D,process:(e,t)=>this._executeQuery(e,t)}),this._indexMap={}}async load(s){const a=s.spatialReference?l.fromJSON(s.spatialReference):void 0;if(a&&!a.isWGS84&&!a.isWebMercator)throw new i("parquet:unsupported-projection","Only WGS84 and Web Mercator are supported");const n=await E({urls:new r(s.urls),fields:s.fields?.map(e=>S.fromJSON(e)),geometryEncoding:s.geometryEncoding?C(s.geometryEncoding):null,geometryType:s.geometryType?v(s.geometryType):null,displayOptimization:s.displayOptimization,spatialReference:a},{customParameters:s.customParameters});if(!n.fields)throw new i("parquet:unsupported","Fields must be defined");let u;if(n.spatialReference&&n.geometryType){if(!n.spatialReference)throw new i("parquet:unsupported","SpatialReference must be defined");if(!n.spatialReference.isGeographic&&!n.spatialReference.isWebMercator)throw new i("parquet:unsupported-projection","Only WGS84 and Web Mercator are supported");n.spatialReference.isGeographic&&!n.spatialReference.isWGS84&&(o.getLogger("parquet:unsupported-projection").warn("Found a geographic projection that is not WGS84. Handling as WGS84.",{spatialReference:n.spatialReference}),n.spatialReference=l.WGS84),u={geometry:n.geometryEncoding?{geometryType:b(n.geometryType),spatialReference:n.spatialReference.toJSON(),encoding:n.geometryEncoding.toJSON()}:null,displayOptimization:n.displayOptimization}}this.setCustomParameters(s.customParameters),this._geometryInfo=u;const p=s.urls;for(const e of p)this._addFile(e);this._capabilities=H(await this.getFileStatistics());const m=this._fileInfos.values().next().value;if(!m)return{layerDefinition:{},capabilities:H(null)};const h=await m,{fields:g}=n;if(null==g)throw new i("parquet-layer:missing-metadata","Unable to create parquet source: cannot infer fields",g);g.push(new S({name:z,type:"oid",alias:z}));for(const e of g){const t=h.file.columnForFieldName(e.name);null!=t&&(this._indexMap[e.name]=t)}const w=new q(g.map(e=>e.toJSON()));this._fieldsIndex=w;const _=b(n.geometryType??"point");if(this._metadata=A.createFeature({fieldsIndex:w.toJSON(),geometryType:_,hasZ:!1,hasM:!1,featureIdInfo:{type:"object-id",fieldName:"rowId"},subtypes:null,subtypeField:null,types:null,typeIdField:null,globalIdField:null,spatialReference:n.spatialReference,outSpatialReference:null,timeInfo:null,timeReferenceUnknownClient:null,dateFieldsTimeZone:null}),this._queryEngineParams={fieldsIndex:this._metadata.fieldsIndex,geometryType:_,featureIdInfo:{type:"object-id",fieldName:"rowId"},hasM:!1,hasZ:!1,spatialReference:n.spatialReference?.toJSON()??{wkid:4326},aggregateAdapter:null,timeInfo:null,definitionExpression:null},n.spatialReference){const e=await this.getFileInfos();this._fullExtent=V(e,n.spatialReference.toJSON())}if(null==this._fullExtent&&"location"===n.geometryEncoding?.type){const{xField:r,yField:s}=n.geometryEncoding,i=c(d(),y);for(const o of await this.getFileInfos())for(const a of o.file.rowGroups()){const o={stack:[],error:void 0,hasError:!1};try{const t=e(o,a.columnDescriptorForAttribute(r),!1),n=e(o,a.columnDescriptorForAttribute(s),!1),u=[t.minValue(),n.minValue(),t.maxValue(),n.maxValue()];f(i,u),a.free()}catch(I){o.error=I,o.hasError=!0}finally{t(o)}}this._fullExtent={xmin:i[0],ymin:i[1],xmax:i[3],ymax:i[4],spatialReference:n.spatialReference?.toJSON()}}return{capabilities:this._capabilities,layerDefinition:{fields:n.fields?.map(e=>e.toJSON()),drawingInfo:F(_),extent:this._fullExtent??void 0,geometryType:_,geometryEncoding:n.geometryEncoding?.toJSON(),displayOptimization:n.displayOptimization}}}destroy(){for(const e of this._fileInfos.values())e.then(e=>e.file.free);this._fileInfos.clear(),this._queue.destroy()}setCustomParameters(e){this._customParameters=e}getIndexMap(){return this._indexMap}async getFileId(e){const t=this._fileInfos.get(e);if(!t)throw new Error(`InternalError: File ${e} does not exist`);return(await t).id}async getFileInfo(e){const t=this._fileInfos.get(e);if(!t)throw new Error(`InternalError: File ${e} does not exist`);return t}async getFileInfos(){return Promise.all(Array.from(this._fileInfos.values()))}async getFileStatistics(){if(!this._fileInfos.size)return null;const e=(await this.getFileInfos()).reduce((e,t)=>e+t.file.byteLength(),0);return{featureCount:await this._getFeatureCount(),byteLength:e}}async updateFiles(e){const t=new Set(e);for(const[r,s]of this._fileInfos.entries())t.has(r)?t.delete(r):(s.then(e=>e.file.free()),this._fileInfos.delete(r));await Promise.all(Array.from(t.values()).map(e=>this._addFile(e)))}async queryFeatures(e,t){this._validateQuery(e),Z(e)||(e.resultRecordCount=e.resultRecordCount?Math.min(e.resultRecordCount,8e3):8e3,e.resultOffset=e.resultOffset??0),(e.outStatistics||e.returnDistinctValues)&&(e.returnGeometry=void 0);return(await this._enqueueQuery(e,t)).createQueryResponse()}async queryFeatureCount(e,t){const r=await I(e,null,this._queryEngineParams.spatialReference);if(this._validateQuery(r),!N(r))return this._getFeatureCount();r.outFields=void 0,r.returnGeometry=void 0;return(await this._enqueueQuery(r,t)).createQueryResponseForCount()}async queryObjectIds(e,t){const r=await I(e,null,this._queryEngineParams.spatialReference);if(this._validateQuery(r),!N(r))return Array.from({length:await this._getFeatureCount()},(e,t)=>t);r.resultRecordCount=r.resultRecordCount?Math.min(r.resultRecordCount,8e3):8e3,r.resultOffset=r.resultOffset??0,r.returnGeometry=void 0,r.outFields=void 0;return(await this._enqueueQuery(r,t)).items.map(e=>e.getObjectId())}async queryExtent(e,t){const r=await I(e,null,this._queryEngineParams.spatialReference);if(this._validateQuery(r),this._fullExtent&&!N(r))return{count:await this._getFeatureCount(),extent:this._fullExtent};const i=s(this._metadata.spatialReference);r.returnGeometry=!0,r.outFields=void 0;const o=c(d(),y),a=d(),n=await this._enqueueQuery(r,t);let u=0;for(const s of n.items)s.getBounds(a)&&(m(o,a),u+=1);return{count:u,extent:g(o,i,r.outSR?s(r.outSR):i,i,!1)}}async queryStream(e,t,r){if(!r.signal)throw new Error("InternalError: AbortSignal must be passed");const s=await this.getFileInfo(e),i=(await O()).Query.new();"tile"===t.type&&(i.setExtent(t.extent),i.setQuantizationTransform(t.transform),i.setScale(t.scale)),i.setOutFields(t.outFields.filter(e=>null!=this._indexMap[e])),i.setOutSpatialReference(t.outSpatialReference.wkid),i.setReturnGeometry(!0),t.where&&await this._setWhereClause(i,s.file,t.where);const o=await s.file.executeQuery(i,r.signal),n=s.streamIdCounter++,u=a(r.signal,e=>{const t=s.streams.get(n);null!=t&&(t.handle.remove(),s.streams.delete(n))});return s.streams.set(n,{stream:o,handle:u}),n}async getStreamNext(e,t,r){if(!r.signal)throw new Error("InternalError: AbortSignal must be passed");const s=await this.getFileInfo(e),i=s.streams.get(t);if(!i)return null;const o=await i.stream.next(r.signal);return null==o&&(i.handle.remove(),s.streams.delete(t)),o?.serialize().buffer}async createPatch(e,t,r,s,i){if(!i.signal)throw new Error("InternalError: AbortSignal must be passed");const o=await this.getFileInfo(e);return(await o.file.createChunkPatch(t,r,s,i.signal)).serialize().buffer}async _getFile(e){for(const t of await this.getFileInfos())if(t.id===e)return t.file;throw new Error(`InternalError: File ${e} does not exist`)}_addFile(e){const t=this._fileInfos.size;this._fileInfos.set(e,this._createFileInfo(e,t))}async _createFileInfo(e,t){return{id:t,file:await Q(e,{geometryInfo:this._geometryInfo,getCustomParameters:()=>this._customParameters}),streamIdCounter:0,streams:new Map}}async _getFeatureCount(){return(await this.getFileInfos()).reduce((e,t)=>e+t.file.numRows(),0)}_validateQuery(e){if(!this._capabilities.query.supportsStatistics&&e.outStatistics)throw new i("parquet:unsupported","Statistics queries are not supported",{query:e});if(!this._capabilities.query.supportsOrderBy&&e.orderByFields?.length)throw new i("parquet:unsupported","Queries using orderBy are not supported",{query:e});if(!this._capabilities.query.supportsDistinct&&e.returnDistinctValues)throw new i("parquet:unsupported","Queries using returnDistinctValues are not supported",{query:e})}async _setWhereClause(e,t,r){const s=this._indexMap,o=this._fieldsIndex,a={getAttribute(e,r){const i=t.readAttribute(e.rowGroup,e.row,s[r]);if(null==i)return null;const a=o.get(r);return"esriFieldTypeString"===a.type||"esriFieldTypeDateOnly"===a.type||"esriFieldTypeTimeOnly"===a.type||"esriFieldTypeTimestampOffset"===a.type?W.decode(i):i}},n=await p(r,this._fieldsIndex);if(!n.isStandardized)throw new i("sql-parse-error","expression is not standardized");const u=(e,t)=>n.testFeatureCompiled({rowGroup:e,row:t},a,null);e.setWhere(r),e.setWhereEvaluator(u),e.setWhereFields(n.fieldNames)}async*_fetchChunks(e,t){const r=await O();for(const s of await this.getFileInfos()){const i=r.Query.new();i.setOutFields(e.fields),i.setReturnGeometry(e.returnGeometry),e.where&&await this._setWhereClause(i,s.file,e.where);const o=await s.file.executeQuery(i),a=[],u=o.next(t);for(let e=0;e<D;e++)a.push(o.next(t));let p=await u;for(;null!=p;){n(t);const e=new G(this._metadata,this._indexMap,p,s.id),r=k([new P(e,null,0,!1)],this._queryEngineParams),i=a.shift();a.push(o.next(t)),yield r,p=await i}}}_enqueueQuery(e,t){return this._queue.push(e,t)}async _executeQuery(e,t){const r=await this._getReadParams(e);if(e.where=void 0,e.objectIds?.length){const r=new Map;for(const t of e.objectIds){const e=x(t),s=R(t);let i=r.get(e);i||(i=[],r.set(e,i)),i.push(s)}const s=[];for(const[i,o]of r.entries()){const r=await this._executeFileIdQuery(e,i,o,t);for(const e of r)s.push(e)}return new _(s,e,{fieldsIndex:this._fieldsIndex,geometryType:this._metadata.geometryType,spatialReference:this._queryEngineParams.spatialReference,hasM:!1,hasZ:!1,featureAdapter:B,featureIdInfo:this._queryEngineParams.featureIdInfo})}let s=e.resultRecordCount??await this._getFeatureCount(),i=e.resultOffset??0;e.resultRecordCount=void 0,e.resultOffset=void 0;const o=[];for await(const a of this._fetchChunks(r,t)){const r=await a.executeQueryForOpaqueFeatures(e,t);if(r.length>i){const t=r.slice(i,Math.min(i+s,r.length));for(const e of t)o.push(e);if(i=0,s-=t.length,0===s)return new _(o,e,{fieldsIndex:this._fieldsIndex,geometryType:this._metadata.geometryType,spatialReference:this._queryEngineParams.spatialReference,hasM:!1,hasZ:!1,featureAdapter:B,featureIdInfo:this._queryEngineParams.featureIdInfo})}else i-=r.length}return new _(o,e,{fieldsIndex:this._fieldsIndex,geometryType:this._metadata.geometryType,spatialReference:this._queryEngineParams.spatialReference,hasM:!1,hasZ:!1,featureAdapter:B,featureIdInfo:this._queryEngineParams.featureIdInfo})}async _executeFileIdQuery(e,t,r,s){const i=await this._getReadParams(e),o=(await O()).Query.new();o.setOutFields(i.fields),o.setReturnGeometry(i.returnGeometry),o.setIds(new Uint32Array(r));const a=await this._getFile(t),n=await a.executeQuery(o,s);let u=await n.next(s),p=0;const l=[];for(;null!=u;){const e=new G(this._metadata,this._indexMap,u,t),r=new P(e,null,p++,!1);l.push(r),u=await n.next(s)}return k(l,this._queryEngineParams).executeQueryForOpaqueFeatures(e,s)}async _getReadParams(e){const t=new Set;if(e.outStatistics)for(const r of e.outStatistics)null!=r.onStatisticField&&t.add(r.onStatisticField);if(e.outFields)for(const r of e.outFields)t.add(r);return{fields:(t.has("*")?this._fieldsIndex.fields.map(e=>e.name):Array.from(t)).filter(e=>null!=this._indexMap[e]),returnGeometry:!!e.returnGeometry||!!e.geometry,where:e.where}}}function N(e){for(const t in e){const r=t;switch(r){case"resultOffset":case"resultRecordCount":case"aggregateIds":case"distance":case"gdbVersion":case"geometry":case"having":case"timeExtent":case"objectIds":case"historicMoment":case"where":return null!=e[r]}}return!1}function k(e,t){const r=new M;for(const s of e)r.insert(s);return new w({...t,featureStore:r})}function J(e){switch(e.length){case 4:return h(d(),e);case 6:return e;default:throw new i("parquet:protocol-violation","Invalid Geoparquet file. BoundingBox size must be 4 or 6.",{bbox:e})}}function V(e,t){const r=c(d(),y);for(const s of e){const e=T(s.file);if(!e)return null;const t=e.columns[e.primary_column];if(!t.bbox)return null;const i=J(t.bbox);m(r,i)}return{xmin:r[0],ymin:r[1],xmax:r[3],ymax:r[4],spatialReference:t}}function H(e){const t=e?.featureCount;let r=!1;return null!=t&&t<has("parquetlayer-full-query-feature-count")&&(r=!0),{analytics:{supportsCacheHint:!1},attachment:null,data:{isVersioned:!1,isBranchVersioned:!1,supportedCurveTypes:[],supportsAttachment:!1,supportsM:!1,supportsTrueCurve:!1,supportsZ:!1},metadata:{supportsAdvancedFieldProperties:!1},operations:{supportsCalculate:!1,supportsTruncate:!1,supportsValidateSql:!1,supportsAdd:!1,supportsDelete:!1,supportsEditing:!1,supportsChangeTracking:!1,supportsQuery:!0,supportsQueryBins:!1,supportsQueryPivot:!1,supportsQueryAnalytics:!1,supportsQueryAttachments:!1,supportsQueryTopFeatures:!1,supportsResizeAttachments:!1,supportsSync:!1,supportsUpdate:!1,supportsExceedsLimitStatistics:!1,supportsAsyncConvert3D:!1},query:{maxRecordCount:8e3,maxRecordCountFactor:void 0,maxUniqueIDCount:void 0,relativeTimeBinWindow:void 0,standardMaxRecordCount:void 0,standardMaxRecordCountNoGeometry:void 0,supportsAggregateIds:!1,supportsCacheHint:!1,supportsCentroid:!0,supportsCentroidOnDegeneratedQuantizedGeometry:!1,supportsCurrentUser:!1,supportsDegeneratedQuantizedGeometry:!1,supportsDisjointSpatialRelationship:!1,supportsDistance:!1,supportsDistinct:r,supportsExtent:!1,supportsFormatPBF:!1,supportsFormatPBFWithCurves:!1,supportsGeometryProperties:!1,supportsHavingClause:!1,supportsHistoricMoment:!1,supportsMaxRecordCountFactor:!1,supportsOrderBy:r,supportsPagination:!0,supportsPaginationOnAggregatedQueries:!1,supportsPercentileStatistics:!1,supportsQuantization:!0,supportsQuantizationEditMode:!1,supportsQueryByAnonymous:!1,supportsQueryByOthers:!1,supportsQueryGeometry:!1,supportsResultType:!1,supportsReturnMesh:!1,supportsReturnExceededLimitGeometries:!1,supportsStandardizedQueriesOnly:!1,supportsTopFeaturesQuery:!1,supportsStatistics:r,supportsSpatialAggregationStatistics:!1,supportedSpatialAggregationStatistics:{envelope:!1,centroid:!1,convexHull:!1},supportsDefaultSpatialReference:!1,supportsFullTextSearch:!1,supportsCompactGeometry:!1,supportsSqlExpression:!1,supportsTrueCurve:!1,tileMaxRecordCount:void 0},queryAttributeBins:{supportsDate:!1,supportsFixedInterval:!1,supportsAutoInterval:!1,supportsFixedBoundaries:!1,supportsStackBy:!1,supportsSplitBy:!1,supportsSnapToData:!1,supportsReturnFullIntervalBin:!1,supportsFirstDayOfWeek:!1,supportsNormalization:!1},queryRelated:{supportsCount:!1,supportsOrderBy:!1,supportsPagination:!1,supportsCacheHint:!1},queryTopFeatures:{supportsCacheHint:!1},editing:{supportsDeleteByAnonymous:!1,supportsDeleteByOthers:!1,supportsGeometryUpdate:!1,supportsGlobalId:!1,supportsTrueCurveUpdate:!1,supportsTrueCurveUpdateByTrueCurveClientsOnly:!0,supportsReturnServiceEditsInSourceSpatialReference:!1,supportsRollbackOnFailure:!1,supportsUpdateByAnonymous:!1,supportsUpdateByOthers:!1,supportsUploadWithItemId:!1,supportsUpdateWithoutM:!1,supportsAsyncApplyEdits:!1,zDefault:void 0}}}function Z(e){return!!(e.objectIds?.length||e.outStatistics||e.orderByFields?.length||e.returnDistinctValues)}export{U as default};
2
+ import{__addDisposableResource as e,__disposeResources as t}from"tslib";import r from"../../../../core/Collection.js";import{toConst as s}from"../../../../core/compilerUtils.js";import i from"../../../../core/Error.js";import has from"../../../../core/has.js";import o from"../../../../core/Logger.js";import{onAbortOrThrow as a,throwIfAborted as n}from"../../../../core/promiseUtils.js";import{QueueProcessor as u}from"../../../../core/QueueProcessor.js";import{parseWhereClause as p}from"../../../../core/sql.js";import l from"../../../../geometry/SpatialReference.js";import{set as c,create as d,expandWithRect as f,expandWithAABB as m,negativeInfinity as y,fromRect as h}from"../../../../geometry/support/aaBoundingBox.js";import{getQueryResultExtent as g,QueryEngine as w}from"../../data/QueryEngine.js";import{QueryEngineResult as _}from"../../data/QueryEngineResult.js";import{normalizeQueryLike as I}from"../../data/queryUtils.js";import{createDrawingInfo as F}from"./clientSideDefaults.js";import{getParquetFileId as x,getParquetRowId as R}from"./parquetIdUtils.js";import S from"../../../support/Field.js";import q from"../../../support/FieldsIndex.js";import{fromParquetGeometryEncodingJSON as C}from"../../../support/parquetEncodingUtils.js";import{completeParquetLayerInfo as E,fromParquetJSONGeometryType as v,toParquetJSONGeometryType as b}from"../../../support/parquetUtils.js";import{loadParquetModule as O}from"../../../../libs/parquet/loadParquetModule.js";import{createParquetFile as Q,readGeoMetadata as T}from"../../../../libs/parquet/parquet.js";import{FeatureStoreQueryAdapter as j}from"../../../../views/2d/layers/features/FeatureStoreQueryAdapter.js";import{FeatureSnapshotSourceChunk as P}from"../../../../views/2d/layers/features/sources/strategies/chunks/FeatureSnapshotSourceChunk.js";import{FeatureSourceChunkStore as M}from"../../../../views/2d/layers/features/sources/strategies/chunks/SourceChunkStore.js";import{FeatureMetadata as A}from"../../../../views/2d/layers/features/support/FeatureMetadata.js";import{FeatureSetReaderParquet as G}from"../../../../views/2d/layers/features/support/FeatureSetReaderParquet.js";const B=new j,D=4,z="__OBJECTID",W=new TextDecoder;class U{constructor(){this._fileInfos=new Map,this._queue=new u({concurrency:D,process:(e,t)=>this._executeQuery(e,t)}),this._indexMap={}}async load(s){const a=s.spatialReference?l.fromJSON(s.spatialReference):void 0;if(a&&!a.isWGS84&&!a.isWebMercator)throw new i("parquet:unsupported-projection","Only WGS84 and Web Mercator are supported");const n=await E({urls:new r(s.urls),fields:s.fields?.map(e=>S.fromJSON(e)),geometryEncoding:s.geometryEncoding?C(s.geometryEncoding):null,geometryType:s.geometryType?v(s.geometryType):null,displayOptimization:s.displayOptimization,spatialReference:a},{customParameters:s.customParameters});if(!n.fields)throw new i("parquet:unsupported","Fields must be defined");let u;if(n.spatialReference&&n.geometryType){if(!n.spatialReference)throw new i("parquet:unsupported","SpatialReference must be defined");if(!n.spatialReference.isGeographic&&!n.spatialReference.isWebMercator)throw new i("parquet:unsupported-projection","Only WGS84 and Web Mercator are supported");n.spatialReference.isGeographic&&!n.spatialReference.isWGS84&&(o.getLogger("parquet:unsupported-projection").warn("Found a geographic projection that is not WGS84. Handling as WGS84.",{spatialReference:n.spatialReference}),n.spatialReference=l.WGS84),u={geometry:n.geometryEncoding?{geometryType:b(n.geometryType),spatialReference:n.spatialReference.toJSON(),encoding:n.geometryEncoding.toJSON()}:null,displayOptimization:n.displayOptimization}}this.setCustomParameters(s.customParameters),this._geometryInfo=u;const p=s.urls;for(const e of p)this._addFile(e);this._capabilities=H(await this.getFileStatistics());const m=this._fileInfos.values().next().value;if(!m)return{layerDefinition:{},capabilities:H(null)};const h=await m,{fields:g}=n;if(null==g)throw new i("parquet-layer:missing-metadata","Unable to create parquet source: cannot infer fields",g);g.push(new S({name:z,type:"oid",alias:z}));for(const e of g){const t=h.file.columnForFieldName(e.name);null!=t&&(this._indexMap[e.name]=t)}const w=new q(g.map(e=>e.toJSON()));this._fieldsIndex=w;const _=b(n.geometryType??"point");if(this._metadata=A.createFeature({fieldsIndex:w.toJSON(),geometryType:_,hasZ:!1,hasM:!1,featureIdInfo:{type:"object-id",fieldName:"rowId"},subtypes:null,subtypeField:null,types:null,typeIdField:null,globalIdField:null,spatialReference:n.spatialReference,outSpatialReference:null,timeInfo:null,timeReferenceUnknownClient:null,dateFieldsTimeZone:null}),this._queryEngineParams={fieldsIndex:this._metadata.fieldsIndex,geometryType:_,featureIdInfo:{type:"object-id",fieldName:"rowId"},hasM:!1,hasZ:!1,spatialReference:n.spatialReference?.toJSON()??{wkid:4326},aggregateAdapter:null,timeInfo:null,definitionExpression:null},n.spatialReference){const e=await this.getFileInfos();this._fullExtent=V(e,n.spatialReference.toJSON())}if(null==this._fullExtent&&"location"===n.geometryEncoding?.type){const{xField:r,yField:s}=n.geometryEncoding,i=c(d(),y);for(const o of await this.getFileInfos())for(const a of o.file.rowGroups()){const o={stack:[],error:void 0,hasError:!1};try{const t=e(o,a.columnDescriptorForAttribute(r),!1),n=e(o,a.columnDescriptorForAttribute(s),!1),u=[t.minValue(),n.minValue(),t.maxValue(),n.maxValue()];f(i,u),a.free()}catch(I){o.error=I,o.hasError=!0}finally{t(o)}}this._fullExtent={xmin:i[0],ymin:i[1],xmax:i[3],ymax:i[4],spatialReference:n.spatialReference?.toJSON()}}return{capabilities:this._capabilities,layerDefinition:{fields:n.fields?.map(e=>e.toJSON()),drawingInfo:F(_),extent:this._fullExtent??void 0,geometryType:_,geometryEncoding:n.geometryEncoding?.toJSON(),displayOptimization:n.displayOptimization}}}destroy(){for(const e of this._fileInfos.values())e.then(e=>e.file.free);this._fileInfos.clear(),this._queue.destroy()}setCustomParameters(e){this._customParameters=e}getIndexMap(){return this._indexMap}async getFileId(e){const t=this._fileInfos.get(e);if(!t)throw new Error(`InternalError: File ${e} does not exist`);return(await t).id}async getFileInfo(e){const t=this._fileInfos.get(e);if(!t)throw new Error(`InternalError: File ${e} does not exist`);return t}async getFileInfos(){return Promise.all(Array.from(this._fileInfos.values()))}async getFileStatistics(){if(!this._fileInfos.size)return null;const e=(await this.getFileInfos()).reduce((e,t)=>e+t.file.byteLength(),0);return{featureCount:await this._getFeatureCount(),byteLength:e}}async updateFiles(e){const t=new Set(e);for(const[r,s]of this._fileInfos.entries())t.has(r)?t.delete(r):(s.then(e=>e.file.free()),this._fileInfos.delete(r));await Promise.all(Array.from(t.values()).map(e=>this._addFile(e)))}async queryFeatures(e,t){this._validateQuery(e),Z(e)||(e.resultRecordCount=e.resultRecordCount?Math.min(e.resultRecordCount,8e3):8e3,e.resultOffset=e.resultOffset??0),(e.outStatistics||e.returnDistinctValues)&&(e.returnGeometry=void 0);return(await this._enqueueQuery(e,t)).createQueryResponse()}async queryFeatureCount(e,t){const r=await I(e,null,this._queryEngineParams.spatialReference);if(this._validateQuery(r),!N(r))return this._getFeatureCount();r.outFields=void 0,r.returnGeometry=void 0;return(await this._enqueueQuery(r,t)).createQueryResponseForCount()}async queryObjectIds(e,t){const r=await I(e,null,this._queryEngineParams.spatialReference);if(this._validateQuery(r),!N(r))return Array.from({length:await this._getFeatureCount()},(e,t)=>t);r.resultRecordCount=r.resultRecordCount?Math.min(r.resultRecordCount,8e3):8e3,r.resultOffset=r.resultOffset??0,r.returnGeometry=void 0,r.outFields=void 0;return(await this._enqueueQuery(r,t)).items.map(e=>e.getObjectId())}async queryExtent(e,t){const r=await I(e,null,this._queryEngineParams.spatialReference);if(this._validateQuery(r),this._fullExtent&&!N(r))return{count:await this._getFeatureCount(),extent:this._fullExtent};const i=s(this._metadata.spatialReference);r.returnGeometry=!0,r.outFields=void 0;const o=c(d(),y),a=d(),n=await this._enqueueQuery(r,t);let u=0;for(const s of n.items)s.getBounds(a)&&(m(o,a),u+=1);return{count:u,extent:g(o,i,r.outSR?s(r.outSR):i,i,!1)}}async queryStream(e,t,r){if(!r.signal)throw new Error("InternalError: AbortSignal must be passed");const s=await this.getFileInfo(e),i=(await O()).Query.new();"tile"===t.type&&(i.setExtent(t.extent),i.setQuantizationTransform(t.transform),i.setScale(t.scale)),i.setOutFields(t.outFields.filter(e=>null!=this._indexMap[e])),i.setOutSpatialReference(t.outSpatialReference.wkid),i.setReturnGeometry(!0),t.where&&await this._setWhereClause(i,s.file,t.where);const o=await s.file.executeQuery(i,r.signal),n=s.streamIdCounter++,u=a(r.signal,e=>{const t=s.streams.get(n);null!=t&&(t.handle.remove(),s.streams.delete(n))});return s.streams.set(n,{stream:o,handle:u}),n}async getStreamNext(e,t,r){if(!r.signal)throw new Error("InternalError: AbortSignal must be passed");const s=await this.getFileInfo(e),i=s.streams.get(t);if(!i)return null;const o=await i.stream.next(r.signal);return null==o&&(i.handle.remove(),s.streams.delete(t)),o?.serialize().buffer}async createPatch(e,t,r,s,i){if(!i.signal)throw new Error("InternalError: AbortSignal must be passed");const o=await this.getFileInfo(e);return(await o.file.createChunkPatch(t,r,s,i.signal)).serialize().buffer}async _getFile(e){for(const t of await this.getFileInfos())if(t.id===e)return t.file;throw new Error(`InternalError: File ${e} does not exist`)}_addFile(e){const t=this._fileInfos.size;this._fileInfos.set(e,this._createFileInfo(e,t))}async _createFileInfo(e,t){return{id:t,file:await Q(e,{geometryInfo:this._geometryInfo,getCustomParameters:()=>this._customParameters}),streamIdCounter:0,streams:new Map}}async _getFeatureCount(){return(await this.getFileInfos()).reduce((e,t)=>e+t.file.numRows(),0)}_validateQuery(e){if(!this._capabilities.query.supportsStatistics&&e.outStatistics)throw new i("parquet:unsupported","Statistics queries are not supported",{query:e});if(!this._capabilities.query.supportsOrderBy&&e.orderByFields?.length)throw new i("parquet:unsupported","Queries using orderBy are not supported",{query:e});if(!this._capabilities.query.supportsDistinct&&e.returnDistinctValues)throw new i("parquet:unsupported","Queries using returnDistinctValues are not supported",{query:e})}async _setWhereClause(e,t,r){const s=this._indexMap,o=this._fieldsIndex,a={getAttribute(e,r){const i=t.readAttribute(e.rowGroup,e.row,s[r]);if(null==i)return null;const a=o.get(r);return"esriFieldTypeString"===a.type||"esriFieldTypeDateOnly"===a.type||"esriFieldTypeTimeOnly"===a.type||"esriFieldTypeTimestampOffset"===a.type?W.decode(i):i}},n=await p(r,this._fieldsIndex);if(!n.isStandardized)throw new i("sql-parse-error","expression is not standardized");const u=(e,t)=>n.testFeatureCompiled({rowGroup:e,row:t},a,null);e.setWhere(r),e.setWhereEvaluator(u),e.setWhereFields(n.fieldNames)}async*_fetchChunks(e,t){const r=await O();for(const s of await this.getFileInfos()){const i=r.Query.new();i.setOutFields(e.fields),i.setReturnGeometry(e.returnGeometry),e.where&&await this._setWhereClause(i,s.file,e.where);const o=await s.file.executeQuery(i),a=[],u=o.next(t);for(let e=0;e<D;e++)a.push(o.next(t));let p=await u;for(;null!=p;){n(t);const e=new G(this._metadata,this._indexMap,p,s.id),r=k([new P(e,null,0,!1)],this._queryEngineParams),i=a.shift();a.push(o.next(t)),yield r,p=await i}}}_enqueueQuery(e,t){return this._queue.push(e,t)}async _executeQuery(e,t){const r=await this._getReadParams(e);if(e.where=void 0,e.objectIds?.length){const r=new Map;for(const t of e.objectIds){const e=x(t),s=R(t);let i=r.get(e);i||(i=[],r.set(e,i)),i.push(s)}const s=[];for(const[i,o]of r.entries()){const r=await this._executeFileIdQuery(e,i,o,t);for(const e of r)s.push(e)}return new _(s,e,{fieldsIndex:this._fieldsIndex,geometryType:this._metadata.geometryType,spatialReference:this._queryEngineParams.spatialReference,hasM:!1,hasZ:!1,featureAdapter:B,featureIdInfo:this._queryEngineParams.featureIdInfo})}let s=e.resultRecordCount??await this._getFeatureCount(),i=e.resultOffset??0;e.resultRecordCount=void 0,e.resultOffset=void 0;const o=[];for await(const a of this._fetchChunks(r,t)){const r=await a.executeQueryForOpaqueFeatures(e,t);if(r.length>i){const t=r.slice(i,Math.min(i+s,r.length));for(const e of t)o.push(e);if(i=0,s-=t.length,0===s)return new _(o,e,{fieldsIndex:this._fieldsIndex,geometryType:this._metadata.geometryType,spatialReference:this._queryEngineParams.spatialReference,hasM:!1,hasZ:!1,featureAdapter:B,featureIdInfo:this._queryEngineParams.featureIdInfo})}else i-=r.length}return new _(o,e,{fieldsIndex:this._fieldsIndex,geometryType:this._metadata.geometryType,spatialReference:this._queryEngineParams.spatialReference,hasM:!1,hasZ:!1,featureAdapter:B,featureIdInfo:this._queryEngineParams.featureIdInfo})}async _executeFileIdQuery(e,t,r,s){const i=await this._getReadParams(e),o=(await O()).Query.new();o.setOutFields(i.fields),o.setReturnGeometry(i.returnGeometry),o.setIds(new Uint32Array(r));const a=await this._getFile(t),n=await a.executeQuery(o,s);let u=await n.next(s),p=0;const l=[];for(;null!=u;){const e=new G(this._metadata,this._indexMap,u,t),r=new P(e,null,p++,!1);l.push(r),u=await n.next(s)}return k(l,this._queryEngineParams).executeQueryForOpaqueFeatures(e,s)}async _getReadParams(e){const t=new Set;if(e.outStatistics)for(const r of e.outStatistics)null!=r.onStatisticField&&t.add(r.onStatisticField);if(e.outFields)for(const r of e.outFields)t.add(r);return{fields:(t.has("*")?this._fieldsIndex.fields.map(e=>e.name):Array.from(t)).filter(e=>null!=this._indexMap[e]),returnGeometry:!!e.returnGeometry||!!e.geometry,where:e.where}}}function N(e){for(const t in e){const r=t;switch(r){case"resultOffset":case"resultRecordCount":case"aggregateIds":case"distance":case"gdbVersion":case"geometry":case"having":case"timeExtent":case"objectIds":case"historicMoment":case"where":return null!=e[r]}}return!1}function k(e,t){const r=new M;for(const s of e)r.insert(s);return new w({...t,featureStore:r})}function J(e){switch(e.length){case 4:return h(d(),e);case 6:return e;default:throw new i("parquet:protocol-violation","Invalid Geoparquet file. BoundingBox size must be 4 or 6.",{bbox:e})}}function V(e,t){const r=c(d(),y);for(const s of e){const e=T(s.file);if(!e)return null;const t=e.columns[e.primary_column];if(!t.bbox)return null;const i=J(t.bbox);m(r,i)}return{xmin:r[0],ymin:r[1],xmax:r[3],ymax:r[4],spatialReference:t}}function H(e){const t=e?.featureCount;let r=!1;return null!=t&&t<has("parquetlayer-full-query-feature-count")&&(r=!0),{analytics:{supportsCacheHint:!1},attachment:null,data:{isVersioned:!1,isBranchVersioned:!1,supportedCurveTypes:[],supportsAttachment:!1,supportsM:!1,supportsTrueCurve:!1,supportsZ:!1},metadata:{supportsAdvancedFieldProperties:!1},operations:{supportsCalculate:!1,supportsTruncate:!1,supportsValidateSql:!1,supportsAdd:!1,supportsDelete:!1,supportsEditing:!1,supportsChangeTracking:!1,supportsQuery:!0,supportsQueryBins:!1,supportsQueryPivot:!1,supportsQueryAnalytics:!1,supportsQueryAttachments:!1,supportsQueryTopFeatures:!1,supportsResizeAttachments:!1,supportsSync:!1,supportsUpdate:!1,supportsExceedsLimitStatistics:!1,supportsAsyncConvert3D:!1},query:{maxRecordCount:8e3,maxRecordCountFactor:void 0,maxUniqueIDCount:void 0,relativeTimeBinWindow:void 0,standardMaxRecordCount:void 0,standardMaxRecordCountNoGeometry:void 0,supportsStatisticsAggregatedIds:!1,supportsCacheHint:!1,supportsCentroid:!0,supportsCentroidOnDegeneratedQuantizedGeometry:!1,supportsCurrentUser:!1,supportsDegeneratedQuantizedGeometry:!1,supportsDisjointSpatialRelationship:!1,supportsDistance:!1,supportsOutDistance:!1,supportsDistinct:r,supportsExtent:!1,supportsFormatPBF:!1,supportsFormatPBFWithCurves:!1,supportsGeometryProperties:!1,supportsHavingClause:!1,supportsHistoricMoment:!1,supportsMaxRecordCountFactor:!1,supportsOrderBy:r,supportsPagination:!0,supportsPaginationOnAggregatedQueries:!1,supportsPercentileStatistics:!1,supportsQuantization:!0,supportsQuantizationEditMode:!1,supportsQueryByAnonymous:!1,supportsQueryByOthers:!1,supportsQueryGeometry:!1,supportsResultType:!1,supportsReturnMesh:!1,supportsReturnExceededLimitGeometries:!1,supportsStandardizedQueriesOnly:!1,supportsTopFeaturesQuery:!1,supportsStatistics:r,supportsSpatialAggregationStatistics:!1,supportedSpatialAggregationStatistics:{envelope:!1,centroid:!1,convexHull:!1},supportsDefaultSpatialReference:!1,supportsFullTextSearch:!1,supportsCompactGeometry:!1,supportsSqlExpression:!1,supportsTrueCurve:!1,tileMaxRecordCount:void 0},queryAttributeBins:{supportsDate:!1,supportsFixedInterval:!1,supportsAutoInterval:!1,supportsFixedBoundaries:!1,supportsStackBy:!1,supportsSplitBy:!1,supportsSnapToData:!1,supportsReturnFullIntervalBin:!1,supportsFirstDayOfWeek:!1,supportsNormalization:!1},queryRelated:{supportsCount:!1,supportsOrderBy:!1,supportsPagination:!1,supportsCacheHint:!1},queryTopFeatures:{supportsCacheHint:!1},editing:{supportsDeleteByAnonymous:!1,supportsDeleteByOthers:!1,supportsGeometryUpdate:!1,supportsGlobalId:!1,supportsTrueCurveUpdate:!1,supportsTrueCurveUpdateByTrueCurveClientsOnly:!0,supportsReturnServiceEditsInSourceSpatialReference:!1,supportsRollbackOnFailure:!1,supportsUpdateByAnonymous:!1,supportsUpdateByOthers:!1,supportsUploadWithItemId:!1,supportsUpdateWithoutM:!1,supportsAsyncApplyEdits:!1,zDefault:void 0}}}function Z(e){return!!(e.objectIds?.length||e.outStatistics||e.orderByFields?.length||e.returnDistinctValues)}export{U as default};