@arcgis/core 6.0.0-next.13 → 6.0.0-next.14

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 (157) hide show
  1. package/arcade/containerUtils.js +1 -1
  2. package/arcade/featureset/sources/FeatureLayerDynamic.js +1 -1
  3. package/arcade/functions/feature.js +1 -1
  4. package/arcade/functions/featuresetstring.js +1 -1
  5. package/arcade/functions/geomasync.js +1 -1
  6. package/arcade/functions/portal.js +1 -1
  7. package/arcade/functions/string.js +1 -1
  8. package/assets/esri/core/workers/RemoteClient.js +1 -1
  9. package/assets/esri/core/workers/chunks/{5566f14afb63065e438f.js → 0050916e462e3c9e0627.js} +1 -1
  10. package/assets/esri/core/workers/chunks/02c5d027bdaee67869cf.js +1 -0
  11. package/assets/esri/core/workers/chunks/0da6abe3ceabfe78f7a0.js +1 -0
  12. package/assets/esri/core/workers/chunks/0f617980c7dd9ad0444f.js +1 -0
  13. package/assets/esri/core/workers/chunks/{10445313d0d57b34511b.js → 2145a512d269d64036b0.js} +1 -1
  14. package/assets/esri/core/workers/chunks/21ddb26526bcb2b122c3.js +1 -0
  15. package/assets/esri/core/workers/chunks/22e8c0aad2fe75943865.js +1 -0
  16. package/assets/esri/core/workers/chunks/25f19fc929f25ddd628c.js +1 -0
  17. package/assets/esri/core/workers/chunks/28b74bc77f7c13080074.js +1 -0
  18. package/assets/esri/core/workers/chunks/{2ef5237e4c876d6a4ee0.js → 2bd4ee083ca4ad221f8b.js} +1 -1
  19. package/assets/esri/core/workers/chunks/{f4f9d08b2df856e3b694.js → 2eae542fe7f0f6576ac1.js} +1 -1
  20. package/assets/esri/core/workers/chunks/{2aeb5cc32284dd3e4d22.js → 33e4ff228a8c81b99022.js} +1 -1
  21. package/assets/esri/core/workers/chunks/{42323093827adffe56d3.js → 3418877328f4f0830300.js} +1 -1
  22. package/assets/esri/core/workers/chunks/{8dc1c3042267618fd710.js → 34cbaf844730ac2d92c2.js} +2 -2
  23. package/assets/esri/core/workers/chunks/{96c50a0dda0f1503ef92.js → 3c301a689c7853c9fa67.js} +2 -2
  24. package/assets/esri/core/workers/chunks/{02253bdffbd580af22d8.js → 3ff6d1ed3c0f1285f3e7.js} +1 -1
  25. package/assets/esri/core/workers/chunks/{67e4b5651fd7ff7d8cf0.js → 4ac1d3e49e242e373a92.js} +1 -1
  26. package/assets/esri/core/workers/chunks/4df6cb1bee5d0720a43e.js +1 -0
  27. package/assets/esri/core/workers/chunks/{a4cab24af69260438ff4.js → 4e6f40cbdb8c508e6df1.js} +1 -1
  28. package/assets/esri/core/workers/chunks/{dc486a3595b6d57018bb.js → 5bfea0c55aca826de536.js} +1 -1
  29. package/assets/esri/core/workers/chunks/601e1d020b8115497944.js +1 -0
  30. package/assets/esri/core/workers/chunks/{2686fe5b62dd0be699c0.js → 634523cc7757da9020e4.js} +1 -1
  31. package/assets/esri/core/workers/chunks/{a518ae5683367eeda74c.js → 70d3055f15d8b0cf4074.js} +1 -1
  32. package/assets/esri/core/workers/chunks/{1b946714ca4a1a7359d4.js → 76ab353d80d786777161.js} +2 -2
  33. package/assets/esri/core/workers/chunks/7f8e327acad48c9e75ea.js +1 -0
  34. package/assets/esri/core/workers/chunks/8052da8be251c3ff2176.js +1 -0
  35. package/assets/esri/core/workers/chunks/{f6e62d2d279a328cbed7.js → 90bdf86f553e2742d67c.js} +1 -1
  36. package/assets/esri/core/workers/chunks/91ebb2ccab1889eb7e81.js +1 -0
  37. package/assets/esri/core/workers/chunks/{3d9d7d3a40b51eb7ee3d.js → 953ba13299e7aa92c1a0.js} +1 -1
  38. package/assets/esri/core/workers/chunks/{f46d9a19f79d4a4bd354.js → 9e1a3b6a08c96dcefdde.js} +1 -1
  39. package/assets/esri/core/workers/chunks/9f0a973a0dd28953ce25.js +1 -0
  40. package/assets/esri/core/workers/chunks/a2ad3e620c98e2b2eb06.js +1 -0
  41. package/assets/esri/core/workers/chunks/a34b3d2e11a777e1ff3f.js +1 -0
  42. package/assets/esri/core/workers/chunks/{140f2eeb11e39ab15734.js → aa36c3a9bbaa086e3757.js} +1 -1
  43. package/assets/esri/core/workers/chunks/aadfe34a99c9ec7a0e11.js +1 -0
  44. package/assets/esri/core/workers/chunks/b49df4ebd4be1181b0f9.js +2 -0
  45. package/assets/esri/core/workers/chunks/{68d8ae42ab71d01a70a5.js → b557824bc1fa163d72a3.js} +2 -2
  46. package/assets/esri/core/workers/chunks/bc915fb182d463d804e6.js +1 -0
  47. package/assets/esri/core/workers/chunks/{992f102992c2bed7b34e.js → d5d0fe8e198ff5a902ee.js} +1 -1
  48. package/assets/esri/core/workers/chunks/e2190361247f35b02b32.js +1 -0
  49. package/assets/esri/core/workers/chunks/e2f42aec02bff33b25dd.js +1 -0
  50. package/assets/esri/core/workers/chunks/ebc1a2ef3aed8aa29424.js +1 -0
  51. package/assets/esri/core/workers/chunks/ed6e9d7f71bfd2691717.js +1 -0
  52. package/assets/esri/core/workers/chunks/ee6679ef9efa1504e7eb.js +1 -0
  53. package/assets/esri/libs/lyr3d/lyr3DMain.wasm +0 -0
  54. package/assets/esri/libs/lyr3d/lyr3DWorker.wasm +0 -0
  55. package/chunks/BlendWeights.glsl.js +10 -10
  56. package/chunks/Blur.glsl.js +2 -2
  57. package/chunks/EdgeDetect.glsl.js +24 -19
  58. package/chunks/HUDMaterial.glsl.js +11 -1
  59. package/chunks/HighlightApply.glsl.js +4 -5
  60. package/chunks/HighlightBlur.glsl.js +5 -5
  61. package/chunks/HighlightDownsample.glsl.js +2 -2
  62. package/chunks/HighlightSharpApply.glsl.js +61 -0
  63. package/chunks/lyr3DMain.js +1 -1
  64. package/chunks/lyr3DWorker.js +2 -2
  65. package/chunks/portal.js +1 -1
  66. package/config.js +1 -1
  67. package/geometry/support/curves/ellipticArc7Utils.js +1 -1
  68. package/geometry/support/curves/mathUtils.js +1 -1
  69. package/kernel.js +1 -1
  70. package/layers/geospatialPDF/ViewportMeasureFrame.js +1 -1
  71. package/layers/geospatialPDF/geospatialPDFParserUtils.js +1 -1
  72. package/layers/geospatialPDF/projectionToWKTUtils.js +2 -2
  73. package/layers/graphics/sources/GeoJSONSource.js +1 -1
  74. package/layers/graphics/sources/geojson/GeoJSONSourceWorker.js +1 -1
  75. package/layers/graphics/sources/support/MemorySourceWorker.js +1 -1
  76. package/layers/graphics/sources/support/clientSideDefaults.js +1 -1
  77. package/layers/graphics/sources/support/sourceUtils.js +1 -1
  78. package/layers/raster/datasets/TIFFRaster.js +1 -1
  79. package/layers/raster/datasets/pixelReader.js +1 -1
  80. package/layers/raster/functions/clipUtils.js +1 -1
  81. package/layers/support/fieldUtils.js +1 -1
  82. package/package.json +2 -2
  83. package/portal/schemas/definitions.js +1 -1
  84. package/symbols/cim/cimAnalyzer.js +1 -1
  85. package/views/2d/engine/webgl/GlyphWorker.js +1 -1
  86. package/views/2d/layers/features/schema/processor/symbols/ComplexSymbolSchema.js +1 -1
  87. package/views/3d/analysis/LineOfSight/LineOfSightObserverPlugin.js +1 -1
  88. package/views/3d/analysis/LineOfSight/LineOfSightTargetPlugin.js +1 -1
  89. package/views/3d/analysis/Viewshed/ViewshedPlacementPointPlugin.js +1 -1
  90. package/views/3d/webgl-engine/core/shaderLibrary/HighlightCellGridScreenSpacePass.glsl.js +20 -6
  91. package/views/3d/webgl-engine/effects/highlight/Highlight.js +1 -1
  92. package/views/3d/webgl-engine/effects/highlight/HighlightApply.glsl.js +1 -1
  93. package/views/3d/webgl-engine/effects/highlight/HighlightCellGridScreenSpacePassParameters.js +2 -0
  94. package/views/3d/webgl-engine/effects/highlight/HighlightDownsample.glsl.js +1 -1
  95. package/views/3d/webgl-engine/effects/highlight/HighlightPassParameters.js +1 -1
  96. package/views/3d/webgl-engine/effects/highlight/HighlightSharpApply.glsl.js +2 -0
  97. package/views/3d/webgl-engine/effects/highlight/HighlightSharpApplyTechnique.js +2 -0
  98. package/views/3d/webgl-engine/effects/smaa/BlendWeights.glsl.js +1 -1
  99. package/views/3d/webgl-engine/effects/smaa/Blur.glsl.js +1 -1
  100. package/views/3d/webgl-engine/effects/smaa/EdgeDetect.glsl.js +1 -1
  101. package/views/3d/webgl-engine/effects/smaa/SMAA.js +1 -1
  102. package/views/3d/webgl-engine/effects/smaa/SMAABlendWeightsTechnique.js +1 -1
  103. package/views/3d/webgl-engine/effects/smaa/SMAABlurTechnique.js +1 -1
  104. package/views/3d/webgl-engine/effects/smaa/SMAAEdgeDetectTechnique.js +1 -1
  105. package/views/3d/webgl-engine/effects/smaa/SMAAPassParameters.js +1 -1
  106. package/views/3d/webgl-engine/effects/smaa/SMAATechniqueConfiguration.js +2 -0
  107. package/views/3d/webgl-engine/lib/Compositor.js +1 -1
  108. package/views/3d/webgl-engine/lib/RenderFeature.js +1 -1
  109. package/views/3d/webgl-engine/parts/RenderView.js +1 -1
  110. package/views/draw/DrawTool.js +1 -1
  111. package/views/draw/plugins/MultipointPlugin.js +1 -1
  112. package/views/draw/support/PluginContext.js +1 -1
  113. package/views/draw/support/managers/TooltipManager.js +1 -1
  114. package/views/draw/support/types.d.ts +5 -2
  115. package/views/support/HighlightDefaults.js +1 -1
  116. package/webdoc/applicationProperties/SearchLayerField.d.ts +7 -1
  117. package/webdoc/applicationProperties/SearchLayerField.js +1 -1
  118. package/webdoc/applicationProperties/SearchTableField.d.ts +7 -1
  119. package/webdoc/applicationProperties/SearchTableField.js +1 -1
  120. package/webdoc/applicationProperties/searchMode.js +2 -0
  121. package/widgets/BatchAttributeForm/batchAttributeFormUtils.js +1 -1
  122. package/widgets/BatchAttributeForm/inputs/support/inputUtils.js +1 -1
  123. package/widgets/BatchAttributeForm.js +1 -1
  124. package/widgets/OrientedImageryViewer/services/DepthImageService.js +1 -1
  125. package/widgets/Search/LayerSearchSource.d.ts +23 -1
  126. package/widgets/Search/LayerSearchSource.js +1 -1
  127. package/widgets/Search/support/layerSearchUtils.js +1 -1
  128. package/widgets/Search/types.d.ts +7 -0
  129. package/widgets/support/forms/formUtils.js +1 -1
  130. package/widgets/support/forms/types.d.ts +1 -1
  131. package/assets/esri/core/workers/chunks/0dc66b03ff55d0ea5a09.js +0 -1
  132. package/assets/esri/core/workers/chunks/175c268e64ccd01f8c25.js +0 -1
  133. package/assets/esri/core/workers/chunks/2a1ec30f9ad305763f81.js +0 -2
  134. package/assets/esri/core/workers/chunks/3df5500a85345577480a.js +0 -1
  135. package/assets/esri/core/workers/chunks/3f7d583b676b23b3fadb.js +0 -1
  136. package/assets/esri/core/workers/chunks/4503b20ca6a80fb63d72.js +0 -1
  137. package/assets/esri/core/workers/chunks/4a640548032355e57acd.js +0 -1
  138. package/assets/esri/core/workers/chunks/53be85d04cd2da4f391d.js +0 -1
  139. package/assets/esri/core/workers/chunks/566e129f3d3805d7370a.js +0 -1
  140. package/assets/esri/core/workers/chunks/567a65f4203f6e81f4b4.js +0 -1
  141. package/assets/esri/core/workers/chunks/5982c6a8459c1237b298.js +0 -1
  142. package/assets/esri/core/workers/chunks/5eae5c29149f2429fe96.js +0 -1
  143. package/assets/esri/core/workers/chunks/6dc86e7496157c5e4d2c.js +0 -1
  144. package/assets/esri/core/workers/chunks/74b5c00f93cfc0d59029.js +0 -1
  145. package/assets/esri/core/workers/chunks/7c2c8f786a30267a5f05.js +0 -1
  146. package/assets/esri/core/workers/chunks/88e54449261ef94e390d.js +0 -1
  147. package/assets/esri/core/workers/chunks/9e142551163acf752618.js +0 -1
  148. package/assets/esri/core/workers/chunks/af75747b06d79446a855.js +0 -1
  149. package/assets/esri/core/workers/chunks/dba280c370df13196711.js +0 -1
  150. package/assets/esri/core/workers/chunks/e3c1c9e6c62ba5cbcdb8.js +0 -1
  151. package/assets/esri/core/workers/chunks/f1f90adae13b04898008.js +0 -1
  152. package/assets/esri/core/workers/chunks/f47c7065da3b5001245f.js +0 -1
  153. /package/assets/esri/core/workers/chunks/{1b946714ca4a1a7359d4.js.LICENSE.txt → 34cbaf844730ac2d92c2.js.LICENSE.txt} +0 -0
  154. /package/assets/esri/core/workers/chunks/{96c50a0dda0f1503ef92.js.LICENSE.txt → 3c301a689c7853c9fa67.js.LICENSE.txt} +0 -0
  155. /package/assets/esri/core/workers/chunks/{8dc1c3042267618fd710.js.LICENSE.txt → 76ab353d80d786777161.js.LICENSE.txt} +0 -0
  156. /package/assets/esri/core/workers/chunks/{2a1ec30f9ad305763f81.js.LICENSE.txt → b49df4ebd4be1181b0f9.js.LICENSE.txt} +0 -0
  157. /package/assets/esri/core/workers/chunks/{68d8ae42ab71d01a70a5.js.LICENSE.txt → b557824bc1fa163d72a3.js.LICENSE.txt} +0 -0
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import e from"../../../../request.js";import{createTask as t}from"../../../../core/asyncUtils.js";import n from"../../../../core/Error.js";import r from"../../../../core/Logger.js";import{isAbortError as i}from"../../../../core/promiseUtils.js";import{getJsonType as a}from"../../../../geometry/support/jsonTypeUtils.js";import{wgs84 as o,equals as s}from"../../../../geometry/support/spatialReferenceUtils.js";import{convertFromGeometry as c,convertToGeometry as l,convertFromFeatures as u,convertToFeature as d,convertFromFeature as f}from"../../featureConversionUtils.js";import p from"../../data/FeatureStore.js";import{checkProjectionSupport as m,project as h}from"../../data/projectionSupport.js";import{QueryEngine as g}from"../../data/QueryEngine.js";import{inferLayerProperties as _,createOptimizedFeatures as v,validateGeoJSON as y}from"./geojson.js";import{createDefaultTemplate as b,createDefaultAttributesFunction as x,createDrawingInfo as S}from"../support/clientSideDefaults.js";import{queryBinsCapabilities as C,loadGeometryEngineForSimplify as w,mixAttributes as T,createFeatureEditSuccessResult as E,createFeatureEditErrorResult as D,simplify as O}from"../support/sourceUtils.js";import k from"../../../support/FieldsIndex.js";import{kebabDict as A}from"../../../support/fieldType.js";import{getFieldDefaultValue as j,getFieldDefaultLength as M}from"../../../support/fieldUtils.js";import{utc as N}from"../../../../time/constants.js";const P={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:C};class F{constructor(){this._featureIdInfo=null,this._queryEngine=null,this._snapshotFeatures=async e=>{let 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};let r=[],[i]=await Promise.all([e.url?this._fetch(t?.signal):null,this._checkProjection(e.spatialReference)]),a=_(i,{geometryType:e.geometryType}),s=e.fields||a.fields||[],c=e.hasZ==null?a.hasZ:e.hasZ,l=a.geometryType,u=e.objectIdField||a.objectIdFieldName||`__OBJECTID`,d=e.spatialReference||o,f=e.timeInfo;s===a.fields&&a.unknownFields.length>0&&r.push({name:`geojson-layer:unknown-field-types`,message:`Some fields types couldn't be inferred from the features and were dropped`,details:{unknownFields:a.unknownFields}});let m=new k(s),h=m.dateFields.length>0,v=m.get(u);v?(v.type!==`esriFieldTypeString`&&(v.type=`esriFieldTypeOID`),v.editable=!1,v.nullable=!1,u=v.name):(v={alias:u,name:u,type:a.objectIdFieldType===`string`?`esriFieldTypeString`:`esriFieldTypeOID`,editable:!1,nullable:!1},s.unshift(v));let y={};for(let e of s){if(e.name??=e.alias,e.alias??=e.name,!e.name)throw new n(`geojson-layer:invalid-field-name`,`field name is missing`,{field:e});if(!A.jsonValues.includes(e.type))throw new n(`geojson-layer:invalid-field-type`,`invalid type for field "${e.name}"`,{field:e});if(e.name!==v.name){let t=j(e);t!==void 0&&(y[e.name]=t)}e.length??=M(e)}if(f){if(f.startTimeField){let e=m.get(f.startTimeField);e?(f.startTimeField=e.name,e.type=`esriFieldTypeDate`,h=!0):f.startTimeField=null}if(f.endTimeField){let e=m.get(f.endTimeField);e?(f.endTimeField=e.name,e.type=`esriFieldTypeDate`,h=!0):f.endTimeField=null}if(f.trackIdField){let e=m.get(f.trackIdField);e?f.trackIdField=e.name:(f.trackIdField=null,r.push({name:`geojson-layer:invalid-timeInfo-trackIdField`,message:`trackIdField is missing`,details:{timeInfo:f}}))}!f.startTimeField&&!f.endTimeField&&(r.push({name:`geojson-layer:invalid-timeInfo`,message:`startTimeField and endTimeField are missing`,details:{timeInfo:f}}),f=null)}let C=l?S(l):void 0,w=h?{timeZoneIANA:N}:null,T={warnings:r,featureErrors:[],layerDefinition:{...P,drawingInfo:C??void 0,templates:b(y),extent:void 0,geometryType:l,objectIdField:u,fields:s,hasZ:!!c,timeInfo:f,dateFieldsTimeReference:w}};this._featureIdInfo={type:`object-id`,fieldName:u},this._queryEngine=new g({fieldsIndex:k.fromLayerJSON({fields:s,timeInfo:f,dateFieldsTimeReference:w}),geometryType:l,hasM:!1,hasZ:c,featureIdInfo:this._featureIdInfo,spatialReference:d,timeInfo:f,featureStore:new p({geometryType:l,hasM:!1,hasZ:c})});let E=this._queryEngine.fieldsIndex.requiredFields.indexOf(v);E>-1&&this._queryEngine.fieldsIndex.requiredFields.splice(E,1),this._createDefaultAttributes=x(y,u);let D=this._createFeatures(i);this._objectIdGenerator=this._createObjectIdGenerator(this._queryEngine,D);let O=this._normalizeFeatures(D,T.featureErrors);this._queryEngine.featureStore.addMany(O);let{fullExtent:F,timeExtent:I}=await this._queryEngine.fetchRecomputedExtents();if(T.layerDefinition.extent=F,I){let{start:e,end:t}=I;T.layerDefinition.timeInfo.timeExtent=[e,t]}return T}async applyEdits(e){let{spatialReference:t,geometryType:n}=this._queryEngine;return await Promise.all([w(t,n),m(e.adds,t),m(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);let t=this._normalizeFeatures(e);t&&this._queryEngine.featureStore.addMany(t)},e=>{this._queryEngine.featureStore.clear(),i(e)||r.getLogger(`esri.layers.GeoJSONLayer`).error(new n(`geojson-layer:refresh`,`An error occurred during refresh`,{error:e}))}),await this._waitSnapshotComplete();let{fullExtent:a,timeExtent:o}=await this._queryEngine.fetchRecomputedExtents();return{extent:a,timeExtent:o}}_createFeatures(e){if(e==null)return[];let{geometryType:t,hasZ:n}=this._queryEngine,r=this._featureIdInfo.fieldName,i=v(e,{geometryType:t,hasZ:n,objectIdField:r});if(!s(this._queryEngine.spatialReference,o))for(let e of i)e.geometry!=null&&(e.geometry=c(h(l(e.geometry,this._queryEngine.geometryType,this._queryEngine.hasZ,!1),o,this._queryEngine.spatialReference)));return i}async _waitSnapshotComplete(){if(this._snapshotTask&&!this._snapshotTask.finished){try{await this._snapshotTask.promise}catch{}return this._waitSnapshotComplete()}}async _fetch(t){let{url:n,customParameters:r}=this._loadOptions,i=(await e(n??``,{responseType:`json`,query:{...r},signal:t})).data;return y(i),i}_normalizeFeatures(e,t){let{fieldsIndex:n}=this._queryEngine,r=[],i=this._featureIdInfo.fieldName;for(let a of e){let e=this._createDefaultAttributes(),o=T(n,e,a.attributes,!0);o?t?.push(o):(this._assignObjectId(e,a.attributes,!0),a.attributes=e,a.objectId=e[i],r.push(a))}return r}async _applyEdits(e){let{adds:t,updates:n,deletes:r}=e,i={addResults:[],deleteResults:[],updateResults:[],uidToObjectId:{}};if(t?.length&&this._applyAddEdits(i,t),n?.length&&this._applyUpdateEdits(i,n),r?.length){for(let e of r)i.deleteResults.push(E(e));this._queryEngine.featureStore.removeManyById(r)}let{fullExtent:a,timeExtent:o}=await this._queryEngine.fetchRecomputedExtents();return{extent:a,timeExtent:o,featureEditResults:i}}_applyAddEdits(e,t){let{addResults:n}=e,{geometryType:r,hasM:i,hasZ:o,spatialReference:s,featureStore:c,fieldsIndex:l}=this._queryEngine,d=this._featureIdInfo.fieldName,f=[];for(let i of t){if(i.geometry&&r!==a(i.geometry)){n.push(D(`Incorrect geometry type.`));continue}let t=this._createDefaultAttributes(),o=T(l,t,i.attributes);if(o)n.push(o);else{if(this._assignObjectId(t,i.attributes),i.attributes=t,i.uid!=null){let t=i.attributes[d];e.uidToObjectId[i.uid]=t}if(i.geometry!=null){let e=i.geometry.spatialReference??s;i.geometry=h(O(i.geometry,e),e,s)}f.push(i),n.push(E(i.attributes[d]))}}c.addMany(u([],f,r,o,i,this._featureIdInfo))}_applyUpdateEdits({updateResults:e},t){let{geometryType:n,hasM:r,hasZ:i,spatialReference:o,featureStore:s,fieldsIndex:c}=this._queryEngine,l=this._featureIdInfo.fieldName;for(let u of t){let{attributes:t,geometry:p}=u,m=t?.[l];if(m==null){e.push(D(`Identifier field ${l} missing`));continue}if(!s.has(m)){e.push(D(`Feature with object id ${m} missing`));continue}let g=d(s.getFeature(m),n,i,r);if(p!=null){if(n!==a(p)){e.push(D(`Incorrect geometry type.`));continue}let t=p.spatialReference??o;g.geometry=h(O(p,t),t,o)}if(t){let n=T(c,g.attributes,t);if(n){e.push(n);continue}}s.add(f(g,n,i,r,this._featureIdInfo)),e.push(E(m))}}_createObjectIdGenerator(e,t){let n=this._featureIdInfo.fieldName,r=e.fieldsIndex.get(n);if(r.type===`esriFieldTypeString`)return()=>r.name+`-`+Date.now().toString(16);let i=-1/0;for(let e of t)e.objectId&&(i=Math.max(i,e.objectId));return i=Math.max(0,i)+1,()=>i++}_assignObjectId(e,t,n=!1){let r=this._featureIdInfo.fieldName;e[r]=!n||!(r in t)?this._objectIdGenerator():t[r]}async _checkProjection(e){try{await m(o,e)}catch{throw new n(`geojson-layer`,`Projection not supported`)}}}export{F as default};
2
+ import e from"../../../../request.js";import{createTask as t}from"../../../../core/asyncUtils.js";import n from"../../../../core/Error.js";import r from"../../../../core/Logger.js";import{isAbortError as i}from"../../../../core/promiseUtils.js";import{getJsonType as a}from"../../../../geometry/support/jsonTypeUtils.js";import{wgs84 as o,equals as s}from"../../../../geometry/support/spatialReferenceUtils.js";import{convertFromGeometry as c,convertToGeometry as l,convertFromFeatures as u,convertToFeature as d,convertFromFeature as f}from"../../featureConversionUtils.js";import p from"../../data/FeatureStore.js";import{checkProjectionSupport as m,project as h}from"../../data/projectionSupport.js";import{QueryEngine as g}from"../../data/QueryEngine.js";import{inferLayerProperties as _,createOptimizedFeatures as v,validateGeoJSON as y}from"./geojson.js";import{createDefaultTemplate as b,createDefaultAttributesFunction as x,createDrawingInfo as S}from"../support/clientSideDefaults.js";import{tableCapabilities as C,layerCapabilities as w,loadGeometryEngineForSimplify as T,mixAttributes as E,createFeatureEditSuccessResult as D,createFeatureEditErrorResult as O,simplify as k}from"../support/sourceUtils.js";import A from"../../../support/FieldsIndex.js";import{kebabDict as j}from"../../../support/fieldType.js";import{getFieldDefaultValue as M,getFieldDefaultLength as N}from"../../../support/fieldUtils.js";import{utc as P}from"../../../../time/constants.js";class F{constructor(){this._featureIdInfo=null,this._queryEngine=null,this._snapshotFeatures=async e=>{let 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};let r=[],[i]=await Promise.all([e.url?this._fetch(t?.signal):null,this._checkProjection(e.spatialReference)]),a=_(i,{geometryType:e.geometryType}),s=e.fields||a.fields||[],c=e.hasZ==null?a.hasZ:e.hasZ,l=a.geometryType,u=!l,d=e.objectIdField||a.objectIdFieldName||`__OBJECTID`,f=e.spatialReference||o,m=e.timeInfo;s===a.fields&&a.unknownFields.length>0&&r.push({name:`geojson-layer:unknown-field-types`,message:`Some fields types couldn't be inferred from the features and were dropped`,details:{unknownFields:a.unknownFields}});let h=new A(s),v=h.dateFields.length>0,y=h.get(d);y?(y.type!==`esriFieldTypeString`&&(y.type=`esriFieldTypeOID`),y.editable=!1,y.nullable=!1,d=y.name):(y={alias:d,name:d,type:a.objectIdFieldType===`string`?`esriFieldTypeString`:`esriFieldTypeOID`,editable:!1,nullable:!1},s.unshift(y));let T={};for(let e of s){if(e.name??=e.alias,e.alias??=e.name,!e.name)throw new n(`geojson-layer:invalid-field-name`,`field name is missing`,{field:e});if(!j.jsonValues.includes(e.type))throw new n(`geojson-layer:invalid-field-type`,`invalid type for field "${e.name}"`,{field:e});if(e.name!==y.name){let t=M(e);t!==void 0&&(T[e.name]=t)}e.length??=N(e)}if(m){if(m.startTimeField){let e=h.get(m.startTimeField);e?(m.startTimeField=e.name,e.type=`esriFieldTypeDate`,v=!0):m.startTimeField=null}if(m.endTimeField){let e=h.get(m.endTimeField);e?(m.endTimeField=e.name,e.type=`esriFieldTypeDate`,v=!0):m.endTimeField=null}if(m.trackIdField){let e=h.get(m.trackIdField);e?m.trackIdField=e.name:(m.trackIdField=null,r.push({name:`geojson-layer:invalid-timeInfo-trackIdField`,message:`trackIdField is missing`,details:{timeInfo:m}}))}!m.startTimeField&&!m.endTimeField&&(r.push({name:`geojson-layer:invalid-timeInfo`,message:`startTimeField and endTimeField are missing`,details:{timeInfo:m}}),m=null)}let E=l?S(l):void 0,D=v?{timeZoneIANA:P}:null,O={warnings:r,featureErrors:[],layerDefinition:{...u?C:w,drawingInfo:E??void 0,templates:b(T),extent:void 0,geometryType:l,objectIdField:d,fields:s,hasZ:!!c,timeInfo:m,dateFieldsTimeReference:D}};this._featureIdInfo={type:`object-id`,fieldName:d},this._queryEngine=new g({fieldsIndex:A.fromLayerJSON({fields:s,timeInfo:m,dateFieldsTimeReference:D}),geometryType:l,hasM:!1,hasZ:c,featureIdInfo:this._featureIdInfo,spatialReference:f,timeInfo:m,featureStore:new p({geometryType:l,hasM:!1,hasZ:c})});let k=this._queryEngine.fieldsIndex.requiredFields.indexOf(y);k>-1&&this._queryEngine.fieldsIndex.requiredFields.splice(k,1),this._createDefaultAttributes=x(T,d);let F=this._createFeatures(i);this._objectIdGenerator=this._createObjectIdGenerator(this._queryEngine,F);let I=this._normalizeFeatures(F,O.featureErrors);this._queryEngine.featureStore.addMany(I);let{fullExtent:L,timeExtent:R}=await this._queryEngine.fetchRecomputedExtents();if(O.layerDefinition.extent=L,R){let{start:e,end:t}=R;O.layerDefinition.timeInfo.timeExtent=[e,t]}return O}async applyEdits(e){let{spatialReference:t,geometryType:n}=this._queryEngine;return await Promise.all([T(t,n),m(e.adds,t),m(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);let t=this._normalizeFeatures(e);t&&this._queryEngine.featureStore.addMany(t)},e=>{this._queryEngine.featureStore.clear(),i(e)||r.getLogger(`esri.layers.GeoJSONLayer`).error(new n(`geojson-layer:refresh`,`An error occurred during refresh`,{error:e}))}),await this._waitSnapshotComplete();let{fullExtent:a,timeExtent:o}=await this._queryEngine.fetchRecomputedExtents();return{extent:a,timeExtent:o}}_createFeatures(e){if(e==null)return[];let{geometryType:t,hasZ:n}=this._queryEngine,r=this._featureIdInfo.fieldName,i=v(e,{geometryType:t,hasZ:n,objectIdField:r});if(!s(this._queryEngine.spatialReference,o))for(let e of i)e.geometry!=null&&(e.geometry=c(h(l(e.geometry,this._queryEngine.geometryType,this._queryEngine.hasZ,!1),o,this._queryEngine.spatialReference)));return i}async _waitSnapshotComplete(){if(this._snapshotTask&&!this._snapshotTask.finished){try{await this._snapshotTask.promise}catch{}return this._waitSnapshotComplete()}}async _fetch(t){let{url:n,customParameters:r}=this._loadOptions,i=(await e(n??``,{responseType:`json`,query:{...r},signal:t})).data;return y(i),i}_normalizeFeatures(e,t){let{fieldsIndex:n}=this._queryEngine,r=[],i=this._featureIdInfo.fieldName;for(let a of e){let e=this._createDefaultAttributes(),o=E(n,e,a.attributes,!0);o?t?.push(o):(this._assignObjectId(e,a.attributes,!0),a.attributes=e,a.objectId=e[i],r.push(a))}return r}async _applyEdits(e){let{adds:t,updates:n,deletes:r}=e,i={addResults:[],deleteResults:[],updateResults:[],uidToObjectId:{}};if(t?.length&&this._applyAddEdits(i,t),n?.length&&this._applyUpdateEdits(i,n),r?.length){for(let e of r)i.deleteResults.push(D(e));this._queryEngine.featureStore.removeManyById(r)}let{fullExtent:a,timeExtent:o}=await this._queryEngine.fetchRecomputedExtents();return{extent:a,timeExtent:o,featureEditResults:i}}_applyAddEdits(e,t){let{addResults:n}=e,{geometryType:r,hasM:i,hasZ:o,spatialReference:s,featureStore:c,fieldsIndex:l}=this._queryEngine,d=this._featureIdInfo.fieldName,f=[];for(let i of t){if(i.geometry&&r!==a(i.geometry)){n.push(O(`Incorrect geometry type.`));continue}let t=this._createDefaultAttributes(),o=E(l,t,i.attributes);if(o)n.push(o);else{if(this._assignObjectId(t,i.attributes),i.attributes=t,i.uid!=null){let t=i.attributes[d];e.uidToObjectId[i.uid]=t}if(i.geometry!=null){let e=i.geometry.spatialReference??s;i.geometry=h(k(i.geometry,e),e,s)}f.push(i),n.push(D(i.attributes[d]))}}c.addMany(u([],f,r,o,i,this._featureIdInfo))}_applyUpdateEdits({updateResults:e},t){let{geometryType:n,hasM:r,hasZ:i,spatialReference:o,featureStore:s,fieldsIndex:c}=this._queryEngine,l=this._featureIdInfo.fieldName;for(let u of t){let{attributes:t,geometry:p}=u,m=t?.[l];if(m==null){e.push(O(`Identifier field ${l} missing`));continue}if(!s.has(m)){e.push(O(`Feature with object id ${m} missing`));continue}let g=d(s.getFeature(m),n,i,r);if(p!=null){if(n!==a(p)){e.push(O(`Incorrect geometry type.`));continue}let t=p.spatialReference??o;g.geometry=h(k(p,t),t,o)}if(t){let n=E(c,g.attributes,t);if(n){e.push(n);continue}}s.add(f(g,n,i,r,this._featureIdInfo)),e.push(D(m))}}_createObjectIdGenerator(e,t){let n=this._featureIdInfo.fieldName,r=e.fieldsIndex.get(n);if(r.type===`esriFieldTypeString`)return()=>r.name+`-`+Date.now().toString(16);let i=-1/0;for(let e of t)e.objectId&&(i=Math.max(i,e.objectId));return i=Math.max(0,i)+1,()=>i++}_assignObjectId(e,t,n=!1){let r=this._featureIdInfo.fieldName;e[r]=!n||!(r in t)?this._objectIdGenerator():t[r]}async _checkProjection(e){try{await m(o,e)}catch{throw new n(`geojson-layer`,`Projection not supported`)}}}export{F as default};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import{remove as e}from"../../../../core/arrayUtils.js";import t from"../../../../core/Error.js";import{getJsonType as n,isPoint as r}from"../../../../geometry/support/jsonTypeUtils.js";import{wgs84 as i}from"../../../../geometry/support/spatialReferenceUtils.js";import{convertFromFeatures as a,convertToFeature as o,convertFromFeature as s}from"../../featureConversionUtils.js";import{initialObjectId as c,findLastObjectIdFromFeatures as l}from"../../objectIdUtils.js";import u from"../../data/FeatureStore.js";import{checkProjectionSupport as d,project as f}from"../../data/projectionSupport.js";import{QueryEngine as p}from"../../data/QueryEngine.js";import{createDefaultAttributesFunction as m,createDefaultTemplate as h,createDrawingInfo as g}from"./clientSideDefaults.js";import{queryBinsCapabilities as _,loadGeometryEngineForSimplify as v,createFeatureEditErrorResult as y,mixAttributes as b,createFeatureEditSuccessResult as x,simplify as S}from"./sourceUtils.js";import C from"../../../support/FieldsIndex.js";import{kebabDict as w}from"../../../support/fieldType.js";import{getFieldDefaultLength as T,getFieldDefaultValue as E}from"../../../support/fieldUtils.js";import{utc as D}from"../../../../time/constants.js";const O=i,k={xmin:-180,ymin:-90,xmax:180,ymax:90,spatialReference:i},A={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:_};function j(e){return r(e)?e.z!=null:!!e.hasZ}function M(e){return r(e)?e.m!=null:!!e.hasM}function N(e,t){let n,r=[];if(t.type===`unique-id-composite`){let i=[];for(let n of t.fieldNames)e.attributes[n]?i.push(e.attributes[n]):r.push(n);n=r.length===0?JSON.stringify(i):null}else n=e.attributes[t.fieldName],n||r.push(t.fieldName);return{objectId:n,missingFields:r}}class P{constructor(){this._uniqueIdInfo=null,this._queryEngine=null,this._nextObjectId=null}destroy(){this._queryEngine?.destroy(),this._queryEngine=this._createDefaultAttributes=null}async load(e){let n=[],{features:r}=e,i=this._inferLayerProperties(r,e.fields),a=e.fields||[],o=e.hasM==null?!!i.hasM:e.hasM,s=e.hasZ==null?!!i.hasZ:e.hasZ,f=!e.spatialReference&&!i.spatialReference,_=f?O:e.spatialReference||i.spatialReference,v=f?k:null,y=e.geometryType||i.geometryType,b=!y,x=e.uniqueIdInfo,S=e.objectIdField??i.objectIdField,j=e.timeInfo,M=new C(a);if(!b&&(f&&n.push({name:`feature-layer:spatial-reference-not-found`,message:`Spatial reference not provided or found in features. Defaults to WGS84`}),!y))throw new t(`feature-layer:missing-property`,`geometryType not set and couldn't be inferred from the provided features`);if(x){let e=new Set(a.map(({name:e})=>e));if(!x.fields.every(t=>e.has(t))){let n=x.fields.filter(t=>!e.has(t));throw new t(`feature-layer:missing-property`,`UniqueIdFields not set and couldn't be found in the provided fields. Fields: `+n+` are mssing.`)}S=null}else if(!S)throw new t(`feature-layer:missing-property`,`objectIdField not set and uniqueIdInfo not provided.`);if(i.objectIdField&&S!==i.objectIdField&&(n.push({name:`feature-layer:duplicated-oid-field`,message:`Provided objectIdField "${S}" doesn't match the field name "${i.objectIdField}", found in the provided fields`}),S=i.objectIdField),S&&!i.objectIdField){let e=M.get(S);e?(S=e.name,e.type=`esriFieldTypeOID`,e.editable=!1,e.nullable=!1):a.unshift({alias:S,name:S,type:`esriFieldTypeOID`,editable:!1,nullable:!1})}for(let e of a){if(e.name??=e.alias,e.alias??=e.name,!e.name)throw new t(`feature-layer:invalid-field-name`,`field name is missing`,{field:e});if(e.name===S&&(e.type=`esriFieldTypeOID`),!w.jsonValues.includes(e.type))throw new t(`feature-layer:invalid-field-type`,`invalid type for field "${e.name}"`,{field:e});e.length??=T(e)}let N={};for(let e of a)if(e.type!==`esriFieldTypeOID`&&e.type!==`esriFieldTypeGlobalID`){let t=E(e);t!==void 0&&(N[e.name]=t)}if(j){if(j.startTimeField){let e=M.get(j.startTimeField);e?(j.startTimeField=e.name,e.type=`esriFieldTypeDate`):j.startTimeField=null}if(j.endTimeField){let e=M.get(j.endTimeField);e?(j.endTimeField=e.name,e.type=`esriFieldTypeDate`):j.endTimeField=null}if(j.trackIdField){let e=M.get(j.trackIdField);e?j.trackIdField=e.name:(j.trackIdField=null,n.push({name:`feature-layer:invalid-timeInfo-trackIdField`,message:`trackIdField is missing`,details:{timeInfo:j}}))}!j.startTimeField&&!j.endTimeField&&(n.push({name:`feature-layer:invalid-timeInfo`,message:`startTimeField and endTimeField are missing or invalid`,details:{timeInfo:j}}),j=null)}let P=M.dateFields.length?{timeZoneIANA:e.dateFieldsTimeZone??D}:null;this._createDefaultAttributes=m(N,S),this._uniqueIdInfo=e.uniqueIdInfo??void 0;let F={warnings:n,featureErrors:[],layerDefinition:{...A,drawingInfo:g(y),templates:h(N),extent:v,geometryType:y,objectIdField:S,fields:a,hasZ:s,hasM:o,timeInfo:j,dateFieldsTimeReference:P,uniqueIdInfo:this._uniqueIdInfo??void 0},assignedObjectIds:{}},I=this._uniqueIdInfo?.OIDFieldContainsHashValue?this._uniqueIdInfo.type===`simple`?{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 p({fieldsIndex:C.fromLayerJSON({fields:a,timeInfo:j,dateFieldsTimeReference:P}),geometryType:y,hasM:o,hasZ:s,featureIdInfo:I,spatialReference:_,featureStore:new u({geometryType:y,hasM:o,hasZ:s}),timeInfo:j}),!r?.length)return this._nextObjectId=c,F;if(S){let e=l(S,r);this._nextObjectId=e+1}return await d(r,_),this._loadInitialFeatures(F,r)}async applyEdits(e){let{spatialReference:t,geometryType:n}=this._queryEngine;return await Promise.all([v(t,n),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,t){let r,i,a=null,o=null,s=null;for(let t of e){let e=t.geometry;if(e!=null&&(a||=n(e),o||=e.spatialReference,r??=j(e),i??=M(e),a&&o&&r!=null&&i!=null))break}if(t&&t.length){let e=null;t.some(t=>{let n=t.type===`esriFieldTypeOID`,r=!t.type&&t.name&&t.name.toLowerCase()===`objectid`;return e=t,n||r})&&(s=e.name)}return{geometryType:a,spatialReference:o,objectIdField:s,hasM:i,hasZ:r}}async _loadInitialFeatures(e,t){let{geometryType:r,hasM:i,hasZ:o,spatialReference:s,featureStore:c,fieldsIndex:l,featureIdInfo:u}=this._queryEngine,d=[];for(let i of t){if(i.uid!=null&&(e.assignedObjectIds[i.uid]=-1),i.geometry&&r!==n(i.geometry)){e.featureErrors.push(y(`Incorrect geometry type.`));continue}let t=this._createDefaultAttributes(),a=b(l,t,i.attributes,!0);a?e.featureErrors.push(a):(this._assignObjectId(t,i.attributes,!0),i.attributes=t,i.uid&&(e.assignedObjectIds[i.uid]=N(i,u).objectId),i.geometry!=null&&(i.geometry=f(i.geometry,i.geometry.spatialReference,s)),d.push(i))}c.addMany(a([],d,r,o,i,u));let{fullExtent:p,timeExtent:m}=await this._queryEngine.fetchRecomputedExtents();if(e.layerDefinition.extent=p,m){let{start:t,end:n}=m;e.layerDefinition.timeInfo.timeExtent=[t,n]}return e}async _applyEdits(e){let{adds:t,updates:n,deletes:r}=e,i={addResults:[],deleteResults:[],updateResults:[],uidToObjectId:{}};if(t?.length&&this._applyAddEdits(i,t),n?.length&&this._applyUpdateEdits(i,n),r?.length){for(let e of r)i.deleteResults.push(x(e));this._queryEngine.featureStore.removeManyById(r)}let{fullExtent:a,timeExtent:o}=await this._queryEngine.fetchRecomputedExtents();return{extent:a,timeExtent:o,featureEditResults:i}}_applyAddEdits(t,r){let{addResults:i,updateResults:o}=t,{geometryType:s,hasM:c,hasZ:l,spatialReference:u,featureStore:d,featureIdInfo:p,fieldsIndex:m}=this._queryEngine,h=[],g=new Map;for(let a of r){if(a.geometry&&s!==n(a.geometry)){i.push(y(`Incorrect geometry type.`));continue}let r=this._createDefaultAttributes(),c=b(m,r,a.attributes);if(c){i.push(c);continue}this._assignObjectId(r,a.attributes),a.attributes=r;let{objectId:l,missingFields:_}=N(a,p);if(l){if(a.uid!=null&&(t.uidToObjectId[a.uid]=l),a.geometry!=null){let e=a.geometry.spatialReference??u;a.geometry=f(S(a.geometry,e),e,u)}h.push(a);let n=x(l);g.has(l)?e(h,g.get(l)):d.has(l)?o.push(n):i.push(n),g.set(l,a)}else{i.push(y(`Missing unique id field value for fields: ${_.join()}`));continue}}d.addMany(a([],h,s,l,c,p))}_applyUpdateEdits({updateResults:e},t){let{geometryType:r,hasM:i,hasZ:a,spatialReference:c,featureStore:l,fieldsIndex:u,featureIdInfo:d}=this._queryEngine;for(let p of t){let{attributes:t,geometry:m}=p,{objectId:h,missingFields:g}=N(p,d);if(h==null){let t=d.type===`unique-id-composite`?g:d.fieldName;e.push(y(`Identifier fields: ${t} missing`));continue}if(!l.has(h)){e.push(y(`Feature with object id ${h} missing`));continue}let _=o(l.getFeature(h),r,a,i);if(m!=null){if(r!==n(m)){e.push(y(`Incorrect geometry type.`));continue}let t=m.spatialReference??c;_.geometry=f(S(m,t),t,c)}if(t){let n=b(u,_.attributes,t);if(n){e.push(n);continue}}l.add(s(_,r,a,i,d)),e.push(x(h))}}_assignObjectId(e,t,n=!1){if(this._queryEngine.featureIdInfo.type===`object-id`){let r=this._queryEngine.featureIdInfo.fieldName;e[r]=n&&t&&isFinite(t[r])?t[r]:this._nextObjectId++}}}export{P as default};
2
+ import{remove as e}from"../../../../core/arrayUtils.js";import t from"../../../../core/Error.js";import{getJsonType as n,isPoint as r}from"../../../../geometry/support/jsonTypeUtils.js";import{wgs84 as i}from"../../../../geometry/support/spatialReferenceUtils.js";import{convertFromFeatures as a,convertToFeature as o,convertFromFeature as s}from"../../featureConversionUtils.js";import{initialObjectId as c,findLastObjectIdFromFeatures as l}from"../../objectIdUtils.js";import u from"../../data/FeatureStore.js";import{checkProjectionSupport as d,project as f}from"../../data/projectionSupport.js";import{QueryEngine as p}from"../../data/QueryEngine.js";import{createDefaultAttributesFunction as m,createDefaultTemplate as h,createDrawingInfo as g}from"./clientSideDefaults.js";import{tableCapabilities as _,layerCapabilities as v,loadGeometryEngineForSimplify as y,createFeatureEditErrorResult as b,mixAttributes as x,createFeatureEditSuccessResult as S,simplify as C}from"./sourceUtils.js";import w from"../../../support/FieldsIndex.js";import{kebabDict as T}from"../../../support/fieldType.js";import{getFieldDefaultLength as E,getFieldDefaultValue as D}from"../../../support/fieldUtils.js";import{utc as O}from"../../../../time/constants.js";const k=i,A={xmin:-180,ymin:-90,xmax:180,ymax:90,spatialReference:i};function j(e){return r(e)?e.z!=null:!!e.hasZ}function M(e){return r(e)?e.m!=null:!!e.hasM}function N(e,t){let n,r=[];if(t.type===`unique-id-composite`){let i=[];for(let n of t.fieldNames)e.attributes[n]?i.push(e.attributes[n]):r.push(n);n=r.length===0?JSON.stringify(i):null}else n=e.attributes[t.fieldName],n||r.push(t.fieldName);return{objectId:n,missingFields:r}}class P{constructor(){this._uniqueIdInfo=null,this._queryEngine=null,this._nextObjectId=null}destroy(){this._queryEngine?.destroy(),this._queryEngine=this._createDefaultAttributes=null}async load(e){let n=[],{features:r}=e,i=this._inferLayerProperties(r,e.fields),a=e.fields||[],o=e.hasM==null?!!i.hasM:e.hasM,s=e.hasZ==null?!!i.hasZ:e.hasZ,f=!e.spatialReference&&!i.spatialReference,y=f?k:e.spatialReference||i.spatialReference,b=f?A:null,x=e.geometryType||i.geometryType,S=!x,C=e.uniqueIdInfo,j=e.objectIdField??i.objectIdField,M=e.timeInfo,N=new w(a);if(!S&&(f&&n.push({name:`feature-layer:spatial-reference-not-found`,message:`Spatial reference not provided or found in features. Defaults to WGS84`}),!x))throw new t(`feature-layer:missing-property`,`geometryType not set and couldn't be inferred from the provided features`);if(C){let e=new Set(a.map(({name:e})=>e));if(!C.fields.every(t=>e.has(t))){let n=C.fields.filter(t=>!e.has(t));throw new t(`feature-layer:missing-property`,`UniqueIdFields not set and couldn't be found in the provided fields. Fields: `+n+` are mssing.`)}j=null}else if(!j)throw new t(`feature-layer:missing-property`,`objectIdField not set and uniqueIdInfo not provided.`);if(i.objectIdField&&j!==i.objectIdField&&(n.push({name:`feature-layer:duplicated-oid-field`,message:`Provided objectIdField "${j}" doesn't match the field name "${i.objectIdField}", found in the provided fields`}),j=i.objectIdField),j&&!i.objectIdField){let e=N.get(j);e?(j=e.name,e.type=`esriFieldTypeOID`,e.editable=!1,e.nullable=!1):a.unshift({alias:j,name:j,type:`esriFieldTypeOID`,editable:!1,nullable:!1})}for(let e of a){if(e.name??=e.alias,e.alias??=e.name,!e.name)throw new t(`feature-layer:invalid-field-name`,`field name is missing`,{field:e});if(e.name===j&&(e.type=`esriFieldTypeOID`),!T.jsonValues.includes(e.type))throw new t(`feature-layer:invalid-field-type`,`invalid type for field "${e.name}"`,{field:e});e.length??=E(e)}let P={};for(let e of a)if(e.type!==`esriFieldTypeOID`&&e.type!==`esriFieldTypeGlobalID`){let t=D(e);t!==void 0&&(P[e.name]=t)}if(M){if(M.startTimeField){let e=N.get(M.startTimeField);e?(M.startTimeField=e.name,e.type=`esriFieldTypeDate`):M.startTimeField=null}if(M.endTimeField){let e=N.get(M.endTimeField);e?(M.endTimeField=e.name,e.type=`esriFieldTypeDate`):M.endTimeField=null}if(M.trackIdField){let e=N.get(M.trackIdField);e?M.trackIdField=e.name:(M.trackIdField=null,n.push({name:`feature-layer:invalid-timeInfo-trackIdField`,message:`trackIdField is missing`,details:{timeInfo:M}}))}!M.startTimeField&&!M.endTimeField&&(n.push({name:`feature-layer:invalid-timeInfo`,message:`startTimeField and endTimeField are missing or invalid`,details:{timeInfo:M}}),M=null)}let F=N.dateFields.length?{timeZoneIANA:e.dateFieldsTimeZone??O}:null;this._createDefaultAttributes=m(P,j),this._uniqueIdInfo=e.uniqueIdInfo??void 0;let I={warnings:n,featureErrors:[],layerDefinition:{...S?_:v,drawingInfo:g(x),templates:h(P),extent:b,geometryType:x,objectIdField:j,fields:a,hasZ:s,hasM:o,timeInfo:M,dateFieldsTimeReference:F,uniqueIdInfo:this._uniqueIdInfo??void 0},assignedObjectIds:{}},L=this._uniqueIdInfo?.OIDFieldContainsHashValue?this._uniqueIdInfo.type===`simple`?{type:`unique-id-simple`,fieldName:this._uniqueIdInfo.fields[0]}:{type:`unique-id-composite`,fieldNames:this._uniqueIdInfo.fields}:{type:`object-id`,fieldName:j};if(this._queryEngine=new p({fieldsIndex:w.fromLayerJSON({fields:a,timeInfo:M,dateFieldsTimeReference:F}),geometryType:x,hasM:o,hasZ:s,featureIdInfo:L,spatialReference:y,featureStore:new u({geometryType:x,hasM:o,hasZ:s}),timeInfo:M}),!r?.length)return this._nextObjectId=c,I;if(j){let e=l(j,r);this._nextObjectId=e+1}return await d(r,y),this._loadInitialFeatures(I,r)}async applyEdits(e){let{spatialReference:t,geometryType:n}=this._queryEngine;return await Promise.all([y(t,n),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,t){let r,i,a=null,o=null,s=null;for(let t of e){let e=t.geometry;if(e!=null&&(a||=n(e),o||=e.spatialReference,r??=j(e),i??=M(e),a&&o&&r!=null&&i!=null))break}if(t&&t.length){let e=null;t.some(t=>{let n=t.type===`esriFieldTypeOID`,r=!t.type&&t.name&&t.name.toLowerCase()===`objectid`;return e=t,n||r})&&(s=e.name)}return{geometryType:a,spatialReference:o,objectIdField:s,hasM:i,hasZ:r}}async _loadInitialFeatures(e,t){let{geometryType:r,hasM:i,hasZ:o,spatialReference:s,featureStore:c,fieldsIndex:l,featureIdInfo:u}=this._queryEngine,d=[];for(let i of t){if(i.uid!=null&&(e.assignedObjectIds[i.uid]=-1),i.geometry&&r!==n(i.geometry)){e.featureErrors.push(b(`Incorrect geometry type.`));continue}let t=this._createDefaultAttributes(),a=x(l,t,i.attributes,!0);a?e.featureErrors.push(a):(this._assignObjectId(t,i.attributes,!0),i.attributes=t,i.uid&&(e.assignedObjectIds[i.uid]=N(i,u).objectId),i.geometry!=null&&(i.geometry=f(i.geometry,i.geometry.spatialReference,s)),d.push(i))}c.addMany(a([],d,r,o,i,u));let{fullExtent:p,timeExtent:m}=await this._queryEngine.fetchRecomputedExtents();if(e.layerDefinition.extent=p,m){let{start:t,end:n}=m;e.layerDefinition.timeInfo.timeExtent=[t,n]}return e}async _applyEdits(e){let{adds:t,updates:n,deletes:r}=e,i={addResults:[],deleteResults:[],updateResults:[],uidToObjectId:{}};if(t?.length&&this._applyAddEdits(i,t),n?.length&&this._applyUpdateEdits(i,n),r?.length){for(let e of r)i.deleteResults.push(S(e));this._queryEngine.featureStore.removeManyById(r)}let{fullExtent:a,timeExtent:o}=await this._queryEngine.fetchRecomputedExtents();return{extent:a,timeExtent:o,featureEditResults:i}}_applyAddEdits(t,r){let{addResults:i,updateResults:o}=t,{geometryType:s,hasM:c,hasZ:l,spatialReference:u,featureStore:d,featureIdInfo:p,fieldsIndex:m}=this._queryEngine,h=[],g=new Map;for(let a of r){if(a.geometry&&s!==n(a.geometry)){i.push(b(`Incorrect geometry type.`));continue}let r=this._createDefaultAttributes(),c=x(m,r,a.attributes);if(c){i.push(c);continue}this._assignObjectId(r,a.attributes),a.attributes=r;let{objectId:l,missingFields:_}=N(a,p);if(l){if(a.uid!=null&&(t.uidToObjectId[a.uid]=l),a.geometry!=null){let e=a.geometry.spatialReference??u;a.geometry=f(C(a.geometry,e),e,u)}h.push(a);let n=S(l);g.has(l)?e(h,g.get(l)):d.has(l)?o.push(n):i.push(n),g.set(l,a)}else{i.push(b(`Missing unique id field value for fields: ${_.join()}`));continue}}d.addMany(a([],h,s,l,c,p))}_applyUpdateEdits({updateResults:e},t){let{geometryType:r,hasM:i,hasZ:a,spatialReference:c,featureStore:l,fieldsIndex:u,featureIdInfo:d}=this._queryEngine;for(let p of t){let{attributes:t,geometry:m}=p,{objectId:h,missingFields:g}=N(p,d);if(h==null){let t=d.type===`unique-id-composite`?g:d.fieldName;e.push(b(`Identifier fields: ${t} missing`));continue}if(!l.has(h)){e.push(b(`Feature with object id ${h} missing`));continue}let _=o(l.getFeature(h),r,a,i);if(m!=null){if(r!==n(m)){e.push(b(`Incorrect geometry type.`));continue}let t=m.spatialReference??c;_.geometry=f(C(m,t),t,c)}if(t){let n=x(u,_.attributes,t);if(n){e.push(n);continue}}l.add(s(_,r,a,i,d)),e.push(S(h))}}_assignObjectId(e,t,n=!1){if(this._queryEngine.featureIdInfo.type===`object-id`){let r=this._queryEngine.featureIdInfo.fieldName;e[r]=n&&t&&isFinite(t[r])?t[r]:this._nextObjectId++}}}export{P as default};
@@ -5,4 +5,4 @@ import has from"../../../../core/has.js";import{clone as e}from"../../../../core
5
5
  ${n};
6
6
  }
7
7
  }
8
- `)();return()=>new r}catch{return()=>t?{[t]:null,...e}:{...e}}}function u(e){return s.test(e)?`.${e}`:`[${JSON.stringify(e)}]`}function d(t={}){return[{name:`New Feature`,description:``,prototype:{attributes:e(t)}}]}function f(e,r){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:r,supportsDelete:r,supportsEditing:r,supportsChangeTracking:!1,supportsQuery:!0,supportsQueryBins:!0,supportsQueryPivot:!1,supportsQueryAnalytics:!1,supportsQueryAttachments:!1,supportsQueryTopFeatures:!1,supportsResizeAttachments:!1,supportsSync:!1,supportsUpdate:r,supportsExceedsLimitStatistics:!0,supportsAsyncConvert3D:!1},query:n,queryRelated:{supportsCount:!0,supportsOrderBy:!0,supportsPagination:!0,supportsCacheHint:!1},queryTopFeatures:{supportsCacheHint:!1},queryAttributeBins:t,editing:{supportsGeometryUpdate:r,supportsGlobalId:!1,supportsReturnServiceEditsInSourceSpatialReference:!1,supportsRollbackOnFailure:!1,supportsTrueCurveUpdate:r,supportsTrueCurveUpdateByTrueCurveClientsOnly:!1,supportsUpdateWithoutM:!1,supportsUploadWithItemId:!1,supportsDeleteByAnonymous:!1,supportsDeleteByOthers:!1,supportsUpdateByAnonymous:!1,supportsUpdateByOthers:!1,supportsAsyncApplyEdits:!1,zDefault:void 0}}}export{f as createCapabilities,l as createDefaultAttributesFunction,d as createDefaultTemplate,o as createDrawingInfo};
8
+ `)();return()=>new r}catch{return()=>t?{[t]:null,...e}:{...e}}}function u(e){return s.test(e)?`.${e}`:`[${JSON.stringify(e)}]`}function d(t={}){return[{name:`New Feature`,description:``,prototype:{attributes:e(t)}}]}const f={...n,supportsSpatialAggregationStatistics:!1,supportedSpatialAggregationStatistics:{envelope:!1,centroid:!1,convexHull:!1},supportsCentroid:!1,supportsDistance:!1,supportsExtent:!1,supportsQuantization:!1,supportsQueryGeometry:!1,supportsDisjointSpatialRelationship:!1},p={...t,supportedStatistics:{...t.supportedStatistics,envelope:!1,centroid:!1,convexHull:!1}};function m(e,r,i=!1){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:r,supportsDelete:r,supportsEditing:r,supportsChangeTracking:!1,supportsQuery:!0,supportsQueryBins:!0,supportsQueryPivot:!1,supportsQueryAnalytics:!1,supportsQueryAttachments:!1,supportsQueryTopFeatures:!1,supportsResizeAttachments:!1,supportsSync:!1,supportsUpdate:r,supportsExceedsLimitStatistics:!0,supportsAsyncConvert3D:!1},query:i?f:n,queryRelated:{supportsCount:!0,supportsOrderBy:!0,supportsPagination:!0,supportsCacheHint:!1},queryTopFeatures:{supportsCacheHint:!1},queryAttributeBins:i?p:t,editing:{supportsGeometryUpdate:r,supportsGlobalId:!1,supportsReturnServiceEditsInSourceSpatialReference:!1,supportsRollbackOnFailure:!1,supportsTrueCurveUpdate:r,supportsTrueCurveUpdateByTrueCurveClientsOnly:!1,supportsUpdateWithoutM:!1,supportsUploadWithItemId:!1,supportsDeleteByAnonymous:!1,supportsDeleteByOthers:!1,supportsUpdateByAnonymous:!1,supportsUpdateByOthers:!1,supportsAsyncApplyEdits:!1,zDefault:void 0}}}export{m as createCapabilities,l as createDefaultAttributesFunction,d as createDefaultTemplate,o as createDrawingInfo};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import{parseDate as e}from"../../../../core/date.js";import{importLazily as t}from"../../../../core/importUtils.js";import{isPolygon as n,isPolyline as r}from"../../../../geometry/support/jsonTypeUtils.js";import{isValid as i}from"../../../../geometry/support/spatialReferenceUtils.js";import{validateFieldValue as a,validationErrorToString as o,isNumericField as s,sanitizedParseFloat as c,isStringField as l,isDateField as u,sanitizeNullFieldValue as d}from"../../../support/fieldUtils.js";class f{constructor(e){this.description=e,this.code=null}}class p{constructor(e){this.globalId=null,this.objectId=null,this.success=!1,this.uniqueId=null,this.error=new f(e)}}function m(e){return new p(e)}class h{constructor(e){this.globalId=null,this.success=!0,this.objectId=this.uniqueId=e}}function g(e){return new h(e)}const _=new Set;function v(e,t,n,r=!1){_.clear();for(let i in n){let s=e.get(i);if(!s)continue;let c=n[i],l=y(s,c);if(_.add(s.name),s&&(r||s.editable)){let e=a(s,l);if(!e)t[s.name]=l;else return m(o(e,s,l))}}for(let t of e.requiredFields??[])if(!_.has(t.name))return m(`missing required field "${t.name}"`);return null}function y(t,n){let r=n;return s(t)&&typeof n==`string`?r=c(n):l(t)&&n!=null&&typeof n!=`string`?r=String(n):u(t)&&typeof n==`string`&&(r=e(n)),d(r)}const b=t(()=>import(`../../../../geometry/operators/json/simplifyOperator.js`));function x(e,t){if(!n(e)&&!r(e)||!i(t))return e;let a=b.module;if(a==null)throw TypeError(`simplify operator not loaded`);return a.simplifyExecute({...e,spatialReference:t})??e}async function S(e,t){i(e)&&(t===`esriGeometryPolygon`||t===`esriGeometryPolyline`)&&await b.getImportPromise()}const C={supportsAutoIntervalBin:!0,supportsFixedIntervalBin:!0,supportsFixedBoundariesBin:!0,supportsDateBin:!0,supportsStackBy:!0,supportsSplitBy:!0,supportsNormalization:!0,supportedStatisticTypes:[`COUNT`,`SUM`,`AVG`,`VAR`,`STDDEV`,`MIN`,`MAX`,`PERCENTILE_CONT`,`PERCENTILE_DISC`,`CentroidAggregate`,`EnvelopeAggregate`,`ConvexHullAggregate`],supportedNormalizationTypes:[`field`,`log`,`naturalLog`,`percentOfTotal`,`squareRoot`]};export{m as createFeatureEditErrorResult,g as createFeatureEditSuccessResult,S as loadGeometryEngineForSimplify,v as mixAttributes,C as queryBinsCapabilities,x as simplify};
2
+ import{parseDate as e}from"../../../../core/date.js";import{importLazily as t}from"../../../../core/importUtils.js";import{isPolygon as n,isPolyline as r}from"../../../../geometry/support/jsonTypeUtils.js";import{isValid as i}from"../../../../geometry/support/spatialReferenceUtils.js";import{validateFieldValue as a,validationErrorToString as o,isNumericField as s,sanitizedParseFloat as c,isStringField as l,isDateField as u,sanitizeNullFieldValue as d}from"../../../support/fieldUtils.js";class f{constructor(e){this.description=e,this.code=null}}class p{constructor(e){this.globalId=null,this.objectId=null,this.success=!1,this.uniqueId=null,this.error=new f(e)}}function m(e){return new p(e)}class h{constructor(e){this.globalId=null,this.success=!0,this.objectId=this.uniqueId=e}}function g(e){return new h(e)}const _=new Set;function v(e,t,n,r=!1){_.clear();for(let i in n){let s=e.get(i);if(!s)continue;let c=n[i],l=y(s,c);if(_.add(s.name),s&&(r||s.editable)){let e=a(s,l);if(!e)t[s.name]=l;else return m(o(e,s,l))}}for(let t of e.requiredFields??[])if(!_.has(t.name))return m(`missing required field "${t.name}"`);return null}function y(t,n){let r=n;return s(t)&&typeof n==`string`?r=c(n):l(t)&&n!=null&&typeof n!=`string`?r=String(n):u(t)&&typeof n==`string`&&(r=e(n)),d(r)}const b=t(()=>import(`../../../../geometry/operators/json/simplifyOperator.js`));function x(e,t){if(!n(e)&&!r(e)||!i(t))return e;let a=b.module;if(a==null)throw TypeError(`simplify operator not loaded`);return a.simplifyExecute({...e,spatialReference:t})??e}async function S(e,t){i(e)&&(t===`esriGeometryPolygon`||t===`esriGeometryPolyline`)&&await b.getImportPromise()}const C={supportsAutoIntervalBin:!0,supportsFixedIntervalBin:!0,supportsFixedBoundariesBin:!0,supportsDateBin:!0,supportsStackBy:!0,supportsSplitBy:!0,supportsNormalization:!0,supportedStatisticTypes:[`COUNT`,`SUM`,`AVG`,`VAR`,`STDDEV`,`MIN`,`MAX`,`PERCENTILE_CONT`,`PERCENTILE_DISC`,`CentroidAggregate`,`EnvelopeAggregate`,`ConvexHullAggregate`],supportedNormalizationTypes:[`field`,`log`,`naturalLog`,`percentOfTotal`,`squareRoot`]},w={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:C},T={...w,supportsCoordinatesQuantization:!1,supportsReturningQueryGeometry:!1,advancedQueryCapabilities:{...w.advancedQueryCapabilities,supportsSpatialAggregationStatistics:!1,supportedSpatialAggregationStatistics:[],supportsReturningGeometryCentroid:!1,supportsQueryWithDistance:!1,supportsReturningQueryExtent:!1,supportsDisjointSpatialRel:!1},queryBinsCapabilities:{...C,supportedStatisticTypes:C.supportedStatisticTypes.filter(e=>e!==`EnvelopeAggregate`&&e!==`CentroidAggregate`&&e!==`ConvexHullAggregate`)}};export{m as createFeatureEditErrorResult,g as createFeatureEditSuccessResult,w as layerCapabilities,S as loadGeometryEngineForSimplify,v as mixAttributes,C as queryBinsCapabilities,x as simplify,T as tableCapabilities};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import{__decorate as e}from"tslib";import t from"../../../core/Error.js";import"../../../core/has.js";import n from"../../../core/Logger.js";import{property as r,subclass as i}from"../../../core/accessorSupport/decorators.js";import a from"../../../geometry/Extent.js";import o from"../../../geometry/Point.js";import s from"../../../geometry/SpatialReference.js";import c from"./BaseRaster.js";import{parse as l}from"./DBFParser.js";import{parsePAMInfo as u,parseSpatialReference as d}from"./pamParser.js";import{parseSignature as f,getPyramidIFDs as p,getMaskIFDs as m,parseIFD as h,parseGeoKeyDirectory as g,parseXMP as _,parseFieldValues as v,isBSQConfig as y,getTagNumericValues as b,getTagFirstNumericValue as x,getImageInfo as S}from"../formats/tiffParser.js";import{tiffTags as C,ifdTags as w}from"../formats/tiffTag.js";import{estimateStatisticsFromHistograms as T}from"../functions/stretchUtils.js";import E from"../transforms/PolynomialTransform.js";import D from"../../support/RasterInfo.js";import O from"../../support/RasterStorageInfo.js";import k from"../../../rest/support/FeatureSet.js";const A=`none-tiled tiff is not optimized for access, convert to COG and retry.`;let j=class extends c{constructor(){super(...arguments),this._files=null,this._headerInfo=null,this._bufferSize=1048576,this._chunkSize=10*1024**2,this._fileSize=-1,this._headerChunks=[],this.datasetFormat=`TIFF`}async fetchRawTile(e,t,n,r={}){if(!this._headerInfo?.isSupported||this.isBlockOutside(e,t,n))return null;let i=await this._fetchRawTiffTile(e,t,n,!1,r);if(i!=null&&this._headerInfo.hasMaskBand){let a=await this._fetchRawTiffTile(e,t,n,!0,r);a!=null&&a.pixels[0]instanceof Uint8Array&&(i.mask=a.pixels[0])}return i}async _open(e){this.datasetName=this.url.slice(this.url.lastIndexOf(`/`)+1,this.url.lastIndexOf(`.`)),await this._readHeader(e?.signal);let{rasterInfo:t}=this,{skipMapInfo:n,skipExtensions:r=[]}=this.ioConfig;if(!r.includes(`aux.xml`)&&!n){let n=await this._fetchAuxiliaryMetaData(e);n!=null&&N(n,t)}!r.includes(`vat.dbf`)&&t.bandCount===1&&t.pixelType===`u8`&&!n&&(t.attributeTable=await this._fetchAuxiliaryTable(e),t.attributeTable!=null&&(t.keyProperties.DataType=`thematic`)),n&&this.updateImageSpaceRasterInfo(t),this.updateTileInfo()}async _readHeader(e){try{let n=await this._fetchHeaderData(0,this._bufferSize,e);if(!n)throw new t(`tiffraster:open`,`failed to open url `+this.url);let{littleEndian:r,firstIFDPos:i,isBigTiff:a}=f(n),o=[],s={fileChunk:n,posIFD:i,fileOffset:0};await this._readIFDs(o,s,r,a?8:4,e);let{imageInfo:c,rasterInfo:l}=M(o),u=p(o),d=m(o);this._headerInfo={littleEndian:r,isBigTiff:a,ifds:o,pyramidIFDs:u,maskIFDs:d,...c},this._set(`rasterInfo`,l),this._validateHeader()}finally{this._headerChunks.length=0}}_validateHeader(){let e=this._headerInfo;if(!e.isSupported)throw new t(`tiffraster:open`,`this tiff is not supported: `+e.message);if(!e.tileWidth||!e.tileHeight)throw new t(`tiffraster:open`,A);this.rasterInfo.isPseudoSpatialReference&&n.getLogger(this).warn(`The spatial reference for this tiff is unsupported. Only EPSG spatial reference codes and Esri WKTs are supported.`);let r=e.ifds[0],i=r.get(`PREDICTOR`)?.values?.[0];if(r.get(`SAMPLEFORMAT`)?.values?.[0]===3&&i===2)throw new t(`tiffraster:open`,`unsupported horizontal difference encoding. Predictor=3 is supported for floating point data`)}async _fetchHeaderData(e,n,r){let i=this._getCachedHeaderData(e,n);if(i)return i;let a=Math.floor(e/this._bufferSize)*this._bufferSize,o=a+Math.max(1,Math.ceil((n-a)/this._bufferSize))*this._bufferSize,s=this._getMissingHeaderRanges(a,o).map(async e=>{let{from:t,to:n}=e,i=await this._fetchOffsets(t,n,r),a=this._fileSize;return{chunk:i,fileOffset:t,isEOF:a>0?t+i.byteLength>=a:i.byteLength<n-t+1}}),c=await Promise.all(s);this._headerChunks.push(...c),this._headerChunks.sort((e,t)=>e.fileOffset-t.fileOffset);let l=this._getCachedHeaderData(e,n);if(!l)throw new t(`tiffraster:open`,`failed to fetch byte range ${e}-${n} from ${this.url}`);return l}_getCachedHeaderData(e,t){let n=[],r=e;for(let{chunk:i,fileOffset:a,isEOF:o}of this._headerChunks){if(a+i.byteLength-1<r)continue;if(a>r)return null;let s=r-a,c=Math.min(t-a+1,i.byteLength);if(n.push({chunk:i,start:s,end:c}),r=a+c,r>t||o&&c===i.byteLength){let t=new Uint8Array(r-e),i=0;for(let e of n){let n=new Uint8Array(e.chunk,e.start,e.end-e.start);t.set(n,i),i+=n.byteLength}return t.buffer}}return null}_getMissingHeaderRanges(e,t){let n=[],r=(e,t)=>{let r=Math.floor(e/this._bufferSize)*this._bufferSize,i=Math.ceil(t/this._bufferSize)*this._bufferSize;n.push({from:r,to:i})},i=e;for(let{chunk:e,fileOffset:a,isEOF:o}of this._headerChunks){let s=a+e.byteLength-1;if(!(s<i)&&(a>i&&r(i,Math.min(a-1,t)),i=Math.max(i,s+1),i>t||o))return n}return i<=t&&r(i,t),n}async _validateOrFetchHeaderBuffer(e,n){let{fileChunk:r,fileOffset:i,posIFD:a}=e;if(a+8>=r.byteLength||a<0){if(i=a+i,i<0)throw new t(`tiffraster:open`,`invalid IFD position ${i}. failed to open url ${this.url}`);r=await this._fetchHeaderData(i,i+this._bufferSize/2,n),a=0}return{fileChunk:r,fileOffset:i,posIFD:a}}async _readIFDs(e,n,r,i=4,a){if(!n.posIFD)return null;n=await this._validateOrFetchHeaderBuffer(n,a);let o=await this._readIFD(n,r,C,i,a);if(!o?.ifd)throw new t(`tiffraster:open`,`cannot parse tiff header. failed to open url `+this.url);if(e.push(o.ifd),!o.nextIFD)return null;n.posIFD=o.nextIFD-n.fileOffset,await this._readIFDs(e,n,r,i,a)}async _readIFD(e,n,r=C,i=4,a){let{fileChunk:o,posIFD:s,fileOffset:c}=e;if(!e.fileChunk)return null;let l=h(o,n,s,c,r,i);if(l.success){let{ifd:e}=l;if(!e)throw new t(`tiffraster:open`,`cannot parse tiff header. failed to open url `+this.url);if(!this.ioConfig.loadFullMetadata&&r===C&&(!e.has(`TILEWIDTH`)||!e.has(`TILELENGTH`)))throw new t(`tiffraster:open`,A);let i=[];e.forEach(e=>{e.values||i.push(e)}),i.length>0&&await this._fillOffsets(i,n,l.nextIFD,a),g(e),_(e);for(let[t,r]of w){let i=e.get(t),l=i?.data!=null&&Array.from(i.data.values()).some(e=>e.values==null&&e.offlineOffsetSize!=null);if(i&&(!i.data||l)){s=i.valueOffset-c;let e=await this._validateOrFetchHeaderBuffer({fileChunk:o,posIFD:s,fileOffset:c},a);i.data=(await this._readIFD(e,n,r,4,a))?.ifd}}return l}return l.requiredBufferSize?(o=await this._fetchHeaderData(c,c+s+l.requiredBufferSize+8,a),o.byteLength<s+l.requiredBufferSize?null:(e.fileChunk=o,e.fileOffset=c,this._readIFD(e,n,r,i,a))):null}async _fillOffsets(e,t,n,r){let i=e.filter(e=>e.offlineOffsetSize!=null);if(i.length===0)return;let a=i.map(e=>e.offlineOffsetSize),o=Math.min.apply(null,a.map(e=>e[0])),s=Math.max.apply(null,a.map(e=>e[0]+e[1])),c=a.length===1||s-o<=this._bufferSize;if(!c&&a.length>1&&(a.sort((e,t)=>e[0]-t[0]),c=a.reduce((e,t)=>e===t[0]?t[0]+t[1]:0,a[0][0])===s),c){let e=Math.max(s,o+this._bufferSize/4),n=await this._fetchHeaderData(o,e,r);i.forEach(e=>v(n,t,e,o));return}let l=i.map(async e=>{let n=e.offlineOffsetSize,i=await this._fetchHeaderData(n[0],n[1]+n[0],r);v(i,t,e,n[0])});await Promise.all(l)}async _fetchOffsets(e,t,n){let r=[],i=this._chunkSize;this._fileSize>0&&(t=Math.min(t,this._fileSize-1));let a=Math.ceil((t-e+1)/i),o=e;for(let e=0;e<a;e++)r.push(this.request(this.url,{range:{from:o,to:e===a-1?t:o+i-1},responseType:`array-buffer`,signal:n})),o+=i;let s=await Promise.all(r);if(this._fileSize===-1&&s[0].httpStatus===206){let e=s[0].getHeader?.(`Content-Range`),t=Number(e?.split(`/`)[1]);Number.isFinite(t)&&(this._fileSize=t)}if(s.length===1)return s[0].data;let c=s.reduce((e,t)=>e+t.data.byteLength,0),l=new Uint8Array(c),u=0;for(let e of s)l.set(new Uint8Array(e.data),u),u+=e.data.byteLength;return l.buffer}async _fetchRawTiffTile(e,t,n,r,i={}){let a=this._getTileLocation(e,t,n,r);if(!a)return null;let{ranges:o,actualTileWidth:s,actualTileHeight:c,ifd:l}=a,u=o.map(e=>this.request(this.url,{range:e,responseType:`array-buffer`,signal:i.signal})),d=await Promise.all(u),f=d.map(e=>e.data.byteLength).reduce((e,t)=>e+t),p=d.length===1?d[0].data:new ArrayBuffer(f),m=[0],h=[0];if(d.length>1){let e=new Uint8Array(p);for(let t=0,n=0;t<d.length;t++){let r=d[t].data;e.set(new Uint8Array(r),n),m[t]=n,n+=r.byteLength,h[t]=r.byteLength}}let{blockWidth:g,blockHeight:_}=this.getBlockWidthHeight(e),v=await this.decodePixelBlock(p,{format:`tiff`,customOptions:{headerInfo:this._headerInfo,ifd:l,offsets:m,sizes:h},width:g,height:_,planes:null,pixelType:null});if(v==null)return null;if(s!==g||c!==_){let e=v.mask;if(e)for(let t=0;t<_;t++){let n=t*g;if(t<c)for(let t=s;t<g;t++)e[n+t]=0;else for(let t=0;t<g;t++)e[n+t]=0}else{e=new Uint8Array(g*_),v.mask=e;for(let t=0;t<c;t++){let n=t*g;for(let t=0;t<s;t++)e[n+t]=1}}}return v}_getTileLocation(e,t,n,r=!1){let{firstPyramidLevel:i,blockBoundary:a}=this.rasterInfo.storageInfo,o=e===0?0:e-(i-1),{_headerInfo:s}=this;if(!s)return null;let c=r?s.maskIFDs[o]:o===0?s.ifds[0]:s.pyramidIFDs[o-1];if(!c)return null;let l=y(c,s),u=b(c,`TILEOFFSETS`),d=b(c,`TILEBYTECOUNTS`);if(!u?.length||!d?.length)return null;let{minRow:f,minCol:p,maxRow:m,maxCol:h}=a[o];if(t>m||n>h||t<f||n<p)return null;let g=x(c,`IMAGEWIDTH`),_=x(c,`IMAGELENGTH`),v=x(c,`TILEWIDTH`),S=x(c,`TILELENGTH`),C=[];if(l){let{bandCount:e}=this.rasterInfo;for(let r=0;r<e;r++){let e=r*(m+1)*(h+1)+t*(h+1)+n;C[r]={from:u[e],to:u[e]+d[e]-1}}}else{let e=t*(h+1)+n;C.push({from:u[e],to:u[e]+d[e]-1})}for(let e=0;e<C.length;e++)if(C[e].from==null||!C[e].to||C[e].to<0)return null;return{ranges:C,ifd:c,actualTileWidth:n===h&&g%v||v,actualTileHeight:t===m&&_%S||S}}async _fetchAuxiliaryMetaData(e){try{let{data:t}=await this.request(this.url+`.aux.xml`,{responseType:`xml`,signal:e?.signal});return u(t)}catch{return null}}async _fetchAuxiliaryTable(e){try{let{data:t}=await this.request(this.url+`.vat.dbf`,{responseType:`array-buffer`,signal:e?.signal}),n=l(t);return n?.recordSet?k.fromJSON(n.recordSet):null}catch{return null}}};e([r()],j.prototype,`_files`,void 0),e([r()],j.prototype,`_headerInfo`,void 0),e([r()],j.prototype,`_bufferSize`,void 0),e([r()],j.prototype,`_chunkSize`,void 0),e([r()],j.prototype,`_fileSize`,void 0),e([r()],j.prototype,`_headerChunks`,void 0),e([r({type:String,json:{write:!0}})],j.prototype,`datasetFormat`,void 0),j=e([i(`esri.layers.raster.datasets.TIFFRaster`)],j);function M(e){let t=S(e),{width:n,height:r,tileWidth:i,tileHeight:c,planes:l,pixelType:u,compression:f,firstPyramidLevel:p,maximumPyramidLevel:m,pyramidBlockWidth:h,pyramidBlockHeight:g,pyramidResolutions:_,tileBoundary:v,affine:y,metadata:b,colormap:x}=t,C=t.extent.spatialReference?.wkt||t.extent.spatialReference?.wkid,w=d(C),T=!!t.isPseudoGeographic;w??=(T=!0,new s({wkid:3857}));let k=new a({...t.extent,spatialReference:w}),A=k?new o({x:k.xmin,y:k.ymax,spatialReference:w}):new o({x:0,y:0}),j=new O({blockWidth:i,blockHeight:c,pyramidBlockWidth:h,pyramidBlockHeight:g,compression:f,origin:A,firstPyramidLevel:p,maximumPyramidLevel:m,pyramidResolutions:_,blockBoundary:v}),M=new o({x:(k.xmax-k.xmin)/n,y:(k.ymax-k.ymin)/r,spatialReference:w}),N=b?{BandProperties:b.bandProperties,DataType:b.dataType}:{},P=new D({width:n,height:r,bandCount:l,pixelType:u,pixelSize:M,storageInfo:j,spatialReference:w,isPseudoSpatialReference:T,keyProperties:N,extent:k,colormap:x,statistics:b?b.statistics:null});if(y?.length&&(P.nativeExtent=new a({xmin:-.5,ymin:.5-r,xmax:n-.5,ymax:.5,spatialReference:w}),P.transform=new E({polynomialOrder:1,forwardCoefficients:[y[2]+y[0]/2,y[5]-y[3]/2,y[0],y[3],-y[1],-y[4]]}),P.extent=P.transform.forwardTransform(P.nativeExtent),P.pixelSize=new o({x:(k.xmax-k.xmin)/n,y:(k.ymax-k.ymin)/r,spatialReference:w}),j.origin.x=-.5,j.origin.y=.5),_){let{x:e,y:t}=P.pixelSize;_.forEach(n=>{n.x*=e,n.y*=t})}return{imageInfo:t,rasterInfo:P}}function N(e,t){if(t.statistics=e.statistics??t.statistics,t.histograms=e.histograms,e.histograms&&t.statistics==null&&(t.statistics=T(e.histograms)),e.transform&&t.transform==null){t.transform=e.transform,t.nativeExtent=t.extent;let n=t.transform.forwardTransform(t.nativeExtent);t.pixelSize=new o({x:(n.xmax-n.xmin)/t.width,y:(n.ymax-n.ymin)/t.height,spatialReference:t.spatialReference}),t.extent=n}t.isPseudoSpatialReference&&e.spatialReference&&(t.spatialReference=e.spatialReference,t.extent.spatialReference=t.nativeExtent.spatialReference=t.storageInfo.origin.spatialReference=t.spatialReference)}const P=j;export{P as default};
2
+ import{__decorate as e}from"tslib";import t from"../../../core/Error.js";import"../../../core/has.js";import n from"../../../core/Logger.js";import{property as r,subclass as i}from"../../../core/accessorSupport/decorators.js";import a from"../../../geometry/Extent.js";import o from"../../../geometry/Point.js";import s from"../../../geometry/SpatialReference.js";import c from"./BaseRaster.js";import{parse as l}from"./DBFParser.js";import{parsePAMInfo as u,parseSpatialReference as d}from"./pamParser.js";import{parseSignature as f,getPyramidIFDs as p,getMaskIFDs as m,parseIFD as h,parseGeoKeyDirectory as g,parseXMP as _,parseFieldValues as v,isBSQConfig as y,getTagNumericValues as b,getTagFirstNumericValue as x,getImageInfo as S}from"../formats/tiffParser.js";import{tiffTags as C,ifdTags as w}from"../formats/tiffTag.js";import{estimateStatisticsFromHistograms as T}from"../functions/stretchUtils.js";import E from"../transforms/PolynomialTransform.js";import D from"../../support/RasterInfo.js";import O from"../../support/RasterStorageInfo.js";import k from"../../../rest/support/FeatureSet.js";const A=`none-tiled tiff is not optimized for access, convert to COG and retry.`;let j=class extends c{constructor(){super(...arguments),this._bufferSize=1048576,this._chunkSize=10*1024**2,this._fileSize=-1,this._headerChunks=[],this.datasetFormat=`TIFF`,this.headerInfo=null}async fetchRawTile(e,t,n,r={}){if(!this.headerInfo?.isSupported||this.isBlockOutside(e,t,n))return null;let i=await this._fetchRawTiffTile(e,t,n,!1,r);if(i!=null&&this.headerInfo.hasMaskBand){let a=await this._fetchRawTiffTile(e,t,n,!0,r);a!=null&&a.pixels[0]instanceof Uint8Array&&(i.mask=a.pixels[0])}return i}async _open(e){this.datasetName=this.url.slice(this.url.lastIndexOf(`/`)+1,this.url.lastIndexOf(`.`)),await this._readHeader(e?.signal),await this._fetchAllAuxData(),this.ioConfig.skipMapInfo&&this.updateImageSpaceRasterInfo(this.rasterInfo),this.updateTileInfo()}async _readHeader(e){try{let n=await this._fetchHeaderData(0,this._bufferSize,e);if(!n)throw new t(`tiffraster:open`,`failed to open url `+this.url);let{littleEndian:r,firstIFDPos:i,isBigTiff:a}=f(n),o=[],s={fileChunk:n,posIFD:i,fileOffset:0};await this._readIFDs(o,s,r,a?8:4,e);let{imageInfo:c,rasterInfo:l}=M(o),u=p(o),d=m(o);this.headerInfo={littleEndian:r,isBigTiff:a,ifds:o,pyramidIFDs:u,maskIFDs:d,...c},this._set(`rasterInfo`,l),this._validateHeader()}finally{this._headerChunks.length=0}}_validateHeader(){let e=this.headerInfo;if(!e.isSupported)throw new t(`tiffraster:open`,`this tiff is not supported: `+e.message);if(!e.tileWidth||!e.tileHeight)throw new t(`tiffraster:open`,A);this.rasterInfo.isPseudoSpatialReference&&n.getLogger(this).warn(`The spatial reference for this tiff is unsupported. Only EPSG spatial reference codes and Esri WKTs are supported.`);let r=e.ifds[0],i=r.get(`PREDICTOR`)?.values?.[0];if(r.get(`SAMPLEFORMAT`)?.values?.[0]===3&&i===2)throw new t(`tiffraster:open`,`unsupported horizontal difference encoding. Predictor=3 is supported for floating point data`)}async _fetchHeaderData(e,n,r){let i=this._getCachedHeaderData(e,n);if(i)return i;let a=Math.floor(e/this._bufferSize)*this._bufferSize,o=a+Math.max(1,Math.ceil((n-a)/this._bufferSize))*this._bufferSize,s=this._getMissingHeaderRanges(a,o).map(async e=>{let{from:t,to:n}=e,i=await this._fetchOffsets(t,n,r),a=this._fileSize;return{chunk:i,fileOffset:t,isEOF:a>0?t+i.byteLength>=a:i.byteLength<n-t+1}}),c=await Promise.all(s);this._headerChunks.push(...c),this._headerChunks.sort((e,t)=>e.fileOffset-t.fileOffset);let l=this._getCachedHeaderData(e,n);if(!l)throw new t(`tiffraster:open`,`failed to fetch byte range ${e}-${n} from ${this.url}`);return l}_getCachedHeaderData(e,t){let n=[],r=e;for(let{chunk:i,fileOffset:a,isEOF:o}of this._headerChunks){if(a+i.byteLength-1<r)continue;if(a>r)return null;let s=r-a,c=Math.min(t-a+1,i.byteLength);if(n.push({chunk:i,start:s,end:c}),r=a+c,r>t||o&&c===i.byteLength){let t=new Uint8Array(r-e),i=0;for(let e of n){let n=new Uint8Array(e.chunk,e.start,e.end-e.start);t.set(n,i),i+=n.byteLength}return t.buffer}}return null}_getMissingHeaderRanges(e,t){let n=[],r=(e,t)=>{let r=Math.floor(e/this._bufferSize)*this._bufferSize,i=Math.ceil(t/this._bufferSize)*this._bufferSize;n.push({from:r,to:i})},i=e;for(let{chunk:e,fileOffset:a,isEOF:o}of this._headerChunks){let s=a+e.byteLength-1;if(!(s<i)&&(a>i&&r(i,Math.min(a-1,t)),i=Math.max(i,s+1),i>t||o))return n}return i<=t&&r(i,t),n}async _validateOrFetchHeaderBuffer(e,n){let{fileChunk:r,fileOffset:i,posIFD:a}=e;if(a+8>=r.byteLength||a<0){if(i=a+i,i<0)throw new t(`tiffraster:open`,`invalid IFD position ${i}. failed to open url ${this.url}`);r=await this._fetchHeaderData(i,i+this._bufferSize/2,n),a=0}return{fileChunk:r,fileOffset:i,posIFD:a}}async _readIFDs(e,n,r,i=4,a){if(!n.posIFD)return null;n=await this._validateOrFetchHeaderBuffer(n,a);let o=await this._readIFD(n,r,C,i,a);if(!o?.ifd)throw new t(`tiffraster:open`,`cannot parse tiff header. failed to open url `+this.url);if(e.push(o.ifd),!o.nextIFD)return null;n.posIFD=o.nextIFD-n.fileOffset,await this._readIFDs(e,n,r,i,a)}async _readIFD(e,n,r=C,i=4,a){let{fileChunk:o,posIFD:s,fileOffset:c}=e;if(!e.fileChunk)return null;let l=h(o,n,s,c,r,i);if(l.success){let{ifd:e}=l;if(!e)throw new t(`tiffraster:open`,`cannot parse tiff header. failed to open url `+this.url);if(!this.ioConfig.loadFullMetadata&&r===C&&(!e.has(`TILEWIDTH`)||!e.has(`TILELENGTH`)))throw new t(`tiffraster:open`,A);let i=[];e.forEach(e=>{e.values||i.push(e)}),i.length>0&&await this._fillOffsets(i,n,l.nextIFD,a),g(e),_(e);for(let[t,r]of w){let i=e.get(t),l=i?.data!=null&&Array.from(i.data.values()).some(e=>e.values==null&&e.offlineOffsetSize!=null);if(i&&(!i.data||l)){s=i.valueOffset-c;let e=await this._validateOrFetchHeaderBuffer({fileChunk:o,posIFD:s,fileOffset:c},a);i.data=(await this._readIFD(e,n,r,4,a))?.ifd}}return l}return l.requiredBufferSize?(o=await this._fetchHeaderData(c,c+s+l.requiredBufferSize+8,a),o.byteLength<s+l.requiredBufferSize?null:(e.fileChunk=o,e.fileOffset=c,this._readIFD(e,n,r,i,a))):null}async _fillOffsets(e,t,n,r){let i=e.filter(e=>e.offlineOffsetSize!=null);if(i.length===0)return;let a=i.map(e=>e.offlineOffsetSize),o=Math.min.apply(null,a.map(e=>e[0])),s=Math.max.apply(null,a.map(e=>e[0]+e[1])),c=a.length===1||s-o<=this._bufferSize;if(!c&&a.length>1&&(a.sort((e,t)=>e[0]-t[0]),c=a.reduce((e,t)=>e===t[0]?t[0]+t[1]:0,a[0][0])===s),c){let e=Math.max(s,o+this._bufferSize/4),n=await this._fetchHeaderData(o,e,r);i.forEach(e=>v(n,t,e,o));return}let l=i.map(async e=>{let n=e.offlineOffsetSize,i=await this._fetchHeaderData(n[0],n[1]+n[0],r);v(i,t,e,n[0])});await Promise.all(l)}async _fetchOffsets(e,t,n){let r=[],i=this._chunkSize;this._fileSize>0&&(t=Math.min(t,this._fileSize-1));let a=Math.ceil((t-e+1)/i),o=e;for(let e=0;e<a;e++)r.push(this.request(this.url,{range:{from:o,to:e===a-1?t:o+i-1},responseType:`array-buffer`,signal:n})),o+=i;let s=await Promise.all(r);if(this._fileSize===-1&&s[0].httpStatus===206){let e=s[0].getHeader?.(`Content-Range`),t=Number(e?.split(`/`)[1]);Number.isFinite(t)&&(this._fileSize=t)}if(s.length===1)return s[0].data;let c=s.reduce((e,t)=>e+t.data.byteLength,0),l=new Uint8Array(c),u=0;for(let e of s)l.set(new Uint8Array(e.data),u),u+=e.data.byteLength;return l.buffer}async _fetchRawTiffTile(e,t,n,r,i={}){let a=this._getTileLocation(e,t,n,r);if(!a)return null;let{ranges:o,actualTileWidth:s,actualTileHeight:c,ifd:l}=a,u=o.map(e=>this.request(this.url,{range:e,responseType:`array-buffer`,signal:i.signal})),d=await Promise.all(u),f=d.map(e=>e.data.byteLength).reduce((e,t)=>e+t),p=d.length===1?d[0].data:new ArrayBuffer(f),m=[0],h=[0];if(d.length>1){let e=new Uint8Array(p);for(let t=0,n=0;t<d.length;t++){let r=d[t].data;e.set(new Uint8Array(r),n),m[t]=n,n+=r.byteLength,h[t]=r.byteLength}}let{blockWidth:g,blockHeight:_}=this.getBlockWidthHeight(e),v=await this.decodePixelBlock(p,{format:`tiff`,customOptions:{headerInfo:this.headerInfo,ifd:l,offsets:m,sizes:h},width:g,height:_,planes:null,pixelType:null});if(v==null)return null;if(s!==g||c!==_){let e=v.mask;if(e)for(let t=0;t<_;t++){let n=t*g;if(t<c)for(let t=s;t<g;t++)e[n+t]=0;else for(let t=0;t<g;t++)e[n+t]=0}else{e=new Uint8Array(g*_),v.mask=e;for(let t=0;t<c;t++){let n=t*g;for(let t=0;t<s;t++)e[n+t]=1}}}return v}_getTileLocation(e,t,n,r=!1){let{firstPyramidLevel:i,blockBoundary:a}=this.rasterInfo.storageInfo,o=e===0?0:e-(i-1),{headerInfo:s}=this;if(!s)return null;let c=r?s.maskIFDs[o]:o===0?s.ifds[0]:s.pyramidIFDs[o-1];if(!c)return null;let l=y(c,s),u=b(c,`TILEOFFSETS`),d=b(c,`TILEBYTECOUNTS`);if(!u?.length||!d?.length)return null;let{minRow:f,minCol:p,maxRow:m,maxCol:h}=a[o];if(t>m||n>h||t<f||n<p)return null;let g=x(c,`IMAGEWIDTH`),_=x(c,`IMAGELENGTH`),v=x(c,`TILEWIDTH`),S=x(c,`TILELENGTH`),C=[];if(l){let{bandCount:e}=this.rasterInfo;for(let r=0;r<e;r++){let e=r*(m+1)*(h+1)+t*(h+1)+n;C[r]={from:u[e],to:u[e]+d[e]-1}}}else{let e=t*(h+1)+n;C.push({from:u[e],to:u[e]+d[e]-1})}for(let e=0;e<C.length;e++)if(C[e].from==null||!C[e].to||C[e].to<0)return null;return{ranges:C,ifd:c,actualTileWidth:n===h&&g%v||v,actualTileHeight:t===m&&_%S||S}}async _fetchAllAuxData(e){if(this.ioConfig.skipMapInfo)return;let{rasterInfo:t}=this,{skipExtensions:n=[]}=this.ioConfig,r=n.includes(`aux.xml`)?Promise.resolve(null):this._fetchAuxiliaryMetaData(e),i=!n.includes(`vat.dbf`)&&t.bandCount===1&&t.pixelType===`u8`?this._fetchAuxiliaryTable(e):Promise.resolve(null),[a,o]=await Promise.all([r,i]);a!=null&&N(a,t),o!=null&&(t.attributeTable=o,t.keyProperties.DataType=`thematic`)}async _fetchAuxiliaryMetaData(e){try{let{data:t}=await this.request(this.url+`.aux.xml`,{responseType:`xml`,signal:e?.signal});return u(t)}catch{return null}}async _fetchAuxiliaryTable(e){try{let{data:t}=await this.request(this.url+`.vat.dbf`,{responseType:`array-buffer`,signal:e?.signal}),n=l(t);return n?.recordSet?k.fromJSON(n.recordSet):null}catch{return null}}};e([r()],j.prototype,`_bufferSize`,void 0),e([r()],j.prototype,`_chunkSize`,void 0),e([r()],j.prototype,`_fileSize`,void 0),e([r()],j.prototype,`_headerChunks`,void 0),e([r({type:String,json:{write:!0}})],j.prototype,`datasetFormat`,void 0),e([r()],j.prototype,`headerInfo`,void 0),j=e([i(`esri.layers.raster.datasets.TIFFRaster`)],j);function M(e){let t=S(e),{width:n,height:r,tileWidth:i,tileHeight:c,planes:l,pixelType:u,compression:f,firstPyramidLevel:p,maximumPyramidLevel:m,pyramidBlockWidth:h,pyramidBlockHeight:g,pyramidResolutions:_,tileBoundary:v,affine:y,metadata:b,colormap:x}=t,C=t.extent.spatialReference?.wkt||t.extent.spatialReference?.wkid,w=d(C),T=!!t.isPseudoGeographic;w??=(T=!0,new s({wkid:3857}));let k=new a({...t.extent,spatialReference:w}),A=k?new o({x:k.xmin,y:k.ymax,spatialReference:w}):new o({x:0,y:0}),j=new O({blockWidth:i,blockHeight:c,pyramidBlockWidth:h,pyramidBlockHeight:g,compression:f,origin:A,firstPyramidLevel:p,maximumPyramidLevel:m,pyramidResolutions:_,blockBoundary:v}),M=new o({x:(k.xmax-k.xmin)/n,y:(k.ymax-k.ymin)/r,spatialReference:w}),N=b?{BandProperties:b.bandProperties,DataType:b.dataType}:{},P=new D({width:n,height:r,bandCount:l,pixelType:u,pixelSize:M,storageInfo:j,spatialReference:w,isPseudoSpatialReference:T,keyProperties:N,extent:k,colormap:x,statistics:b?b.statistics:null});if(y?.length&&(P.nativeExtent=new a({xmin:-.5,ymin:.5-r,xmax:n-.5,ymax:.5,spatialReference:w}),P.transform=new E({polynomialOrder:1,forwardCoefficients:[y[2]+y[0]/2,y[5]-y[3]/2,y[0],y[3],-y[1],-y[4]]}),P.extent=P.transform.forwardTransform(P.nativeExtent),P.pixelSize=new o({x:(k.xmax-k.xmin)/n,y:(k.ymax-k.ymin)/r,spatialReference:w}),j.origin.x=-.5,j.origin.y=.5),_){let{x:e,y:t}=P.pixelSize;_.forEach(n=>{n.x*=e,n.y*=t})}return{imageInfo:t,rasterInfo:P}}function N(e,t){if(t.statistics=e.statistics??t.statistics,t.histograms=e.histograms,e.histograms&&t.statistics==null&&(t.statistics=T(e.histograms)),e.transform&&t.transform==null){t.transform=e.transform,t.nativeExtent=t.extent;let n=t.transform.forwardTransform(t.nativeExtent);t.pixelSize=new o({x:(n.xmax-n.xmin)/t.width,y:(n.ymax-n.ymin)/t.height,spatialReference:t.spatialReference}),t.extent=n}t.isPseudoSpatialReference&&e.spatialReference&&(t.spatialReference=e.spatialReference,t.extent.spatialReference=t.nativeExtent.spatialReference=t.storageInfo.origin.spatialReference=t.spatialReference)}const P=j;export{P as default};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import e from"../../../core/Error.js";import{throwIfAborted as t}from"../../../core/promiseUtils.js";import n from"../../../geometry/Extent.js";import r from"../../../geometry/Point.js";import{getByteCount as i}from"../formats/pixelRangeUtils.js";import{convertPixelSize as a,snapToRaster as o,clip as s}from"../functions/clipUtils.js";import{transformPixels as c}from"../functions/pixelTransformUtils.js";import{mapPixelValueToAttribute as l,mosaic as u,pixelIdFieldName as d,convertPixelBlockToFeatures as f,getValidPixels as p,countCategoricalPixels as m}from"../functions/pixelUtils.js";import{load as h,projectPolygon as g}from"../functions/rasterProjectionHelper.js";import{computeBoxStatistics as _,computeStatisticsHistograms as v}from"../functions/stretchUtils.js";import y from"../../support/Field.js";import b from"../../support/PixelBlock.js";import{getBandNames as x}from"../../../renderers/support/rasterRendererHelper.js";import S from"../../../rest/support/ImageIdentifyParameters.js";const C=2**30,w=2048,T=2**20;async function E(e,t){return e.type===`imagery`?await e.generateRasterInfo(e.rasterFunction,t):e.raster.rasterInfo}function D(e){let{rasterInfo:t,geometry:n,pixelSize:i,downsampleOnly:s=!1,maxPixelCountForDownsample:c}=e;if(!i)return!0;if(!s)return!1;let l=a(i,t.spatialReference);if(l.x+l.y<=t.pixelSize.x+t.pixelSize.y)return!0;if(c==null)return!1;let u=n?.type===`polyline`?n.extent:n??t.extent,d=new r({x:t.pixelSize.x,y:t.pixelSize.y,spatialReference:t.spatialReference}),f=o(t,u,d);return f.width*f.height<=c}function O(e){let t=[new y({name:d,alias:`Pixel ID`,type:`oid`})],{pixelType:n}=e,r=n===`f32`?`single`:n===`f64`?`double`:`integer`;return x(e).forEach(e=>{t.push(new y({name:e,alias:e,type:r}))}),t.map(e=>e.toJSON())}async function k(t,n){if(t.spatialReference.equals(n))return t;if(t.type===`polyline`){let{projectExecute:r}=await import(`../../../geometry/operators/projectOperator.js`),i=r(t,n);if(i==null)throw new e(`read-pixels`,`failed to project the geometry into the layer's spatial reference`);return i}if(t.type===`extent`||t.rings[0].length<20){let[{lengthExecute:e},{densifyExecute:r}]=await Promise.all([import(`../../../geometry/operators/lengthOperator.js`),import(`../../../geometry/operators/densifyOperator.js`)]),i=e(t,{unit:`meters`})/100;t=r(t,i,{unit:`meters`}),await h(),t=g(t,n)}return t}async function A(e,t,n=!1){let{spatialReference:i}=e,a=t?.geometry,s=await k(a??e.extent,i),c=s.type===`extent`?s:s.extent,l=a!=null&&(a.type!==`extent`||!a.spatialReference.equals(i))?s:void 0,u=new r({x:e.pixelSize.x,y:e.pixelSize.y,spatialReference:i}),d=!!t?.autoResample,f=d?u:t?.pixelSize??u,{extent:p,width:m,height:h}=o(e,c,f);if(!d)return{extent:p,clipGeometry:l,width:m,height:h,pixelSize:f};let g=e.storageInfo?.pyramidScalingFactor??2,{x:_,y:v}=f,y=t?.maxPixelCount??T;for(;m*h>y&&(!n||Math.max(m,h)>1024);)_*=g,v*=g,m/=g,h/=g;return m=Math.round(m),h=Math.round(h),{extent:p,clipGeometry:l,width:m,height:h,pixelSize:new r({x:_,y:v,spatialReference:i})}}async function*j(e,r,i=!1,a){let{extent:o,clipGeometry:c,width:l,height:u}=r,d=o.width/l,f=o.height/u,p=Math.ceil(l/w),m=Math.ceil(u/w),h=d*w,g=f*w,{xmin:_,xmax:v,ymin:y,ymax:b}=o,x=m*p,S={bandIds:r.bandIds?.length?r.bandIds:void 0,interpolation:`nearest`,...a};for(let r=0;r<m;r++)for(let a=0;a<p;a++){t(S);let l=new n({xmin:_+a*h,xmax:i?Math.min(v,_+(a+1)*h):_+(a+1)*h,ymax:b-r*g,ymin:i?Math.max(y,b-(r+1)*g):b-(r+1)*g,spatialReference:o.spatialReference}),u={row:r,col:a},m=r*p+a+1;if(c&&!l.intersects(c)){yield{extent:l,pixelBlock:null,id:u,total:x,current:m};continue}let C=i?Math.round(l.width/d):w,T=i?Math.round(l.height/f):w,{pixelBlock:E}=await e.fetchPixels(l,C,T,S).catch(()=>({pixelBlock:void 0}));E&&c&&(E=await s(E,l,c)),yield{extent:l,pixelBlock:E,id:u,total:x,current:m}}}async function*M(e,n,r){let i=await E(e,r),a=O(i),o=j(e,await A(i,{...n,geometry:n?.geometry??i.extent}),!0,r),s=i.width;for await(let c of o){if(!c.pixelBlock){yield{...c};continue}let o=J(e),{pixelBlock:l}=c,{statistics:u,histograms:d}=await K({pixelBlock:l,rasterJobHandler:o},r),f=c;f.statistics=u,f.histograms=d;let p=c.id.row*i.width*w+c.id.col*w;t(r),f.featureSet=await q({pixelBlock:l,extent:c.extent,fields:a,skipFactor:n?.skipFactor??1,rasterJobHandler:o,pixelIdOffset:p,imageRowSize:s},r),t(r),yield f}}function N(t,n,r){let a=i(n),{width:o,height:s}=t;if(o*s*a>C)throw new e(`fetch-pixels`,`failed to fetch pixels as pixel byte count exceeds the 1GB limit`);if(r&&o*s>r)throw new e(`fetch-pixels`,`failed to fetch pixels as pixel count exceeds the ${r} limit`)}async function P(t,n,r){if(!n.geometry)throw new e(`fetch-pixels`,`geometry is required to fetch pixel feature set`);let i=await E(t),a=await A(i,n,!0);N(a,i.pixelType);let{extent:o,pixelSize:s}=a,c=Math.round(i.extent.width/s.x),l=O(i),u={fields:l,features:[]},d=u.features,{maxPixelCount:f}=n,p=!!n.autoResample&&f!=null&&a.width*a.height>f,m=p?1:n.skipFactor??1,h=a.width<=w||a.height<=w,g=j(t,a,m===1||h,r);for await(let e of g){if(!e.pixelBlock)continue;let n=J(t),a=Math.floor((i.extent.ymax-e.extent.ymax)/s.y)*c+Math.floor((e.extent.xmin-i.extent.xmin)/s.x),o=await q({pixelBlock:e.pixelBlock,extent:e.extent,fields:l,skipFactor:m,rasterJobHandler:n,pixelIdOffset:a,imageRowSize:c},r);if(o?.features?.length){let{features:e}=o,t=e.length;for(let n=0;n<t;n++){let t=e.pop();d.push(t)}}}if(p&&f){let e=f/(n.skipFactor??1)**2;if(d.length>e){let t=d.length/e,n=[...d],r=d.length-1;d.length=0;for(let i=0,a=0;i<e-1;i++){a+=t;let e=Math.round(a);e<r&&d.push(n[e])}}}return{extent:o,featureSet:u,pixelSize:s}}async function F(e,t,n){let{geometry:r}=t;if(r.type===`multipoint`)return I(e,r,n);if(r.type===`polyline`)return z(e,r,n);let i=await Y(e,{geometry:r},n);return i?_(i):null}async function I(e,t,n){let r=await E(e,n),i=t.points.map((e,n)=>t.getPoint(n)).map(t=>L(e,t,n)),a=(await Promise.all(i)).filter(e=>e!=null);if(a.length<=1)return R(a[0]);let o=a[0].map((e,t)=>a.map(e=>e[t]));return _(new b({pixels:o,pixelType:r.pixelType}))}async function L(e,t,n){if(e.type===`imagery`){let r=await e.identify(new S({geometry:t,returnCatalogItems:!1}),n).catch(()=>null);return r?.value==null||r.value.includes(`NoData`)?null:r.value.replaceAll(`, `,` `).split(` `).map(e=>Number(e))}return(await e.identify(t,n).catch(()=>null))?.value}function R(e){return e?.map(e=>({min:e,max:e,avg:e,median:e,quartile1:e,quartile3:e}))}async function z(e,t,n){let r=await W(e,{geometry:t},n),{bandCount:i,pixelType:a}=await E(e,n),o=Array(i).fill(0).map(()=>b.createEmptyBand(a,r.length)),s=0;for(let e=0;e<r.length;e++){let t=r[e];if(t.value!=null){s++;for(let n=0;n<i;n++)o[n][e]=t.value[n]}}return s!==r.length&&o.forEach((e,t)=>{o[t]=e.subarray(0,s)}),_(new b({pixels:o,pixelType:a}))}async function B(t,n,r){let i=await E(t,r);if(!i.attributeTable)return null;let a=i.attributeTable.clone(),o=a.fields.find(e=>e.name.toLowerCase()===`value`),s=a.fields.find(e=>e.name.toLowerCase()===`count`);if(!o)throw new e(`compute-attribute-table`,`Value field not found in attribute table`);s||(s=new y({name:`Count`,alias:`Count`,type:`double`}),a.fields.push(s),a.features.forEach(e=>{e.attributes[s.name]=0}));let{geometry:c,pixelSize:l,downsampleOnly:u,maxPixelCountForDownsample:d}=n,f=new Map;return await G(t,{geometry:c,pixelSize:D({rasterInfo:i,geometry:c,pixelSize:l,downsampleOnly:u,maxPixelCountForDownsample:d})?void 0:l},(e,t)=>m(e,f),r),a.features.forEach(e=>{let t=e.attributes[o.name];e.attributes[s.name]=f.get(t)??0}),a}async function V(e,t,n){let{geometry:r}=t;if(r.type===`point`)return L(e,r,n);if(r.type===`multipoint`){let t=r.points.map((e,t)=>r.getPoint(t)).map(t=>L(e,t,n)),i=(await Promise.all(t)).filter(e=>e!=null);return i.length===0?null:H(i).map(e=>e/i.length)}let i=(await G(e,{geometry:r},(e,t)=>U(e),n))?.filter(e=>e.count>0);if(!i?.length)return null;let a=H(i.map(e=>e.bandSum)),o=i.map(e=>e.count).reduce((e,t)=>e+t);return a.map(e=>e/o)}function H(e){return e.reduce((e,t)=>e.map((e,n)=>e+t[n]))}function U(e){let{width:t,height:n,pixels:r,mask:i}=e,a=Array(r.length).fill(0),o=0;for(let e=0;e<n;e++)for(let n=0;n<t;n++){let s=e*t+n;if(!i||i[s]){for(let e=0;e<r.length;e++)a[e]+=r[e][s];o++}}return{bandSum:a,count:o}}async function W(e,t,n){return(await G(e,{geometry:t.geometry},p,n))?.flat()??[]}async function G(n,r,i,a){let o=n.spatialReference,{geometry:c}=r;if(c.type===`polyline`&&!c.spatialReference.equals(o)){let{projectExecute:t}=await import(`../../../geometry/operators/projectOperator.js`),n=t(c,o);if(n==null)throw new e(`read-pixels`,`failed to fetch pixels`);c=n}let l=await k(c.type===`polyline`?c.extent:c,o),u=c.type===`polyline`?c:l,d=await A(await E(n,a),{geometry:l,autoResample:!1,pixelSize:r?.pixelSize}),f=[],p=j(n,d,!0,a);for await(let e of p){if(!e.pixelBlock)continue;let{extent:n}=e,r=i(await s(e.pixelBlock,n,u),n);f.push(r),t(a)}return f}async function K(e,t){let{rasterJobHandler:n}=e,{pixelBlock:r}=e,{statistics:i,histograms:a}=n?await n.computeStatisticsHistograms({pixelBlock:r},t):v(r);return{statistics:i,histograms:a}}async function q(e,t){let{extent:n,fields:r,skipFactor:i,rasterJobHandler:a,pixelIdOffset:o,imageRowSize:s}=e,{pixelBlock:c}=e,l=r.map(({name:e})=>e),u=a?await a.convertPixelBlockToFeatures({pixelBlock:c,extent:n,fieldNames:l,skipFactor:i,pixelIdOffset:o,imageRowSize:s},t):f({pixelBlock:c,extent:n,fieldNames:l,skipFactor:i,pixelIdOffset:o,imageRowSize:s});return u?{fields:r,features:u}:void 0}function J(e){return`_rasterJobHandler`in e?e._rasterJobHandler:null}async function Y(e,t,n){let r=await E(e);t={...t,maxPixelCount:t.maxPixelCount??2**28};let i=await A(r,t);i.bandIds=t.bandIds?.length?t.bandIds:void 0,N(i,r.pixelType,t.maxPixelCount);let{width:a,height:o}=i;if(a<=w&&o<=w){let t=i.bandIds?.length?i.bandIds:void 0,{pixelBlock:r}=await e.fetchPixels(i.extent,a,o,{bandIds:t,interpolation:`nearest`,...n});return r}let s=[],c=j(e,i,!1,n);for await(let e of c)s.push(e.pixelBlock);if(!s.some(e=>e!=null))return null;let l=Math.ceil(a/w),d=Math.ceil(o/w),f={width:l*w,height:d*w},p,m=J(e);return p=m?(await m.mosaicAndTransform({srcPixelBlocks:s,srcMosaicSize:f,destDimension:f},{...n,transferPixelsToWorker:!0}))?.pixelBlock:u(s,f),p}async function X(t,n,r){if(!n.geometry)throw new e(`compute-statistics-histograms`,`geometry is required to fetch pixel feature set`);let{pixelSize:i,downsampleOnly:a,maxPixelCountForDownsample:o}=n,s=await E(t,r),u=D({rasterInfo:s,geometry:n.geometry,pixelSize:i,downsampleOnly:a,maxPixelCountForDownsample:o})?void 0:i,d=await Y(t,{...n,pixelSize:u},r);if(!d)throw new e(`compute-statistics-histograms`,`failed to get intersecting pixels`);let{valueAttributeFieldName:f}=n;f&&f.toLowerCase()!==`value`&&(d=l(d,s,f));let p=J(t),{transformType:m}=n;if(m){let e={lambda:n.lambda,shift:n.shift};d=p?await p.transformPixels({pixelBlock:d,transformType:m,transformParameters:e},{...r,transferPixelsToWorker:!0}):c(d,m,e)}let h=n.histogramSize??void 0;return p?await p.computeStatisticsHistograms({pixelBlock:d,histogramSize:h,includeSkewnessKurtosis:!0},{...r,transferPixelsToWorker:!0}):v(d,{histogramSize:h,includeSkewnessKurtosis:!0})}export{F as computeBoxStatistics,B as computeRasterAttributeTable,X as computeStatisticsHistograms,M as createPixelFeatureSetCursor,P as fetchPixelFeatureSet,V as identifyAveragePixelValue,W as readIntersectingPixels};
2
+ import e from"../../../core/Error.js";import{throwIfAborted as t}from"../../../core/promiseUtils.js";import n from"../../../geometry/Extent.js";import r from"../../../geometry/Point.js";import{getByteCount as i}from"../formats/pixelRangeUtils.js";import{convertPixelSize as a,snapToRaster as o,clip as s}from"../functions/clipUtils.js";import{transformPixels as c}from"../functions/pixelTransformUtils.js";import{mapPixelValueToAttribute as l,mosaic as u,pixelIdFieldName as d,convertPixelBlockToFeatures as f,getValidPixels as p,countCategoricalPixels as m}from"../functions/pixelUtils.js";import{load as h,projectPolygon as g}from"../functions/rasterProjectionHelper.js";import{computeBoxStatistics as _,computeStatisticsHistograms as v}from"../functions/stretchUtils.js";import y from"../../support/Field.js";import b from"../../support/PixelBlock.js";import{getBandNames as x}from"../../../renderers/support/rasterRendererHelper.js";import S from"../../../rest/support/ImageIdentifyParameters.js";const C=2**30,w=2048,T=2**20;async function E(e,t){return e.type===`imagery`?await e.generateRasterInfo(e.rasterFunction,t):e.raster.rasterInfo}function D(e){let{rasterInfo:t,geometry:n,pixelSize:i,downsampleOnly:s=!1,maxPixelCountForDownsample:c}=e;if(!i)return!0;if(!s)return!1;let l=a(i,t.spatialReference);if(l.x+l.y<=t.pixelSize.x+t.pixelSize.y)return!0;if(c==null)return!1;let u=n?.type===`polyline`?n.extent:n??t.extent,d=new r({x:t.pixelSize.x,y:t.pixelSize.y,spatialReference:t.spatialReference}),f=o(t,u,d);return f.width*f.height<=c}function O(e){let t=[new y({name:d,alias:`Pixel ID`,type:`oid`})],{pixelType:n}=e,r=n===`f32`?`single`:n===`f64`?`double`:`integer`;return x(e).forEach(e=>{t.push(new y({name:e,alias:e,type:r}))}),t.map(e=>e.toJSON())}async function k(t,n){if(t.spatialReference.equals(n))return t;if(t.type===`polyline`){let{projectExecute:r}=await import(`../../../geometry/operators/projectOperator.js`),i=r(t,n);if(i==null)throw new e(`read-pixels`,`failed to project the geometry into the layer's spatial reference`);return i}if(t.type===`extent`||t.rings[0].length<20){let[{lengthExecute:e},{densifyExecute:r}]=await Promise.all([import(`../../../geometry/operators/lengthOperator.js`),import(`../../../geometry/operators/densifyOperator.js`)]),i=e(t,{unit:`meters`})/100;t=r(t,i,{unit:`meters`}),await h(),t=g(t,n)}return t}async function A(e,t,n=!1){let{spatialReference:i}=e,a=t?.geometry,s=await k(a??e.extent,i),c=s.type===`extent`?s:s.extent,l=a!=null&&(a.type!==`extent`||!a.spatialReference.equals(i))?s:void 0,u=new r({x:e.pixelSize.x,y:e.pixelSize.y,spatialReference:i}),d=!!t?.autoResample,f=d?u:t?.pixelSize??u,{extent:p,width:m,height:h}=o(e,c,f);if(!d)return{extent:p,clipGeometry:l,width:m,height:h,pixelSize:f};let g=e.storageInfo?.pyramidScalingFactor??2,{x:_,y:v}=f,y=t?.maxPixelCount??T;for(;m*h>y&&(!n||Math.max(m,h)>1024);)_*=g,v*=g,m/=g,h/=g;return m=Math.round(m),h=Math.round(h),{extent:p,clipGeometry:l,width:m,height:h,pixelSize:new r({x:_,y:v,spatialReference:i})}}async function*j(e,r,i=!1,a){let{extent:o,clipGeometry:c,width:l,height:u}=r,d=o.width/l,f=o.height/u,p=Math.ceil(l/w),m=Math.ceil(u/w),h=d*w,g=f*w,{xmin:_,xmax:v,ymin:y,ymax:b}=o,x=m*p,S={bandIds:r.bandIds?.length?r.bandIds:void 0,interpolation:`nearest`,...a};for(let a=0;a<m;a++)for(let l=0;l<p;l++){t(S);let u=new n({xmin:_+l*h,xmax:i?Math.min(v,_+(l+1)*h):_+(l+1)*h,ymax:b-a*g,ymin:i?Math.max(y,b-(a+1)*g):b-(a+1)*g,spatialReference:o.spatialReference}),m={row:a,col:l},C=a*p+l+1;if(c&&!u.intersects(c)){yield{extent:u,pixelBlock:null,id:m,total:x,current:C};continue}let T=i?Math.round(u.width/d):w,E=i?Math.round(u.height/f):w,{pixelBlock:D}=await e.fetchPixels(u,T,E,S).catch(()=>({pixelBlock:void 0}));D&&c&&(D=await s(D,u,c,{thinPolyline:r?.thinPolyline??!1})),yield{extent:u,pixelBlock:D,id:m,total:x,current:C}}}async function*M(e,n,r){let i=await E(e,r),a=O(i),o=j(e,await A(i,{...n,geometry:n?.geometry??i.extent}),!0,r),s=i.width;for await(let c of o){if(!c.pixelBlock){yield{...c};continue}let o=J(e),{pixelBlock:l}=c,{statistics:u,histograms:d}=await K({pixelBlock:l,rasterJobHandler:o},r),f=c;f.statistics=u,f.histograms=d;let p=c.id.row*i.width*w+c.id.col*w;t(r),f.featureSet=await q({pixelBlock:l,extent:c.extent,fields:a,skipFactor:n?.skipFactor??1,rasterJobHandler:o,pixelIdOffset:p,imageRowSize:s},r),t(r),yield f}}function N(t,n,r){let a=i(n),{width:o,height:s}=t;if(o*s*a>C)throw new e(`fetch-pixels`,`failed to fetch pixels as pixel byte count exceeds the 1GB limit`);if(r&&o*s>r)throw new e(`fetch-pixels`,`failed to fetch pixels as pixel count exceeds the ${r} limit`)}async function P(t,n,r){if(!n.geometry)throw new e(`fetch-pixels`,`geometry is required to fetch pixel feature set`);let i=await E(t),a=await A(i,n,!0);N(a,i.pixelType);let{extent:o,pixelSize:s}=a,c=Math.round(i.extent.width/s.x),l=O(i),u={fields:l,features:[]},d=u.features,{maxPixelCount:f}=n,p=!!n.autoResample&&f!=null&&a.width*a.height>f,m=p?1:n.skipFactor??1,h=a.width<=w||a.height<=w,g=j(t,a,m===1||h,r);for await(let e of g){if(!e.pixelBlock)continue;let n=J(t),a=Math.floor((i.extent.ymax-e.extent.ymax)/s.y)*c+Math.floor((e.extent.xmin-i.extent.xmin)/s.x),o=await q({pixelBlock:e.pixelBlock,extent:e.extent,fields:l,skipFactor:m,rasterJobHandler:n,pixelIdOffset:a,imageRowSize:c},r);if(o?.features?.length){let{features:e}=o,t=e.length;for(let n=0;n<t;n++){let t=e.pop();d.push(t)}}}if(p&&f){let e=f/(n.skipFactor??1)**2;if(d.length>e){let t=d.length/e,n=[...d],r=d.length-1;d.length=0;for(let i=0,a=0;i<e-1;i++){a+=t;let e=Math.round(a);e<r&&d.push(n[e])}}}return{extent:o,featureSet:u,pixelSize:s}}async function F(e,t,n){let{geometry:r}=t;if(r.type===`multipoint`)return I(e,r,n);if(r.type===`polyline`)return z(e,r,n);let i=await Y(e,{geometry:r},n);return i?_(i):null}async function I(e,t,n){let r=await E(e,n),i=t.points.map((e,n)=>t.getPoint(n)).map(t=>L(e,t,n)),a=(await Promise.all(i)).filter(e=>e!=null);if(a.length<=1)return R(a[0]);let o=a[0].map((e,t)=>a.map(e=>e[t]));return _(new b({pixels:o,pixelType:r.pixelType}))}async function L(e,t,n){if(e.type===`imagery`){let r=await e.identify(new S({geometry:t,returnCatalogItems:!1}),n).catch(()=>null);return r?.value==null||r.value.includes(`NoData`)?null:r.value.replaceAll(`, `,` `).split(` `).map(e=>Number(e))}return(await e.identify(t,n).catch(()=>null))?.value}function R(e){return e?.map(e=>({min:e,max:e,avg:e,median:e,quartile1:e,quartile3:e}))}async function z(e,t,n){let r=await W(e,{geometry:t},n),{bandCount:i,pixelType:a}=await E(e,n),o=Array(i).fill(0).map(()=>b.createEmptyBand(a,r.length)),s=0;for(let e=0;e<r.length;e++){let t=r[e];if(t.value!=null){s++;for(let n=0;n<i;n++)o[n][e]=t.value[n]}}return s!==r.length&&o.forEach((e,t)=>{o[t]=e.subarray(0,s)}),_(new b({pixels:o,pixelType:a}))}async function B(t,n,r){let i=await E(t,r);if(!i.attributeTable)return null;let a=i.attributeTable.clone(),o=a.fields.find(e=>e.name.toLowerCase()===`value`),s=a.fields.find(e=>e.name.toLowerCase()===`count`);if(!o)throw new e(`compute-attribute-table`,`Value field not found in attribute table`);s||(s=new y({name:`Count`,alias:`Count`,type:`double`}),a.fields.push(s),a.features.forEach(e=>{e.attributes[s.name]=0}));let{geometry:c,pixelSize:l,downsampleOnly:u,maxPixelCountForDownsample:d}=n,f=new Map;return await G(t,{geometry:c,pixelSize:D({rasterInfo:i,geometry:c,pixelSize:l,downsampleOnly:u,maxPixelCountForDownsample:d})?void 0:l},(e,t)=>m(e,f),r),a.features.forEach(e=>{let t=e.attributes[o.name];e.attributes[s.name]=f.get(t)??0}),a}async function V(e,t,n){let{geometry:r}=t;if(r.type===`point`)return L(e,r,n);if(r.type===`multipoint`){let t=r.points.map((e,t)=>r.getPoint(t)).map(t=>L(e,t,n)),i=(await Promise.all(t)).filter(e=>e!=null);return i.length===0?null:H(i).map(e=>e/i.length)}let i=(await G(e,{geometry:r},(e,t)=>U(e),n))?.filter(e=>e.count>0);if(!i?.length)return null;let a=H(i.map(e=>e.bandSum)),o=i.map(e=>e.count).reduce((e,t)=>e+t);return a.map(e=>e/o)}function H(e){return e.reduce((e,t)=>e.map((e,n)=>e+t[n]))}function U(e){let{width:t,height:n,pixels:r,mask:i}=e,a=Array(r.length).fill(0),o=0;for(let e=0;e<n;e++)for(let n=0;n<t;n++){let s=e*t+n;if(!i||i[s]){for(let e=0;e<r.length;e++)a[e]+=r[e][s];o++}}return{bandSum:a,count:o}}async function W(e,t,n){return(await G(e,{geometry:t.geometry},p,n))?.flat()??[]}async function G(n,r,i,a){let o=n.spatialReference,{geometry:c}=r;if(c.type===`polyline`&&!c.spatialReference.equals(o)){let{projectExecute:t}=await import(`../../../geometry/operators/projectOperator.js`),n=t(c,o);if(n==null)throw new e(`read-pixels`,`failed to fetch pixels`);c=n}let l=await k(c.type===`polyline`?c.extent:c,o),u=c.type===`polyline`?c:l,d=await A(await E(n,a),{geometry:l,autoResample:!1,pixelSize:r?.pixelSize}),f=[],p=j(n,d,!0,a);for await(let e of p){if(!e.pixelBlock)continue;let{extent:n}=e,r=i(await s(e.pixelBlock,n,u),n);f.push(r),t(a)}return f}async function K(e,t){let{rasterJobHandler:n}=e,{pixelBlock:r}=e,{statistics:i,histograms:a}=n?await n.computeStatisticsHistograms({pixelBlock:r},t):v(r);return{statistics:i,histograms:a}}async function q(e,t){let{extent:n,fields:r,skipFactor:i,rasterJobHandler:a,pixelIdOffset:o,imageRowSize:s}=e,{pixelBlock:c}=e,l=r.map(({name:e})=>e),u=a?await a.convertPixelBlockToFeatures({pixelBlock:c,extent:n,fieldNames:l,skipFactor:i,pixelIdOffset:o,imageRowSize:s},t):f({pixelBlock:c,extent:n,fieldNames:l,skipFactor:i,pixelIdOffset:o,imageRowSize:s});return u?{fields:r,features:u}:void 0}function J(e){return`_rasterJobHandler`in e?e._rasterJobHandler:null}async function Y(e,t,n){let r=await E(e);t={...t,maxPixelCount:t.maxPixelCount??2**28};let i=await A(r,t);i.bandIds=t.bandIds?.length?t.bandIds:void 0,N(i,r.pixelType,t.maxPixelCount);let{width:a,height:o}=i;if(a<=w&&o<=w){let t=i.bandIds?.length?i.bandIds:void 0,{pixelBlock:r}=await e.fetchPixels(i.extent,a,o,{bandIds:t,interpolation:`nearest`,...n});return r}let s=[],c=j(e,i,!1,n);for await(let e of c)s.push(e.pixelBlock);if(!s.some(e=>e!=null))return null;let l=Math.ceil(a/w),d=Math.ceil(o/w),f={width:l*w,height:d*w},p,m=J(e);return p=m?(await m.mosaicAndTransform({srcPixelBlocks:s,srcMosaicSize:f,destDimension:f},{...n,transferPixelsToWorker:!0}))?.pixelBlock:u(s,f),p}async function X(t,n,r){if(!n.geometry)throw new e(`compute-statistics-histograms`,`geometry is required to fetch pixel feature set`);let{pixelSize:i,downsampleOnly:a,maxPixelCountForDownsample:o}=n,s=await E(t,r),u=D({rasterInfo:s,geometry:n.geometry,pixelSize:i,downsampleOnly:a,maxPixelCountForDownsample:o})?void 0:i,d=await Y(t,{...n,pixelSize:u},r);if(!d)throw new e(`compute-statistics-histograms`,`failed to get intersecting pixels`);let{valueAttributeFieldName:f}=n;f&&f.toLowerCase()!==`value`&&(d=l(d,s,f));let p=J(t),{transformType:m}=n;if(m){let e={lambda:n.lambda,shift:n.shift};d=p?await p.transformPixels({pixelBlock:d,transformType:m,transformParameters:e},{...r,transferPixelsToWorker:!0}):c(d,m,e)}let h=n.histogramSize??void 0;return p?await p.computeStatisticsHistograms({pixelBlock:d,histogramSize:h,includeSkewnessKurtosis:!0},{...r,transferPixelsToWorker:!0}):v(d,{histogramSize:h,includeSkewnessKurtosis:!0})}export{F as computeBoxStatistics,B as computeRasterAttributeTable,X as computeStatisticsHistograms,M as createPixelFeatureSetCursor,P as fetchPixelFeatureSet,V as identifyAveragePixelValue,W as readIntersectingPixels};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import{getMetersPerUnitForSR as e}from"../../../core/units.js";import t from"../../../geometry/Extent.js";import n from"../../../geometry/Point.js";import r from"../../support/PixelBlock.js";function i(t,n){if(t.spatialReference.equals(n))return t;let r=e(t.spatialReference),i=e(n);if(r===i)return t;let a=r/i;return{x:t.x*a,y:t.y*a}}async function a(e,t,n){if(n.type===`extent`)return l(e,t,n);let{width:i,height:a}=e,s=i*a,c=new Uint8Array(s),{intersectsExecute:d}=await import(`../../../geometry/operators/intersectsOperator.js`);if(!d(t,n))return new r({pixelType:e.pixelType,width:i,height:a,mask:c,maskIsAlpha:!1,pixels:[...e.pixels]});if(n.type===`polyline`)return u(e,t,n);let{containsExecute:f}=await import(`../../../geometry/operators/containsOperator.js`);return f(n,t)?e:o(e,t,n)}function o(e,t,n){if(!e)return e;let{width:i,height:a}=e,o=s({geometry:n,size:[i,a],srcExtent:t,srcMask:e.mask});return new r({pixelType:e.pixelType,width:i,height:a,mask:o,maskIsAlpha:!1,pixels:[...e.pixels]})}function s(e){let{geometry:t,size:n,srcExtent:r,srcMask:i}=e,[a,o]=n,s,l=r.width/a,u=r.height/o,{xmin:d,ymax:f}=r;if(t.type===`extent`){let e=(t.xmin-d)/l,n=(t.xmax-d)/l,r=(f-t.ymax)/u,i=(f-t.ymin)/u;s=[[[e,r],[e,i],[n,i],[n,r],[e,r]]]}else s=t.rings.map(e=>e.map(([e,t])=>[(e-d)/l,(f-t)/u]));return c(s,n,i)}function c(e,t,n){let[r,i]=t,a=new OffscreenCanvas(r,i).getContext(`2d`);a.fillStyle=`#f00`,a.beginPath(),e.forEach(e=>{a.moveTo(e[0][0],e[0][1]);for(let t=0;t<e.length;t++)a.lineTo(e[t][0],e[t][1]);a.closePath()}),a.fill();let o=a.getImageData(0,0,r,i).data,s=r*i,c=new Uint8Array(s),l=!1;for(let e=0;e<s;e++)(!n||n[e])&&(o[e*4+3]>127?c[e]=255:l=!0);return l||n?c:void 0}function l(e,t,n){let{width:i,height:a}=e,o=new Uint8Array(i*a),s=t.width/i,c=t.height/a;if(n.width/s<.5||n.height/c<.5)return new r({pixelType:e.pixelType,width:i,height:a,mask:o,pixels:[...e.pixels]});let{xmin:l,xmax:u,ymin:d,ymax:f}=t,{xmin:p,xmax:m,ymin:h,ymax:g}=n,_=Math.max(l,p),v=Math.min(u,m),y=Math.max(d,h),b=Math.min(f,g),x=s*.5,S=c*.5;if(v-_<x||b-y<S||v<l+x||_>u-x||y>f-S||b<d+S)return new r({pixelType:e.pixelType,width:i,height:a,mask:o,pixels:[...e.pixels]});let C=Math.max(0,(_-l)/s),w=Math.min(i,Math.max(0,(v-l)/s)),T=Math.max(0,(f-b)/c),E=Math.min(a,Math.max(0,(f-y)/c)),D=Math.round(C),O=Math.round(w)-1,k=Math.round(T),A=Math.round(E)-1,j=D===O&&C%1>.5&&w%1<.5,M=k===A&&T%1>.5&&E%1<.5;if(j||M)return new r({pixelType:e.pixelType,width:i,height:a,mask:o,pixels:[...e.pixels]});if(D===0&&k===0&&O===i&&A===a)return e;let N=e.mask;for(let e=k;e<=A;e++)for(let t=D;t<=O;t++){let n=e*i+t;o[n]=N?N[n]:255}return new r({pixelType:e.pixelType,width:i,height:a,mask:o,pixels:[...e.pixels]})}function u(e,t,n){let{width:i,height:a}=e,o=new Uint8Array(i*a),s=t.width/i,c=t.height/a,{xmin:l,ymax:u}=t,{paths:d}=n,f=e.mask;for(let e=0;e<d.length;e++){let t=d[e];for(let e=0;e<t.length-1;e++){let[n,r]=t[e],[d,p]=t[e+1],m=Math.min(r,p),h=Math.max(0,Math.floor((u-Math.max(r,p))/c)),g=Math.min(a-1,Math.floor((u-m)/c));if(!(g<h)){if(h===g){let e=Math.min(n,d),t=Math.max(n,d),r=Math.max(0,Math.floor((e-l)/s)),a=Math.min(i-1,Math.floor((t-l)/s));if(a<r)continue;let c=h*i;for(let e=c+r;e<=c+a;e++)o[e]=f?f[e]:255}else{let e=(d-n)/(p-r),t=(n-l)/s,a=e/s,m=c*a;for(let e=h;e<=g;e++){let n=a*(u-e*c-r)+t,s=Math.max(0,Math.floor(m>0?n-m:n)),l=Math.min(i-1,Math.floor(m>0?n:n-m));if(l<s)continue;let d=e*i;for(let e=d+s;e<=d+l;e++)o[e]=f?f[e]:255}}}}}return new r({pixelType:e.pixelType,width:i,height:a,mask:o,pixels:[...e.pixels]})}function d(e,t){let{extent:r}=f(e,t,new n({x:e.pixelSize.x,y:e.pixelSize.y,spatialReference:e.spatialReference})),{extent:i}=e.extent;if(r.xmax=Math.min(r.xmax,i.xmax),r.ymax=Math.min(r.ymax,i.ymax),r.xmin<r.xmax&&r.ymin<r.ymax){let{x:t,y:n}=e.pixelSize,i=Math.round(r.width/t),a=Math.round(r.height/n);e.extent=r,e.width=i,e.height=a}}function f(e,n,r,a=!0){let{spatialReference:o}=e,{x:s,y:c}=i(r,o),l,u,d,{xmin:f,xmax:p,ymax:m,ymin:h}=n.type===`extent`?n:n.extent,{xmin:g,ymax:_}=e.extent;return a?(f=g+(f>g?s*Math.round((f-g)/s):0),m=_-(m<_?c*Math.round((_-m)/c):0),p=g+(p>g?s*Math.round((p-g)/s):0),h=_-(h<_?c*Math.round((_-h)/c):0),l=new t({xmin:f,ymax:m,xmax:p,ymin:h,spatialReference:o}),u=Math.round(l.width/s),d=Math.round(l.height/c)):(u=Math.floor((p-f)/s+.8),d=Math.floor((m-h)/c+.8),f=g+(f>g?s*Math.floor((f-g)/s+.1):0),m=_-(m<_?c*Math.floor((_-m)/c+.1):0),p=f+u*s,h=m-d*c,l=new t({xmin:f,ymax:m,xmax:p,ymin:h,spatialReference:o})),{extent:l,width:u,height:d}}export{a as clip,d as clipRasterInfo,s as convertGeometryToMask,i as convertPixelSize,f as snapToRaster};
2
+ import{getMetersPerUnitForSR as e}from"../../../core/units.js";import t from"../../../geometry/Extent.js";import n from"../../../geometry/Point.js";import r from"../../support/PixelBlock.js";function i(t,n){if(t.spatialReference.equals(n))return t;let r=e(t.spatialReference),i=e(n);if(r===i)return t;let a=r/i;return{x:t.x*a,y:t.y*a}}async function a(e,t,n,i){if(n.type===`extent`)return l(e,t,n);let{width:a,height:s}=e,c=a*s,d=new Uint8Array(c),{intersectsExecute:p}=await import(`../../../geometry/operators/intersectsOperator.js`);if(!p(t,n))return new r({pixelType:e.pixelType,width:a,height:s,mask:d,maskIsAlpha:!1,pixels:[...e.pixels]});if(n.type===`polyline`)return i?.thinPolyline?f(e,t,n):u(e,t,n);let{containsExecute:m}=await import(`../../../geometry/operators/containsOperator.js`);return m(n,t)?e:o(e,t,n)}function o(e,t,n){if(!e)return e;let{width:i,height:a}=e,o=s({geometry:n,size:[i,a],srcExtent:t,srcMask:e.mask});return new r({pixelType:e.pixelType,width:i,height:a,mask:o,maskIsAlpha:!1,pixels:[...e.pixels]})}function s(e){let{geometry:t,size:n,srcExtent:r,srcMask:i}=e,[a,o]=n,s,l=r.width/a,u=r.height/o,{xmin:d,ymax:f}=r;if(t.type===`extent`){let e=(t.xmin-d)/l,n=(t.xmax-d)/l,r=(f-t.ymax)/u,i=(f-t.ymin)/u;s=[[[e,r],[e,i],[n,i],[n,r],[e,r]]]}else s=t.rings.map(e=>e.map(([e,t])=>[(e-d)/l,(f-t)/u]));return c(s,n,i)}function c(e,t,n){let[r,i]=t,a=new OffscreenCanvas(r,i).getContext(`2d`);a.fillStyle=`#f00`,a.beginPath(),e.forEach(e=>{a.moveTo(e[0][0],e[0][1]);for(let t=0;t<e.length;t++)a.lineTo(e[t][0],e[t][1]);a.closePath()}),a.fill();let o=a.getImageData(0,0,r,i).data,s=r*i,c=new Uint8Array(s),l=!1;for(let e=0;e<s;e++)(!n||n[e])&&(o[e*4+3]>127?c[e]=255:l=!0);return l||n?c:void 0}function l(e,t,n){let{width:i,height:a}=e,o=new Uint8Array(i*a),s=t.width/i,c=t.height/a;if(n.width/s<.5||n.height/c<.5)return new r({pixelType:e.pixelType,width:i,height:a,mask:o,pixels:[...e.pixels]});let{xmin:l,xmax:u,ymin:d,ymax:f}=t,{xmin:p,xmax:m,ymin:h,ymax:g}=n,_=Math.max(l,p),v=Math.min(u,m),y=Math.max(d,h),b=Math.min(f,g),x=s*.5,S=c*.5;if(v-_<x||b-y<S||v<l+x||_>u-x||y>f-S||b<d+S)return new r({pixelType:e.pixelType,width:i,height:a,mask:o,pixels:[...e.pixels]});let C=Math.max(0,(_-l)/s),w=Math.min(i,Math.max(0,(v-l)/s)),T=Math.max(0,(f-b)/c),E=Math.min(a,Math.max(0,(f-y)/c)),D=Math.round(C),O=Math.round(w)-1,k=Math.round(T),A=Math.round(E)-1,j=D===O&&C%1>.5&&w%1<.5,M=k===A&&T%1>.5&&E%1<.5;if(j||M)return new r({pixelType:e.pixelType,width:i,height:a,mask:o,pixels:[...e.pixels]});if(D===0&&k===0&&O===i&&A===a)return e;let N=e.mask;for(let e=k;e<=A;e++)for(let t=D;t<=O;t++){let n=e*i+t;o[n]=N?N[n]:255}return new r({pixelType:e.pixelType,width:i,height:a,mask:o,pixels:[...e.pixels]})}function u(e,t,n){let{width:i,height:a}=e,o=new Uint8Array(i*a),s=t.width/i,c=t.height/a,{xmin:l,ymax:u}=t,{paths:d}=n,f=e.mask;for(let e=0;e<d.length;e++){let t=d[e];for(let e=0;e<t.length-1;e++){let[n,r]=t[e],[d,p]=t[e+1],m=Math.min(r,p),h=Math.max(r,p),g=Math.max(0,Math.floor((u-h)/c)),_=Math.min(a-1,Math.floor((u-m)/c));if(!(_<g)){if(r===p){let e=Math.min(n,d),t=Math.max(n,d),r=Math.max(0,Math.floor((e-l)/s)),a=Math.min(i-1,Math.floor((t-l)/s));if(a<r)continue;let c=g*i;for(let e=c+r;e<=c+a;e++)o[e]=f?f[e]:255}else{let e=(d-n)/(p-r),t=(n-l)/s,a=e/s;for(let e=g;e<=_;e++){let n=Math.min(h,u-e*c),s=Math.max(m,u-(e+1)*c),l=a*(n-r)+t,d=a*(s-r)+t,p=Math.max(0,Math.floor(Math.min(l,d))),g=Math.min(i-1,Math.floor(Math.max(l,d)));if(g<p)continue;let _=e*i;for(let e=_+p;e<=_+g;e++)o[e]=f?f[e]:255}}}}}return new r({pixelType:e.pixelType,width:i,height:a,mask:o,maskIsAlpha:e.maskIsAlpha,pixels:[...e.pixels]})}function d(e){let{size:t,start:n,end:r,outMask:i,srcMask:a}=e,[o,s]=t,[c,l]=n,[u,d]=r;if(Math.max(c,u)<=0||Math.min(c,u)>=o||Math.max(l,d)<=0||Math.min(l,d)>=s)return;let f=Math.abs(u-c),p=Math.abs(d-l);if(f===0&&p===0){let e=Math.floor(c),t=Math.floor(l)*o+e;i[t]=a?a[t]:255;return}let m=p>f;m&&([c,l]=[l,c],[u,d]=[d,u],[f,p]=[p,f],[o,s]=[s,o]),c>u&&([c,u]=[u,c],[l,d]=[d,l]);let h=Math.max(0,Math.floor(c)),g=Math.min(o-1,Math.floor(u)),_=l<=d?1:-1,v=Math.floor(Math.min(l,d)),y=Math.floor(Math.max(l,d)),b=p/f,x=l+(h+.5-c)*_*b,S=_>0?Math.floor(x):Math.ceil(x)-1,C=_>0?x-S:S+1-x;for(let e=h;e<=g;e++){let t=Math.max(v,Math.min(y,S));if(t>=0&&t<s){let n=m?e*s+t:t*o+e;i[n]=a?a[n]:255}C+=b,C>=1&&(S+=_,--C)}}function f(e,t,n){let{width:i,height:a,mask:o}=e,s=new Uint8Array(i*a),c=t.width/i,l=t.height/a,{xmin:u,ymax:f}=t,p=[i,a];for(let e of n.paths)for(let t=0;t<e.length-1;t++){let[n,r]=e[t],[i,a]=e[t+1];d({size:p,start:[(n-u)/c,(f-r)/l],end:[(i-u)/c,(f-a)/l],srcMask:o,outMask:s})}return new r({pixelType:e.pixelType,width:i,height:a,mask:s,maskIsAlpha:e.maskIsAlpha,pixels:[...e.pixels]})}function p(e,t){let{extent:r}=m(e,t,new n({x:e.pixelSize.x,y:e.pixelSize.y,spatialReference:e.spatialReference})),{extent:i}=e.extent;if(r.xmax=Math.min(r.xmax,i.xmax),r.ymax=Math.min(r.ymax,i.ymax),r.xmin<r.xmax&&r.ymin<r.ymax){let{x:t,y:n}=e.pixelSize,i=Math.round(r.width/t),a=Math.round(r.height/n);e.extent=r,e.width=i,e.height=a}}function m(e,n,r,a=!0){let{spatialReference:o}=e,{x:s,y:c}=i(r,o),l,u,d,{xmin:f,xmax:p,ymax:m,ymin:h}=n.type===`extent`?n:n.extent,{xmin:g,ymax:_}=e.extent;return a?(f=g+(f>g?s*Math.round((f-g)/s):0),m=_-(m<_?c*Math.round((_-m)/c):0),p=g+(p>g?s*Math.round((p-g)/s):0),h=_-(h<_?c*Math.round((_-h)/c):0),l=new t({xmin:f,ymax:m,xmax:p,ymin:h,spatialReference:o}),u=Math.round(l.width/s),d=Math.round(l.height/c)):(u=Math.floor((p-f)/s+.8),d=Math.floor((m-h)/c+.8),f=g+(f>g?s*Math.floor((f-g)/s+.1):0),m=_-(m<_?c*Math.floor((_-m)/c+.1):0),p=f+u*s,h=m-d*c,l=new t({xmin:f,ymax:m,xmax:p,ymin:h,spatialReference:o})),{extent:l,width:u,height:d}}export{a as clip,p as clipRasterInfo,s as convertGeometryToMask,i as convertPixelSize,d as rasterizeLineBresenham,m as snapToRaster};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/6.0/LICENSE.txt */
2
- import e from"../../core/Error.js";import{getDeepValue as t,setDeepValue as n}from"../../core/object.js";import{union as r}from"../../core/SetUtils.js";import{parseWhereClause as i}from"../../core/sql.js";import{DomainValidationError as a,getDomainRange as o}from"./domainUtils.js";import{getFieldNameFromSimpleExpression as s}from"../../support/arcadeExpressionUtils.js";import{isStringOrNull as ee,isString as te}from"../../support/guards.js";import{loadArcade as ne}from"../../support/loadArcade.js";const re=/^([0-9_])/,ie=/[^a-z0-9_\u0080-\uffff]+/gi;function c(e){return e==null?null:e.trim().replaceAll(ie,`_`).replace(re,`F$1`)||null}const l=[`field`,`field2`,`field3`,`normalizationField`,`rotationInfo.field`,`proportionalSymbolInfo.field`,`proportionalSymbolInfo.normalizationField`,`colorInfo.field`,`colorInfo.normalizationField`],u=[`field`,`normalizationField`];function ae(e,t){if(e!=null&&t!=null){for(let n of Array.isArray(e)?e:[e])if(d(l,n,t),`visualVariables`in n&&n.visualVariables)for(let e of n.visualVariables)d(u,e,t)}}function d(e,r,i){if(e)for(let a of e){let e=t(a,r),o=e&&typeof e!=`function`&&i.get(e);o&&n(a,o.name,r)}}function oe(e,t){if(e!=null&&t?.fields?.length){if(`startField`in e){let n=t.get(e.startField),r=t.get(e.endField);e.startField=n?.name??null,e.endField=r?.name??null}else{let n=t.get(e.startTimeField),r=t.get(e.endTimeField);e.startTimeField=n?.name??null,e.endTimeField=r?.name??null}e.trackIdField=t.get(e.trackIdField)?.name??null}}const f=new Set;function p(e,t){return!e||!t?[]:(f.clear(),m(f,e,t),Array.from(f).sort())}function m(e,t,n){if(n){if(!t?.fields?.length){if(n.includes(`*`)){e.clear(),e.add(`*`);return}for(let t of n)t!=null&&e.add(t)}else if(n.includes(`*`))for(let{name:n}of t.fields)e.add(n);else for(let r of n)h(e,t,r)}}function h(e,t,n){if(typeof n==`string`){if(t){let r=t.get(n);r&&e.add(r.name)}else e.add(n)}}function se(e,t){return t==null||e==null?[]:t.includes(`*`)?(e.fields??[]).map(e=>e.name):t}function ce(e,t,n=1){if(!t||!e)return[];if(t.includes(`*`))return[`*`];let r=p(e,t);return r.length/e.fields.length>=n?[`*`]:r}async function g(e,t,n,r){if(!r)return;let i=s(r);if(i)h(e,t,i);else{let{arcadeUtils:i}=await ne(),a=i.extractFieldNames(r,n?.partitions??t?.fields?.map(e=>e.name));for(let r of a)h(e,n?.index??t,r)}}async function _(t,n,r){if(r&&r!==`1=1`){let a=await i(r,n);if(!a.isStandardized)throw new e(`fieldUtils:collectFilterFields`,`Where clause is not standardized`,{where:r});m(t,n,a.fieldNames)}}function le({displayField:e,fields:t}){return e||(t?.length?v(t):null)}function v(e){return y(e,`name-or-title`)||y(e,`unique-identifier`)||y(e,`type-or-category`)||ue(e)}function ue(e){for(let t of e){if(!t?.name)continue;let e=t.name.toLowerCase();if(e.includes(`name`)||e.includes(`title`))return t.name}return null}function y(e,t){for(let n of e)if(n?.valueType&&n.valueType===t)return n.name;return null}async function de(e){if(!e)return[];let t=new Set;return await b(t,e),Array.from(t).sort()}async function b(e,t){if(!t)return;let n=t.elevationInfo?.featureExpressionInfo;if(n)return n.collectRequiredFields(e,t.fieldsIndex)}function fe(e,t,n){n.onStatisticExpression?g(e,t,null,n.onStatisticExpression.expression):e.add(n.onStatisticField)}async function pe(e,t,n){if(!t||!n||!(`fields`in n))return;let r=[],i=n.popupTemplate;r.push(x(e,t,i)),n.fields&&r.push(...n.fields.map(async n=>fe(e,t.fieldsIndex,n))),await Promise.all(r)}async function me(e,t){let{fieldsIndex:n,trackInfo:r}=t;if(!t||!r||!n)return;let i=[r.latestObservations.renderer?.collectRequiredFields(e,n),r.previousObservations.renderer?.collectRequiredFields(e,n),r.trackLines.renderer?.collectRequiredFields(e,n)];r.popupTemplate&&i.push(x(e,t,r.popupTemplate));for(let t of[r.latestObservations.labelingInfo,r.previousObservations.labelingInfo,r.trackLines.labelingInfo])if(t)for(let r of t)i.push(O(e,n,r));await Promise.all(i)}async function x(e,t,n){let r=[];n?.expressionInfos&&r.push(...n.expressionInfos.map(n=>g(e,t.fieldsIndex,null,n.expression)));let i=n?.content;if(Array.isArray(i))for(let n of i)n.type===`expression`&&n.expressionInfo&&r.push(g(e,t.fieldsIndex,null,n.expressionInfo.expression));await Promise.all(r)}async function he(e,t,n){t&&(t.timeInfo&&n?.timeExtent&&m(e,t.fieldsIndex,[t.timeInfo.startField,t.timeInfo.endField]),t.floorInfo&&m(e,t.fieldsIndex,[t.floorInfo.floorField]),n?.where!=null&&await _(e,t.fieldsIndex,n.where))}async function ge(e,t,n){t&&n&&await Promise.all(n.map(n=>_e(e,t,n)))}async function _e(e,t,n){t&&n&&(n.valueExpression?await g(e,t.fieldsIndex,null,n.valueExpression):n.field&&h(e,t.fieldsIndex,n.field))}async function ve(e){if(!e)return[];let t=`timeInfo`in e&&e.timeInfo;return t?p(e.fieldsIndex,[e.trackIdField,t.startField,t.endField]):[]}function ye(e){return e?p(e.fieldsIndex,w(e)):[]}function S(e){if(!e)return[];let t=e.geometryFieldsInfo;return t?p(e.fieldsIndex,[t.shapeAreaField,t.shapeLengthField]):[]}async function be(e,t,n){if(!t||!n)return;let r=t.fieldsIndex;await Promise.all(n.filters.map(t=>_(e,r,t.where)))}const xe=new Set([`oid`,`global-id`,`guid`]),Se=new Set([`oid`,`global-id`]),Ce=[/^fnode_$/i,/^tnode_$/i,/^lpoly_$/i,/^rpoly_$/i,/^poly_$/i,/^shape$/i,/^shape_$/i,/^subclass$/i,/^subclass_$/i,/^rings_ok$/i,/^rings_nok$/i,/objectid/i,/^perimeter_/i,/_perimeter$/i,/_i$/i];function C(e){let t=new Set;T(e).forEach(e=>t.add(e)),S(e).forEach(e=>t.add(e.toLowerCase()));let n=e&&`infoFor3D`in e?e.infoFor3D:void 0;return n&&(Object.values(n.assetMapFieldRoles).forEach(e=>t.add(e.toLowerCase())),Object.values(n.transformFieldRoles).forEach(e=>t.add(e.toLowerCase()))),Array.from(t)}function w(e){if(!e)return[];let t=`editFieldsInfo`in e&&e.editFieldsInfo;if(!t)return[];let{creationDateField:n,creatorField:r,editDateField:i,editorField:a}=t;return[n,r,i,a].filter(Boolean)}function T(e){return w(e).map(e=>e.toLowerCase())}function E(e){return!!e.type}function we(e,t){return!!e.editable&&E(e)&&!xe.has(e.type)&&!T(t).includes(e.name?.toLowerCase()??``)}function Te(e,t){let n=e.name?.toLowerCase()??``;return(t?.objectIdField==null||n!==t.objectIdField.toLowerCase())&&(t?.globalIdField==null||n!==t.globalIdField.toLowerCase())&&!C(t).includes(n)&&!Se.has(e.type)&&!Ce.some(e=>e.test(n))}async function Ee(e){if(!e)return[];let t=new Set;return await D(t,e),Array.from(t).sort()}async function D(e,t){let{labelingInfo:n,fieldsIndex:r}=t;n?.length&&await Promise.all(n.map(t=>O(e,r,t)))}async function O(e,t,n){if(!n)return;let r=n.getLabelExpression(),i=n.where;if(r.type===`arcade`)await g(e,t,null,r.expression);else{let n=r.expression.match(/{[^}]*}/g);n&&n.forEach(n=>{h(e,t,n.slice(1,-1))})}await _(e,t,i)}function De(e){let t=e.defaultValue;if(t!==void 0&&A(e,t))return t;if(e.nullable)return null}function Oe(e){let t=typeof e==`string`?{type:e}:e;if(L(t))return 255;if(t.type===`esriFieldTypeDate`||t.type===`date`)return 8}function k(e){return typeof e==`number`&&!isNaN(e)&&isFinite(e)}function ke(e){return e===null||k(e)}function Ae(e){return e===null||Number.isInteger(e)}function je(){return!0}function A(e,t){let n;switch(e.type){case`date`:case`integer`:case`long`:case`small-integer`:case`big-integer`:case`esriFieldTypeDate`:case`esriFieldTypeInteger`:case`esriFieldTypeLong`:case`esriFieldTypeSmallInteger`:case`esriFieldTypeBigInteger`:n=e.nullable?Ae:Number.isInteger;break;case`double`:case`single`:case`esriFieldTypeSingle`:case`esriFieldTypeDouble`:n=e.nullable?ke:k;break;case`string`:case`esriFieldTypeString`:n=e.nullable?ee:te;break;default:n=je}return arguments.length===1?n:n(t)}const j=[`integer`,`small-integer`,`big-integer`,`long`],M=[`single`,`double`],Me=[...j,...M],N=[`esriFieldTypeInteger`,`esriFieldTypeSmallInteger`,`esriFieldTypeLong`,`esriFieldTypeBigInteger`],P=[`esriFieldTypeSingle`,`esriFieldTypeDouble`],F=new Set([...j,...N]),Ne=new Set([...M,...P]),Pe=r(F,Ne);function Fe(e){return e!=null&&F.has(e.type)}function I(e){return e!=null&&Pe.has(e.type)}function L(e){return e!=null&&(e.type===`string`||e.type===`esriFieldTypeString`)}function R(e){return e!=null&&(e.type===`date`||e.type===`esriFieldTypeDate`)}function Ie(e){return e!=null&&(e.type===`date-only`||e.type===`esriFieldTypeDateOnly`)}function Le(e){return e!=null&&(e.type===`timestamp-offset`||e.type===`esriFieldTypeTimestampOffset`)}function Re(e){return e!=null&&(e.type===`time-only`||e.type===`esriFieldTypeTimeOnly`)}function ze(e){return e!=null&&(e.type===`date`||e.type===`date-only`||e.type===`time-only`||e.type===`timestamp-offset`)}function Be(e){return e!=null&&(e.type===`oid`||e.type===`esriFieldTypeOID`)}function Ve(e){return e!=null&&(e.type===`global-id`||e.type===`esriFieldTypeGlobalID`)}function He(e,t){return V(e,t)===null}const z={OUT_OF_RANGE:`numeric-range-validation-error::out-of-range`},B={INVALID_TYPE:`type-validation-error::invalid-type`};function Ue(e){return e==null||typeof e==`number`&&isNaN(e)?null:e}function We(e){return parseFloat(e.replaceAll(`_`,``))}function V(e,t){return e==null||e.nullable&&t===null?null:A(e,t)?I(e)&&!H(e.type,Number(t))?z.OUT_OF_RANGE:null:B.INVALID_TYPE}function H(e,t){let n=typeof e==`string`?U(e):e;if(!n)return!1;let r=n.min,i=n.max;return n.isInteger?Number.isInteger(t)&&t>=r&&t<=i:t>=r&&t<=i}function Ge(e,t){let n=o(e,t);if(n)return n;if(I(e))return U(e.type)}function U(e){switch(e){case`esriFieldTypeSmallInteger`:case`small-integer`:return W;case`esriFieldTypeInteger`:case`esriFieldTypeLong`:case`integer`:case`long`:return q;case`esriFieldTypeBigInteger`:case`big-integer`:return J;case`esriFieldTypeSingle`:case`single`:return X;case`esriFieldTypeDouble`:case`double`:return Z}}function Ke(e){if(!k(e))return null;if(Number.isInteger(e)){if(e>=W.min&&e<=W.max)return`esriFieldTypeSmallInteger`;if(e>=q.min&&e<=q.max)return`esriFieldTypeInteger`;if(e>=J.min&&e<=J.max)return`esriFieldTypeBigInteger`}return e>=X.min&&e<=X.max?`esriFieldTypeSingle`:`esriFieldTypeDouble`}const W={min:-32768,max:32767,isInteger:!0,rawMin:-32768,rawMax:32767},G=-2147483648,K=2**31-1,q={min:G,max:K,isInteger:!0,rawMin:G,rawMax:K},J={min:-(2**53-1),max:2**53-1,isInteger:!0,rawMin:-(2**53-1),rawMax:2**53-1},Y=(2-2**-23)*2**127,X={min:-Y,max:Y,isInteger:!1,rawMin:-Y,rawMax:Y},Z={min:-Number.MAX_VALUE,max:Number.MAX_VALUE,isInteger:!1,rawMin:-Number.MAX_VALUE,rawMax:Number.MAX_VALUE};function qe(e,t,n){switch(e){case a.INVALID_CODED_VALUE:return`Value ${n} is not in the coded domain - field: ${t.name}, domain: ${JSON.stringify(t.domain)}`;case a.VALUE_OUT_OF_RANGE:return`Value ${n} is out of the range of valid values - field: ${t.name}, domain: ${JSON.stringify(t.domain)}`;case B.INVALID_TYPE:return`Value ${n} is not a valid value for the field type - field: ${t.name}, type: ${t.type}, nullable: ${t.nullable}`;case z.OUT_OF_RANGE:{let{min:e,max:r}=U(t.type);return`Value ${n} is out of range for the number type - field: ${t.name}, type: ${t.type}, value range is ${e} to ${r}`}}}function Je(e,t){return!Q(e,t,null)}function Q(e,t,n){if(!e?.attributes||!t){if(n!=null)for(let e of t??[])n.add(e);return!0}let r=new Set(Object.keys(e.attributes)),i=!1;for(let e of t)if(!r.has(e)){if(i=!0,n!=null)n.add(e);else break}return i}async function Ye(e,t){let n=new Set;for(let r of t)await g(n,e.fieldsIndex,null,r);return Array.from(n).sort()}function Xe(e){return e?[`raster.itempixelvalue`,`raster.servicepixelvalue`].some(t=>e.toLowerCase().startsWith(t)):!1}async function Ze(e,t){let n=new Set;return e?.collectRequiredFields&&await e.collectRequiredFields(n,t),Array.from(n).sort()}function Qe(e){let t=e?.match(/{[^}]+}/g);return t?t.map(e=>e.slice(1,-1).split(`:`)[0].trim()):[]}function $e(e,t){let{statisticType:n,onStatisticField:r,onStatisticExpression:i}=e,a=t.get(r),o=I(a),s=i?.returnType;switch(n){case`avg`:case`avg_angle`:return a?o||R(a)?`double`:null:s&&s===`number`?`double`:null;case`count`:return`integer`;case`min`:case`max`:return a?o||ze(a)?a?.type??null:null:s&&s===`number`?`double`:null;case`sum`:return a?o?a?.type??null:null:s&&s===`number`?`double`:null;case`mode`:return a?a?.type??null:s?s===`number`?`double`:`string`:null;default:return null}}function et(e){let{fieldName:t,fieldsMap:n,normalizedFieldsMap:r}=e;if(!t)return;let i=n.get(t);return i||(i=n.get(tt(t))??r.get($(t)),i&&n.set(t,i),i)}function tt(e){return e.trim().toLowerCase()}function $(e){return c(e)?.toLowerCase()??``}export{z as NumericRangeValidationError,B as TypeValidationError,tt as applyLowerCaseFieldName,J as bigIntegerRange,g as collectArcadeFieldNames,be as collectDisplayFilterFields,b as collectElevationFields,pe as collectFeatureReductionFields,h as collectField,m as collectFields,he as collectFilterFields,D as collectLabelingFields,ge as collectOrderByInfos,x as collectPopupTemplateFields,_ as collectSQLFieldNames,me as collectTrackInfoFields,Z as doubleRange,Qe as extractSubstitutionTemplatesFromString,Je as featureHasFields,p as fixFields,ae as fixRendererFields,oe as fixTimeInfoFields,P as floatJSONTypes,M as floatTypes,$e as getAggregateFieldType,le as getDisplayFieldName,v as getDisplayFieldNameFromFields,w as getEditTrackingFields,de as getElevationFields,Ye as getExpressionFields,ye as getFeatureEditFields,S as getFeatureGeometryFields,Oe as getFieldDefaultLength,De as getFieldDefaultValue,et as getFieldFromIndex,Ge as getFieldRange,Ee as getLabelingFields,C as getLowerCaseDefaultHiddenFields,T as getLowerCaseEditTrackingFields,Ke as getNumericTypeForValue,Ze as getRendererFields,ve as getTimeFields,N as integerJSONTypes,q as integerRange,j as integerTypes,R as isDateField,Ie as isDateOnlyField,we as isFieldEditable,Te as isFieldVisibleByDefault,E as isFieldWithType,Ve as isGlobalIDField,Fe as isIntegerField,H as isNumberInRange,I as isNumericField,Be as isObjectIDField,Xe as isRasterPixelValueField,L as isStringField,Re as isTimeOnlyField,Le as isTimestampOffsetField,He as isValidFieldValue,A as isValueMatchingFieldType,$ as lowerCaseNormalizedFieldName,c as normalizeFieldName,Me as numericTypes,ce as packFields,Q as populateMissingFields,l as rendererFields,Ue as sanitizeNullFieldValue,We as sanitizedParseFloat,X as singleRange,W as smallIntegerRange,se as unpackFieldNames,V as validateFieldValue,qe as validationErrorToString,u as visualVariableFields};
2
+ import e from"../../core/Error.js";import{getDeepValue as t,setDeepValue as n}from"../../core/object.js";import{union as r}from"../../core/SetUtils.js";import{parseWhereClause as i}from"../../core/sql.js";import{DomainValidationError as a,getDomainRange as o}from"./domainUtils.js";import{getFieldNameFromSimpleExpression as s}from"../../support/arcadeExpressionUtils.js";import{isStringOrNull as ee,isString as te}from"../../support/guards.js";import{loadArcade as ne}from"../../support/loadArcade.js";const re=/^([0-9_])/,ie=/[^a-z0-9_\u0080-\uffff]+/gi;function c(e){return e==null?null:e.trim().replaceAll(ie,`_`).replace(re,`F$1`)||null}const l=[`field`,`field2`,`field3`,`normalizationField`,`rotationInfo.field`,`proportionalSymbolInfo.field`,`proportionalSymbolInfo.normalizationField`,`colorInfo.field`,`colorInfo.normalizationField`],u=[`field`,`normalizationField`];function ae(e,t){if(e!=null&&t!=null){for(let n of Array.isArray(e)?e:[e])if(d(l,n,t),`visualVariables`in n&&n.visualVariables)for(let e of n.visualVariables)d(u,e,t)}}function d(e,r,i){if(e)for(let a of e){let e=t(a,r),o=e&&typeof e!=`function`&&i.get(e);o&&n(a,o.name,r)}}function oe(e,t){if(e!=null&&t?.fields?.length){if(`startField`in e){let n=t.get(e.startField),r=t.get(e.endField);e.startField=n?.name??null,e.endField=r?.name??null}else{let n=t.get(e.startTimeField),r=t.get(e.endTimeField);e.startTimeField=n?.name??null,e.endTimeField=r?.name??null}e.trackIdField=t.get(e.trackIdField)?.name??null}}const f=new Set;function p(e,t){return!e||!t?[]:(f.clear(),m(f,e,t),Array.from(f).sort())}function m(e,t,n){if(n){if(!t?.fields?.length){if(n.includes(`*`)){e.clear(),e.add(`*`);return}for(let t of n)t!=null&&e.add(t)}else if(n.includes(`*`))for(let{name:n}of t.fields)e.add(n);else for(let r of n)h(e,t,r)}}function h(e,t,n){if(typeof n==`string`){if(t){let r=t.get(n);r&&e.add(r.name)}else e.add(n)}}function se(e,t){return t==null||e==null?[]:t.includes(`*`)?(e.fields??[]).map(e=>e.name):t}function ce(e,t,n=1){if(!t||!e)return[];if(t.includes(`*`))return[`*`];let r=p(e,t);return r.length/e.fields.length>=n?[`*`]:r}async function g(e,t,n,r){if(!r)return;let i=s(r);if(i)h(e,t,i);else{let{arcadeUtils:i}=await ne(),a=i.extractFieldNames(r,n?.partitions??t?.fields?.map(e=>e.name));for(let r of a)h(e,n?.index??t,r)}}async function _(t,n,r){if(r&&r!==`1=1`){let a=await i(r,n);if(!a.isStandardized)throw new e(`fieldUtils:collectFilterFields`,`Where clause is not standardized`,{where:r});m(t,n,a.fieldNames)}}function le({displayField:e,fields:t}){return e||(t?.length?v(t):null)}function v(e){return y(e,`name-or-title`)||y(e,`unique-identifier`)||y(e,`type-or-category`)||ue(e)}function ue(e){for(let t of e){if(!t?.name)continue;let e=t.name.toLowerCase();if(e.includes(`name`)||e.includes(`title`))return t.name}return null}function y(e,t){for(let n of e)if(n?.valueType&&n.valueType===t)return n.name;return null}async function de(e){if(!e)return[];let t=new Set;return await b(t,e),Array.from(t).sort()}async function b(e,t){if(!t)return;let n=t.elevationInfo?.featureExpressionInfo;if(n)return n.collectRequiredFields(e,t.fieldsIndex)}function fe(e,t,n){n.onStatisticExpression?g(e,t,null,n.onStatisticExpression.expression):e.add(n.onStatisticField)}async function pe(e,t,n){if(!t||!n||!(`fields`in n))return;let r=[],i=n.popupTemplate;r.push(x(e,t,i)),n.fields&&r.push(...n.fields.map(async n=>fe(e,t.fieldsIndex,n))),await Promise.all(r)}async function me(e,t){let{fieldsIndex:n,trackInfo:r}=t;if(!t||!r||!n)return;let i=[r.latestObservations.renderer?.collectRequiredFields(e,n),r.previousObservations.renderer?.collectRequiredFields(e,n),r.trackLines.renderer?.collectRequiredFields(e,n)];r.popupTemplate&&i.push(x(e,t,r.popupTemplate));for(let t of[r.latestObservations.labelingInfo,r.previousObservations.labelingInfo,r.trackLines.labelingInfo])if(t)for(let r of t)i.push(O(e,n,r));await Promise.all(i)}async function x(e,t,n){let r=[];n?.expressionInfos&&r.push(...n.expressionInfos.map(n=>g(e,t.fieldsIndex,null,n.expression)));let i=n?.content;if(Array.isArray(i))for(let n of i)n.type===`expression`&&n.expressionInfo&&r.push(g(e,t.fieldsIndex,null,n.expressionInfo.expression));await Promise.all(r)}async function he(e,t,n){t&&(t.timeInfo&&n?.timeExtent&&m(e,t.fieldsIndex,[t.timeInfo.startField,t.timeInfo.endField]),t.floorInfo&&m(e,t.fieldsIndex,[t.floorInfo.floorField]),n?.where!=null&&await _(e,t.fieldsIndex,n.where))}async function ge(e,t,n){t&&n&&await Promise.all(n.map(n=>_e(e,t,n)))}async function _e(e,t,n){t&&n&&(n.valueExpression?await g(e,t.fieldsIndex,null,n.valueExpression):n.field&&h(e,t.fieldsIndex,n.field))}async function ve(e){if(!e)return[];let t=`timeInfo`in e&&e.timeInfo;return t?p(e.fieldsIndex,[e.trackIdField,t.startField,t.endField]):[]}function ye(e){return e?p(e.fieldsIndex,w(e)):[]}function S(e){if(!e)return[];let t=e.geometryFieldsInfo;return t?p(e.fieldsIndex,[t.shapeAreaField,t.shapeLengthField]):[]}async function be(e,t,n){if(!t||!n)return;let r=t.fieldsIndex;await Promise.all(n.filters.map(t=>_(e,r,t.where)))}const xe=new Set([`oid`,`global-id`,`guid`]),Se=new Set([`oid`,`global-id`]),Ce=[/^fnode_$/i,/^tnode_$/i,/^lpoly_$/i,/^rpoly_$/i,/^poly_$/i,/^shape$/i,/^shape_$/i,/^subclass$/i,/^subclass_$/i,/^rings_ok$/i,/^rings_nok$/i,/objectid/i,/^perimeter_/i,/_perimeter$/i,/_i$/i];function C(e){let t=new Set;T(e).forEach(e=>t.add(e)),S(e).forEach(e=>t.add(e.toLowerCase()));let n=e&&`infoFor3D`in e?e.infoFor3D:void 0;return n&&(Object.values(n.assetMapFieldRoles).forEach(e=>t.add(e.toLowerCase())),Object.values(n.transformFieldRoles).forEach(e=>t.add(e.toLowerCase()))),Array.from(t)}function w(e){if(!e)return[];let t=`editFieldsInfo`in e&&e.editFieldsInfo;if(!t)return[];let{creationDateField:n,creatorField:r,editDateField:i,editorField:a}=t;return[n,r,i,a].filter(Boolean)}function T(e){return w(e).map(e=>e.toLowerCase())}function E(e){return!!e.type}function we(e,t){return!!e.editable&&E(e)&&!xe.has(e.type)&&!T(t).includes(e.name?.toLowerCase()??``)}function Te(e,t){let n=e.name?.toLowerCase()??``;return(t?.objectIdField==null||n!==t.objectIdField.toLowerCase())&&(t?.globalIdField==null||n!==t.globalIdField.toLowerCase())&&!C(t).includes(n)&&!Se.has(e.type)&&!Ce.some(e=>e.test(n))}async function Ee(e){if(!e)return[];let t=new Set;return await D(t,e),Array.from(t).sort()}async function D(e,t){let{labelingInfo:n,fieldsIndex:r}=t;n?.length&&await Promise.all(n.map(t=>O(e,r,t)))}async function O(e,t,n){if(!n)return;let r=n.getLabelExpression(),i=n.where;if(r.type===`arcade`)await g(e,t,null,r.expression);else{let n=r.expression.match(/{[^}]*}/g);n&&n.forEach(n=>{h(e,t,n.slice(1,-1))})}await _(e,t,i)}function De(e){let t=e.defaultValue;if(t!==void 0&&A(e,t))return t;if(e.nullable)return null}function Oe(e){let t=typeof e==`string`?{type:e}:e;if(L(t))return 255;if(t.type===`esriFieldTypeDate`||t.type===`date`)return 8}function k(e){return typeof e==`number`&&!isNaN(e)&&isFinite(e)}function ke(e){return e===null||k(e)}function Ae(e){return e===null||Number.isInteger(e)}function je(){return!0}function A(e,t){let n;switch(e.type){case`date`:case`integer`:case`long`:case`small-integer`:case`big-integer`:case`esriFieldTypeDate`:case`esriFieldTypeInteger`:case`esriFieldTypeLong`:case`esriFieldTypeSmallInteger`:case`esriFieldTypeBigInteger`:n=e.nullable?Ae:Number.isInteger;break;case`double`:case`single`:case`esriFieldTypeSingle`:case`esriFieldTypeDouble`:n=e.nullable?ke:k;break;case`string`:case`esriFieldTypeString`:n=e.nullable?ee:te;break;default:n=je}return arguments.length===1?n:n(t)}const j=[`integer`,`small-integer`,`big-integer`,`long`],M=[`single`,`double`],Me=[...j,...M],N=[`esriFieldTypeInteger`,`esriFieldTypeSmallInteger`,`esriFieldTypeLong`,`esriFieldTypeBigInteger`],P=[`esriFieldTypeSingle`,`esriFieldTypeDouble`],F=new Set([...j,...N]),Ne=new Set([...M,...P]),Pe=r(F,Ne);function Fe(e){return e!=null&&F.has(e.type)}function I(e){return e!=null&&Pe.has(e.type)}function L(e){return e!=null&&(e.type===`string`||e.type===`esriFieldTypeString`)}function R(e){return e!=null&&(e.type===`date`||e.type===`esriFieldTypeDate`)}function Ie(e){return e!=null&&(e.type===`date-only`||e.type===`esriFieldTypeDateOnly`)}function Le(e){return e!=null&&(e.type===`guid`||e.type===`esriFieldTypeGUID`)}function Re(e){return e!=null&&(e.type===`timestamp-offset`||e.type===`esriFieldTypeTimestampOffset`)}function ze(e){return e!=null&&(e.type===`time-only`||e.type===`esriFieldTypeTimeOnly`)}function Be(e){return e!=null&&(e.type===`date`||e.type===`date-only`||e.type===`time-only`||e.type===`timestamp-offset`)}function Ve(e){return e!=null&&(e.type===`oid`||e.type===`esriFieldTypeOID`)}function He(e){return e!=null&&(e.type===`global-id`||e.type===`esriFieldTypeGlobalID`)}function Ue(e,t){return V(e,t)===null}const z={OUT_OF_RANGE:`numeric-range-validation-error::out-of-range`},B={INVALID_TYPE:`type-validation-error::invalid-type`};function We(e){return e==null||typeof e==`number`&&isNaN(e)?null:e}function Ge(e){return parseFloat(e.replaceAll(`_`,``))}function V(e,t){return e==null||e.nullable&&t===null?null:A(e,t)?I(e)&&!H(e.type,Number(t))?z.OUT_OF_RANGE:null:B.INVALID_TYPE}function H(e,t){let n=typeof e==`string`?U(e):e;if(!n)return!1;let r=n.min,i=n.max;return n.isInteger?Number.isInteger(t)&&t>=r&&t<=i:t>=r&&t<=i}function Ke(e,t){let n=o(e,t);if(n)return n;if(I(e))return U(e.type)}function U(e){switch(e){case`esriFieldTypeSmallInteger`:case`small-integer`:return W;case`esriFieldTypeInteger`:case`esriFieldTypeLong`:case`integer`:case`long`:return q;case`esriFieldTypeBigInteger`:case`big-integer`:return J;case`esriFieldTypeSingle`:case`single`:return X;case`esriFieldTypeDouble`:case`double`:return Z}}function qe(e){if(!k(e))return null;if(Number.isInteger(e)){if(e>=W.min&&e<=W.max)return`esriFieldTypeSmallInteger`;if(e>=q.min&&e<=q.max)return`esriFieldTypeInteger`;if(e>=J.min&&e<=J.max)return`esriFieldTypeBigInteger`}return e>=X.min&&e<=X.max?`esriFieldTypeSingle`:`esriFieldTypeDouble`}const W={min:-32768,max:32767,isInteger:!0,rawMin:-32768,rawMax:32767},G=-2147483648,K=2**31-1,q={min:G,max:K,isInteger:!0,rawMin:G,rawMax:K},J={min:-(2**53-1),max:2**53-1,isInteger:!0,rawMin:-(2**53-1),rawMax:2**53-1},Y=(2-2**-23)*2**127,X={min:-Y,max:Y,isInteger:!1,rawMin:-Y,rawMax:Y},Z={min:-Number.MAX_VALUE,max:Number.MAX_VALUE,isInteger:!1,rawMin:-Number.MAX_VALUE,rawMax:Number.MAX_VALUE};function Je(e,t,n){switch(e){case a.INVALID_CODED_VALUE:return`Value ${n} is not in the coded domain - field: ${t.name}, domain: ${JSON.stringify(t.domain)}`;case a.VALUE_OUT_OF_RANGE:return`Value ${n} is out of the range of valid values - field: ${t.name}, domain: ${JSON.stringify(t.domain)}`;case B.INVALID_TYPE:return`Value ${n} is not a valid value for the field type - field: ${t.name}, type: ${t.type}, nullable: ${t.nullable}`;case z.OUT_OF_RANGE:{let{min:e,max:r}=U(t.type);return`Value ${n} is out of range for the number type - field: ${t.name}, type: ${t.type}, value range is ${e} to ${r}`}}}function Ye(e,t){return!Q(e,t,null)}function Q(e,t,n){if(!e?.attributes||!t){if(n!=null)for(let e of t??[])n.add(e);return!0}let r=new Set(Object.keys(e.attributes)),i=!1;for(let e of t)if(!r.has(e)){if(i=!0,n!=null)n.add(e);else break}return i}async function Xe(e,t){let n=new Set;for(let r of t)await g(n,e.fieldsIndex,null,r);return Array.from(n).sort()}function Ze(e){return e?[`raster.itempixelvalue`,`raster.servicepixelvalue`].some(t=>e.toLowerCase().startsWith(t)):!1}async function Qe(e,t){let n=new Set;return e?.collectRequiredFields&&await e.collectRequiredFields(n,t),Array.from(n).sort()}function $e(e){let t=e?.match(/{[^}]+}/g);return t?t.map(e=>e.slice(1,-1).split(`:`)[0].trim()):[]}function et(e,t){let{statisticType:n,onStatisticField:r,onStatisticExpression:i}=e,a=t.get(r),o=I(a),s=i?.returnType;switch(n){case`avg`:case`avg_angle`:return a?o||R(a)?`double`:null:s&&s===`number`?`double`:null;case`count`:return`integer`;case`min`:case`max`:return a?o||Be(a)?a?.type??null:null:s&&s===`number`?`double`:null;case`sum`:return a?o?a?.type??null:null:s&&s===`number`?`double`:null;case`mode`:return a?a?.type??null:s?s===`number`?`double`:`string`:null;default:return null}}function tt(e){let{fieldName:t,fieldsMap:n,normalizedFieldsMap:r}=e;if(!t)return;let i=n.get(t);return i||(i=n.get($(t))??r.get(nt(t)),i&&n.set(t,i),i)}function $(e){return e.trim().toLowerCase()}function nt(e){return c(e)?.toLowerCase()??``}export{z as NumericRangeValidationError,B as TypeValidationError,$ as applyLowerCaseFieldName,J as bigIntegerRange,g as collectArcadeFieldNames,be as collectDisplayFilterFields,b as collectElevationFields,pe as collectFeatureReductionFields,h as collectField,m as collectFields,he as collectFilterFields,D as collectLabelingFields,ge as collectOrderByInfos,x as collectPopupTemplateFields,_ as collectSQLFieldNames,me as collectTrackInfoFields,Z as doubleRange,$e as extractSubstitutionTemplatesFromString,Ye as featureHasFields,p as fixFields,ae as fixRendererFields,oe as fixTimeInfoFields,P as floatJSONTypes,M as floatTypes,et as getAggregateFieldType,le as getDisplayFieldName,v as getDisplayFieldNameFromFields,w as getEditTrackingFields,de as getElevationFields,Xe as getExpressionFields,ye as getFeatureEditFields,S as getFeatureGeometryFields,Oe as getFieldDefaultLength,De as getFieldDefaultValue,tt as getFieldFromIndex,Ke as getFieldRange,Ee as getLabelingFields,C as getLowerCaseDefaultHiddenFields,T as getLowerCaseEditTrackingFields,qe as getNumericTypeForValue,Qe as getRendererFields,ve as getTimeFields,N as integerJSONTypes,q as integerRange,j as integerTypes,R as isDateField,Ie as isDateOnlyField,we as isFieldEditable,Te as isFieldVisibleByDefault,E as isFieldWithType,He as isGlobalIDField,Le as isGuidField,Fe as isIntegerField,H as isNumberInRange,I as isNumericField,Ve as isObjectIDField,Ze as isRasterPixelValueField,L as isStringField,ze as isTimeOnlyField,Re as isTimestampOffsetField,Ue as isValidFieldValue,A as isValueMatchingFieldType,nt as lowerCaseNormalizedFieldName,c as normalizeFieldName,Me as numericTypes,ce as packFields,Q as populateMissingFields,l as rendererFields,We as sanitizeNullFieldValue,Ge as sanitizedParseFloat,X as singleRange,W as smallIntegerRange,se as unpackFieldNames,V as validateFieldValue,Je as validationErrorToString,u as visualVariableFields};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arcgis/core",
3
- "version": "6.0.0-next.13",
3
+ "version": "6.0.0-next.14",
4
4
  "description": "ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API",
5
5
  "keywords": [
6
6
  "ArcGIS",
@@ -20,7 +20,7 @@
20
20
  "license": "SEE LICENSE IN LICENSE.md",
21
21
  "dependencies": {
22
22
  "@amcharts/amcharts5": "~5.21.2",
23
- "@arcgis/toolkit": "6.0.0-next.13",
23
+ "@arcgis/toolkit": "6.0.0-next.14",
24
24
  "@esri/arcgis-html-sanitizer": "~4.2.0-next.2",
25
25
  "@esri/calcite-components": "^5.2.0-next.89",
26
26
  "@vaadin/grid": "~25.3.2",