@cesium/engine 3.0.2 → 5.0.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 (246) hide show
  1. package/Build/ThirdParty/Workers/pako_deflate.min.js +605 -0
  2. package/Build/ThirdParty/Workers/pako_inflate.min.js +800 -0
  3. package/Build/ThirdParty/Workers/z-worker-pako.js +502 -0
  4. package/Build/Workers/chunk-2U6EBIRX.js +757 -0
  5. package/Build/Workers/chunk-2ZI7FZ3Q.js +58 -0
  6. package/Build/Workers/chunk-3TSHZWOZ.js +1860 -0
  7. package/Build/Workers/chunk-44B6FQSJ.js +684 -0
  8. package/Build/Workers/chunk-4AJR66C5.js +368 -0
  9. package/Build/Workers/chunk-4HN3N5SE.js +501 -0
  10. package/Build/Workers/chunk-4QGPYV3W.js +102 -0
  11. package/Build/Workers/chunk-4RKE4B3G.js +476 -0
  12. package/Build/Workers/chunk-5E3V7Y4R.js +196 -0
  13. package/Build/Workers/chunk-6EHT6GS3.js +163 -0
  14. package/Build/Workers/chunk-6I22NWKQ.js +171 -0
  15. package/Build/Workers/chunk-7N67FBLW.js +1054 -0
  16. package/Build/Workers/chunk-AQQGAFKX.js +124 -0
  17. package/Build/Workers/chunk-CROU4RHL.js +138 -0
  18. package/Build/Workers/chunk-CTJCECTX.js +258 -0
  19. package/Build/Workers/chunk-DWJZFZ67.js +781 -0
  20. package/Build/Workers/chunk-EHJQEARC.js +59 -0
  21. package/Build/Workers/chunk-EVLKHUAE.js +1477 -0
  22. package/Build/Workers/chunk-FOOYJER7.js +834 -0
  23. package/Build/Workers/chunk-GLCRFDOB.js +73 -0
  24. package/Build/Workers/chunk-GPO47TW4.js +39 -0
  25. package/Build/Workers/chunk-H5Q2JKIA.js +1075 -0
  26. package/Build/Workers/chunk-HIDSEUWS.js +2041 -0
  27. package/Build/Workers/chunk-HV67ARO7.js +302 -0
  28. package/Build/Workers/chunk-IC7G4BX2.js +421 -0
  29. package/Build/Workers/chunk-IQN2LMGD.js +55 -0
  30. package/Build/Workers/chunk-J2FHYK2Z.js +55 -0
  31. package/Build/Workers/chunk-K3VEWONC.js +289 -0
  32. package/Build/Workers/chunk-KZFXE35V.js +117 -0
  33. package/Build/Workers/chunk-MG2TXIO5.js +400 -0
  34. package/Build/Workers/chunk-MRCFDEKH.js +138 -0
  35. package/Build/Workers/chunk-MYDS6HBL.js +3273 -0
  36. package/Build/Workers/chunk-OCIX2CQ7.js +305 -0
  37. package/Build/Workers/chunk-P32XMW4I.js +2716 -0
  38. package/Build/Workers/chunk-PEVZYZBQ.js +157 -0
  39. package/Build/Workers/chunk-PMDLIBEQ.js +218 -0
  40. package/Build/Workers/chunk-QDUOGCCO.js +1009 -0
  41. package/Build/Workers/chunk-QUCJGBCK.js +430 -0
  42. package/Build/Workers/chunk-RCI7BSOM.js +452 -0
  43. package/Build/Workers/chunk-SVTSC7FX.js +390 -0
  44. package/Build/Workers/chunk-TXOGSFHZ.js +77 -0
  45. package/Build/Workers/chunk-TXYJOVQK.js +629 -0
  46. package/Build/Workers/chunk-UFIT5XDI.js +1258 -0
  47. package/Build/Workers/chunk-ULLMQNFQ.js +73 -0
  48. package/Build/Workers/chunk-UM7FIUQW.js +101 -0
  49. package/Build/Workers/{package.js → chunk-UMLTOPAE.js} +13 -2
  50. package/Build/Workers/chunk-V5S5N2IS.js +8644 -0
  51. package/Build/Workers/chunk-VN2IHJKM.js +513 -0
  52. package/Build/Workers/chunk-VWSD2XV5.js +669 -0
  53. package/Build/Workers/chunk-X2KIWBTW.js +100 -0
  54. package/Build/Workers/chunk-Y24CDOJC.js +353 -0
  55. package/Build/Workers/chunk-YLMDWSXO.js +44 -0
  56. package/Build/Workers/chunk-YNZ4DMR7.js +634 -0
  57. package/Build/Workers/chunk-Z2MP3UBE.js +236 -0
  58. package/Build/Workers/combineGeometry.js +65 -15
  59. package/Build/Workers/createBoxGeometry.js +55 -10
  60. package/Build/Workers/createBoxOutlineGeometry.js +231 -310
  61. package/Build/Workers/createCircleGeometry.js +185 -202
  62. package/Build/Workers/createCircleOutlineGeometry.js +141 -155
  63. package/Build/Workers/createCoplanarPolygonGeometry.js +477 -557
  64. package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +218 -230
  65. package/Build/Workers/createCorridorGeometry.js +1163 -1307
  66. package/Build/Workers/createCorridorOutlineGeometry.js +534 -569
  67. package/Build/Workers/createCylinderGeometry.js +57 -10
  68. package/Build/Workers/createCylinderOutlineGeometry.js +224 -258
  69. package/Build/Workers/createEllipseGeometry.js +68 -12
  70. package/Build/Workers/createEllipseOutlineGeometry.js +61 -12
  71. package/Build/Workers/createEllipsoidGeometry.js +56 -10
  72. package/Build/Workers/createEllipsoidOutlineGeometry.js +58 -13
  73. package/Build/Workers/createFrustumGeometry.js +55 -10
  74. package/Build/Workers/createFrustumOutlineGeometry.js +226 -243
  75. package/Build/Workers/createGeometry.js +143 -48
  76. package/Build/Workers/createGroundPolylineGeometry.js +1484 -2012
  77. package/Build/Workers/createPlaneGeometry.js +216 -243
  78. package/Build/Workers/createPlaneOutlineGeometry.js +121 -113
  79. package/Build/Workers/createPolygonGeometry.js +1437 -1314
  80. package/Build/Workers/createPolygonOutlineGeometry.js +516 -657
  81. package/Build/Workers/createPolylineGeometry.js +471 -547
  82. package/Build/Workers/createPolylineVolumeGeometry.js +354 -384
  83. package/Build/Workers/createPolylineVolumeOutlineGeometry.js +272 -295
  84. package/Build/Workers/createRectangleGeometry.js +1128 -1331
  85. package/Build/Workers/createRectangleOutlineGeometry.js +445 -500
  86. package/Build/Workers/createSimplePolylineGeometry.js +381 -440
  87. package/Build/Workers/createSphereGeometry.js +112 -118
  88. package/Build/Workers/createSphereOutlineGeometry.js +112 -121
  89. package/Build/Workers/createTaskProcessorWorker.js +32 -127
  90. package/Build/Workers/createVectorTileClampedPolylines.js +462 -505
  91. package/Build/Workers/createVectorTileGeometries.js +377 -436
  92. package/Build/Workers/createVectorTilePoints.js +110 -77
  93. package/Build/Workers/createVectorTilePolygons.js +369 -391
  94. package/Build/Workers/createVectorTilePolylines.js +252 -244
  95. package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +543 -615
  96. package/Build/Workers/createVerticesFromHeightmap.js +2244 -2677
  97. package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +682 -904
  98. package/Build/Workers/createWallGeometry.js +459 -593
  99. package/Build/Workers/createWallOutlineGeometry.js +324 -419
  100. package/Build/Workers/decodeDraco.js +327 -347
  101. package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +2530 -3567
  102. package/Build/Workers/decodeI3S.js +765 -970
  103. package/Build/Workers/transcodeKTX2.js +3351 -1473
  104. package/Build/Workers/transferTypedArrayTest.js +3 -4
  105. package/Build/Workers/upsampleQuantizedTerrainMesh.js +748 -953
  106. package/LICENSE.md +0 -12
  107. package/Source/Core/CesiumTerrainProvider.js +1 -2
  108. package/Source/Core/Credit.js +7 -1
  109. package/Source/Core/FeatureDetection.js +9 -0
  110. package/Source/Core/GoogleMaps.js +1 -2
  111. package/Source/Core/Ion.js +1 -2
  112. package/Source/Core/KTX2Transcoder.js +7 -3
  113. package/Source/Core/PolygonGeometry.js +340 -27
  114. package/Source/Core/PolygonGeometryLibrary.js +302 -1
  115. package/Source/Core/Stereographic.js +247 -0
  116. package/Source/Core/TaskProcessor.js +185 -168
  117. package/Source/Core/Transforms.js +2 -2
  118. package/Source/Core/buildModuleUrl.js +6 -5
  119. package/Source/Core/sampleTerrain.js +43 -10
  120. package/Source/Core/sampleTerrainMostDetailed.js +27 -3
  121. package/Source/Scene/ArcGisMapService.js +1 -2
  122. package/Source/Scene/Billboard.js +7 -0
  123. package/Source/Scene/Cesium3DTilePass.js +1 -1
  124. package/Source/Scene/Cesium3DTileset.js +38 -81
  125. package/Source/Scene/CreditDisplay.js +2 -2
  126. package/Source/Scene/DracoLoader.js +26 -3
  127. package/Source/Scene/I3SDataProvider.js +0 -27
  128. package/Source/Scene/I3SDecoder.js +127 -0
  129. package/Source/Scene/I3SNode.js +32 -110
  130. package/Source/Scene/Implicit3DTileContent.js +13 -0
  131. package/Source/Scene/ImplicitTileset.js +5 -0
  132. package/Source/Scene/LabelCollection.js +3 -1
  133. package/Source/Scene/Model/I3dmLoader.js +5 -1
  134. package/Source/Scene/Model/Model.js +20 -23
  135. package/Source/Scene/OpenStreetMapImageryProvider.js +4 -1
  136. package/Source/Scene/PostProcessStageLibrary.js +3 -3
  137. package/Source/Scene/PrimitiveCollection.js +39 -0
  138. package/Source/Scene/Scene.js +3 -0
  139. package/Source/Scene/SingleTileImageryProvider.js +4 -2
  140. package/Source/ThirdParty/Workers/basis_transcoder.js +1 -1
  141. package/Source/Widget/CesiumWidget.js +2 -1
  142. package/Source/{WorkersES6 → Workers}/createGeometry.js +11 -12
  143. package/Source/{WorkersES6 → Workers}/createTaskProcessorWorker.js +43 -59
  144. package/Source/{WorkersES6 → Workers}/decodeDraco.js +19 -25
  145. package/Source/{WorkersES6 → Workers}/decodeI3S.js +18 -32
  146. package/Source/{WorkersES6 → Workers}/transcodeKTX2.js +19 -26
  147. package/Source/Workers/transferTypedArrayTest.js +0 -6
  148. package/index.d.ts +69 -35
  149. package/index.js +189 -187
  150. package/package.json +2 -1
  151. package/Build/Workers/ArcType-2d9abbbc.js +0 -37
  152. package/Build/Workers/AttributeCompression-f9f6c717.js +0 -716
  153. package/Build/Workers/AxisAlignedBoundingBox-a03420b1.js +0 -258
  154. package/Build/Workers/BoundingRectangle-32fa8a4a.js +0 -369
  155. package/Build/Workers/BoxGeometry-cd550612.js +0 -884
  156. package/Build/Workers/Check-6ede7e26.js +0 -290
  157. package/Build/Workers/Color-571a6085.js +0 -2262
  158. package/Build/Workers/ComponentDatatype-cf1fa08e.js +0 -341
  159. package/Build/Workers/CoplanarPolygonGeometryLibrary-488b1a9f.js +0 -132
  160. package/Build/Workers/CorridorGeometryLibrary-fc4ff147.js +0 -498
  161. package/Build/Workers/CylinderGeometry-bc26926d.js +0 -467
  162. package/Build/Workers/CylinderGeometryLibrary-7bf291b4.js +0 -63
  163. package/Build/Workers/EllipseGeometry-89533a10.js +0 -1304
  164. package/Build/Workers/EllipseGeometryLibrary-b0d7df17.js +0 -366
  165. package/Build/Workers/EllipseOutlineGeometry-63ff7a87.js +0 -443
  166. package/Build/Workers/EllipsoidGeodesic-5b3623dc.js +0 -520
  167. package/Build/Workers/EllipsoidGeometry-07e99d2d.js +0 -637
  168. package/Build/Workers/EllipsoidOutlineGeometry-ba5c7ee2.js +0 -454
  169. package/Build/Workers/EllipsoidRhumbLine-ef872433.js +0 -741
  170. package/Build/Workers/EllipsoidTangentPlane-65d41b3e.js +0 -373
  171. package/Build/Workers/EncodedCartesian3-57415c8a.js +0 -171
  172. package/Build/Workers/FrustumGeometry-4a7589ed.js +0 -2540
  173. package/Build/Workers/GeometryAttribute-a5b6275b.js +0 -619
  174. package/Build/Workers/GeometryAttributes-ad136444.js +0 -91
  175. package/Build/Workers/GeometryInstance-34d9e21e.js +0 -121
  176. package/Build/Workers/GeometryOffsetAttribute-9ad0019c.js +0 -16
  177. package/Build/Workers/GeometryPipeline-fa9e6ffc.js +0 -3690
  178. package/Build/Workers/IndexDatatype-2643aa47.js +0 -200
  179. package/Build/Workers/IntersectionTests-feace3da.js +0 -1836
  180. package/Build/Workers/Math-0a2ac845.js +0 -1340
  181. package/Build/Workers/Matrix2-e1298525.js +0 -7086
  182. package/Build/Workers/Matrix3-41c58dde.js +0 -4283
  183. package/Build/Workers/OrientedBoundingBox-6b94d955.js +0 -1259
  184. package/Build/Workers/Plane-4c3d403b.js +0 -309
  185. package/Build/Workers/PolygonGeometryLibrary-4ffc457d.js +0 -1074
  186. package/Build/Workers/PolygonPipeline-d5e66350.js +0 -1344
  187. package/Build/Workers/PolylinePipeline-83410f0c.js +0 -573
  188. package/Build/Workers/PolylineVolumeGeometryLibrary-290e7aec.js +0 -781
  189. package/Build/Workers/PrimitivePipeline-6081d138.js +0 -966
  190. package/Build/Workers/RectangleGeometryLibrary-986710d8.js +0 -280
  191. package/Build/Workers/RuntimeError-ef395448.js +0 -68
  192. package/Build/Workers/TerrainEncoding-528e1d68.js +0 -1227
  193. package/Build/Workers/Transforms-b527bb09.js +0 -14714
  194. package/Build/Workers/VertexFormat-030f11ff.js +0 -312
  195. package/Build/Workers/WallGeometryLibrary-faf583f8.js +0 -211
  196. package/Build/Workers/WebGLConstants-0b1ce7ba.js +0 -620
  197. package/Build/Workers/WebMercatorProjection-13ed1a6e.js +0 -151
  198. package/Build/Workers/arrayRemoveDuplicates-d2061e85.js +0 -129
  199. package/Build/Workers/cesiumWorkerBootstrapper.js +0 -1363
  200. package/Build/Workers/combine-d9581036.js +0 -82
  201. package/Build/Workers/defaultValue-fe22d8c0.js +0 -51
  202. package/Source/ThirdParty/Workers/draco_decoder_nodejs.js +0 -117
  203. package/Source/Workers/cesiumWorkerBootstrapper.js +0 -2290
  204. package/Source/Workers/package.json +0 -1
  205. /package/Source/{WorkersES6 → Workers}/combineGeometry.js +0 -0
  206. /package/Source/{WorkersES6 → Workers}/createBoxGeometry.js +0 -0
  207. /package/Source/{WorkersES6 → Workers}/createBoxOutlineGeometry.js +0 -0
  208. /package/Source/{WorkersES6 → Workers}/createCircleGeometry.js +0 -0
  209. /package/Source/{WorkersES6 → Workers}/createCircleOutlineGeometry.js +0 -0
  210. /package/Source/{WorkersES6 → Workers}/createCoplanarPolygonGeometry.js +0 -0
  211. /package/Source/{WorkersES6 → Workers}/createCoplanarPolygonOutlineGeometry.js +0 -0
  212. /package/Source/{WorkersES6 → Workers}/createCorridorGeometry.js +0 -0
  213. /package/Source/{WorkersES6 → Workers}/createCorridorOutlineGeometry.js +0 -0
  214. /package/Source/{WorkersES6 → Workers}/createCylinderGeometry.js +0 -0
  215. /package/Source/{WorkersES6 → Workers}/createCylinderOutlineGeometry.js +0 -0
  216. /package/Source/{WorkersES6 → Workers}/createEllipseGeometry.js +0 -0
  217. /package/Source/{WorkersES6 → Workers}/createEllipseOutlineGeometry.js +0 -0
  218. /package/Source/{WorkersES6 → Workers}/createEllipsoidGeometry.js +0 -0
  219. /package/Source/{WorkersES6 → Workers}/createEllipsoidOutlineGeometry.js +0 -0
  220. /package/Source/{WorkersES6 → Workers}/createFrustumGeometry.js +0 -0
  221. /package/Source/{WorkersES6 → Workers}/createFrustumOutlineGeometry.js +0 -0
  222. /package/Source/{WorkersES6 → Workers}/createGroundPolylineGeometry.js +0 -0
  223. /package/Source/{WorkersES6 → Workers}/createPlaneGeometry.js +0 -0
  224. /package/Source/{WorkersES6 → Workers}/createPlaneOutlineGeometry.js +0 -0
  225. /package/Source/{WorkersES6 → Workers}/createPolygonGeometry.js +0 -0
  226. /package/Source/{WorkersES6 → Workers}/createPolygonOutlineGeometry.js +0 -0
  227. /package/Source/{WorkersES6 → Workers}/createPolylineGeometry.js +0 -0
  228. /package/Source/{WorkersES6 → Workers}/createPolylineVolumeGeometry.js +0 -0
  229. /package/Source/{WorkersES6 → Workers}/createPolylineVolumeOutlineGeometry.js +0 -0
  230. /package/Source/{WorkersES6 → Workers}/createRectangleGeometry.js +0 -0
  231. /package/Source/{WorkersES6 → Workers}/createRectangleOutlineGeometry.js +0 -0
  232. /package/Source/{WorkersES6 → Workers}/createSimplePolylineGeometry.js +0 -0
  233. /package/Source/{WorkersES6 → Workers}/createSphereGeometry.js +0 -0
  234. /package/Source/{WorkersES6 → Workers}/createSphereOutlineGeometry.js +0 -0
  235. /package/Source/{WorkersES6 → Workers}/createVectorTileClampedPolylines.js +0 -0
  236. /package/Source/{WorkersES6 → Workers}/createVectorTileGeometries.js +0 -0
  237. /package/Source/{WorkersES6 → Workers}/createVectorTilePoints.js +0 -0
  238. /package/Source/{WorkersES6 → Workers}/createVectorTilePolygons.js +0 -0
  239. /package/Source/{WorkersES6 → Workers}/createVectorTilePolylines.js +0 -0
  240. /package/Source/{WorkersES6 → Workers}/createVerticesFromGoogleEarthEnterpriseBuffer.js +0 -0
  241. /package/Source/{WorkersES6 → Workers}/createVerticesFromHeightmap.js +0 -0
  242. /package/Source/{WorkersES6 → Workers}/createVerticesFromQuantizedTerrainMesh.js +0 -0
  243. /package/Source/{WorkersES6 → Workers}/createWallGeometry.js +0 -0
  244. /package/Source/{WorkersES6 → Workers}/createWallOutlineGeometry.js +0 -0
  245. /package/Source/{WorkersES6 → Workers}/decodeGoogleEarthEnterprisePacket.js +0 -0
  246. /package/Source/{WorkersES6 → Workers}/upsampleQuantizedTerrainMesh.js +0 -0
@@ -1,7 +1,6 @@
1
1
  import Uri from "urijs";
2
2
  import buildModuleUrl from "./buildModuleUrl.js";
3
3
  import defaultValue from "./defaultValue.js";
4
- import defer from "./defer.js";
5
4
  import defined from "./defined.js";
6
5
  import destroyObject from "./destroyObject.js";
7
6
  import DeveloperError from "./DeveloperError.js";
@@ -13,9 +12,7 @@ import RuntimeError from "./RuntimeError.js";
13
12
 
14
13
  function canTransferArrayBuffer() {
15
14
  if (!defined(TaskProcessor._canTransferArrayBuffer)) {
16
- const worker = new Worker(
17
- getWorkerUrl("Workers/transferTypedArrayTest.js")
18
- );
15
+ const worker = createWorker("transferTypedArrayTest");
19
16
  worker.postMessage = defaultValue(
20
17
  worker.webkitPostMessage,
21
18
  worker.postMessage
@@ -38,23 +35,21 @@ function canTransferArrayBuffer() {
38
35
  return TaskProcessor._canTransferArrayBuffer;
39
36
  }
40
37
 
41
- const deferred = defer();
42
-
43
- worker.onmessage = function (event) {
44
- const array = event.data.array;
45
-
46
- // some versions of Firefox silently fail to transfer typed arrays.
47
- // https://bugzilla.mozilla.org/show_bug.cgi?id=841904
48
- // Check to make sure the value round-trips successfully.
49
- const result = defined(array) && array[0] === value;
50
- deferred.resolve(result);
38
+ TaskProcessor._canTransferArrayBuffer = new Promise((resolve) => {
39
+ worker.onmessage = function (event) {
40
+ const array = event.data.array;
51
41
 
52
- worker.terminate();
42
+ // some versions of Firefox silently fail to transfer typed arrays.
43
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=841904
44
+ // Check to make sure the value round-trips successfully.
45
+ const result = defined(array) && array[0] === value;
46
+ resolve(result);
53
47
 
54
- TaskProcessor._canTransferArrayBuffer = result;
55
- };
48
+ worker.terminate();
56
49
 
57
- TaskProcessor._canTransferArrayBuffer = deferred.promise;
50
+ TaskProcessor._canTransferArrayBuffer = result;
51
+ };
52
+ });
58
53
  }
59
54
 
60
55
  return TaskProcessor._canTransferArrayBuffer;
@@ -62,101 +57,73 @@ function canTransferArrayBuffer() {
62
57
 
63
58
  const taskCompletedEvent = new Event();
64
59
 
65
- function completeTask(processor, data) {
66
- --processor._activeTasks;
67
-
68
- const id = data.id;
69
- if (!defined(id)) {
70
- // This is not one of ours.
71
- return;
72
- }
73
-
74
- const deferreds = processor._deferreds;
75
- const deferred = deferreds[id];
76
-
77
- if (defined(data.error)) {
78
- let error = data.error;
79
- if (error.name === "RuntimeError") {
80
- error = new RuntimeError(data.error.message);
81
- error.stack = data.error.stack;
82
- } else if (error.name === "DeveloperError") {
83
- error = new DeveloperError(data.error.message);
84
- error.stack = data.error.stack;
85
- }
86
- taskCompletedEvent.raiseEvent(error);
87
- deferred.reject(error);
88
- } else {
89
- taskCompletedEvent.raiseEvent();
90
- deferred.resolve(data.result);
60
+ function urlFromScript(script) {
61
+ let blob;
62
+ try {
63
+ blob = new Blob([script], {
64
+ type: "application/javascript",
65
+ });
66
+ } catch (e) {
67
+ const BlobBuilder =
68
+ window.BlobBuilder ||
69
+ window.WebKitBlobBuilder ||
70
+ window.MozBlobBuilder ||
71
+ window.MSBlobBuilder;
72
+ const blobBuilder = new BlobBuilder();
73
+ blobBuilder.append(script);
74
+ blob = blobBuilder.getBlob("application/javascript");
91
75
  }
92
76
 
93
- delete deferreds[id];
77
+ const URL = window.URL || window.webkitURL;
78
+ return URL.createObjectURL(blob);
94
79
  }
95
80
 
96
- function getWorkerUrl(moduleID) {
97
- let url = buildModuleUrl(moduleID);
81
+ function createWorker(url) {
82
+ const uri = new Uri(url);
83
+ const isUri = uri.scheme().length !== 0 && uri.fragment().length === 0;
98
84
 
85
+ const options = {};
86
+ let workerPath;
99
87
  if (isCrossOriginUrl(url)) {
100
- //to load cross-origin, create a shim worker from a blob URL
88
+ // To load cross-origin, create a shim worker from a blob URL
101
89
  const script = `importScripts("${url}");`;
90
+ workerPath = urlFromScript(script);
91
+ return new Worker(workerPath, options);
92
+ }
102
93
 
103
- let blob;
104
- try {
105
- blob = new Blob([script], {
106
- type: "application/javascript",
107
- });
108
- } catch (e) {
109
- const BlobBuilder =
110
- window.BlobBuilder ||
111
- window.WebKitBlobBuilder ||
112
- window.MozBlobBuilder ||
113
- window.MSBlobBuilder;
114
- const blobBuilder = new BlobBuilder();
115
- blobBuilder.append(script);
116
- blob = blobBuilder.getBlob("application/javascript");
117
- }
118
-
119
- const URL = window.URL || window.webkitURL;
120
- url = URL.createObjectURL(blob);
94
+ const moduleID = url.replace(/\.js$/, "");
95
+
96
+ /* global CESIUM_WORKERS */
97
+ if (!isUri && typeof CESIUM_WORKERS !== "undefined") {
98
+ // If the workers are embedded, create a shim worker from the embedded script data
99
+ const script = `
100
+ importScripts("${urlFromScript(CESIUM_WORKERS)}");
101
+ CesiumWorkers["${moduleID}"]();
102
+ `;
103
+ workerPath = urlFromScript(script);
104
+ return new Worker(workerPath, options);
121
105
  }
122
106
 
123
- return url;
124
- }
107
+ workerPath = url;
125
108
 
126
- let bootstrapperUrlResult;
127
- function getBootstrapperUrl() {
128
- if (!defined(bootstrapperUrlResult)) {
129
- bootstrapperUrlResult = getWorkerUrl("Workers/cesiumWorkerBootstrapper.js");
109
+ if (!isUri) {
110
+ workerPath = buildModuleUrl(
111
+ `${TaskProcessor._workerModulePrefix + moduleID}.js`
112
+ );
130
113
  }
131
- return bootstrapperUrlResult;
132
- }
133
-
134
- function createWorker(processor) {
135
- const worker = new Worker(getBootstrapperUrl());
136
- worker.postMessage = defaultValue(
137
- worker.webkitPostMessage,
138
- worker.postMessage
139
- );
140
114
 
141
- const bootstrapMessage = {
142
- loaderConfig: {
143
- paths: {
144
- Workers: buildModuleUrl("Workers"),
145
- },
146
- baseUrl: buildModuleUrl.getCesiumBaseUrl().url,
147
- },
148
- workerModule: processor._workerPath,
149
- };
115
+ if (!FeatureDetection.supportsEsmWebWorkers()) {
116
+ throw new RuntimeError(
117
+ "This browser is not supported. Please update your browser to continue."
118
+ );
119
+ }
150
120
 
151
- worker.postMessage(bootstrapMessage);
152
- worker.onmessage = function (event) {
153
- completeTask(processor, event.data);
154
- };
121
+ options.type = "module";
155
122
 
156
- return worker;
123
+ return new Worker(workerPath, options);
157
124
  }
158
125
 
159
- function getWebAssemblyLoaderConfig(processor, wasmOptions) {
126
+ async function getWebAssemblyLoaderConfig(processor, wasmOptions) {
160
127
  const config = {
161
128
  modulePath: undefined,
162
129
  wasmBinaryFile: undefined,
@@ -172,18 +139,17 @@ function getWebAssemblyLoaderConfig(processor, wasmOptions) {
172
139
  }
173
140
 
174
141
  config.modulePath = buildModuleUrl(wasmOptions.fallbackModulePath);
175
- return Promise.resolve(config);
142
+ return config;
176
143
  }
177
144
 
178
- config.modulePath = buildModuleUrl(wasmOptions.modulePath);
179
145
  config.wasmBinaryFile = buildModuleUrl(wasmOptions.wasmBinaryFile);
180
146
 
181
- return Resource.fetchArrayBuffer({
147
+ const arrayBuffer = await Resource.fetchArrayBuffer({
182
148
  url: config.wasmBinaryFile,
183
- }).then(function (arrayBuffer) {
184
- config.wasmBinary = arrayBuffer;
185
- return config;
186
149
  });
150
+
151
+ config.wasmBinary = arrayBuffer;
152
+ return config;
187
153
  }
188
154
 
189
155
  /**
@@ -201,21 +167,89 @@ function getWebAssemblyLoaderConfig(processor, wasmOptions) {
201
167
  * work to be rescheduled in future frames.
202
168
  */
203
169
  function TaskProcessor(workerPath, maximumActiveTasks) {
204
- const uri = new Uri(workerPath);
205
- this._workerPath =
206
- uri.scheme().length !== 0 && uri.fragment().length === 0
207
- ? workerPath
208
- : TaskProcessor._workerModulePrefix + workerPath;
170
+ this._workerPath = workerPath;
209
171
  this._maximumActiveTasks = defaultValue(
210
172
  maximumActiveTasks,
211
173
  Number.POSITIVE_INFINITY
212
174
  );
213
175
  this._activeTasks = 0;
214
- this._deferreds = {};
215
176
  this._nextID = 0;
177
+ this._webAssemblyPromise = undefined;
216
178
  }
217
179
 
180
+ const createOnmessageHandler = (worker, id, resolve, reject) => {
181
+ const listener = ({ data }) => {
182
+ if (data.id !== id) {
183
+ return;
184
+ }
185
+
186
+ if (defined(data.error)) {
187
+ let error = data.error;
188
+ if (error.name === "RuntimeError") {
189
+ error = new RuntimeError(data.error.message);
190
+ error.stack = data.error.stack;
191
+ } else if (error.name === "DeveloperError") {
192
+ error = new DeveloperError(data.error.message);
193
+ error.stack = data.error.stack;
194
+ } else if (error.name === "Error") {
195
+ error = new Error(data.error.message);
196
+ error.stack = data.error.stack;
197
+ }
198
+ taskCompletedEvent.raiseEvent(error);
199
+ reject(error);
200
+ } else {
201
+ taskCompletedEvent.raiseEvent();
202
+ resolve(data.result);
203
+ }
204
+
205
+ worker.removeEventListener("message", listener);
206
+ };
207
+
208
+ return listener;
209
+ };
210
+
218
211
  const emptyTransferableObjectArray = [];
212
+ async function runTask(processor, parameters, transferableObjects) {
213
+ const canTransfer = await Promise.resolve(canTransferArrayBuffer());
214
+ if (!defined(transferableObjects)) {
215
+ transferableObjects = emptyTransferableObjectArray;
216
+ } else if (!canTransfer) {
217
+ transferableObjects.length = 0;
218
+ }
219
+
220
+ const id = processor._nextID++;
221
+ const promise = new Promise((resolve, reject) => {
222
+ processor._worker.addEventListener(
223
+ "message",
224
+ createOnmessageHandler(processor._worker, id, resolve, reject)
225
+ );
226
+ });
227
+
228
+ processor._worker.postMessage(
229
+ {
230
+ id: id,
231
+ baseUrl: buildModuleUrl.getCesiumBaseUrl().url,
232
+ parameters: parameters,
233
+ canTransferArrayBuffer: canTransfer,
234
+ },
235
+ transferableObjects
236
+ );
237
+
238
+ return promise;
239
+ }
240
+
241
+ async function scheduleTask(processor, parameters, transferableObjects) {
242
+ ++processor._activeTasks;
243
+
244
+ try {
245
+ const result = await runTask(processor, parameters, transferableObjects);
246
+ --processor._activeTasks;
247
+ return result;
248
+ } catch (error) {
249
+ --processor._activeTasks;
250
+ throw error;
251
+ }
252
+ }
219
253
 
220
254
  /**
221
255
  * Schedule a task to be processed by the web worker asynchronously. If there are currently more
@@ -248,89 +282,72 @@ TaskProcessor.prototype.scheduleTask = function (
248
282
  transferableObjects
249
283
  ) {
250
284
  if (!defined(this._worker)) {
251
- this._worker = createWorker(this);
285
+ this._worker = createWorker(this._workerPath);
252
286
  }
253
287
 
254
288
  if (this._activeTasks >= this._maximumActiveTasks) {
255
289
  return undefined;
256
290
  }
257
291
 
258
- ++this._activeTasks;
259
-
260
- const processor = this;
261
- return Promise.resolve(canTransferArrayBuffer()).then(function (
262
- canTransferArrayBuffer
263
- ) {
264
- if (!defined(transferableObjects)) {
265
- transferableObjects = emptyTransferableObjectArray;
266
- } else if (!canTransferArrayBuffer) {
267
- transferableObjects.length = 0;
268
- }
269
-
270
- const id = processor._nextID++;
271
- const deferred = defer();
272
- processor._deferreds[id] = deferred;
273
-
274
- processor._worker.postMessage(
275
- {
276
- id: id,
277
- parameters: parameters,
278
- canTransferArrayBuffer: canTransferArrayBuffer,
279
- },
280
- transferableObjects
281
- );
282
-
283
- return deferred.promise;
284
- });
292
+ return scheduleTask(this, parameters, transferableObjects);
285
293
  };
286
294
 
287
295
  /**
288
296
  * Posts a message to a web worker with configuration to initialize loading
289
- * and compiling a web assembly module asychronously, as well as an optional
297
+ * and compiling a web assembly module asynchronously, as well as an optional
290
298
  * fallback JavaScript module to use if Web Assembly is not supported.
291
299
  *
292
300
  * @param {object} [webAssemblyOptions] An object with the following properties:
293
301
  * @param {string} [webAssemblyOptions.modulePath] The path of the web assembly JavaScript wrapper module.
294
302
  * @param {string} [webAssemblyOptions.wasmBinaryFile] The path of the web assembly binary file.
295
303
  * @param {string} [webAssemblyOptions.fallbackModulePath] The path of the fallback JavaScript module to use if web assembly is not supported.
296
- * @returns {Promise<object>} A promise that resolves to the result when the web worker has loaded and compiled the web assembly module and is ready to process tasks.
304
+ * @returns {Promise<*>} A promise that resolves to the result when the web worker has loaded and compiled the web assembly module and is ready to process tasks.
305
+ *
306
+ * @exception {RuntimeError} This browser does not support Web Assembly, and no backup module was provided
297
307
  */
298
- TaskProcessor.prototype.initWebAssemblyModule = function (webAssemblyOptions) {
299
- if (!defined(this._worker)) {
300
- this._worker = createWorker(this);
308
+ TaskProcessor.prototype.initWebAssemblyModule = async function (
309
+ webAssemblyOptions
310
+ ) {
311
+ if (defined(this._webAssemblyPromise)) {
312
+ return this._webAssemblyPromise;
301
313
  }
302
314
 
303
- const deferred = defer();
304
- const processor = this;
305
- const worker = this._worker;
306
- getWebAssemblyLoaderConfig(this, webAssemblyOptions).then(function (
307
- wasmConfig
308
- ) {
309
- return Promise.resolve(canTransferArrayBuffer()).then(function (
310
- canTransferArrayBuffer
311
- ) {
312
- let transferableObjects;
313
- const binary = wasmConfig.wasmBinary;
314
- if (defined(binary) && canTransferArrayBuffer) {
315
- transferableObjects = [binary];
316
- }
317
-
318
- worker.onmessage = function (event) {
319
- worker.onmessage = function (event) {
320
- completeTask(processor, event.data);
321
- };
315
+ const init = async () => {
316
+ const worker = (this._worker = createWorker(this._workerPath));
317
+ const wasmConfig = await getWebAssemblyLoaderConfig(
318
+ this,
319
+ webAssemblyOptions
320
+ );
321
+ const canTransfer = await Promise.resolve(canTransferArrayBuffer());
322
+ let transferableObjects;
323
+ const binary = wasmConfig.wasmBinary;
324
+ if (defined(binary) && canTransfer) {
325
+ transferableObjects = [binary];
326
+ }
322
327
 
323
- deferred.resolve(event.data);
328
+ const promise = new Promise((resolve, reject) => {
329
+ worker.onmessage = function ({ data }) {
330
+ if (defined(data)) {
331
+ resolve(data.result);
332
+ } else {
333
+ reject(new RuntimeError("Could not configure wasm module"));
334
+ }
324
335
  };
325
-
326
- worker.postMessage(
327
- { webAssemblyConfig: wasmConfig },
328
- transferableObjects
329
- );
330
336
  });
331
- });
332
337
 
333
- return deferred.promise;
338
+ worker.postMessage(
339
+ {
340
+ canTransferArrayBuffer: canTransfer,
341
+ parameters: { webAssemblyConfig: wasmConfig },
342
+ },
343
+ transferableObjects
344
+ );
345
+
346
+ return promise;
347
+ };
348
+
349
+ this._webAssemblyPromise = init();
350
+ return this._webAssemblyPromise;
334
351
  };
335
352
 
336
353
  /**
@@ -749,10 +749,10 @@ const rotation2Scratch = new Matrix3();
749
749
  *
750
750
  *
751
751
  * @example
752
- * // Transform a point from the ICRF axes to the Fixed axes.
752
+ * // Transform a point from the Fixed axes to the ICRF axes.
753
753
  * const now = Cesium.JulianDate.now();
754
754
  * const pointInFixed = Cesium.Cartesian3.fromDegrees(0.0, 0.0);
755
- * const fixedToIcrf = Cesium.Transforms.computeIcrfToFixedMatrix(now);
755
+ * const fixedToIcrf = Cesium.Transforms.computeFixedToIcrfMatrix(now);
756
756
  * let pointInInertial = new Cesium.Cartesian3();
757
757
  * if (Cesium.defined(fixedToIcrf)) {
758
758
  * pointInInertial = Cesium.Matrix3.multiplyByVector(fixedToIcrf, pointInFixed, pointInInertial);
@@ -21,7 +21,7 @@ function getBaseUrlFromCesiumScript() {
21
21
  let a;
22
22
  function tryMakeAbsolute(url) {
23
23
  if (typeof document === "undefined") {
24
- //Node.js and Web Workers. In both cases, the URL will already be absolute.
24
+ // Node.js and Web Workers. In both cases, the URL will already be absolute.
25
25
  return url;
26
26
  }
27
27
 
@@ -29,10 +29,6 @@ function tryMakeAbsolute(url) {
29
29
  a = document.createElement("a");
30
30
  }
31
31
  a.href = url;
32
-
33
- // IE only absolutizes href on get, not set
34
- // eslint-disable-next-line no-self-assign
35
- a.href = a.href;
36
32
  return a.href;
37
33
  }
38
34
 
@@ -45,17 +41,22 @@ function getCesiumBaseUrl() {
45
41
  let baseUrlString;
46
42
  if (typeof CESIUM_BASE_URL !== "undefined") {
47
43
  baseUrlString = CESIUM_BASE_URL;
44
+ } else if (defined(import.meta?.url)) {
45
+ // ESM
46
+ baseUrlString = getAbsoluteUri(".", import.meta.url);
48
47
  } else if (
49
48
  typeof define === "object" &&
50
49
  defined(define.amd) &&
51
50
  !define.amd.toUrlUndefined &&
52
51
  defined(require.toUrl)
53
52
  ) {
53
+ // RequireJS
54
54
  baseUrlString = getAbsoluteUri(
55
55
  "..",
56
56
  buildModuleUrl("Core/buildModuleUrl.js")
57
57
  );
58
58
  } else {
59
+ // IIFE
59
60
  baseUrlString = getBaseUrlFromCesiumScript();
60
61
  }
61
62
 
@@ -20,6 +20,7 @@ import defined from "./defined.js";
20
20
  * @param {TerrainProvider} terrainProvider The terrain provider from which to query heights.
21
21
  * @param {number} level The terrain level-of-detail from which to query terrain heights.
22
22
  * @param {Cartographic[]} positions The positions to update with terrain heights.
23
+ * @param {boolean} [rejectOnTileFail=false] If true, for a failed terrain tile request the promise will be rejected. If false, returned heights will be undefined.
23
24
  * @returns {Promise<Cartographic[]>} A promise that resolves to the provided list of positions when terrain the query has completed.
24
25
  *
25
26
  * @see sampleTerrainMostDetailed
@@ -34,26 +35,43 @@ import defined from "./defined.js";
34
35
  * const updatedPositions = await Cesium.sampleTerrain(terrainProvider, 11, positions);
35
36
  * // positions[0].height and positions[1].height have been updated.
36
37
  * // updatedPositions is just a reference to positions.
38
+ *
39
+ * // To handle tile errors, pass true for the rejectOnTileFail parameter.
40
+ * try {
41
+ * const updatedPositions = await Cesium.sampleTerrain(terrainProvider, 11, positions, true);
42
+ * } catch (error) {
43
+ * // A tile request error occurred.
44
+ * }
37
45
  */
38
- async function sampleTerrain(terrainProvider, level, positions) {
46
+ async function sampleTerrain(
47
+ terrainProvider,
48
+ level,
49
+ positions,
50
+ rejectOnTileFail
51
+ ) {
52
+ if (!defined(rejectOnTileFail)) {
53
+ rejectOnTileFail = false;
54
+ }
39
55
  //>>includeStart('debug', pragmas.debug);
40
56
  Check.typeOf.object("terrainProvider", terrainProvider);
41
57
  Check.typeOf.number("level", level);
58
+ Check.typeOf.bool("rejectOnTileFail", rejectOnTileFail);
42
59
  Check.defined("positions", positions);
43
60
  //>>includeEnd('debug');
44
61
 
45
- return doSampling(terrainProvider, level, positions);
62
+ return doSampling(terrainProvider, level, positions, rejectOnTileFail);
46
63
  }
47
64
 
48
65
  /**
49
66
  * @param {object[]} tileRequests The mutated list of requests, the first one will be attempted
50
67
  * @param {Array<Promise<void>>} results The list to put the result promises into
68
+ * @param {boolean} rejectOnTileFail If true, the promise will be rejected. If false, returned heights will be undefined.
51
69
  * @returns {boolean} true if the request was made, and we are okay to attempt the next item immediately,
52
70
  * or false if we were throttled and should wait awhile before retrying.
53
71
  *
54
72
  * @private
55
73
  */
56
- function attemptConsumeNextQueueItem(tileRequests, results) {
74
+ function attemptConsumeNextQueueItem(tileRequests, results, rejectOnTileFail) {
57
75
  const tileRequest = tileRequests[0];
58
76
  const requestPromise = tileRequest.terrainProvider.requestTileGeometry(
59
77
  tileRequest.x,
@@ -66,9 +84,15 @@ function attemptConsumeNextQueueItem(tileRequests, results) {
66
84
  return false;
67
85
  }
68
86
 
69
- const promise = requestPromise
70
- .then(createInterpolateFunction(tileRequest))
71
- .catch(createMarkFailedFunction(tileRequest));
87
+ let promise;
88
+
89
+ if (rejectOnTileFail) {
90
+ promise = requestPromise.then(createInterpolateFunction(tileRequest));
91
+ } else {
92
+ promise = requestPromise
93
+ .then(createInterpolateFunction(tileRequest))
94
+ .catch(createMarkFailedFunction(tileRequest));
95
+ }
72
96
 
73
97
  // remove the request we've just done from the queue
74
98
  // and add its promise result to the result list
@@ -95,11 +119,12 @@ function delay(ms) {
95
119
  * and a Promise of each result has been put into the results list
96
120
  * @param {object[]} tileRequests The list of requests desired to be made
97
121
  * @param {Array<Promise<void>>} results The list to put all the result promises into
122
+ * @param {boolean} rejectOnTileFail If true, the promise will be rejected. If false, returned heights will be undefined.
98
123
  * @returns {Promise<void>} A promise which resolves once all requests have been started
99
124
  *
100
125
  * @private
101
126
  */
102
- function drainTileRequestQueue(tileRequests, results) {
127
+ function drainTileRequestQueue(tileRequests, results, rejectOnTileFail) {
103
128
  // nothing left to do
104
129
  if (!tileRequests.length) {
105
130
  return Promise.resolve();
@@ -108,7 +133,11 @@ function drainTileRequestQueue(tileRequests, results) {
108
133
  // consume an item from the queue, which will
109
134
  // mutate the request and result lists, and return true if we should
110
135
  // immediately attempt to consume the next item as well
111
- const success = attemptConsumeNextQueueItem(tileRequests, results);
136
+ const success = attemptConsumeNextQueueItem(
137
+ tileRequests,
138
+ results,
139
+ rejectOnTileFail
140
+ );
112
141
  if (success) {
113
142
  return drainTileRequestQueue(tileRequests, results);
114
143
  }
@@ -119,7 +148,7 @@ function drainTileRequestQueue(tileRequests, results) {
119
148
  });
120
149
  }
121
150
 
122
- function doSampling(terrainProvider, level, positions) {
151
+ function doSampling(terrainProvider, level, positions, rejectOnTileFail) {
123
152
  const tilingScheme = terrainProvider.tilingScheme;
124
153
 
125
154
  let i;
@@ -155,7 +184,11 @@ function doSampling(terrainProvider, level, positions) {
155
184
 
156
185
  // create our list of result promises to be filled
157
186
  const tilePromises = [];
158
- return drainTileRequestQueue(tileRequests, tilePromises).then(function () {
187
+ return drainTileRequestQueue(
188
+ tileRequests,
189
+ tilePromises,
190
+ rejectOnTileFail
191
+ ).then(function () {
159
192
  // now all the required requests have been started
160
193
  // we just wait for them all to finish
161
194
  return Promise.all(tilePromises).then(function () {