@itwin/core-frontend 5.0.0-dev.4 → 5.0.0-dev.41

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 (373) hide show
  1. package/CHANGELOG.md +42 -1
  2. package/lib/cjs/AccuDraw.d.ts +63 -8
  3. package/lib/cjs/AccuDraw.d.ts.map +1 -1
  4. package/lib/cjs/AccuDraw.js +118 -16
  5. package/lib/cjs/AccuDraw.js.map +1 -1
  6. package/lib/cjs/ApproximateTerrainHeights.js +1 -1
  7. package/lib/cjs/ApproximateTerrainHeights.js.map +1 -1
  8. package/lib/cjs/BackgroundMapGeometry.js +5 -5
  9. package/lib/cjs/BackgroundMapGeometry.js.map +1 -1
  10. package/lib/cjs/BriefcaseTxns.d.ts +2 -2
  11. package/lib/cjs/BriefcaseTxns.d.ts.map +1 -1
  12. package/lib/cjs/BriefcaseTxns.js.map +1 -1
  13. package/lib/cjs/DrawingViewState.js +9 -9
  14. package/lib/cjs/DrawingViewState.js.map +1 -1
  15. package/lib/cjs/GraphicalEditingScope.js +5 -5
  16. package/lib/cjs/GraphicalEditingScope.js.map +1 -1
  17. package/lib/cjs/IModelApp.d.ts.map +1 -1
  18. package/lib/cjs/IModelApp.js +62 -64
  19. package/lib/cjs/IModelApp.js.map +1 -1
  20. package/lib/cjs/IModelConnection.d.ts +4 -1
  21. package/lib/cjs/IModelConnection.d.ts.map +1 -1
  22. package/lib/cjs/IModelConnection.js +24 -21
  23. package/lib/cjs/IModelConnection.js.map +1 -1
  24. package/lib/cjs/IModelRoutingContext.d.ts +0 -3
  25. package/lib/cjs/IModelRoutingContext.d.ts.map +1 -1
  26. package/lib/cjs/IModelRoutingContext.js +5 -4
  27. package/lib/cjs/IModelRoutingContext.js.map +1 -1
  28. package/lib/cjs/IpcApp.d.ts.map +1 -1
  29. package/lib/cjs/IpcApp.js +4 -3
  30. package/lib/cjs/IpcApp.js.map +1 -1
  31. package/lib/cjs/LocalhostIpcApp.js +1 -1
  32. package/lib/cjs/LocalhostIpcApp.js.map +1 -1
  33. package/lib/cjs/NativeApp.js +15 -17
  34. package/lib/cjs/NativeApp.js.map +1 -1
  35. package/lib/cjs/NativeAppLogger.js +1 -1
  36. package/lib/cjs/NativeAppLogger.js.map +1 -1
  37. package/lib/cjs/NoRenderApp.js +1 -1
  38. package/lib/cjs/NoRenderApp.js.map +1 -1
  39. package/lib/cjs/RealityDataSourceTilesetUrlImpl.d.ts +6 -1
  40. package/lib/cjs/RealityDataSourceTilesetUrlImpl.d.ts.map +1 -1
  41. package/lib/cjs/RealityDataSourceTilesetUrlImpl.js +14 -2
  42. package/lib/cjs/RealityDataSourceTilesetUrlImpl.js.map +1 -1
  43. package/lib/cjs/SelectionSet.d.ts +84 -35
  44. package/lib/cjs/SelectionSet.d.ts.map +1 -1
  45. package/lib/cjs/SelectionSet.js +419 -163
  46. package/lib/cjs/SelectionSet.js.map +1 -1
  47. package/lib/cjs/Sprites.js +1 -1
  48. package/lib/cjs/Sprites.js.map +1 -1
  49. package/lib/cjs/ViewCreator2d.js +3 -3
  50. package/lib/cjs/ViewCreator2d.js.map +1 -1
  51. package/lib/cjs/ViewGlobalLocation.js +5 -5
  52. package/lib/cjs/ViewGlobalLocation.js.map +1 -1
  53. package/lib/cjs/ViewState.js +2 -2
  54. package/lib/cjs/ViewState.js.map +1 -1
  55. package/lib/cjs/ViewingSpace.js +9 -9
  56. package/lib/cjs/ViewingSpace.js.map +1 -1
  57. package/lib/cjs/Viewport.js +41 -41
  58. package/lib/cjs/Viewport.js.map +1 -1
  59. package/lib/cjs/common/imdl/ImdlSchema.d.ts +4 -0
  60. package/lib/cjs/common/imdl/ImdlSchema.d.ts.map +1 -1
  61. package/lib/cjs/common/imdl/ImdlSchema.js.map +1 -1
  62. package/lib/cjs/common/imdl/ParseImdlDocument.d.ts +1 -1
  63. package/lib/cjs/common/imdl/ParseImdlDocument.d.ts.map +1 -1
  64. package/lib/cjs/common/imdl/ParseImdlDocument.js +80 -7
  65. package/lib/cjs/common/imdl/ParseImdlDocument.js.map +1 -1
  66. package/lib/cjs/common/internal/render/DisplayParams.js +1 -1
  67. package/lib/cjs/common/internal/render/DisplayParams.js.map +1 -1
  68. package/lib/cjs/common/internal/render/GraphicDescriptionBuilderImpl.js +1 -1
  69. package/lib/cjs/common/internal/render/GraphicDescriptionBuilderImpl.js.map +1 -1
  70. package/lib/cjs/common/internal/render/GraphicDescriptionContextImpl.js +1 -1
  71. package/lib/cjs/common/internal/render/GraphicDescriptionContextImpl.js.map +1 -1
  72. package/lib/cjs/common/internal/render/MeshPrimitives.js +1 -1
  73. package/lib/cjs/common/internal/render/MeshPrimitives.js.map +1 -1
  74. package/lib/cjs/internal/render/PrimitiveBuilder.js +1 -1
  75. package/lib/cjs/internal/render/PrimitiveBuilder.js.map +1 -1
  76. package/lib/cjs/internal/render/RenderInstancesParamsImpl.js +1 -1
  77. package/lib/cjs/internal/render/RenderInstancesParamsImpl.js.map +1 -1
  78. package/lib/cjs/render/MockRender.js +3 -3
  79. package/lib/cjs/render/MockRender.js.map +1 -1
  80. package/lib/cjs/render/webgl/BackgroundMapDrape.js +1 -1
  81. package/lib/cjs/render/webgl/BackgroundMapDrape.js.map +1 -1
  82. package/lib/cjs/render/webgl/BatchState.js +1 -1
  83. package/lib/cjs/render/webgl/BatchState.js.map +1 -1
  84. package/lib/cjs/render/webgl/ColorInfo.js +2 -2
  85. package/lib/cjs/render/webgl/ColorInfo.js.map +1 -1
  86. package/lib/cjs/render/webgl/Diagnostics.js +4 -4
  87. package/lib/cjs/render/webgl/Diagnostics.js.map +1 -1
  88. package/lib/cjs/render/webgl/DrawCommand.js +4 -4
  89. package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
  90. package/lib/cjs/render/webgl/IModelFrameLifecycle.js +4 -4
  91. package/lib/cjs/render/webgl/IModelFrameLifecycle.js.map +1 -1
  92. package/lib/cjs/render/webgl/InstancedGeometry.js +3 -3
  93. package/lib/cjs/render/webgl/InstancedGeometry.js.map +1 -1
  94. package/lib/cjs/render/webgl/Material.js +4 -4
  95. package/lib/cjs/render/webgl/Material.js.map +1 -1
  96. package/lib/cjs/render/webgl/PlanarClassifier.js +1 -1
  97. package/lib/cjs/render/webgl/PlanarClassifier.js.map +1 -1
  98. package/lib/cjs/render/webgl/PlanarTextureProjection.js +1 -1
  99. package/lib/cjs/render/webgl/PlanarTextureProjection.js.map +1 -1
  100. package/lib/cjs/render/webgl/RenderState.js +1 -1
  101. package/lib/cjs/render/webgl/RenderState.js.map +1 -1
  102. package/lib/cjs/render/webgl/Target.js +1 -1
  103. package/lib/cjs/render/webgl/Target.js.map +1 -1
  104. package/lib/cjs/render/webgl/Technique.js +39 -39
  105. package/lib/cjs/render/webgl/Technique.js.map +1 -1
  106. package/lib/cjs/render/webgl/TechniqueFlags.js +1 -1
  107. package/lib/cjs/render/webgl/TechniqueFlags.js.map +1 -1
  108. package/lib/cjs/render/webgl/Texture.js +3 -3
  109. package/lib/cjs/render/webgl/Texture.js.map +1 -1
  110. package/lib/cjs/tile/CesiumAssetProvider.js +1 -1
  111. package/lib/cjs/tile/CesiumAssetProvider.js.map +1 -1
  112. package/lib/cjs/tile/GltfReader.d.ts +6 -1
  113. package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
  114. package/lib/cjs/tile/GltfReader.js +79 -2
  115. package/lib/cjs/tile/GltfReader.js.map +1 -1
  116. package/lib/cjs/tile/ImdlParser.js +2 -2
  117. package/lib/cjs/tile/ImdlParser.js.map +1 -1
  118. package/lib/cjs/tile/ImdlReader.js +1 -1
  119. package/lib/cjs/tile/ImdlReader.js.map +1 -1
  120. package/lib/cjs/tile/MeshoptCompression.d.ts +9 -0
  121. package/lib/cjs/tile/MeshoptCompression.d.ts.map +1 -1
  122. package/lib/cjs/tile/MeshoptCompression.js +98 -66
  123. package/lib/cjs/tile/MeshoptCompression.js.map +1 -1
  124. package/lib/cjs/tile/map/ArcGISTileMap.js +1 -1
  125. package/lib/cjs/tile/map/ArcGISTileMap.js.map +1 -1
  126. package/lib/cjs/tile/map/ArcGisUtilities.js +1 -1
  127. package/lib/cjs/tile/map/ArcGisUtilities.js.map +1 -1
  128. package/lib/cjs/tile/map/CesiumTerrainProvider.js +6 -6
  129. package/lib/cjs/tile/map/CesiumTerrainProvider.js.map +1 -1
  130. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  131. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +2 -2
  132. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  133. package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.d.ts.map +1 -1
  134. package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.js +5 -2
  135. package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
  136. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts.map +1 -1
  137. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +2 -2
  138. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  139. package/lib/cjs/tile/map/ImageryTileTree.js +2 -2
  140. package/lib/cjs/tile/map/ImageryTileTree.js.map +1 -1
  141. package/lib/cjs/tile/map/MapLayerImageryFormats.js +7 -7
  142. package/lib/cjs/tile/map/MapLayerImageryFormats.js.map +1 -1
  143. package/lib/cjs/tile/map/MapTile.js +8 -8
  144. package/lib/cjs/tile/map/MapTile.js.map +1 -1
  145. package/lib/cjs/tile/map/MapTileAvailability.js +1 -1
  146. package/lib/cjs/tile/map/MapTileAvailability.js.map +1 -1
  147. package/lib/cjs/tile/map/MapTileTree.js +9 -9
  148. package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
  149. package/lib/cjs/tile/map/MapTilingScheme.js +1 -1
  150. package/lib/cjs/tile/map/MapTilingScheme.js.map +1 -1
  151. package/lib/cjs/tile/map/WmsCapabilities.js +2 -2
  152. package/lib/cjs/tile/map/WmsCapabilities.js.map +1 -1
  153. package/lib/cjs/tile/map/WmtsCapabilities.js +1 -1
  154. package/lib/cjs/tile/map/WmtsCapabilities.js.map +1 -1
  155. package/lib/cjs/tools/AccuDrawTool.d.ts +1 -0
  156. package/lib/cjs/tools/AccuDrawTool.d.ts.map +1 -1
  157. package/lib/cjs/tools/AccuDrawTool.js +22 -21
  158. package/lib/cjs/tools/AccuDrawTool.js.map +1 -1
  159. package/lib/cjs/tools/ClipViewTool.js +40 -40
  160. package/lib/cjs/tools/ClipViewTool.js.map +1 -1
  161. package/lib/cjs/tools/EditManipulator.js +2 -2
  162. package/lib/cjs/tools/EditManipulator.js.map +1 -1
  163. package/lib/cjs/tools/ElementSetTool.d.ts.map +1 -1
  164. package/lib/cjs/tools/ElementSetTool.js +11 -4
  165. package/lib/cjs/tools/ElementSetTool.js.map +1 -1
  166. package/lib/cjs/tools/IdleTool.js +2 -2
  167. package/lib/cjs/tools/IdleTool.js.map +1 -1
  168. package/lib/cjs/tools/MeasureTool.d.ts.map +1 -1
  169. package/lib/cjs/tools/MeasureTool.js +39 -39
  170. package/lib/cjs/tools/MeasureTool.js.map +1 -1
  171. package/lib/cjs/tools/SelectTool.js +7 -7
  172. package/lib/cjs/tools/SelectTool.js.map +1 -1
  173. package/lib/cjs/tools/Tool.js +10 -10
  174. package/lib/cjs/tools/Tool.js.map +1 -1
  175. package/lib/cjs/tools/ToolAdmin.d.ts.map +1 -1
  176. package/lib/cjs/tools/ToolAdmin.js +36 -24
  177. package/lib/cjs/tools/ToolAdmin.js.map +1 -1
  178. package/lib/cjs/tools/ToolAssistance.js +19 -19
  179. package/lib/cjs/tools/ToolAssistance.js.map +1 -1
  180. package/lib/cjs/tools/ToolSettings.js +63 -63
  181. package/lib/cjs/tools/ToolSettings.js.map +1 -1
  182. package/lib/cjs/tools/ViewTool.js +37 -37
  183. package/lib/cjs/tools/ViewTool.js.map +1 -1
  184. package/lib/cjs/workers/ImdlParser/Worker.js +2 -2
  185. package/lib/cjs/workers/ImdlParser/Worker.js.map +1 -1
  186. package/lib/esm/AccuDraw.d.ts +63 -8
  187. package/lib/esm/AccuDraw.d.ts.map +1 -1
  188. package/lib/esm/AccuDraw.js +119 -17
  189. package/lib/esm/AccuDraw.js.map +1 -1
  190. package/lib/esm/ApproximateTerrainHeights.js +1 -1
  191. package/lib/esm/ApproximateTerrainHeights.js.map +1 -1
  192. package/lib/esm/BackgroundMapGeometry.js +5 -5
  193. package/lib/esm/BackgroundMapGeometry.js.map +1 -1
  194. package/lib/esm/BriefcaseTxns.d.ts +2 -2
  195. package/lib/esm/BriefcaseTxns.d.ts.map +1 -1
  196. package/lib/esm/BriefcaseTxns.js.map +1 -1
  197. package/lib/esm/DrawingViewState.js +9 -9
  198. package/lib/esm/DrawingViewState.js.map +1 -1
  199. package/lib/esm/GraphicalEditingScope.js +5 -5
  200. package/lib/esm/GraphicalEditingScope.js.map +1 -1
  201. package/lib/esm/IModelApp.d.ts.map +1 -1
  202. package/lib/esm/IModelApp.js +63 -65
  203. package/lib/esm/IModelApp.js.map +1 -1
  204. package/lib/esm/IModelConnection.d.ts +4 -1
  205. package/lib/esm/IModelConnection.d.ts.map +1 -1
  206. package/lib/esm/IModelConnection.js +20 -17
  207. package/lib/esm/IModelConnection.js.map +1 -1
  208. package/lib/esm/IModelRoutingContext.d.ts +0 -3
  209. package/lib/esm/IModelRoutingContext.d.ts.map +1 -1
  210. package/lib/esm/IModelRoutingContext.js +3 -2
  211. package/lib/esm/IModelRoutingContext.js.map +1 -1
  212. package/lib/esm/IpcApp.d.ts.map +1 -1
  213. package/lib/esm/IpcApp.js +4 -3
  214. package/lib/esm/IpcApp.js.map +1 -1
  215. package/lib/esm/LocalhostIpcApp.js +1 -1
  216. package/lib/esm/LocalhostIpcApp.js.map +1 -1
  217. package/lib/esm/NativeApp.js +15 -17
  218. package/lib/esm/NativeApp.js.map +1 -1
  219. package/lib/esm/NativeAppLogger.js +1 -1
  220. package/lib/esm/NativeAppLogger.js.map +1 -1
  221. package/lib/esm/NoRenderApp.js +1 -1
  222. package/lib/esm/NoRenderApp.js.map +1 -1
  223. package/lib/esm/RealityDataSourceTilesetUrlImpl.d.ts +6 -1
  224. package/lib/esm/RealityDataSourceTilesetUrlImpl.d.ts.map +1 -1
  225. package/lib/esm/RealityDataSourceTilesetUrlImpl.js +14 -2
  226. package/lib/esm/RealityDataSourceTilesetUrlImpl.js.map +1 -1
  227. package/lib/esm/SelectionSet.d.ts +84 -35
  228. package/lib/esm/SelectionSet.d.ts.map +1 -1
  229. package/lib/esm/SelectionSet.js +418 -162
  230. package/lib/esm/SelectionSet.js.map +1 -1
  231. package/lib/esm/Sprites.js +1 -1
  232. package/lib/esm/Sprites.js.map +1 -1
  233. package/lib/esm/ViewCreator2d.js +3 -3
  234. package/lib/esm/ViewCreator2d.js.map +1 -1
  235. package/lib/esm/ViewGlobalLocation.js +5 -5
  236. package/lib/esm/ViewGlobalLocation.js.map +1 -1
  237. package/lib/esm/ViewState.js +2 -2
  238. package/lib/esm/ViewState.js.map +1 -1
  239. package/lib/esm/ViewingSpace.js +9 -9
  240. package/lib/esm/ViewingSpace.js.map +1 -1
  241. package/lib/esm/Viewport.js +41 -41
  242. package/lib/esm/Viewport.js.map +1 -1
  243. package/lib/esm/common/imdl/ImdlSchema.d.ts +4 -0
  244. package/lib/esm/common/imdl/ImdlSchema.d.ts.map +1 -1
  245. package/lib/esm/common/imdl/ImdlSchema.js.map +1 -1
  246. package/lib/esm/common/imdl/ParseImdlDocument.d.ts +1 -1
  247. package/lib/esm/common/imdl/ParseImdlDocument.d.ts.map +1 -1
  248. package/lib/esm/common/imdl/ParseImdlDocument.js +80 -7
  249. package/lib/esm/common/imdl/ParseImdlDocument.js.map +1 -1
  250. package/lib/esm/common/internal/render/DisplayParams.js +1 -1
  251. package/lib/esm/common/internal/render/DisplayParams.js.map +1 -1
  252. package/lib/esm/common/internal/render/GraphicDescriptionBuilderImpl.js +1 -1
  253. package/lib/esm/common/internal/render/GraphicDescriptionBuilderImpl.js.map +1 -1
  254. package/lib/esm/common/internal/render/GraphicDescriptionContextImpl.js +1 -1
  255. package/lib/esm/common/internal/render/GraphicDescriptionContextImpl.js.map +1 -1
  256. package/lib/esm/common/internal/render/MeshPrimitives.js +2 -2
  257. package/lib/esm/common/internal/render/MeshPrimitives.js.map +1 -1
  258. package/lib/esm/internal/render/PrimitiveBuilder.js +1 -1
  259. package/lib/esm/internal/render/PrimitiveBuilder.js.map +1 -1
  260. package/lib/esm/internal/render/RenderInstancesParamsImpl.js +1 -1
  261. package/lib/esm/internal/render/RenderInstancesParamsImpl.js.map +1 -1
  262. package/lib/esm/render/MockRender.js +3 -3
  263. package/lib/esm/render/MockRender.js.map +1 -1
  264. package/lib/esm/render/webgl/BackgroundMapDrape.js +1 -1
  265. package/lib/esm/render/webgl/BackgroundMapDrape.js.map +1 -1
  266. package/lib/esm/render/webgl/BatchState.js +1 -1
  267. package/lib/esm/render/webgl/BatchState.js.map +1 -1
  268. package/lib/esm/render/webgl/ColorInfo.js +2 -2
  269. package/lib/esm/render/webgl/ColorInfo.js.map +1 -1
  270. package/lib/esm/render/webgl/Diagnostics.js +4 -4
  271. package/lib/esm/render/webgl/Diagnostics.js.map +1 -1
  272. package/lib/esm/render/webgl/DrawCommand.js +4 -4
  273. package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
  274. package/lib/esm/render/webgl/IModelFrameLifecycle.js +4 -4
  275. package/lib/esm/render/webgl/IModelFrameLifecycle.js.map +1 -1
  276. package/lib/esm/render/webgl/InstancedGeometry.js +3 -3
  277. package/lib/esm/render/webgl/InstancedGeometry.js.map +1 -1
  278. package/lib/esm/render/webgl/Material.js +4 -4
  279. package/lib/esm/render/webgl/Material.js.map +1 -1
  280. package/lib/esm/render/webgl/PlanarClassifier.js +1 -1
  281. package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
  282. package/lib/esm/render/webgl/PlanarTextureProjection.js +1 -1
  283. package/lib/esm/render/webgl/PlanarTextureProjection.js.map +1 -1
  284. package/lib/esm/render/webgl/RenderState.js +1 -1
  285. package/lib/esm/render/webgl/RenderState.js.map +1 -1
  286. package/lib/esm/render/webgl/Target.js +1 -1
  287. package/lib/esm/render/webgl/Target.js.map +1 -1
  288. package/lib/esm/render/webgl/Technique.js +39 -39
  289. package/lib/esm/render/webgl/Technique.js.map +1 -1
  290. package/lib/esm/render/webgl/TechniqueFlags.js +1 -1
  291. package/lib/esm/render/webgl/TechniqueFlags.js.map +1 -1
  292. package/lib/esm/render/webgl/Texture.js +3 -3
  293. package/lib/esm/render/webgl/Texture.js.map +1 -1
  294. package/lib/esm/tile/CesiumAssetProvider.js +1 -1
  295. package/lib/esm/tile/CesiumAssetProvider.js.map +1 -1
  296. package/lib/esm/tile/GltfReader.d.ts +6 -1
  297. package/lib/esm/tile/GltfReader.d.ts.map +1 -1
  298. package/lib/esm/tile/GltfReader.js +79 -2
  299. package/lib/esm/tile/GltfReader.js.map +1 -1
  300. package/lib/esm/tile/ImdlParser.js +2 -2
  301. package/lib/esm/tile/ImdlParser.js.map +1 -1
  302. package/lib/esm/tile/ImdlReader.js +1 -1
  303. package/lib/esm/tile/ImdlReader.js.map +1 -1
  304. package/lib/esm/tile/MeshoptCompression.d.ts +9 -0
  305. package/lib/esm/tile/MeshoptCompression.d.ts.map +1 -1
  306. package/lib/esm/tile/MeshoptCompression.js +98 -44
  307. package/lib/esm/tile/MeshoptCompression.js.map +1 -1
  308. package/lib/esm/tile/map/ArcGISTileMap.js +1 -1
  309. package/lib/esm/tile/map/ArcGISTileMap.js.map +1 -1
  310. package/lib/esm/tile/map/ArcGisUtilities.js +1 -1
  311. package/lib/esm/tile/map/ArcGisUtilities.js.map +1 -1
  312. package/lib/esm/tile/map/CesiumTerrainProvider.js +6 -6
  313. package/lib/esm/tile/map/CesiumTerrainProvider.js.map +1 -1
  314. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  315. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +2 -2
  316. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  317. package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.d.ts.map +1 -1
  318. package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js +5 -2
  319. package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
  320. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts.map +1 -1
  321. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +2 -2
  322. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  323. package/lib/esm/tile/map/ImageryTileTree.js +2 -2
  324. package/lib/esm/tile/map/ImageryTileTree.js.map +1 -1
  325. package/lib/esm/tile/map/MapLayerImageryFormats.js +7 -7
  326. package/lib/esm/tile/map/MapLayerImageryFormats.js.map +1 -1
  327. package/lib/esm/tile/map/MapTile.js +8 -8
  328. package/lib/esm/tile/map/MapTile.js.map +1 -1
  329. package/lib/esm/tile/map/MapTileAvailability.js +1 -1
  330. package/lib/esm/tile/map/MapTileAvailability.js.map +1 -1
  331. package/lib/esm/tile/map/MapTileTree.js +9 -9
  332. package/lib/esm/tile/map/MapTileTree.js.map +1 -1
  333. package/lib/esm/tile/map/MapTilingScheme.js +1 -1
  334. package/lib/esm/tile/map/MapTilingScheme.js.map +1 -1
  335. package/lib/esm/tile/map/WmsCapabilities.js +2 -2
  336. package/lib/esm/tile/map/WmsCapabilities.js.map +1 -1
  337. package/lib/esm/tile/map/WmtsCapabilities.js +1 -1
  338. package/lib/esm/tile/map/WmtsCapabilities.js.map +1 -1
  339. package/lib/esm/tools/AccuDrawTool.d.ts +1 -0
  340. package/lib/esm/tools/AccuDrawTool.d.ts.map +1 -1
  341. package/lib/esm/tools/AccuDrawTool.js +22 -21
  342. package/lib/esm/tools/AccuDrawTool.js.map +1 -1
  343. package/lib/esm/tools/ClipViewTool.js +40 -40
  344. package/lib/esm/tools/ClipViewTool.js.map +1 -1
  345. package/lib/esm/tools/EditManipulator.js +2 -2
  346. package/lib/esm/tools/EditManipulator.js.map +1 -1
  347. package/lib/esm/tools/ElementSetTool.d.ts.map +1 -1
  348. package/lib/esm/tools/ElementSetTool.js +11 -4
  349. package/lib/esm/tools/ElementSetTool.js.map +1 -1
  350. package/lib/esm/tools/IdleTool.js +2 -2
  351. package/lib/esm/tools/IdleTool.js.map +1 -1
  352. package/lib/esm/tools/MeasureTool.d.ts.map +1 -1
  353. package/lib/esm/tools/MeasureTool.js +40 -40
  354. package/lib/esm/tools/MeasureTool.js.map +1 -1
  355. package/lib/esm/tools/SelectTool.js +7 -7
  356. package/lib/esm/tools/SelectTool.js.map +1 -1
  357. package/lib/esm/tools/Tool.js +10 -10
  358. package/lib/esm/tools/Tool.js.map +1 -1
  359. package/lib/esm/tools/ToolAdmin.d.ts.map +1 -1
  360. package/lib/esm/tools/ToolAdmin.js +36 -24
  361. package/lib/esm/tools/ToolAdmin.js.map +1 -1
  362. package/lib/esm/tools/ToolAssistance.js +19 -19
  363. package/lib/esm/tools/ToolAssistance.js.map +1 -1
  364. package/lib/esm/tools/ToolSettings.js +63 -63
  365. package/lib/esm/tools/ToolSettings.js.map +1 -1
  366. package/lib/esm/tools/ViewTool.js +37 -37
  367. package/lib/esm/tools/ViewTool.js.map +1 -1
  368. package/lib/esm/workers/ImdlParser/Worker.js +2 -2
  369. package/lib/esm/workers/ImdlParser/Worker.js.map +1 -1
  370. package/lib/public/locales/en/CoreTools.json +1 -0
  371. package/lib/public/scripts/parse-imdl-worker.js +1 -1
  372. package/lib/workers/webpack/parse-imdl-worker.js +1 -1
  373. package/package.json +20 -21
@@ -15,10 +15,10 @@ export function acquireImdlParser(args) {
15
15
  const timeline = args.timeline;
16
16
  if (args.noWorker) {
17
17
  return {
18
- parse: async (options) => Promise.resolve(parseImdlDocument({
18
+ parse: async (options) => parseImdlDocument({
19
19
  ...options,
20
20
  timeline,
21
- })),
21
+ }),
22
22
  release: () => undefined,
23
23
  };
24
24
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ImdlParser.js","sourceRoot":"","sources":["../../../src/tile/ImdlParser.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAe,MAAM,uBAAuB,CAAC;AAEvE,OAAO,EAAmD,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAEtH,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAwBzC,gBAAgB;AAChB,MAAM,UAAU,iBAAiB,CAAC,IAA2B;IAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC/B,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,OAAO;YACL,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC;gBAC1D,GAAG,OAAO;gBACV,QAAQ;aACT,CAAC,CAAC;YACH,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;SACzB,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACnB,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,MAAM,GAAG,iBAAiB,CAAkB,GAAG,SAAS,CAAC,UAAU,8BAA8B,CAAC,CAAC;YACzG,aAAa,GAAG;gBACd,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACtE,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;aACzB,CAAC;QACJ,CAAC;QAED,OAAO,aAAa,CAAC;IACvB,CAAC;IAED,IAAI,MAAM,GAAG,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrD,IAAI,CAAC,MAAM;QACT,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE1F,MAAM,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;IAC7B,EAAE,MAAM,CAAC,QAAQ,CAAC;IAClB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,IAAI,aAAqC,CAAC;AAE1C,MAAM,kBAAkB;IAKtB,YAAmB,QAAsB;QAJlC,aAAQ,GAAG,CAAC,CAAC;QAKlB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,OAAO,GAAG,iBAAiB,CAAkB,GAAG,SAAS,CAAC,UAAU,8BAA8B,CAAC,CAAC;QAEzG,mEAAmE;QACnE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9C,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,OAA0B;QAC3C,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5D,CAAC;IAEM,OAAO;QACZ,MAAM,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QAC1B,EAAE,IAAI,CAAC,QAAQ,CAAC;QAChB,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YACxB,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC5C,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;CACF;AAED,MAAM,oBAAoB,GAAG,IAAI,UAAU,CAAmC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;IACzF,IAAI,GAAG,YAAY,cAAc,CAAC,aAAa;QAC7C,OAAO,GAAG,YAAY,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE/E,OAAO,GAAG,YAAY,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvE,CAAC,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { assert, Dictionary } from \"@itwin/core-bentley\";\r\nimport { RenderSchedule } from \"@itwin/core-common\";\r\nimport { createWorkerProxy, WorkerProxy } from \"../common/WorkerProxy\";\r\nimport { ImdlModel } from \"../common/imdl/ImdlModel\";\r\nimport { ImdlParseError, ImdlParserOptions, ImdlTimeline, parseImdlDocument } from \"../common/imdl/ParseImdlDocument\";\r\nimport { ParseImdlWorker } from \"../workers/ImdlParser/Worker\";\r\nimport { IModelApp } from \"../IModelApp\";\r\n\r\n/** An object that can parse binary iMdl content into an iMdl document on a worker thread.\r\n * Parsers are reference-counted. Their lifetimes are typically managed by an [[ImdlDecoder]].\r\n * The caller is responsible for invoking [[release]] to decrement the reference count when they are finished using the parsing.\r\n * @see [[acquireImdlDecoder]] to acquire a decoder that uses a parser internally.\r\n * @see [[acquireImdlParser]] to obtain a parser directly (but you probably don't need to do that).\r\n * @internal\r\n */\r\nexport interface ImdlParser {\r\n parse(options: ImdlParserOptions): Promise<ImdlModel.Document | ImdlParseError>;\r\n release(): void;\r\n}\r\n\r\n/** Arguments supplied to [[acquireImdlParser]].\r\n * @internal\r\n */\r\nexport interface AcquireImdlParserArgs {\r\n timeline?: ImdlTimeline;\r\n noWorker?: boolean;\r\n}\r\n\r\ntype ParserProxy = WorkerProxy<ParseImdlWorker>;\r\n\r\n/** @internal */\r\nexport function acquireImdlParser(args: AcquireImdlParserArgs): ImdlParser {\r\n const timeline = args.timeline;\r\n if (args.noWorker) {\r\n return {\r\n parse: async (options) => Promise.resolve(parseImdlDocument({\r\n ...options,\r\n timeline,\r\n })),\r\n release: () => undefined,\r\n };\r\n }\r\n\r\n if (!args.timeline) {\r\n if (!defaultParser) {\r\n const worker = createWorkerProxy<ParseImdlWorker>(`${IModelApp.publicPath}scripts/parse-imdl-worker.js`);\r\n defaultParser = {\r\n parse: async (options) => worker.parse(options, [options.data.buffer]),\r\n release: () => undefined,\r\n };\r\n }\r\n\r\n return defaultParser;\r\n }\r\n\r\n let parser = parsersWithTimelines.get(args.timeline);\r\n if (!parser)\r\n parsersWithTimelines.set(args.timeline, parser = new ParserWithTimeline(args.timeline));\r\n\r\n assert(parser.refCount >= 0);\r\n ++parser.refCount;\r\n return parser;\r\n}\r\n\r\nlet defaultParser: ImdlParser | undefined;\r\n\r\nclass ParserWithTimeline implements ImdlParser {\r\n public refCount = 0;\r\n private readonly _timeline: ImdlTimeline;\r\n private readonly _worker: ParserProxy;\r\n\r\n public constructor(timeline: ImdlTimeline) {\r\n this._timeline = timeline;\r\n this._worker = createWorkerProxy<ParseImdlWorker>(`${IModelApp.publicPath}scripts/parse-imdl-worker.js`);\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._worker.setTimeline(timeline.toJSON());\r\n }\r\n\r\n public async parse(options: ImdlParserOptions) {\r\n return this._worker.parse(options, [options.data.buffer]);\r\n }\r\n\r\n public release(): void {\r\n assert(this.refCount > 0);\r\n --this.refCount;\r\n if (this.refCount === 0) {\r\n parsersWithTimelines.delete(this._timeline);\r\n this._worker.terminate();\r\n }\r\n }\r\n}\r\n\r\nconst parsersWithTimelines = new Dictionary<ImdlTimeline, ParserWithTimeline>((lhs, rhs) => {\r\n if (lhs instanceof RenderSchedule.ModelTimeline)\r\n return rhs instanceof RenderSchedule.ModelTimeline ? lhs.compareTo(rhs) : -1;\r\n\r\n return rhs instanceof RenderSchedule.Script ? lhs.compareTo(rhs) : 1;\r\n});\r\n"]}
1
+ {"version":3,"file":"ImdlParser.js","sourceRoot":"","sources":["../../../src/tile/ImdlParser.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { assert, Dictionary } from \"@itwin/core-bentley\";\r\nimport { RenderSchedule } from \"@itwin/core-common\";\r\nimport { createWorkerProxy, WorkerProxy } from \"../common/WorkerProxy\";\r\nimport { ImdlModel } from \"../common/imdl/ImdlModel\";\r\nimport { ImdlParseError, ImdlParserOptions, ImdlTimeline, parseImdlDocument } from \"../common/imdl/ParseImdlDocument\";\r\nimport { ParseImdlWorker } from \"../workers/ImdlParser/Worker\";\r\nimport { IModelApp } from \"../IModelApp\";\r\n\r\n/** An object that can parse binary iMdl content into an iMdl document on a worker thread.\r\n * Parsers are reference-counted. Their lifetimes are typically managed by an [[ImdlDecoder]].\r\n * The caller is responsible for invoking [[release]] to decrement the reference count when they are finished using the parsing.\r\n * @see [[acquireImdlDecoder]] to acquire a decoder that uses a parser internally.\r\n * @see [[acquireImdlParser]] to obtain a parser directly (but you probably don't need to do that).\r\n * @internal\r\n */\r\nexport interface ImdlParser {\r\n parse(options: ImdlParserOptions): Promise<ImdlModel.Document | ImdlParseError>;\r\n release(): void;\r\n}\r\n\r\n/** Arguments supplied to [[acquireImdlParser]].\r\n * @internal\r\n */\r\nexport interface AcquireImdlParserArgs {\r\n timeline?: ImdlTimeline;\r\n noWorker?: boolean;\r\n}\r\n\r\ntype ParserProxy = WorkerProxy<ParseImdlWorker>;\r\n\r\n/** @internal */\r\nexport function acquireImdlParser(args: AcquireImdlParserArgs): ImdlParser {\r\n const timeline = args.timeline;\r\n if (args.noWorker) {\r\n return {\r\n parse: async (options) => parseImdlDocument({\r\n ...options,\r\n timeline,\r\n }),\r\n release: () => undefined,\r\n };\r\n }\r\n\r\n if (!args.timeline) {\r\n if (!defaultParser) {\r\n const worker = createWorkerProxy<ParseImdlWorker>(`${IModelApp.publicPath}scripts/parse-imdl-worker.js`);\r\n defaultParser = {\r\n parse: async (options) => worker.parse(options, [options.data.buffer]),\r\n release: () => undefined,\r\n };\r\n }\r\n\r\n return defaultParser;\r\n }\r\n\r\n let parser = parsersWithTimelines.get(args.timeline);\r\n if (!parser)\r\n parsersWithTimelines.set(args.timeline, parser = new ParserWithTimeline(args.timeline));\r\n\r\n assert(parser.refCount >= 0);\r\n ++parser.refCount;\r\n return parser;\r\n}\r\n\r\nlet defaultParser: ImdlParser | undefined;\r\n\r\nclass ParserWithTimeline implements ImdlParser {\r\n public refCount = 0;\r\n private readonly _timeline: ImdlTimeline;\r\n private readonly _worker: ParserProxy;\r\n\r\n public constructor(timeline: ImdlTimeline) {\r\n this._timeline = timeline;\r\n this._worker = createWorkerProxy<ParseImdlWorker>(`${IModelApp.publicPath}scripts/parse-imdl-worker.js`);\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._worker.setTimeline(timeline.toJSON());\r\n }\r\n\r\n public async parse(options: ImdlParserOptions) {\r\n return this._worker.parse(options, [options.data.buffer]);\r\n }\r\n\r\n public release(): void {\r\n assert(this.refCount > 0);\r\n --this.refCount;\r\n if (this.refCount === 0) {\r\n parsersWithTimelines.delete(this._timeline);\r\n this._worker.terminate();\r\n }\r\n }\r\n}\r\n\r\nconst parsersWithTimelines = new Dictionary<ImdlTimeline, ParserWithTimeline>((lhs, rhs) => {\r\n if (lhs instanceof RenderSchedule.ModelTimeline)\r\n return rhs instanceof RenderSchedule.ModelTimeline ? lhs.compareTo(rhs) : -1;\r\n\r\n return rhs instanceof RenderSchedule.Script ? lhs.compareTo(rhs) : 1;\r\n});\r\n"]}
@@ -60,7 +60,7 @@ export async function readImdlContent(args) {
60
60
  createUntransformedRootNode: args.containsTransformNodes,
61
61
  modelGroups: args.modelGroups,
62
62
  };
63
- const document = args.parseDocument ? (await args.parseDocument(parseOpts)) : parseImdlDocument({ ...parseOpts, timeline: args.timeline });
63
+ const document = args.parseDocument ? (await args.parseDocument(parseOpts)) : await parseImdlDocument({ ...parseOpts, timeline: args.timeline });
64
64
  if (isCanceled())
65
65
  return { isLeaf: true, readStatus: TileReadStatus.Canceled };
66
66
  else if (typeof document === "number")
@@ -1 +1 @@
1
- {"version":3,"file":"ImdlReader.js","sourceRoot":"","sources":["../../../src/tile/ImdlReader.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAuB,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EACL,SAAS,EAAE,4BAA4B,EAAE,aAAa,EAAE,cAAc,GACvE,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAIxD,OAAO,EAAE,mBAAmB,EAAmD,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC3I,OAAO,EAAE,kBAAkB,EAAqB,MAAM,YAAY,CAAC;AAQnE;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,KAAiB,EAAE,MAAwB,EAAE,OAAmB,EAAE,IAAa,EAAE,OAA8B;IACvJ,MAAM,MAAM,GAAG,UAAU,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;QAC/B,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO;QACtC,MAAM,EAAE,SAAS,CAAC,YAAY;KAC/B,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;IACnC,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC;AAwBD,gBAAgB;AAChB,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAA+H;IACnK,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IACpD,IAAI,OAAO,CAAC;IACZ,IAAI,CAAC;QACH,OAAO,GAAG,4BAA4B,CAAC;YACrC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI;YAChB,OAAO,EAAE,SAAS,CAAC,SAAS;YAC5B,kBAAkB,EAAE,SAAS,CAAC,gBAAgB,KAAK,IAAI,CAAC,IAAI;YAC5D,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,YAAY,aAAa;YAC5B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;;YAEnD,MAAM,CAAC,CAAC;IACZ,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACpB,MAAM,SAAS,GAAsB;QACnC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAClD,YAAY,EAAE,IAAI,CAAC,OAAO;QAC1B,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,kBAAkB,EAAE,SAAS,CAAC,YAAY,CAAC,cAAc;QACzD,SAAS,EAAE,KAAK,KAAK,IAAI,CAAC,SAAS;QACnC,2BAA2B,EAAE,IAAI,CAAC,sBAAsB;QACxD,WAAW,EAAE,IAAI,CAAC,WAAW;KAC9B,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,EAAE,GAAG,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC3I,IAAI,UAAU,EAAE;QACd,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,cAAc,CAAC,QAAQ,EAAE,CAAC;SAC1D,IAAI,OAAO,QAAQ,KAAK,QAAQ;QACnC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;IAEhD,IAAI,OAAO,GAAG,MAAM,kBAAkB,CAAC;QACrC,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,QAAQ;QACR,UAAU,EAAE,IAAI,CAAC,UAAU;KAC5B,CAAC,CAAC;IAEH,IAAI,UAAU,EAAE;QACd,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,cAAc,CAAC,QAAQ,EAAE,CAAC;IAE/D,IAAI,OAAO,IAAI,KAAK,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;QACtC,MAAM,YAAY,GAAG,mBAAmB,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9E,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/F,CAAC;IAED,IAAI,OAAO,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;QAClC,MAAM,SAAS,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC;QAC1C,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACvB,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACnH,CAAC;IAED,OAAO;QACL,UAAU,EAAE,cAAc,CAAC,OAAO;QAClC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,YAAY,EAAE,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY;QAC5E,OAAO;QACP,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;KAC7C,CAAC;AACJ,CAAC;AAOD,gBAAgB;AAChB,MAAM,KAAW,UAAU,CAM1B;AAND,WAAiB,UAAU;IACzB,SAAgB,MAAM,CAAC,IAA0B;QAC/C,OAAO;YACL,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC;SACxC,CAAC;IACJ,CAAC;IAJe,iBAAM,SAIrB,CAAA;AACH,CAAC,EANgB,UAAU,KAAV,UAAU,QAM1B","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { ByteStream, Id64Set, Id64String } from \"@itwin/core-bentley\";\r\nimport { Point3d, Transform } from \"@itwin/core-geometry\";\r\nimport {\r\n BatchType, decodeTileContentDescription, TileReadError, TileReadStatus,\r\n} from \"@itwin/core-common\";\r\nimport { IModelApp } from \"../IModelApp\";\r\nimport { IModelConnection } from \"../IModelConnection\";\r\nimport { GraphicBranch } from \"../render/GraphicBranch\";\r\nimport { RenderGraphic } from \"../render/RenderGraphic\";\r\nimport { RenderSystem } from \"../render/RenderSystem\";\r\nimport { ImdlModel } from \"../common/imdl/ImdlModel\";\r\nimport { convertFeatureTable, ImdlParseError, ImdlParserOptions, ImdlTimeline, parseImdlDocument } from \"../common/imdl/ParseImdlDocument\";\r\nimport { decodeImdlGraphics, IModelTileContent } from \"./internal\";\r\nimport { BatchOptions } from \"../common/render/BatchOptions\";\r\n\r\n/** @internal */\r\nexport interface ImdlReaderResult extends IModelTileContent {\r\n readStatus: TileReadStatus;\r\n}\r\n\r\n/** Convert the byte array returned by [[TileAdmin.requestElementGraphics]] into a [[RenderGraphic]].\r\n * @param bytes The binary graphics data obtained from `requestElementGraphics`.\r\n * @param iModel The iModel with which the graphics are associated.\r\n * @param modelId The Id of the [[GeometricModelState]] with which the graphics are associated. Can be an invalid Id.\r\n * @param is3d True if the graphics are 3d.\r\n * @param options Options customizing how [Feature]($common)s within the graphic can be resymbolized; or false if you don't want to produce a batch.\r\n * @public\r\n * @extensions\r\n */\r\nexport async function readElementGraphics(bytes: Uint8Array, iModel: IModelConnection, modelId: Id64String, is3d: boolean, options?: BatchOptions | false): Promise<RenderGraphic | undefined> {\r\n const stream = ByteStream.fromUint8Array(bytes);\r\n const reader = ImdlReader.create({\r\n stream, iModel, modelId, is3d, options,\r\n system: IModelApp.renderSystem,\r\n });\r\n\r\n const result = await reader.read();\r\n return result.graphic;\r\n}\r\n\r\n/** Arguments supplied to [[ImdlReader.create]]\r\n * @internal\r\n */\r\nexport interface ImdlReaderCreateArgs {\r\n stream: ByteStream;\r\n iModel: IModelConnection;\r\n modelId: Id64String;\r\n is3d: boolean;\r\n /** If undefined, the tile's leafness will be deduced by decodeTileContentDescription. */\r\n isLeaf?: boolean;\r\n system: RenderSystem;\r\n type?: BatchType; // default Primary\r\n loadEdges?: boolean; // default true\r\n isCanceled?: () => boolean;\r\n sizeMultiplier?: number;\r\n options?: BatchOptions | false;\r\n containsTransformNodes?: boolean; // default false\r\n /** Supplied if the graphics in the tile are to be split up based on the nodes in the timeline. */\r\n timeline?: ImdlTimeline;\r\n modelGroups?: Id64Set[];\r\n}\r\n\r\n/** @internal */\r\nexport async function readImdlContent(args: ImdlReaderCreateArgs & { parseDocument?: (parseOpts: ImdlParserOptions) => Promise<ImdlModel.Document | ImdlParseError> }): Promise<ImdlReaderResult> {\r\n const isCanceled = args.isCanceled ?? (() => false);\r\n let content;\r\n try {\r\n content = decodeTileContentDescription({\r\n stream: args.stream,\r\n sizeMultiplier: args.sizeMultiplier,\r\n is2d: !args.is3d,\r\n options: IModelApp.tileAdmin,\r\n isVolumeClassifier: BatchType.VolumeClassifier === args.type,\r\n isLeaf: args.isLeaf,\r\n });\r\n } catch (e) {\r\n if (e instanceof TileReadError)\r\n return { isLeaf: true, readStatus: e.errorNumber };\r\n else\r\n throw e;\r\n }\r\n\r\n args.stream.reset();\r\n const parseOpts: ImdlParserOptions = {\r\n data: args.stream.readBytes(0, args.stream.length),\r\n batchModelId: args.modelId,\r\n is3d: args.is3d,\r\n maxVertexTableSize: IModelApp.renderSystem.maxTextureSize,\r\n omitEdges: false === args.loadEdges,\r\n createUntransformedRootNode: args.containsTransformNodes,\r\n modelGroups: args.modelGroups,\r\n };\r\n\r\n const document = args.parseDocument ? (await args.parseDocument(parseOpts)) : parseImdlDocument({ ...parseOpts, timeline: args.timeline });\r\n if (isCanceled())\r\n return { isLeaf: true, readStatus: TileReadStatus.Canceled };\r\n else if (typeof document === \"number\")\r\n return { isLeaf: true, readStatus: document };\r\n\r\n let graphic = await decodeImdlGraphics({\r\n system: args.system,\r\n iModel: args.iModel,\r\n document,\r\n isCanceled: args.isCanceled,\r\n });\r\n\r\n if (isCanceled())\r\n return { isLeaf: true, readStatus: TileReadStatus.Canceled };\r\n\r\n if (graphic && false !== args.options) {\r\n const featureTable = convertFeatureTable(document.featureTable, args.modelId);\r\n graphic = args.system.createBatch(graphic, featureTable, content.contentRange, args.options);\r\n }\r\n\r\n if (graphic && document.rtcCenter) {\r\n const rtcBranch = new GraphicBranch(true);\r\n rtcBranch.add(graphic);\r\n graphic = args.system.createBranch(rtcBranch, Transform.createTranslation(Point3d.fromJSON(document.rtcCenter)));\r\n }\r\n\r\n return {\r\n readStatus: TileReadStatus.Success,\r\n isLeaf: content.isLeaf,\r\n sizeMultiplier: content.sizeMultiplier,\r\n contentRange: content.contentRange.isNull ? undefined : content.contentRange,\r\n graphic,\r\n emptySubRangeMask: content.emptySubRangeMask,\r\n };\r\n}\r\n\r\n/** @internal */\r\nexport interface ImdlReader {\r\n read: () => Promise<ImdlReaderResult>;\r\n}\r\n\r\n/** @internal */\r\nexport namespace ImdlReader {\r\n export function create(args: ImdlReaderCreateArgs): ImdlReader {\r\n return {\r\n read: async () => readImdlContent(args),\r\n };\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ImdlReader.js","sourceRoot":"","sources":["../../../src/tile/ImdlReader.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAuB,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EACL,SAAS,EAAE,4BAA4B,EAAE,aAAa,EAAE,cAAc,GACvE,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAIxD,OAAO,EAAE,mBAAmB,EAAmD,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC3I,OAAO,EAAE,kBAAkB,EAAqB,MAAM,YAAY,CAAC;AAQnE;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,KAAiB,EAAE,MAAwB,EAAE,OAAmB,EAAE,IAAa,EAAE,OAA8B;IACvJ,MAAM,MAAM,GAAG,UAAU,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;QAC/B,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO;QACtC,MAAM,EAAE,SAAS,CAAC,YAAY;KAC/B,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;IACnC,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC;AAwBD,gBAAgB;AAChB,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAA+H;IACnK,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;IACpD,IAAI,OAAO,CAAC;IACZ,IAAI,CAAC;QACH,OAAO,GAAG,4BAA4B,CAAC;YACrC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI;YAChB,OAAO,EAAE,SAAS,CAAC,SAAS;YAC5B,kBAAkB,EAAE,SAAS,CAAC,gBAAgB,KAAK,IAAI,CAAC,IAAI;YAC5D,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,YAAY,aAAa;YAC5B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;;YAEnD,MAAM,CAAC,CAAC;IACZ,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACpB,MAAM,SAAS,GAAsB;QACnC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;QAClD,YAAY,EAAE,IAAI,CAAC,OAAO;QAC1B,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,kBAAkB,EAAE,SAAS,CAAC,YAAY,CAAC,cAAc;QACzD,SAAS,EAAE,KAAK,KAAK,IAAI,CAAC,SAAS;QACnC,2BAA2B,EAAE,IAAI,CAAC,sBAAsB;QACxD,WAAW,EAAE,IAAI,CAAC,WAAW;KAC9B,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,iBAAiB,CAAC,EAAE,GAAG,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IACjJ,IAAI,UAAU,EAAE;QACd,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,cAAc,CAAC,QAAQ,EAAE,CAAC;SAC1D,IAAI,OAAO,QAAQ,KAAK,QAAQ;QACnC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;IAEhD,IAAI,OAAO,GAAG,MAAM,kBAAkB,CAAC;QACrC,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,QAAQ;QACR,UAAU,EAAE,IAAI,CAAC,UAAU;KAC5B,CAAC,CAAC;IAEH,IAAI,UAAU,EAAE;QACd,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,cAAc,CAAC,QAAQ,EAAE,CAAC;IAE/D,IAAI,OAAO,IAAI,KAAK,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;QACtC,MAAM,YAAY,GAAG,mBAAmB,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9E,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/F,CAAC;IAED,IAAI,OAAO,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;QAClC,MAAM,SAAS,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC;QAC1C,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACvB,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,SAAS,CAAC,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACnH,CAAC;IAED,OAAO;QACL,UAAU,EAAE,cAAc,CAAC,OAAO;QAClC,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,YAAY,EAAE,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY;QAC5E,OAAO;QACP,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;KAC7C,CAAC;AACJ,CAAC;AAOD,gBAAgB;AAChB,MAAM,KAAW,UAAU,CAM1B;AAND,WAAiB,UAAU;IACzB,SAAgB,MAAM,CAAC,IAA0B;QAC/C,OAAO;YACL,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC;SACxC,CAAC;IACJ,CAAC;IAJe,iBAAM,SAIrB,CAAA;AACH,CAAC,EANgB,UAAU,KAAV,UAAU,QAM1B","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { ByteStream, Id64Set, Id64String } from \"@itwin/core-bentley\";\r\nimport { Point3d, Transform } from \"@itwin/core-geometry\";\r\nimport {\r\n BatchType, decodeTileContentDescription, TileReadError, TileReadStatus,\r\n} from \"@itwin/core-common\";\r\nimport { IModelApp } from \"../IModelApp\";\r\nimport { IModelConnection } from \"../IModelConnection\";\r\nimport { GraphicBranch } from \"../render/GraphicBranch\";\r\nimport { RenderGraphic } from \"../render/RenderGraphic\";\r\nimport { RenderSystem } from \"../render/RenderSystem\";\r\nimport { ImdlModel } from \"../common/imdl/ImdlModel\";\r\nimport { convertFeatureTable, ImdlParseError, ImdlParserOptions, ImdlTimeline, parseImdlDocument } from \"../common/imdl/ParseImdlDocument\";\r\nimport { decodeImdlGraphics, IModelTileContent } from \"./internal\";\r\nimport { BatchOptions } from \"../common/render/BatchOptions\";\r\n\r\n/** @internal */\r\nexport interface ImdlReaderResult extends IModelTileContent {\r\n readStatus: TileReadStatus;\r\n}\r\n\r\n/** Convert the byte array returned by [[TileAdmin.requestElementGraphics]] into a [[RenderGraphic]].\r\n * @param bytes The binary graphics data obtained from `requestElementGraphics`.\r\n * @param iModel The iModel with which the graphics are associated.\r\n * @param modelId The Id of the [[GeometricModelState]] with which the graphics are associated. Can be an invalid Id.\r\n * @param is3d True if the graphics are 3d.\r\n * @param options Options customizing how [Feature]($common)s within the graphic can be resymbolized; or false if you don't want to produce a batch.\r\n * @public\r\n * @extensions\r\n */\r\nexport async function readElementGraphics(bytes: Uint8Array, iModel: IModelConnection, modelId: Id64String, is3d: boolean, options?: BatchOptions | false): Promise<RenderGraphic | undefined> {\r\n const stream = ByteStream.fromUint8Array(bytes);\r\n const reader = ImdlReader.create({\r\n stream, iModel, modelId, is3d, options,\r\n system: IModelApp.renderSystem,\r\n });\r\n\r\n const result = await reader.read();\r\n return result.graphic;\r\n}\r\n\r\n/** Arguments supplied to [[ImdlReader.create]]\r\n * @internal\r\n */\r\nexport interface ImdlReaderCreateArgs {\r\n stream: ByteStream;\r\n iModel: IModelConnection;\r\n modelId: Id64String;\r\n is3d: boolean;\r\n /** If undefined, the tile's leafness will be deduced by decodeTileContentDescription. */\r\n isLeaf?: boolean;\r\n system: RenderSystem;\r\n type?: BatchType; // default Primary\r\n loadEdges?: boolean; // default true\r\n isCanceled?: () => boolean;\r\n sizeMultiplier?: number;\r\n options?: BatchOptions | false;\r\n containsTransformNodes?: boolean; // default false\r\n /** Supplied if the graphics in the tile are to be split up based on the nodes in the timeline. */\r\n timeline?: ImdlTimeline;\r\n modelGroups?: Id64Set[];\r\n}\r\n\r\n/** @internal */\r\nexport async function readImdlContent(args: ImdlReaderCreateArgs & { parseDocument?: (parseOpts: ImdlParserOptions) => Promise<ImdlModel.Document | ImdlParseError> }): Promise<ImdlReaderResult> {\r\n const isCanceled = args.isCanceled ?? (() => false);\r\n let content;\r\n try {\r\n content = decodeTileContentDescription({\r\n stream: args.stream,\r\n sizeMultiplier: args.sizeMultiplier,\r\n is2d: !args.is3d,\r\n options: IModelApp.tileAdmin,\r\n isVolumeClassifier: BatchType.VolumeClassifier === args.type,\r\n isLeaf: args.isLeaf,\r\n });\r\n } catch (e) {\r\n if (e instanceof TileReadError)\r\n return { isLeaf: true, readStatus: e.errorNumber };\r\n else\r\n throw e;\r\n }\r\n\r\n args.stream.reset();\r\n const parseOpts: ImdlParserOptions = {\r\n data: args.stream.readBytes(0, args.stream.length),\r\n batchModelId: args.modelId,\r\n is3d: args.is3d,\r\n maxVertexTableSize: IModelApp.renderSystem.maxTextureSize,\r\n omitEdges: false === args.loadEdges,\r\n createUntransformedRootNode: args.containsTransformNodes,\r\n modelGroups: args.modelGroups,\r\n };\r\n\r\n const document = args.parseDocument ? (await args.parseDocument(parseOpts)) : await parseImdlDocument({ ...parseOpts, timeline: args.timeline });\r\n if (isCanceled())\r\n return { isLeaf: true, readStatus: TileReadStatus.Canceled };\r\n else if (typeof document === \"number\")\r\n return { isLeaf: true, readStatus: document };\r\n\r\n let graphic = await decodeImdlGraphics({\r\n system: args.system,\r\n iModel: args.iModel,\r\n document,\r\n isCanceled: args.isCanceled,\r\n });\r\n\r\n if (isCanceled())\r\n return { isLeaf: true, readStatus: TileReadStatus.Canceled };\r\n\r\n if (graphic && false !== args.options) {\r\n const featureTable = convertFeatureTable(document.featureTable, args.modelId);\r\n graphic = args.system.createBatch(graphic, featureTable, content.contentRange, args.options);\r\n }\r\n\r\n if (graphic && document.rtcCenter) {\r\n const rtcBranch = new GraphicBranch(true);\r\n rtcBranch.add(graphic);\r\n graphic = args.system.createBranch(rtcBranch, Transform.createTranslation(Point3d.fromJSON(document.rtcCenter)));\r\n }\r\n\r\n return {\r\n readStatus: TileReadStatus.Success,\r\n isLeaf: content.isLeaf,\r\n sizeMultiplier: content.sizeMultiplier,\r\n contentRange: content.contentRange.isNull ? undefined : content.contentRange,\r\n graphic,\r\n emptySubRangeMask: content.emptySubRangeMask,\r\n };\r\n}\r\n\r\n/** @internal */\r\nexport interface ImdlReader {\r\n read: () => Promise<ImdlReaderResult>;\r\n}\r\n\r\n/** @internal */\r\nexport namespace ImdlReader {\r\n export function create(args: ImdlReaderCreateArgs): ImdlReader {\r\n return {\r\n read: async () => readImdlContent(args),\r\n };\r\n }\r\n}\r\n"]}
@@ -2,6 +2,15 @@
2
2
  * @module Tiles
3
3
  */
4
4
  import type { ExtMeshoptCompressionFilter, ExtMeshoptCompressionMode } from "../common/gltf/GltfSchema";
5
+ /** @internal */
6
+ export interface MeshoptDecoder {
7
+ decodeVertexBuffer: (target: Uint8Array, count: number, size: number, source: Uint8Array, filter?: string) => void;
8
+ decodeIndexBuffer: (target: Uint8Array, count: number, size: number, source: Uint8Array) => void;
9
+ decodeIndexSequence: (target: Uint8Array, count: number, size: number, source: Uint8Array) => void;
10
+ decodeGltfBuffer(target: Uint8Array, count: number, size: number, source: Uint8Array, mode: string, filter?: string): void;
11
+ }
12
+ /** @internal */
13
+ export declare function getMeshoptDecoder(): Promise<MeshoptDecoder | undefined>;
5
14
  /** Arguments supplied to decodeMeshoptBuffer.
6
15
  * @internal
7
16
  */
@@ -1 +1 @@
1
- {"version":3,"file":"MeshoptCompression.d.ts","sourceRoot":"","sources":["../../../src/tile/MeshoptCompression.ts"],"names":[],"mappings":"AAIA;;GAEG;AAKH,OAAO,KAAK,EAAE,2BAA2B,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAExG;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,yBAAyB,CAAC;IAChC,MAAM,CAAC,EAAE,2BAA2B,CAAC;CACtC;AA4DD,gBAAgB;AAChB,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAO5H"}
1
+ {"version":3,"file":"MeshoptCompression.d.ts","sourceRoot":"","sources":["../../../src/tile/MeshoptCompression.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,KAAK,EAAE,2BAA2B,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAGxG,gBAAgB;AAChB,MAAM,WAAW,cAAc;IAC7B,kBAAkB,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACnH,iBAAiB,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IACjG,mBAAmB,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IACnG,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5H;AAwGD,gBAAgB;AAChB,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAM7E;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,yBAAyB,CAAC;IAChC,MAAM,CAAC,EAAE,2BAA2B,CAAC;CACtC;AAED,gBAAgB;AAChB,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAS5H"}
@@ -5,62 +5,116 @@
5
5
  /** @packageDocumentation
6
6
  * @module Tiles
7
7
  */
8
- import { assert, Logger } from "@itwin/core-bentley";
8
+ import { Logger } from "@itwin/core-bentley";
9
9
  import { FrontendLoggerCategory } from "../common/FrontendLoggerCategory";
10
- /** Loads and configures the MeshoptDecoder module on demand. */
11
- class Loader {
12
- constructor() {
13
- this._status = "uninitialized";
10
+ ;
11
+ // This is a modified version of https://github.com/zeux/meshoptimizer/blob/master/js/meshopt_decoder.js.
12
+ // The orginial code will load wasm when the module is imported, which seems to upset vitest somehow.
13
+ // This version loads wasm only when a decoder is requested, which only occurs when parsing a compressed tile.
14
+ async function getDecoder() {
15
+ // Built with clang version 16.0.0
16
+ // Built from meshoptimizer 0.20
17
+ const wasmBase = "b9H79Tebbbe8Fv9Gbb9Gvuuuuueu9Giuuub9Geueu9Giuuueuikqbeeedddillviebeoweuec:q;iekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbeY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVbdE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbiL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtblK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbol79IV9Rbrq;d8Yqdbk:yzeHu8Jjjjjbcj;eb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Radz1jjjbhwcj;abad9UhlaicefhodnadTmbalc;WFbGglcjdalcjd6EhDcbhqinaqae9pmeaDaeaq9RaqaDfae6Egkcsfglcl4cifcd4hxdndndndnalc9WGgmTmbcbhPcehsawcjdfhzaohHinaraH9Rax6midnaraHaxfgo9RcK6mbczhlcbhOinalgic9WfgAawcj;cbffhldndndndndnaHaAco4fRbbaOcoG4ciGPlbedibkal9cb83ibalcwf9cb83ibxikalaoRblaoRbbgAco4gCaCciSgCE86bbawcj;cbfaifglcGfaoclfaCfgCRbbaAcl4ciGgXaXciSgXE86bbalcVfaCaXfgCRbbaAcd4ciGgXaXciSgXE86bbalc7faCaXfgCRbbaAciGgAaAciSgAE86bbalctfaCaAfgCRbbaoRbegAco4gXaXciSgXE86bbalc91faCaXfgCRbbaAcl4ciGgXaXciSgXE86bbalc4faCaXfgCRbbaAcd4ciGgXaXciSgXE86bbalc93faCaXfgCRbbaAciGgAaAciSgAE86bbalc94faCaAfgCRbbaoRbdgAco4gXaXciSgXE86bbalc95faCaXfgCRbbaAcl4ciGgXaXciSgXE86bbalc96faCaXfgCRbbaAcd4ciGgXaXciSgXE86bbalc97faCaXfgCRbbaAciGgAaAciSgAE86bbalc98faCaAfgARbbaoRbigoco4gCaCciSgCE86bbalc99faAaCfgARbbaocl4ciGgCaCciSgCE86bbalc9:faAaCfgARbbaocd4ciGgCaCciSgCE86bbalcufaAaCfglRbbaociGgoaociSgoE86bbalaofhoxdkalaoRbwaoRbbgAcl4gCaCcsSgCE86bbawcj;cbfaifglcGfaocwfaCfgCRbbaAcsGgAaAcsSgAE86bbalcVfaCaAfgARbbaoRbegCcl4gXaXcsSgXE86bbalc7faAaXfgARbbaCcsGgCaCcsSgCE86bbalctfaAaCfgARbbaoRbdgCcl4gXaXcsSgXE86bbalc91faAaXfgARbbaCcsGgCaCcsSgCE86bbalc4faAaCfgARbbaoRbigCcl4gXaXcsSgXE86bbalc93faAaXfgARbbaCcsGgCaCcsSgCE86bbalc94faAaCfgARbbaoRblgCcl4gXaXcsSgXE86bbalc95faAaXfgARbbaCcsGgCaCcsSgCE86bbalc96faAaCfgARbbaoRbvgCcl4gXaXcsSgXE86bbalc97faAaXfgARbbaCcsGgCaCcsSgCE86bbalc98faAaCfgARbbaoRbogCcl4gXaXcsSgXE86bbalc99faAaXfgARbbaCcsGgCaCcsSgCE86bbalc9:faAaCfgARbbaoRbrgocl4gCaCcsSgCE86bbalcufaAaCfglRbbaocsGgoaocsSgoE86bbalaofhoxekalao8Pbb83bbalcwfaocwf8Pbb83bbaoczfhokdnaiam9pmbaOcdfhOaiczfhlarao9RcL0mekkaiam6miaoTmidnakTmbawaPfRbbhOawcj;cbfhlazhiakhAinaialRbbgHce4cbaHceG9R7aOfgO86bbaiadfhialcefhlaAcufgAmbkkazcefhzaPcefgPad6hsaohHaPad9hmexvkkcbhoasceGmdxikaoaxad2fhXdnakTmbcbhmcehsawcjdfhCinarao9Rax6miaoTmdaoaxfhoawamfRbbhOawcj;cbfhlaChiakhAinaialRbbgHce4cbaHceG9R7aOfgO86bbaiadfhialcefhlaAcufgAmbkaCcefhCamcefgmad6hsamad9hmbkaXhoxikcbhlcehsinarao9Rax6mdaoTmeaoaxfhoalcefglad6hsadal9hmbkaXhoxdkcbhoasceGTmekc9:hoxikabaqad2fawcjdfakad2z1jjjb8Aawawcjdfakcufad2fadz1jjjb8Aakaqfhqaombkc9:hoxekcbc99arao9Radcaadca0ESEhokavcj;ebf8Kjjjjbaok;xzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecjez:jjjjb8AavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhrcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgDc;Ve0mbavc;abfalaDcu7gPcl4fcsGcitfgsydlhzasydbhHdnaDcsGgDak9pmbavaiaPfcsGcdtfydbaxaDEhsaDThDdndnadcd9hmbabarcetfgPaH87ebaPcdfaz87ebaPclfas87ebxekabarcdtfgPaHBdbaPclfazBdbaPcwfasBdbkaxaDfhxavc;abfalcitfgPasBdbaPazBdlavaicdtfasBdbavc;abfalcefcsGglcitfgPaHBdbaPasBdlaiaDfhialcefhlxdkdndnaDcsSmbamaDfaDc987fcefhmxekaocefhDao8SbbgscFeGhPdndnascu9mmbaDhoxekaocvfhoaPcFbGhPcrhsdninaD8SbbgOcFbGastaPVhPaOcu9kmeaDcefhDascrfgsc8J9hmbxdkkaDcefhokaPce4cbaPceG9R7amfhmkdndnadcd9hmbabarcetfgDaH87ebaDcdfaz87ebaDclfam87ebxekabarcdtfgDaHBdbaDclfazBdbaDcwfamBdbkavc;abfalcitfgDamBdbaDazBdlavaicdtfamBdbavc;abfalcefcsGglcitfgDaHBdbaDamBdlaicefhialcefhlxekdnaDcpe0mbaxcefgOavaiaqaDcsGfRbbgscl49RcsGcdtfydbascz6gPEhDavaias9RcsGcdtfydbaOaPfgzascsGgOEhsaOThOdndnadcd9hmbabarcetfgHax87ebaHcdfaD87ebaHclfas87ebxekabarcdtfgHaxBdbaHclfaDBdbaHcwfasBdbkavaicdtfaxBdbavc;abfalcitfgHaDBdbaHaxBdlavaicefgicsGcdtfaDBdbavc;abfalcefcsGcitfgHasBdbaHaDBdlavaiaPfcsGgicdtfasBdbavc;abfalcdfcsGglcitfgDaxBdbaDasBdlalcefhlaiaOfhiazaOfhxxekaxcbaoRbbgHEgAaDc;:eSgDfhzaHcsGhCaHcl4hXdndnaHcs0mbazcefhOxekazhOavaiaX9RcsGcdtfydbhzkdndnaCmbaOcefhxxekaOhxavaiaH9RcsGcdtfydbhOkdndnaDTmbaocefhDxekaocdfhDao8SbegPcFeGhsdnaPcu9kmbaocofhAascFbGhscrhodninaD8SbbgPcFbGaotasVhsaPcu9kmeaDcefhDaocrfgoc8J9hmbkaAhDxekaDcefhDkasce4cbasceG9R7amfgmhAkdndnaXcsSmbaDhsxekaDcefhsaD8SbbgocFeGhPdnaocu9kmbaDcvfhzaPcFbGhPcrhodninas8SbbgDcFbGaotaPVhPaDcu9kmeascefhsaocrfgoc8J9hmbkazhsxekascefhskaPce4cbaPceG9R7amfgmhzkdndnaCcsSmbashoxekascefhoas8SbbgDcFeGhPdnaDcu9kmbascvfhOaPcFbGhPcrhDdninao8SbbgscFbGaDtaPVhPascu9kmeaocefhoaDcrfgDc8J9hmbkaOhoxekaocefhokaPce4cbaPceG9R7amfgmhOkdndnadcd9hmbabarcetfgDaA87ebaDcdfaz87ebaDclfaO87ebxekabarcdtfgDaABdbaDclfazBdbaDcwfaOBdbkavc;abfalcitfgDazBdbaDaABdlavaicdtfaABdbavc;abfalcefcsGcitfgDaOBdbaDazBdlavaicefgicsGcdtfazBdbavc;abfalcdfcsGcitfgDaABdbaDaOBdlavaiaHcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiarcifgrae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:flevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:Lvoeue99dud99eud99dndnadcl9hmbaeTmeindndnabcdfgd8Sbb:Yab8Sbbgi:Ygl:l:tabcefgv8Sbbgo:Ygr:l:tgwJbb;:9cawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai86bbdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad86bbdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad86bbabclfhbaecufgembxdkkaeTmbindndnabclfgd8Ueb:Yab8Uebgi:Ygl:l:tabcdfgv8Uebgo:Ygr:l:tgwJb;:FSawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai87ebdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad87ebdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad87ebabcwfhbaecufgembkkk;siliui99iue99dnaeTmbcbhiabhlindndnJ;Zl81Zalcof8UebgvciV:Y:vgoal8Ueb:YNgrJb;:FSNJbbbZJbbb:;arJbbbb9GEMgw:lJbbb9p9DTmbaw:OhDxekcjjjj94hDkalclf8Uebhqalcdf8UebhkabaiavcefciGfcetfaD87ebdndnaoak:YNgwJb;:FSNJbbbZJbbb:;awJbbbb9GEMgx:lJbbb9p9DTmbax:Ohkxekcjjjj94hkkabaiavcdfciGfcetfak87ebdndnaoaq:YNgoJb;:FSNJbbbZJbbb:;aoJbbbb9GEMgx:lJbbb9p9DTmbax:Ohqxekcjjjj94hqkabaiavcufciGfcetfaq87ebdndnJbbjZararN:tawawN:taoaoN:tgrJbbbbarJbbbb9GE:rJb;:FSNJbbbZMgr:lJbbb9p9DTmbar:Ohqxekcjjjj94hqkabaiavciGfcetfaq87ebalcwfhlaiclfhiaecufgembkkk9mbdnadcd4ae2gdTmbinababydbgecwtcw91:Yaece91cjjj98Gcjjj;8if::NUdbabclfhbadcufgdmbkkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabkkkebcjwklz9Kbb";
18
+ const wasmSimd = "b9H79TebbbeKl9Gbb9Gvuuuuueu9Giuuub9Geueuikqbbebeedddilve9Weeeviebeoweuec:q;Aekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbdY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVblE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtboK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbrL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbwl79IV9RbDq;b9tqlbzik9:evu8Jjjjjbcz9Rhbcbheincbhdcbhiinabcwfadfaicjuaead4ceGglE86bbaialfhiadcefgdcw9hmbkaec:q:yjjbfai86bbaecitc:q1jjbfab8Piw83ibaecefgecjd9hmbkk;e8JlHud97euo978Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Rad;8qbbcj;abad9UhoaicefhldnadTmbaoc;WFbGgocjdaocjd6EhwcbhDinaDae9pmeawaeaD9RaDawfae6Egqcsfgoc9WGgkci2hxakcethmaocl4cifcd4hPabaDad2fhscbhzdnincbhHalhOcbhAdninaraO9RaP6miavcj;cbfaAak2fhCaOaPfhlcbhidnakc;ab6mbaral9Rc;Gb6mbcbhoinaCaofhidndndndndnaOaoco4fRbbgXciGPlbedibkaipxbbbbbbbbbbbbbbbbpklbxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklbalczfhlkdndndndndnaXcd4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklzxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklzalczfhlkdndndndndnaXcl4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklaxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklaalczfhlkdndndndndnaXco4Plbedibkaipxbbbbbbbbbbbbbbbbpkl8WxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalclfaYpQbfaXc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalcwfaYpQbfaXc:q:yjjbfRbbfhlxekaialpbbbpkl8Walczfhlkaoc;abfhiaocjefak0meaihoaral9Rc;Fb0mbkkdndnaiak9pmbaici4hoinaral9RcK6mdaCaifhXdndndndndnaOaico4fRbbaocoG4ciGPlbedibkaXpxbbbbbbbbbbbbbbbbpklbxikaXalpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaXalpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaXalpbbbpklbalczfhlkaocdfhoaiczfgiak6mbkkalTmbaAcd0hHalhOaAcefgAclSmdxekkcbhlaHceGTmdkdnakTmbavcjdfazfhiavazfpbdbhYcbhXinaiavcj;cbfaXfgopblbgLcep9TaLpxeeeeeeeeeeeeeeeegQp9op9Hp9rgLaoakfpblbg8Acep9Ta8AaQp9op9Hp9rg8ApmbzeHdOiAlCvXoQrLgEaoamfpblbg3cep9Ta3aQp9op9Hp9rg3aoaxfpblbg5cep9Ta5aQp9op9Hp9rg5pmbzeHdOiAlCvXoQrLg8EpmbezHdiOAlvCXorQLgQaQpmbedibedibedibediaYp9UgYp9AdbbaiadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaEa8EpmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwKDYq8AkEx3m5P8Es8FgLa3a5pmwKDYq8AkEx3m5P8Es8Fg8ApmbezHdiOAlvCXorQLgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfhiaXczfgXak6mbkkazclfgzad6mbkasavcjdfaqad2;8qbbavavcjdfaqcufad2fad;8qbbaqaDfhDc9:hoalmexikkc9:hoxekcbc99aral9Radcaadca0ESEhokavcj;kbf8Kjjjjbaokwbz:bjjjbk;tzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecje;8kbavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhrcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgDc;Ve0mbavc;abfalaDcu7gPcl4fcsGcitfgsydlhzasydbhHdnaDcsGgDak9pmbavaiaPfcsGcdtfydbaxaDEhsaDThDdndnadcd9hmbabarcetfgPaH87ebaPcdfaz87ebaPclfas87ebxekabarcdtfgPaHBdbaPclfazBdbaPcwfasBdbkaxaDfhxavc;abfalcitfgPasBdbaPazBdlavaicdtfasBdbavc;abfalcefcsGglcitfgPaHBdbaPasBdlaiaDfhialcefhlxdkdndnaDcsSmbamaDfaDc987fcefhmxekaocefhDao8SbbgscFeGhPdndnascu9mmbaDhoxekaocvfhoaPcFbGhPcrhsdninaD8SbbgOcFbGastaPVhPaOcu9kmeaDcefhDascrfgsc8J9hmbxdkkaDcefhokaPce4cbaPceG9R7amfhmkdndnadcd9hmbabarcetfgDaH87ebaDcdfaz87ebaDclfam87ebxekabarcdtfgDaHBdbaDclfazBdbaDcwfamBdbkavc;abfalcitfgDamBdbaDazBdlavaicdtfamBdbavc;abfalcefcsGglcitfgDaHBdbaDamBdlaicefhialcefhlxekdnaDcpe0mbaxcefgOavaiaqaDcsGfRbbgscl49RcsGcdtfydbascz6gPEhDavaias9RcsGcdtfydbaOaPfgzascsGgOEhsaOThOdndnadcd9hmbabarcetfgHax87ebaHcdfaD87ebaHclfas87ebxekabarcdtfgHaxBdbaHclfaDBdbaHcwfasBdbkavaicdtfaxBdbavc;abfalcitfgHaDBdbaHaxBdlavaicefgicsGcdtfaDBdbavc;abfalcefcsGcitfgHasBdbaHaDBdlavaiaPfcsGgicdtfasBdbavc;abfalcdfcsGglcitfgDaxBdbaDasBdlalcefhlaiaOfhiazaOfhxxekaxcbaoRbbgHEgAaDc;:eSgDfhzaHcsGhCaHcl4hXdndnaHcs0mbazcefhOxekazhOavaiaX9RcsGcdtfydbhzkdndnaCmbaOcefhxxekaOhxavaiaH9RcsGcdtfydbhOkdndnaDTmbaocefhDxekaocdfhDao8SbegPcFeGhsdnaPcu9kmbaocofhAascFbGhscrhodninaD8SbbgPcFbGaotasVhsaPcu9kmeaDcefhDaocrfgoc8J9hmbkaAhDxekaDcefhDkasce4cbasceG9R7amfgmhAkdndnaXcsSmbaDhsxekaDcefhsaD8SbbgocFeGhPdnaocu9kmbaDcvfhzaPcFbGhPcrhodninas8SbbgDcFbGaotaPVhPaDcu9kmeascefhsaocrfgoc8J9hmbkazhsxekascefhskaPce4cbaPceG9R7amfgmhzkdndnaCcsSmbashoxekascefhoas8SbbgDcFeGhPdnaDcu9kmbascvfhOaPcFbGhPcrhDdninao8SbbgscFbGaDtaPVhPascu9kmeaocefhoaDcrfgDc8J9hmbkaOhoxekaocefhokaPce4cbaPceG9R7amfgmhOkdndnadcd9hmbabarcetfgDaA87ebaDcdfaz87ebaDclfaO87ebxekabarcdtfgDaABdbaDclfazBdbaDcwfaOBdbkavc;abfalcitfgDazBdbaDaABdlavaicdtfaABdbavc;abfalcefcsGcitfgDaOBdbaDazBdlavaicefgicsGcdtfazBdbavc;abfalcdfcsGcitfgDaABdbaDaOBdlavaiaHcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiarcifgrae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:flevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:wPliuo97eue978Jjjjjbca9Rhiaec98Ghldndnadcl9hmbdnalTmbcbhvabhdinadadpbbbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpkbbadczfhdavclfgval6mbkkalae9pmeaipxbbbbbbbbbbbbbbbbgqpklbaiabalcdtfgdaeciGglcdtgv;8qbbdnalTmbaiaipblbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDaqp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpklbkadaiav;8qbbskdnalTmbcbhvabhdinadczfgxaxpbbbgopxbbbbbbFFbbbbbbFFgkp9oadpbbbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpkbbadaDakp9oawaopmbezHdiOAlvCXorQLp9qpkbbadcafhdavclfgval6mbkkalae9pmbaiaeciGgvcitgdfcbcaad9R;8kbaiabalcitfglad;8qbbdnavTmbaiaipblzgopxbbbbbbFFbbbbbbFFgkp9oaipblbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpklzaiaDakp9oawaopmbezHdiOAlvCXorQLp9qpklbkalaiad;8qbbkk;4wllue97euv978Jjjjjbc8W9Rhidnaec98GglTmbcbhvabhoinaiaopbbbgraoczfgwpbbbgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklbaopxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblbpEb:T:j83ibaocwfarp5eaipblbpEe:T:j83ibawaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblbpEd:T:j83ibaocKfakp5eaipblbpEi:T:j83ibaocafhoavclfgval6mbkkdnalae9pmbaiaeciGgvcitgofcbcaao9R;8kbaiabalcitfgwao;8qbbdnavTmbaiaipblbgraipblzgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklaaipxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblapEb:T:j83ibaiarp5eaipblapEe:T:j83iwaiaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblapEd:T:j83izaiakp5eaipblapEi:T:j83iKkawaiao;8qbbkk:Pddiue978Jjjjjbc;ab9Rhidnadcd4ae2glc98GgvTmbcbheabhdinadadpbbbgocwp:Recwp:Sep;6eaocep:SepxbbjFbbjFbbjFbbjFp9opxbbjZbbjZbbjZbbjZp:Uep;Mepkbbadczfhdaeclfgeav6mbkkdnaval9pmbaialciGgecdtgdVcbc;abad9R;8kbaiabavcdtfgvad;8qbbdnaeTmbaiaipblbgocwp:Recwp:Sep;6eaocep:SepxbbjFbbjFbbjFbbjFp9opxbbjZbbjZbbjZbbjZp:Uep;Mepklbkavaiad;8qbbkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikkkebcjwklz9Tbb";
19
+ const detector = new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0, 1, 4, 1, 96, 0, 0, 3, 3, 2, 0, 0, 5, 3, 1, 0, 1, 12, 1, 0, 10, 22, 2, 12, 0, 65, 0, 65, 0, 65, 0, 252, 10, 0, 0, 11, 7, 0, 65, 0, 253, 15, 26, 11]);
20
+ const wasmpack = new Uint8Array([32, 0, 65, 2, 1, 106, 34, 33, 3, 128, 11, 4, 13, 64, 6, 253, 10, 7, 15, 116, 127, 5, 8, 12, 40, 16, 19, 54, 20, 9, 27, 255, 113, 17, 42, 67, 24, 23, 146, 148, 18, 14, 22, 45, 70, 69, 56, 114, 101, 21, 25, 63, 75, 136, 108, 28, 118, 29, 73, 115]);
21
+ if (typeof WebAssembly !== 'object') {
22
+ Logger.logError(FrontendLoggerCategory.Render, "WebAssembly is not supported in this environment");
23
+ return undefined;
14
24
  }
15
- async getDecoder() {
16
- const status = this._status;
17
- switch (status) {
18
- case "failed":
19
- assert(undefined === this._decoder);
20
- assert(undefined === this._promise);
21
- return undefined;
22
- case "ready":
23
- assert(undefined !== this._decoder);
24
- assert(undefined === this._promise);
25
- return this._decoder;
26
- case "loading":
27
- assert(undefined !== this._promise);
28
- await this._promise;
29
- assert("failed" === this._status || "ready" === this._status);
30
- assert(undefined === this._promise);
31
- return this._decoder;
32
- }
33
- assert("uninitialized" === status);
34
- this._status = "loading";
35
- this._promise = this.load();
36
- return this.getDecoder();
25
+ const wasm = WebAssembly.validate(detector) ? unpack(wasmSimd) : unpack(wasmBase);
26
+ let instance;
27
+ try {
28
+ const result = await WebAssembly.instantiate(wasm, {});
29
+ instance = result.instance;
30
+ instance.exports.__wasm_call_ctors();
37
31
  }
38
- async load() {
39
- try {
40
- // Import the module on first use.
41
- const decoder = (await import("meshoptimizer")).MeshoptDecoder;
42
- await decoder.ready;
43
- // Configure it to do the decoding outside of the main thread. No compelling reason to use more than one worker.
44
- decoder.useWorkers(1);
45
- this._status = "ready";
46
- this._decoder = decoder;
32
+ catch (err) {
33
+ Logger.logException(FrontendLoggerCategory.Render, err);
34
+ return undefined;
35
+ }
36
+ function unpack(data) {
37
+ const result = new Uint8Array(data.length);
38
+ for (let i = 0; i < data.length; ++i) {
39
+ const ch = data.charCodeAt(i);
40
+ result[i] = ch > 96 ? ch - 97 : ch > 64 ? ch - 39 : ch + 4;
47
41
  }
48
- catch (err) {
49
- Logger.logException(FrontendLoggerCategory.Render, err);
50
- this._status = "failed";
42
+ let write = 0;
43
+ for (let i = 0; i < data.length; ++i) {
44
+ result[write++] = (result[i] < 60) ? wasmpack[result[i]] : (result[i] - 60) * 64 + result[++i];
51
45
  }
52
- finally {
53
- this._promise = undefined;
46
+ return result.buffer.slice(0, write);
47
+ }
48
+ function decode(decoder, target, count, size, source, filter) {
49
+ const fun = instance.exports[decoder];
50
+ const sbrk = instance.exports.sbrk;
51
+ const count4 = (count + 3) & ~3;
52
+ const tp = sbrk(count4 * size);
53
+ const sp = sbrk(source.length);
54
+ const heap = new Uint8Array(instance.exports.memory.buffer);
55
+ heap.set(source, sp);
56
+ const res = fun(tp, count, size, sp, source.length);
57
+ if (res === 0 && filter) {
58
+ filter(tp, count4, size);
54
59
  }
60
+ target.set(heap.subarray(tp, tp + count * size));
61
+ sbrk(tp - sbrk(0));
62
+ if (res !== 0) {
63
+ throw new Error(`Malformed buffer data: ${res}`);
64
+ }
65
+ }
66
+ const decoders = {
67
+ //eslint-disable-next-line @typescript-eslint/naming-convention
68
+ ATTRIBUTES: 'meshopt_decodeVertexBuffer',
69
+ //eslint-disable-next-line @typescript-eslint/naming-convention
70
+ TRIANGLES: 'meshopt_decodeIndexBuffer',
71
+ //eslint-disable-next-line @typescript-eslint/naming-convention
72
+ INDICES: 'meshopt_decodeIndexSequence',
73
+ };
74
+ const filters = {
75
+ //eslint-disable-next-line @typescript-eslint/naming-convention
76
+ NONE: '',
77
+ //eslint-disable-next-line @typescript-eslint/naming-convention
78
+ OCTAHEDRAL: 'meshopt_decodeFilterOct',
79
+ //eslint-disable-next-line @typescript-eslint/naming-convention
80
+ QUATERNION: 'meshopt_decodeFilterQuat',
81
+ //eslint-disable-next-line @typescript-eslint/naming-convention
82
+ EXPONENTIAL: 'meshopt_decodeFilterExp',
83
+ };
84
+ return {
85
+ decodeVertexBuffer(target, count, size, source, filter) {
86
+ decode(decoders.ATTRIBUTES, target, count, size, source, filter ? instance.exports[filters[filter]] : undefined);
87
+ },
88
+ decodeIndexBuffer(target, count, size, source) {
89
+ decode(decoders.TRIANGLES, target, count, size, source);
90
+ },
91
+ decodeIndexSequence(target, count, size, source) {
92
+ decode(decoders.INDICES, target, count, size, source);
93
+ },
94
+ decodeGltfBuffer(target, count, size, source, mode, filter) {
95
+ decode(decoders[mode], target, count, size, source, filter ? instance.exports[filters[filter]] : undefined);
96
+ },
97
+ };
98
+ }
99
+ ;
100
+ let meshoptDecoderLoaded = false;
101
+ let meshoptDecoder;
102
+ /** @internal */
103
+ export async function getMeshoptDecoder() {
104
+ if (!meshoptDecoderLoaded) {
105
+ meshoptDecoder = await getDecoder();
106
+ meshoptDecoderLoaded = true;
55
107
  }
108
+ return meshoptDecoder;
56
109
  }
57
- const loader = new Loader();
58
110
  /** @internal */
59
111
  export async function decodeMeshoptBuffer(source, args) {
60
- const decoder = await loader.getDecoder();
112
+ const decoder = await getMeshoptDecoder();
61
113
  if (!decoder) {
62
114
  return undefined;
63
115
  }
64
- return decoder.decodeGltfBufferAsync(args.count, args.byteStride, source, args.mode, args.filter);
116
+ const target = new Uint8Array(args.count * args.byteStride);
117
+ decoder.decodeGltfBuffer(target, args.count, args.byteStride, source, args.mode, args.filter);
118
+ return target;
65
119
  }
66
120
  //# sourceMappingURL=MeshoptCompression.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MeshoptCompression.js","sourceRoot":"","sources":["../../../src/tile/MeshoptCompression.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAc1E,gEAAgE;AAChE,MAAM,MAAM;IAKV;QACE,IAAI,CAAC,OAAO,GAAG,eAAe,CAAC;IACjC,CAAC;IAEM,KAAK,CAAC,UAAU;QACrB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,QAAQ;gBACX,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACpC,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACpC,OAAO,SAAS,CAAC;YACnB,KAAK,OAAO;gBACV,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACpC,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACpC,OAAO,IAAI,CAAC,QAAQ,CAAC;YACvB,KAAK,SAAS;gBACZ,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACpC,MAAM,IAAI,CAAC,QAAQ,CAAC;gBACpB,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC9D,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACpC,OAAO,IAAI,CAAC,QAAQ,CAAC;QACzB,CAAC;QAED,MAAM,CAAC,eAAe,KAAK,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAE5B,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;IAC3B,CAAC;IAEO,KAAK,CAAC,IAAI;QAChB,IAAI,CAAC;YACH,kCAAkC;YAClC,MAAM,OAAO,GAAG,CAAC,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,cAAc,CAAC;YAC/D,MAAM,OAAO,CAAC,KAAK,CAAC;YAEpB,gHAAgH;YAChH,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAEtB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YACvB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QAC1B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,YAAY,CAAC,sBAAsB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YACxD,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC;QAC1B,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC5B,CAAC;IACH,CAAC;CACF;AAED,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;AAE5B,gBAAgB;AAChB,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,MAAkB,EAAE,IAA6B;IACzF,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;IAC1C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AACpG,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { assert, Logger } from \"@itwin/core-bentley\";\r\nimport { FrontendLoggerCategory } from \"../common/FrontendLoggerCategory\";\r\nimport type { MeshoptDecoder } from \"meshoptimizer\";\r\nimport type { ExtMeshoptCompressionFilter, ExtMeshoptCompressionMode } from \"../common/gltf/GltfSchema\";\r\n\r\n/** Arguments supplied to decodeMeshoptBuffer.\r\n * @internal\r\n */\r\nexport interface DecodeMeshoptBufferArgs {\r\n byteStride: number;\r\n count: number;\r\n mode: ExtMeshoptCompressionMode;\r\n filter?: ExtMeshoptCompressionFilter;\r\n}\r\n\r\n/** Loads and configures the MeshoptDecoder module on demand. */\r\nclass Loader {\r\n private _status: \"uninitialized\" | \"loading\" | \"ready\" | \"failed\";\r\n private _promise?: Promise<void>;\r\n private _decoder?: typeof MeshoptDecoder;\r\n\r\n public constructor() {\r\n this._status = \"uninitialized\";\r\n }\r\n\r\n public async getDecoder(): Promise<typeof MeshoptDecoder | undefined> {\r\n const status = this._status;\r\n switch (status) {\r\n case \"failed\":\r\n assert(undefined === this._decoder);\r\n assert(undefined === this._promise);\r\n return undefined;\r\n case \"ready\":\r\n assert(undefined !== this._decoder);\r\n assert(undefined === this._promise);\r\n return this._decoder;\r\n case \"loading\":\r\n assert(undefined !== this._promise);\r\n await this._promise;\r\n assert(\"failed\" === this._status || \"ready\" === this._status);\r\n assert(undefined === this._promise);\r\n return this._decoder;\r\n }\r\n\r\n assert(\"uninitialized\" === status);\r\n this._status = \"loading\";\r\n this._promise = this.load();\r\n\r\n return this.getDecoder();\r\n }\r\n\r\n private async load(): Promise<void> {\r\n try {\r\n // Import the module on first use.\r\n const decoder = (await import(\"meshoptimizer\")).MeshoptDecoder;\r\n await decoder.ready;\r\n\r\n // Configure it to do the decoding outside of the main thread. No compelling reason to use more than one worker.\r\n decoder.useWorkers(1);\r\n\r\n this._status = \"ready\";\r\n this._decoder = decoder;\r\n } catch (err) {\r\n Logger.logException(FrontendLoggerCategory.Render, err);\r\n this._status = \"failed\";\r\n } finally {\r\n this._promise = undefined;\r\n }\r\n }\r\n}\r\n\r\nconst loader = new Loader();\r\n\r\n/** @internal */\r\nexport async function decodeMeshoptBuffer(source: Uint8Array, args: DecodeMeshoptBufferArgs): Promise<Uint8Array | undefined> {\r\n const decoder = await loader.getDecoder();\r\n if (!decoder) {\r\n return undefined;\r\n }\r\n\r\n return decoder.decodeGltfBufferAsync(args.count, args.byteStride, source, args.mode, args.filter);\r\n}\r\n"]}
1
+ {"version":3,"file":"MeshoptCompression.js","sourceRoot":"","sources":["../../../src/tile/MeshoptCompression.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAQzE,CAAC;AAEF,yGAAyG;AACzG,qGAAqG;AACrG,8GAA8G;AAC9G,KAAK,UAAU,UAAU;IACvB,kCAAkC;IAClC,gCAAgC;IAChC,MAAM,QAAQ,GAAG,wmOAAwmO,CAAC;IAC1nO,MAAM,QAAQ,GAAG,swXAAswX,CAAC;IAExxX,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAClN,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IAEvR,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;QACpC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAC,MAAM,EAAE,kDAAkD,CAAC,CAAC;QACnG,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAElF,IAAI,QAAa,CAAC;IAElB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACvD,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC3B,QAAQ,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC;IACvC,CAAC;IACD,OAAO,GAAG,EAAE,CAAC;QACX,MAAM,CAAC,YAAY,CAAC,sBAAsB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACxD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,SAAS,MAAM,CAAC,IAAY;QAC1B,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;YACrC,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAC9B,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;YACrC,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QACjG,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IAED,SAAS,MAAM,CAAC,OAAe,EAAE,MAAkB,EAAE,KAAa,EAAE,IAAY,EAAE,MAAkB,EAAE,MAAY;QAChH,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;QACnC,MAAM,MAAM,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAChC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QAC/B,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC/B,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5D,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACrB,MAAM,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACpD,IAAI,GAAG,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;YACxB,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QAC3B,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;QACjD,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,EAAE,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAQ;QACpB,+DAA+D;QAC/D,UAAU,EAAE,4BAA4B;QACxC,+DAA+D;QAC/D,SAAS,EAAE,2BAA2B;QACtC,+DAA+D;QAC/D,OAAO,EAAE,6BAA6B;KACvC,CAAC;IAEF,MAAM,OAAO,GAAQ;QACnB,+DAA+D;QAC/D,IAAI,EAAE,EAAE;QACR,+DAA+D;QAC/D,UAAU,EAAE,yBAAyB;QACrC,+DAA+D;QAC/D,UAAU,EAAE,0BAA0B;QACtC,+DAA+D;QAC/D,WAAW,EAAE,yBAAyB;KACvC,CAAC;IAEF,OAAO;QACL,kBAAkB,CAAC,MAAkB,EAAE,KAAa,EAAE,IAAY,EAAE,MAAkB,EAAE,MAAe;YACrG,MAAM,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACnH,CAAC;QACD,iBAAiB,CAAC,MAAkB,EAAE,KAAa,EAAE,IAAY,EAAE,MAAkB;YACnF,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAC1D,CAAC;QACD,mBAAmB,CAAC,MAAkB,EAAE,KAAa,EAAE,IAAY,EAAE,MAAkB;YACrF,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QACxD,CAAC;QACD,gBAAgB,CAAC,MAAkB,EAAE,KAAa,EAAE,IAAY,EAAE,MAAkB,EAAE,IAAY,EAAE,MAAe;YACjH,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC9G,CAAC;KACF,CAAC;AACJ,CAAC;AAAA,CAAC;AAEF,IAAI,oBAAoB,GAAY,KAAK,CAAC;AAC1C,IAAI,cAA0C,CAAC;AAE/C,gBAAgB;AAChB,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1B,cAAc,GAAG,MAAM,UAAU,EAAE,CAAC;QACpC,oBAAoB,GAAG,IAAI,CAAC;IAC9B,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAYD,gBAAgB;AAChB,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,MAAkB,EAAE,IAA6B;IACzF,MAAM,OAAO,GAAG,MAAM,iBAAiB,EAAE,CAAC;IAC1C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5D,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9F,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { Logger } from \"@itwin/core-bentley\";\r\nimport type { ExtMeshoptCompressionFilter, ExtMeshoptCompressionMode } from \"../common/gltf/GltfSchema\";\r\nimport { FrontendLoggerCategory } from \"../common/FrontendLoggerCategory\";\r\n\r\n/** @internal */\r\nexport interface MeshoptDecoder {\r\n decodeVertexBuffer: (target: Uint8Array, count: number, size: number, source: Uint8Array, filter?: string) => void;\r\n decodeIndexBuffer: (target: Uint8Array, count: number, size: number, source: Uint8Array) => void;\r\n decodeIndexSequence: (target: Uint8Array, count: number, size: number, source: Uint8Array) => void;\r\n decodeGltfBuffer(target: Uint8Array, count: number, size: number, source: Uint8Array, mode: string, filter?: string): void;\r\n};\r\n\r\n// This is a modified version of https://github.com/zeux/meshoptimizer/blob/master/js/meshopt_decoder.js.\r\n// The orginial code will load wasm when the module is imported, which seems to upset vitest somehow.\r\n// This version loads wasm only when a decoder is requested, which only occurs when parsing a compressed tile.\r\nasync function getDecoder(): Promise<MeshoptDecoder | undefined> {\r\n // Built with clang version 16.0.0\r\n // Built from meshoptimizer 0.20\r\n const wasmBase = \"b9H79Tebbbe8Fv9Gbb9Gvuuuuueu9Giuuub9Geueu9Giuuueuikqbeeedddillviebeoweuec:q;iekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbeY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVbdE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbiL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtblK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbol79IV9Rbrq;d8Yqdbk:yzeHu8Jjjjjbcj;eb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Radz1jjjbhwcj;abad9UhlaicefhodnadTmbalc;WFbGglcjdalcjd6EhDcbhqinaqae9pmeaDaeaq9RaqaDfae6Egkcsfglcl4cifcd4hxdndndndnalc9WGgmTmbcbhPcehsawcjdfhzaohHinaraH9Rax6midnaraHaxfgo9RcK6mbczhlcbhOinalgic9WfgAawcj;cbffhldndndndndnaHaAco4fRbbaOcoG4ciGPlbedibkal9cb83ibalcwf9cb83ibxikalaoRblaoRbbgAco4gCaCciSgCE86bbawcj;cbfaifglcGfaoclfaCfgCRbbaAcl4ciGgXaXciSgXE86bbalcVfaCaXfgCRbbaAcd4ciGgXaXciSgXE86bbalc7faCaXfgCRbbaAciGgAaAciSgAE86bbalctfaCaAfgCRbbaoRbegAco4gXaXciSgXE86bbalc91faCaXfgCRbbaAcl4ciGgXaXciSgXE86bbalc4faCaXfgCRbbaAcd4ciGgXaXciSgXE86bbalc93faCaXfgCRbbaAciGgAaAciSgAE86bbalc94faCaAfgCRbbaoRbdgAco4gXaXciSgXE86bbalc95faCaXfgCRbbaAcl4ciGgXaXciSgXE86bbalc96faCaXfgCRbbaAcd4ciGgXaXciSgXE86bbalc97faCaXfgCRbbaAciGgAaAciSgAE86bbalc98faCaAfgARbbaoRbigoco4gCaCciSgCE86bbalc99faAaCfgARbbaocl4ciGgCaCciSgCE86bbalc9:faAaCfgARbbaocd4ciGgCaCciSgCE86bbalcufaAaCfglRbbaociGgoaociSgoE86bbalaofhoxdkalaoRbwaoRbbgAcl4gCaCcsSgCE86bbawcj;cbfaifglcGfaocwfaCfgCRbbaAcsGgAaAcsSgAE86bbalcVfaCaAfgARbbaoRbegCcl4gXaXcsSgXE86bbalc7faAaXfgARbbaCcsGgCaCcsSgCE86bbalctfaAaCfgARbbaoRbdgCcl4gXaXcsSgXE86bbalc91faAaXfgARbbaCcsGgCaCcsSgCE86bbalc4faAaCfgARbbaoRbigCcl4gXaXcsSgXE86bbalc93faAaXfgARbbaCcsGgCaCcsSgCE86bbalc94faAaCfgARbbaoRblgCcl4gXaXcsSgXE86bbalc95faAaXfgARbbaCcsGgCaCcsSgCE86bbalc96faAaCfgARbbaoRbvgCcl4gXaXcsSgXE86bbalc97faAaXfgARbbaCcsGgCaCcsSgCE86bbalc98faAaCfgARbbaoRbogCcl4gXaXcsSgXE86bbalc99faAaXfgARbbaCcsGgCaCcsSgCE86bbalc9:faAaCfgARbbaoRbrgocl4gCaCcsSgCE86bbalcufaAaCfglRbbaocsGgoaocsSgoE86bbalaofhoxekalao8Pbb83bbalcwfaocwf8Pbb83bbaoczfhokdnaiam9pmbaOcdfhOaiczfhlarao9RcL0mekkaiam6miaoTmidnakTmbawaPfRbbhOawcj;cbfhlazhiakhAinaialRbbgHce4cbaHceG9R7aOfgO86bbaiadfhialcefhlaAcufgAmbkkazcefhzaPcefgPad6hsaohHaPad9hmexvkkcbhoasceGmdxikaoaxad2fhXdnakTmbcbhmcehsawcjdfhCinarao9Rax6miaoTmdaoaxfhoawamfRbbhOawcj;cbfhlaChiakhAinaialRbbgHce4cbaHceG9R7aOfgO86bbaiadfhialcefhlaAcufgAmbkaCcefhCamcefgmad6hsamad9hmbkaXhoxikcbhlcehsinarao9Rax6mdaoTmeaoaxfhoalcefglad6hsadal9hmbkaXhoxdkcbhoasceGTmekc9:hoxikabaqad2fawcjdfakad2z1jjjb8Aawawcjdfakcufad2fadz1jjjb8Aakaqfhqaombkc9:hoxekcbc99arao9Radcaadca0ESEhokavcj;ebf8Kjjjjbaok;xzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecjez:jjjjb8AavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhrcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgDc;Ve0mbavc;abfalaDcu7gPcl4fcsGcitfgsydlhzasydbhHdnaDcsGgDak9pmbavaiaPfcsGcdtfydbaxaDEhsaDThDdndnadcd9hmbabarcetfgPaH87ebaPcdfaz87ebaPclfas87ebxekabarcdtfgPaHBdbaPclfazBdbaPcwfasBdbkaxaDfhxavc;abfalcitfgPasBdbaPazBdlavaicdtfasBdbavc;abfalcefcsGglcitfgPaHBdbaPasBdlaiaDfhialcefhlxdkdndnaDcsSmbamaDfaDc987fcefhmxekaocefhDao8SbbgscFeGhPdndnascu9mmbaDhoxekaocvfhoaPcFbGhPcrhsdninaD8SbbgOcFbGastaPVhPaOcu9kmeaDcefhDascrfgsc8J9hmbxdkkaDcefhokaPce4cbaPceG9R7amfhmkdndnadcd9hmbabarcetfgDaH87ebaDcdfaz87ebaDclfam87ebxekabarcdtfgDaHBdbaDclfazBdbaDcwfamBdbkavc;abfalcitfgDamBdbaDazBdlavaicdtfamBdbavc;abfalcefcsGglcitfgDaHBdbaDamBdlaicefhialcefhlxekdnaDcpe0mbaxcefgOavaiaqaDcsGfRbbgscl49RcsGcdtfydbascz6gPEhDavaias9RcsGcdtfydbaOaPfgzascsGgOEhsaOThOdndnadcd9hmbabarcetfgHax87ebaHcdfaD87ebaHclfas87ebxekabarcdtfgHaxBdbaHclfaDBdbaHcwfasBdbkavaicdtfaxBdbavc;abfalcitfgHaDBdbaHaxBdlavaicefgicsGcdtfaDBdbavc;abfalcefcsGcitfgHasBdbaHaDBdlavaiaPfcsGgicdtfasBdbavc;abfalcdfcsGglcitfgDaxBdbaDasBdlalcefhlaiaOfhiazaOfhxxekaxcbaoRbbgHEgAaDc;:eSgDfhzaHcsGhCaHcl4hXdndnaHcs0mbazcefhOxekazhOavaiaX9RcsGcdtfydbhzkdndnaCmbaOcefhxxekaOhxavaiaH9RcsGcdtfydbhOkdndnaDTmbaocefhDxekaocdfhDao8SbegPcFeGhsdnaPcu9kmbaocofhAascFbGhscrhodninaD8SbbgPcFbGaotasVhsaPcu9kmeaDcefhDaocrfgoc8J9hmbkaAhDxekaDcefhDkasce4cbasceG9R7amfgmhAkdndnaXcsSmbaDhsxekaDcefhsaD8SbbgocFeGhPdnaocu9kmbaDcvfhzaPcFbGhPcrhodninas8SbbgDcFbGaotaPVhPaDcu9kmeascefhsaocrfgoc8J9hmbkazhsxekascefhskaPce4cbaPceG9R7amfgmhzkdndnaCcsSmbashoxekascefhoas8SbbgDcFeGhPdnaDcu9kmbascvfhOaPcFbGhPcrhDdninao8SbbgscFbGaDtaPVhPascu9kmeaocefhoaDcrfgDc8J9hmbkaOhoxekaocefhokaPce4cbaPceG9R7amfgmhOkdndnadcd9hmbabarcetfgDaA87ebaDcdfaz87ebaDclfaO87ebxekabarcdtfgDaABdbaDclfazBdbaDcwfaOBdbkavc;abfalcitfgDazBdbaDaABdlavaicdtfaABdbavc;abfalcefcsGcitfgDaOBdbaDazBdlavaicefgicsGcdtfazBdbavc;abfalcdfcsGcitfgDaABdbaDaOBdlavaiaHcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiarcifgrae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:flevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:Lvoeue99dud99eud99dndnadcl9hmbaeTmeindndnabcdfgd8Sbb:Yab8Sbbgi:Ygl:l:tabcefgv8Sbbgo:Ygr:l:tgwJbb;:9cawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai86bbdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad86bbdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad86bbabclfhbaecufgembxdkkaeTmbindndnabclfgd8Ueb:Yab8Uebgi:Ygl:l:tabcdfgv8Uebgo:Ygr:l:tgwJb;:FSawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai87ebdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad87ebdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad87ebabcwfhbaecufgembkkk;siliui99iue99dnaeTmbcbhiabhlindndnJ;Zl81Zalcof8UebgvciV:Y:vgoal8Ueb:YNgrJb;:FSNJbbbZJbbb:;arJbbbb9GEMgw:lJbbb9p9DTmbaw:OhDxekcjjjj94hDkalclf8Uebhqalcdf8UebhkabaiavcefciGfcetfaD87ebdndnaoak:YNgwJb;:FSNJbbbZJbbb:;awJbbbb9GEMgx:lJbbb9p9DTmbax:Ohkxekcjjjj94hkkabaiavcdfciGfcetfak87ebdndnaoaq:YNgoJb;:FSNJbbbZJbbb:;aoJbbbb9GEMgx:lJbbb9p9DTmbax:Ohqxekcjjjj94hqkabaiavcufciGfcetfaq87ebdndnJbbjZararN:tawawN:taoaoN:tgrJbbbbarJbbbb9GE:rJb;:FSNJbbbZMgr:lJbbb9p9DTmbar:Ohqxekcjjjj94hqkabaiavciGfcetfaq87ebalcwfhlaiclfhiaecufgembkkk9mbdnadcd4ae2gdTmbinababydbgecwtcw91:Yaece91cjjj98Gcjjj;8if::NUdbabclfhbadcufgdmbkkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabkkkebcjwklz9Kbb\";\r\n const wasmSimd = \"b9H79TebbbeKl9Gbb9Gvuuuuueu9Giuuub9Geueuikqbbebeedddilve9Weeeviebeoweuec:q;Aekr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbdY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVblE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtboK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbrL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbwl79IV9RbDq;b9tqlbzik9:evu8Jjjjjbcz9Rhbcbheincbhdcbhiinabcwfadfaicjuaead4ceGglE86bbaialfhiadcefgdcw9hmbkaec:q:yjjbfai86bbaecitc:q1jjbfab8Piw83ibaecefgecjd9hmbkk;e8JlHud97euo978Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Rad;8qbbcj;abad9UhoaicefhldnadTmbaoc;WFbGgocjdaocjd6EhwcbhDinaDae9pmeawaeaD9RaDawfae6Egqcsfgoc9WGgkci2hxakcethmaocl4cifcd4hPabaDad2fhscbhzdnincbhHalhOcbhAdninaraO9RaP6miavcj;cbfaAak2fhCaOaPfhlcbhidnakc;ab6mbaral9Rc;Gb6mbcbhoinaCaofhidndndndndnaOaoco4fRbbgXciGPlbedibkaipxbbbbbbbbbbbbbbbbpklbxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklbalczfhlkdndndndndnaXcd4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklzxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklzalczfhlkdndndndndnaXcl4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklaxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaialpbbbpklaalczfhlkdndndndndnaXco4Plbedibkaipxbbbbbbbbbbbbbbbbpkl8WxikaialpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalclfaYpQbfaXc:q:yjjbfRbbfhlxdkaialpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WalcwfaYpQbfaXc:q:yjjbfRbbfhlxekaialpbbbpkl8Walczfhlkaoc;abfhiaocjefak0meaihoaral9Rc;Fb0mbkkdndnaiak9pmbaici4hoinaral9RcK6mdaCaifhXdndndndndnaOaico4fRbbaocoG4ciGPlbedibkaXpxbbbbbbbbbbbbbbbbpklbxikaXalpbblalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalclfaYpQbfaKc:q:yjjbfRbbfhlxdkaXalpbbwalpbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbalcwfaYpQbfaKc:q:yjjbfRbbfhlxekaXalpbbbpklbalczfhlkaocdfhoaiczfgiak6mbkkalTmbaAcd0hHalhOaAcefgAclSmdxekkcbhlaHceGTmdkdnakTmbavcjdfazfhiavazfpbdbhYcbhXinaiavcj;cbfaXfgopblbgLcep9TaLpxeeeeeeeeeeeeeeeegQp9op9Hp9rgLaoakfpblbg8Acep9Ta8AaQp9op9Hp9rg8ApmbzeHdOiAlCvXoQrLgEaoamfpblbg3cep9Ta3aQp9op9Hp9rg3aoaxfpblbg5cep9Ta5aQp9op9Hp9rg5pmbzeHdOiAlCvXoQrLg8EpmbezHdiOAlvCXorQLgQaQpmbedibedibedibediaYp9UgYp9AdbbaiadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaEa8EpmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwKDYq8AkEx3m5P8Es8FgLa3a5pmwKDYq8AkEx3m5P8Es8Fg8ApmbezHdiOAlvCXorQLgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfgoaYaLa8ApmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaoadfgoaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaoadfgoaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaoadfgoaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaoadfhiaXczfgXak6mbkkazclfgzad6mbkasavcjdfaqad2;8qbbavavcjdfaqcufad2fad;8qbbaqaDfhDc9:hoalmexikkc9:hoxekcbc99aral9Radcaadca0ESEhokavcj;kbf8Kjjjjbaokwbz:bjjjbk;tzeHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgDce0mbavc;abfcFecje;8kbavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhqaicefgwarfhodnaeTmbcmcsaDceSEhkcbhxcbhmcbhrcbhicbhlindnaoaq9nmbc9:hoxikdndnawRbbgDc;Ve0mbavc;abfalaDcu7gPcl4fcsGcitfgsydlhzasydbhHdnaDcsGgDak9pmbavaiaPfcsGcdtfydbaxaDEhsaDThDdndnadcd9hmbabarcetfgPaH87ebaPcdfaz87ebaPclfas87ebxekabarcdtfgPaHBdbaPclfazBdbaPcwfasBdbkaxaDfhxavc;abfalcitfgPasBdbaPazBdlavaicdtfasBdbavc;abfalcefcsGglcitfgPaHBdbaPasBdlaiaDfhialcefhlxdkdndnaDcsSmbamaDfaDc987fcefhmxekaocefhDao8SbbgscFeGhPdndnascu9mmbaDhoxekaocvfhoaPcFbGhPcrhsdninaD8SbbgOcFbGastaPVhPaOcu9kmeaDcefhDascrfgsc8J9hmbxdkkaDcefhokaPce4cbaPceG9R7amfhmkdndnadcd9hmbabarcetfgDaH87ebaDcdfaz87ebaDclfam87ebxekabarcdtfgDaHBdbaDclfazBdbaDcwfamBdbkavc;abfalcitfgDamBdbaDazBdlavaicdtfamBdbavc;abfalcefcsGglcitfgDaHBdbaDamBdlaicefhialcefhlxekdnaDcpe0mbaxcefgOavaiaqaDcsGfRbbgscl49RcsGcdtfydbascz6gPEhDavaias9RcsGcdtfydbaOaPfgzascsGgOEhsaOThOdndnadcd9hmbabarcetfgHax87ebaHcdfaD87ebaHclfas87ebxekabarcdtfgHaxBdbaHclfaDBdbaHcwfasBdbkavaicdtfaxBdbavc;abfalcitfgHaDBdbaHaxBdlavaicefgicsGcdtfaDBdbavc;abfalcefcsGcitfgHasBdbaHaDBdlavaiaPfcsGgicdtfasBdbavc;abfalcdfcsGglcitfgDaxBdbaDasBdlalcefhlaiaOfhiazaOfhxxekaxcbaoRbbgHEgAaDc;:eSgDfhzaHcsGhCaHcl4hXdndnaHcs0mbazcefhOxekazhOavaiaX9RcsGcdtfydbhzkdndnaCmbaOcefhxxekaOhxavaiaH9RcsGcdtfydbhOkdndnaDTmbaocefhDxekaocdfhDao8SbegPcFeGhsdnaPcu9kmbaocofhAascFbGhscrhodninaD8SbbgPcFbGaotasVhsaPcu9kmeaDcefhDaocrfgoc8J9hmbkaAhDxekaDcefhDkasce4cbasceG9R7amfgmhAkdndnaXcsSmbaDhsxekaDcefhsaD8SbbgocFeGhPdnaocu9kmbaDcvfhzaPcFbGhPcrhodninas8SbbgDcFbGaotaPVhPaDcu9kmeascefhsaocrfgoc8J9hmbkazhsxekascefhskaPce4cbaPceG9R7amfgmhzkdndnaCcsSmbashoxekascefhoas8SbbgDcFeGhPdnaDcu9kmbascvfhOaPcFbGhPcrhDdninao8SbbgscFbGaDtaPVhPascu9kmeaocefhoaDcrfgDc8J9hmbkaOhoxekaocefhokaPce4cbaPceG9R7amfgmhOkdndnadcd9hmbabarcetfgDaA87ebaDcdfaz87ebaDclfaO87ebxekabarcdtfgDaABdbaDclfazBdbaDcwfaOBdbkavc;abfalcitfgDazBdbaDaABdlavaicdtfaABdbavc;abfalcefcsGcitfgDaOBdbaDazBdlavaicefgicsGcdtfazBdbavc;abfalcdfcsGcitfgDaABdbaDaOBdlavaiaHcz6aXcsSVfgicsGcdtfaOBdbaiaCTaCcsSVfhialcifhlkawcefhwalcsGhlaicsGhiarcifgrae6mbkkcbc99aoaqSEhokavc;aef8Kjjjjbaok:flevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:wPliuo97eue978Jjjjjbca9Rhiaec98Ghldndnadcl9hmbdnalTmbcbhvabhdinadadpbbbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpkbbadczfhdavclfgval6mbkkalae9pmeaipxbbbbbbbbbbbbbbbbgqpklbaiabalcdtfgdaeciGglcdtgv;8qbbdnalTmbaiaipblbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDaqp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpklbkadaiav;8qbbskdnalTmbcbhvabhdinadczfgxaxpbbbgopxbbbbbbFFbbbbbbFFgkp9oadpbbbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpkbbadaDakp9oawaopmbezHdiOAlvCXorQLp9qpkbbadcafhdavclfgval6mbkkalae9pmbaiaeciGgvcitgdfcbcaad9R;8kbaiabalcitfglad;8qbbdnavTmbaiaipblzgopxbbbbbbFFbbbbbbFFgkp9oaipblbgDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eaDaopmbediwDqkzHOAKY8AEgoczp:Sep;6egrp;Geaoczp:Reczp:Sep;6egwp;Gep;Kep;Legopxb;:FSb;:FSb;:FSb;:FSawaopxbbbbbbbbbbbbbbbbp:2egqawpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegwawp;Meaoaop;Mearaqaramp9op9rp;Kegoaop;Mep;Kep;Kep;Jep;Negrp;Mepxbbn0bbn0bbn0bbn0gqp;Keczp:Reawarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9op9qgwaoarp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogopmwDKYqk8AExm35Ps8E8Fp9qpklzaiaDakp9oawaopmbezHdiOAlvCXorQLp9qpklbkalaiad;8qbbkk;4wllue97euv978Jjjjjbc8W9Rhidnaec98GglTmbcbhvabhoinaiaopbbbgraoczfgwpbbbgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklbaopxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblbpEb:T:j83ibaocwfarp5eaipblbpEe:T:j83ibawaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblbpEd:T:j83ibaocKfakp5eaipblbpEi:T:j83ibaocafhoavclfgval6mbkkdnalae9pmbaiaeciGgvcitgofcbcaao9R;8kbaiabalcitfgwao;8qbbdnavTmbaiaipblbgraipblzgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklaaipxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaqakp;Mearp;Keczp:ReaDakp;Mearp;Keamp9op9qgkpmbezHdiOAlvCXorQLgrp5baipblapEb:T:j83ibaiarp5eaipblapEe:T:j83iwaiaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblapEd:T:j83izaiakp5eaipblapEi:T:j83iKkawaiao;8qbbkk:Pddiue978Jjjjjbc;ab9Rhidnadcd4ae2glc98GgvTmbcbheabhdinadadpbbbgocwp:Recwp:Sep;6eaocep:SepxbbjFbbjFbbjFbbjFp9opxbbjZbbjZbbjZbbjZp:Uep;Mepkbbadczfhdaeclfgeav6mbkkdnaval9pmbaialciGgecdtgdVcbc;abad9R;8kbaiabavcdtfgvad;8qbbdnaeTmbaiaipblbgocwp:Recwp:Sep;6eaocep:SepxbbjFbbjFbbjFbbjFp9opxbbjZbbjZbbjZbbjZp:Uep;Mepklbkavaiad;8qbbkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikkkebcjwklz9Tbb\";\r\n\r\n const detector = new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0, 1, 4, 1, 96, 0, 0, 3, 3, 2, 0, 0, 5, 3, 1, 0, 1, 12, 1, 0, 10, 22, 2, 12, 0, 65, 0, 65, 0, 65, 0, 252, 10, 0, 0, 11, 7, 0, 65, 0, 253, 15, 26, 11]);\r\n const wasmpack = new Uint8Array([32, 0, 65, 2, 1, 106, 34, 33, 3, 128, 11, 4, 13, 64, 6, 253, 10, 7, 15, 116, 127, 5, 8, 12, 40, 16, 19, 54, 20, 9, 27, 255, 113, 17, 42, 67, 24, 23, 146, 148, 18, 14, 22, 45, 70, 69, 56, 114, 101, 21, 25, 63, 75, 136, 108, 28, 118, 29, 73, 115]);\r\n\r\n if (typeof WebAssembly !== 'object') {\r\n Logger.logError(FrontendLoggerCategory.Render, \"WebAssembly is not supported in this environment\");\r\n return undefined;\r\n }\r\n\r\n const wasm = WebAssembly.validate(detector) ? unpack(wasmSimd) : unpack(wasmBase);\r\n\r\n let instance: any;\r\n\r\n try {\r\n const result = await WebAssembly.instantiate(wasm, {});\r\n instance = result.instance;\r\n instance.exports.__wasm_call_ctors();\r\n }\r\n catch (err) {\r\n Logger.logException(FrontendLoggerCategory.Render, err);\r\n return undefined;\r\n }\r\n\r\n function unpack(data: string) {\r\n const result = new Uint8Array(data.length);\r\n for (let i = 0; i < data.length; ++i) {\r\n const ch = data.charCodeAt(i);\r\n result[i] = ch > 96 ? ch - 97 : ch > 64 ? ch - 39 : ch + 4;\r\n }\r\n let write = 0;\r\n for (let i = 0; i < data.length; ++i) {\r\n result[write++] = (result[i] < 60) ? wasmpack[result[i]] : (result[i] - 60) * 64 + result[++i];\r\n }\r\n return result.buffer.slice(0, write);\r\n }\r\n\r\n function decode(decoder: string, target: Uint8Array, count: number, size: number, source: Uint8Array, filter?: any) {\r\n const fun = instance.exports[decoder];\r\n const sbrk = instance.exports.sbrk;\r\n const count4 = (count + 3) & ~3;\r\n const tp = sbrk(count4 * size);\r\n const sp = sbrk(source.length);\r\n const heap = new Uint8Array(instance.exports.memory.buffer);\r\n heap.set(source, sp);\r\n const res = fun(tp, count, size, sp, source.length);\r\n if (res === 0 && filter) {\r\n filter(tp, count4, size);\r\n }\r\n target.set(heap.subarray(tp, tp + count * size));\r\n sbrk(tp - sbrk(0));\r\n if (res !== 0) {\r\n throw new Error(`Malformed buffer data: ${res}`);\r\n }\r\n }\r\n\r\n const decoders: any = {\r\n //eslint-disable-next-line @typescript-eslint/naming-convention\r\n ATTRIBUTES: 'meshopt_decodeVertexBuffer',\r\n //eslint-disable-next-line @typescript-eslint/naming-convention\r\n TRIANGLES: 'meshopt_decodeIndexBuffer',\r\n //eslint-disable-next-line @typescript-eslint/naming-convention\r\n INDICES: 'meshopt_decodeIndexSequence',\r\n };\r\n\r\n const filters: any = {\r\n //eslint-disable-next-line @typescript-eslint/naming-convention\r\n NONE: '',\r\n //eslint-disable-next-line @typescript-eslint/naming-convention\r\n OCTAHEDRAL: 'meshopt_decodeFilterOct',\r\n //eslint-disable-next-line @typescript-eslint/naming-convention\r\n QUATERNION: 'meshopt_decodeFilterQuat',\r\n //eslint-disable-next-line @typescript-eslint/naming-convention\r\n EXPONENTIAL: 'meshopt_decodeFilterExp',\r\n };\r\n\r\n return {\r\n decodeVertexBuffer(target: Uint8Array, count: number, size: number, source: Uint8Array, filter?: string) {\r\n decode(decoders.ATTRIBUTES, target, count, size, source, filter ? instance.exports[filters[filter]] : undefined);\r\n },\r\n decodeIndexBuffer(target: Uint8Array, count: number, size: number, source: Uint8Array) {\r\n decode(decoders.TRIANGLES, target, count, size, source);\r\n },\r\n decodeIndexSequence(target: Uint8Array, count: number, size: number, source: Uint8Array) {\r\n decode(decoders.INDICES, target, count, size, source);\r\n },\r\n decodeGltfBuffer(target: Uint8Array, count: number, size: number, source: Uint8Array, mode: string, filter?: string) {\r\n decode(decoders[mode], target, count, size, source, filter ? instance.exports[filters[filter]] : undefined);\r\n },\r\n };\r\n};\r\n\r\nlet meshoptDecoderLoaded: boolean = false;\r\nlet meshoptDecoder: MeshoptDecoder | undefined;\r\n\r\n/** @internal */\r\nexport async function getMeshoptDecoder(): Promise<MeshoptDecoder | undefined> {\r\n if (!meshoptDecoderLoaded) {\r\n meshoptDecoder = await getDecoder();\r\n meshoptDecoderLoaded = true;\r\n }\r\n return meshoptDecoder;\r\n}\r\n\r\n/** Arguments supplied to decodeMeshoptBuffer.\r\n * @internal\r\n */\r\nexport interface DecodeMeshoptBufferArgs {\r\n byteStride: number;\r\n count: number;\r\n mode: ExtMeshoptCompressionMode;\r\n filter?: ExtMeshoptCompressionFilter;\r\n}\r\n\r\n/** @internal */\r\nexport async function decodeMeshoptBuffer(source: Uint8Array, args: DecodeMeshoptBufferArgs): Promise<Uint8Array | undefined> {\r\n const decoder = await getMeshoptDecoder();\r\n if (!decoder) {\r\n return undefined;\r\n }\r\n\r\n const target = new Uint8Array(args.count * args.byteStride);\r\n decoder.decodeGltfBuffer(target, args.count, args.byteStride, source, args.mode, args.filter);\r\n return target;\r\n}\r\n"]}
@@ -11,6 +11,7 @@ const loggerCategory = "ArcGISTileMap";
11
11
  const nonVisibleChildren = [false, false, false, false];
12
12
  /** @internal */
13
13
  export class ArcGISTileMap {
14
+ static { this.maxLod = 30; }
14
15
  // We want to query a tile map that covers an area all around the top-lef missing tile, we offset the top-left corner position of the tilemap.
15
16
  // We used to create a 32x32 tiles area around the missing tiles, but this was causing the tilemap top-left position
16
17
  // to fall outside the dataset bundle of the remote server, thus giving invalid response.
@@ -225,5 +226,4 @@ export class ArcGISTileMap {
225
226
  return available;
226
227
  }
227
228
  }
228
- ArcGISTileMap.maxLod = 30;
229
229
  //# sourceMappingURL=ArcGISTileMap.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ArcGISTileMap.js","sourceRoot":"","sources":["../../../../src/tile/map/ArcGISTileMap.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { assert, compareStrings, Dictionary, Logger } from \"@itwin/core-bentley\";\r\nimport { QuadId } from \"../internal\";\r\nimport { ImageMapLayerSettings } from \"@itwin/core-common\";\r\nconst loggerCategory = \"ArcGISTileMap\";\r\n\r\n/** @internal */\r\nexport type FetchFunction = (url: URL, options?: RequestInit) => Promise<Response>;\r\n\r\nconst nonVisibleChildren = [false, false, false, false];\r\n\r\n/** @internal */\r\nexport class ArcGISTileMap {\r\n\r\n // For similar reasons as the corner offset, we need to keep the tile map size not too big to avoid covering multiple bundles.\r\n public tileMapRequestSize = 8;\r\n private static maxLod = 30;\r\n\r\n // We want to query a tile map that covers an area all around the top-lef missing tile, we offset the top-left corner position of the tilemap.\r\n // We used to create a 32x32 tiles area around the missing tiles, but this was causing the tilemap top-left position\r\n // to fall outside the dataset bundle of the remote server, thus giving invalid response.\r\n public get tileMapOffset() {return (this.tileMapRequestSize * 0.5);}\r\n\r\n public fallbackTileMapRequestSize = 2;\r\n\r\n private _callQueues: Array<Promise<boolean[]>> | undefined;\r\n private _tilesCache = new Dictionary<string, boolean>((lhs, rhs) => compareStrings(lhs, rhs));\r\n private _restBaseUrl: string;\r\n private _fetchFunc: FetchFunction;\r\n private _settings: ImageMapLayerSettings;\r\n\r\n constructor(restBaseUrl: string, settings: ImageMapLayerSettings, fetchFunc: FetchFunction ){\r\n this._restBaseUrl = restBaseUrl;\r\n this._fetchFunc = fetchFunc;\r\n this._settings = settings;\r\n this._callQueues = new Array<Promise<boolean[]>>(ArcGISTileMap.maxLod).fill(Promise.resolve<boolean[]>(nonVisibleChildren));\r\n\r\n }\r\n protected async fetchTileMapFromServer(level: number, row: number, column: number, width: number, height: number): Promise<any> {\r\n const tmpUrl = `${this._restBaseUrl}/tilemap/${level}/${row}/${column}/${width}/${height}?f=json`;\r\n const response = await this._fetchFunc(new URL(tmpUrl));\r\n return response.json();\r\n }\r\n\r\n protected getAvailableTilesFromCache(tiles: QuadId[]): {allTilesFound: boolean, available: boolean[]} {\r\n let allTilesFound = true;\r\n\r\n // Check children visibility from cache\r\n const available = tiles.map((tileId) => {\r\n const avail = this._tilesCache.get(tileId.contentId);\r\n if (undefined === avail) {\r\n allTilesFound = false;\r\n }\r\n return avail ?? false;\r\n });\r\n\r\n return {allTilesFound, available};\r\n }\r\n\r\n public async getChildrenAvailability(childIds: QuadId[]): Promise<boolean[]> {\r\n if (!childIds.length)\r\n return [];\r\n\r\n // Before entering the queue for a backend request,\r\n // let check if cache doesn't already contain what we are looking for.\r\n const cacheInfo = this.getAvailableTilesFromCache(childIds);\r\n if (cacheInfo.allTilesFound) {\r\n\r\n if (cacheInfo.available.includes(false))\r\n return cacheInfo.available;\r\n\r\n return cacheInfo.available;\r\n }\r\n\r\n // If we never encountered this tile level before, then a tilemap request must be made to get tiles visibility.\r\n // However, we dont want several overlapping large tilemap request being made simultaneously for tiles on the same level.\r\n // To avoid this from happening, we 'serialize' async calls so that we wait until the first tilemap request has completed\r\n // before making another one.\r\n const childLevel = childIds[0].level+1;\r\n if (this._callQueues && childLevel < this._callQueues.length ) {\r\n const res = this._callQueues[childLevel].then(async () => {\r\n return this.getChildrenAvailabilityFromServer(childIds);\r\n });\r\n this._callQueues[childLevel] = res.catch(() => nonVisibleChildren);\r\n return res;\r\n } else {\r\n // We should not be in this case, probably because server info is missing LODs in the capabilities?!\r\n Logger.logWarning(loggerCategory, `Skipped request queue for child level ${childLevel}`);\r\n return this.getChildrenAvailabilityFromServer(childIds);\r\n }\r\n }\r\n\r\n private isCacheMissingTile(level: number, startRow: number, startColumn: number, endRow: number, endColumn: number) {\r\n let missingTileFound = false;\r\n\r\n if (endRow <= startRow || endColumn <= startColumn)\r\n return missingTileFound;\r\n\r\n for (let j = startColumn; j <= endColumn && !missingTileFound; j++) {\r\n for (let i = startRow; i<=endRow && !missingTileFound; i++) {\r\n if (j >= 0 && i >= 0) {\r\n const contentId = QuadId.getTileContentId(level, j, i);\r\n if (this._tilesCache.get(contentId) === undefined) {\r\n missingTileFound = true;\r\n }\r\n }\r\n }\r\n }\r\n return missingTileFound;\r\n }\r\n\r\n private collectTilesMissingFromCache( missingQueryTiles: QuadId[]) {\r\n const missingTiles: QuadId[] = [];\r\n for (const quad of missingQueryTiles) {\r\n const contentId = QuadId.getTileContentId(quad.level, quad.column, quad.row);\r\n const avail = this._tilesCache.get(contentId);\r\n if (avail === undefined)\r\n missingTiles.push(quad);\r\n\r\n }\r\n return missingTiles;\r\n }\r\n\r\n // Query tiles are tiles that we need to check availability\r\n // The array is assumed to be in in row major orientation, i.e.: [TileRow0Col0, TileRow0Col1, TileRow1Col0, TileRow1Col1,]\r\n public async fetchAndReadTilemap(queryTiles: QuadId[], reqWidth: number, reqHeight: number) {\r\n let available = queryTiles.map(()=>false);\r\n if (queryTiles.length === 0 ) {\r\n return available;\r\n }\r\n\r\n // console.log(`queryTiles: ${queryTiles.map((quad) => quad.contentId)}`);\r\n\r\n // Find the top-left most corner of the extent covering the query tiles.\r\n const getTopLeftCorner = (tiles: QuadId[]): {row: number|undefined, column: number|undefined} => {\r\n let row: number|undefined;\r\n let column: number|undefined;\r\n for (const quad of tiles) {\r\n if (row === undefined || quad.row <= row )\r\n row = quad.row;\r\n if (column === undefined || quad.column <= column) {\r\n column = quad.column ;\r\n }\r\n }\r\n return {row, column};\r\n };\r\n\r\n const level = queryTiles[0].level; // We assume all tiles to be on the same level\r\n\r\n let missingQueryTiles = this.collectTilesMissingFromCache(queryTiles);\r\n let gotAdjusted = false;\r\n let nbAttempt = 0; // Safety: We should never be making more requests than the number of queries tiles (otherwise something is wrong)\r\n while (missingQueryTiles.length > 0\r\n && (nbAttempt++ < queryTiles.length) ) {\r\n const tileMapTopLeft = getTopLeftCorner(missingQueryTiles);\r\n if (tileMapTopLeft.row === undefined || tileMapTopLeft.column === undefined)\r\n return available; // Should not occurs since missingQueryTiles is non empty\r\n\r\n let tileMapRow = tileMapTopLeft.row;\r\n let tileMapColumn = tileMapTopLeft.column;\r\n\r\n const logLocationOffset = (newRow: number, newCol: number) => `[Row:${newRow !== tileMapTopLeft.row ? `${tileMapTopLeft.row}->${newRow}` : `${newRow}`} Column:${newCol !== tileMapTopLeft.column ? `${tileMapTopLeft.column}->${newCol}` : `${newCol}`}]`;\r\n\r\n // Position the top-left missing tile in the middle of the tilemap; minimizing requests if sibling tiles are requested right after\r\n // If previous response got adjusted, don't try to optimize tile map location\r\n if (queryTiles.length < this.tileMapRequestSize && !gotAdjusted) {\r\n const tileMapOffset = this.tileMapOffset - Math.floor(Math.sqrt(queryTiles.length) * 0.5);\r\n const missingTileBufferSize = Math.ceil(tileMapOffset * 0.5);\r\n if (this.isCacheMissingTile(level, tileMapRow-missingTileBufferSize, tileMapColumn-missingTileBufferSize, tileMapRow-1, tileMapColumn-1)) {\r\n tileMapRow = Math.max(tileMapRow - tileMapOffset, 0);\r\n tileMapColumn = Math.max(tileMapColumn - tileMapOffset, 0);\r\n Logger.logTrace(loggerCategory, `Offset applied to location in top-left direction: ${logLocationOffset(tileMapRow, tileMapColumn)}`);\r\n } else {\r\n const leftMissingTiles = this.isCacheMissingTile(level, tileMapRow, tileMapColumn-missingTileBufferSize, tileMapRow+missingTileBufferSize, tileMapColumn-1);\r\n const topMissingTiles = this.isCacheMissingTile(level, tileMapRow-missingTileBufferSize, tileMapColumn, tileMapRow-1, tileMapColumn+missingTileBufferSize);\r\n if (leftMissingTiles && topMissingTiles) {\r\n tileMapRow = Math.max(tileMapRow - tileMapOffset, 0);\r\n tileMapColumn = Math.max(tileMapColumn- tileMapOffset, 0);\r\n Logger.logTrace(loggerCategory, `Offset applied to location in top-left direction. ${logLocationOffset(tileMapRow, tileMapColumn)}`);\r\n } else if (leftMissingTiles) {\r\n tileMapColumn = Math.max(tileMapColumn - tileMapOffset, 0);\r\n Logger.logTrace(loggerCategory, `Offset applied to location in left direction. ${logLocationOffset(tileMapRow, tileMapColumn)}`);\r\n } else if (topMissingTiles) {\r\n tileMapRow = Math.max(tileMapRow - tileMapOffset, 0);\r\n Logger.logTrace(loggerCategory, `Offset applied to location in top direction: ${logLocationOffset(tileMapRow, tileMapColumn)}`);\r\n } else\r\n Logger.logTrace(loggerCategory, `No offset applied to location: ${logLocationOffset(tileMapRow, tileMapColumn)}`);\r\n }\r\n }\r\n\r\n const json = await this.fetchTileMapFromServer(level, tileMapRow, tileMapColumn, reqWidth, reqHeight);\r\n let tileMapWidth = reqWidth;\r\n let tileMapHeight = reqHeight;\r\n if (Array.isArray(json.data)) {\r\n // The response width and height might be different than the requested dimensions.\r\n // Ref: https://developers.arcgis.com/rest/services-reference/enterprise/tile-map.htm\r\n if (json.adjusted) {\r\n gotAdjusted = true;\r\n // If tilemap size got adjusted, I'm expecting to get adjusted size...\r\n // otherwise there is something really odd with this server.\r\n assert(json.location?.width !== undefined && json.location?.height !== undefined);\r\n if (json.location?.width !== undefined && json.location?.height !== undefined) {\r\n tileMapWidth = json.location?.width;\r\n tileMapHeight = json.location?.height;\r\n }\r\n }\r\n // Build cache from tile map response\r\n for (let j = 0; j < tileMapHeight; j++) {\r\n for (let i = 0; i < tileMapWidth; i++) {\r\n const avail = json.data[(j*tileMapWidth)+i] !== 0;\r\n const curColumn = tileMapColumn + i;\r\n const curRow = tileMapRow + j;\r\n this._tilesCache.set(QuadId.getTileContentId(level, curColumn, curRow), avail);\r\n }\r\n }\r\n\r\n // Collect tile missing from the cache\r\n // There are 2 reasons why the tile map response would not cover all the missing tiles:\r\n // 1. The requested tile map size is not large enough to cover all tiles\r\n // 2. The tile map size has been adjusted by the server (i.e. data bundle limits)\r\n missingQueryTiles = this.collectTilesMissingFromCache(missingQueryTiles);\r\n if (missingQueryTiles.length > 0)\r\n Logger.logTrace(loggerCategory, `There are ${missingQueryTiles.length} missing tiles from previous request`);\r\n } else {\r\n missingQueryTiles = [];\r\n // Mark all tilemap tiles to non-available in the cache too.\r\n for (let j = 0; j < tileMapWidth; j++) {\r\n for (let i = 0; i < tileMapHeight; i++) {\r\n this._tilesCache.set(QuadId.getTileContentId(level, tileMapColumn + i, tileMapRow + j), false);\r\n }\r\n }\r\n }\r\n } // end loop missing tiles\r\n\r\n if (nbAttempt > queryTiles.length) {\r\n Logger.logError(loggerCategory, `Request loop was terminated; unable to get missing tiles; `);\r\n }\r\n // Create final output array from cache\r\n available = queryTiles.map((quad)=>this._tilesCache.get(quad.contentId) ?? false);\r\n\r\n if (available.includes(false))\r\n return available;\r\n\r\n return available;\r\n }\r\n\r\n protected async getChildrenAvailabilityFromServer(childIds: QuadId[]): Promise<boolean[]> {\r\n\r\n let available;\r\n try {\r\n available = await this.fetchAndReadTilemap(childIds, this.tileMapRequestSize, this.tileMapRequestSize);\r\n } catch (err) {\r\n // if any error occurs, we assume tiles not to be visible\r\n Logger.logError(loggerCategory, `Error while fetching tile map data : ${err}`);\r\n available = childIds.map(()=>false);\r\n }\r\n\r\n return available;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ArcGISTileMap.js","sourceRoot":"","sources":["../../../../src/tile/map/ArcGISTileMap.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { assert, compareStrings, Dictionary, Logger } from \"@itwin/core-bentley\";\r\nimport { QuadId } from \"../internal\";\r\nimport { ImageMapLayerSettings } from \"@itwin/core-common\";\r\nconst loggerCategory = \"ArcGISTileMap\";\r\n\r\n/** @internal */\r\nexport type FetchFunction = (url: URL, options?: RequestInit) => Promise<Response>;\r\n\r\nconst nonVisibleChildren = [false, false, false, false];\r\n\r\n/** @internal */\r\nexport class ArcGISTileMap {\r\n\r\n // For similar reasons as the corner offset, we need to keep the tile map size not too big to avoid covering multiple bundles.\r\n public tileMapRequestSize = 8;\r\n private static maxLod = 30;\r\n\r\n // We want to query a tile map that covers an area all around the top-lef missing tile, we offset the top-left corner position of the tilemap.\r\n // We used to create a 32x32 tiles area around the missing tiles, but this was causing the tilemap top-left position\r\n // to fall outside the dataset bundle of the remote server, thus giving invalid response.\r\n public get tileMapOffset() {return (this.tileMapRequestSize * 0.5);}\r\n\r\n public fallbackTileMapRequestSize = 2;\r\n\r\n private _callQueues: Array<Promise<boolean[]>> | undefined;\r\n private _tilesCache = new Dictionary<string, boolean>((lhs, rhs) => compareStrings(lhs, rhs));\r\n private _restBaseUrl: string;\r\n private _fetchFunc: FetchFunction;\r\n private _settings: ImageMapLayerSettings;\r\n\r\n constructor(restBaseUrl: string, settings: ImageMapLayerSettings, fetchFunc: FetchFunction ){\r\n this._restBaseUrl = restBaseUrl;\r\n this._fetchFunc = fetchFunc;\r\n this._settings = settings;\r\n this._callQueues = new Array<Promise<boolean[]>>(ArcGISTileMap.maxLod).fill(Promise.resolve<boolean[]>(nonVisibleChildren));\r\n\r\n }\r\n protected async fetchTileMapFromServer(level: number, row: number, column: number, width: number, height: number): Promise<any> {\r\n const tmpUrl = `${this._restBaseUrl}/tilemap/${level}/${row}/${column}/${width}/${height}?f=json`;\r\n const response = await this._fetchFunc(new URL(tmpUrl));\r\n return response.json();\r\n }\r\n\r\n protected getAvailableTilesFromCache(tiles: QuadId[]): {allTilesFound: boolean, available: boolean[]} {\r\n let allTilesFound = true;\r\n\r\n // Check children visibility from cache\r\n const available = tiles.map((tileId) => {\r\n const avail = this._tilesCache.get(tileId.contentId);\r\n if (undefined === avail) {\r\n allTilesFound = false;\r\n }\r\n return avail ?? false;\r\n });\r\n\r\n return {allTilesFound, available};\r\n }\r\n\r\n public async getChildrenAvailability(childIds: QuadId[]): Promise<boolean[]> {\r\n if (!childIds.length)\r\n return [];\r\n\r\n // Before entering the queue for a backend request,\r\n // let check if cache doesn't already contain what we are looking for.\r\n const cacheInfo = this.getAvailableTilesFromCache(childIds);\r\n if (cacheInfo.allTilesFound) {\r\n\r\n if (cacheInfo.available.includes(false))\r\n return cacheInfo.available;\r\n\r\n return cacheInfo.available;\r\n }\r\n\r\n // If we never encountered this tile level before, then a tilemap request must be made to get tiles visibility.\r\n // However, we dont want several overlapping large tilemap request being made simultaneously for tiles on the same level.\r\n // To avoid this from happening, we 'serialize' async calls so that we wait until the first tilemap request has completed\r\n // before making another one.\r\n const childLevel = childIds[0].level+1;\r\n if (this._callQueues && childLevel < this._callQueues.length ) {\r\n const res = this._callQueues[childLevel].then(async () => {\r\n return this.getChildrenAvailabilityFromServer(childIds);\r\n });\r\n this._callQueues[childLevel] = res.catch(() => nonVisibleChildren);\r\n return res;\r\n } else {\r\n // We should not be in this case, probably because server info is missing LODs in the capabilities?!\r\n Logger.logWarning(loggerCategory, `Skipped request queue for child level ${childLevel}`);\r\n return this.getChildrenAvailabilityFromServer(childIds);\r\n }\r\n }\r\n\r\n private isCacheMissingTile(level: number, startRow: number, startColumn: number, endRow: number, endColumn: number) {\r\n let missingTileFound = false;\r\n\r\n if (endRow <= startRow || endColumn <= startColumn)\r\n return missingTileFound;\r\n\r\n for (let j = startColumn; j <= endColumn && !missingTileFound; j++) {\r\n for (let i = startRow; i<=endRow && !missingTileFound; i++) {\r\n if (j >= 0 && i >= 0) {\r\n const contentId = QuadId.getTileContentId(level, j, i);\r\n if (this._tilesCache.get(contentId) === undefined) {\r\n missingTileFound = true;\r\n }\r\n }\r\n }\r\n }\r\n return missingTileFound;\r\n }\r\n\r\n private collectTilesMissingFromCache( missingQueryTiles: QuadId[]) {\r\n const missingTiles: QuadId[] = [];\r\n for (const quad of missingQueryTiles) {\r\n const contentId = QuadId.getTileContentId(quad.level, quad.column, quad.row);\r\n const avail = this._tilesCache.get(contentId);\r\n if (avail === undefined)\r\n missingTiles.push(quad);\r\n\r\n }\r\n return missingTiles;\r\n }\r\n\r\n // Query tiles are tiles that we need to check availability\r\n // The array is assumed to be in in row major orientation, i.e.: [TileRow0Col0, TileRow0Col1, TileRow1Col0, TileRow1Col1,]\r\n public async fetchAndReadTilemap(queryTiles: QuadId[], reqWidth: number, reqHeight: number) {\r\n let available = queryTiles.map(()=>false);\r\n if (queryTiles.length === 0 ) {\r\n return available;\r\n }\r\n\r\n // console.log(`queryTiles: ${queryTiles.map((quad) => quad.contentId)}`);\r\n\r\n // Find the top-left most corner of the extent covering the query tiles.\r\n const getTopLeftCorner = (tiles: QuadId[]): {row: number|undefined, column: number|undefined} => {\r\n let row: number|undefined;\r\n let column: number|undefined;\r\n for (const quad of tiles) {\r\n if (row === undefined || quad.row <= row )\r\n row = quad.row;\r\n if (column === undefined || quad.column <= column) {\r\n column = quad.column ;\r\n }\r\n }\r\n return {row, column};\r\n };\r\n\r\n const level = queryTiles[0].level; // We assume all tiles to be on the same level\r\n\r\n let missingQueryTiles = this.collectTilesMissingFromCache(queryTiles);\r\n let gotAdjusted = false;\r\n let nbAttempt = 0; // Safety: We should never be making more requests than the number of queries tiles (otherwise something is wrong)\r\n while (missingQueryTiles.length > 0\r\n && (nbAttempt++ < queryTiles.length) ) {\r\n const tileMapTopLeft = getTopLeftCorner(missingQueryTiles);\r\n if (tileMapTopLeft.row === undefined || tileMapTopLeft.column === undefined)\r\n return available; // Should not occurs since missingQueryTiles is non empty\r\n\r\n let tileMapRow = tileMapTopLeft.row;\r\n let tileMapColumn = tileMapTopLeft.column;\r\n\r\n const logLocationOffset = (newRow: number, newCol: number) => `[Row:${newRow !== tileMapTopLeft.row ? `${tileMapTopLeft.row}->${newRow}` : `${newRow}`} Column:${newCol !== tileMapTopLeft.column ? `${tileMapTopLeft.column}->${newCol}` : `${newCol}`}]`;\r\n\r\n // Position the top-left missing tile in the middle of the tilemap; minimizing requests if sibling tiles are requested right after\r\n // If previous response got adjusted, don't try to optimize tile map location\r\n if (queryTiles.length < this.tileMapRequestSize && !gotAdjusted) {\r\n const tileMapOffset = this.tileMapOffset - Math.floor(Math.sqrt(queryTiles.length) * 0.5);\r\n const missingTileBufferSize = Math.ceil(tileMapOffset * 0.5);\r\n if (this.isCacheMissingTile(level, tileMapRow-missingTileBufferSize, tileMapColumn-missingTileBufferSize, tileMapRow-1, tileMapColumn-1)) {\r\n tileMapRow = Math.max(tileMapRow - tileMapOffset, 0);\r\n tileMapColumn = Math.max(tileMapColumn - tileMapOffset, 0);\r\n Logger.logTrace(loggerCategory, `Offset applied to location in top-left direction: ${logLocationOffset(tileMapRow, tileMapColumn)}`);\r\n } else {\r\n const leftMissingTiles = this.isCacheMissingTile(level, tileMapRow, tileMapColumn-missingTileBufferSize, tileMapRow+missingTileBufferSize, tileMapColumn-1);\r\n const topMissingTiles = this.isCacheMissingTile(level, tileMapRow-missingTileBufferSize, tileMapColumn, tileMapRow-1, tileMapColumn+missingTileBufferSize);\r\n if (leftMissingTiles && topMissingTiles) {\r\n tileMapRow = Math.max(tileMapRow - tileMapOffset, 0);\r\n tileMapColumn = Math.max(tileMapColumn- tileMapOffset, 0);\r\n Logger.logTrace(loggerCategory, `Offset applied to location in top-left direction. ${logLocationOffset(tileMapRow, tileMapColumn)}`);\r\n } else if (leftMissingTiles) {\r\n tileMapColumn = Math.max(tileMapColumn - tileMapOffset, 0);\r\n Logger.logTrace(loggerCategory, `Offset applied to location in left direction. ${logLocationOffset(tileMapRow, tileMapColumn)}`);\r\n } else if (topMissingTiles) {\r\n tileMapRow = Math.max(tileMapRow - tileMapOffset, 0);\r\n Logger.logTrace(loggerCategory, `Offset applied to location in top direction: ${logLocationOffset(tileMapRow, tileMapColumn)}`);\r\n } else\r\n Logger.logTrace(loggerCategory, `No offset applied to location: ${logLocationOffset(tileMapRow, tileMapColumn)}`);\r\n }\r\n }\r\n\r\n const json = await this.fetchTileMapFromServer(level, tileMapRow, tileMapColumn, reqWidth, reqHeight);\r\n let tileMapWidth = reqWidth;\r\n let tileMapHeight = reqHeight;\r\n if (Array.isArray(json.data)) {\r\n // The response width and height might be different than the requested dimensions.\r\n // Ref: https://developers.arcgis.com/rest/services-reference/enterprise/tile-map.htm\r\n if (json.adjusted) {\r\n gotAdjusted = true;\r\n // If tilemap size got adjusted, I'm expecting to get adjusted size...\r\n // otherwise there is something really odd with this server.\r\n assert(json.location?.width !== undefined && json.location?.height !== undefined);\r\n if (json.location?.width !== undefined && json.location?.height !== undefined) {\r\n tileMapWidth = json.location?.width;\r\n tileMapHeight = json.location?.height;\r\n }\r\n }\r\n // Build cache from tile map response\r\n for (let j = 0; j < tileMapHeight; j++) {\r\n for (let i = 0; i < tileMapWidth; i++) {\r\n const avail = json.data[(j*tileMapWidth)+i] !== 0;\r\n const curColumn = tileMapColumn + i;\r\n const curRow = tileMapRow + j;\r\n this._tilesCache.set(QuadId.getTileContentId(level, curColumn, curRow), avail);\r\n }\r\n }\r\n\r\n // Collect tile missing from the cache\r\n // There are 2 reasons why the tile map response would not cover all the missing tiles:\r\n // 1. The requested tile map size is not large enough to cover all tiles\r\n // 2. The tile map size has been adjusted by the server (i.e. data bundle limits)\r\n missingQueryTiles = this.collectTilesMissingFromCache(missingQueryTiles);\r\n if (missingQueryTiles.length > 0)\r\n Logger.logTrace(loggerCategory, `There are ${missingQueryTiles.length} missing tiles from previous request`);\r\n } else {\r\n missingQueryTiles = [];\r\n // Mark all tilemap tiles to non-available in the cache too.\r\n for (let j = 0; j < tileMapWidth; j++) {\r\n for (let i = 0; i < tileMapHeight; i++) {\r\n this._tilesCache.set(QuadId.getTileContentId(level, tileMapColumn + i, tileMapRow + j), false);\r\n }\r\n }\r\n }\r\n } // end loop missing tiles\r\n\r\n if (nbAttempt > queryTiles.length) {\r\n Logger.logError(loggerCategory, `Request loop was terminated; unable to get missing tiles; `);\r\n }\r\n // Create final output array from cache\r\n available = queryTiles.map((quad)=>this._tilesCache.get(quad.contentId) ?? false);\r\n\r\n if (available.includes(false))\r\n return available;\r\n\r\n return available;\r\n }\r\n\r\n protected async getChildrenAvailabilityFromServer(childIds: QuadId[]): Promise<boolean[]> {\r\n\r\n let available;\r\n try {\r\n available = await this.fetchAndReadTilemap(childIds, this.tileMapRequestSize, this.tileMapRequestSize);\r\n } catch (err) {\r\n // if any error occurs, we assume tiles not to be visible\r\n Logger.logError(loggerCategory, `Error while fetching tile map data : ${err}`);\r\n available = childIds.map(()=>false);\r\n }\r\n\r\n return available;\r\n }\r\n}\r\n"]}
@@ -186,6 +186,7 @@ export class ArcGisUtilities {
186
186
  const zeroLod = tileInfo.lods[0];
187
187
  return zeroLod.level === 0 && Math.abs(zeroLod.resolution - 156543.03392800014) < .001;
188
188
  }
189
+ static { this._serviceCache = new Map(); }
189
190
  /**
190
191
  * Fetches an ArcGIS service metadata, and returns its JSON representation.
191
192
  * If an access client has been configured for the specified formatId,
@@ -347,5 +348,4 @@ export class ArcGisUtilities {
347
348
  return { minLod, maxLod };
348
349
  }
349
350
  }
350
- ArcGisUtilities._serviceCache = new Map();
351
351
  //# sourceMappingURL=ArcGisUtilities.js.map