@arcgis/core 5.2.0-next.91 → 5.2.0-next.94

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 (107) hide show
  1. package/arcade/arcadeAsyncRuntime.js +1 -1
  2. package/arcade/arcadeCompiler.js +1 -1
  3. package/arcade/functions/portal.js +2 -0
  4. package/arcade/treeAnalysis.js +1 -1
  5. package/assets/esri/core/workers/RemoteClient.js +1 -1
  6. package/assets/esri/core/workers/chunks/0be98adfef79fc5036f0.js +1 -0
  7. package/assets/esri/core/workers/chunks/19ab024f6f732fd6c69b.js +1 -0
  8. package/assets/esri/core/workers/chunks/{c6ec0e966106f66360d9.js → 349b0c7febc46267441d.js} +3 -3
  9. package/assets/esri/core/workers/chunks/5d6733dcee9c2ef00072.js +1 -0
  10. package/assets/esri/core/workers/chunks/{aed7b80145b22c246098.js → 6cbc30b31f0bb39c73ca.js} +1 -1
  11. package/assets/esri/core/workers/chunks/6cc03ef97d7731153b9a.js +1 -0
  12. package/assets/esri/core/workers/chunks/75b90fb05e4a2d32b7bb.js +1 -0
  13. package/assets/esri/core/workers/chunks/7eae9053065d3d38e54e.js +1 -0
  14. package/assets/esri/core/workers/chunks/87e9f7e85221bc7e6709.js +1 -0
  15. package/assets/esri/core/workers/chunks/909ee7d2a0eec773037a.js +1 -0
  16. package/assets/esri/core/workers/chunks/a0eb882a5a81d25b9153.js +1 -0
  17. package/assets/esri/core/workers/chunks/a74182ff402c3a808323.js +1 -0
  18. package/assets/esri/core/workers/chunks/{6fd0d9431b141f2a3252.js → cefb70d633c220cbedf9.js} +1 -1
  19. package/assets/esri/core/workers/chunks/{69c9a12c97ead8963817.js → d1304d414b1fa725168a.js} +1 -1
  20. package/assets/esri/core/workers/chunks/d453627894e6e5b02023.js +1 -0
  21. package/assets/esri/core/workers/chunks/e4380706b629729f2212.js +1 -0
  22. package/assets/esri/core/workers/chunks/{5d9c92c4e60a4696fdad.js → e488e5c62cb375c87a39.js} +1 -1
  23. package/assets/esri/core/workers/chunks/ea1877ce00da3b585a30.js +1 -0
  24. package/assets/esri/core/workers/chunks/ec77222776f755dc372c.js +1 -0
  25. package/assets/esri/core/workers/chunks/f5867d8ba73c67ac27d2.js +1 -0
  26. package/assets/esri/core/workers/chunks/{b7ed5f130661e9ca00b9.js → f5a058a0ce006bce2a2a.js} +1 -1
  27. package/assets/esri/libs/parquet/pkg/bundle_bg.wasm +0 -0
  28. package/chunks/Fog.glsl.js +5 -5
  29. package/chunks/GlowBlur.glsl.js +3 -3
  30. package/chunks/GlowComposite.glsl.js +1 -36
  31. package/chunks/bundle.js +1 -1
  32. package/chunks/portal.js +2 -0
  33. package/config.js +1 -1
  34. package/geometry/support/HalfFloatArray.js +1 -1
  35. package/geometry/support/buffer/BufferView.js +1 -1
  36. package/kernel.js +1 -1
  37. package/layers/graphics/sources/support/ParquetSourceWorker.js +1 -1
  38. package/layers/support/AnnotationFeatureSublayer.js +1 -1
  39. package/libs/parquet/parquet.js +1 -1
  40. package/package.json +3 -3
  41. package/smartMapping/symbology/types.d.ts +1 -1
  42. package/support/revision.js +1 -1
  43. package/views/2d/engine/Stage.js +1 -1
  44. package/views/2d/engine/vectorTiles/SpriteMosaic.js +1 -1
  45. package/views/2d/engine/vectorTiles/VectorTileContainer.js +1 -1
  46. package/views/2d/engine/webgl/Painter.js +1 -1
  47. package/views/2d/engine/webgl/SpriteMosaic.js +1 -1
  48. package/views/2d/engine/webgl/shaderGraph/techniques/Technique.js +1 -1
  49. package/views/2d/engine/webgl/shaderGraph/techniques/heatmap/HeatmapTechnique.js +1 -1
  50. package/views/2d/engine/webgl/shaderGraph/techniques/labels/LabelTechnique.js +1 -1
  51. package/views/2d/engine/webgl/shaderGraph/techniques/tile/TileDebugInfoTechnique.js +1 -1
  52. package/views/2d/engine/webgl/shaderGraph/techniques/tile/TileStencilTechnique.js +1 -1
  53. package/views/2d/layers/AnnotationFeatureLayerView2D.js +1 -1
  54. package/views/2d/layers/features/FeatureContainer.js +1 -1
  55. package/views/2d/layers/features/layerAdapters/AnnotationLayerAdapter.js +1 -1
  56. package/views/2d/layers/features/support/FeatureSetReaderParquet.js +1 -1
  57. package/views/2d/layers/graphics/GraphicContainer.js +1 -1
  58. package/views/2d/layers/graphics/HighlightGraphicContainer.js +1 -1
  59. package/views/3d/environment/CloudyWeather.js +1 -1
  60. package/views/3d/environment/SunnyWeather.js +1 -1
  61. package/views/3d/support/GaussianSplatSortWorker.js +1 -1
  62. package/views/3d/support/buffer/InterleavedLayout.js +1 -1
  63. package/views/3d/support/gaussianSplatting/GaussianSplatDataStore.js +1 -1
  64. package/views/3d/terrain/TileCompositor.js +1 -1
  65. package/views/3d/webgl-engine/core/shaderLibrary/ShaderOutput.js +1 -1
  66. package/views/3d/webgl-engine/core/shaderLibrary/TextureBackedBufferFields.glsl.js +11 -11
  67. package/views/3d/webgl-engine/effects/clouds/CloudsParameters.js +1 -1
  68. package/views/3d/webgl-engine/effects/clouds/CloudsPresets.js +1 -1
  69. package/views/3d/webgl-engine/effects/debug/RenderNodeVisualizerNode.js +1 -1
  70. package/views/3d/webgl-engine/effects/glow/Glow.js +1 -1
  71. package/views/3d/webgl-engine/effects/glow/GlowBlur.glsl.js +1 -1
  72. package/views/3d/webgl-engine/effects/glow/GlowComposite.glsl.js +1 -1
  73. package/views/3d/webgl-engine/effects/glow/GlowCompositeTechnique.js +1 -1
  74. package/views/3d/webgl-engine/effects/glow/blurEmission.glsl.js +38 -0
  75. package/views/3d/webgl-engine/effects/shadowAccumulation/ShadowAccumulator.js +1 -1
  76. package/views/3d/webgl-engine/lib/AttributeArray.js +1 -1
  77. package/views/3d/webgl-engine/lib/BindParameters.js +1 -1
  78. package/views/3d/webgl-engine/lib/DefaultVertexBufferLayouts.js +1 -1
  79. package/views/3d/webgl-engine/lib/MainFramebuffer.js +1 -1
  80. package/views/3d/webgl-engine/lib/RenderContext.js +1 -1
  81. package/views/3d/webgl-engine/lib/Renderer.js +1 -1
  82. package/views/3d/webgl-engine/lib/RenderingContext.js +1 -1
  83. package/views/3d/webgl-engine/lib/TextureBackedBuffer/TextureBackedBufferFieldCreation.js +1 -1
  84. package/views/3d/webgl-engine/lib/glUtil3D.js +1 -1
  85. package/views/3d/webgl-engine/materials/LineMarkerMaterial.js +1 -1
  86. package/views/3d/webgl-engine/materials/RibbonLineMaterial.js +1 -1
  87. package/views/popupAdapter.js +1 -1
  88. package/widgets/Directions.d.ts +1 -1
  89. package/widgets/OrientedImageryViewer/components/VideoEnhancementTools.js +1 -1
  90. package/widgets/OrientedImageryViewer.js +1 -1
  91. package/widgets/support/FilterBuilder.js +1 -1
  92. package/assets/esri/core/workers/chunks/07613ecf13c38ad58b79.js +0 -1
  93. package/assets/esri/core/workers/chunks/0846855843f85661e974.js +0 -1
  94. package/assets/esri/core/workers/chunks/30376f00cda1165a2504.js +0 -1
  95. package/assets/esri/core/workers/chunks/423c2692df662b3dddd4.js +0 -1
  96. package/assets/esri/core/workers/chunks/46f8c7ae7fb356c3410d.js +0 -1
  97. package/assets/esri/core/workers/chunks/48e2d0bfb62e1f4f2ad9.js +0 -1
  98. package/assets/esri/core/workers/chunks/4bf7c0c874d30b1c0760.js +0 -1
  99. package/assets/esri/core/workers/chunks/7253a439c98200e3e748.js +0 -1
  100. package/assets/esri/core/workers/chunks/848a9f0e5373bbf289a5.js +0 -1
  101. package/assets/esri/core/workers/chunks/ad404195107eadf91e16.js +0 -1
  102. package/assets/esri/core/workers/chunks/b2e2234fdf8e05bc3312.js +0 -1
  103. package/assets/esri/core/workers/chunks/bf11319138facf44752c.js +0 -1
  104. package/assets/esri/core/workers/chunks/ec69dd546c312ba97110.js +0 -1
  105. package/assets/esri/core/workers/chunks/f247f3c5148fa0237a7c.js +0 -1
  106. package/assets/esri/core/workers/chunks/f4d351b4cd9d1aa10632.js +0 -1
  107. package/geometry/support/float16.js +0 -2
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import{__addDisposableResource as e,__disposeResources as t}from"tslib";import{toConst as s}from"../../../../core/compilerUtils.js";import r from"../../../../core/Error.js";import i from"../../../../core/Handles.js";import has from"../../../../core/has.js";import a from"../../../../core/Logger.js";import{onAbortOrThrow as n,throwIfAborted as o}from"../../../../core/promiseUtils.js";import{QueueProcessor as u}from"../../../../core/QueueProcessor.js";import{parseWhereClause as l}from"../../../../core/sql.js";import{getMetersPerUnitForSR as c}from"../../../../core/units.js";import p from"../../../../geometry/SpatialReference.js";import{set as d,create as f,expandWithAABB as h,expandWithRect as m,negativeInfinity as y}from"../../../../geometry/support/aaBoundingBox.js";import{copy as g,negativeInfinity as _,create as w,expandWithRect as x}from"../../../../geometry/support/aaBoundingRect.js";import{isWebMercator as F,isWGS84 as S}from"../../../../geometry/support/spatialReferenceUtils.js";import{convertToGeometry as I}from"../../featureConversionUtils.js";import{getFieldNamesFromStatistics as v}from"../../data/attributeSupport.js";import{getQueryResultExtent as R,getQueryBoundingRects as q,QueryEngine as b}from"../../data/QueryEngine.js";import{queryCapabilities as C}from"../../data/QueryEngineCapabilities.js";import{QueryEngineResult as E}from"../../data/QueryEngineResult.js";import{normalizeQueryLike as P}from"../../data/queryUtils.js";import{createFileProvider as O}from"../parquet/createFileProvider.js";import{readFieldStatistic as M}from"../parquet/ParquetFileStatistics.js";import{createDrawingInfo as T}from"./clientSideDefaults.js";import{getParquetFileId as j,getParquetRowId as Q,getParquetObjectId as A}from"./parquetIdUtils.js";import B from"../../../support/Field.js";import G from"../../../support/FieldsIndex.js";import{isNumericField as N}from"../../../support/fieldUtils.js";import{fromParquetGeometryEncodingJSON as D}from"../../../support/parquetEncodingUtils.js";import{completeParquetLayerInfo as z,fromParquetJSONGeometryType as V,toParquetJSONGeometryType as k}from"../../../support/parquetUtils.js";import{loadParquetModule as W}from"../../../../libs/parquet/loadParquetModule.js";import{normalizeColumnPath as U}from"../../../../libs/parquet/parquet.js";import{FeatureStoreQueryAdapter as Z}from"../../../../views/2d/layers/features/FeatureStoreQueryAdapter.js";import{FeatureSnapshotSourceChunk as J}from"../../../../views/2d/layers/features/sources/strategies/chunks/FeatureSnapshotSourceChunk.js";import{FeatureSourceChunkStore as L}from"../../../../views/2d/layers/features/sources/strategies/chunks/SourceChunkStore.js";import{FeatureMetadata as H}from"../../../../views/2d/layers/features/support/FeatureMetadata.js";import{FeatureSetReaderParquet as X}from"../../../../views/2d/layers/features/support/FeatureSetReaderParquet.js";const Y=new Z,$=4,K="__OBJECTID",ee=new TextDecoder,te=8e3,se=2e7,re=8,ie=2;class ae{constructor(e,t){this._files=e,this._createFileStream=t,this._fileIndex=0,this._streamIndex=0,this._streams=[],this._pending=new Set,this._resolvedCount=0}async next(e){for(await this._fill(e);this._pending.size>0;){o(e),await this._fill(e);const t=await ne(this._pending);if(this._pending.delete(t.read),this._resolvedCount++,null!=t.chunk)return t.chunk}return null}async _fill(e){for(this._removeDone();this._pending.size<re;){const t=this._getOrCreateNextStream(e);if(null==t)return;this._pending.add(t.read(e))}}_getOrCreateNextStream(e){const t=this._resolvedCount>=re?re:ie;if(this._fileIndex<this._files.length&&this._streams.length<t){const t=this._files[this._fileIndex++],s=new oe(t.id,this._createFileStream(t,e));return this._streams.push(s),s}return this._getNextStream()}_getNextStream(){const e=this._streams.length;for(let t=0;t<e;t++){const s=(this._streamIndex+t)%e,r=this._streams[s];if(r.canRead)return this._streamIndex=(s+1)%e,r}return null}_removeDone(){let e=this._streamIndex;for(let t=this._streams.length-1;t>=0;t--)this._streams[t].done&&(this._streams.splice(t,1),t<e&&e--);this._streamIndex=this._streams.length>0?e%this._streams.length:0}}function ne(e){return Promise.race(Array.from(e,async e=>({read:e,chunk:await e})))}class oe{constructor(e,t){this._fileId=e,this._stream=t,this._readCount=0,this._reachedEnd=!1}get canRead(){return!this._reachedEnd}get done(){return this._reachedEnd&&0===this._readCount}async read(e){this._readCount++;try{const t=await this._stream,s=await t.next(e);return null==s?(this._reachedEnd=!0,null):{fileId:this._fileId,chunk:s}}finally{this._readCount--}}}class ue{constructor(){this._hasZ=!1,this._hasM=!1,this._queue=new u({concurrency:$,process:(e,t)=>this._executeQuery(e,t)}),this._streams=new Map,this._streamIdCounter=0,this._indexMap={},this._handles=new i}async load(e){const t=e.spatialReference?p.fromJSON(e.spatialReference):void 0;if(t&&!t.isWGS84&&!t.isWebMercator)throw new r("parquet:unsupported-projection","Only WGS84 and Web Mercator are supported");this._customParameters=e.customParameters,this._loadParameters=e,await this._updateProvider(O(e.provider,null,()=>this._customParameters));const s=await this._provider.getMetadata(),i=await z(s,{fields:e.fields?.map(e=>B.fromJSON(e)),geometryEncoding:e.geometryEncoding?D(e.geometryEncoding):null,geometryType:e.geometryType?V(e.geometryType):null,displayOptimization:e.displayOptimization,spatialReference:t});if(this._hasZ=!!s?.hasZ,this._hasM=!!s?.hasM,!i.fields)throw new r("parquet:unsupported","Fields must be defined");let n;if(i.spatialReference&&i.geometryType){if(!i.spatialReference)throw new r("parquet:unsupported","SpatialReference must be defined");if(!i.spatialReference.isGeographic&&!i.spatialReference.isWebMercator)throw new r("parquet:unsupported-projection","Only WGS84 and Web Mercator are supported");i.spatialReference.isGeographic&&!i.spatialReference.isWGS84&&(a.getLogger("parquet:unsupported-projection").warn("Found a geographic projection that is not WGS84. Handling as WGS84.",{spatialReference:i.spatialReference}),i.spatialReference=p.WGS84),n={geometry:i.geometryEncoding?{geometryType:k(i.geometryType),spatialReference:i.spatialReference.toJSON(),encoding:i.geometryEncoding.toJSON()}:null,displayOptimization:i.displayOptimization}}this.setCustomParameters(e.customParameters),this._displayOptimization=i.displayOptimization,await this._provider.updateGeometryInfo(n),this._capabilities=qe(await this._getFileStatistics(),this._hasZ,this._hasM);const o=await this._provider.getFiles();if(!o.length)return{layerDefinition:{},capabilities:qe(null,this._hasZ,this._hasM)};const u=await o[0].file;i.file=u;const{fields:l}=i;if(null==l)throw new r("parquet-layer:missing-metadata","Unable to create parquet source: cannot infer fields",l);l.push(new B({name:K,type:"oid",alias:K}));for(const r of l){const e=u.getColumnId(r.name);null!=e&&(this._indexMap[r.name]=e)}const c=new G(l.map(e=>e.toJSON()));this._fieldsIndex=c;const d=k(i.geometryType??"point");return this._metadata=H.createFeature({fieldsIndex:c.toJSON(),geometryType:d,hasZ:this._hasZ,hasM:this._hasM,featureIdInfo:{type:"object-id",fieldName:K},subtypes:null,subtypeField:null,types:null,typeIdField:null,globalIdField:null,spatialReference:i.spatialReference,outSpatialReference:null,attributeSpatialReference:null,timeInfo:null,timeReferenceUnknownClient:null,dateFieldsTimeZone:null}),this._queryEngineParams={fieldsIndex:this._metadata.fieldsIndex,geometryType:d,featureIdInfo:{type:"object-id",fieldName:K},hasM:this._hasM,hasZ:this._hasZ,spatialReference:i.spatialReference?.toJSON()??{wkid:4326},aggregateAdapter:null,timeInfo:null,definitionExpression:null},this._fullExtent=s?.extent?s.extent:await this._tryDeriveParquetFullExtent(i),{capabilities:this._capabilities,layerDefinition:{fields:i.fields?.map(e=>e.toJSON()),drawingInfo:T(d),extent:this._fullExtent??void 0,geometryType:d,geometryEncoding:i.geometryEncoding?.toJSON(),displayOptimization:i.displayOptimization}}}destroy(){this._provider.destroy(),this._queue.destroy();for(const{handle:e}of this._streams.values())e.remove();this._streams.clear(),this._indexMap={},this._handles.removeAll()}async reload(e){this.destroy(),await this.load(e)}set remoteClient(e){this._source=e.createInvokeProxy("")}setCustomParameters(e){this._customParameters=e}getIndexMap(){return this._indexMap}async updateFileProvider(e){this._loadParameters={...this._loadParameters,provider:e};const t=O(e,this._provider.getGeometryInfo(),()=>this._customParameters);await this._updateProvider(t)}async getDiagnosticsSnapshot(){const e=await this._provider.getFiles();return{files:await Promise.all(e.map(e=>e.getDiagnosticsSnapshot()))}}async getColumnIndex(e){return(await this._getFileInfoById(e.fileId)).getColumnIndex(e.rowGroupIndex,e.columnIndex)}async getOffsetIndex(e){return(await this._getFileInfoById(e.fileId)).getOffsetIndex(e.rowGroupIndex,e.columnIndex)}async queryFeatures(e,t){const s=await P(e,null,this._queryEngineParams.spatialReference);if(this._validateQuery(s),be(s)||(s.resultRecordCount=s.resultRecordCount?Math.min(s.resultRecordCount,te):te,s.resultOffset=s.resultOffset??0),s.outStatistics)return this._queryStatistics(s,t);s.returnDistinctValues&&(s.returnGeometry=void 0);return(await this._enqueueQuery(s,t)).createQueryResponse()}async queryFeatureCount(e,t){const s=await P(e,null,this._queryEngineParams.spatialReference);if(this._validateQuery(s),!de(s))return this._getFeatureCount();s.outFields=void 0,s.returnGeometry=void 0;return(await this._enqueueQuery(s,t)).createQueryResponseForCount()}async queryObjectIds(e,t){const s=await P(e,null,this._queryEngineParams.spatialReference);if(this._validateQuery(s),!de(s))return Array.from({length:await this._getFeatureCount()},(e,t)=>t);s.resultRecordCount=s.resultRecordCount?Math.min(s.resultRecordCount,8e3):8e3,s.resultOffset=s.resultOffset??0,s.returnGeometry=void 0,s.outFields=void 0;return(await this._enqueueQuery(s,t)).items.map(e=>e.getObjectId())}async queryAttributeBins(e,t={}){throw new r("parquet:unsupported","queryAttributeBins not supported.")}async queryExtent(e,t){const r=await P(e,null,this._queryEngineParams.spatialReference);if(this._validateQuery(r),this._fullExtent&&!de(r))return{count:await this._getFeatureCount(),extent:this._fullExtent};const i=s(this._metadata.spatialReference);r.returnGeometry=!0,r.outFields=void 0;const a=d(f(),y),n=f(),o=await this._enqueueQuery(r,t);let u=0;for(const s of o.items)s.getBounds(n)&&(h(a,n),u+=1);return{count:u,extent:R(a,i,r.outSR?s(r.outSR):i.toJSON(),i,!1)}}async queryStream(e,t){if(!t.signal)throw new Error("InternalError: AbortSignal must be passed");const s=await this._getCandidateFiles(e),r=new ae(s,async(t,s)=>{const r=await t.file,i=await this._createParquetDisplayQuery(r,t.id,e);return r.executeQuery(i,te,s)}),i=this._streamIdCounter++,a=n(t.signal,e=>{const t=this._streams.get(i);null!=t&&(t.handle.remove(),this._streams.delete(i))});return this._streams.set(i,{stream:r,handle:a}),i}async getStreamNext(e,t){if(!t.signal)throw new Error("InternalError: AbortSignal must be passed");const s=this._streams.get(e);if(!s)return{result:null};const r=await s.stream.next(t.signal);if(null==r)return s.handle.remove(),this._streams.delete(e),{result:null};const i=r.chunk.serialize().buffer,a={fileId:r.fileId,buffer:i};return i instanceof ArrayBuffer?{result:a,transferList:[i]}:{result:a}}async getStreamNextFeatures(e,t){const{result:s}=await this.getStreamNext(e,t);if(null==s)return null;const r=(await W()).ParquetChunk.deserialize(new Uint8Array(s.buffer)),i=new X(this._metadata,this._indexMap,r,s.fileId),a=[];for(;i.next();){const e=I(i.readGeometryWorldSpace(),i.geometryType,i.hasZ,i.hasM),t=i.readAttributes();a.push({attributes:t,geometry:e})}return{features:a}}async createPatch(e,t,s,r,i){if(!i.signal)throw new Error("InternalError: AbortSignal must be passed");const a=await this._getFileInfoById(e),n=await a.file;return(await n.createChunkPatch(t,s,r,i.signal)).serialize().buffer}async _updateProvider(e){const t=this._provider;this._handles.removeAll(),this._provider=e,this._handles.add([e.events.on("rangeRead",e=>{this._source.onRangeRead(e)}),e.events.on("sourceChanged",async()=>{await this.reload(this._loadParameters),await this._source.onSourceChange()})]),await(t?.destroy())}async _getCandidateFiles(e){const t=await this._provider.getFiles(),s=await this._getSpatialFilePruning(e);if(null==s)return t;const r=t.filter(e=>this._mayIncludeFileForSpatialPruning(e,s));return"xz"===s.type?ve(r,s):r}async _queryStatistics(e,t){const s=await P({...e},null,this._queryEngineParams.spatialReference);if(s.returnGeometry=void 0,me(s,this._fieldsIndex)){const e=await this._getStatisticsFromFiles(s);if(e)return e}return(await this._enqueueQuery(s,t)).createQueryResponse()}async _getStatisticsFromFiles(e){const t=await this._provider.getFiles(),s={},r=[];for(const i of e.outStatistics??[]){const e=_e(i,t);if(!e.available)return null;s[i.outStatisticFieldName]=e.value,r.push(ge(i,this._fieldsIndex))}return{fields:r,features:[{attributes:s}]}}async _getSpatialFilePruning(e){if("tile"!==e.type&&("arcade"!==e.type||null==e.extent))return null;const t=this._displayOptimization,s=t?.index;if(null==s)return null;const r=e.outSpatialReference.wkid;if(null==s.wkid||null==r)return null;const i=s.wkid,a=await W();switch(s.type){case"xz":return{type:"xz",fieldName:U(s.code),intersects:(t,n)=>a.queryIntersectsXZStatistics(s.fullExtent,e.extent,r,i,s.maxLevel,t,n)};case"z":return{type:"xy",xFieldName:U(s.xColumn),yFieldName:U(s.yColumn),intersects:(t,s,n,o)=>a.queryIntersectsXYStatistics(e.extent,r,i,t,s,n,o)}}}_mayIncludeFileForSpatialPruning(e,t){switch(t.type){case"xz":{const s=Ie(e,t);return"null-only"!==s?.type&&("bounds"!==s?.type||t.intersects(s.minValue,s.maxValue))}case"xy":{const s=e.statistics.statistics.get(t.xFieldName),r=e.statistics.statistics.get(t.yFieldName);return"null-only"!==s?.type&&"null-only"!==r?.type&&("bounds"!==s?.type||"bounds"!==r?.type||t.intersects(s.minValue,s.maxValue,r.minValue,r.maxValue))}}}async _tryDeriveParquetFullExtent(s){if(!s.spatialReference)return null;if(null==this._fullExtent&&"location"===s.geometryEncoding?.type){const i=await this._provider.getFiles(),{xField:a,yField:n}=s.geometryEncoding,o=d(f(),y);let u=!1;for(const s of i){const i=await s.file;for(const s of i.rowGroups()){const i={stack:[],error:void 0,hasError:!1};try{const t=e(i,s.columnDescriptorForAttribute(a),!1),r=e(i,s.columnDescriptorForAttribute(n),!1),l=M(t),c=M(r);if("bounds"===l?.type&&"bounds"===c?.type){const e=[l.minValue,c.minValue,l.maxValue,c.maxValue];m(o,e),u=!0}s.free()}catch(r){i.error=r,i.hasError=!0}finally{t(i)}}}return u?{xmin:o[0],ymin:o[1],xmax:o[3],ymax:o[4],spatialReference:s.spatialReference?.toJSON()}:null}return null}async _getFileInfoById(e){const t=await this._provider.getFiles();for(const s of t)if(s.id===e)return s;throw new Error(`InternalError: File ${e} does not exist`)}async _getFileStatistics(){return{featureCount:await this._getFeatureCount(),byteLength:await this._getByteLength()}}async _getFile(e){return(await this._getFileInfoById(e)).file}async _createParquetQuery(e,t,s,r,i){const a=(await W()).Query.new();null!=s&&a.setPreFilterStart(s),null!=r&&a.setPreFilterCount(r),null!=i&&a.setPostFilterCount(i);const n=await this._getRequiredFields(e);a.setOutFields(n),(e.geometry||e.returnGeometry)&&a.setReturnGeometry(!0),a.setReturnZ(!!e.returnZ),a.setReturnM(!!e.returnM);const o=this._tryGetGeneralizedGeometryResolution(e);null!=o&&a.setSourceResolution(o);const u=e.geometry?.spatialReference??this._queryEngineParams.spatialReference,l=u.wkid;if(e.geometry&&(F(u)||S(u))){const t=g(w(),_);for(const s of q(e.geometry))x(t,s);a.setOutSpatialReference(l),a.setExtent({xmin:t[0],ymin:t[1],xmax:t[2],ymax:t[3]})}if(e.where){const{id:s,file:r}=t;await this._setWhereClause(a,await r,s,e.where)}return a}async _createParquetDisplayQuery(e,t,s){const r=(await W()).Query.new();if("tile"===s.type){r.setExtent(s.extent),r.setQuantizationTransform(s.transform);const e=this._sourceResolution(s.resolution,s.outSpatialReference);null!=e&&r.setSourceResolution(e)}else"arcade"===s.type&&null!=s.extent&&r.setExtent(s.extent);return r.setOutFields(s.outFields.filter(e=>null!=this._indexMap[e])),r.setOutSpatialReference(s.outSpatialReference.wkid),r.setReturnGeometry(s.returnGeometry),r.setReturnZ(s.returnZ),r.setReturnM(s.returnM),s.where&&await this._setWhereClause(r,e,t,s.where),r}async _getFeatureCount(){return(await this._provider.getFiles()).map(e=>e.statistics.rowCount).reduce((e,t)=>e+t,0)}async _getByteLength(){return(await this._provider.getFiles()).map(e=>e.statistics.byteSize).reduce((e,t)=>e+t,0)}_validateQuery(e){if(!this._capabilities.query.supportsStatistics&&e.outStatistics)throw new r("parquet:unsupported","Statistics queries are not supported",{query:e});if(!this._capabilities.query.supportsOrderBy&&e.orderByFields?.length)throw new r("parquet:unsupported","Queries using orderBy are not supported",{query:e});if(!this._capabilities.query.supportsDistinct&&e.returnDistinctValues)throw new r("parquet:unsupported","Queries using returnDistinctValues are not supported",{query:e})}async _setWhereClause(e,t,s,i){const a=this._indexMap,n=this._fieldsIndex,o={getAttribute(e,r){const i=a[r];if(null==i){const t=n.get(r);if("__OBJECTID"===t?.name){const t=e.row+e.rowGroupStart;return A(s,t)}return null}const o=t.readAttribute(e.rowGroup,e.row,i);if(null==o)return null;const u=n.get(r);return"esriFieldTypeString"===u.type||"esriFieldTypeDateOnly"===u.type||"esriFieldTypeTimeOnly"===u.type||"esriFieldTypeTimestampOffset"===u.type?ee.decode(o):o}},u=await l(i,this._fieldsIndex);if(!u.isStandardized)throw new r("sql-parse-error","expression is not standardized");const c=(e,t,s)=>u.testFeatureCompiled({rowGroup:e,row:t,rowGroupStart:s},o,null),p=u.fieldNames.map(e=>n.get(e)).filter(e=>e&&null!=this._indexMap[e?.name]);e.setWhere(i),e.setWhereEvaluator(c),e.setWhereFields(p.map(e=>e.name))}async*_streamFeatures(e,t,s,r,i){const a=await this._provider.getFiles();let n=0;for(const o of a){const a=n,u=n+o.statistics.rowCount;if(n+=o.statistics.rowCount,null!=t&&t>=u)continue;const l=null!=t?Math.max(t-a,0):null;let c=s;if(null!=s){const e=t??0,r=e+s,i=Math.max(e,a),n=Math.min(r,u);c=Math.max(n-i,0)}if(0===c)continue;const p=await this._createParquetQuery(e,o,l,c,r),d=await o.file,f=await d.executeQuery(p,te),h=async()=>{const e=await f.next(i);if(!e)return null;const t=new X(this._metadata,this._indexMap,e,o.id);return Se([new J(t,null,0,!1)],this._queryEngineParams)};let m=await h();for(;null!=m;)yield m,m=await h()}}async _queryFeaturesWithQueryEnginePagination(e,t){const s=[],r=this._streamFeatures(e,null,null,null,t);let i=await r.next();for(;!i.done;){const a=await i.value.executeQueryForOpaqueFeatures({...e,where:void 0},t);for(const e of a)s.push(e);i=await r.next()}return s}async _queryFeaturesWithUpfrontPagination(e,t){let s,r,i,a=e.resultOffset??0,n=e.resultRecordCount??te;fe(e)?he(e)||(i=a+n):(a&&(s=a,a=0),r=e.resultRecordCount);const o=[],u=this._streamFeatures(e,s,r,i,t);let l=await u.next();for(;!l.done&&n>0;){const s=await l.value.executeQueryForOpaqueFeatures({...e,where:void 0},t);for(const e of s)if(a>0)a--;else if(o.push(e),--n<=0)return o;l=await u.next()}return o}_enqueueQuery(e,t){return this._queue.push(e,t)}async _executeQuery(e,t){if(e.objectIds?.length){const s=new Map;for(const t of e.objectIds){const e=j(t),r=Q(t);let i=s.get(e);i||(i=[],s.set(e,i)),i.push(r)}const r=[];for(const[i,a]of s.entries()){const s=await this._executeFileIdQuery(e,i,a,t);for(const e of s)r.push(e)}return new E(r,e,{fieldsIndex:this._fieldsIndex,geometryType:this._metadata.geometryType,spatialReference:this._queryEngineParams.spatialReference,hasM:this._hasM,hasZ:this._hasZ,featureAdapter:Y,featureIdInfo:this._queryEngineParams.featureIdInfo})}if("1=1"===e.where&&(e.where=null),e.resultOffset??=0,e.resultRecordCount??=await this._getFeatureCount(),e.resultRecordCount>se){if(!(this._displayOptimization&&e.geometry))throw new r("parquet:cannot-execute-query","Unable to execute query, dataset is too large.")}const s=!!e.orderByFields?.length||!!e.outStatistics?.length||!!e.returnDistinctValues,i=s?await this._queryFeaturesWithQueryEnginePagination(e,t):await this._queryFeaturesWithUpfrontPagination(e,t);return s||(e.resultOffset=0),new E(i,e,{fieldsIndex:this._fieldsIndex,geometryType:this._metadata.geometryType,spatialReference:this._queryEngineParams.spatialReference,hasM:this._hasM,hasZ:this._hasZ,featureAdapter:Y,featureIdInfo:this._queryEngineParams.featureIdInfo})}async _executeFileIdQuery(e,t,s,r){const i=await this._getRequiredFields(e),a=(await W()).Query.new();a.setOutFields(i),a.setReturnGeometry(!!e.returnGeometry),a.setReturnZ(!!e.returnZ),a.setReturnM(!!e.returnM),a.setIds(new Uint32Array(s));const n=await this._getFile(t),o=await n.executeQuery(a,te,r);let u=await o.next(r),l=0;const c=[];for(;null!=u;){const e=new X(this._metadata,this._indexMap,u,t),s=new J(e,null,l++,!1);c.push(s),u=await o.next(r)}return Se(c,this._queryEngineParams).executeQueryForOpaqueFeatures(e,r)}async _getRequiredFields(e){const t=new Set;if(e.outStatistics)for(const s of v(this._fieldsIndex,e.outStatistics,e.groupByFieldsForStatistics))t.add(s);else if(e.outFields)for(const s of e.outFields)t.add(s);return(t.has("*")?this._fieldsIndex.fields.map(e=>e.name):Array.from(t)).filter(e=>null!=this._indexMap[e])}_tryGetGeneralizedGeometryResolution(e){if(!this._displayOptimization)return null;const t=e.outSR??this._queryEngineParams.spatialReference;if(!F(t)&&!S(t))return null;const s=e.quantizationParameters?.tolerance??e.maxAllowableOffset;return s?this._sourceResolution(s,t):null}_sourceResolution(e,t){const s=this._queryEngineParams.spatialReference,r=e*(c(t)/c(s));return!Number.isFinite(r)||r<=0?null:r}}function le(e){switch(e){case"fullText":case"having":case"timeExtent":case"historicMoment":case"aggregateIds":case"uniqueIds":case"gdbVersion":case"objectIds":case"where":case"geometry":case"resultOffset":case"resultRecordCount":return!0;default:return!1}}function ce(e){switch(e){case"fullText":case"having":case"timeExtent":case"historicMoment":case"aggregateIds":case"uniqueIds":case"gdbVersion":case"objectIds":case"where":case"geometry":return!0;default:return!1}}function pe(e){switch(e){case"fullText":case"having":case"timeExtent":return!0;case"historicMoment":case"aggregateIds":case"uniqueIds":case"gdbVersion":case"objectIds":case"where":case"resultOffset":case"geometry":case"resultRecordCount":return!1}return!1}function de(e){for(const t in e){const s=t;if(le(s)&&null!==e[s])return!0}return!1}function fe(e){for(const t in e){const s=t;if(ce(s)&&null!==e[s])return!0}return!1}function he(e){for(const t in e){const s=t;if(pe(s)&&null!==e[s])return!0}return!1}function me(e,t){return!!e.outStatistics?.length&&!de(e)&&!e.groupByFieldsForStatistics?.length&&!e.orderByFields?.length&&!e.returnDistinctValues&&!e.returnAggIds&&e.outStatistics.every(e=>ye(e,t))}function ye(e,t){switch(e.statisticType){case"count":return"1"===e.onStatisticField||null!=t.get(e.onStatisticField);case"min":case"max":{const s=t.get(e.onStatisticField);return null!=s&&N(s)}default:return!1}}function ge(e,t){const s="exceedslimit"!==e.statisticType?t.get(e.onStatisticField):null,r="min"!==e.statisticType&&"max"!==e.statisticType||"esriFieldTypeDate"!==s?.type?"esriFieldTypeDouble":s.type;return{name:e.outStatisticFieldName,alias:e.outStatisticFieldName,type:r}}function _e(e,t){switch(e.statisticType){case"count":return we(e,t);case"min":return xe(e,t,Math.min);case"max":return xe(e,t,Math.max);default:return{available:!1,value:null}}}function we(e,t){if("count"!==e.statisticType)return{available:!1,value:null};if("1"===e.onStatisticField)return{available:!0,value:t.reduce((e,t)=>e+t.statistics.rowCount,0)};let s=0;for(const r of t){const t=r.statistics.statistics.get(e.onStatisticField);if(null==t||null==t.nullCount)return{available:!1,value:null};s+=r.statistics.rowCount-t.nullCount}return{available:!0,value:s}}function xe(e,t,s){if("min"!==e.statisticType&&"max"!==e.statisticType)return{available:!1,value:null};let r=null;const i="min"===e.statisticType?"minValue":"maxValue";for(const a of t){const t=a.statistics.statistics.get(e.onStatisticField);if(null==t)return{available:!1,value:null};switch(t.type){case"null-only":continue;case"unknown":return{available:!1,value:null};case"bounds":{const e=Fe(t[i]);if(null==e)return{available:!1,value:null};r=null==r?e:s(r,e);break}}}return{available:!0,value:r}}function Fe(e){return"number"==typeof e&&Number.isFinite(e)?e:null}function Se(e,t){const s=new L;for(const r of e)s.insert(r);return new b({...t,featureStore:s})}function Ie(e,t){return e.statistics.statistics.get(t.fieldName)??null}function ve(e,t){return e.slice().sort((e,s)=>{const r=Re(e,t),i=Re(s,t);return r===i?0:r<i?-1:1})}function Re(e,t){const s=Ie(e,t);return"bounds"!==s?.type?Number.POSITIVE_INFINITY:s.maxValue-s.minValue}function qe(e,t,s){const r=e?.featureCount;let i=!1;return null!=r&&r<has("parquetlayer-full-query-feature-count")&&(i=!0),{analytics:{supportsCacheHint:!1},attachment:null,data:{isVersioned:!1,isBranchVersioned:!1,supportedCurveTypes:[],supportsAttachment:!1,supportsM:s,supportsTrueCurve:!1,supportsZ:t},metadata:{supportsAdvancedFieldProperties:!1},operations:{supportsCalculate:!1,supportsTruncate:!1,supportsValidateSql:!1,supportsAdd:!1,supportsDelete:!1,supportsEditing:!1,supportsChangeTracking:!1,supportsQuery:!0,supportsQueryBins:!1,supportsQueryPivot:!1,supportsQueryAnalytics:!1,supportsQueryAttachments:!1,supportsQueryTopFeatures:!1,supportsResizeAttachments:!1,supportsSync:!1,supportsUpdate:!1,supportsExceedsLimitStatistics:!1,supportsAsyncConvert3D:!1},query:{...C,maxRecordCount:te,supportsOrderBy:i,supportsDistinct:!0,supportsStatistics:!0,supportsSpatialAggregationStatistics:!1,supportedSpatialAggregationStatistics:{envelope:!1,centroid:!1,convexHull:!1}},queryAttributeBins:{supportsDate:!1,supportsFixedInterval:!1,supportsAutoInterval:!1,supportsFixedBoundaries:!1,supportsStackBy:!1,supportsSplitBy:!1,supportsSnapToData:!1,supportsReturnFullIntervalBin:!1,supportsFirstDayOfWeek:!1,supportsNormalization:!1},queryRelated:{supportsCount:!1,supportsOrderBy:!1,supportsPagination:!1,supportsCacheHint:!1},queryTopFeatures:{supportsCacheHint:!1},editing:{supportsDeleteByAnonymous:!1,supportsDeleteByOthers:!1,supportsGeometryUpdate:!1,supportsGlobalId:!1,supportsTrueCurveUpdate:!1,supportsTrueCurveUpdateByTrueCurveClientsOnly:!0,supportsReturnServiceEditsInSourceSpatialReference:!1,supportsRollbackOnFailure:!1,supportsUpdateByAnonymous:!1,supportsUpdateByOthers:!1,supportsUploadWithItemId:!1,supportsUpdateWithoutM:!1,supportsAsyncApplyEdits:!1,zDefault:void 0}}}function be(e){return!!(e.objectIds?.length||e.outStatistics||e.orderByFields?.length||e.returnDistinctValues)}export{ue as default};
2
+ import{__addDisposableResource as e,__disposeResources as t}from"tslib";import{toConst as s}from"../../../../core/compilerUtils.js";import r from"../../../../core/Error.js";import i from"../../../../core/Handles.js";import has from"../../../../core/has.js";import a from"../../../../core/Logger.js";import{onAbortOrThrow as n,throwIfAborted as o}from"../../../../core/promiseUtils.js";import{QueueProcessor as u}from"../../../../core/QueueProcessor.js";import{parseWhereClause as l}from"../../../../core/sql.js";import{getMetersPerUnitForSR as c}from"../../../../core/units.js";import p from"../../../../geometry/SpatialReference.js";import{set as d,create as f,expandWithAABB as h,expandWithRect as m,negativeInfinity as y}from"../../../../geometry/support/aaBoundingBox.js";import{copy as g,negativeInfinity as _,create as w,expandWithRect as x}from"../../../../geometry/support/aaBoundingRect.js";import{isWebMercator as F,isWGS84 as S}from"../../../../geometry/support/spatialReferenceUtils.js";import{convertToGeometry as I}from"../../featureConversionUtils.js";import{getFieldNamesFromStatistics as v}from"../../data/attributeSupport.js";import{getQueryResultExtent as R,getQueryBoundingRects as q,QueryEngine as b}from"../../data/QueryEngine.js";import{queryCapabilities as C}from"../../data/QueryEngineCapabilities.js";import{QueryEngineResult as E}from"../../data/QueryEngineResult.js";import{normalizeQueryLike as P}from"../../data/queryUtils.js";import{createFileProvider as O}from"../parquet/createFileProvider.js";import{readFieldStatistic as M}from"../parquet/ParquetFileStatistics.js";import{createDrawingInfo as j}from"./clientSideDefaults.js";import{getParquetFileId as Q,getParquetRowId as T,getParquetObjectId as A}from"./parquetIdUtils.js";import B from"../../../support/Field.js";import G from"../../../support/FieldsIndex.js";import{isNumericField as N}from"../../../support/fieldUtils.js";import{fromParquetGeometryEncodingJSON as D}from"../../../support/parquetEncodingUtils.js";import{completeParquetLayerInfo as z,fromParquetJSONGeometryType as V,toParquetJSONGeometryType as k}from"../../../support/parquetUtils.js";import{loadParquetModule as W}from"../../../../libs/parquet/loadParquetModule.js";import{normalizeColumnPath as U,readParquetFileAttribute as Z}from"../../../../libs/parquet/parquet.js";import{FeatureStoreQueryAdapter as J}from"../../../../views/2d/layers/features/FeatureStoreQueryAdapter.js";import{FeatureSnapshotSourceChunk as L}from"../../../../views/2d/layers/features/sources/strategies/chunks/FeatureSnapshotSourceChunk.js";import{FeatureSourceChunkStore as H}from"../../../../views/2d/layers/features/sources/strategies/chunks/SourceChunkStore.js";import{FeatureMetadata as X}from"../../../../views/2d/layers/features/support/FeatureMetadata.js";import{FeatureSetReaderParquet as Y}from"../../../../views/2d/layers/features/support/FeatureSetReaderParquet.js";const $=new J,K=4,ee="__OBJECTID",te=8e3,se=2e7,re=8,ie=2;class ae{constructor(e,t){this._files=e,this._createFileStream=t,this._fileIndex=0,this._streamIndex=0,this._streams=[],this._pending=new Set,this._resolvedCount=0}async next(e){for(await this._fill(e);this._pending.size>0;){o(e),await this._fill(e);const t=await ne(this._pending);if(this._pending.delete(t.read),this._resolvedCount++,null!=t.chunk)return t.chunk}return null}async _fill(e){for(this._removeDone();this._pending.size<re;){const t=this._getOrCreateNextStream(e);if(null==t)return;this._pending.add(t.read(e))}}_getOrCreateNextStream(e){const t=this._resolvedCount>=re?re:ie;if(this._fileIndex<this._files.length&&this._streams.length<t){const t=this._files[this._fileIndex++],s=new oe(t.id,this._createFileStream(t,e));return this._streams.push(s),s}return this._getNextStream()}_getNextStream(){const e=this._streams.length;for(let t=0;t<e;t++){const s=(this._streamIndex+t)%e,r=this._streams[s];if(r.canRead)return this._streamIndex=(s+1)%e,r}return null}_removeDone(){let e=this._streamIndex;for(let t=this._streams.length-1;t>=0;t--)this._streams[t].done&&(this._streams.splice(t,1),t<e&&e--);this._streamIndex=this._streams.length>0?e%this._streams.length:0}}function ne(e){return Promise.race(Array.from(e,async e=>({read:e,chunk:await e})))}class oe{constructor(e,t){this._fileId=e,this._stream=t,this._readCount=0,this._reachedEnd=!1}get canRead(){return!this._reachedEnd}get done(){return this._reachedEnd&&0===this._readCount}async read(e){this._readCount++;try{const t=await this._stream,s=await t.next(e);return null==s?(this._reachedEnd=!0,null):{fileId:this._fileId,chunk:s}}finally{this._readCount--}}}class ue{constructor(){this._hasZ=!1,this._hasM=!1,this._queue=new u({concurrency:K,process:(e,t)=>this._executeQuery(e,t)}),this._streams=new Map,this._streamIdCounter=0,this._indexMap={},this._handles=new i}async load(e){const t=e.spatialReference?p.fromJSON(e.spatialReference):void 0;if(t&&!t.isWGS84&&!t.isWebMercator)throw new r("parquet:unsupported-projection","Only WGS84 and Web Mercator are supported");this._customParameters=e.customParameters,this._loadParameters=e,await this._updateProvider(O(e.provider,null,()=>this._customParameters));const s=await this._provider.getMetadata(),i=await z(s,{fields:e.fields?.map(e=>B.fromJSON(e)),geometryEncoding:e.geometryEncoding?D(e.geometryEncoding):null,geometryType:e.geometryType?V(e.geometryType):null,displayOptimization:e.displayOptimization,spatialReference:t});if(this._hasZ=!!s?.hasZ,this._hasM=!!s?.hasM,!i.fields)throw new r("parquet:unsupported","Fields must be defined");let n;if(i.spatialReference&&i.geometryType){if(!i.spatialReference)throw new r("parquet:unsupported","SpatialReference must be defined");if(!i.spatialReference.isGeographic&&!i.spatialReference.isWebMercator)throw new r("parquet:unsupported-projection","Only WGS84 and Web Mercator are supported");i.spatialReference.isGeographic&&!i.spatialReference.isWGS84&&(a.getLogger("parquet:unsupported-projection").warn("Found a geographic projection that is not WGS84. Handling as WGS84.",{spatialReference:i.spatialReference}),i.spatialReference=p.WGS84),n={geometry:i.geometryEncoding?{geometryType:k(i.geometryType),spatialReference:i.spatialReference.toJSON(),encoding:i.geometryEncoding.toJSON()}:null,displayOptimization:i.displayOptimization}}this.setCustomParameters(e.customParameters),this._displayOptimization=i.displayOptimization,await this._provider.updateGeometryInfo(n),this._capabilities=qe(await this._getFileStatistics(),this._hasZ,this._hasM);const o=await this._provider.getFiles();if(!o.length)return{layerDefinition:{},capabilities:qe(null,this._hasZ,this._hasM)};const u=await o[0].file;i.file=u;const{fields:l}=i;if(null==l)throw new r("parquet-layer:missing-metadata","Unable to create parquet source: cannot infer fields",l);l.push(new B({name:ee,type:"oid",alias:ee}));for(const r of l){const e=u.getColumnId(r.name);null!=e&&(this._indexMap[r.name]=e)}const c=new G(l.map(e=>e.toJSON()));this._fieldsIndex=c;const d=k(i.geometryType??"point");return this._metadata=X.createFeature({fieldsIndex:c.toJSON(),geometryType:d,hasZ:this._hasZ,hasM:this._hasM,featureIdInfo:{type:"object-id",fieldName:ee},subtypes:null,subtypeField:null,types:null,typeIdField:null,globalIdField:null,spatialReference:i.spatialReference,outSpatialReference:null,attributeSpatialReference:null,timeInfo:null,timeReferenceUnknownClient:null,dateFieldsTimeZone:null}),this._queryEngineParams={fieldsIndex:this._metadata.fieldsIndex,geometryType:d,featureIdInfo:{type:"object-id",fieldName:ee},hasM:this._hasM,hasZ:this._hasZ,spatialReference:i.spatialReference?.toJSON()??{wkid:4326},aggregateAdapter:null,timeInfo:null,definitionExpression:null},this._fullExtent=s?.extent?s.extent:await this._tryDeriveParquetFullExtent(i),{capabilities:this._capabilities,layerDefinition:{fields:i.fields?.map(e=>e.toJSON()),drawingInfo:j(d),extent:this._fullExtent??void 0,geometryType:d,geometryEncoding:i.geometryEncoding?.toJSON(),displayOptimization:i.displayOptimization}}}destroy(){this._provider.destroy(),this._queue.destroy();for(const{handle:e}of this._streams.values())e.remove();this._streams.clear(),this._indexMap={},this._handles.removeAll()}async reload(e){this.destroy(),await this.load(e)}set remoteClient(e){this._source=e.createInvokeProxy("")}setCustomParameters(e){this._customParameters=e}getIndexMap(){return this._indexMap}async updateFileProvider(e){this._loadParameters={...this._loadParameters,provider:e};const t=O(e,this._provider.getGeometryInfo(),()=>this._customParameters);await this._updateProvider(t)}async getDiagnosticsSnapshot(){const e=await this._provider.getFiles();return{files:await Promise.all(e.map(e=>e.getDiagnosticsSnapshot()))}}async getColumnIndex(e){return(await this._getFileInfoById(e.fileId)).getColumnIndex(e.rowGroupIndex,e.columnIndex)}async getOffsetIndex(e){return(await this._getFileInfoById(e.fileId)).getOffsetIndex(e.rowGroupIndex,e.columnIndex)}async queryFeatures(e,t){const s=await P(e,null,this._queryEngineParams.spatialReference);if(this._validateQuery(s),be(s)||(s.resultRecordCount=s.resultRecordCount?Math.min(s.resultRecordCount,te):te,s.resultOffset=s.resultOffset??0),s.outStatistics)return this._queryStatistics(s,t);s.returnDistinctValues&&(s.returnGeometry=void 0);return(await this._enqueueQuery(s,t)).createQueryResponse()}async queryFeatureCount(e,t){const s=await P(e,null,this._queryEngineParams.spatialReference);if(this._validateQuery(s),!de(s))return this._getFeatureCount();s.outFields=void 0,s.returnGeometry=void 0;return(await this._enqueueQuery(s,t)).createQueryResponseForCount()}async queryObjectIds(e,t){const s=await P(e,null,this._queryEngineParams.spatialReference);if(this._validateQuery(s),!de(s))return Array.from({length:await this._getFeatureCount()},(e,t)=>t);s.resultRecordCount=s.resultRecordCount?Math.min(s.resultRecordCount,8e3):8e3,s.resultOffset=s.resultOffset??0,s.returnGeometry=void 0,s.outFields=void 0;return(await this._enqueueQuery(s,t)).items.map(e=>e.getObjectId())}async queryAttributeBins(e,t={}){throw new r("parquet:unsupported","queryAttributeBins not supported.")}async queryExtent(e,t){const r=await P(e,null,this._queryEngineParams.spatialReference);if(this._validateQuery(r),this._fullExtent&&!de(r))return{count:await this._getFeatureCount(),extent:this._fullExtent};const i=s(this._metadata.spatialReference);r.returnGeometry=!0,r.outFields=void 0;const a=d(f(),y),n=f(),o=await this._enqueueQuery(r,t);let u=0;for(const s of o.items)s.getBounds(n)&&(h(a,n),u+=1);return{count:u,extent:R(a,i,r.outSR?s(r.outSR):i.toJSON(),i,!1)}}async queryStream(e,t){if(!t.signal)throw new Error("InternalError: AbortSignal must be passed");const s=await this._getCandidateFiles(e),r=new ae(s,async(t,s)=>{const r=await t.file,i=await this._createParquetDisplayQuery(r,t.id,e);return r.executeQuery(i,te,s)}),i=this._streamIdCounter++,a=n(t.signal,e=>{const t=this._streams.get(i);null!=t&&(t.handle.remove(),this._streams.delete(i))});return this._streams.set(i,{stream:r,handle:a}),i}async getStreamNext(e,t){if(!t.signal)throw new Error("InternalError: AbortSignal must be passed");const s=this._streams.get(e);if(!s)return{result:null};const r=await s.stream.next(t.signal);if(null==r)return s.handle.remove(),this._streams.delete(e),{result:null};const i=r.chunk.serialize().buffer,a={fileId:r.fileId,buffer:i};return i instanceof ArrayBuffer?{result:a,transferList:[i]}:{result:a}}async getStreamNextFeatures(e,t){const{result:s}=await this.getStreamNext(e,t);if(null==s)return null;const r=(await W()).ParquetChunk.deserialize(new Uint8Array(s.buffer)),i=new Y(this._metadata,this._indexMap,r,s.fileId),a=[];for(;i.next();){const e=I(i.readGeometryWorldSpace(),i.geometryType,i.hasZ,i.hasM),t=i.readAttributes();a.push({attributes:t,geometry:e})}return{features:a}}async createPatch(e,t,s,r,i){if(!i.signal)throw new Error("InternalError: AbortSignal must be passed");const a=await this._getFileInfoById(e),n=await a.file;return(await n.createChunkPatch(t,s,r,i.signal)).serialize().buffer}async _updateProvider(e){const t=this._provider;this._handles.removeAll(),this._provider=e,this._handles.add([e.events.on("rangeRead",e=>{this._source.onRangeRead(e)}),e.events.on("sourceChanged",async()=>{await this.reload(this._loadParameters),await this._source.onSourceChange()})]),await(t?.destroy())}async _getCandidateFiles(e){const t=await this._provider.getFiles(),s=await this._getSpatialFilePruning(e);if(null==s)return t;const r=t.filter(e=>this._mayIncludeFileForSpatialPruning(e,s));return"xz"===s.type?ve(r,s):r}async _queryStatistics(e,t){const s=await P({...e},null,this._queryEngineParams.spatialReference);if(s.returnGeometry=void 0,me(s,this._fieldsIndex)){const e=await this._getStatisticsFromFiles(s);if(e)return e}return(await this._enqueueQuery(s,t)).createQueryResponse()}async _getStatisticsFromFiles(e){const t=await this._provider.getFiles(),s={},r=[];for(const i of e.outStatistics??[]){const e=_e(i,t);if(!e.available)return null;s[i.outStatisticFieldName]=e.value,r.push(ge(i,this._fieldsIndex))}return{fields:r,features:[{attributes:s}]}}async _getSpatialFilePruning(e){if("tile"!==e.type&&("arcade"!==e.type||null==e.extent))return null;const t=this._displayOptimization,s=t?.index;if(null==s)return null;const r=e.outSpatialReference.wkid;if(null==s.wkid||null==r)return null;const i=s.wkid,a=await W();switch(s.type){case"xz":return{type:"xz",fieldName:U(s.code),intersects:(t,n)=>a.queryIntersectsXZStatistics(s.fullExtent,e.extent,r,i,s.maxLevel,t,n)};case"z":return{type:"xy",xFieldName:U(s.xColumn),yFieldName:U(s.yColumn),intersects:(t,s,n,o)=>a.queryIntersectsXYStatistics(e.extent,r,i,t,s,n,o)}}}_mayIncludeFileForSpatialPruning(e,t){switch(t.type){case"xz":{const s=Ie(e,t);return"null-only"!==s?.type&&("bounds"!==s?.type||t.intersects(s.minValue,s.maxValue))}case"xy":{const s=e.statistics.statistics.get(t.xFieldName),r=e.statistics.statistics.get(t.yFieldName);return"null-only"!==s?.type&&"null-only"!==r?.type&&("bounds"!==s?.type||"bounds"!==r?.type||t.intersects(s.minValue,s.maxValue,r.minValue,r.maxValue))}}}async _tryDeriveParquetFullExtent(s){if(!s.spatialReference)return null;if(null==this._fullExtent&&"location"===s.geometryEncoding?.type){const i=await this._provider.getFiles(),{xField:a,yField:n}=s.geometryEncoding,o=d(f(),y);let u=!1;for(const s of i){const i=await s.file;for(const s of i.rowGroups()){const i={stack:[],error:void 0,hasError:!1};try{const t=e(i,s.columnDescriptorForAttribute(a),!1),r=e(i,s.columnDescriptorForAttribute(n),!1),l=M(t),c=M(r);if("bounds"===l?.type&&"bounds"===c?.type){const e=[l.minValue,c.minValue,l.maxValue,c.maxValue];m(o,e),u=!0}s.free()}catch(r){i.error=r,i.hasError=!0}finally{t(i)}}}return u?{xmin:o[0],ymin:o[1],xmax:o[3],ymax:o[4],spatialReference:s.spatialReference?.toJSON()}:null}return null}async _getFileInfoById(e){const t=await this._provider.getFiles();for(const s of t)if(s.id===e)return s;throw new Error(`InternalError: File ${e} does not exist`)}async _getFileStatistics(){return{featureCount:await this._getFeatureCount(),byteLength:await this._getByteLength()}}async _getFile(e){return(await this._getFileInfoById(e)).file}async _createParquetQuery(e,t,s,r,i){const a=(await W()).Query.new();null!=s&&a.setPreFilterStart(s),null!=r&&a.setPreFilterCount(r),null!=i&&a.setPostFilterCount(i);const n=await this._getRequiredFields(e);a.setOutFields(n),(e.geometry||e.returnGeometry)&&a.setReturnGeometry(!0),a.setReturnZ(!!e.returnZ),a.setReturnM(!!e.returnM);const o=this._tryGetGeneralizedGeometryResolution(e);null!=o&&a.setSourceResolution(o);const u=e.geometry?.spatialReference??this._queryEngineParams.spatialReference,l=u.wkid;if(e.geometry&&(F(u)||S(u))){const t=g(w(),_);for(const s of q(e.geometry))x(t,s);a.setOutSpatialReference(l),a.setExtent({xmin:t[0],ymin:t[1],xmax:t[2],ymax:t[3]})}if(e.where){const{id:s,file:r}=t;await this._setWhereClause(a,await r,s,e.where)}return a}async _createParquetDisplayQuery(e,t,s){const r=(await W()).Query.new();if("tile"===s.type){r.setExtent(s.extent),r.setQuantizationTransform(s.transform);const e=this._sourceResolution(s.resolution,s.outSpatialReference);null!=e&&r.setSourceResolution(e)}else"arcade"===s.type&&null!=s.extent&&r.setExtent(s.extent);return r.setOutFields(s.outFields.filter(e=>null!=this._indexMap[e])),r.setOutSpatialReference(s.outSpatialReference.wkid),r.setReturnGeometry(s.returnGeometry),r.setReturnZ(s.returnZ),r.setReturnM(s.returnM),s.where&&await this._setWhereClause(r,e,t,s.where),r}async _getFeatureCount(){return(await this._provider.getFiles()).map(e=>e.statistics.rowCount).reduce((e,t)=>e+t,0)}async _getByteLength(){return(await this._provider.getFiles()).map(e=>e.statistics.byteSize).reduce((e,t)=>e+t,0)}_validateQuery(e){if(!this._capabilities.query.supportsStatistics&&e.outStatistics)throw new r("parquet:unsupported","Statistics queries are not supported",{query:e});if(!this._capabilities.query.supportsOrderBy&&e.orderByFields?.length)throw new r("parquet:unsupported","Queries using orderBy are not supported",{query:e});if(!this._capabilities.query.supportsDistinct&&e.returnDistinctValues)throw new r("parquet:unsupported","Queries using returnDistinctValues are not supported",{query:e})}async _setWhereClause(e,t,s,i){const a=this._indexMap,n=this._fieldsIndex,o={getAttribute(e,r){const i=a[r];if(null==i){const t=n.get(r);if("__OBJECTID"===t?.name){const t=e.row+e.rowGroupStart;return A(s,t)}return null}const o=n.get(r);return Z(t,e.rowGroup,e.row,i,o.type)}},u=await l(i,this._fieldsIndex);if(!u.isStandardized)throw new r("sql-parse-error","expression is not standardized");const c=(e,t,s)=>u.testFeatureCompiled({rowGroup:e,row:t,rowGroupStart:s},o,null),p=u.fieldNames.map(e=>n.get(e)).filter(e=>e&&null!=this._indexMap[e?.name]);e.setWhere(i),e.setWhereEvaluator(c),e.setWhereFields(p.map(e=>e.name))}async*_streamFeatures(e,t,s,r,i){const a=await this._provider.getFiles();let n=0;for(const o of a){const a=n,u=n+o.statistics.rowCount;if(n+=o.statistics.rowCount,null!=t&&t>=u)continue;const l=null!=t?Math.max(t-a,0):null;let c=s;if(null!=s){const e=t??0,r=e+s,i=Math.max(e,a),n=Math.min(r,u);c=Math.max(n-i,0)}if(0===c)continue;const p=await this._createParquetQuery(e,o,l,c,r),d=await o.file,f=await d.executeQuery(p,te),h=async()=>{const e=await f.next(i);if(!e)return null;const t=new Y(this._metadata,this._indexMap,e,o.id);return Se([new L(t,null,0,!1)],this._queryEngineParams)};let m=await h();for(;null!=m;)yield m,m=await h()}}async _queryFeaturesWithQueryEnginePagination(e,t){const s=[],r=this._streamFeatures(e,null,null,null,t);let i=await r.next();for(;!i.done;){const a=await i.value.executeQueryForOpaqueFeatures({...e,where:void 0},t);for(const e of a)s.push(e);i=await r.next()}return s}async _queryFeaturesWithUpfrontPagination(e,t){let s,r,i,a=e.resultOffset??0,n=e.resultRecordCount??te;fe(e)?he(e)||(i=a+n):(a&&(s=a,a=0),r=e.resultRecordCount);const o=[],u=this._streamFeatures(e,s,r,i,t);let l=await u.next();for(;!l.done&&n>0;){const s=await l.value.executeQueryForOpaqueFeatures({...e,where:void 0},t);for(const e of s)if(a>0)a--;else if(o.push(e),--n<=0)return o;l=await u.next()}return o}_enqueueQuery(e,t){return this._queue.push(e,t)}async _executeQuery(e,t){if(e.objectIds?.length){const s=new Map;for(const t of e.objectIds){const e=Q(t),r=T(t);let i=s.get(e);i||(i=[],s.set(e,i)),i.push(r)}const r=[];for(const[i,a]of s.entries()){const s=await this._executeFileIdQuery(e,i,a,t);for(const e of s)r.push(e)}return new E(r,e,{fieldsIndex:this._fieldsIndex,geometryType:this._metadata.geometryType,spatialReference:this._queryEngineParams.spatialReference,hasM:this._hasM,hasZ:this._hasZ,featureAdapter:$,featureIdInfo:this._queryEngineParams.featureIdInfo})}if("1=1"===e.where&&(e.where=null),e.resultOffset??=0,e.resultRecordCount??=await this._getFeatureCount(),e.resultRecordCount>se){if(!(this._displayOptimization&&e.geometry))throw new r("parquet:cannot-execute-query","Unable to execute query, dataset is too large.")}const s=!!e.orderByFields?.length||!!e.outStatistics?.length||!!e.returnDistinctValues,i=s?await this._queryFeaturesWithQueryEnginePagination(e,t):await this._queryFeaturesWithUpfrontPagination(e,t);return s||(e.resultOffset=0),new E(i,e,{fieldsIndex:this._fieldsIndex,geometryType:this._metadata.geometryType,spatialReference:this._queryEngineParams.spatialReference,hasM:this._hasM,hasZ:this._hasZ,featureAdapter:$,featureIdInfo:this._queryEngineParams.featureIdInfo})}async _executeFileIdQuery(e,t,s,r){const i=await this._getRequiredFields(e),a=(await W()).Query.new();a.setOutFields(i),a.setReturnGeometry(!!e.returnGeometry),a.setReturnZ(!!e.returnZ),a.setReturnM(!!e.returnM),a.setIds(new Uint32Array(s));const n=await this._getFile(t),o=await n.executeQuery(a,te,r);let u=await o.next(r),l=0;const c=[];for(;null!=u;){const e=new Y(this._metadata,this._indexMap,u,t),s=new L(e,null,l++,!1);c.push(s),u=await o.next(r)}return Se(c,this._queryEngineParams).executeQueryForOpaqueFeatures(e,r)}async _getRequiredFields(e){const t=new Set;if(e.outStatistics)for(const s of v(this._fieldsIndex,e.outStatistics,e.groupByFieldsForStatistics))t.add(s);else if(e.outFields)for(const s of e.outFields)t.add(s);return(t.has("*")?this._fieldsIndex.fields.map(e=>e.name):Array.from(t)).filter(e=>null!=this._indexMap[e])}_tryGetGeneralizedGeometryResolution(e){if(!this._displayOptimization)return null;const t=e.outSR??this._queryEngineParams.spatialReference;if(!F(t)&&!S(t))return null;const s=e.quantizationParameters?.tolerance??e.maxAllowableOffset;return s?this._sourceResolution(s,t):null}_sourceResolution(e,t){const s=this._queryEngineParams.spatialReference,r=e*(c(t)/c(s));return!Number.isFinite(r)||r<=0?null:r}}function le(e){switch(e){case"fullText":case"having":case"timeExtent":case"historicMoment":case"aggregateIds":case"uniqueIds":case"gdbVersion":case"objectIds":case"where":case"geometry":case"resultOffset":case"resultRecordCount":return!0;default:return!1}}function ce(e){switch(e){case"fullText":case"having":case"timeExtent":case"historicMoment":case"aggregateIds":case"uniqueIds":case"gdbVersion":case"objectIds":case"where":case"geometry":return!0;default:return!1}}function pe(e){switch(e){case"fullText":case"having":case"timeExtent":return!0;case"historicMoment":case"aggregateIds":case"uniqueIds":case"gdbVersion":case"objectIds":case"where":case"resultOffset":case"geometry":case"resultRecordCount":return!1}return!1}function de(e){for(const t in e){const s=t;if(le(s)&&null!==e[s])return!0}return!1}function fe(e){for(const t in e){const s=t;if(ce(s)&&null!==e[s])return!0}return!1}function he(e){for(const t in e){const s=t;if(pe(s)&&null!==e[s])return!0}return!1}function me(e,t){return!!e.outStatistics?.length&&!de(e)&&!e.groupByFieldsForStatistics?.length&&!e.orderByFields?.length&&!e.returnDistinctValues&&!e.returnAggIds&&e.outStatistics.every(e=>ye(e,t))}function ye(e,t){switch(e.statisticType){case"count":return"1"===e.onStatisticField||null!=t.get(e.onStatisticField);case"min":case"max":{const s=t.get(e.onStatisticField);return null!=s&&N(s)}default:return!1}}function ge(e,t){const s="exceedslimit"!==e.statisticType?t.get(e.onStatisticField):null,r="min"!==e.statisticType&&"max"!==e.statisticType||"esriFieldTypeDate"!==s?.type?"esriFieldTypeDouble":s.type;return{name:e.outStatisticFieldName,alias:e.outStatisticFieldName,type:r}}function _e(e,t){switch(e.statisticType){case"count":return we(e,t);case"min":return xe(e,t,Math.min);case"max":return xe(e,t,Math.max);default:return{available:!1,value:null}}}function we(e,t){if("count"!==e.statisticType)return{available:!1,value:null};if("1"===e.onStatisticField)return{available:!0,value:t.reduce((e,t)=>e+t.statistics.rowCount,0)};let s=0;for(const r of t){const t=r.statistics.statistics.get(e.onStatisticField);if(null==t||null==t.nullCount)return{available:!1,value:null};s+=r.statistics.rowCount-t.nullCount}return{available:!0,value:s}}function xe(e,t,s){if("min"!==e.statisticType&&"max"!==e.statisticType)return{available:!1,value:null};let r=null;const i="min"===e.statisticType?"minValue":"maxValue";for(const a of t){const t=a.statistics.statistics.get(e.onStatisticField);if(null==t)return{available:!1,value:null};switch(t.type){case"null-only":continue;case"unknown":return{available:!1,value:null};case"bounds":{const e=Fe(t[i]);if(null==e)return{available:!1,value:null};r=null==r?e:s(r,e);break}}}return{available:!0,value:r}}function Fe(e){return"number"==typeof e&&Number.isFinite(e)?e:null}function Se(e,t){const s=new H;for(const r of e)s.insert(r);return new b({...t,featureStore:s})}function Ie(e,t){return e.statistics.statistics.get(t.fieldName)??null}function ve(e,t){return e.slice().sort((e,s)=>{const r=Re(e,t),i=Re(s,t);return r===i?0:r<i?-1:1})}function Re(e,t){const s=Ie(e,t);return"bounds"!==s?.type?Number.POSITIVE_INFINITY:s.maxValue-s.minValue}function qe(e,t,s){const r=e?.featureCount;let i=!1;return null!=r&&r<has("parquetlayer-full-query-feature-count")&&(i=!0),{analytics:{supportsCacheHint:!1},attachment:null,data:{isVersioned:!1,isBranchVersioned:!1,supportedCurveTypes:[],supportsAttachment:!1,supportsM:s,supportsTrueCurve:!1,supportsZ:t},metadata:{supportsAdvancedFieldProperties:!1},operations:{supportsCalculate:!1,supportsTruncate:!1,supportsValidateSql:!1,supportsAdd:!1,supportsDelete:!1,supportsEditing:!1,supportsChangeTracking:!1,supportsQuery:!0,supportsQueryBins:!1,supportsQueryPivot:!1,supportsQueryAnalytics:!1,supportsQueryAttachments:!1,supportsQueryTopFeatures:!1,supportsResizeAttachments:!1,supportsSync:!1,supportsUpdate:!1,supportsExceedsLimitStatistics:!1,supportsAsyncConvert3D:!1},query:{...C,maxRecordCount:te,supportsOrderBy:i,supportsDistinct:!0,supportsStatistics:!0,supportsSpatialAggregationStatistics:!1,supportedSpatialAggregationStatistics:{envelope:!1,centroid:!1,convexHull:!1}},queryAttributeBins:{supportsDate:!1,supportsFixedInterval:!1,supportsAutoInterval:!1,supportsFixedBoundaries:!1,supportsStackBy:!1,supportsSplitBy:!1,supportsSnapToData:!1,supportsReturnFullIntervalBin:!1,supportsFirstDayOfWeek:!1,supportsNormalization:!1},queryRelated:{supportsCount:!1,supportsOrderBy:!1,supportsPagination:!1,supportsCacheHint:!1},queryTopFeatures:{supportsCacheHint:!1},editing:{supportsDeleteByAnonymous:!1,supportsDeleteByOthers:!1,supportsGeometryUpdate:!1,supportsGlobalId:!1,supportsTrueCurveUpdate:!1,supportsTrueCurveUpdateByTrueCurveClientsOnly:!0,supportsReturnServiceEditsInSourceSpatialReference:!1,supportsRollbackOnFailure:!1,supportsUpdateByAnonymous:!1,supportsUpdateByOthers:!1,supportsUploadWithItemId:!1,supportsUpdateWithoutM:!1,supportsAsyncApplyEdits:!1,zDefault:void 0}}}function be(e){return!!(e.objectIds?.length||e.outStatistics||e.orderByFields?.length||e.returnDistinctValues)}export{ue as default};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import{__decorate as t}from"tslib";import{ClonableMixin as e}from"../../core/Clonable.js";import{IdentifiableMixin as r}from"../../core/Identifiable.js";import{Loadable as o}from"../../core/Loadable.js";import{property as i,subclass as p}from"../../core/accessorSupport/decorators.js";import n from"../../graphic/AnnotationFeatureGraphicOrigin.js";let a=class extends(e(r(o))){constructor(t){super(t),this.parent=null,this.subtypeCode=null,this.type="annotation-feature-sublayer",this.visible=!0}get graphicOrigin(){return new n(this.parent,this)}get title(){return this.parent?.subtypes?.find(t=>t.code===this.subtypeCode)?.name??null}};t([i({readOnly:!0,clonable:!1})],a.prototype,"graphicOrigin",null),t([i({clonable:!1})],a.prototype,"parent",void 0),t([i({type:Number})],a.prototype,"subtypeCode",void 0),t([i({readOnly:!0})],a.prototype,"title",null),t([i({readOnly:!0})],a.prototype,"type",void 0),t([i({type:Boolean})],a.prototype,"visible",void 0),a=t([p("esri.layers.support.AnnotationFeatureSublayer")],a);export{a as default};
2
+ import{__decorate as t}from"tslib";import{ClonableMixin as e}from"../../core/Clonable.js";import{IdentifiableMixin as o}from"../../core/Identifiable.js";import{Loadable as r}from"../../core/Loadable.js";import{property as i,subclass as p}from"../../core/accessorSupport/decorators.js";import a from"../../graphic/AnnotationFeatureGraphicOrigin.js";let n=class extends(e(o(r))){constructor(t){super(t),this.maxScale=0,this.minScale=0,this.parent=null,this.subtypeCode=null,this.type="annotation-feature-sublayer",this.visible=!0}get graphicOrigin(){return new a(this.parent,this)}get title(){return this.parent?.subtypes?.find(t=>t.code===this.subtypeCode)?.name??null}};t([i({readOnly:!0,clonable:!1})],n.prototype,"graphicOrigin",null),t([i()],n.prototype,"maxScale",void 0),t([i()],n.prototype,"minScale",void 0),t([i({clonable:!1})],n.prototype,"parent",void 0),t([i({type:Number})],n.prototype,"subtypeCode",void 0),t([i({readOnly:!0})],n.prototype,"title",null),t([i({readOnly:!0})],n.prototype,"type",void 0),t([i({type:Boolean})],n.prototype,"visible",void 0),n=t([p("esri.layers.support.AnnotationFeatureSublayer")],n);export{n as default};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import e from"../../core/Error.js";import n from"../../core/Logger.js";import{latitudeFieldNames as t,longitudeFieldNames as o}from"../../layers/support/locationUtils.js";import{loadParquetModule as r}from"./loadParquetModule.js";const i=()=>n.getLogger("esri.layers.ParquetLayer"),l=new Set(["uncompressed","snappy","gzip"]),u=new Set(["esriFieldTypeSmallInteger","esriFieldTypeInteger","esriFieldTypeBigInteger","esriFieldTypeSingle","esriFieldTypeDouble","esriFieldTypeLong"]);function s(n,t){switch(t){case"esriGeometryPoint":return n.GeometryType.Point;case"esriGeometryPolygon":case"polygon":return n.GeometryType.Polygon;case"esriGeometryPolyline":case"polyline":return n.GeometryType.Polyline;case"esriGeometryMultipoint":case"multipoint":return n.GeometryType.Multipoint;default:throw new e("parquet",`Found unexpected GeometryType: ${t}`)}}function a(e,n){const t=n.encoding,o=s(e,n.geometryType),r=n.spatialReference.wkid;if(null==r)throw new Error("InternalError: Wkid must be defined.");switch(t.type){case"wkb":return e.GeometryField.fromWkb(t.field,r,o);case"location":{const{yField:n,xField:i}=t;return e.GeometryField.fromLocation(n,i,r,o)}}}function m(e,n){const t=e.GeometryInfo.new();n.geometry&&t.setGeometry(a(e,n.geometry));const o=n.displayOptimization;if(o){const{index:n}=o;if("z"===n.type){const o=e.DisplayOptimizationZBuilder.new();o.setCodeField(f(n.code)),o.setXColumn(f(n.xColumn)),o.setYColumn(f(n.yColumn)),null!=n.zColumn&&o.setZColumn(f(n.zColumn)),null!=n.mColumn&&o.setMColumn(f(n.mColumn)),o.setCooordinatePrecision(n.coordinatePrecision),o.setFullExtent(n.fullExtent),o.setSpatialReference(n.wkid,null==n.wkid?n.wkt:void 0),o.setHasZ(!!n.zColumn),o.setHasM(!!n.mColumn),n.zColumn&&o.setZColumn(f(n.zColumn)),n.mColumn&&o.setMColumn(f(n.mColumn)),t.setOptmizationZ(o)}if("xz"===n.type){const o=s(e,n.geometryType),r=e.DisplayOptimizationXZBuilder.new();r.setCodeField(f(n.code)),r.setEncoding(n.encoding),r.setFullExtent(n.fullExtent),r.setGeometryType(o),r.setSpatialReference(n.wkid,null==n.wkid?n.wkt:void 0),r.setMaxLevel(n.maxLevel),r.setHasZ(n.hasZ??!1),r.setHasM(n.hasM??!1);for(const t of n.levels??[]){const n=new Float64Array(t.transform.translate),o=new Float64Array(t.transform.scale),i=f(t.column);r.addLevel(e.MultiscaleGeometryField.new(t.level,t.resolution,i,n,o))}t.setOptmizationXZ(r)}}return t}async function c(n,t){const o=await r(),i=t.geometryInfo?m(o,t.geometryInfo):null,l=t.provider.fetchRange.bind(t.provider),u=t.provider.fetchLength.bind(t.provider);try{return await o.ParquetFile.fromUrl(n,l,u,i)}catch(s){throw new e("parquet","Failed to parse file",{error:s})}}function p(e){const n=e.keyValueMetadata("geo");return null!=n?JSON.parse(n):null}function y(n){if(n.keyValueMetadata("esri"))throw new e("parquet:unsupported","File was created using an unsupported experimental display index. Please regenerate the file.");const t=n.keyValueMetadata("geodisplay");if(null!=t){return{present:!0,optimization:d({index:JSON.parse(t)})}}const o=n.keyValueMetadata("org.apache.spark.sql.parquet.row.metadata");if(null!=o){const e=JSON.parse(o);for(const n of e.fields)if(null!=n.metadata&&w(n.metadata)){if(!h(n.metadata))return i().warn("parquet:protocol-violation","Ignoring display optimization, found invalid column path",{index:n.metadata}),{present:!0,optimization:null};const e=g(n.metadata,n.name);return null==e?(i().warn("parquet:protocol-violation","Ignoring display optimization, Spark display column paths must be non-empty strings",{index:n.metadata}),{present:!0,optimization:null}):{present:!0,optimization:d({index:e})}}}return{present:!1,optimization:null}}function d(e){if(!h(e.index))return i().warn("parquet:protocol-violation","Ignoring display optimization, found invalid column path",{index:e.index}),null;if("xz"===e.index.type&&(e.index.geometryType=E(e.index.geometryType),"esri-pbf"===e.index.encoding&&(e.index.encoding="esriPBF"),"esriPBF"!==e.index.encoding))return i().warn("parquet:unsupported",`Encoding for display index must be of type esriPBF, but found ${e.index.encoding}`),null;const{xmin:n,ymin:t,xmax:o,ymax:r}=e.index.fullExtent;return Number.isFinite(n)&&Number.isFinite(t)&&Number.isFinite(o)&&Number.isFinite(r)?e:(i().warn("parquet:protocol-violation","Ignoring display optimization, found bad extent",{index:e.index}),null)}function f(e){return Array.isArray(e)?e.join("."):e}function g(e,n){if("z"===e.type){const t=x(e.code,n),o=x(e.xColumn,n),r=x(e.yColumn,n),i=null==e.zColumn?e.zColumn:x(e.zColumn,n),l=null==e.mColumn?e.mColumn:x(e.mColumn,n);return null==t||null==o||null==r||null===i||null===l?null:{...e,code:t,xColumn:o,yColumn:r,...null==i?{}:{zColumn:i},...null==l?{}:{mColumn:l}}}const t=x(e.code,n),o=[];for(const r of e.levels){const e=x(r.column,n);if(null==e)return null;o.push({...r,column:e})}return null==t?null:{...e,code:t,levels:o}}function x(e,n){return"string"==typeof e&&e.length>0?[n,e]:null}function w(e){return"object"==typeof e&&null!=e&&"type"in e&&("z"===e.type||"xz"===e.type)}function h(e){return"z"===e.type?C(e.code)&&C(e.xColumn)&&C(e.yColumn)&&(null==e.zColumn||C(e.zColumn))&&(null==e.mColumn||C(e.mColumn)):C(e.code)&&Array.isArray(e.levels)&&e.levels.every(e=>"object"==typeof e&&null!=e&&"column"in e&&C(e.column))}function C(e){return"string"==typeof e&&e.length>0||Array.isArray(e)&&2===e.length&&e.every(e=>"string"==typeof e&&e.length>0)}function z(e){if(null==e)return null;const n=e.ordering,t=e.lod;if(null==n&&null==t)return null;if("xz"!==n?.type||null==t||n.geometry_column!==e.primary_column||t.geometry_column!==e.primary_column||n.geometry_column!==t.geometry_column||20!==n.max_level||!G(n.extent)||"pbf"!==t.encoding)return M(e,"ordering and lod must form a valid primary-column XZ pair");const o=e.columns[e.primary_column],r=v(o);if(null==r||!F(t.orientation,r.geometryType))return M(e,"geometry type, dimensions, or LOD orientation is invalid");const i=k(t.levels),l=R(o)?.wkid;if(null==i||null==l)return M(e,"LOD levels or spatial reference is invalid");const[u,s,a,m]=n.extent;return{index:{type:"xz",code:"geokey",wkid:l,wkt:null,encoding:"esriPBF",fullExtent:{xmin:u,ymin:s,xmax:a,ymax:m},geometryType:r.geometryType,maxLevel:n.max_level,hasZ:r.hasZ,hasM:r.hasM,levels:i}}}function M(e,n){return i().warn("parquet:protocol-violation",`Ignoring GeoParquet ordering and LOD extensions: ${n}`,{lod:e.lod,ordering:e.ordering}),null}function v(e){if(null==e||0===e.geometry_types.length)return null;let n,t;for(const o of e.geometry_types){const e=/^(LineString|MultiLineString|Polygon|MultiPolygon)(?: (Z|M|ZM))?$/.exec(o);if(null==e)return null;const r="LineString"===e[1]||"MultiLineString"===e[1]?"polyline":"polygon";if(null!=n&&n!==r||null!=t&&t!==(e[2]??""))return null;n=r,t=e[2]??""}return null==n||null==t?null:{geometryType:n,hasZ:"Z"===t||"ZM"===t,hasM:"M"===t||"ZM"===t}}function F(e,n){return"polygon"===n?"clockwise"===e:null==e}function k(e){if(!Array.isArray(e)||0===e.length)return null;const n=new Set,t=e.slice().sort((e,n)=>n.resolution-e.resolution),o=[];for(const[r,i]of t.entries()){if(!P(i.column)||!Number.isFinite(i.resolution)||i.resolution<=0||n.has(i.resolution)||!b(i.transform))return null;n.add(i.resolution),o.push({column:i.column,level:r,resolution:i.resolution,transform:i.transform})}return o}function P(e){return Array.isArray(e)&&2===e.length&&"geolod"===e[0]&&"string"==typeof e[1]&&e[1].length>0}function b(e){return Z(e?.scale,!0)&&Z(e?.translate,!1)}function Z(e,n){return Array.isArray(e)&&4===e.length&&e.every(e=>"number"==typeof e&&Number.isFinite(e)&&(!n||e>0))}function G(e){return Z(e,!1)&&e[0]<e[2]&&e[1]<e[3]}function T(e){q(e);const n=L(e),t=p(e),o=y(e),r=o.present?o.optimization:z(t),i=S(t,n),{hasZ:l,hasM:u}=A(t,r);let s,a;if(i)switch(i.type){case"location":a={wkid:4326},s="esriGeometryPoint";break;case"wkb":if(t){const e=t.primary_column,n=t.columns[e];s=N(n),a=R(n)}}if(r){const e=r.index;!a&&e.wkid&&(a={wkid:e.wkid}),s||(s="z"===e.type?"esriGeometryPoint":I(e.geometryType))}return{geoMetadata:t,displayOptimization:r,hasZ:l,hasM:u,geometryEncoding:i,geometryInfo:a&&s?{geometry:i?{geometryType:s,spatialReference:a,encoding:i}:null,displayOptimization:r}:null,geometryType:s,spatialReference:a,extent:$(t,r,a),fields:n}}function q(n){for(const t of n.compressionCodecs())if(!l.has(t))throw new e("parquet:unsupported",`Compression codec ${t} is unsupported. Must be of type ${Array.from(l).join(",")}`)}function L(e){return e.fields(!1).map(e=>({name:e.name,alias:e.name,type:e.type}))}function S(e,n){if(null!=e){const n=e.primary_column;return{type:"wkb",field:n,orientation:"counterclockwise"===e.columns[n].orientation?"counter-clockwise":null}}const t=_(n.filter(e=>u.has(e.type)).map(e=>e.name));return t.latitudeFieldName&&t.longitudeFieldName?{type:"location",xField:t.longitudeFieldName,yField:t.latitudeFieldName}:null}function _(e){const n=e.map(e=>e.toLowerCase());return{longitudeFieldName:e[n.indexOf(o.find(e=>n.includes(e)))],latitudeFieldName:e[n.indexOf(t.find(e=>n.includes(e)))]}}function N(n){const{geometry_types:t}=n,o=new Set;for(const e of t){const n=O(e);n&&o.add(n)}if(o.size>1)throw new e("parquet:unsupported","Parquet mixed geometry types are not supported",{geometryTypes:o});return 1===o.size?o.values().next().value:void 0}function O(e){switch(e.replace(/ (?:Z|M|ZM)$/u,"")){case"Point":return"esriGeometryPoint";case"Polygon":case"MultiPolygon":return"esriGeometryPolygon";case"LineString":case"MultiLineString":return"esriGeometryPolyline";case"MultiPoint":return"esriGeometryMultipoint";default:return null}}function A(e,n){const t=n?.index;if("z"===t?.type)return{hasZ:null!=t.zColumn,hasM:null!=t.mColumn};if("xz"===t?.type)return{hasZ:!0===t.hasZ,hasM:!0===t.hasM};const o=e?.columns[e.primary_column]?.geometry_types??[];return{hasZ:o.some(e=>/ (?:Z|ZM)$/u.test(e)),hasM:o.some(e=>/ (?:M|ZM)$/u.test(e))}}function I(e){switch(e){case"polygon":return"esriGeometryPolygon";case"polyline":return"esriGeometryPolyline";case"multipoint":return"esriGeometryMultipoint"}}function E(n){switch(n.toLowerCase()){case"polygon":return"polygon";case"polyline":return"polyline";case"multipoint":return"multipoint";default:throw new e("parquet:unsupported",`Geometry type ${n} is unsupported`)}}function R(e){const n=e.crs?.id?.code;return"number"==typeof n?{wkid:n}:"OGC"===e.crs?.id?.authority&&"CRS84"===n?{wkid:4326}:void 0}function $(e,n,t){if(!t)return null;const o=e?e.columns[e.primary_column]:null,r=o?.bbox;if(r?.every(e=>Number.isFinite(e)))switch(r.length){case 4:return{xmin:r[0],ymin:r[1],xmax:r[2],ymax:r[3],spatialReference:t};case 6:return{xmin:r[0],ymin:r[1],xmax:r[3],ymax:r[4],spatialReference:t};default:i().warn("parquet:protocol-violation","Invalid Geoparquet file. BoundingBox size must be 4 or 6.",{geoMetadata:e})}const l=n?.index.fullExtent;return l?{...l,spatialReference:t}:null}export{c as createParquetFile,f as normalizeColumnPath,p as readGeoMetadata,T as readMetadata};
2
+ import e from"../../core/Error.js";import n from"../../core/Logger.js";import{latitudeFieldNames as t,longitudeFieldNames as o}from"../../layers/support/locationUtils.js";import{loadParquetModule as r}from"./loadParquetModule.js";const i=()=>n.getLogger("esri.layers.ParquetLayer"),l=864e5,u=new Set(["uncompressed","snappy","gzip"]),a=new TextDecoder,s=new Set(["esriFieldTypeSmallInteger","esriFieldTypeInteger","esriFieldTypeBigInteger","esriFieldTypeSingle","esriFieldTypeDouble","esriFieldTypeLong"]);function m(n,t){switch(t){case"esriGeometryPoint":return n.GeometryType.Point;case"esriGeometryPolygon":case"polygon":return n.GeometryType.Polygon;case"esriGeometryPolyline":case"polyline":return n.GeometryType.Polyline;case"esriGeometryMultipoint":case"multipoint":return n.GeometryType.Multipoint;default:throw new e("parquet",`Found unexpected GeometryType: ${t}`)}}function c(e,n){const t=n.encoding,o=m(e,n.geometryType),r=n.spatialReference.wkid;if(null==r)throw new Error("InternalError: Wkid must be defined.");switch(t.type){case"wkb":return e.GeometryField.fromWkb(t.field,r,o);case"location":{const{yField:n,xField:i}=t;return e.GeometryField.fromLocation(n,i,r,o)}}}function p(e,n){const t=e.GeometryInfo.new();n.geometry&&t.setGeometry(c(e,n.geometry));const o=n.displayOptimization;if(o){const{index:n}=o;if("z"===n.type){const o=e.DisplayOptimizationZBuilder.new();o.setCodeField(x(n.code)),o.setXColumn(x(n.xColumn)),o.setYColumn(x(n.yColumn)),null!=n.zColumn&&o.setZColumn(x(n.zColumn)),null!=n.mColumn&&o.setMColumn(x(n.mColumn)),o.setCooordinatePrecision(n.coordinatePrecision),o.setFullExtent(n.fullExtent),o.setSpatialReference(n.wkid,null==n.wkid?n.wkt:void 0),o.setHasZ(!!n.zColumn),o.setHasM(!!n.mColumn),n.zColumn&&o.setZColumn(x(n.zColumn)),n.mColumn&&o.setMColumn(x(n.mColumn)),t.setOptmizationZ(o)}if("xz"===n.type){const o=m(e,n.geometryType),r=e.DisplayOptimizationXZBuilder.new();r.setCodeField(x(n.code)),r.setEncoding(n.encoding),r.setFullExtent(n.fullExtent),r.setGeometryType(o),r.setSpatialReference(n.wkid,null==n.wkid?n.wkt:void 0),r.setMaxLevel(n.maxLevel),r.setHasZ(n.hasZ??!1),r.setHasM(n.hasM??!1);for(const t of n.levels??[]){const n=new Float64Array(t.transform.translate),o=new Float64Array(t.transform.scale),i=x(t.column);r.addLevel(e.MultiscaleGeometryField.new(t.level,t.resolution,i,n,o))}t.setOptmizationXZ(r)}}return t}async function y(n,t){const o=await r(),i=t.geometryInfo?p(o,t.geometryInfo):null,l=t.provider.fetchRange.bind(t.provider),u=t.provider.fetchLength.bind(t.provider);try{return await o.ParquetFile.fromUrl(n,l,u,i)}catch(a){throw new e("parquet","Failed to parse file",{error:a})}}function d(e){const n=e.keyValueMetadata("geo");return null!=n?JSON.parse(n):null}function f(n){if(n.keyValueMetadata("esri"))throw new e("parquet:unsupported","File was created using an unsupported experimental display index. Please regenerate the file.");const t=n.keyValueMetadata("geodisplay");if(null!=t){return{present:!0,optimization:g({index:JSON.parse(t)})}}const o=n.keyValueMetadata("org.apache.spark.sql.parquet.row.metadata");if(null!=o){const e=JSON.parse(o);for(const n of e.fields)if(null!=n.metadata&&z(n.metadata)){if(!F(n.metadata))return i().warn("parquet:protocol-violation","Ignoring display optimization, found invalid column path",{index:n.metadata}),{present:!0,optimization:null};const e=C(n.metadata,n.name);return null==e?(i().warn("parquet:protocol-violation","Ignoring display optimization, Spark display column paths must be non-empty strings",{index:n.metadata}),{present:!0,optimization:null}):{present:!0,optimization:g({index:e})}}}return{present:!1,optimization:null}}function g(e){if(!F(e.index))return i().warn("parquet:protocol-violation","Ignoring display optimization, found invalid column path",{index:e.index}),null;if("xz"===e.index.type&&(e.index.geometryType=V(e.index.geometryType),"esri-pbf"===e.index.encoding&&(e.index.encoding="esriPBF"),"esriPBF"!==e.index.encoding))return i().warn("parquet:unsupported",`Encoding for display index must be of type esriPBF, but found ${e.index.encoding}`),null;const{xmin:n,ymin:t,xmax:o,ymax:r}=e.index.fullExtent;return Number.isFinite(n)&&Number.isFinite(t)&&Number.isFinite(o)&&Number.isFinite(r)?e:(i().warn("parquet:protocol-violation","Ignoring display optimization, found bad extent",{index:e.index}),null)}function x(e){return Array.isArray(e)?e.join("."):e}function w(e,n,t,o,r){const i=N(e.readAttribute(n,t),o);return r&&null!=i&&"esriFieldTypeDate"===o?new Date(i):i}function h(e,n,t,o,r){return N(e.readAttribute(n,t,o),r)}function C(e,n){if("z"===e.type){const t=M(e.code,n),o=M(e.xColumn,n),r=M(e.yColumn,n),i=null==e.zColumn?e.zColumn:M(e.zColumn,n),l=null==e.mColumn?e.mColumn:M(e.mColumn,n);return null==t||null==o||null==r||null===i||null===l?null:{...e,code:t,xColumn:o,yColumn:r,...null==i?{}:{zColumn:i},...null==l?{}:{mColumn:l}}}const t=M(e.code,n),o=[];for(const r of e.levels){const e=M(r.column,n);if(null==e)return null;o.push({...r,column:e})}return null==t?null:{...e,code:t,levels:o}}function M(e,n){return"string"==typeof e&&e.length>0?[n,e]:null}function z(e){return"object"==typeof e&&null!=e&&"type"in e&&("z"===e.type||"xz"===e.type)}function F(e){return"z"===e.type?v(e.code)&&v(e.xColumn)&&v(e.yColumn)&&(null==e.zColumn||v(e.zColumn))&&(null==e.mColumn||v(e.mColumn)):v(e.code)&&Array.isArray(e.levels)&&e.levels.every(e=>"object"==typeof e&&null!=e&&"column"in e&&v(e.column))}function v(e){return"string"==typeof e&&e.length>0||Array.isArray(e)&&2===e.length&&e.every(e=>"string"==typeof e&&e.length>0)}function b(e){if(null==e)return null;const n=e.ordering,t=e.lod;if(null==n&&null==t)return null;if("xz"!==n?.type||null==t||n.geometry_column!==e.primary_column||t.geometry_column!==e.primary_column||n.geometry_column!==t.geometry_column||20!==n.max_level||!L(n.extent)||"pbf"!==t.encoding)return k(e,"ordering and lod must form a valid primary-column XZ pair");const o=e.columns[e.primary_column],r=T(o);if(null==r||!P(t.orientation,r.geometryType))return k(e,"geometry type, dimensions, or LOD orientation is invalid");const i=Z(t.levels),l=X(o)?.wkid;if(null==i||null==l)return k(e,"LOD levels or spatial reference is invalid");const[u,a,s,m]=n.extent;return{index:{type:"xz",code:"geokey",wkid:l,wkt:null,encoding:"esriPBF",fullExtent:{xmin:u,ymin:a,xmax:s,ymax:m},geometryType:r.geometryType,maxLevel:n.max_level,hasZ:r.hasZ,hasM:r.hasM,levels:i}}}function k(e,n){return i().warn("parquet:protocol-violation",`Ignoring GeoParquet ordering and LOD extensions: ${n}`,{lod:e.lod,ordering:e.ordering}),null}function T(e){if(null==e||0===e.geometry_types.length)return null;let n,t;for(const o of e.geometry_types){const e=/^(LineString|MultiLineString|Polygon|MultiPolygon)(?: (Z|M|ZM))?$/.exec(o);if(null==e)return null;const r="LineString"===e[1]||"MultiLineString"===e[1]?"polyline":"polygon";if(null!=n&&n!==r||null!=t&&t!==(e[2]??""))return null;n=r,t=e[2]??""}return null==n||null==t?null:{geometryType:n,hasZ:"Z"===t||"ZM"===t,hasM:"M"===t||"ZM"===t}}function P(e,n){return"polygon"===n?"clockwise"===e:null==e}function Z(e){if(!Array.isArray(e)||0===e.length)return null;const n=new Set,t=e.slice().sort((e,n)=>n.resolution-e.resolution),o=[];for(const[r,i]of t.entries()){if(!G(i.column)||!Number.isFinite(i.resolution)||i.resolution<=0||n.has(i.resolution)||!S(i.transform))return null;n.add(i.resolution),o.push({column:i.column,level:r,resolution:i.resolution,transform:i.transform})}return o}function G(e){return Array.isArray(e)&&2===e.length&&"geolod"===e[0]&&"string"==typeof e[1]&&e[1].length>0}function S(e){return q(e?.scale,!0)&&q(e?.translate,!1)}function q(e,n){return Array.isArray(e)&&4===e.length&&e.every(e=>"number"==typeof e&&Number.isFinite(e)&&(!n||e>0))}function L(e){return q(e,!1)&&e[0]<e[2]&&e[1]<e[3]}function O(e){A(e);const n=_(e),t=d(e),o=f(e),r=o.present?o.optimization:b(t),i=$(t,n),{hasZ:l,hasM:u}=j(t,r);let a,s;if(i)switch(i.type){case"location":s={wkid:4326},a="esriGeometryPoint";break;case"wkb":if(t){const e=t.primary_column,n=t.columns[e];a=R(n),s=X(n)}}if(r){const e=r.index;!s&&e.wkid&&(s={wkid:e.wkid}),a||(a="z"===e.type?"esriGeometryPoint":H(e.geometryType))}return{geoMetadata:t,displayOptimization:r,hasZ:l,hasM:u,geometryEncoding:i,geometryInfo:s&&a?{geometry:i?{geometryType:a,spatialReference:s,encoding:i}:null,displayOptimization:r}:null,geometryType:a,spatialReference:s,extent:J(t,r,s),fields:n}}function A(n){for(const t of n.compressionCodecs())if(!u.has(t))throw new e("parquet:unsupported",`Compression codec ${t} is unsupported. Must be of type ${Array.from(u).join(",")}`)}function _(e){const n=[];for(const t of e.fields(!1))n.push({name:t.name,alias:t.name,type:t.type});return n}function N(e,n){return null==e?e:"esriFieldTypeDateOnly"===n?I(e):"esriFieldTypeTimeOnly"===n?E(e):"esriFieldTypeString"===n||"esriFieldTypeTimestampOffset"===n?a.decode(e):e}function I(e){return new Date(e*l).toISOString().slice(0,10)}function E(e){const n=Math.floor(e/3600),t=Math.floor(e%3600/60),o=e%60;return`${n.toString().padStart(2,"0")}:${t.toString().padStart(2,"0")}:${o.toString().padStart(2,"0")}`}function $(e,n){if(null!=e){const n=e.primary_column;return{type:"wkb",field:n,orientation:"counterclockwise"===e.columns[n].orientation?"counter-clockwise":null}}const t=D(n.filter(e=>s.has(e.type)).map(e=>e.name));return t.latitudeFieldName&&t.longitudeFieldName?{type:"location",xField:t.longitudeFieldName,yField:t.latitudeFieldName}:null}function D(e){const n=e.map(e=>e.toLowerCase());return{longitudeFieldName:e[n.indexOf(o.find(e=>n.includes(e)))],latitudeFieldName:e[n.indexOf(t.find(e=>n.includes(e)))]}}function R(n){const{geometry_types:t}=n,o=new Set;for(const e of t){const n=B(e);n&&o.add(n)}if(o.size>1)throw new e("parquet:unsupported","Parquet mixed geometry types are not supported",{geometryTypes:o});return 1===o.size?o.values().next().value:void 0}function B(e){switch(e.replace(/ (?:Z|M|ZM)$/u,"")){case"Point":return"esriGeometryPoint";case"Polygon":case"MultiPolygon":return"esriGeometryPolygon";case"LineString":case"MultiLineString":return"esriGeometryPolyline";case"MultiPoint":return"esriGeometryMultipoint";default:return null}}function j(e,n){const t=n?.index;if("z"===t?.type)return{hasZ:null!=t.zColumn,hasM:null!=t.mColumn};if("xz"===t?.type)return{hasZ:!0===t.hasZ,hasM:!0===t.hasM};const o=e?.columns[e.primary_column]?.geometry_types??[];return{hasZ:o.some(e=>/ (?:Z|ZM)$/u.test(e)),hasM:o.some(e=>/ (?:M|ZM)$/u.test(e))}}function H(e){switch(e){case"polygon":return"esriGeometryPolygon";case"polyline":return"esriGeometryPolyline";case"multipoint":return"esriGeometryMultipoint"}}function V(n){switch(n.toLowerCase()){case"polygon":return"polygon";case"polyline":return"polyline";case"multipoint":return"multipoint";default:throw new e("parquet:unsupported",`Geometry type ${n} is unsupported`)}}function X(e){const n=e.crs?.id?.code;return"number"==typeof n?{wkid:n}:"OGC"===e.crs?.id?.authority&&"CRS84"===n?{wkid:4326}:void 0}function J(e,n,t){if(!t)return null;const o=e?e.columns[e.primary_column]:null,r=o?.bbox;if(r?.every(e=>Number.isFinite(e)))switch(r.length){case 4:return{xmin:r[0],ymin:r[1],xmax:r[2],ymax:r[3],spatialReference:t};case 6:return{xmin:r[0],ymin:r[1],xmax:r[3],ymax:r[4],spatialReference:t};default:i().warn("parquet:protocol-violation","Invalid Geoparquet file. BoundingBox size must be 4 or 6.",{geoMetadata:e})}const l=n?.index.fullExtent;return l?{...l,spatialReference:t}:null}export{y as createParquetFile,x as normalizeColumnPath,d as readGeoMetadata,O as readMetadata,w as readParquetChunkAttribute,h as readParquetFileAttribute};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arcgis/core",
3
- "version": "5.2.0-next.91",
3
+ "version": "5.2.0-next.94",
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,11 +20,11 @@
20
20
  "license": "SEE LICENSE IN LICENSE.md",
21
21
  "dependencies": {
22
22
  "@amcharts/amcharts5": "~5.20.3",
23
- "@arcgis/toolkit": "5.2.0-next.91",
23
+ "@arcgis/toolkit": "5.2.0-next.94",
24
24
  "@esri/arcgis-html-sanitizer": "~4.1.0",
25
25
  "@esri/calcite-components": "^5.2.0-next.52",
26
26
  "@vaadin/grid": "~25.2.9",
27
- "@zip.js/zip.js": "~2.8.60",
27
+ "@zip.js/zip.js": "~2.8.61",
28
28
  "luxon": "~3.7.2",
29
29
  "marked": "~18.0.11",
30
30
  "tslib": "^2.8.1"
@@ -523,7 +523,7 @@ export interface SizeSchemeForPolygon {
523
523
  */
524
524
  marker: SizeSchemeForPoint;
525
525
  /**
526
- * The schema defining the backgound symbol of the feature. This is a fill symbol.
526
+ * The schema defining the background symbol of the feature. This is a fill symbol.
527
527
  *
528
528
  * @since 5.0
529
529
  */
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- const c="20260828",d="c242577285edc82f154c5433f2d472117b798847";export{c as buildDate,d as revision};
2
+ const c="20260831",f="5060df3d10b96a76f1acf0e4c53360a6fcc8be19";export{c as buildDate,f as revision};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import{__decorate as e}from"tslib";import t from"../../../core/Error.js";import has from"../../../core/has.js";import{removeMaybe as r}from"../../../core/maybe.js";import{addFrameTask as s}from"../../../core/scheduling.js";import{signal as i}from"../../../core/signal.js";import{property as n}from"../../../core/accessorSupport/decorators.js";import{create as a}from"../../../core/libs/gl-matrix-2/factories/mat3f32.js";import{CIMAnalyzer as o}from"../../../symbols/cim/cimAnalyzer.js";import{LabelManager as h}from"../LabelManager.js";import{Container as d}from"./Container.js";import{ThrottledCanvas as l}from"./ThrottledCanvas.js";import{MAX_TILE_RESHUFFLES_PER_FRAME as m}from"./webgl/definitions.js";import c from"./webgl/Painter.js";import{Profiler as u}from"./webgl/Profiler.js";import{TileReshuffleManager as p}from"./webgl/TileReshuffleManager.js";import{startup as f,shutdown as g}from"./webgl/shaderGraph/techniques/TechniqueRegistry.js";import{MeshWriterRegistry as _}from"./webgl/shaderGraph/techniques/mesh/MeshWriterRegistry.js";import{FeatureContainer as b}from"../layers/features/FeatureContainer.js";import{Timeline as w}from"../support/Timeline.js";import{SizedPixelFormat as R,SizedDepthStencilFormat as y,PixelType as x}from"../../webgl/enums.js";import{DisposableFramebufferObject as C}from"../../webgl/FramebufferObject.js";import{RenderbufferDescriptor as j}from"../../webgl/RenderbufferDescriptor.js";import{RenderingContext as P}from"../../webgl/RenderingContext.js";import{RenderingContextOptions as T}from"../../webgl/RenderingContextOptions.js";import{TextureDescriptor as M}from"../../webgl/TextureDescriptor.js";const q=2e3;class v extends d{constructor(e,r){super(),this._trash=new Set,this._renderRemainingTime=0,this._lastFrameRenderTime=0,this._stationary=!0,this._animationsEnabled=!0,this._renderRequested=i(!1),this._reshuffleManager=new p,this.stage=this,this.meshWriterRegistry=new _,this.labelManager=new h({featuresTilingScheme:r.featuresTilingScheme}),this._throttledCanvas=new l(e),this.context=new P(this._throttledCanvas.gl,r.contextOptions??new T),this.painter=new c(this.context,this),this._cimAnalyzer=new o(this.painter.textureManager.resourceManager);const n=()=>this.highlightGradient;this._renderParameters={drawPhase:0,state:this.state,pixelRatio:window.devicePixelRatio,stationary:!1,globalOpacity:1,blendMode:null,deltaTime:-1,time:0,inFadeTransition:!1,effects:null,context:this.context,painter:this.painter,timeline:r.timeline||new w,renderingOptions:r.renderingOptions,requestRender:()=>this.requestRender(),allowDelayedRender:!1,requireFBO:!1,profiler:new u(this.context),dataUploadCounter:0,get highlightGradient(){return n()},reshuffleManager:this._reshuffleManager,backgroundColor:r.backgroundColor,animationsEnabled:!0};let a=e=>this.renderFrame(e);null!=r.renderFrame&&(a=r.renderFrame),this._taskHandle=s({render:e=>a(e)}),this._taskHandle.pause(),this._lostWebGLContextHandle=this._throttledCanvas.events.on("webgl-context-lost",e=>this.emit("webgl-error",{error:new t("webgl-context-lost",e.statusMessage||"WebGL context lost")})),f()}destroy(){super.destroy(),g(this.context),this.labelManager.destroy(),this.removeAllChildren(),this._emptyTrash(),this._taskHandle=r(this._taskHandle),this._lostWebGLContextHandle=r(this._lostWebGLContextHandle),this._throttledCanvas.destroy(),this.painter.dispose(),this.context.dispose(),this._throttledCanvas=null}get updating(){return this.labelManager.updating}get textureManager(){return this.painter.textureManager}get profiler(){return this._renderParameters.profiler}get backgroundColor(){return this._renderParameters.backgroundColor}set backgroundColor(e){this._renderParameters.backgroundColor=e,this.requestRender()}get canvas(){return this._throttledCanvas.canvas}get cimAnalyzer(){return this._cimAnalyzer}get effectiveVisible(){return this.visible}get renderingOptions(){return this._renderingOptions}set renderingOptions(e){this._renderingOptions=e,this.requestRender()}get renderRequested(){return this._renderRequested.value}get state(){return this._state}set state(e){this._state=e,this.requestDeclutter(),this.requestRender()}get stationary(){return this._stationary}set stationary(e){this._stationary!==e&&(this._stationary=e,this.requestRender())}get animationsEnabled(){return this._animationsEnabled}set animationsEnabled(e){this._animationsEnabled!==e&&(this._animationsEnabled=e,this._animationsEnabled&&this.requestRender())}trashDisplayObject(e){this._trash.add(e),this.requestRender()}untrashDisplayObject(e){return this._trash.delete(e)}requestRender(){this._renderRemainingTime=q,this.renderRequested||(this._renderRequested.value=!0,this._taskHandle.resume())}requestDeclutter(){this.labelManager.requestDeclutter(),this.requestRender()}renderFrame(e){const t=this._lastFrameRenderTime?e.time-this._lastFrameRenderTime:0;this._renderRemainingTime-=t,this._renderRemainingTime<=0&&this._taskHandle.pause(),this._lastFrameRenderTime=e.time,this._renderRequested.value=!1,this._renderParameters.state=this._state,this._renderParameters.stationary=this.stationary,this._renderParameters.pixelRatio=window.devicePixelRatio,this._renderParameters.globalOpacity=1,this._renderParameters.time=e.time,this._renderParameters.deltaTime=e.deltaTime,this._renderParameters.effects=null,this._renderParameters.animationsEnabled=this._animationsEnabled,this.processRender(this._renderParameters),this._emptyTrash()}_createTransforms(){return{displayViewScreenMat3:a()}}renderChildren(e){this._reshuffleManager.reshuffle(m);const t=[];this._prepareFeatureContainers(t,this);const r=this.labelManager.declutter(t,e.state);r&&this.requestRender(),this._throttledCanvas.render(e,()=>this._renderChildren(this.children,e,r))}_renderChildren(e,t,r=!1){t.decluttering=r;for(const i of e)i.beforeRender(t);const s=this.context;this.painter.textureUploadManager.upload(),s.resetInfo(),t.profiler.recordStart("drawLayers"),t.dataUploadCounter=0,this.painter.beforeRenderPhases(t,t.backgroundColor,this.state.padding),t.drawPhase=1;for(const i of e)i.processRender(t);if(this.children.some(e=>e.hasHighlight)){t.drawPhase=16;for(const r of e)r.processRender(t)}if(this.children.some(e=>e.hasLabels)){t.drawPhase=2;for(const r of e)r.processRender(t)}if(has("esri-tiles-debug")){t.drawPhase=64;for(const r of e)r.processRender(t)}t.drawPhase=128;for(const i of e)i.processRender(t);this.painter.afterRenderPhases(t),t.profiler.recordEnd("drawLayers"),s.logInfo();for(const i of e)i.afterRender(t)}_prepareFeatureContainers(e,t){for(const r of t.children)r instanceof b?e.push(r):r instanceof d&&this._prepareFeatureContainers(e,r)}doRender(e){const t=this.context,{state:r,pixelRatio:s}=e;this._throttledCanvas.resize(e),t.setViewport(0,0,s*r.size[0],s*r.size[1]),t.setDepthWriteEnabled(!0),t.setStencilWriteMask(255),this.renderChildren(e)}async takeScreenshot(e,t,r,s){const i=Math.round(this.state.size[0]*e.resolutionScale),n=Math.round(this.state.size[1]*e.resolutionScale),a=e.resolutionScale,o=this.context,h=this._state.clone();if(null!=s){const e=h.viewpoint;h.viewpoint.rotation=s,h.viewpoint=e}const d={...this._renderParameters,drawPhase:null,globalOpacity:1,stationary:!0,state:h,pixelRatio:a,time:performance.now(),deltaTime:0,blendMode:null,effects:null,inFadeTransition:!1,backgroundColor:r},l=new M(i,n);l.wrapMode=33071,l.internalFormat=R.RGBA8,l.isImmutable=!0;const m=new C(o,l,new j(y.DEPTH24_STENCIL8,i,n)),c=o.boundFramebuffer,u=o.getViewport();o.bindFramebuffer(m),o.setViewport(0,0,i,n),this._renderChildren(t??this.children,d);const p=this._readbackScreenshot(m,{...e.cropArea,y:n-(e.cropArea.y+e.cropArea.height)});o.bindFramebuffer(c),o.setViewport(u.x,u.y,u.width,u.height),this.requestRender();const f=await p;let g;return 1===e.outputScale?g=f:(g=new ImageData(Math.round(f.width*e.outputScale),Math.round(f.height*e.outputScale)),(await(import("../../support/screenshotUtils.js"))).resampleHermite(f,g,!0)),m.dispose(),g}async _readbackScreenshot(e,t){const r=(await(import("../../support/screenshotUtils.js"))).createEmptyImageData(t.width,t.height,document.createElement("canvas"));return await e.readPixelsAsync(t.x,t.y,t.width,t.height,6408,x.UNSIGNED_BYTE,new Uint8Array(r.data.buffer)),r}_emptyTrash(){for(;this._trash.size>0;){const e=Array.from(this._trash);this._trash.clear();for(const t of e)t.processDetach()}}}e([n()],v.prototype,"updating",null);export{v as Stage,q as extraRenderTime};
2
+ import{__decorate as e}from"tslib";import t from"../../../core/Error.js";import has from"../../../core/has.js";import{removeMaybe as r}from"../../../core/maybe.js";import{addFrameTask as s}from"../../../core/scheduling.js";import{signal as i}from"../../../core/signal.js";import{property as n}from"../../../core/accessorSupport/decorators.js";import{create as a}from"../../../core/libs/gl-matrix-2/factories/mat3f32.js";import{CIMAnalyzer as o}from"../../../symbols/cim/cimAnalyzer.js";import{LabelManager as h}from"../LabelManager.js";import{Container as d}from"./Container.js";import{ThrottledCanvas as l}from"./ThrottledCanvas.js";import{MAX_TILE_RESHUFFLES_PER_FRAME as m}from"./webgl/definitions.js";import c from"./webgl/Painter.js";import{Profiler as u}from"./webgl/Profiler.js";import{TileReshuffleManager as p}from"./webgl/TileReshuffleManager.js";import{startup as f,shutdown as g}from"./webgl/shaderGraph/techniques/TechniqueRegistry.js";import{MeshWriterRegistry as _}from"./webgl/shaderGraph/techniques/mesh/MeshWriterRegistry.js";import{FeatureContainer as b}from"../layers/features/FeatureContainer.js";import{Timeline as w}from"../support/Timeline.js";import{SizedPixelFormat as R,SizedDepthStencilFormat as y,PixelType as x}from"../../webgl/enums.js";import{DisposableFramebufferObject as C}from"../../webgl/FramebufferObject.js";import{RenderbufferDescriptor as j}from"../../webgl/RenderbufferDescriptor.js";import{RenderingContext as P}from"../../webgl/RenderingContext.js";import{RenderingContextOptions as T}from"../../webgl/RenderingContextOptions.js";import{TextureDescriptor as M}from"../../webgl/TextureDescriptor.js";const q=2e3;class v extends d{constructor(e,r){super(),this._trash=new Set,this._renderRemainingTime=0,this._lastFrameRenderTime=0,this._stationary=!0,this._animationsEnabled=!0,this._renderRequested=i(!1),this._reshuffleManager=new p,this.stage=this,this.meshWriterRegistry=new _,this.labelManager=new h({featuresTilingScheme:r.featuresTilingScheme}),this._throttledCanvas=new l(e),this.context=new P(this._throttledCanvas.gl,r.contextOptions??new T),this.painter=new c(this.context,this),this._cimAnalyzer=new o(this.painter.textureManager.resourceManager);const n=()=>this.highlightGradient;this._renderParameters={drawPhase:0,state:this.state,pixelRatio:window.devicePixelRatio,stationary:!1,globalOpacity:1,blendMode:null,deltaTime:-1,time:0,inFadeTransition:!1,effects:null,context:this.context,painter:this.painter,timeline:r.timeline||new w,renderingOptions:r.renderingOptions,requestRender:()=>this.requestRender(),allowDelayedRender:!1,requireFBO:!1,profiler:new u(this.context),dataUploadCounter:0,get highlightGradient(){return n()},reshuffleManager:this._reshuffleManager,backgroundColor:r.backgroundColor,animationsEnabled:!0};let a=e=>this.renderFrame(e);null!=r.renderFrame&&(a=r.renderFrame),this._taskHandle=s({render:e=>a(e)}),this._taskHandle.pause(),this._lostWebGLContextHandle=this._throttledCanvas.events.on("webgl-context-lost",e=>this.emit("webgl-error",{error:new t("webgl-context-lost",e.statusMessage||"WebGL context lost")})),f()}destroy(){super.destroy(),g(this.context),this.labelManager.destroy(),this.removeAllChildren(),this._emptyTrash(),this._taskHandle=r(this._taskHandle),this._lostWebGLContextHandle=r(this._lostWebGLContextHandle),this._throttledCanvas.destroy(),this.painter.dispose(),this.context.dispose(),this._throttledCanvas=null}get updating(){return this.labelManager.updating}get textureManager(){return this.painter.textureManager}get profiler(){return this._renderParameters.profiler}get backgroundColor(){return this._renderParameters.backgroundColor}set backgroundColor(e){this._renderParameters.backgroundColor=e,this.requestRender()}get canvas(){return this._throttledCanvas.canvas}get cimAnalyzer(){return this._cimAnalyzer}get effectiveVisible(){return this.visible}get renderingOptions(){return this._renderingOptions}set renderingOptions(e){this._renderingOptions=e,this.requestRender()}get renderRequested(){return this._renderRequested.value}get state(){return this._state}set state(e){this._state=e,this.requestDeclutter(),this.requestRender()}get stationary(){return this._stationary}set stationary(e){this._stationary!==e&&(this._stationary=e,this.requestRender())}get animationsEnabled(){return this._animationsEnabled}set animationsEnabled(e){this._animationsEnabled!==e&&(this._animationsEnabled=e,this._animationsEnabled&&this.requestRender())}trashDisplayObject(e){this._trash.add(e),this.requestRender()}untrashDisplayObject(e){return this._trash.delete(e)}requestRender(){this._renderRemainingTime=q,this.renderRequested||(this._renderRequested.value=!0,this._taskHandle.resume())}requestDeclutter(){this.labelManager.requestDeclutter(),this.requestRender()}renderFrame(e){const t=this._lastFrameRenderTime?e.time-this._lastFrameRenderTime:0;this._renderRemainingTime-=t,this._renderRemainingTime<=0&&this._taskHandle.pause(),this._lastFrameRenderTime=e.time,this._renderRequested.value=!1,this._renderParameters.state=this._state,this._renderParameters.stationary=this.stationary,this._renderParameters.pixelRatio=window.devicePixelRatio,this._renderParameters.globalOpacity=1,this._renderParameters.time=e.time,this._renderParameters.deltaTime=e.deltaTime,this._renderParameters.effects=null,this._renderParameters.animationsEnabled=this._animationsEnabled,this.processRender(this._renderParameters),this._emptyTrash()}_createTransforms(){return{displayViewScreenMat3:a()}}renderChildren(e){this._reshuffleManager.reshuffle(m);const t=[];this._prepareFeatureContainers(t,this);const r=this.labelManager.declutter(t,e.state);r&&this.requestRender(),this._throttledCanvas.render(e,()=>this._renderChildren(this.children,e,r))}_renderChildren(e,t,r=!1){t.decluttering=r;for(const i of e)i.beforeRender(t);const s=this.context;this.painter.textureUploadManager.upload(),s.resetInfo(),t.profiler.recordStart("drawLayers"),t.dataUploadCounter=0,this.painter.beforeRenderPhases(t,t.backgroundColor,this.state.padding),t.drawPhase=1;for(const i of e)i.processRender(t);if(this.children.some(e=>e.hasHighlight)){t.drawPhase=8;for(const r of e)r.processRender(t)}if(this.children.some(e=>e.hasLabels)){t.drawPhase=2;for(const r of e)r.processRender(t)}if(has("esri-tiles-debug")){t.drawPhase=32;for(const r of e)r.processRender(t)}t.drawPhase=64;for(const i of e)i.processRender(t);this.painter.afterRenderPhases(t),t.profiler.recordEnd("drawLayers"),s.logInfo();for(const i of e)i.afterRender(t)}_prepareFeatureContainers(e,t){for(const r of t.children)r instanceof b?e.push(r):r instanceof d&&this._prepareFeatureContainers(e,r)}doRender(e){const t=this.context,{state:r,pixelRatio:s}=e;this._throttledCanvas.resize(e),t.setViewport(0,0,s*r.size[0],s*r.size[1]),t.setDepthWriteEnabled(!0),t.setStencilWriteMask(255),this.renderChildren(e)}async takeScreenshot(e,t,r,s){const i=Math.round(this.state.size[0]*e.resolutionScale),n=Math.round(this.state.size[1]*e.resolutionScale),a=e.resolutionScale,o=this.context,h=this._state.clone();if(null!=s){const e=h.viewpoint;h.viewpoint.rotation=s,h.viewpoint=e}const d={...this._renderParameters,drawPhase:null,globalOpacity:1,stationary:!0,state:h,pixelRatio:a,time:performance.now(),deltaTime:0,blendMode:null,effects:null,inFadeTransition:!1,backgroundColor:r},l=new M(i,n);l.wrapMode=33071,l.internalFormat=R.RGBA8,l.isImmutable=!0;const m=new C(o,l,new j(y.DEPTH24_STENCIL8,i,n)),c=o.boundFramebuffer,u=o.getViewport();o.bindFramebuffer(m),o.setViewport(0,0,i,n),this._renderChildren(t??this.children,d);const p=this._readbackScreenshot(m,{...e.cropArea,y:n-(e.cropArea.y+e.cropArea.height)});o.bindFramebuffer(c),o.setViewport(u.x,u.y,u.width,u.height),this.requestRender();const f=await p;let g;return 1===e.outputScale?g=f:(g=new ImageData(Math.round(f.width*e.outputScale),Math.round(f.height*e.outputScale)),(await(import("../../support/screenshotUtils.js"))).resampleHermite(f,g,!0)),m.dispose(),g}async _readbackScreenshot(e,t){const r=(await(import("../../support/screenshotUtils.js"))).createEmptyImageData(t.width,t.height,document.createElement("canvas"));return await e.readPixelsAsync(t.x,t.y,t.width,t.height,6408,x.UNSIGNED_BYTE,new Uint8Array(r.data.buffer)),r}_emptyTrash(){for(;this._trash.size>0;){const e=Array.from(this._trash);this._trash.clear();for(const t of e)t.processDetach()}}}e([n()],v.prototype,"updating",null);export{v as Stage,q as extraRenderTime};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import"../../../../core/has.js";import{rasterizeDash as t}from"../../../../symbols/cim/rasterizingUtils.js";import{log2 as e}from"./GeometryUtils.js";import i from"../webgl/Rect.js";import s from"../webgl/RectangleBinPack.js";import a from"../../../webgl/Texture.js";import{TextureDescriptor as h}from"../../../webgl/TextureDescriptor.js";const r="dasharray-";class o{constructor(t,e,i=0){this._mosaicPages=[],this._currentPage=0,this._maxItemSize=0,this._pageWidth=0,this._pageHeight=0,this._mosaicRects={},this.pixelRatio=1,e<=0&&console.error("Sprites mosaic defaultWidth and defaultHeight must be greater than zero!"),this._pageWidth=t,this._pageHeight=e,i>0&&(this._maxItemSize=i),this._binPack=new s(t-4,e-4),this._mosaicPages.push({mosaicsData:{type:"static",data:new Uint32Array(this._pageWidth*this._pageHeight)},size:[this._pageWidth,this._pageHeight],dirty:!0,texture:void 0})}destroy(){this.dispose()}dispose(){if(this._binPack=null,null!==this._mosaicPages){for(const t of this._mosaicPages){const e=t.texture;e&&e.dispose()}this._mosaicPages=null}}getWidth(t){return t<0||t>=this._mosaicPages.length?-1:this._mosaicPages[t].size[0]}getHeight(t){return t<0||t>=this._mosaicPages.length?-1:this._mosaicPages[t].size[1]}getPageSize(t){return t<0||t>=this._mosaicPages.length?null:this._mosaicPages[t].size}getTexture(t){return t<0||t>=this._mosaicPages.length?null:this._mosaicPages[t].texture||null}setSpriteSource(t){for(const e of this._mosaicPages)e.texture&&(e.texture.dispose(),e.texture=null),e.dirty=!0;if(0===this._mosaicPages.length){this._binPack=new s(this._pageWidth-4,this._pageHeight-4);const t=Math.floor(this._pageWidth)*Math.floor(this._pageHeight),e=new Uint32Array(t);for(let i=0;i<t;i++)e[i]=0;this._mosaicPages.push({mosaicsData:{type:"static",data:e},size:[this._pageWidth,this._pageHeight],dirty:!0,texture:null})}this._sprites=t}getSpriteItem(t,e=!1){let i,s,a=this._mosaicRects[t];if(a)return a;if(t&&t.startsWith(r))[i,s]=this._rasterizeDash(t),e=!0;else{if(!this._sprites||"loaded"!==this._sprites.loadStatus)return null;i=this._sprites.getSpriteInfo(t)}if(!i?.width||!i.height||i.width<0||i.height<0)return null;const h=i.width,o=i.height,[n,g,c]=this._allocateImage(h,o);return n.width<=0?null:(this._copy(n,i,g,c,e,s),a={type:"sprite",rect:n,width:h,height:o,sdf:i.sdf,simplePattern:!1,rasterizationScale:i.pixelRatio??1,samplingMode:"Linear",page:g},this._mosaicRects[t]=a,a)}getSpriteItems(t){const e={};for(const i of t)e[i.name]=this.getSpriteItem(i.name,i.repeat);return e}getMosaicItemPosition(t,e){const i=this.getSpriteItem(t,e),s=i?.rect;if(!s)return null;s.width=i.width,s.height=i.height;const a=i.width,h=i.height,r=2;return{tl:[s.x+r,s.y+r],br:[s.x+r+a,s.y+r+h],page:i.page}}bind(t,e,i=0,s=0){if(i>=this._mosaicPages.length||i>=this._mosaicPages.length)return;const r=this._mosaicPages[i];let o=r.texture;if(!o){const e=new h(r.size[0],r.size[1]);e.wrapMode=33071,o=new a(t,e),r.texture=o}if(o.setSamplingMode(e),t.bindTexture(o,s),r.dirty){const t=r.mosaicsData.data;o.setData(new Uint8Array(t.buffer))}r.dirty=!1}static _copyBits(t,e,i,s,a,h,r,o,n,g,c){let l=s*e+i,_=o*h+r;if(c){_-=h;for(let r=-1;r<=g;r++,l=((r+g)%g+s)*e+i,_+=h)for(let e=-1;e<=n;e++)a[_+e]=t[l+(e+n)%n]}else for(let m=0;m<g;m++){for(let e=0;e<n;e++)a[_+e]=t[l+e];l+=e,_+=h}}_copy(t,e,i,s,a,h){if(i>=this._mosaicPages.length||!h&&(!this._sprites||"loaded"!==this._sprites.loadStatus))return;const r=this._mosaicPages[i],n=r.mosaicsData.data,g=new Uint32Array(h?h.buffer:this._sprites.image.buffer),c=2,l=h?e.width:this._sprites.width;o._copyBits(g,l,e.x,e.y,n,s[0],t.x+c,t.y+c,e.width,e.height,a),r.dirty=!0}_allocateImage(t,a){t+=2,a+=2;const h=Math.max(t,a);if(this._maxItemSize&&this._maxItemSize<h){const s=2**Math.ceil(e(t)),h=2**Math.ceil(e(a)),r=new i(0,0,t,a);return this._mosaicPages.push({mosaicsData:{type:"static",data:new Uint32Array(s*h)},size:[s,h],dirty:!0,texture:null}),[r,this._mosaicPages.length-1,[s,h]]}let r=t%4?4-t%4:4,o=a%4?4-a%4:4;1===r&&(r=5),1===o&&(o=5);const n=this._binPack.allocate(t+r,a+o);if(n.width<=0){const e=this._mosaicPages[this._currentPage];return e.dirty||(e.mosaicsData.data=null),this._currentPage=this._mosaicPages.length,this._mosaicPages.push({mosaicsData:{type:"static",data:new Uint32Array(this._pageWidth*this._pageHeight)},size:[this._pageWidth,this._pageHeight],dirty:!0,texture:null}),this._binPack=new s(this._pageWidth-4,this._pageHeight-4),this._allocateImage(t,a)}return[n,this._currentPage,[this._pageWidth,this._pageHeight]]}_rasterizeDash(e){const i=/\[(.*?)\]/,s=e.match(i);if(!s)return null;const a=s[1].split(",").map(Number),h=e.slice(e.lastIndexOf("-")+1),[r,o,n]=t(a,h);return[{x:0,y:0,width:o,height:n,sdf:!0,pixelRatio:1},new Uint8Array(r.buffer)]}}export{o as default};
2
+ import"../../../../core/has.js";import{rasterizeDash as t}from"../../../../symbols/cim/rasterizingUtils.js";import{log2 as e}from"./GeometryUtils.js";import i from"../webgl/Rect.js";import s from"../webgl/RectangleBinPack.js";import a from"../../../webgl/Texture.js";import{TextureDescriptor as h}from"../../../webgl/TextureDescriptor.js";const r="dasharray-";class o{constructor(t,e,i=0){this._mosaicPages=[],this._currentPage=0,this._maxItemSize=0,this._pageWidth=0,this._pageHeight=0,this._mosaicRects={},e<=0&&console.error("Sprites mosaic defaultWidth and defaultHeight must be greater than zero!"),this._pageWidth=t,this._pageHeight=e,i>0&&(this._maxItemSize=i),this._binPack=new s(t-4,e-4),this._mosaicPages.push({mosaicsData:{type:"static",data:new Uint32Array(this._pageWidth*this._pageHeight)},size:[this._pageWidth,this._pageHeight],dirty:!0,texture:void 0})}destroy(){this.dispose()}dispose(){if(this._binPack=null,null!==this._mosaicPages){for(const t of this._mosaicPages){const e=t.texture;e&&e.dispose()}this._mosaicPages=null}}getWidth(t){return t<0||t>=this._mosaicPages.length?-1:this._mosaicPages[t].size[0]}getHeight(t){return t<0||t>=this._mosaicPages.length?-1:this._mosaicPages[t].size[1]}getPageSize(t){return t<0||t>=this._mosaicPages.length?null:this._mosaicPages[t].size}getTexture(t){return t<0||t>=this._mosaicPages.length?null:this._mosaicPages[t].texture||null}setSpriteSource(t){for(const e of this._mosaicPages)e.texture&&(e.texture.dispose(),e.texture=null),e.dirty=!0;if(0===this._mosaicPages.length){this._binPack=new s(this._pageWidth-4,this._pageHeight-4);const t=Math.floor(this._pageWidth)*Math.floor(this._pageHeight),e=new Uint32Array(t);for(let i=0;i<t;i++)e[i]=0;this._mosaicPages.push({mosaicsData:{type:"static",data:e},size:[this._pageWidth,this._pageHeight],dirty:!0,texture:null})}this._sprites=t}getSpriteItem(t,e=!1){let i,s,a=this._mosaicRects[t];if(a)return a;if(t&&t.startsWith(r))[i,s]=this._rasterizeDash(t),e=!0;else{if(!this._sprites||"loaded"!==this._sprites.loadStatus)return null;i=this._sprites.getSpriteInfo(t)}if(!i?.width||!i.height||i.width<0||i.height<0)return null;const h=i.width,o=i.height,[n,g,c]=this._allocateImage(h,o);return n.width<=0?null:(this._copy(n,i,g,c,e,s),a={type:"sprite",rect:n,width:h,height:o,sdf:i.sdf,simplePattern:!1,rasterizationScale:i.pixelRatio??1,samplingMode:"Linear",page:g},this._mosaicRects[t]=a,a)}getSpriteItems(t){const e={};for(const i of t)e[i.name]=this.getSpriteItem(i.name,i.repeat);return e}getMosaicItemPosition(t,e){const i=this.getSpriteItem(t,e),s=i?.rect;if(!s)return null;s.width=i.width,s.height=i.height;const a=i.width,h=i.height,r=2;return{tl:[s.x+r,s.y+r],br:[s.x+r+a,s.y+r+h],page:i.page}}bind(t,e,i=0,s=0){if(i>=this._mosaicPages.length||i>=this._mosaicPages.length)return;const r=this._mosaicPages[i];let o=r.texture;if(!o){const e=new h(r.size[0],r.size[1]);e.wrapMode=33071,o=new a(t,e),r.texture=o}if(o.setSamplingMode(e),t.bindTexture(o,s),r.dirty){const t=r.mosaicsData.data;o.setData(new Uint8Array(t.buffer))}r.dirty=!1}static _copyBits(t,e,i,s,a,h,r,o,n,g,c){let l=s*e+i,_=o*h+r;if(c){_-=h;for(let r=-1;r<=g;r++,l=((r+g)%g+s)*e+i,_+=h)for(let e=-1;e<=n;e++)a[_+e]=t[l+(e+n)%n]}else for(let m=0;m<g;m++){for(let e=0;e<n;e++)a[_+e]=t[l+e];l+=e,_+=h}}_copy(t,e,i,s,a,h){if(i>=this._mosaicPages.length||!h&&(!this._sprites||"loaded"!==this._sprites.loadStatus))return;const r=this._mosaicPages[i],n=r.mosaicsData.data,g=new Uint32Array(h?h.buffer:this._sprites.image.buffer),c=2,l=h?e.width:this._sprites.width;o._copyBits(g,l,e.x,e.y,n,s[0],t.x+c,t.y+c,e.width,e.height,a),r.dirty=!0}_allocateImage(t,a){t+=2,a+=2;const h=Math.max(t,a);if(this._maxItemSize&&this._maxItemSize<h){const s=2**Math.ceil(e(t)),h=2**Math.ceil(e(a)),r=new i(0,0,t,a);return this._mosaicPages.push({mosaicsData:{type:"static",data:new Uint32Array(s*h)},size:[s,h],dirty:!0,texture:null}),[r,this._mosaicPages.length-1,[s,h]]}let r=t%4?4-t%4:4,o=a%4?4-a%4:4;1===r&&(r=5),1===o&&(o=5);const n=this._binPack.allocate(t+r,a+o);if(n.width<=0){const e=this._mosaicPages[this._currentPage];return e.dirty||(e.mosaicsData.data=null),this._currentPage=this._mosaicPages.length,this._mosaicPages.push({mosaicsData:{type:"static",data:new Uint32Array(this._pageWidth*this._pageHeight)},size:[this._pageWidth,this._pageHeight],dirty:!0,texture:null}),this._binPack=new s(this._pageWidth-4,this._pageHeight-4),this._allocateImage(t,a)}return[n,this._currentPage,[this._pageWidth,this._pageHeight]]}_rasterizeDash(e){const i=/\[(.*?)\]/,s=e.match(i);if(!s)return null;const a=s[1].split(",").map(Number),h=e.slice(e.lastIndexOf("-")+1),[r,o,n]=t(a,h);return[{x:0,y:0,width:o,height:n,sdf:!0,pixelRatio:1},new Uint8Array(r.buffer)]}}export{o as default};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import{create as e}from"../../../../geometry/support/aaBoundingRect.js";import t from"../../../../layers/support/TileInfo.js";import{tileSizeInTileUnits as s,tileSizeInPixels as r}from"./constants.js";import{SymbolFader as i}from"./decluttering/SymbolFader.js";import{writeOpacityToBuffers as o}from"./decluttering/util.js";import{RenderableTile as l}from"../webgl/RenderableTile.js";import n from"../webgl/TileContainer.js";import{simplePipelineState as a}from"../webgl/shaderGraph/utils.js";import{VTLTechniquesRepo as d}from"../webgl/shaderGraph/techniques/vectorTiles/VTLTechniques.js";import h from"../../tiling/TileCoverage.js";import c from"../../tiling/TileKey.js";const u=1e-6;function y(e,t){if(e){const s=e.getLayoutProperty("visibility");if(!s||1!==s.getValue()&&(void 0===e.minzoom||e.minzoom<t+u)&&(void 0===e.maxzoom||e.maxzoom>=t-u))return!0}return!1}class m extends n{constructor(e){super(e),this._backgroundTiles=[],this._techniques=new d,this._computeDisplayInfoView(e),this._techniques.startup()}destroy(){super.destroy(),this.removeAllChildren(),this._spriteMosaic?.dispose(),this._spriteMosaic=null,null!=this._symbolFader&&(this._symbolFader.clear(),this._symbolFader=null);const e=this.stage?.context;e&&this._techniques.shutdown(e),this._styleRepository=null,this._backgroundTiles=[]}get fading(){return this._symbolFader?.fading??!1}get symbolFader(){return this._symbolFader}get symbolRepository(){return this._symbolFader?.symbolRepository}setStyleResources(e,t,r,l){if(this._spriteMosaic=e,this._glyphMosaic=t,this._styleRepository=r,this.tilingScheme=l,this._computeDisplayInfoView(l),null==this._symbolFader){const e=(e,t)=>{e.allSymbolsFadingOut=!0,e.lastOpacityUpdate=t,o(e,t,!0),e.decluttered=!0,e.requestRender()};this._symbolFader=new i("vector-tile",this._styleRepository,e,this.children,s)}this._symbolFader.styleRepository=r}setSpriteMosaic(e){this._spriteMosaic?.dispose(),this._spriteMosaic=e}deleteStyleLayers(e){null!=this._symbolFader&&this._symbolFader.deleteStyleLayers(e)}createRenderParams(e){return{...super.createRenderParams(e),renderPass:null,styleLayer:null,styleLayerUID:-1,glyphMosaic:this._glyphMosaic,spriteMosaic:this._spriteMosaic}}doRender(e){const{drawPhase:t}=e,s=1===t||64===t;this.visible&&s&&void 0!==this._spriteMosaic&&super.doRender(e)}addChild(e){return super.addChild(e),null!=this._symbolFader?this._symbolFader.addTile(e):e.decluttered=!0,this.requestRender(),e}removeChild(e){return null!=this._symbolFader&&this._symbolFader.removeTile(e),this.requestRender(),super.removeChild(e)}renderChildren(e){const{drawPhase:t}=e;64!==t?this._doRender(e):super.renderChildren(e)}removeAllChildren(){for(let e=0;e<this.children.length;e++){const t=this.children[e];null!=this._symbolFader&&this._symbolFader.removeTile(t),t.dispose()}super.removeAllChildren()}getStencilTarget(){return this.children.filter(e=>e.neededForCoverage&&e.hasData())}restartDeclutter(){null!=this._symbolFader&&this._symbolFader.restartDeclutter()}_doRender(e){const{context:t,painter:s,state:r}=e,i=this._styleRepository;if(!i)return;const o=i.layers,l=this._displayInfo.scaleToZoom(r.scale);this.children.forEach(e=>e.disposeLayerData()),super.renderChildren(e),i.backgroundBucketIds.length>0&&(e.renderPass="background",this._renderBackgroundLayers(e,i.backgroundBucketIds,l)),1===e.drawPhase&&this._fade(l,r);const n=this.children.filter(t=>(1===e.drawPhase&&t.fader.fade()<1&&this.requestRender(),t.visible&&t.hasData()));if(n&&0!==n.length){for(const e of n)e.triangleCount=0;t.setClearDepth(1),t.clear(256),s.setPipelineState({color:{write:[!0,!0,!0,!0],blendMode:"composite"},stencil:{write:!1,test:{compare:514,op:{fail:7680,zFail:7680,zPass:7681},mask:255}},depth:{write:!1,test:515}}),e.renderPass="translucent";for(let t=0;t<o.length;t++)this._renderStyleLayer(o[t],e,n);t.bindVAO(null),s.setPipelineState(a);for(const e of n)e.debugInfo.display.triangleCount=e.triangleCount}else t.bindVAO(null)}_fade(e,t){null!=this._symbolFader&&(this._symbolFader.update(e,t)||this.requestRender())}_renderStyleLayer(e,t,s){const{displayLevel:r,renderPass:i}=t;if(void 0===e)return;const o=e.getLayoutProperty("visibility");if(o&&1===o.getValue())return;switch(e.type){case 0:return;case 1:case 2:case 4:case 3:if("translucent"!==i)return}if(s=3===e.type?s.filter(e=>e.decluttered):s.filter(e=>e.neededForCoverage),3!==e.type&&(0===s.length||void 0!==e.minzoom&&e.minzoom>=r+u||void 0!==e.maxzoom&&e.maxzoom<r-u))return;const l=e.uid;t.styleLayerUID=l,t.styleLayer=e;const n=this._techniques.getTechnique(e.type);null!=n&&n.render(t,{tiles:s})}_renderBackgroundLayers(e,t,s){const{displayLevel:r,state:i}=e,o=this._styleRepository;let l=!1;for(const h of t){const e=o.getLayerById(h);if(e&&0===e.type&&y(o.getLayerById(h),s)){l=!0;break}}if(!l)return;const n=this.tilingScheme.getTileCoverage(e.state,0,!0,"smallest"),{spans:a,lodInfo:d}=n,{level:m}=d,p=[];let g=0;for(const{row:h,colFrom:u,colTo:y}of a)for(let e=u;e<=y;e++){const t=new c(m,h,d.normalizeCol(e),d.getWorldForColumn(e)),s=this._getOrCreateBackgroundTile(g,t);s.setTransform(i),p.push(s),g++}const f=this._techniques.getTechnique(0);for(const h of t){const t=o.getLayerById(h);0!==t.type||!y(t,s)||void 0!==t.minzoom&&t.minzoom>=r+u||void 0!==t.maxzoom&&t.maxzoom<r-u||(e.styleLayerUID=t.uid,e.styleLayer=t,f.render(e,{tiles:p}))}h.pool.release(n)}_getOrCreateBackgroundTile(t,i){const o=this._backgroundTiles[t];if(o?.key.equals(i))return o;const n=this.tilingScheme.getTileBounds(e(),i),a=this.tilingScheme.getTileResolution(i.level),d=new l(i,a,n[0],n[3],r,r,s,s);return o?(o.destroy(),this._backgroundTiles[t]=d):this._backgroundTiles.push(d),d}_computeDisplayInfoView(e){let s=e.tileInfo.lods[0].scale;const i=Math.max(25,e.tileInfo.lods.length),o=[];for(let t=0;t<=i;t++)o.push(s),s/=2;this._displayInfo=t.create({scales:o,size:r,spatialReference:e.spatialReference,numLODs:i})}}export{m as VectorTileContainer};
2
+ import{create as e}from"../../../../geometry/support/aaBoundingRect.js";import t from"../../../../layers/support/TileInfo.js";import{tileSizeInTileUnits as s,tileSizeInPixels as r}from"./constants.js";import{SymbolFader as i}from"./decluttering/SymbolFader.js";import{writeOpacityToBuffers as o}from"./decluttering/util.js";import{RenderableTile as l}from"../webgl/RenderableTile.js";import n from"../webgl/TileContainer.js";import{simplePipelineState as a}from"../webgl/shaderGraph/utils.js";import{VTLTechniquesRepo as d}from"../webgl/shaderGraph/techniques/vectorTiles/VTLTechniques.js";import h from"../../tiling/TileCoverage.js";import c from"../../tiling/TileKey.js";const u=1e-6;function y(e,t){if(e){const s=e.getLayoutProperty("visibility");if(!s||1!==s.getValue()&&(void 0===e.minzoom||e.minzoom<t+u)&&(void 0===e.maxzoom||e.maxzoom>=t-u))return!0}return!1}class m extends n{constructor(e){super(e),this._backgroundTiles=[],this._techniques=new d,this._computeDisplayInfoView(e),this._techniques.startup()}destroy(){super.destroy(),this.removeAllChildren(),this._spriteMosaic?.dispose(),this._spriteMosaic=null,null!=this._symbolFader&&(this._symbolFader.clear(),this._symbolFader=null);const e=this.stage?.context;e&&this._techniques.shutdown(e),this._styleRepository=null,this._backgroundTiles=[]}get fading(){return this._symbolFader?.fading??!1}get symbolFader(){return this._symbolFader}get symbolRepository(){return this._symbolFader?.symbolRepository}setStyleResources(e,t,r,l){if(this._spriteMosaic=e,this._glyphMosaic=t,this._styleRepository=r,this.tilingScheme=l,this._computeDisplayInfoView(l),null==this._symbolFader){const e=(e,t)=>{e.allSymbolsFadingOut=!0,e.lastOpacityUpdate=t,o(e,t,!0),e.decluttered=!0,e.requestRender()};this._symbolFader=new i("vector-tile",this._styleRepository,e,this.children,s)}this._symbolFader.styleRepository=r}setSpriteMosaic(e){this._spriteMosaic?.dispose(),this._spriteMosaic=e}deleteStyleLayers(e){null!=this._symbolFader&&this._symbolFader.deleteStyleLayers(e)}createRenderParams(e){return{...super.createRenderParams(e),renderPass:null,styleLayer:null,styleLayerUID:-1,glyphMosaic:this._glyphMosaic,spriteMosaic:this._spriteMosaic}}doRender(e){const{drawPhase:t}=e,s=1===t||32===t;this.visible&&s&&void 0!==this._spriteMosaic&&super.doRender(e)}addChild(e){return super.addChild(e),null!=this._symbolFader?this._symbolFader.addTile(e):e.decluttered=!0,this.requestRender(),e}removeChild(e){return null!=this._symbolFader&&this._symbolFader.removeTile(e),this.requestRender(),super.removeChild(e)}renderChildren(e){const{drawPhase:t}=e;32!==t?this._doRender(e):super.renderChildren(e)}removeAllChildren(){for(let e=0;e<this.children.length;e++){const t=this.children[e];null!=this._symbolFader&&this._symbolFader.removeTile(t),t.dispose()}super.removeAllChildren()}getStencilTarget(){return this.children.filter(e=>e.neededForCoverage&&e.hasData())}restartDeclutter(){null!=this._symbolFader&&this._symbolFader.restartDeclutter()}_doRender(e){const{context:t,painter:s,state:r}=e,i=this._styleRepository;if(!i)return;const o=i.layers,l=this._displayInfo.scaleToZoom(r.scale);this.children.forEach(e=>e.disposeLayerData()),super.renderChildren(e),i.backgroundBucketIds.length>0&&(e.renderPass="background",this._renderBackgroundLayers(e,i.backgroundBucketIds,l)),1===e.drawPhase&&this._fade(l,r);const n=this.children.filter(t=>(1===e.drawPhase&&t.fader.fade()<1&&this.requestRender(),t.visible&&t.hasData()));if(n&&0!==n.length){for(const e of n)e.triangleCount=0;t.setClearDepth(1),t.clear(256),s.setPipelineState({color:{write:[!0,!0,!0,!0],blendMode:"composite"},stencil:{write:!1,test:{compare:514,op:{fail:7680,zFail:7680,zPass:7681},mask:255}},depth:{write:!1,test:515}}),e.renderPass="translucent";for(let t=0;t<o.length;t++)this._renderStyleLayer(o[t],e,n);t.bindVAO(null),s.setPipelineState(a);for(const e of n)e.debugInfo.display.triangleCount=e.triangleCount}else t.bindVAO(null)}_fade(e,t){null!=this._symbolFader&&(this._symbolFader.update(e,t)||this.requestRender())}_renderStyleLayer(e,t,s){const{displayLevel:r,renderPass:i}=t;if(void 0===e)return;const o=e.getLayoutProperty("visibility");if(o&&1===o.getValue())return;switch(e.type){case 0:return;case 1:case 2:case 4:case 3:if("translucent"!==i)return}if(s=3===e.type?s.filter(e=>e.decluttered):s.filter(e=>e.neededForCoverage),3!==e.type&&(0===s.length||void 0!==e.minzoom&&e.minzoom>=r+u||void 0!==e.maxzoom&&e.maxzoom<r-u))return;const l=e.uid;t.styleLayerUID=l,t.styleLayer=e;const n=this._techniques.getTechnique(e.type);null!=n&&n.render(t,{tiles:s})}_renderBackgroundLayers(e,t,s){const{displayLevel:r,state:i}=e,o=this._styleRepository;let l=!1;for(const h of t){const e=o.getLayerById(h);if(e&&0===e.type&&y(o.getLayerById(h),s)){l=!0;break}}if(!l)return;const n=this.tilingScheme.getTileCoverage(e.state,0,!0,"smallest"),{spans:a,lodInfo:d}=n,{level:m}=d,p=[];let g=0;for(const{row:h,colFrom:u,colTo:y}of a)for(let e=u;e<=y;e++){const t=new c(m,h,d.normalizeCol(e),d.getWorldForColumn(e)),s=this._getOrCreateBackgroundTile(g,t);s.setTransform(i),p.push(s),g++}const f=this._techniques.getTechnique(0);for(const h of t){const t=o.getLayerById(h);0!==t.type||!y(t,s)||void 0!==t.minzoom&&t.minzoom>=r+u||void 0!==t.maxzoom&&t.maxzoom<r-u||(e.styleLayerUID=t.uid,e.styleLayer=t,f.render(e,{tiles:p}))}h.pool.release(n)}_getOrCreateBackgroundTile(t,i){const o=this._backgroundTiles[t];if(o?.key.equals(i))return o;const n=this.tilingScheme.getTileBounds(e(),i),a=this.tilingScheme.getTileResolution(i.level),d=new l(i,a,n[0],n[3],r,r,s,s);return o?(o.destroy(),this._backgroundTiles[t]=d):this._backgroundTiles.push(d),d}_computeDisplayInfoView(e){let s=e.tileInfo.lods[0].scale;const i=Math.max(25,e.tileInfo.lods.length),o=[];for(let t=0;t<=i;t++)o.push(s),s/=2;this._displayInfo=t.create({scales:o,size:r,spatialReference:e.spatialReference,numLODs:i})}}export{m as VectorTileContainer};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import"../../../../core/has.js";import{destroyMaybe as e}from"../../../../core/maybe.js";import{RenderingDevice as t}from"./RenderingDevice.js";import{TextureManager as s}from"./TextureManager.js";import{TextureUploadManager as i}from"./TextureUploadManager.js";import{BlendEffect as r}from"./effects/BlendEffect.js";import{FeatureEffect as n}from"./effects/FeatureEffect.js";import o from"./effects/HighlightEffect.js";import{HittestEffect as h}from"./effects/HittestEffect.js";import{EffectManager as f}from"./effects/post-processing/EffectManager.js";import{SimpleMesh as a}from"./meshing/SimpleMesh.js";import{BitBlitTechnique as l}from"./shaderGraph/techniques/utility/BitBlitTechnique.js";import{WorldExtentClipTechnique as c}from"./shaderGraph/techniques/utility/WorldExtentClipTechnique.js";import{SizedDepthStencilFormat as d}from"../../../webgl/enums.js";import{DisposableFramebufferObject as u}from"../../../webgl/FramebufferObject.js";import{Renderbuffer as p}from"../../../webgl/Renderbuffer.js";import{RenderbufferDescriptor as b}from"../../../webgl/RenderbufferDescriptor.js";import{TextureDescriptor as g}from"../../../webgl/TextureDescriptor.js";class _{constructor(e,d){this.context=e,this._blitTechnique=new l,this._worldExtentClipTechnique=new c,this._lastWidth=null,this._lastHeight=null,this._blendEffect=new r,this._stencilBuf=null,this._prevBeforeLayerFBOStack=[],this._fboPool=[],this.effects={highlight:new o,hittest:new h,insideEffect:new n("inside"),outsideEffect:new n("outside")},this.textureManager=new s(d),this.textureUploadManager=new i(d),this._effectsManager=new f,this._quadMesh=a.fromVertexStream(e,[0,0,1,0,0,1,1,1]),this._renderingDevice=new t}dispose(){if(this.textureManager.dispose(),this.textureUploadManager.destroy(),this._blitTechnique.shutdown(),this._worldExtentClipTechnique.shutdown(),this._quadMesh=e(this._quadMesh),this._fbos){let e;for(e in this._fbos)this._fbos[e]&&this._fbos[e].dispose()}for(const e of this._fboPool)e.dispose();if(this._fboPool.length=0,this.effects){let e;for(e in this.effects)this.effects[e]&&this.effects[e].dispose()}this._effectsManager.dispose(),this._blendEffect.dispose(this.context),this._renderingDevice.dispose()}get quadMesh(){return this._quadMesh}getFbos(){if(!this._fbos)throw new Error("InternalError: Painter FBOs not initialized");return this._fbos}acquireFbo(e,t){let s;if(this._fboPool.length>0)s=this._fboPool.pop();else{const i=new g(e,t);i.samplingMode=9728,i.wrapMode=33071,s=new u(this.context,i,this._stencilBuf)}return s.width===e&&s.height===t||s.resize(e,t),s}releaseFbo(e){this._fboPool.push(e)}getSharedStencilBuffer(){return this._stencilBuf}beforeRenderPhases(e,t,s){const{context:i}=e;this._worldExtentClipTechnique.render(e,{backgroundColor:t,padding:s});const{width:r,height:n}=i.getViewport();if(this.updateFBOs(r,n),this._prevFBO=i.boundFramebuffer,i.bindFramebuffer(this.getFbos().output),i.setColorMask(!0,!0,!0,!0),null!=t){const{r:e,g:s,b:r,a:n}=t;i.setClearColor(n*e/255,n*s/255,n*r/255,n)}else i.setClearColor(0,0,0,0);i.setDepthWriteEnabled(!0),i.setClearDepth(1),i.clear(16640),i.setDepthWriteEnabled(!1)}afterRenderPhases(e){const{context:t}=e;t.bindFramebuffer(this._prevFBO),this._blitTechnique.render(e,{texture:this.getFbos().output.colorTexture,samplingMode:9728,opacity:1,clipToVisibleRegion:!0}),this._renderingDevice.setPipelineStateNeedsUpdate(!0)}beforeRenderLayer(e,t,s){const{context:i,blendMode:r,effects:n,drawPhase:o,requireFBO:h}=e;if(i.setClearColor(0,0,0,0),h||m(o,r,n,s)){const e=i.boundFramebuffer;this._prevBeforeLayerFBOStack.push(e);const{width:t,height:s}=i.getViewport(),r=this.acquireFbo(t,s);i.bindFramebuffer(r),i.setColorMask(!0,!0,!0,!0),i.setClearColor(0,0,0,0),i.setDepthWriteEnabled(!0),i.setClearDepth(1),i.clear(16640),i.setDepthWriteEnabled(!1)}i.setDepthWriteEnabled(!1),i.setDepthTestEnabled(!1),i.setStencilTestEnabled(!0),i.setClearStencil(t),i.setStencilWriteMask(255),i.clear(1024)}afterRenderLayer(e,t){const{context:s,blendMode:i,effects:r,requireFBO:n,drawPhase:o}=e;if(n||m(o,i,r,t)){const n=s.boundFramebuffer;if(null==n)return;null!=r&&r.length>0&&1===o&&(s.setColorMask(!0,!0,!0,!0),this._applyEffects(e,r,n)),s.bindFramebuffer(this._prevBeforeLayerFBOStack.pop()),s.setStencilTestEnabled(!1),s.setStencilWriteMask(0),s.setBlendingEnabled(!0),s.setBlendFunctionSeparate(1,771,1,771),s.setColorMask(!0,!0,!0,!0);const h=null==i||16===o||2===o||128===o?"normal":i;this._blendEffect.draw(e,n.colorTexture,9728,h,t),this.releaseFbo(n)}}blitTexture(e,t,s,i=1){this._blitTechnique.render(e,{texture:t,samplingMode:s,opacity:i}),this._renderingDevice.setPipelineStateNeedsUpdate(!0)}getPostProcessingEffects(e){return this._effectsManager.getPostProcessingEffects(e)}updateFBOs(e,t){if(e!==this._lastWidth||t!==this._lastHeight){if(this._lastWidth=e,this._lastHeight=t,this._fbos){let s;for(s in this._fbos)this._fbos[s].resize(e,t);return}const s=new g(e,t);s.samplingMode=9728,s.wrapMode=33071;const i=new b(d.DEPTH24_STENCIL8,e,t);this._stencilBuf=new p(this.context,i),this._fbos={output:new u(this.context,s,this._stencilBuf),effect0:new u(this.context,s,this._stencilBuf)}}}_applyEffects(e,t,s){const{context:i}=e,r=this._effectsManager.getPostProcessingEffects(t);for(const{postProcessingTechnique:n,effect:o}of r)i.bindFramebuffer(s),n.render(e,{layerFBO:s,effect:o});this._renderingDevice.setPipelineStateNeedsUpdate(!0)}setShader(e){return this._renderingDevice.setShader(e)}clearShaderCache(){this._renderingDevice.clearShaderCache()}getProgramCache(){return this._renderingDevice.getProgramCache()}setPipelineState(e){return this._renderingDevice.setPipelineState(e)}getPipelineState(){return this._renderingDevice.getPipelineState()}submitDraw(e,t,s){return this._renderingDevice.submitDraw(e,t,s)}submitDrawMesh(e,t,s,i){this._renderingDevice.submitDrawMesh(e,t,s,i)}submitDrawMeshUntyped(e,t,s,i){this._renderingDevice.submitDrawMeshUntyped(e,t,s,i)}updatePipelineState(e){return this._renderingDevice.updatePipelineState(e)}setStencilRef(e,t){return this._renderingDevice.setStencilRef(e,t)}}function m(e,t,s,i){return 4!==e&&2!==e&&16!==e&&128!==e&&(1!==i||null!=t&&"normal"!==t||null!=s&&s.length>0)}export{_ as default};
2
+ import"../../../../core/has.js";import{destroyMaybe as e}from"../../../../core/maybe.js";import{RenderingDevice as t}from"./RenderingDevice.js";import{TextureManager as s}from"./TextureManager.js";import{TextureUploadManager as i}from"./TextureUploadManager.js";import{BlendEffect as r}from"./effects/BlendEffect.js";import{FeatureEffect as n}from"./effects/FeatureEffect.js";import o from"./effects/HighlightEffect.js";import{HittestEffect as h}from"./effects/HittestEffect.js";import{EffectManager as f}from"./effects/post-processing/EffectManager.js";import{SimpleMesh as a}from"./meshing/SimpleMesh.js";import{BitBlitTechnique as l}from"./shaderGraph/techniques/utility/BitBlitTechnique.js";import{WorldExtentClipTechnique as c}from"./shaderGraph/techniques/utility/WorldExtentClipTechnique.js";import{SizedDepthStencilFormat as d}from"../../../webgl/enums.js";import{DisposableFramebufferObject as u}from"../../../webgl/FramebufferObject.js";import{Renderbuffer as p}from"../../../webgl/Renderbuffer.js";import{RenderbufferDescriptor as b}from"../../../webgl/RenderbufferDescriptor.js";import{TextureDescriptor as g}from"../../../webgl/TextureDescriptor.js";class _{constructor(e,d){this.context=e,this._blitTechnique=new l,this._worldExtentClipTechnique=new c,this._lastWidth=null,this._lastHeight=null,this._blendEffect=new r,this._stencilBuf=null,this._prevBeforeLayerFBOStack=[],this._fboPool=[],this.effects={highlight:new o,hittest:new h,insideEffect:new n("inside"),outsideEffect:new n("outside")},this.textureManager=new s(d),this.textureUploadManager=new i(d),this._effectsManager=new f,this._quadMesh=a.fromVertexStream(e,[0,0,1,0,0,1,1,1]),this._renderingDevice=new t}dispose(){if(this.textureManager.dispose(),this.textureUploadManager.destroy(),this._blitTechnique.shutdown(),this._worldExtentClipTechnique.shutdown(),this._quadMesh=e(this._quadMesh),this._fbos){let e;for(e in this._fbos)this._fbos[e]&&this._fbos[e].dispose()}for(const e of this._fboPool)e.dispose();if(this._fboPool.length=0,this.effects){let e;for(e in this.effects)this.effects[e]&&this.effects[e].dispose()}this._effectsManager.dispose(),this._blendEffect.dispose(this.context),this._renderingDevice.dispose()}get quadMesh(){return this._quadMesh}getFbos(){if(!this._fbos)throw new Error("InternalError: Painter FBOs not initialized");return this._fbos}acquireFbo(e,t){let s;if(this._fboPool.length>0)s=this._fboPool.pop();else{const i=new g(e,t);i.samplingMode=9728,i.wrapMode=33071,s=new u(this.context,i,this._stencilBuf)}return s.width===e&&s.height===t||s.resize(e,t),s}releaseFbo(e){this._fboPool.push(e)}getSharedStencilBuffer(){return this._stencilBuf}beforeRenderPhases(e,t,s){const{context:i}=e;this._worldExtentClipTechnique.render(e,{backgroundColor:t,padding:s});const{width:r,height:n}=i.getViewport();if(this.updateFBOs(r,n),this._prevFBO=i.boundFramebuffer,i.bindFramebuffer(this.getFbos().output),i.setColorMask(!0,!0,!0,!0),null!=t){const{r:e,g:s,b:r,a:n}=t;i.setClearColor(n*e/255,n*s/255,n*r/255,n)}else i.setClearColor(0,0,0,0);i.setDepthWriteEnabled(!0),i.setClearDepth(1),i.clear(16640),i.setDepthWriteEnabled(!1)}afterRenderPhases(e){const{context:t}=e;t.bindFramebuffer(this._prevFBO),this._blitTechnique.render(e,{texture:this.getFbos().output.colorTexture,samplingMode:9728,opacity:1,clipToVisibleRegion:!0}),this._renderingDevice.setPipelineStateNeedsUpdate(!0)}beforeRenderLayer(e,t,s){const{context:i,blendMode:r,effects:n,drawPhase:o,requireFBO:h}=e;if(i.setClearColor(0,0,0,0),h||m(o,r,n,s)){const e=i.boundFramebuffer;this._prevBeforeLayerFBOStack.push(e);const{width:t,height:s}=i.getViewport(),r=this.acquireFbo(t,s);i.bindFramebuffer(r),i.setColorMask(!0,!0,!0,!0),i.setClearColor(0,0,0,0),i.setDepthWriteEnabled(!0),i.setClearDepth(1),i.clear(16640),i.setDepthWriteEnabled(!1)}i.setDepthWriteEnabled(!1),i.setDepthTestEnabled(!1),i.setStencilTestEnabled(!0),i.setClearStencil(t),i.setStencilWriteMask(255),i.clear(1024)}afterRenderLayer(e,t){const{context:s,blendMode:i,effects:r,requireFBO:n,drawPhase:o}=e;if(n||m(o,i,r,t)){const n=s.boundFramebuffer;if(null==n)return;null!=r&&r.length>0&&1===o&&(s.setColorMask(!0,!0,!0,!0),this._applyEffects(e,r,n)),s.bindFramebuffer(this._prevBeforeLayerFBOStack.pop()),s.setStencilTestEnabled(!1),s.setStencilWriteMask(0),s.setBlendingEnabled(!0),s.setBlendFunctionSeparate(1,771,1,771),s.setColorMask(!0,!0,!0,!0);const h=null==i||8===o||2===o||64===o?"normal":i;this._blendEffect.draw(e,n.colorTexture,9728,h,t),this.releaseFbo(n)}}blitTexture(e,t,s,i=1){this._blitTechnique.render(e,{texture:t,samplingMode:s,opacity:i}),this._renderingDevice.setPipelineStateNeedsUpdate(!0)}getPostProcessingEffects(e){return this._effectsManager.getPostProcessingEffects(e)}updateFBOs(e,t){if(e!==this._lastWidth||t!==this._lastHeight){if(this._lastWidth=e,this._lastHeight=t,this._fbos){let s;for(s in this._fbos)this._fbos[s].resize(e,t);return}const s=new g(e,t);s.samplingMode=9728,s.wrapMode=33071;const i=new b(d.DEPTH24_STENCIL8,e,t);this._stencilBuf=new p(this.context,i),this._fbos={output:new u(this.context,s,this._stencilBuf),effect0:new u(this.context,s,this._stencilBuf)}}}_applyEffects(e,t,s){const{context:i}=e,r=this._effectsManager.getPostProcessingEffects(t);for(const{postProcessingTechnique:n,effect:o}of r)i.bindFramebuffer(s),n.render(e,{layerFBO:s,effect:o});this._renderingDevice.setPipelineStateNeedsUpdate(!0)}setShader(e){return this._renderingDevice.setShader(e)}clearShaderCache(){this._renderingDevice.clearShaderCache()}getProgramCache(){return this._renderingDevice.getProgramCache()}setPipelineState(e){return this._renderingDevice.setPipelineState(e)}getPipelineState(){return this._renderingDevice.getPipelineState()}submitDraw(e,t,s){return this._renderingDevice.submitDraw(e,t,s)}submitDrawMesh(e,t,s,i){this._renderingDevice.submitDrawMesh(e,t,s,i)}submitDrawMeshUntyped(e,t,s,i){this._renderingDevice.submitDrawMeshUntyped(e,t,s,i)}updatePipelineState(e){return this._renderingDevice.updatePipelineState(e)}setStencilRef(e,t){return this._renderingDevice.setStencilRef(e,t)}}function m(e,t,s,i){return 2!==e&&8!==e&&64!==e&&(1!==i||null!=t&&"normal"!==t||null!=s&&s.length>0)}export{_ as default};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import t from"../../../../core/Error.js";import has from"../../../../core/has.js";import{spritePadding as e}from"./definitions.js";import{log2 as i}from"./GeometryUtils.js";import s from"./Rect.js";import a from"./RectangleBinPack.js";import r from"../../../webgl/Texture.js";import{TextureDescriptor as o}from"../../../webgl/TextureDescriptor.js";function h(t){return t&&"static"===t.type}class c{constructor(t,e,i=0){this._mosaicPages=[],this._maxItemSize=0,this._currentPage=0,this._pageWidth=0,this._pageHeight=0,this._mosaicRects=new Map,this._spriteCopyQueue=[],this.pixelRatio=1,this._pageWidth=t,this._pageHeight=e,i>0&&(this._maxItemSize=i),this.pixelRatio=window.devicePixelRatio||1,this._binPack=new a(this._pageWidth,this._pageHeight);const s=Math.floor(this._pageWidth),r=Math.floor(this._pageHeight);this._mosaicPages.push({mosaicsData:{type:"static",data:new Uint32Array(s*r)},size:[this._pageWidth,this._pageHeight],dirty:!0,texture:void 0})}getSize(t){return t>=this._mosaicPages.length?[0,0]:this._mosaicPages[t].size}getPageTexture(t){return t<this._mosaicPages.length?this._mosaicPages[t].texture:null}has(t){return this._mosaicRects.has(t)}get itemCount(){return this._mosaicRects.size}getSpriteItem(t){return this._mosaicRects.get(t)}addSpriteItem(t,i,a,r,o,c,n=1,g="Linear",p=.5,m=1){if(this._mosaicRects.has(t))return this._mosaicRects.get(t);let d,u,l;if(h(a))[d,u,l]=this._allocateImage(i[0],i[1]);else{d=new s(0,0,i[0],i[1]),u=this._mosaicPages.length;const t=void 0;this._mosaicPages.push({mosaicsData:a,size:[i[0]+2*e,i[1]+2*e],dirty:!0,texture:t})}if(d.width<=0||d.height<=0)return null;const _={type:"sprite",rect:d,width:i[0],height:i[1],sdf:o,simplePattern:c,rasterizationScale:n,samplingMode:g,sdfPaddingRatio:p,sdfDecodeCoeff:m,page:u};return this._mosaicRects.set(t,_),h(a)&&(has("esri-mosaic-debug")&&this._showDebugSprite(i,a.data),this._copy({rect:d,spriteSize:i,spriteData:a.data,page:u,pageSize:l,repeat:r,sdf:o})),_}hasItemsToProcess(){return 0!==this._spriteCopyQueue.length}processNextItem(){const t=this._spriteCopyQueue.pop();t&&this._copy(t)}getMosaicItemPosition(t){const i=this.getSpriteItem(t),s=i?.rect;if(!s)return null;s.width=i.width,s.height=i.height;const a=i.width,r=i.height,o=e,h=this._mosaicPages[i.page].size;return{size:[i.width,i.height],tl:[(s.x+o)/h[0],(s.y+o)/h[1]],br:[(s.x+o+a)/h[0],(s.y+o+r)/h[1]],page:i.page}}bind(t,e,i=0,s=0){const a=this._mosaicPages[i],r=a.mosaicsData;let o=a.texture;if(o||(o=g(t,a.size),a.texture=o),o.setSamplingMode(e),t.bindTexture(o,s),h(r))a.dirty&&(o.setData(new Uint8Array(r.data.buffer)),o.generateMipmap(),has("esri-mosaic-debug")&&this._showDebugPage(i));else{const t=r.data;t.hasFrameData&&(t.loadFrame(o),o.generateMipmap())}a.dirty=!1}getTexture(t,e=0){const{context:i}=t,s=this._mosaicPages[e],a=s.mosaicsData;let r=s.texture;if(r||(r=g(i,s.size),s.texture=r),h(a))s.dirty&&(r.setData(new Uint8Array(a.data.buffer)),r.generateMipmap(),has("esri-mosaic-debug")&&this._showDebugPage(e));else{const e=a.data;e.update(t),e.hasFrameData&&(e.loadFrame(r),r.generateMipmap())}return s.dirty=!1,r}dispose(){this._binPack=null;for(const t of this._mosaicPages){const e=t.texture;e&&e.dispose();const i=t.mosaicsData;if(!h(i)){i.data.destroy()}}this._mosaicPages=null,this._mosaicRects.clear()}static _copyBits(t,e,i,s,a,r,o,h,c,n,g){let p=s*e+i,m=h*r+o;if(g){m-=r;for(let o=-1;o<=n;o++,p=((o+n)%n+s)*e+i,m+=r)for(let e=-1;e<=c;e++)a[m+e]=t[p+(e+c)%c]}else for(let d=0;d<n;d++){for(let e=0;e<c;e++)a[m+e]=t[p+e];p+=e,m+=r}}_copy(i){if(i.page>=this._mosaicPages.length)return;const s=this._mosaicPages[i.page],a=s.mosaicsData;if(!h(s.mosaicsData))throw new t("mapview-invalid-resource","unsuitable data type!");const r=i.spriteData,o=a.data;c._copyBits(r,i.spriteSize[0],0,0,o,i.pageSize[0],i.rect.x+e,i.rect.y+e,i.spriteSize[0],i.spriteSize[1],i.repeat),s.dirty=!0}_allocateImage(t,r){t+=2*e,r+=2*e;const o=Math.max(t,r);if(this._maxItemSize&&this._maxItemSize<o){const e=2**Math.ceil(i(t)),a=2**Math.ceil(i(r)),o=new s(0,0,t,r);return this._mosaicPages.push({mosaicsData:{type:"static",data:new Uint32Array(e*a)},size:[e,a],dirty:!0,texture:void 0}),[o,this._mosaicPages.length-1,[e,a]]}const c=this._binPack.allocate(t,r);if(c.width<=0){const e=this._mosaicPages[this._currentPage];return!e.dirty&&h(e.mosaicsData)&&(e.mosaicsData.data=null),this._currentPage=this._mosaicPages.length,this._mosaicPages.push({mosaicsData:{type:"static",data:new Uint32Array(this._pageWidth*this._pageHeight)},size:[this._pageWidth,this._pageHeight],dirty:!0,texture:void 0}),this._binPack=new a(this._pageWidth,this._pageHeight),this._allocateImage(t,r)}return[c,this._currentPage,[this._pageWidth,this._pageHeight]]}_showDebugSprite([t,e],i){const s=document.createElement("canvas");s.width=t,s.height=e,s.setAttribute("style",`position: absolute; top: ${4+204*n++}px; right: 208px; width: 200px; height: 200px; border: 1px solid black;`);const a=s.getContext("2d"),r=new ImageData(t,e);r.data.set(new Uint8Array(i.buffer)),a.putImageData(r,0,0),document.body.appendChild(s)}_showDebugPage(t){const e=this._mosaicPages[t],{size:[i,s],mosaicsData:a}=e;if(!h(a))return;const r=`mosaicDebugPage${t}`,o=document.getElementById(r)??document.createElement("canvas");o.id=r,o.width=i,o.height=s,o.setAttribute("style",`position: absolute; top: ${4+204*t}px; right: 4px; width: 200px; height: 200px; border: 1px solid black;`);const c=o.getContext("2d"),n=new ImageData(i,s);n.data.set(new Uint8Array(a.data.buffer)),c.putImageData(n,0,0),document.body.appendChild(o)}}let n=0;function g(t,e){const i=new o(e[0],e[1]);return i.wrapMode=33071,new r(t,i,null)}export{c as default};
2
+ import t from"../../../../core/Error.js";import has from"../../../../core/has.js";import{spritePadding as e}from"./definitions.js";import{log2 as i}from"./GeometryUtils.js";import a from"./Rect.js";import s from"./RectangleBinPack.js";import r from"../../../webgl/Texture.js";import{TextureDescriptor as o}from"../../../webgl/TextureDescriptor.js";function h(t){return t&&"static"===t.type}class c{constructor(t,e,i=0){this._mosaicPages=[],this._maxItemSize=0,this._currentPage=0,this._pageWidth=0,this._pageHeight=0,this._mosaicRects=new Map,this._pageWidth=t,this._pageHeight=e,i>0&&(this._maxItemSize=i),this._binPack=new s(this._pageWidth,this._pageHeight);const a=Math.floor(this._pageWidth),r=Math.floor(this._pageHeight);this._mosaicPages.push({mosaicsData:{type:"static",data:new Uint32Array(a*r)},size:[this._pageWidth,this._pageHeight],dirty:!0,texture:void 0})}getSize(t){return t>=this._mosaicPages.length?[0,0]:this._mosaicPages[t].size}has(t){return this._mosaicRects.has(t)}getSpriteItem(t){return this._mosaicRects.get(t)}addSpriteItem(t,i,s,r,o,c,n=1,g="Linear",p=.5,m=1){if(this._mosaicRects.has(t))return this._mosaicRects.get(t);let d,u,_;if(h(s))[d,u,_]=this._allocateImage(i[0],i[1]);else{d=new a(0,0,i[0],i[1]),u=this._mosaicPages.length;const t=void 0;this._mosaicPages.push({mosaicsData:s,size:[i[0]+2*e,i[1]+2*e],dirty:!0,texture:t})}if(d.width<=0||d.height<=0)return null;const l={type:"sprite",rect:d,width:i[0],height:i[1],sdf:o,simplePattern:c,rasterizationScale:n,samplingMode:g,sdfPaddingRatio:p,sdfDecodeCoeff:m,page:u};return this._mosaicRects.set(t,l),h(s)&&(has("esri-mosaic-debug")&&this._showDebugSprite(i,s.data),this._copy({rect:d,spriteSize:i,spriteData:s.data,page:u,pageSize:_,repeat:r,sdf:o})),l}getTexture(t,e=0){const{context:i}=t,a=this._mosaicPages[e],s=a.mosaicsData;let r=a.texture;if(r||(r=g(i,a.size),a.texture=r),h(s))a.dirty&&(r.setData(new Uint8Array(s.data.buffer)),r.generateMipmap(),has("esri-mosaic-debug")&&this._showDebugPage(e));else{const e=s.data;e.update(t),e.hasFrameData&&(e.loadFrame(r),r.generateMipmap())}return a.dirty=!1,r}dispose(){this._binPack=null;for(const t of this._mosaicPages){const e=t.texture;e&&e.dispose();const i=t.mosaicsData;if(!h(i)){i.data.destroy()}}this._mosaicPages=null,this._mosaicRects.clear()}static _copyBits(t,e,i,a,s,r,o,h,c,n,g){let p=a*e+i,m=h*r+o;if(g){m-=r;for(let o=-1;o<=n;o++,p=((o+n)%n+a)*e+i,m+=r)for(let e=-1;e<=c;e++)s[m+e]=t[p+(e+c)%c]}else for(let d=0;d<n;d++){for(let e=0;e<c;e++)s[m+e]=t[p+e];p+=e,m+=r}}_copy(i){if(i.page>=this._mosaicPages.length)return;const a=this._mosaicPages[i.page],s=a.mosaicsData;if(!h(a.mosaicsData))throw new t("mapview-invalid-resource","unsuitable data type!");const r=i.spriteData,o=s.data;c._copyBits(r,i.spriteSize[0],0,0,o,i.pageSize[0],i.rect.x+e,i.rect.y+e,i.spriteSize[0],i.spriteSize[1],i.repeat),a.dirty=!0}_allocateImage(t,r){t+=2*e,r+=2*e;const o=Math.max(t,r);if(this._maxItemSize&&this._maxItemSize<o){const e=2**Math.ceil(i(t)),s=2**Math.ceil(i(r)),o=new a(0,0,t,r);return this._mosaicPages.push({mosaicsData:{type:"static",data:new Uint32Array(e*s)},size:[e,s],dirty:!0,texture:void 0}),[o,this._mosaicPages.length-1,[e,s]]}const c=this._binPack.allocate(t,r);if(c.width<=0){const e=this._mosaicPages[this._currentPage];return!e.dirty&&h(e.mosaicsData)&&(e.mosaicsData.data=null),this._currentPage=this._mosaicPages.length,this._mosaicPages.push({mosaicsData:{type:"static",data:new Uint32Array(this._pageWidth*this._pageHeight)},size:[this._pageWidth,this._pageHeight],dirty:!0,texture:void 0}),this._binPack=new s(this._pageWidth,this._pageHeight),this._allocateImage(t,r)}return[c,this._currentPage,[this._pageWidth,this._pageHeight]]}_showDebugSprite([t,e],i){const a=document.createElement("canvas");a.width=t,a.height=e,a.setAttribute("style",`position: absolute; top: ${4+204*n++}px; right: 208px; width: 200px; height: 200px; border: 1px solid black;`);const s=a.getContext("2d"),r=new ImageData(t,e);r.data.set(new Uint8Array(i.buffer)),s.putImageData(r,0,0),document.body.appendChild(a)}_showDebugPage(t){const e=this._mosaicPages[t],{size:[i,a],mosaicsData:s}=e;if(!h(s))return;const r=`mosaicDebugPage${t}`,o=document.getElementById(r)??document.createElement("canvas");o.id=r,o.width=i,o.height=a,o.setAttribute("style",`position: absolute; top: ${4+204*t}px; right: 4px; width: 200px; height: 200px; border: 1px solid black;`);const c=o.getContext("2d"),n=new ImageData(i,a);n.data.set(new Uint8Array(s.data.buffer)),c.putImageData(n,0,0),document.body.appendChild(o)}}let n=0;function g(t,e){const i=new o(e[0],e[1]);return i.wrapMode=33071,new r(t,i,null)}export{c as default};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- class s{constructor(){this.drawPhase=217}startup(){}shutdown(s){}}export{s as Technique};
2
+ class s{constructor(){this.drawPhase=109}startup(){}shutdown(s){}}export{s as Technique};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import{FeatureTechnique as e}from"../FeatureTechnique.js";import{isHittest as t,getSelectionDefines as r,getFeatureTextures as s,getFeatureUniforms as i}from"../featureTechniqueUtils.js";import{HeatmapResources as n}from"./HeatmapResources.js";import{HeatmapAccumulateShader as o}from"../shaders/HeatmapAccumulateShader.js";import{HeatmapResolveShader as u}from"../shaders/HeatmapResolveShader.js";class a extends e{constructor(){super(...arguments),this.type=19,this.drawPhase=73,this.shaders={accumulate:new o,resolve:new u},this._isBound=!1,this._resources=new Map}shutdown(e){super.shutdown(e),this._resources.get(e)?.destroy(),this._resources.delete(e),this._prevFBO=null,this._unbind()}render(e,n){const{context:o,painter:u,state:a}=e,l=n.instance.getInput(),{isFieldActive:d}=l.uniforms,p=this._getOrCreateResourcesRecord(o),m=p.loadQualityProfile(o);t(e)||this._bind(e,p,l),u.setShader({shader:this.shaders.accumulate,uniforms:{...i(e,n.target),kernelControls:{radius:f(l,a),isFieldActive:d?1:0}},textures:s(e),defines:{...r(e),...m.defines},optionalAttributes:{},useComputeBuffer:t(e)});const _=t(e)?h:c;u.setPipelineState(_),u.submitDraw(e,n)}getStencilReference(e){return d(e)}renderResolvePass(e,r){if(t(e))return;const{context:s,painter:i}=e,n=this._resources.get(s);if(null==this._prevFBO||null==this._prevViewport||!n?.initialized)return;const{defines:o}=n.loadQualityProfile(s),{minDensity:u,maxDensity:a,radius:l}=r.getInput().uniforms,d=8,c=9,h=n.accumulateFramebuffer,f=n.resolveGradientTexture,m={shader:this.shaders.resolve,uniforms:{accumulatedDensity:{minAndInvRange:[u,1/(a-u)],normalization:3/(l*l*Math.PI)}},textures:{densityTexture:{unit:d,texture:h.colorTexture},gradientTexture:{unit:c,texture:f}},defines:o,optionalAttributes:{},useComputeBuffer:!1};s.bindFramebuffer(this._prevFBO),s.setViewport(0,0,this._prevViewport.width,this._prevViewport.height),s.bindTexture(h.colorTexture,d),s.bindTexture(f,c),i.setPipelineState(p),i.submitDrawMesh(s,m,i.quadMesh),this._unbind()}_getOrCreateResourcesRecord(e){let t=this._resources.get(e);return null==t&&(t=new n,this._resources.set(e,t)),t}_unbind(){this._prevFBO=null,this._prevViewport=null,this._isBound=!1}_bind(e,t,r){const{context:s,state:i,pixelRatio:n}=e,o=s.boundFramebuffer;if(this._isBound||null==o)return;const u=s.getViewport();this._prevFBO=o,this._prevViewport=u;const{gradient:a,gradientHash:d}=r.uniforms;t.ensureResolveGradientTexture(s,d,a);const{width:c,height:h}=u,p=l(f(r,i),n),m=c*p,_=h*p,w=t.ensureAccumulateFBO(s,m,_);s.blitFramebuffer(o,w,1024),s.bindFramebuffer(w),s.setViewport(0,0,w.width,w.height),s.setColorMask(!0,!0,!0,!0),s.setClearColor(0,0,0,0),s.clear(16384),this._isBound=!0}}function l(e,t){const r=t>1.5?.25:.5;return e<1/(2*r)?1:r}function d(e){return e.key.level+1}const c={color:{write:[!0,!0,!0,!0],blendMode:"additive"},depth:!1,stencil:{write:!1,test:{compare:518,mask:255,op:{fail:7680,zFail:7680,zPass:7681}}}},h={...c,stencil:!1},p={color:{write:[!0,!0,!0,!0],blendMode:"composite"},depth:!1,stencil:!1};function f(e,t){const{referenceScale:r,radius:s}=e.uniforms;return s*(0!==r?r/t.scale:1)}export{a as HeatmapTechnique};
2
+ import{FeatureTechnique as e}from"../FeatureTechnique.js";import{isHittest as t,getSelectionDefines as r,getFeatureTextures as s,getFeatureUniforms as i}from"../featureTechniqueUtils.js";import{HeatmapResources as n}from"./HeatmapResources.js";import{HeatmapAccumulateShader as o}from"../shaders/HeatmapAccumulateShader.js";import{HeatmapResolveShader as u}from"../shaders/HeatmapResolveShader.js";class a extends e{constructor(){super(...arguments),this.type=19,this.drawPhase=37,this.shaders={accumulate:new o,resolve:new u},this._isBound=!1,this._resources=new Map}shutdown(e){super.shutdown(e),this._resources.get(e)?.destroy(),this._resources.delete(e),this._prevFBO=null,this._unbind()}render(e,n){const{context:o,painter:u,state:a}=e,l=n.instance.getInput(),{isFieldActive:d}=l.uniforms,p=this._getOrCreateResourcesRecord(o),m=p.loadQualityProfile(o);t(e)||this._bind(e,p,l),u.setShader({shader:this.shaders.accumulate,uniforms:{...i(e,n.target),kernelControls:{radius:f(l,a),isFieldActive:d?1:0}},textures:s(e),defines:{...r(e),...m.defines},optionalAttributes:{},useComputeBuffer:t(e)});const _=t(e)?h:c;u.setPipelineState(_),u.submitDraw(e,n)}getStencilReference(e){return d(e)}renderResolvePass(e,r){if(t(e))return;const{context:s,painter:i}=e,n=this._resources.get(s);if(null==this._prevFBO||null==this._prevViewport||!n?.initialized)return;const{defines:o}=n.loadQualityProfile(s),{minDensity:u,maxDensity:a,radius:l}=r.getInput().uniforms,d=8,c=9,h=n.accumulateFramebuffer,f=n.resolveGradientTexture,m={shader:this.shaders.resolve,uniforms:{accumulatedDensity:{minAndInvRange:[u,1/(a-u)],normalization:3/(l*l*Math.PI)}},textures:{densityTexture:{unit:d,texture:h.colorTexture},gradientTexture:{unit:c,texture:f}},defines:o,optionalAttributes:{},useComputeBuffer:!1};s.bindFramebuffer(this._prevFBO),s.setViewport(0,0,this._prevViewport.width,this._prevViewport.height),s.bindTexture(h.colorTexture,d),s.bindTexture(f,c),i.setPipelineState(p),i.submitDrawMesh(s,m,i.quadMesh),this._unbind()}_getOrCreateResourcesRecord(e){let t=this._resources.get(e);return null==t&&(t=new n,this._resources.set(e,t)),t}_unbind(){this._prevFBO=null,this._prevViewport=null,this._isBound=!1}_bind(e,t,r){const{context:s,state:i,pixelRatio:n}=e,o=s.boundFramebuffer;if(this._isBound||null==o)return;const u=s.getViewport();this._prevFBO=o,this._prevViewport=u;const{gradient:a,gradientHash:d}=r.uniforms;t.ensureResolveGradientTexture(s,d,a);const{width:c,height:h}=u,p=l(f(r,i),n),m=c*p,_=h*p,w=t.ensureAccumulateFBO(s,m,_);s.blitFramebuffer(o,w,1024),s.bindFramebuffer(w),s.setViewport(0,0,w.width,w.height),s.setColorMask(!0,!0,!0,!0),s.setClearColor(0,0,0,0),s.clear(16384),this._isBound=!0}}function l(e,t){const r=t>1.5?.25:.5;return e<1/(2*r)?1:r}function d(e){return e.key.level+1}const c={color:{write:[!0,!0,!0,!0],blendMode:"additive"},depth:!1,stencil:{write:!1,test:{compare:518,mask:255,op:{fail:7680,zFail:7680,zPass:7681}}}},h={...c,stencil:!1},p={color:{write:[!0,!0,!0,!0],blendMode:"composite"},depth:!1,stencil:!1};function f(e,t){const{referenceScale:r,radius:s}=e.uniforms;return s*(0!==r?r/t.scale:1)}export{a as HeatmapTechnique};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import{FeatureTechnique as e}from"../FeatureTechnique.js";import{getSelectionDefines as t,getFeaturePipelineState as s,isHittest as r,getFeatureTextures as a,getFeatureUniforms as i,resolveDynamicUniforms as n}from"../featureTechniqueUtils.js";import{TextShader as o}from"../text/TextShader.js";class u extends e{constructor(){super(...arguments),this.type=20,this.shaders={geometry:new o},this.drawPhase=14,this.symbologyPlane=3}render(e,o){const{painter:u}=e,m=t(e),d={...s(e),stencil:{write:!1,test:{compare:516,mask:255,op:{fail:7680,zFail:7680,zPass:7680}}}},c=o.instance.getInput(),{mosaicInfo:f,mosaicTexture:p}=u.textureManager.getBindingInfo(e,o.textureKey,!1),l={shader:this.shaders.geometry,uniforms:{...n(e,o.target,c.uniforms),...i(e,o.target),mosaicInfo:f},textures:{...a(e),mosaicTexture:p},defines:{...m,textRenderPassType:0,isBackgroundPass:!0,isLabel:!0},optionalAttributes:c.optionalAttributes,useComputeBuffer:r(e)};u.setPipelineState(d),u.setShader(l),u.submitDraw(e,o,{stencilRef:255}),u.setShader({...l,defines:{...m,textRenderPassType:2,isBackgroundPass:!1,isLabel:!0}}),u.submitDraw(e,o,{stencilRef:255}),u.setShader({...l,defines:{...m,textRenderPassType:0,isBackgroundPass:!1,isLabel:!0}}),u.submitDraw(e,o,{stencilRef:255})}}export{u as LabelTechnique};
2
+ import{FeatureTechnique as e}from"../FeatureTechnique.js";import{getSelectionDefines as t,getFeaturePipelineState as s,isHittest as r,getFeatureTextures as a,getFeatureUniforms as i,resolveDynamicUniforms as n}from"../featureTechniqueUtils.js";import{TextShader as o}from"../text/TextShader.js";class u extends e{constructor(){super(...arguments),this.type=20,this.shaders={geometry:new o},this.drawPhase=6,this.symbologyPlane=3}render(e,o){const{painter:u}=e,m=t(e),d={...s(e),stencil:{write:!1,test:{compare:516,mask:255,op:{fail:7680,zFail:7680,zPass:7680}}}},c=o.instance.getInput(),{mosaicInfo:f,mosaicTexture:p}=u.textureManager.getBindingInfo(e,o.textureKey,!1),l={shader:this.shaders.geometry,uniforms:{...n(e,o.target,c.uniforms),...i(e,o.target),mosaicInfo:f},textures:{...a(e),mosaicTexture:p},defines:{...m,textRenderPassType:0,isBackgroundPass:!0,isLabel:!0},optionalAttributes:c.optionalAttributes,useComputeBuffer:r(e)};u.setPipelineState(d),u.setShader(l),u.submitDraw(e,o,{stencilRef:255}),u.setShader({...l,defines:{...m,textRenderPassType:2,isBackgroundPass:!1,isLabel:!0}}),u.submitDraw(e,o,{stencilRef:255}),u.setShader({...l,defines:{...m,textRenderPassType:0,isBackgroundPass:!1,isLabel:!0}}),u.submitDraw(e,o,{stencilRef:255})}}export{u as LabelTechnique};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import{destroyMaybe as e}from"../../../../../../../core/maybe.js";import{fromValues as t}from"../../../../../../../core/libs/gl-matrix-2/factories/vec4f32.js";import{FeatureTile as i}from"../../../FeatureTile.js";import{Mesh as s}from"../../../meshing/Mesh.js";import{Technique as r}from"../Technique.js";import{getTileUniforms as o}from"../shaders/Tile.js";import{TileDebugInfoShader as n,TileDebugInfoOutlineShader as h}from"../shaders/TileDebugInfoShader.js";import{getTileContainerUniforms as u}from"../shaders/TileInfo.js";import{getViewUniforms as a}from"../shaders/ViewInfo.js";import{TileDebugInfoTexture as l}from"./TileDebugInfoTexture.js";import{PrimitiveType as d,DataType as m}from"../../../../../../webgl/enums.js";import{VertexElementDescriptor as p}from"../../../../../../webgl/VertexElementDescriptor.js";class c extends r{constructor(){super(...arguments),this.type=34,this.drawPhase=64,this.shaders={outline:new h,tileInfo:new n},this._outlineMesh=null,this._color=t(1,0,0,1),this._texture=new l}render(e,t){if(!(this.drawPhase&e.drawPhase))return;const{context:s,painter:r}=e;if(!t.isReady&&t instanceof i&&t.hasData)return;const n=this._getOutlineMesh(s),h=a(e),l=u(e),d=o(e.tilingScheme,t);r.setPipelineState({color:{write:[!0,!0,!0,!0],blendMode:"composite"},depth:!1,stencil:!1});const m={shader:this.shaders.outline,uniforms:{view:h,tileContainer:l,tile:d,config:{coordRange:[t.rangeX,t.rangeY],depth:0,color:this._color}},textures:void 0,defines:void 0,optionalAttributes:void 0,useComputeBuffer:!1};r.submitDrawMeshUntyped(s,m,n);const p=this._texture.getTexture(s,t);r.setPipelineState({color:{write:[!0,!0,!0,!0],blendMode:"composite"},depth:!1,stencil:!1});const c={shader:this.shaders.tileInfo,uniforms:{view:h,tileContainer:l,tile:d,config:{depth:0,coordRatio:[t.rangeX/t.width,t.rangeY/t.height],delta:[0,0],dimensions:[p.descriptor.width,p.descriptor.height]}},textures:{texture:{texture:p,unit:0}},defines:void 0,optionalAttributes:void 0,useComputeBuffer:!1};r.submitDrawMesh(s,c,r.quadMesh)}shutdown(){this._outlineMesh=e(this._outlineMesh),this._texture.shutdown()}_getOutlineMesh(e){return this._outlineMesh||(this._outlineMesh=new s(e,{vertex:{geometry:{data:new Int8Array([0,0,1,0,1,1,0,1]),layout:[new p("position",2,m.BYTE,0,2)]}},groups:[{primitive:d.LINE_LOOP}],parts:[{group:0,start:0,count:4}]})),this._outlineMesh}}export{c as TileDebugInfoTechnique};
2
+ import{destroyMaybe as e}from"../../../../../../../core/maybe.js";import{fromValues as t}from"../../../../../../../core/libs/gl-matrix-2/factories/vec4f32.js";import{FeatureTile as i}from"../../../FeatureTile.js";import{Mesh as s}from"../../../meshing/Mesh.js";import{Technique as r}from"../Technique.js";import{getTileUniforms as o}from"../shaders/Tile.js";import{TileDebugInfoShader as n,TileDebugInfoOutlineShader as h}from"../shaders/TileDebugInfoShader.js";import{getTileContainerUniforms as u}from"../shaders/TileInfo.js";import{getViewUniforms as a}from"../shaders/ViewInfo.js";import{TileDebugInfoTexture as l}from"./TileDebugInfoTexture.js";import{PrimitiveType as d,DataType as m}from"../../../../../../webgl/enums.js";import{VertexElementDescriptor as p}from"../../../../../../webgl/VertexElementDescriptor.js";class c extends r{constructor(){super(...arguments),this.type=34,this.drawPhase=32,this.shaders={outline:new h,tileInfo:new n},this._outlineMesh=null,this._color=t(1,0,0,1),this._texture=new l}render(e,t){if(!(this.drawPhase&e.drawPhase))return;const{context:s,painter:r}=e;if(!t.isReady&&t instanceof i&&t.hasData)return;const n=this._getOutlineMesh(s),h=a(e),l=u(e),d=o(e.tilingScheme,t);r.setPipelineState({color:{write:[!0,!0,!0,!0],blendMode:"composite"},depth:!1,stencil:!1});const m={shader:this.shaders.outline,uniforms:{view:h,tileContainer:l,tile:d,config:{coordRange:[t.rangeX,t.rangeY],depth:0,color:this._color}},textures:void 0,defines:void 0,optionalAttributes:void 0,useComputeBuffer:!1};r.submitDrawMeshUntyped(s,m,n);const p=this._texture.getTexture(s,t);r.setPipelineState({color:{write:[!0,!0,!0,!0],blendMode:"composite"},depth:!1,stencil:!1});const c={shader:this.shaders.tileInfo,uniforms:{view:h,tileContainer:l,tile:d,config:{depth:0,coordRatio:[t.rangeX/t.width,t.rangeY/t.height],delta:[0,0],dimensions:[p.descriptor.width,p.descriptor.height]}},textures:{texture:{texture:p,unit:0}},defines:void 0,optionalAttributes:void 0,useComputeBuffer:!1};r.submitDrawMesh(s,c,r.quadMesh)}shutdown(){this._outlineMesh=e(this._outlineMesh),this._texture.shutdown()}_getOutlineMesh(e){return this._outlineMesh||(this._outlineMesh=new s(e,{vertex:{geometry:{data:new Int8Array([0,0,1,0,1,1,0,1]),layout:[new p("position",2,m.BYTE,0,2)]}},groups:[{primitive:d.LINE_LOOP}],parts:[{group:0,start:0,count:4}]})),this._outlineMesh}}export{c as TileDebugInfoTechnique};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import{fromValues as e}from"../../../../../../../core/libs/gl-matrix-2/factories/vec4f32.js";import{Technique as s}from"../Technique.js";import{getTileUniforms as t}from"../shaders/Tile.js";import{getTileContainerUniforms as r}from"../shaders/TileInfo.js";import{TileStencilShader as i}from"../shaders/TileStencilShader.js";import{getViewUniforms as o}from"../shaders/ViewInfo.js";class a extends s{constructor(){super(...arguments),this.type=35,this.drawPhase=211,this.shaders={tileStencil:new i},this._color=e(1,0,0,1)}render(e,s,i){if(!(this.drawPhase&e.drawPhase&&s.visible))return;const{context:a,painter:n}=e,l=i?.rasterVF??null;n.setPipelineState({color:!1,depth:!1,stencil:{write:{mask:255},test:{compare:516,op:{fail:7680,zFail:7680,zPass:7681},mask:255}}});const c={shader:this.shaders.tileStencil,uniforms:{view:o(e),tileContainer:r(e),tile:t(e.tilingScheme,s),config:{coordRange:[s.rangeX,s.rangeY],depth:0,color:this._color},rasterVF:l},textures:void 0,defines:{isRasterVF:null!=l},optionalAttributes:void 0,useComputeBuffer:!1};n.submitDrawMesh(a,c,n.quadMesh,{stencilRef:s.stencilRef})}}export{a as TileStencilTechnique};
2
+ import{fromValues as e}from"../../../../../../../core/libs/gl-matrix-2/factories/vec4f32.js";import{Technique as s}from"../Technique.js";import{getTileUniforms as t}from"../shaders/Tile.js";import{getTileContainerUniforms as r}from"../shaders/TileInfo.js";import{TileStencilShader as i}from"../shaders/TileStencilShader.js";import{getViewUniforms as o}from"../shaders/ViewInfo.js";class a extends s{constructor(){super(...arguments),this.type=35,this.drawPhase=107,this.shaders={tileStencil:new i},this._color=e(1,0,0,1)}render(e,s,i){if(!(this.drawPhase&e.drawPhase&&s.visible))return;const{context:a,painter:n}=e,l=i?.rasterVF??null;n.setPipelineState({color:!1,depth:!1,stencil:{write:{mask:255},test:{compare:516,op:{fail:7680,zFail:7680,zPass:7681},mask:255}}});const c={shader:this.shaders.tileStencil,uniforms:{view:o(e),tileContainer:r(e),tile:t(e.tilingScheme,s),config:{coordRange:[s.rangeX,s.rangeY],depth:0,color:this._color},rasterVF:l},textures:void 0,defines:{isRasterVF:null!=l},optionalAttributes:void 0,useComputeBuffer:!1};n.submitDrawMesh(a,c,n.quadMesh,{stencilRef:s.stencilRef})}}export{a as TileStencilTechnique};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import{__decorate as e}from"tslib";import{subclass as r}from"../../../core/accessorSupport/decorators.js";import{FeatureLikeLayerView2D as o}from"./FeatureLikeLayerView2D.js";import t from"../../layers/FeatureLayerView.js";let s=class extends(o(t)){};s=e([r("esri.views.2d.layers.AnnotationFeatureLayerView2D")],s);const a=s;export{a as default};
2
+ import{__decorate as e}from"tslib";import{watch as r,initial as t}from"../../../core/reactiveUtils.js";import{subclass as s}from"../../../core/accessorSupport/decorators.js";import{FeatureLikeLayerView2D as i}from"./FeatureLikeLayerView2D.js";import o from"../../layers/AnnotationFeatureLayerView.js";let a=class extends(i(o)){initialize(){this.addHandles([r(()=>this.view.scale,()=>this._update(),t)],"constructor")}hasRenderer(){return!0}};a=e([s("esri.views.2d.layers.AnnotationFeatureLayerView2D")],a);const n=a;export{n as default};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import has from"../../../../core/has.js";import{destroyMaybe as e}from"../../../../core/maybe.js";import{throwIfAborted as t}from"../../../../core/promiseUtils.js";import{signal as r}from"../../../../core/signal.js";import{AFeatureContainer as s}from"../../engine/AFeatureContainer.js";import{effectFlag0 as i,filterFlag0 as n}from"../../engine/webgl/definitions.js";import a from"../../engine/webgl/shaderGraph/techniques/FeatureInstanceStore.js";import{Techniques as o}from"../../engine/webgl/shaderGraph/techniques/TechniqueRegistry.js";import{FeatureTilePresentStrategy as l}from"./FeatureTilePresentStrategy.js";import{RenderState as d}from"./RenderState.js";import{renderHighlight as h}from"../support/util.js";import{createHittestQuery as u}from"../../support/hitTestUtils.js";class c{constructor(e){this.inner=e,this.resolver=Promise.withResolvers()}}class p{constructor(e){this.level=e,this.id=performance.now(),this.messages=[]}}class f{constructor(e,t){this.id=e,this.version=t}}class _ extends s{constructor(e){super(e.view.featuresTilingScheme),this.referenceScale=null,this._updatingChildren=r(!1),this._hitTestsRequests=[],this._renderState=r(null),this._renderStateNext=r(null),this._store=new a,this._subscriptions=new Map,this._presentation=new l,this._updateStatisticsRequests=[],this._lockStatisticUpdates=!1,this._supportsInstanceCleanup=!0,this._shouldUnlockAttributeView=!1,this._layerView=e,this.addTransitionable(this._layerView.featureEffectView)}destroy(){super.destroy(),this._renderState.value=e(this._renderState.value),this._renderStateNext.value=e(this._renderStateNext.value)}get batching(){return has("featurelayer-strict-draw-order")?1:has("featurelayer-force-marker-text-draw-order")?2:0}get updating(){const e=this._updatingChildren.value,t=!this._renderState.value||this._renderState.value.updating,r=!!this._renderStateNext.value,s=this.attributeView.updating;return e||t||r||s}subscriptions(){return this._subscriptions.values()}get hasLabels(){return null!==this.labelSchema}get hasHighlight(){return this._layerView.hasHighlight}get children(){return this._renderState.value?this._renderState.value.tiles().filter(e=>e.presenting):[]}get usedMemory(){let e=0;return this._renderState.value&&(e+=this._renderState.value.usedMemory),this._renderStateNext.value&&(e+=this._renderStateNext.value.usedMemory),e+=this.attributeView.usedMemory,e}get instanceStore(){return this._store}get labelingCollisionInfos(){if(!this._deconflictionInfo)throw new Error("InternalError: DeconflictionInfo not defined. Was update called?");return this._deconflictionInfo}get labelSchema(){return this._schema?.mesh.factory.labels??null}get layerOrder(){return this._layerView.view.allLayerViews.items.indexOf(this._layerView)}get tiles(){return this._renderState.value?.tiles()}get requiresRefresh(){return!!this._renderState.value?.requiresRefresh}get _instanceStore(){return this._store}_getHeatmapInstance(e){if(null==this._instanceStore||!(e.drawPhase&o.heatmap.drawPhase))return null;for(const t of this._instanceStore.values())if(v(t))return t;return null}update(e,t){this._schema=e,this._deconflictionInfo=t}setCoverage(e){this._presentation.updateCoverage(e)}getPresenting(){const e=new Set;for(const t of this._renderState.value?.tiles()??[])t.presenting&&e.add(t.id);return e}beforeRender(e){if(super.beforeRender(e),this._renderState.value){for(const t of this._renderState.value.tiles())t.setTransform(e.state);if(!e.decluttering){this._presentation.update(this._renderState.value.tiles());for(const e of this._renderState.value.tiles())e.upload(this._instanceStore,this.batching)}this._updatingChildren.value=!this.children.every(e=>e.ended&&e.presenting)}}renderChildren(e){switch(super.renderChildren(e),e.drawPhase){case 1:return this._renderMapPhase(e);case 16:return this._renderHighlightPhase(e);case 2:return this._renderLabelPhase(e)}}afterRender(e){super.afterRender(e),e.decluttering||(this._finializeUpdate(),this._updateAttributeView(),this._handleSwapRenderState(),this._renderState.value?.update(this.attributeView.currentEpoch)),this._hitTestsRequests.length&&this.requestRender()}updateStart(e){return this.attributeView.lockTextureUploads(),this._supportsInstanceCleanup=!e&&"dictionary"!==this._schema?.mesh.factory.symbology.type,this.instanceStore.updateStart(this._supportsInstanceCleanup),this.instanceStore}async updateEnd(e,t,r){return this._updateResolver=new c({schema:e,deconflictionInfo:t,invalidateMesh:r}),this.requestRender(),e.mesh.factory.referenceScale&&(this.referenceScale=e.mesh.factory.referenceScale),this._updateResolver.resolver.promise}updateAttributeView(e){this.requestRender(),this.attributeView.requestUpdate(e)}updateSubscriptions(e){for(const{tileId:t,version:r}of e.subscribe){if(!this._subscriptions.has(t)){const e=new f(t,r);this._subscriptions.set(t,e);continue}this._subscriptions.get(t).version=r}for(const t of e.unsubscribe)this._subscriptions.delete(t),this.removeTile(t)}isFeatureFiltered(e){const t=this.attributeView.getFilterFlags(e),r=t&n,s=null==this._layerView.featureEffectView.featureEffect||this._layerView.featureEffectView.featureEffect.excludedLabelsVisible||t&i;return!(r&&s)}getDisplayStatistics(e,t){const r=this._statisticsByLevel.get(e);return r?r.get(t):null}updateStatistics(e,t){if(this._lockStatisticUpdates)return void this._updateStatisticsRequests.push({level:e,statistics:t});let r=this._statisticsByLevel.get(e);r||(r=new Map,this._statisticsByLevel.set(e,r));for(const s of t)r.set(s.fieldName,{minValue:s.minValue,maxValue:s.maxValue})}beginLevelMeshUpdate(e){if(null!=this._pendingLevelUpdate)throw new Error("InternalError: Pending level mesh update in progress");return this._pendingLevelUpdate=new p(e),has("esri-2d-update-debug")&&console.debug(`FeatureContainer.beginLevelMeshUpdate(level=${e}, id=${this._pendingLevelUpdate.id})`),this._pendingLevelUpdate.id}applyLevelMeshUpdate(e){if(null==this._pendingLevelUpdate)throw new Error("InternalError: No level mesh update to apply");if(this._pendingLevelUpdate.id!==e)throw new Error("InternalError: Unexpected id");if(has("esri-2d-update-debug")){const{id:e,level:t}=this._pendingLevelUpdate;console.debug(`FeatureContainer.applyLevelMeshUpdate(level=${t}, id=${e})`)}const{level:t,messages:r}=this._pendingLevelUpdate,s=this._renderStateNext.value??this._renderState.value;if(!s)throw new Error("InternalError: No renderState defined");s.enqueueLevelReplace(t,r),this._pendingLevelUpdate=null,this.requestRender()}lockForOverrides(){this._renderState.value?.lockUploads(),this._lockStatisticUpdates=!0,this.attributeView.locked||(this.attributeView.lockTextureUploads(),this._shouldUnlockAttributeView=!0)}unlockForOverrides(){this._renderState.value?.unlockUploads(),this._shouldUnlockAttributeView&&(this.attributeView.unlockTextureUploads()&&this.hasLabels&&this.requestDeclutter(),this._shouldUnlockAttributeView=!1),this._lockStatisticUpdates=!1;for(const e of this._updateStatisticsRequests)this.updateStatistics(e.level,e.statistics);this._updateStatisticsRequests=[],this._renderState.value?.flush(this.attributeView.currentEpoch),this.requestRender()}async updateRenderState(e){if(this._renderStateNext.value)throw new Error("InternalError: renderStateNext already exists");has("esri-2d-update-debug")&&console.debug(`Version[${e}] FeatureContainer.updateRenderState`),this._renderStateNext.value=new d(()=>this._stage,e=>this._subscriptions.get(e)?.version,e,this.tilingScheme)}async swapRenderState(){if(!this._renderStateNext.value)throw new Error("InternalError: renderStateNext not yet created");if(this._renderStateSwapResolver)throw new Error("InternalError: renderState swap already in progress");this._renderStateSwapResolver=Promise.withResolvers(),await this._renderStateSwapResolver.promise}async onMessage(e,r){if(t(r),!this._pendingLevelUpdate)return this._applyMessage(e);this._pendingLevelUpdate.messages.push(e)}removeTile(e){(this._renderState.value||this._renderStateNext.value)&&(this._renderState.value&&this._renderState.value.removeTile(e),this._renderStateNext.value&&this._renderStateNext.value.removeTile(e))}hitTest(e){const t=u(e);if(!t)return console.warn("Unexpected hittest input:",e),Promise.resolve({trueHitIds:[],candidateHitIds:[]});let r=this._hitTestsRequests.find(({query:e})=>t.hittestType===e.hittestType&&t.input===e.input);const s=Promise.withResolvers();return r?r.resolvers.push(s):(r={query:t,resolvers:[s]},this._hitTestsRequests.push(r)),this.requestRender(),s.promise}getSortKeys(e){const t=new Set(e),r=new Map;for(const s of this.children)if(s.getSortKeys(t).forEach((e,t)=>r.set(t,e)),r.size===t.size)break;return r}get hasAnimation(){return this.hasLabels}doRender(e){const{minScale:t,maxScale:r}=this._layerView.layer.effectiveScaleRange,s=e.state.scale;s<=(t||1/0)&&s>=r&&super.doRender(e)}setStencilReference(e){if(null==this._getHeatmapInstance(e))super.setStencilReference(e);else for(const t of this.children)t.stencilRef=o.heatmap.getStencilReference(t)}createRenderParams(e){const t=super.createRenderParams(e);return t.referenceScale=this.referenceScale,t}_applyMessage(e){const t=e.inner;if(!this._subscriptions.has(t.id))return;const r=this._subscriptions.get(t.id);if(r.version!==t.subscriptionVesrion){if(has("esri-2d-update-debug")){const e=`${t.subscriptionVesrion} != ${r.version}`;console.debug(`Version[${e}] Tile[${t.id}] FeatureContainer - Dropping message, outdated version]`,t)}return}const s=this._renderStateNext.value??this._renderState.value;if(!s)throw new Error("InternalError: No renderState defined");s.version!==t.version&&console.error(`InternalError: Version mismatch. [renderState: ${s.version}, message: ${t.version}]`),s.enqueueUpdate(e),this.requestRender()}_finializeUpdate(){if(!this._updateResolver)return;const{schema:e,deconflictionInfo:t,invalidateMesh:r}=this._updateResolver.inner;this._schema=e,this._deconflictionInfo=t,this.attributeView.unlockTextureUploads()&&this.hasLabels&&this.requestDeclutter(),this.instanceStore.updateEnd(this._supportsInstanceCleanup),r&&(this.restartAllAnimations(),this.swapRenderState());const s="heatmap"===e.mesh.factory.symbology.type?"target-defer":"eager";this._presentation.updateStrategy(s),this._updateResolver.resolver.resolve(),this._updateResolver=null,this.requestRender()}_handleSwapRenderState(){if(this._renderStateSwapResolver&&this._renderStateNext.value){has("esri-2d-update-debug")&&console.debug(`Version[${this._renderStateNext.value}] FeatureContainer.update.swapRenderState`);const e=this._renderState.value,t=new Set,r=new Set;for(const s of e?.tiles()??[])s.decluttering&&t.add(s.id),s.presenting&&r.add(s.id);this._renderState.value=this._renderStateNext.value,this._renderStateNext.value=null,this._renderState.value.flush(this.attributeView.currentEpoch),e?.destroy(),this._renderStateSwapResolver.resolve(),this._renderStateSwapResolver=null;for(const s of this._renderState.value.tiles())t.has(s.id)&&(s.decluttering=!0),r.has(s.id)&&(s.presenting=!0);this.requestRender(),this.hasLabels&&this.requestDeclutter()}}_renderMapPhase(e){this._layerView.featureEffectView.hasEffects?(this._renderOutsideEffect(e),this._renderInsideEffect(e)):this._renderFeatures(e,0),this._hitTestsRequests.length>0&&this._renderHittest(e)}_renderHighlightPhase(e){this.hasHighlight&&h(e,!1,e=>{this._renderFeatures(e,1)})}_renderLabelPhase(e){this._renderFeatures(e,0)}_renderInsideEffect(e){const t=e.painter.effects.insideEffect;t.bind(e),this._renderFeatures(e,2),t.draw(e,this._layerView.featureEffectView.includedEffects),t.unbind()}_renderOutsideEffect(e){const t=e.painter.effects.outsideEffect;t.bind(e),this._renderFeatures(e,3),t.draw(e,this._layerView.featureEffectView.excludedEffects),t.unbind()}_renderHittest(e){const{context:t}=e,r=e.painter.effects.hittest,s=t.boundFramebuffer,i=t.getViewport(),n=e.passOptions,a=e.drawPhase;r.bind(e),e.passOptions=r.createOptions(e,this._hitTestsRequests),e.drawPhase=8;const{distance:o,smallSymbolDistance:l}=e.passOptions,d=Math.max(o,l),h=e.passOptions.hittestType;for(const u of this.children)u.visible&&("rect"===h?u.containsScreenRect(e.state,e.passOptions.tlbr)&&this._renderTile(u,e,0):u.containsScreenPoint(e.state,e.passOptions.position,2*d)&&this._renderTile(u,e,0));r.draw(e),r.unbind(e),t.bindFramebuffer(s),t.restoreViewport(i),e.passOptions=n,e.drawPhase=a}_renderFeatures(e,t){const r=this._getHeatmapInstance(e);null!=r?this._renderHeatmapFeatures(e,t,r):this._renderGeometryFeatures(e,t)}_renderGeometryFeatures(e,t){for(const r of this.children)r.visible&&this._renderTile(r,e,t)}_renderHeatmapFeatures(e,t,r){for(const s of this.children)s.visible&&this._renderTile(s,e,t,19);r.techniqueRef.renderResolvePass(e,r)}_renderTile(e,t,r,s){t.selection=r,e.getDisplayList()?.render(t,s)}}function v(e){return 19===e.techniqueRef.type}export{_ as FeatureContainer};
2
+ import has from"../../../../core/has.js";import{destroyMaybe as e}from"../../../../core/maybe.js";import{throwIfAborted as t}from"../../../../core/promiseUtils.js";import{signal as r}from"../../../../core/signal.js";import{AFeatureContainer as s}from"../../engine/AFeatureContainer.js";import{effectFlag0 as i,filterFlag0 as n}from"../../engine/webgl/definitions.js";import a from"../../engine/webgl/shaderGraph/techniques/FeatureInstanceStore.js";import{Techniques as o}from"../../engine/webgl/shaderGraph/techniques/TechniqueRegistry.js";import{FeatureTilePresentStrategy as l}from"./FeatureTilePresentStrategy.js";import{RenderState as d}from"./RenderState.js";import{renderHighlight as h}from"../support/util.js";import{createHittestQuery as u}from"../../support/hitTestUtils.js";class c{constructor(e){this.inner=e,this.resolver=Promise.withResolvers()}}class p{constructor(e){this.level=e,this.id=performance.now(),this.messages=[]}}class f{constructor(e,t){this.id=e,this.version=t}}class _ extends s{constructor(e){super(e.view.featuresTilingScheme),this.referenceScale=null,this._updatingChildren=r(!1),this._hitTestsRequests=[],this._renderState=r(null),this._renderStateNext=r(null),this._store=new a,this._subscriptions=new Map,this._presentation=new l,this._updateStatisticsRequests=[],this._lockStatisticUpdates=!1,this._supportsInstanceCleanup=!0,this._shouldUnlockAttributeView=!1,this._layerView=e,this.addTransitionable(this._layerView.featureEffectView)}destroy(){super.destroy(),this._renderState.value=e(this._renderState.value),this._renderStateNext.value=e(this._renderStateNext.value)}get batching(){return has("featurelayer-strict-draw-order")?1:has("featurelayer-force-marker-text-draw-order")?2:0}get updating(){const e=this._updatingChildren.value,t=!this._renderState.value||this._renderState.value.updating,r=!!this._renderStateNext.value,s=this.attributeView.updating;return e||t||r||s}subscriptions(){return this._subscriptions.values()}get hasLabels(){return null!==this.labelSchema}get hasHighlight(){return this._layerView.hasHighlight}get children(){return this._renderState.value?this._renderState.value.tiles().filter(e=>e.presenting):[]}get usedMemory(){let e=0;return this._renderState.value&&(e+=this._renderState.value.usedMemory),this._renderStateNext.value&&(e+=this._renderStateNext.value.usedMemory),e+=this.attributeView.usedMemory,e}get instanceStore(){return this._store}get labelingCollisionInfos(){if(!this._deconflictionInfo)throw new Error("InternalError: DeconflictionInfo not defined. Was update called?");return this._deconflictionInfo}get labelSchema(){return this._schema?.mesh.factory.labels??null}get layerOrder(){return this._layerView.view.allLayerViews.items.indexOf(this._layerView)}get tiles(){return this._renderState.value?.tiles()}get requiresRefresh(){return!!this._renderState.value?.requiresRefresh}get _instanceStore(){return this._store}_getHeatmapInstance(e){if(null==this._instanceStore||!(e.drawPhase&o.heatmap.drawPhase))return null;for(const t of this._instanceStore.values())if(v(t))return t;return null}update(e,t){this._schema=e,this._deconflictionInfo=t}setCoverage(e){this._presentation.updateCoverage(e)}getPresenting(){const e=new Set;for(const t of this._renderState.value?.tiles()??[])t.presenting&&e.add(t.id);return e}beforeRender(e){if(super.beforeRender(e),this._renderState.value){for(const t of this._renderState.value.tiles())t.setTransform(e.state);if(!e.decluttering){this._presentation.update(this._renderState.value.tiles());for(const e of this._renderState.value.tiles())e.upload(this._instanceStore,this.batching)}this._updatingChildren.value=!this.children.every(e=>e.ended&&e.presenting)}}renderChildren(e){switch(super.renderChildren(e),e.drawPhase){case 1:return this._renderMapPhase(e);case 8:return this._renderHighlightPhase(e);case 2:return this._renderLabelPhase(e)}}afterRender(e){super.afterRender(e),e.decluttering||(this._finializeUpdate(),this._updateAttributeView(),this._handleSwapRenderState(),this._renderState.value?.update(this.attributeView.currentEpoch)),this._hitTestsRequests.length&&this.requestRender()}updateStart(e){return this.attributeView.lockTextureUploads(),this._supportsInstanceCleanup=!e&&"dictionary"!==this._schema?.mesh.factory.symbology.type,this.instanceStore.updateStart(this._supportsInstanceCleanup),this.instanceStore}async updateEnd(e,t,r){return this._updateResolver=new c({schema:e,deconflictionInfo:t,invalidateMesh:r}),this.requestRender(),e.mesh.factory.referenceScale&&(this.referenceScale=e.mesh.factory.referenceScale),this._updateResolver.resolver.promise}updateAttributeView(e){this.requestRender(),this.attributeView.requestUpdate(e)}updateSubscriptions(e){for(const{tileId:t,version:r}of e.subscribe){if(!this._subscriptions.has(t)){const e=new f(t,r);this._subscriptions.set(t,e);continue}this._subscriptions.get(t).version=r}for(const t of e.unsubscribe)this._subscriptions.delete(t),this.removeTile(t)}isFeatureFiltered(e){const t=this.attributeView.getFilterFlags(e),r=t&n,s=null==this._layerView.featureEffectView.featureEffect||this._layerView.featureEffectView.featureEffect.excludedLabelsVisible||t&i;return!(r&&s)}getDisplayStatistics(e,t){const r=this._statisticsByLevel.get(e);return r?r.get(t):null}updateStatistics(e,t){if(this._lockStatisticUpdates)return void this._updateStatisticsRequests.push({level:e,statistics:t});let r=this._statisticsByLevel.get(e);r||(r=new Map,this._statisticsByLevel.set(e,r));for(const s of t)r.set(s.fieldName,{minValue:s.minValue,maxValue:s.maxValue})}beginLevelMeshUpdate(e){if(null!=this._pendingLevelUpdate)throw new Error("InternalError: Pending level mesh update in progress");return this._pendingLevelUpdate=new p(e),has("esri-2d-update-debug")&&console.debug(`FeatureContainer.beginLevelMeshUpdate(level=${e}, id=${this._pendingLevelUpdate.id})`),this._pendingLevelUpdate.id}applyLevelMeshUpdate(e){if(null==this._pendingLevelUpdate)throw new Error("InternalError: No level mesh update to apply");if(this._pendingLevelUpdate.id!==e)throw new Error("InternalError: Unexpected id");if(has("esri-2d-update-debug")){const{id:e,level:t}=this._pendingLevelUpdate;console.debug(`FeatureContainer.applyLevelMeshUpdate(level=${t}, id=${e})`)}const{level:t,messages:r}=this._pendingLevelUpdate,s=this._renderStateNext.value??this._renderState.value;if(!s)throw new Error("InternalError: No renderState defined");s.enqueueLevelReplace(t,r),this._pendingLevelUpdate=null,this.requestRender()}lockForOverrides(){this._renderState.value?.lockUploads(),this._lockStatisticUpdates=!0,this.attributeView.locked||(this.attributeView.lockTextureUploads(),this._shouldUnlockAttributeView=!0)}unlockForOverrides(){this._renderState.value?.unlockUploads(),this._shouldUnlockAttributeView&&(this.attributeView.unlockTextureUploads()&&this.hasLabels&&this.requestDeclutter(),this._shouldUnlockAttributeView=!1),this._lockStatisticUpdates=!1;for(const e of this._updateStatisticsRequests)this.updateStatistics(e.level,e.statistics);this._updateStatisticsRequests=[],this._renderState.value?.flush(this.attributeView.currentEpoch),this.requestRender()}async updateRenderState(e){if(this._renderStateNext.value)throw new Error("InternalError: renderStateNext already exists");has("esri-2d-update-debug")&&console.debug(`Version[${e}] FeatureContainer.updateRenderState`),this._renderStateNext.value=new d(()=>this._stage,e=>this._subscriptions.get(e)?.version,e,this.tilingScheme)}async swapRenderState(){if(!this._renderStateNext.value)throw new Error("InternalError: renderStateNext not yet created");if(this._renderStateSwapResolver)throw new Error("InternalError: renderState swap already in progress");this._renderStateSwapResolver=Promise.withResolvers(),await this._renderStateSwapResolver.promise}async onMessage(e,r){if(t(r),!this._pendingLevelUpdate)return this._applyMessage(e);this._pendingLevelUpdate.messages.push(e)}removeTile(e){(this._renderState.value||this._renderStateNext.value)&&(this._renderState.value&&this._renderState.value.removeTile(e),this._renderStateNext.value&&this._renderStateNext.value.removeTile(e))}hitTest(e){const t=u(e);if(!t)return console.warn("Unexpected hittest input:",e),Promise.resolve({trueHitIds:[],candidateHitIds:[]});let r=this._hitTestsRequests.find(({query:e})=>t.hittestType===e.hittestType&&t.input===e.input);const s=Promise.withResolvers();return r?r.resolvers.push(s):(r={query:t,resolvers:[s]},this._hitTestsRequests.push(r)),this.requestRender(),s.promise}getSortKeys(e){const t=new Set(e),r=new Map;for(const s of this.children)if(s.getSortKeys(t).forEach((e,t)=>r.set(t,e)),r.size===t.size)break;return r}get hasAnimation(){return this.hasLabels}doRender(e){const{minScale:t,maxScale:r}=this._layerView.layer.effectiveScaleRange,s=e.state.scale;s<=(t||1/0)&&s>=r&&super.doRender(e)}setStencilReference(e){if(null==this._getHeatmapInstance(e))super.setStencilReference(e);else for(const t of this.children)t.stencilRef=o.heatmap.getStencilReference(t)}createRenderParams(e){const t=super.createRenderParams(e);return t.referenceScale=this.referenceScale,t}_applyMessage(e){const t=e.inner;if(!this._subscriptions.has(t.id))return;const r=this._subscriptions.get(t.id);if(r.version!==t.subscriptionVesrion){if(has("esri-2d-update-debug")){const e=`${t.subscriptionVesrion} != ${r.version}`;console.debug(`Version[${e}] Tile[${t.id}] FeatureContainer - Dropping message, outdated version]`,t)}return}const s=this._renderStateNext.value??this._renderState.value;if(!s)throw new Error("InternalError: No renderState defined");s.version!==t.version&&console.error(`InternalError: Version mismatch. [renderState: ${s.version}, message: ${t.version}]`),s.enqueueUpdate(e),this.requestRender()}_finializeUpdate(){if(!this._updateResolver)return;const{schema:e,deconflictionInfo:t,invalidateMesh:r}=this._updateResolver.inner;this._schema=e,this._deconflictionInfo=t,this.attributeView.unlockTextureUploads()&&this.hasLabels&&this.requestDeclutter(),this.instanceStore.updateEnd(this._supportsInstanceCleanup),r&&(this.restartAllAnimations(),this.swapRenderState());const s="heatmap"===e.mesh.factory.symbology.type?"target-defer":"eager";this._presentation.updateStrategy(s),this._updateResolver.resolver.resolve(),this._updateResolver=null,this.requestRender()}_handleSwapRenderState(){if(this._renderStateSwapResolver&&this._renderStateNext.value){has("esri-2d-update-debug")&&console.debug(`Version[${this._renderStateNext.value}] FeatureContainer.update.swapRenderState`);const e=this._renderState.value,t=new Set,r=new Set;for(const s of e?.tiles()??[])s.decluttering&&t.add(s.id),s.presenting&&r.add(s.id);this._renderState.value=this._renderStateNext.value,this._renderStateNext.value=null,this._renderState.value.flush(this.attributeView.currentEpoch),e?.destroy(),this._renderStateSwapResolver.resolve(),this._renderStateSwapResolver=null;for(const s of this._renderState.value.tiles())t.has(s.id)&&(s.decluttering=!0),r.has(s.id)&&(s.presenting=!0);this.requestRender(),this.hasLabels&&this.requestDeclutter()}}_renderMapPhase(e){this._layerView.featureEffectView.hasEffects?(this._renderOutsideEffect(e),this._renderInsideEffect(e)):this._renderFeatures(e,0),this._hitTestsRequests.length>0&&this._renderHittest(e)}_renderHighlightPhase(e){this.hasHighlight&&h(e,!1,e=>{this._renderFeatures(e,1)})}_renderLabelPhase(e){this._renderFeatures(e,0)}_renderInsideEffect(e){const t=e.painter.effects.insideEffect;t.bind(e),this._renderFeatures(e,2),t.draw(e,this._layerView.featureEffectView.includedEffects),t.unbind()}_renderOutsideEffect(e){const t=e.painter.effects.outsideEffect;t.bind(e),this._renderFeatures(e,3),t.draw(e,this._layerView.featureEffectView.excludedEffects),t.unbind()}_renderHittest(e){const{context:t}=e,r=e.painter.effects.hittest,s=t.boundFramebuffer,i=t.getViewport(),n=e.passOptions,a=e.drawPhase;r.bind(e),e.passOptions=r.createOptions(e,this._hitTestsRequests),e.drawPhase=4;const{distance:o,smallSymbolDistance:l}=e.passOptions,d=Math.max(o,l),h=e.passOptions.hittestType;for(const u of this.children)u.visible&&("rect"===h?u.containsScreenRect(e.state,e.passOptions.tlbr)&&this._renderTile(u,e,0):u.containsScreenPoint(e.state,e.passOptions.position,2*d)&&this._renderTile(u,e,0));r.draw(e),r.unbind(e),t.bindFramebuffer(s),t.restoreViewport(i),e.passOptions=n,e.drawPhase=a}_renderFeatures(e,t){const r=this._getHeatmapInstance(e);null!=r?this._renderHeatmapFeatures(e,t,r):this._renderGeometryFeatures(e,t)}_renderGeometryFeatures(e,t){for(const r of this.children)r.visible&&this._renderTile(r,e,t)}_renderHeatmapFeatures(e,t,r){for(const s of this.children)s.visible&&this._renderTile(s,e,t,19);r.techniqueRef.renderResolvePass(e,r)}_renderTile(e,t,r,s){t.selection=r,e.getDisplayList()?.render(t,s)}}function v(e){return 19===e.techniqueRef.type}export{_ as FeatureContainer};