@cesium/engine 26.2.0 → 26.3.1-wasm.0

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 (393) hide show
  1. package/Build/ThirdParty/Workers/zip-web-worker.js +707 -600
  2. package/Build/Workers/chunk-2P3WKV6V.js +290 -0
  3. package/Build/Workers/{chunk-M6QKXVAU.js → chunk-2U5272QU.js} +17 -17
  4. package/Build/Workers/{chunk-NEFDMMLY.js → chunk-4KCOC6OZ.js} +8 -10
  5. package/Build/Workers/{chunk-SJYSIOEM.js → chunk-5FULJNWY.js} +11 -13
  6. package/Build/Workers/{chunk-NCL22ZUX.js → chunk-65ZF23AQ.js} +1 -1
  7. package/Build/Workers/{chunk-KP5QD7WU.js → chunk-6D5534B7.js} +10 -12
  8. package/Build/Workers/{chunk-FX3VEAIU.js → chunk-6GFMBHBD.js} +19 -19
  9. package/Build/Workers/{chunk-A62YI6S6.js → chunk-6VRGQF3D.js} +4 -4
  10. package/Build/Workers/{chunk-DSGLDRTI.js → chunk-6XUIECFB.js} +4 -6
  11. package/Build/Workers/{chunk-HDL4HOXZ.js → chunk-7KWUH6RK.js} +14 -14
  12. package/Build/Workers/{chunk-UAZUP4I5.js → chunk-7ZBJRQQT.js} +7 -7
  13. package/Build/Workers/{chunk-CRCGE4J4.js → chunk-AEHANE5A.js} +991 -5612
  14. package/Build/Workers/chunk-AUU74SIZ.js +2420 -0
  15. package/Build/Workers/{chunk-ARZICEEP.js → chunk-B6V5NMIE.js} +13 -11
  16. package/Build/Workers/{chunk-76FDC45O.js → chunk-BRQ52ASU.js} +15 -17
  17. package/Build/Workers/{chunk-SA2A2AN5.js → chunk-FVLSQBPH.js} +7 -14
  18. package/Build/Workers/{chunk-CUTRKXUQ.js → chunk-IFKM2GZR.js} +12 -12
  19. package/Build/Workers/{chunk-NSKZ6SBK.js → chunk-KF6OEWVT.js} +17 -17
  20. package/Build/Workers/{chunk-O3DKEX7Q.js → chunk-KOAXSU77.js} +5 -7
  21. package/Build/Workers/{chunk-2Z4ZLVOD.js → chunk-KRVYCMGN.js} +6 -6
  22. package/Build/Workers/{chunk-SXSP3JHS.js → chunk-LTZRLNQP.js} +1 -1
  23. package/Build/Workers/{chunk-6FZDPMTO.js → chunk-M7WEAGWT.js} +8 -8
  24. package/Build/Workers/{chunk-NXGQBQWE.js → chunk-MJTLGN63.js} +14 -14
  25. package/Build/Workers/{chunk-XCBZVTIV.js → chunk-MUNZ77KV.js} +1 -1
  26. package/Build/Workers/{chunk-NLLCQBX3.js → chunk-NC5BUJEF.js} +2 -2
  27. package/Build/Workers/chunk-NYKURYFR.js +2131 -0
  28. package/Build/Workers/{chunk-5LSOO2KD.js → chunk-NZAQG57U.js} +7 -7
  29. package/Build/Workers/{chunk-DZUFEE4L.js → chunk-O5GUOP2G.js} +5 -7
  30. package/Build/Workers/{chunk-D6AY775A.js → chunk-OQUOLQTN.js} +8 -10
  31. package/Build/Workers/{chunk-CDJDJ5LK.js → chunk-OUG5JB2K.js} +16 -14
  32. package/Build/Workers/{chunk-ACTVJHSP.js → chunk-P4SDLSGF.js} +13 -6
  33. package/Build/Workers/{chunk-MAAHFYPC.js → chunk-P6PC2OIM.js} +7 -7
  34. package/Build/Workers/{chunk-6YR6JBMY.js → chunk-PPRK3XQU.js} +31 -35
  35. package/Build/Workers/{chunk-IMBVP57H.js → chunk-QGTYLWOT.js} +2 -2
  36. package/Build/Workers/{chunk-FCP2QY4G.js → chunk-QHTLIQUH.js} +5 -7
  37. package/Build/Workers/{chunk-EZGQPOIG.js → chunk-ROHWZQZ5.js} +5 -5
  38. package/Build/Workers/{chunk-B3QHNA4A.js → chunk-SNUWISJO.js} +6 -8
  39. package/Build/Workers/{chunk-XDWCTQCZ.js → chunk-T67YY3KP.js} +4 -2
  40. package/Build/Workers/{chunk-IJZJMIUY.js → chunk-TF5473GK.js} +13 -13
  41. package/Build/Workers/{chunk-OZGPS7FB.js → chunk-THHFTMAL.js} +4 -6
  42. package/Build/Workers/{chunk-PRWUMCXF.js → chunk-UFCZ62WM.js} +15 -13
  43. package/Build/Workers/{chunk-27FWRTJI.js → chunk-UV2YC2Q5.js} +11 -11
  44. package/Build/Workers/{chunk-N7CCOFLX.js → chunk-V4ICCWYA.js} +1 -1
  45. package/Build/Workers/{chunk-GHXVQVUM.js → chunk-VC6XXI2Z.js} +9 -9
  46. package/Build/Workers/{chunk-I74ZH5LK.js → chunk-VXJ6P4UI.js} +10 -10
  47. package/Build/Workers/{chunk-KGXSYGBG.js → chunk-W2BKP7G7.js} +15 -17
  48. package/Build/Workers/{chunk-LDRQSYBN.js → chunk-WMVGNBSH.js} +2 -2
  49. package/Build/Workers/{chunk-SMTGMFBL.js → chunk-XFZMQZSZ.js} +4 -4
  50. package/Build/Workers/{chunk-7MM3N2VE.js → chunk-XJ532R6R.js} +20 -20
  51. package/Build/Workers/{chunk-NJVBJG63.js → chunk-YJNU4SM4.js} +5 -5
  52. package/Build/Workers/{chunk-DIGUUD6G.js → chunk-YJRDTEHQ.js} +8 -8
  53. package/Build/Workers/chunk-YUICDZKO.js +2660 -0
  54. package/Build/Workers/{chunk-O3XFXGPZ.js → chunk-Z3DEVGJV.js} +7 -7
  55. package/Build/Workers/{chunk-3PSS3T43.js → chunk-ZECGI7UZ.js} +4 -4
  56. package/Build/Workers/{chunk-QFSSCLLZ.js → chunk-ZFLPVPUJ.js} +6 -8
  57. package/Build/Workers/{chunk-2RGJPWQX.js → chunk-ZIM5H2DB.js} +11 -11
  58. package/Build/Workers/{chunk-GVA7XQI2.js → chunk-ZSQMGGSB.js} +14 -16
  59. package/Build/Workers/{chunk-FU4BGABC.js → chunk-ZWYRGMBK.js} +16 -18
  60. package/Build/Workers/{chunk-JKXV6PG5.js → chunk-ZY733NZA.js} +1 -1
  61. package/Build/Workers/combineGeometry.js +24 -24
  62. package/Build/Workers/createBoxGeometry.js +18 -18
  63. package/Build/Workers/createBoxOutlineGeometry.js +20 -19
  64. package/Build/Workers/createCircleGeometry.js +28 -27
  65. package/Build/Workers/createCircleOutlineGeometry.js +21 -20
  66. package/Build/Workers/createCoplanarPolygonGeometry.js +34 -34
  67. package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +33 -32
  68. package/Build/Workers/createCorridorGeometry.js +31 -31
  69. package/Build/Workers/createCorridorOutlineGeometry.js +30 -30
  70. package/Build/Workers/createCylinderGeometry.js +20 -20
  71. package/Build/Workers/createCylinderOutlineGeometry.js +22 -21
  72. package/Build/Workers/createEllipseGeometry.js +26 -26
  73. package/Build/Workers/createEllipseOutlineGeometry.js +19 -19
  74. package/Build/Workers/createEllipsoidGeometry.js +19 -19
  75. package/Build/Workers/createEllipsoidOutlineGeometry.js +18 -18
  76. package/Build/Workers/createFrustumGeometry.js +18 -18
  77. package/Build/Workers/createFrustumOutlineGeometry.js +18 -18
  78. package/Build/Workers/createGeometry.js +27 -26
  79. package/Build/Workers/createGroundPolylineGeometry.js +27 -26
  80. package/Build/Workers/createPlaneGeometry.js +18 -17
  81. package/Build/Workers/createPlaneOutlineGeometry.js +15 -15
  82. package/Build/Workers/createPolygonGeometry.js +35 -35
  83. package/Build/Workers/createPolygonOutlineGeometry.js +34 -34
  84. package/Build/Workers/createPolylineGeometry.js +28 -29
  85. package/Build/Workers/createPolylineVolumeGeometry.js +34 -35
  86. package/Build/Workers/createPolylineVolumeOutlineGeometry.js +30 -31
  87. package/Build/Workers/createRectangleGeometry.js +30 -30
  88. package/Build/Workers/createRectangleOutlineGeometry.js +23 -24
  89. package/Build/Workers/createSimplePolylineGeometry.js +26 -27
  90. package/Build/Workers/createSphereGeometry.js +19 -19
  91. package/Build/Workers/createSphereOutlineGeometry.js +18 -18
  92. package/Build/Workers/createTaskProcessorWorker.js +3 -3
  93. package/Build/Workers/createVectorTileClampedPolylines.js +17 -16
  94. package/Build/Workers/createVectorTileGeometries.js +24 -24
  95. package/Build/Workers/createVectorTilePoints.js +13 -13
  96. package/Build/Workers/createVectorTilePolygons.js +22 -22
  97. package/Build/Workers/createVectorTilePolylines.js +17 -16
  98. package/Build/Workers/createVerticesFromCesium3DTilesTerrain.js +36 -26
  99. package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +24 -24
  100. package/Build/Workers/createVerticesFromHeightmap.js +24 -25
  101. package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +20 -20
  102. package/Build/Workers/createWallGeometry.js +27 -28
  103. package/Build/Workers/createWallOutlineGeometry.js +26 -27
  104. package/Build/Workers/decodeDraco.js +16 -12
  105. package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +336 -337
  106. package/Build/Workers/decodeI3S.js +17 -12
  107. package/Build/Workers/{chunk-GXWQZBAI.js → decodeMeshopt.js} +23 -29
  108. package/Build/Workers/decodeSpz.js +1960 -0
  109. package/Build/Workers/gaussianSplatSorter.js +13 -6
  110. package/Build/Workers/gaussianSplatTextureGenerator.js +13 -6
  111. package/Build/Workers/incrementallyBuildTerrainPicker.js +9 -10
  112. package/Build/Workers/transcodeKTX2.js +26 -12
  113. package/Build/Workers/transferTypedArrayTest.js +1 -1
  114. package/Build/Workers/upsampleQuantizedTerrainMesh.js +24 -24
  115. package/Build/Workers/upsampleVerticesFromCesium3DTilesTerrain.js +25 -25
  116. package/Source/Core/Cesium3DTilesTerrainData.js +11 -1
  117. package/Source/Core/Cesium3DTilesTerrainGeometryProcessor.js +33 -23
  118. package/Source/Core/Ion.js +1 -1
  119. package/Source/Core/IonResource.js +5 -0
  120. package/Source/Core/IonSnapGeometryType.js +59 -0
  121. package/Source/Core/IonSnapHeat.js +33 -0
  122. package/Source/Core/IonSnapMode.js +45 -0
  123. package/Source/Core/IonSnapParentGeometryType.js +52 -0
  124. package/Source/Core/IonSnapService.js +369 -0
  125. package/Source/Core/KTX2Transcoder.js +99 -5
  126. package/Source/Core/Resource.js +2 -0
  127. package/Source/Core/SnapService.js +63 -0
  128. package/Source/Core/TaskProcessor.js +249 -129
  129. package/Source/Core/TrustedServers.js +34 -1
  130. package/Source/Core/VectorPipeline.js +139 -45
  131. package/Source/Core/VectorProvider.js +311 -71
  132. package/Source/Core/WebAssemblyWorkerInitializer.js +125 -0
  133. package/Source/Core/fetchWebAssemblyBinary.js +52 -0
  134. package/Source/Renderer/AutomaticUniforms.js +44 -2
  135. package/Source/Renderer/ShaderBuilder.js +1 -1
  136. package/Source/Renderer/UniformState.js +47 -1
  137. package/Source/Scene/ArcGisMapService.js +1 -1
  138. package/Source/Scene/BufferPointCollection.js +4 -7
  139. package/Source/Scene/BufferPolygonCollection.js +56 -27
  140. package/Source/Scene/BufferPolylineCollection.js +61 -8
  141. package/Source/Scene/BufferPolylineMaterial.js +6 -5
  142. package/Source/Scene/BufferPrimitiveCollection.js +199 -29
  143. package/Source/Scene/Cesium3DTile.js +12 -0
  144. package/Source/Scene/Cesium3DTileset.js +61 -8
  145. package/Source/Scene/Cesium3DTilesetBaseTraversal.js +15 -3
  146. package/Source/Scene/Cesium3DTilesetCache.js +15 -0
  147. package/Source/Scene/ClippingPolygon.js +154 -100
  148. package/Source/Scene/ClippingPolygonCollection.js +352 -694
  149. package/Source/Scene/CreditDisplay.js +62 -0
  150. package/Source/Scene/GaussianSplatPrimitive.js +153 -66
  151. package/Source/Scene/GeoJsonPrimitive.js +114 -24
  152. package/Source/Scene/GlobeSurfaceShaderSet.js +33 -54
  153. package/Source/Scene/GlobeSurfaceTile.js +14 -1
  154. package/Source/Scene/GlobeSurfaceTileProvider.js +232 -25
  155. package/Source/Scene/GltfBufferViewLoader.js +25 -13
  156. package/Source/Scene/GltfLoader.js +56 -6
  157. package/Source/Scene/GltfSpzLoader.js +5 -4
  158. package/Source/Scene/HeightReference.js +1 -1
  159. package/Source/Scene/MVTDataProvider.js +9 -0
  160. package/Source/Scene/Model/Model.js +242 -16
  161. package/Source/Scene/Model/Model3DTileContent.js +5 -0
  162. package/Source/Scene/Model/ModelClippingPolygonsPipelineStage.js +54 -19
  163. package/Source/Scene/Model/ModelRenderResources.js +2 -3
  164. package/Source/Scene/Model/ModelSceneGraph.js +10 -1
  165. package/Source/Scene/Model/ModelVectorLookupPipelineStage.js +205 -0
  166. package/Source/Scene/Model/PickingPipelineStage.js +4 -0
  167. package/Source/Scene/PostProcessStage.js +22 -3
  168. package/Source/Scene/Scene.js +56 -1
  169. package/Source/Scene/Snapping.js +57 -0
  170. package/Source/Scene/SpzDecoder.js +106 -0
  171. package/Source/Scene/UrlTemplate3DTilesDataProvider.js +12 -1
  172. package/Source/Scene/VectorGltf3DTileContent.js +10 -2
  173. package/Source/Scene/WebMapServiceImageryProvider.js +5 -1
  174. package/Source/Scene/WebMapTileServiceImageryProvider.js +6 -1
  175. package/Source/Scene/renderBufferPolylineCollection.js +5 -1
  176. package/Source/Shaders/BufferPolylineMaterialVS.glsl +14 -2
  177. package/Source/Shaders/BufferPolylineMaterialVS.js +14 -2
  178. package/Source/Shaders/Builtin/CzmBuiltins.js +2 -4
  179. package/Source/Shaders/Builtin/Functions/eyeToCartographicDelta.glsl +74 -0
  180. package/Source/Shaders/Builtin/Functions/eyeToCartographicDelta.js +76 -0
  181. package/Source/Shaders/GlobeFS.glsl +10 -9
  182. package/Source/Shaders/GlobeFS.js +11 -9
  183. package/Source/Shaders/GlobeVS.glsl +0 -32
  184. package/Source/Shaders/GlobeVS.js +0 -32
  185. package/Source/Shaders/Model/ModelClippingPolygonsStageFS.glsl +15 -3
  186. package/Source/Shaders/Model/ModelClippingPolygonsStageFS.js +15 -3
  187. package/Source/Shaders/Model/ModelClippingPolygonsStageVS.glsl +20 -24
  188. package/Source/Shaders/Model/ModelClippingPolygonsStageVS.js +20 -24
  189. package/Source/Shaders/Model/ModelFS.glsl +4 -0
  190. package/Source/Shaders/Model/ModelFS.js +4 -0
  191. package/Source/Shaders/Model/ModelVS.glsl +7 -2
  192. package/Source/Shaders/Model/ModelVS.js +7 -2
  193. package/Source/Shaders/Model/ModelVectorLookupStageFS.glsl +6 -0
  194. package/Source/Shaders/Model/ModelVectorLookupStageFS.js +8 -0
  195. package/Source/Shaders/Model/ModelVectorLookupStageVS.glsl +15 -0
  196. package/Source/Shaders/Model/ModelVectorLookupStageVS.js +17 -0
  197. package/Source/Shaders/Model/VerticalExaggerationStageVS.glsl +9 -10
  198. package/Source/Shaders/Model/VerticalExaggerationStageVS.js +9 -11
  199. package/Source/Shaders/VectorCommon.glsl +177 -50
  200. package/Source/Shaders/VectorCommon.js +251 -19
  201. package/Source/ThirdParty/Workers/zip-web-worker.js +1 -1
  202. package/Source/ThirdParty/zip-module.wasm +0 -0
  203. package/Source/Workers/createTaskProcessorWorker.js +2 -0
  204. package/Source/Workers/createVerticesFromCesium3DTilesTerrain.js +13 -1
  205. package/Source/Workers/decodeDraco.js +7 -3
  206. package/Source/Workers/decodeI3S.js +7 -3
  207. package/Source/Workers/decodeMeshopt.js +21 -0
  208. package/Source/Workers/decodeSpz.js +20 -0
  209. package/Source/Workers/gaussianSplatSorter.js +7 -3
  210. package/Source/Workers/gaussianSplatTextureGenerator.js +7 -3
  211. package/Source/Workers/transcodeKTX2.js +22 -5
  212. package/index.d.ts +649 -55
  213. package/index.js +23 -13
  214. package/package.json +6 -6
  215. package/Build/Workers/chunk-2EFYUSUY.js +0 -1483
  216. package/Build/Workers/chunk-2H5264K7.js +0 -1284
  217. package/Build/Workers/chunk-2H73KDBM.js +0 -511
  218. package/Build/Workers/chunk-2ZKH2QZB.js +0 -387
  219. package/Build/Workers/chunk-36NI5E6W.js +0 -3820
  220. package/Build/Workers/chunk-37SW7SYS.js +0 -778
  221. package/Build/Workers/chunk-3GHVJ3SO.js +0 -455
  222. package/Build/Workers/chunk-3LB4UVPU.js +0 -387
  223. package/Build/Workers/chunk-3PONLKEL.js +0 -778
  224. package/Build/Workers/chunk-3QR662HH.js +0 -3820
  225. package/Build/Workers/chunk-3SX2WYSO.js +0 -973
  226. package/Build/Workers/chunk-3UDN6LYX.js +0 -476
  227. package/Build/Workers/chunk-47MCBSXI.js +0 -9237
  228. package/Build/Workers/chunk-4E626OCE.js +0 -1067
  229. package/Build/Workers/chunk-4NW2MJKH.js +0 -455
  230. package/Build/Workers/chunk-52YK5BSN.js +0 -198
  231. package/Build/Workers/chunk-5RNAQZK6.js +0 -9234
  232. package/Build/Workers/chunk-5YPQBFRD.js +0 -519
  233. package/Build/Workers/chunk-6FHT43QR.js +0 -140
  234. package/Build/Workers/chunk-6HK6IXK2.js +0 -138
  235. package/Build/Workers/chunk-6R5X2GUA.js +0 -1284
  236. package/Build/Workers/chunk-7A2OGDHT.js +0 -305
  237. package/Build/Workers/chunk-7CGEQUM2.js +0 -305
  238. package/Build/Workers/chunk-7D2HZKH7.js +0 -455
  239. package/Build/Workers/chunk-7I325HV6.js +0 -1344
  240. package/Build/Workers/chunk-7KVKHY7O.js +0 -147
  241. package/Build/Workers/chunk-7TKLTCZW.js +0 -219
  242. package/Build/Workers/chunk-7UUKBDH6.js +0 -1054
  243. package/Build/Workers/chunk-7W6DUHAB.js +0 -693
  244. package/Build/Workers/chunk-7XM5JK5F.js +0 -162
  245. package/Build/Workers/chunk-7YG3ND3P.js +0 -454
  246. package/Build/Workers/chunk-A3O6EDBK.js +0 -73
  247. package/Build/Workers/chunk-A6X24AZI.js +0 -1992
  248. package/Build/Workers/chunk-A7TTWVTF.js +0 -2719
  249. package/Build/Workers/chunk-ADX3CBKD.js +0 -9234
  250. package/Build/Workers/chunk-AF7DTMJ7.js +0 -398
  251. package/Build/Workers/chunk-AHWAZRBV.js +0 -82
  252. package/Build/Workers/chunk-AJSFRY4U.js +0 -1344
  253. package/Build/Workers/chunk-B4CQSLZJ.js +0 -305
  254. package/Build/Workers/chunk-BKPQFCXH.js +0 -511
  255. package/Build/Workers/chunk-BSPCI2LO.js +0 -959
  256. package/Build/Workers/chunk-BUJWSX5S.js +0 -301
  257. package/Build/Workers/chunk-C7JQVRLM.js +0 -497
  258. package/Build/Workers/chunk-C7QDUNI3.js +0 -138
  259. package/Build/Workers/chunk-CEEZE3YZ.js +0 -476
  260. package/Build/Workers/chunk-CIV5DJOQ.js +0 -778
  261. package/Build/Workers/chunk-CLCTQVVL.js +0 -241
  262. package/Build/Workers/chunk-CQNFIAZU.js +0 -56
  263. package/Build/Workers/chunk-DBD5WWG2.js +0 -959
  264. package/Build/Workers/chunk-DZBQUULR.js +0 -138
  265. package/Build/Workers/chunk-E2NKV5YT.js +0 -3820
  266. package/Build/Workers/chunk-E7NZJOK7.js +0 -3792
  267. package/Build/Workers/chunk-EB3Y5P3A.js +0 -368
  268. package/Build/Workers/chunk-EHTS2YPT.js +0 -2719
  269. package/Build/Workers/chunk-ELE6SC2C.js +0 -837
  270. package/Build/Workers/chunk-ENNFMWDW.js +0 -789
  271. package/Build/Workers/chunk-EOWDZN5S.js +0 -288
  272. package/Build/Workers/chunk-ERKUET22.js +0 -3201
  273. package/Build/Workers/chunk-F2IMBMZY.js +0 -241
  274. package/Build/Workers/chunk-F4CSNRZO.js +0 -219
  275. package/Build/Workers/chunk-FBP4DUQJ.js +0 -693
  276. package/Build/Workers/chunk-FDK4K5IA.js +0 -280
  277. package/Build/Workers/chunk-FGQFQHN5.js +0 -1054
  278. package/Build/Workers/chunk-FJWZMGOQ.js +0 -1992
  279. package/Build/Workers/chunk-FQ42MT7M.js +0 -58
  280. package/Build/Workers/chunk-GGNWQWSB.js +0 -301
  281. package/Build/Workers/chunk-GNKXEN4C.js +0 -682
  282. package/Build/Workers/chunk-GSWMAFTE.js +0 -9230
  283. package/Build/Workers/chunk-GXDHRC4J.js +0 -1344
  284. package/Build/Workers/chunk-GYSYP6PC.js +0 -1067
  285. package/Build/Workers/chunk-H2WCFXLP.js +0 -241
  286. package/Build/Workers/chunk-HHV3MCGV.js +0 -162
  287. package/Build/Workers/chunk-HLW2ZRVK.js +0 -368
  288. package/Build/Workers/chunk-HS6AD4P2.js +0 -398
  289. package/Build/Workers/chunk-HT6FASOT.js +0 -973
  290. package/Build/Workers/chunk-IDVHUDZT.js +0 -352
  291. package/Build/Workers/chunk-IGAZBTFZ.js +0 -3201
  292. package/Build/Workers/chunk-ILME5BXA.js +0 -301
  293. package/Build/Workers/chunk-IOO7Z2AV.js +0 -57
  294. package/Build/Workers/chunk-IUIFLOYO.js +0 -44
  295. package/Build/Workers/chunk-J73T2VOY.js +0 -171
  296. package/Build/Workers/chunk-JALGQYDY.js +0 -288
  297. package/Build/Workers/chunk-JW6OZT4R.js +0 -288
  298. package/Build/Workers/chunk-JXYLJCTC.js +0 -124
  299. package/Build/Workers/chunk-K27QOAW6.js +0 -97
  300. package/Build/Workers/chunk-KMV25A63.js +0 -789
  301. package/Build/Workers/chunk-KZWFWJML.js +0 -2719
  302. package/Build/Workers/chunk-LCXRRALY.js +0 -387
  303. package/Build/Workers/chunk-LD64RPYV.js +0 -368
  304. package/Build/Workers/chunk-LGNDTZVX.js +0 -97
  305. package/Build/Workers/chunk-LNSQVXFH.js +0 -1800
  306. package/Build/Workers/chunk-M4JZ6TSZ.js +0 -959
  307. package/Build/Workers/chunk-MCJDRDJQ.js +0 -102
  308. package/Build/Workers/chunk-MEENMEAH.js +0 -198
  309. package/Build/Workers/chunk-NAWU5RF4.js +0 -162
  310. package/Build/Workers/chunk-NIWITKQK.js +0 -693
  311. package/Build/Workers/chunk-OA6MYL2C.js +0 -837
  312. package/Build/Workers/chunk-OBEU25PI.js +0 -1067
  313. package/Build/Workers/chunk-OHP4ELS7.js +0 -198
  314. package/Build/Workers/chunk-PCL3Y7H5.js +0 -82
  315. package/Build/Workers/chunk-PD4GK4EM.js +0 -57
  316. package/Build/Workers/chunk-PEDU33QG.js +0 -2342
  317. package/Build/Workers/chunk-PVTSNNVI.js +0 -288
  318. package/Build/Workers/chunk-QHPZH22L.js +0 -241
  319. package/Build/Workers/chunk-QIZDWZK6.js +0 -301
  320. package/Build/Workers/chunk-QV6DG2YX.js +0 -1483
  321. package/Build/Workers/chunk-QVLAFFJY.js +0 -56
  322. package/Build/Workers/chunk-R4FPNAZ2.js +0 -352
  323. package/Build/Workers/chunk-R4K7EHOU.js +0 -171
  324. package/Build/Workers/chunk-R7JGHDD6.js +0 -789
  325. package/Build/Workers/chunk-RASQEYD4.js +0 -1483
  326. package/Build/Workers/chunk-RG4F5R57.js +0 -454
  327. package/Build/Workers/chunk-RW6ITX7Q.js +0 -3820
  328. package/Build/Workers/chunk-RYSQVJR6.js +0 -398
  329. package/Build/Workers/chunk-S6RJU5NM.js +0 -1054
  330. package/Build/Workers/chunk-SDFHDNS4.js +0 -147
  331. package/Build/Workers/chunk-SF6K72D7.js +0 -124
  332. package/Build/Workers/chunk-SGRGNDOD.js +0 -682
  333. package/Build/Workers/chunk-SM2CDCYF.js +0 -198
  334. package/Build/Workers/chunk-SS5ABQGY.js +0 -102
  335. package/Build/Workers/chunk-T5QBPLE3.js +0 -414
  336. package/Build/Workers/chunk-TN35HP5B.js +0 -1067
  337. package/Build/Workers/chunk-TNWKJNUZ.js +0 -454
  338. package/Build/Workers/chunk-TOAF47AQ.js +0 -102
  339. package/Build/Workers/chunk-TQ4QCOXT.js +0 -2719
  340. package/Build/Workers/chunk-TSDSILQB.js +0 -124
  341. package/Build/Workers/chunk-TVZD72WJ.js +0 -778
  342. package/Build/Workers/chunk-U5LV3F3Z.js +0 -1054
  343. package/Build/Workers/chunk-UEY73NRN.js +0 -38
  344. package/Build/Workers/chunk-UF46SZEZ.js +0 -789
  345. package/Build/Workers/chunk-UNRTMCET.js +0 -398
  346. package/Build/Workers/chunk-UTB7U3O6.js +0 -1992
  347. package/Build/Workers/chunk-UVO6COT2.js +0 -352
  348. package/Build/Workers/chunk-V46YGZE6.js +0 -352
  349. package/Build/Workers/chunk-VAL7DYNR.js +0 -278
  350. package/Build/Workers/chunk-VDGOCROW.js +0 -57
  351. package/Build/Workers/chunk-VFWSSBPT.js +0 -511
  352. package/Build/Workers/chunk-VVYMXI3I.js +0 -1284
  353. package/Build/Workers/chunk-VXWHPYQM.js +0 -837
  354. package/Build/Workers/chunk-VXYUBRSB.js +0 -219
  355. package/Build/Workers/chunk-VZLDLEWI.js +0 -387
  356. package/Build/Workers/chunk-W5OCKMPJ.js +0 -101
  357. package/Build/Workers/chunk-WBSY7HDY.js +0 -837
  358. package/Build/Workers/chunk-WN3F4CVG.js +0 -3201
  359. package/Build/Workers/chunk-WPRUWXGV.js +0 -693
  360. package/Build/Workers/chunk-WTO2ERBP.js +0 -414
  361. package/Build/Workers/chunk-WVHMDVG4.js +0 -959
  362. package/Build/Workers/chunk-XGA23TAX.js +0 -73
  363. package/Build/Workers/chunk-XLQZNQ4Z.js +0 -163
  364. package/Build/Workers/chunk-XLXSDIP5.js +0 -973
  365. package/Build/Workers/chunk-XQ3SKCMM.js +0 -140
  366. package/Build/Workers/chunk-XQH66YJC.js +0 -147
  367. package/Build/Workers/chunk-XTA7BXJG.js +0 -682
  368. package/Build/Workers/chunk-XTIDAFRS.js +0 -476
  369. package/Build/Workers/chunk-XUEDWBUD.js +0 -682
  370. package/Build/Workers/chunk-XYFLRH3H.js +0 -124
  371. package/Build/Workers/chunk-Y7JRTRTO.js +0 -305
  372. package/Build/Workers/chunk-Y7QSMDCJ.js +0 -352
  373. package/Build/Workers/chunk-YCB5TYTR.js +0 -1483
  374. package/Build/Workers/chunk-YEYOSTJX.js +0 -219
  375. package/Build/Workers/chunk-YGFVAGYF.js +0 -630
  376. package/Build/Workers/chunk-YIIACKQO.js +0 -368
  377. package/Build/Workers/chunk-YJGSP6PE.js +0 -511
  378. package/Build/Workers/chunk-YKU2Q3A2.js +0 -1287
  379. package/Build/Workers/chunk-Z4LR5EHE.js +0 -454
  380. package/Build/Workers/chunk-Z66EVE2A.js +0 -44
  381. package/Build/Workers/chunk-ZHIHHHTB.js +0 -414
  382. package/Build/Workers/chunk-ZMBHFYOX.js +0 -1344
  383. package/Build/Workers/chunk-ZNWHFSLE.js +0 -171
  384. package/Build/Workers/chunk-ZQLZG4IN.js +0 -2342
  385. package/Build/Workers/chunk-ZRTSMUZ2.js +0 -414
  386. package/Build/Workers/chunk-ZSGUV73H.js +0 -2342
  387. package/Build/Workers/chunk-ZZUVT5BM.js +0 -476
  388. package/Source/Shaders/Builtin/Functions/clipPolygons.glsl +0 -37
  389. package/Source/Shaders/Builtin/Functions/clipPolygons.js +0 -39
  390. package/Source/Shaders/Builtin/Functions/unpackClippingExtents.glsl +0 -14
  391. package/Source/Shaders/Builtin/Functions/unpackClippingExtents.js +0 -15
  392. package/Source/Shaders/PolygonSignedDistanceFS.glsl +0 -131
  393. package/Source/Shaders/PolygonSignedDistanceFS.js +0 -132
@@ -6,8 +6,9 @@ import DeveloperError from "./DeveloperError.js";
6
6
  import Event from "./Event.js";
7
7
  import FeatureDetection from "./FeatureDetection.js";
8
8
  import isCrossOriginUrl from "./isCrossOriginUrl.js";
9
- import Resource from "./Resource.js";
10
9
  import RuntimeError from "./RuntimeError.js";
10
+ import TrustedServers from "./TrustedServers.js";
11
+ import WebAssemblyWorkerInitializer from "./WebAssemblyWorkerInitializer.js";
11
12
 
12
13
  function canTransferArrayBuffer() {
13
14
  if (!defined(TaskProcessor._canTransferArrayBuffer)) {
@@ -17,6 +18,42 @@ function canTransferArrayBuffer() {
17
18
  const value = 99;
18
19
  const array = new Int8Array([value]);
19
20
 
21
+ let settled = false;
22
+ let settle;
23
+ const promise = new Promise((resolve) => {
24
+ const cleanup = () => {
25
+ worker.removeEventListener("message", onMessage);
26
+ worker.removeEventListener("error", onFailure);
27
+ worker.removeEventListener("messageerror", onFailure);
28
+ worker.terminate();
29
+ };
30
+
31
+ settle = (result) => {
32
+ if (settled) {
33
+ return;
34
+ }
35
+ settled = true;
36
+ cleanup();
37
+ TaskProcessor._canTransferArrayBuffer = result;
38
+ resolve(result);
39
+ };
40
+
41
+ const onMessage = (event) => {
42
+ const array = event.data?.array;
43
+
44
+ // Verify that typed arrays round-trip correctly when transferred.
45
+ settle(defined(array) && array[0] === value);
46
+ };
47
+
48
+ const onFailure = () => settle(false);
49
+
50
+ worker.addEventListener("message", onMessage);
51
+ worker.addEventListener("error", onFailure);
52
+ worker.addEventListener("messageerror", onFailure);
53
+ });
54
+
55
+ TaskProcessor._canTransferArrayBuffer = promise;
56
+
20
57
  try {
21
58
  // postMessage might fail with a DataCloneError
22
59
  // if transferring array buffers is not supported.
@@ -27,25 +64,9 @@ function canTransferArrayBuffer() {
27
64
  [array.buffer],
28
65
  );
29
66
  } catch (e) {
30
- TaskProcessor._canTransferArrayBuffer = false;
67
+ settle(false);
31
68
  return TaskProcessor._canTransferArrayBuffer;
32
69
  }
33
-
34
- TaskProcessor._canTransferArrayBuffer = new Promise((resolve) => {
35
- worker.onmessage = function (event) {
36
- const array = event.data.array;
37
-
38
- // some versions of Firefox silently fail to transfer typed arrays.
39
- // https://bugzilla.mozilla.org/show_bug.cgi?id=841904
40
- // Check to make sure the value round-trips successfully.
41
- const result = defined(array) && array[0] === value;
42
- resolve(result);
43
-
44
- worker.terminate();
45
-
46
- TaskProcessor._canTransferArrayBuffer = result;
47
- };
48
- });
49
70
  }
50
71
 
51
72
  return TaskProcessor._canTransferArrayBuffer;
@@ -76,7 +97,7 @@ function urlFromScript(script) {
76
97
 
77
98
  function createWorker(url) {
78
99
  const uri = new Uri(url);
79
- const isUri = uri.scheme().length !== 0 && uri.fragment().length === 0;
100
+ const isUri = uri.scheme().length !== 0;
80
101
  const moduleID = url.replace(/\.js$/, "");
81
102
 
82
103
  const options = {};
@@ -135,35 +156,6 @@ function createWorker(url) {
135
156
  return new Worker(workerPath, options);
136
157
  }
137
158
 
138
- async function getWebAssemblyLoaderConfig(processor, wasmOptions) {
139
- const config = {
140
- modulePath: undefined,
141
- wasmBinaryFile: undefined,
142
- wasmBinary: undefined,
143
- };
144
-
145
- // Web assembly not supported, use fallback js module if provided
146
- if (!FeatureDetection.supportsWebAssembly()) {
147
- if (!defined(wasmOptions.fallbackModulePath)) {
148
- throw new RuntimeError(
149
- `This browser does not support Web Assembly, and no backup module was provided for ${processor._workerPath}`,
150
- );
151
- }
152
-
153
- config.modulePath = buildModuleUrl(wasmOptions.fallbackModulePath);
154
- return config;
155
- }
156
-
157
- config.wasmBinaryFile = buildModuleUrl(wasmOptions.wasmBinaryFile);
158
-
159
- const arrayBuffer = await Resource.fetchArrayBuffer({
160
- url: config.wasmBinaryFile,
161
- });
162
-
163
- config.wasmBinary = arrayBuffer;
164
- return config;
165
- }
166
-
167
159
  /**
168
160
  * A wrapper around a web worker that allows scheduling tasks for a given worker,
169
161
  * returning results asynchronously via a promise.
@@ -183,66 +175,202 @@ function TaskProcessor(workerPath, maximumActiveTasks) {
183
175
  this._maximumActiveTasks = maximumActiveTasks ?? Number.POSITIVE_INFINITY;
184
176
  this._activeTasks = 0;
185
177
  this._nextID = 0;
186
- this._webAssemblyPromise = undefined;
178
+ this._webAssemblyInitializer = undefined;
179
+ this._pendingTasks = new Map();
180
+ this._workerFailureHandlers = new Map();
187
181
  }
188
182
 
189
- const createOnmessageHandler = (worker, id, resolve, reject) => {
190
- const listener = ({ data }) => {
191
- if (data.id !== id) {
192
- return;
183
+ function deserializeWorkerError(serializedError) {
184
+ let error = serializedError;
185
+ if (error.name === "RuntimeError") {
186
+ error = new RuntimeError(serializedError.message);
187
+ error.stack = serializedError.stack;
188
+ } else if (error.name === "DeveloperError") {
189
+ error = new DeveloperError(serializedError.message);
190
+ error.stack = serializedError.stack;
191
+ } else if (error.name === "Error") {
192
+ error = new Error(serializedError.message);
193
+ error.stack = serializedError.stack;
194
+ } else if (defined(error.name) && defined(error.message)) {
195
+ // Any other error class the worker threw, such as the EvalError a
196
+ // Content-Security-Policy produces. Rebuilding it as an Error keeps the
197
+ // name and message legible instead of surfacing an opaque object.
198
+ error = new Error(`${serializedError.name}: ${serializedError.message}`);
199
+ error.stack = serializedError.stack;
200
+ }
201
+ return error;
202
+ }
203
+
204
+ function workerFailureToError(event) {
205
+ if (defined(event.error)) {
206
+ if (event.error instanceof Error) {
207
+ return event.error;
193
208
  }
194
209
 
195
- if (defined(data.error)) {
196
- let error = data.error;
197
- if (error.name === "RuntimeError") {
198
- error = new RuntimeError(data.error.message);
199
- error.stack = data.error.stack;
200
- } else if (error.name === "DeveloperError") {
201
- error = new DeveloperError(data.error.message);
202
- error.stack = data.error.stack;
203
- } else if (error.name === "Error") {
204
- error = new Error(data.error.message);
205
- error.stack = data.error.stack;
210
+ if (defined(event.error.message)) {
211
+ const error = new Error(event.error.message);
212
+ if (defined(event.error.name)) {
213
+ error.name = event.error.name;
214
+ }
215
+ if (defined(event.error.stack)) {
216
+ error.stack = event.error.stack;
206
217
  }
207
- taskCompletedEvent.raiseEvent(error);
208
- reject(error);
209
- } else {
210
- taskCompletedEvent.raiseEvent();
211
- resolve(data.result);
218
+ return error;
212
219
  }
213
220
 
214
- worker.removeEventListener("message", listener);
215
- };
221
+ return new Error(String(event.error));
222
+ }
216
223
 
217
- return listener;
218
- };
224
+ return new Error(event.message ?? "Worker failed");
225
+ }
226
+
227
+ function removeWorkerFailureHandler(processor, worker) {
228
+ const handlers = processor._workerFailureHandlers;
229
+ if (!defined(handlers)) {
230
+ return;
231
+ }
232
+
233
+ const handler = handlers.get(worker);
234
+ if (!defined(handler)) {
235
+ return;
236
+ }
237
+
238
+ worker.removeEventListener("error", handler);
239
+ worker.removeEventListener("messageerror", handler);
240
+ handlers.delete(worker);
241
+ }
242
+
243
+ function settleTask(processor, id, error, result) {
244
+ if (!defined(processor._pendingTasks)) {
245
+ return;
246
+ }
247
+
248
+ const pendingTask = processor._pendingTasks.get(id);
249
+ if (!defined(pendingTask)) {
250
+ return;
251
+ }
252
+
253
+ processor._pendingTasks.delete(id);
254
+ pendingTask.worker.removeEventListener("message", pendingTask.listener);
255
+
256
+ if (defined(error)) {
257
+ taskCompletedEvent.raiseEvent(error);
258
+ pendingTask.reject(error);
259
+ } else {
260
+ taskCompletedEvent.raiseEvent();
261
+ pendingTask.resolve(result);
262
+ }
263
+ }
264
+
265
+ function cleanupWorker(processor, worker, error) {
266
+ processor._webAssemblyInitializer?.reset(worker, error);
267
+ removeWorkerFailureHandler(processor, worker);
268
+
269
+ if (defined(error) && defined(processor._pendingTasks)) {
270
+ for (const [id, pendingTask] of Array.from(
271
+ processor._pendingTasks.entries(),
272
+ )) {
273
+ if (pendingTask.worker === worker) {
274
+ settleTask(processor, id, error);
275
+ }
276
+ }
277
+ }
278
+
279
+ worker.terminate();
280
+
281
+ if (processor._worker === worker) {
282
+ processor._worker = undefined;
283
+ }
284
+ }
285
+
286
+ function handleWorkerFailure(processor, worker, event) {
287
+ const error = workerFailureToError(event);
288
+ cleanupWorker(processor, worker, error);
289
+ }
290
+
291
+ function createProcessorWorker(processor) {
292
+ const worker = createWorker(processor._workerPath);
293
+ const failureHandler = (event) =>
294
+ handleWorkerFailure(processor, worker, event);
295
+
296
+ worker.addEventListener("error", failureHandler);
297
+ worker.addEventListener("messageerror", failureHandler);
298
+ processor._workerFailureHandlers.set(worker, failureHandler);
299
+ return worker;
300
+ }
301
+
302
+ async function getWorker(processor) {
303
+ if (!defined(processor._webAssemblyInitializer)) {
304
+ if (!defined(processor._worker)) {
305
+ processor._worker = createProcessorWorker(processor);
306
+ }
307
+
308
+ return processor._worker;
309
+ }
310
+
311
+ await processor.initWebAssemblyModule();
312
+
313
+ return processor._worker;
314
+ }
219
315
 
220
316
  const emptyTransferableObjectArray = [];
221
317
  async function runTask(processor, parameters, transferableObjects) {
222
- const canTransfer = await Promise.resolve(canTransferArrayBuffer());
223
- if (!defined(transferableObjects)) {
224
- transferableObjects = emptyTransferableObjectArray;
225
- } else if (!canTransfer) {
226
- transferableObjects.length = 0;
318
+ const id = processor._nextID++;
319
+ const worker = defined(processor._webAssemblyInitializer)
320
+ ? await getWorker(processor)
321
+ : processor._worker;
322
+
323
+ if (processor.isDestroyed()) {
324
+ throw new RuntimeError("TaskProcessor was destroyed.");
227
325
  }
228
326
 
229
- const id = processor._nextID++;
230
327
  const promise = new Promise((resolve, reject) => {
231
- processor._worker.addEventListener(
232
- "message",
233
- createOnmessageHandler(processor._worker, id, resolve, reject),
234
- );
328
+ const listener = ({ data }) => {
329
+ if (!defined(data) || data.id !== id) {
330
+ return;
331
+ }
332
+
333
+ if (defined(data.error)) {
334
+ settleTask(processor, id, deserializeWorkerError(data.error));
335
+ } else {
336
+ settleTask(processor, id, undefined, data.result);
337
+ }
338
+ };
339
+
340
+ processor._pendingTasks.set(id, {
341
+ worker: worker,
342
+ listener: listener,
343
+ resolve: resolve,
344
+ reject: reject,
345
+ });
346
+ worker.addEventListener("message", listener);
235
347
  });
236
348
 
237
- processor._worker.postMessage(
238
- {
239
- id: id,
240
- baseUrl: buildModuleUrl.getCesiumBaseUrl().url,
241
- parameters: parameters,
242
- canTransferArrayBuffer: canTransfer,
243
- },
244
- transferableObjects,
245
- );
349
+ try {
350
+ const canTransfer = await Promise.resolve(canTransferArrayBuffer());
351
+ if (!processor._pendingTasks.has(id)) {
352
+ return promise;
353
+ }
354
+
355
+ if (!defined(transferableObjects)) {
356
+ transferableObjects = emptyTransferableObjectArray;
357
+ } else if (!canTransfer) {
358
+ transferableObjects.length = 0;
359
+ }
360
+
361
+ worker.postMessage(
362
+ {
363
+ id: id,
364
+ baseUrl: buildModuleUrl.getCesiumBaseUrl().url,
365
+ trustedServers: TrustedServers.pack(),
366
+ parameters: parameters,
367
+ canTransferArrayBuffer: canTransfer,
368
+ },
369
+ transferableObjects,
370
+ );
371
+ } catch (error) {
372
+ settleTask(processor, id, error);
373
+ }
246
374
 
247
375
  return promise;
248
376
  }
@@ -291,7 +419,9 @@ TaskProcessor.prototype.scheduleTask = function (
291
419
  transferableObjects,
292
420
  ) {
293
421
  if (!defined(this._worker)) {
294
- this._worker = createWorker(this._workerPath);
422
+ if (!defined(this._webAssemblyInitializer)) {
423
+ this._worker = createProcessorWorker(this);
424
+ }
295
425
  }
296
426
 
297
427
  if (this._activeTasks >= this._maximumActiveTasks) {
@@ -306,6 +436,9 @@ TaskProcessor.prototype.scheduleTask = function (
306
436
  * and compiling a web assembly module asynchronously, as well as an optional
307
437
  * fallback JavaScript module to use if Web Assembly is not supported.
308
438
  *
439
+ * Only the resolved url of the binary is posted. The worker requests and compiles
440
+ * the bytes itself, so WebAssembly is never fetched or compiled by the document.
441
+ *
309
442
  * @param {object} [webAssemblyOptions] An object with the following properties:
310
443
  * @param {string} [webAssemblyOptions.modulePath] The path of the web assembly JavaScript wrapper module.
311
444
  * @param {string} [webAssemblyOptions.wasmBinaryFile] The path of the web assembly binary file.
@@ -317,46 +450,32 @@ TaskProcessor.prototype.scheduleTask = function (
317
450
  TaskProcessor.prototype.initWebAssemblyModule = async function (
318
451
  webAssemblyOptions,
319
452
  ) {
320
- if (defined(this._webAssemblyPromise)) {
321
- return this._webAssemblyPromise;
453
+ let initializer = this._webAssemblyInitializer;
454
+ if (defined(initializer?.promise)) {
455
+ return initializer.promise;
322
456
  }
323
457
 
324
- const init = async () => {
325
- const worker = (this._worker = createWorker(this._workerPath));
326
- const wasmConfig = await getWebAssemblyLoaderConfig(
327
- this,
458
+ if (defined(webAssemblyOptions) || !defined(initializer)) {
459
+ initializer = new WebAssemblyWorkerInitializer(
460
+ this._workerPath,
328
461
  webAssemblyOptions,
329
462
  );
330
- const canTransfer = await Promise.resolve(canTransferArrayBuffer());
331
- let transferableObjects;
332
- const binary = wasmConfig.wasmBinary;
333
- if (defined(binary) && canTransfer) {
334
- transferableObjects = [binary];
335
- }
336
-
337
- const promise = new Promise((resolve, reject) => {
338
- worker.onmessage = function ({ data }) {
339
- if (defined(data)) {
340
- resolve(data.result);
341
- } else {
342
- reject(new RuntimeError("Could not configure wasm module"));
343
- }
344
- };
345
- });
463
+ this._webAssemblyInitializer = initializer;
464
+ }
346
465
 
347
- worker.postMessage(
348
- {
349
- canTransferArrayBuffer: canTransfer,
350
- parameters: { webAssemblyConfig: wasmConfig },
351
- },
352
- transferableObjects,
466
+ const worker = (this._worker = createProcessorWorker(this));
467
+ try {
468
+ return await initializer.initialize(
469
+ worker,
470
+ canTransferArrayBuffer,
471
+ deserializeWorkerError,
353
472
  );
354
-
355
- return promise;
356
- };
357
-
358
- this._webAssemblyPromise = init();
359
- return this._webAssemblyPromise;
473
+ } catch (error) {
474
+ if (this._workerFailureHandlers.has(worker)) {
475
+ cleanupWorker(this, worker, error);
476
+ }
477
+ throw error;
478
+ }
360
479
  };
361
480
 
362
481
  /**
@@ -380,8 +499,9 @@ TaskProcessor.prototype.isDestroyed = function () {
380
499
  * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.
381
500
  */
382
501
  TaskProcessor.prototype.destroy = function () {
383
- if (defined(this._worker)) {
384
- this._worker.terminate();
502
+ const error = new RuntimeError("TaskProcessor was destroyed.");
503
+ for (const worker of this._workerFailureHandlers.keys()) {
504
+ cleanupWorker(this, worker, error);
385
505
  }
386
506
  return destroyObject(this);
387
507
  };
@@ -85,7 +85,8 @@ function getAuthority(url) {
85
85
  if (authority.indexOf(":") === -1) {
86
86
  let scheme = uri.scheme();
87
87
  if (scheme.length === 0) {
88
- scheme = window.location.protocol;
88
+ // `self` resolves in both a document and a Web Worker, unlike `window`.
89
+ scheme = self.location.protocol;
89
90
  scheme = scheme.substring(0, scheme.length - 1);
90
91
  }
91
92
  if (scheme === "http") {
@@ -133,6 +134,38 @@ TrustedServers.contains = function (url) {
133
134
  return false;
134
135
  };
135
136
 
137
+ /**
138
+ * Packs the registry into an array of trusted `host:port` authorities, so it
139
+ * can be sent across a realm boundary (e.g. to a Web Worker) and restored
140
+ * with {@link TrustedServers.unpack}. `TrustedServers` is module state, so a
141
+ * worker's copy of this module starts with an empty registry even though the
142
+ * document already called {@link TrustedServers.add}.
143
+ *
144
+ * @returns {string[]} The packed array of trusted `host:port` authorities.
145
+ *
146
+ * @example
147
+ * // Send the registry to a worker, then restore it there
148
+ * worker.postMessage({ trustedServers: TrustedServers.pack() });
149
+ * // In the worker:
150
+ * TrustedServers.unpack(data.trustedServers);
151
+ */
152
+ TrustedServers.pack = function () {
153
+ return Object.keys(_servers);
154
+ };
155
+
156
+ /**
157
+ * Replaces the registry with the authorities from an array packed by
158
+ * {@link TrustedServers.pack}.
159
+ *
160
+ * @param {string[]} packedAuthorities The packed array of trusted `host:port` authorities.
161
+ */
162
+ TrustedServers.unpack = function (packedAuthorities) {
163
+ _servers = {};
164
+ for (const authority of packedAuthorities) {
165
+ _servers[authority] = true;
166
+ }
167
+ };
168
+
136
169
  /**
137
170
  * Clears the registry
138
171
  *