@cesium/engine 26.3.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 (143) hide show
  1. package/Build/ThirdParty/Workers/zip-web-worker.js +504 -535
  2. package/Build/Workers/chunk-2P3WKV6V.js +290 -0
  3. package/Build/Workers/{chunk-MUW4DJV7.js → chunk-2U5272QU.js} +17 -17
  4. package/Build/Workers/{chunk-7WXBTNRV.js → chunk-4KCOC6OZ.js} +8 -10
  5. package/Build/Workers/{chunk-GS7RY2DH.js → chunk-5FULJNWY.js} +11 -13
  6. package/Build/Workers/{chunk-2PWVICP6.js → chunk-65ZF23AQ.js} +1 -1
  7. package/Build/Workers/{chunk-SEJIXZZ4.js → chunk-6D5534B7.js} +10 -12
  8. package/Build/Workers/{chunk-MDDKCLMF.js → chunk-6GFMBHBD.js} +19 -19
  9. package/Build/Workers/{chunk-PKZA44LH.js → chunk-6VRGQF3D.js} +4 -4
  10. package/Build/Workers/{chunk-JBJ6BRIM.js → chunk-6XUIECFB.js} +4 -6
  11. package/Build/Workers/{chunk-DKSANM4A.js → chunk-7KWUH6RK.js} +14 -14
  12. package/Build/Workers/{chunk-6BSNYZZG.js → chunk-7ZBJRQQT.js} +7 -7
  13. package/Build/Workers/{chunk-XRZCS3HE.js → chunk-AEHANE5A.js} +991 -5612
  14. package/Build/Workers/chunk-AUU74SIZ.js +2420 -0
  15. package/Build/Workers/{chunk-2YY724ZX.js → chunk-B6V5NMIE.js} +13 -11
  16. package/Build/Workers/{chunk-5JCZHJUU.js → chunk-BRQ52ASU.js} +15 -17
  17. package/Build/Workers/{chunk-Z2DW5NM2.js → chunk-FVLSQBPH.js} +7 -14
  18. package/Build/Workers/{chunk-L73K5UPP.js → chunk-IFKM2GZR.js} +12 -12
  19. package/Build/Workers/{chunk-F34TJJLA.js → chunk-KF6OEWVT.js} +17 -17
  20. package/Build/Workers/{chunk-JL4NWWQY.js → chunk-KOAXSU77.js} +5 -7
  21. package/Build/Workers/{chunk-CKK6CUXK.js → chunk-KRVYCMGN.js} +6 -6
  22. package/Build/Workers/{chunk-KBGAHN5R.js → chunk-LTZRLNQP.js} +1 -1
  23. package/Build/Workers/{chunk-CQ4TZXAT.js → chunk-M7WEAGWT.js} +8 -8
  24. package/Build/Workers/{chunk-A7SMPV6B.js → chunk-MJTLGN63.js} +14 -14
  25. package/Build/Workers/{chunk-DZK34ZVD.js → chunk-MUNZ77KV.js} +1 -1
  26. package/Build/Workers/{chunk-X27HKF5E.js → chunk-NC5BUJEF.js} +2 -2
  27. package/Build/Workers/chunk-NYKURYFR.js +2131 -0
  28. package/Build/Workers/{chunk-5KG7KDDW.js → chunk-NZAQG57U.js} +7 -7
  29. package/Build/Workers/{chunk-JKTWW7IO.js → chunk-O5GUOP2G.js} +5 -7
  30. package/Build/Workers/{chunk-6R6SGKYN.js → chunk-OQUOLQTN.js} +8 -10
  31. package/Build/Workers/chunk-OUG5JB2K.js +46 -0
  32. package/Build/Workers/{chunk-HDD3RFLT.js → chunk-P4SDLSGF.js} +13 -6
  33. package/Build/Workers/{chunk-M6W46OAP.js → chunk-P6PC2OIM.js} +7 -7
  34. package/Build/Workers/{chunk-XSIUYAT6.js → chunk-PPRK3XQU.js} +31 -35
  35. package/Build/Workers/{chunk-4LRFYRBX.js → chunk-QGTYLWOT.js} +2 -2
  36. package/Build/Workers/{chunk-COKOYTRS.js → chunk-QHTLIQUH.js} +5 -7
  37. package/Build/Workers/{chunk-N5YK44FS.js → chunk-ROHWZQZ5.js} +5 -5
  38. package/Build/Workers/{chunk-XBY3354M.js → chunk-SNUWISJO.js} +6 -8
  39. package/Build/Workers/{chunk-EDETO6NY.js → chunk-T67YY3KP.js} +4 -2
  40. package/Build/Workers/{chunk-4DMAXPKB.js → chunk-TF5473GK.js} +13 -13
  41. package/Build/Workers/{chunk-B7Q2WF6Q.js → chunk-THHFTMAL.js} +4 -6
  42. package/Build/Workers/{chunk-SL2HCFYW.js → chunk-UFCZ62WM.js} +15 -13
  43. package/Build/Workers/{chunk-NZQUP52G.js → chunk-UV2YC2Q5.js} +11 -11
  44. package/Build/Workers/{chunk-E7G32DWL.js → chunk-V4ICCWYA.js} +1 -1
  45. package/Build/Workers/{chunk-75BC2IHI.js → chunk-VC6XXI2Z.js} +9 -9
  46. package/Build/Workers/{chunk-JMUUAW4X.js → chunk-VXJ6P4UI.js} +10 -10
  47. package/Build/Workers/{chunk-QTAEVUED.js → chunk-W2BKP7G7.js} +15 -17
  48. package/Build/Workers/{chunk-VRECSMG3.js → chunk-WMVGNBSH.js} +2 -2
  49. package/Build/Workers/{chunk-7SESBH2I.js → chunk-XFZMQZSZ.js} +4 -4
  50. package/Build/Workers/{chunk-Q2JS5LCB.js → chunk-XJ532R6R.js} +20 -20
  51. package/Build/Workers/{chunk-SLHK3KAR.js → chunk-YJNU4SM4.js} +5 -5
  52. package/Build/Workers/{chunk-LL2SGJYH.js → chunk-YJRDTEHQ.js} +8 -8
  53. package/Build/Workers/chunk-YUICDZKO.js +2660 -0
  54. package/Build/Workers/{chunk-ATSXKJ3L.js → chunk-Z3DEVGJV.js} +7 -7
  55. package/Build/Workers/{chunk-6V2KDEHL.js → chunk-ZECGI7UZ.js} +4 -4
  56. package/Build/Workers/{chunk-LYJUL4XQ.js → chunk-ZFLPVPUJ.js} +6 -8
  57. package/Build/Workers/{chunk-BNDSDQ7D.js → chunk-ZIM5H2DB.js} +11 -11
  58. package/Build/Workers/{chunk-KEWK6VZL.js → chunk-ZSQMGGSB.js} +14 -16
  59. package/Build/Workers/{chunk-2DKJSPYF.js → chunk-ZWYRGMBK.js} +16 -18
  60. package/Build/Workers/{chunk-UZY5XRL2.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-GLHDTTTO.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/KTX2Transcoder.js +99 -5
  119. package/Source/Core/Resource.js +2 -0
  120. package/Source/Core/TaskProcessor.js +249 -129
  121. package/Source/Core/TrustedServers.js +34 -1
  122. package/Source/Core/WebAssemblyWorkerInitializer.js +125 -0
  123. package/Source/Core/fetchWebAssemblyBinary.js +52 -0
  124. package/Source/Scene/GaussianSplatPrimitive.js +153 -66
  125. package/Source/Scene/GltfBufferViewLoader.js +25 -13
  126. package/Source/Scene/GltfSpzLoader.js +5 -4
  127. package/Source/Scene/SpzDecoder.js +106 -0
  128. package/Source/ThirdParty/Workers/zip-web-worker.js +1 -1
  129. package/Source/ThirdParty/zip-module.wasm +0 -0
  130. package/Source/Workers/createTaskProcessorWorker.js +2 -0
  131. package/Source/Workers/createVerticesFromCesium3DTilesTerrain.js +13 -1
  132. package/Source/Workers/decodeDraco.js +7 -3
  133. package/Source/Workers/decodeI3S.js +7 -3
  134. package/Source/Workers/decodeMeshopt.js +21 -0
  135. package/Source/Workers/decodeSpz.js +20 -0
  136. package/Source/Workers/gaussianSplatSorter.js +7 -3
  137. package/Source/Workers/gaussianSplatTextureGenerator.js +7 -3
  138. package/Source/Workers/transcodeKTX2.js +22 -5
  139. package/index.d.ts +93 -0
  140. package/index.js +4 -1
  141. package/package.json +1 -1
  142. package/Build/Workers/chunk-B4AVL7VI.js +0 -82
  143. package/Build/Workers/chunk-HDPNFEPP.js +0 -3820
@@ -0,0 +1,2131 @@
1
+ /**
2
+ * @license
3
+ * Cesium - https://github.com/CesiumGS/cesium
4
+ * Version 1.145.1-wasm.0
5
+ *
6
+ * Copyright 2011-2022 Cesium Contributors
7
+ *
8
+ * Licensed under the Apache License, Version 2.0 (the "License");
9
+ * you may not use this file except in compliance with the License.
10
+ * You may obtain a copy of the License at
11
+ *
12
+ * http://www.apache.org/licenses/LICENSE-2.0
13
+ *
14
+ * Unless required by applicable law or agreed to in writing, software
15
+ * distributed under the License is distributed on an "AS IS" BASIS,
16
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ * See the License for the specific language governing permissions and
18
+ * limitations under the License.
19
+ *
20
+ * Columbus View (Pat. Pend.)
21
+ *
22
+ * Portions licensed separately.
23
+ * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details.
24
+ */
25
+
26
+ import {
27
+ Frozen_default,
28
+ Math_default
29
+ } from "./chunk-P4SDLSGF.js";
30
+ import {
31
+ Check_default,
32
+ RuntimeError_default
33
+ } from "./chunk-PPRK3XQU.js";
34
+ import {
35
+ DeveloperError_default,
36
+ TrustedServers_default,
37
+ __toESM,
38
+ defined_default,
39
+ require_URI
40
+ } from "./chunk-YUICDZKO.js";
41
+
42
+ // packages/engine/Source/Core/combine.js
43
+ function combine(object1, object2, deep) {
44
+ deep = deep ?? false;
45
+ const result = {};
46
+ const object1Defined = defined_default(object1);
47
+ const object2Defined = defined_default(object2);
48
+ let property;
49
+ let object1Value;
50
+ let object2Value;
51
+ if (object1Defined) {
52
+ for (property in object1) {
53
+ if (object1.hasOwnProperty(property)) {
54
+ object1Value = object1[property];
55
+ if (object2Defined && deep && typeof object1Value === "object" && object2.hasOwnProperty(property)) {
56
+ object2Value = object2[property];
57
+ if (typeof object2Value === "object") {
58
+ result[property] = combine(object1Value, object2Value, deep);
59
+ } else {
60
+ result[property] = object1Value;
61
+ }
62
+ } else {
63
+ result[property] = object1Value;
64
+ }
65
+ }
66
+ }
67
+ }
68
+ if (object2Defined) {
69
+ for (property in object2) {
70
+ if (object2.hasOwnProperty(property) && !result.hasOwnProperty(property)) {
71
+ object2Value = object2[property];
72
+ result[property] = object2Value;
73
+ }
74
+ }
75
+ }
76
+ return result;
77
+ }
78
+ var combine_default = combine;
79
+
80
+ // packages/engine/Source/Core/Resource.js
81
+ var import_urijs5 = __toESM(require_URI(), 1);
82
+
83
+ // packages/engine/Source/Core/appendForwardSlash.js
84
+ function appendForwardSlash(url) {
85
+ if (url.length === 0 || url[url.length - 1] !== "/") {
86
+ url = `${url}/`;
87
+ }
88
+ return url;
89
+ }
90
+ var appendForwardSlash_default = appendForwardSlash;
91
+
92
+ // packages/engine/Source/Core/clone.js
93
+ function clone(object, deep) {
94
+ if (object === null || typeof object !== "object") {
95
+ return object;
96
+ }
97
+ deep = deep ?? false;
98
+ const result = new object.constructor();
99
+ for (const propertyName in object) {
100
+ if (object.hasOwnProperty(propertyName)) {
101
+ let value = object[propertyName];
102
+ if (deep) {
103
+ value = clone(value, deep);
104
+ }
105
+ result[propertyName] = value;
106
+ }
107
+ }
108
+ return result;
109
+ }
110
+ var clone_default = clone;
111
+
112
+ // packages/engine/Source/Core/defer.js
113
+ function defer() {
114
+ let resolve;
115
+ let reject;
116
+ const promise = new Promise(function(res, rej) {
117
+ resolve = res;
118
+ reject = rej;
119
+ });
120
+ return {
121
+ resolve,
122
+ reject,
123
+ promise
124
+ };
125
+ }
126
+ var defer_default = defer;
127
+
128
+ // packages/engine/Source/Core/getAbsoluteUri.js
129
+ var import_urijs = __toESM(require_URI(), 1);
130
+ function getAbsoluteUri(relative, base) {
131
+ let documentObject;
132
+ if (typeof document !== "undefined") {
133
+ documentObject = document;
134
+ }
135
+ return getAbsoluteUri._implementation(relative, base, documentObject);
136
+ }
137
+ getAbsoluteUri._implementation = function(relative, base, documentObject) {
138
+ if (!defined_default(relative)) {
139
+ throw new DeveloperError_default("relative uri is required.");
140
+ }
141
+ if (!defined_default(base)) {
142
+ if (typeof documentObject === "undefined") {
143
+ return relative;
144
+ }
145
+ base = documentObject.baseURI ?? documentObject.location.href;
146
+ }
147
+ const relativeUri = new import_urijs.default(relative);
148
+ if (relativeUri.scheme() !== "") {
149
+ return relativeUri.toString();
150
+ }
151
+ return relativeUri.absoluteTo(base).toString();
152
+ };
153
+ var getAbsoluteUri_default = getAbsoluteUri;
154
+
155
+ // packages/engine/Source/Core/getBaseUri.js
156
+ var import_urijs2 = __toESM(require_URI(), 1);
157
+ function getBaseUri(uri, includeQuery) {
158
+ if (!defined_default(uri)) {
159
+ throw new DeveloperError_default("uri is required.");
160
+ }
161
+ let basePath = "";
162
+ const i = uri.lastIndexOf("/");
163
+ if (i !== -1) {
164
+ basePath = uri.substring(0, i + 1);
165
+ }
166
+ if (!includeQuery) {
167
+ return basePath;
168
+ }
169
+ uri = new import_urijs2.default(uri);
170
+ if (uri.query().length !== 0) {
171
+ basePath += `?${uri.query()}`;
172
+ }
173
+ if (uri.fragment().length !== 0) {
174
+ basePath += `#${uri.fragment()}`;
175
+ }
176
+ return basePath;
177
+ }
178
+ var getBaseUri_default = getBaseUri;
179
+
180
+ // packages/engine/Source/Core/getExtensionFromUri.js
181
+ var import_urijs3 = __toESM(require_URI(), 1);
182
+ function getExtensionFromUri(uri) {
183
+ if (!defined_default(uri)) {
184
+ throw new DeveloperError_default("uri is required.");
185
+ }
186
+ const uriObject = new import_urijs3.default(uri);
187
+ uriObject.normalize();
188
+ let path = uriObject.path();
189
+ let index = path.lastIndexOf("/");
190
+ if (index !== -1) {
191
+ path = path.substr(index + 1);
192
+ }
193
+ index = path.lastIndexOf(".");
194
+ if (index === -1) {
195
+ path = "";
196
+ } else {
197
+ path = path.substr(index + 1);
198
+ }
199
+ return path;
200
+ }
201
+ var getExtensionFromUri_default = getExtensionFromUri;
202
+
203
+ // packages/engine/Source/Core/getImagePixels.js
204
+ var context2DsByWidthAndHeight = {};
205
+ function getImagePixels(image, width, height) {
206
+ if (!defined_default(width)) {
207
+ width = image.width;
208
+ }
209
+ if (!defined_default(height)) {
210
+ height = image.height;
211
+ }
212
+ let context2DsByHeight = context2DsByWidthAndHeight[width];
213
+ if (!defined_default(context2DsByHeight)) {
214
+ context2DsByHeight = {};
215
+ context2DsByWidthAndHeight[width] = context2DsByHeight;
216
+ }
217
+ let context2d = context2DsByHeight[height];
218
+ if (!defined_default(context2d)) {
219
+ const canvas = document.createElement("canvas");
220
+ canvas.width = width;
221
+ canvas.height = height;
222
+ context2d = canvas.getContext("2d", { willReadFrequently: true });
223
+ context2d.globalCompositeOperation = "copy";
224
+ context2DsByHeight[height] = context2d;
225
+ }
226
+ context2d.drawImage(image, 0, 0, width, height);
227
+ return context2d.getImageData(0, 0, width, height).data;
228
+ }
229
+ var getImagePixels_default = getImagePixels;
230
+
231
+ // packages/engine/Source/Core/isBlobUri.js
232
+ var blobUriRegex = /^blob:/i;
233
+ function isBlobUri(uri) {
234
+ Check_default.typeOf.string("uri", uri);
235
+ return blobUriRegex.test(uri);
236
+ }
237
+ var isBlobUri_default = isBlobUri;
238
+
239
+ // packages/engine/Source/Core/isCrossOriginUrl.js
240
+ var a;
241
+ function isCrossOriginUrl(url) {
242
+ if (!defined_default(a)) {
243
+ a = document.createElement("a");
244
+ }
245
+ a.href = window.location.href;
246
+ const host = a.host;
247
+ const protocol = a.protocol;
248
+ a.href = url;
249
+ a.href = a.href;
250
+ return protocol !== a.protocol || host !== a.host;
251
+ }
252
+ var isCrossOriginUrl_default = isCrossOriginUrl;
253
+
254
+ // packages/engine/Source/Core/isDataUri.js
255
+ var dataUriRegex = /^data:/i;
256
+ function isDataUri(uri) {
257
+ Check_default.typeOf.string("uri", uri);
258
+ return dataUriRegex.test(uri);
259
+ }
260
+ var isDataUri_default = isDataUri;
261
+
262
+ // packages/engine/Source/Core/loadAndExecuteScript.js
263
+ function loadAndExecuteScript(url) {
264
+ const script = document.createElement("script");
265
+ script.async = true;
266
+ script.src = url;
267
+ return new Promise((resolve, reject) => {
268
+ if (window.crossOriginIsolated) {
269
+ script.setAttribute("crossorigin", "anonymous");
270
+ }
271
+ const head = document.getElementsByTagName("head")[0];
272
+ script.onload = function() {
273
+ script.onload = void 0;
274
+ head.removeChild(script);
275
+ resolve();
276
+ };
277
+ script.onerror = function(e) {
278
+ reject(e);
279
+ };
280
+ head.appendChild(script);
281
+ });
282
+ }
283
+ var loadAndExecuteScript_default = loadAndExecuteScript;
284
+
285
+ // packages/engine/Source/Core/objectToQuery.js
286
+ function objectToQuery(obj) {
287
+ if (!defined_default(obj)) {
288
+ throw new DeveloperError_default("obj is required.");
289
+ }
290
+ let result = "";
291
+ for (const propName in obj) {
292
+ if (obj.hasOwnProperty(propName)) {
293
+ const value = obj[propName];
294
+ const part = `${encodeURIComponent(propName)}=`;
295
+ if (Array.isArray(value)) {
296
+ for (let i = 0, len = value.length; i < len; ++i) {
297
+ result += `${part + encodeURIComponent(value[i])}&`;
298
+ }
299
+ } else {
300
+ result += `${part + encodeURIComponent(value)}&`;
301
+ }
302
+ }
303
+ }
304
+ result = result.slice(0, -1);
305
+ return result;
306
+ }
307
+ var objectToQuery_default = objectToQuery;
308
+
309
+ // packages/engine/Source/Core/queryToObject.js
310
+ function queryToObject(queryString) {
311
+ if (!defined_default(queryString)) {
312
+ throw new DeveloperError_default("queryString is required.");
313
+ }
314
+ const result = {};
315
+ if (queryString === "") {
316
+ return result;
317
+ }
318
+ const parts = queryString.replace(/\+/g, "%20").split(/[&;]/);
319
+ for (let i = 0, len = parts.length; i < len; ++i) {
320
+ const subparts = parts[i].split("=");
321
+ const name = decodeURIComponent(subparts[0]);
322
+ let value = subparts[1];
323
+ if (defined_default(value)) {
324
+ value = decodeURIComponent(value);
325
+ } else {
326
+ value = "";
327
+ }
328
+ const resultValue = result[name];
329
+ if (typeof resultValue === "string") {
330
+ result[name] = [resultValue, value];
331
+ } else if (Array.isArray(resultValue)) {
332
+ resultValue.push(value);
333
+ } else {
334
+ result[name] = value;
335
+ }
336
+ }
337
+ return result;
338
+ }
339
+ var queryToObject_default = queryToObject;
340
+
341
+ // packages/engine/Source/Core/RequestState.js
342
+ var RequestState = {
343
+ /**
344
+ * Initial unissued state.
345
+ *
346
+ * @type {number}
347
+ * @constant
348
+ */
349
+ UNISSUED: 0,
350
+ /**
351
+ * Issued but not yet active. Will become active when open slots are available.
352
+ *
353
+ * @type {number}
354
+ * @constant
355
+ */
356
+ ISSUED: 1,
357
+ /**
358
+ * Actual http request has been sent.
359
+ *
360
+ * @type {number}
361
+ * @constant
362
+ */
363
+ ACTIVE: 2,
364
+ /**
365
+ * Request completed successfully.
366
+ *
367
+ * @type {number}
368
+ * @constant
369
+ */
370
+ RECEIVED: 3,
371
+ /**
372
+ * Request was cancelled, either explicitly or automatically because of low priority.
373
+ *
374
+ * @type {number}
375
+ * @constant
376
+ */
377
+ CANCELLED: 4,
378
+ /**
379
+ * Request failed.
380
+ *
381
+ * @type {number}
382
+ * @constant
383
+ */
384
+ FAILED: 5
385
+ };
386
+ Object.freeze(RequestState);
387
+ var RequestState_default = RequestState;
388
+
389
+ // packages/engine/Source/Core/RequestType.js
390
+ var RequestType = {
391
+ /**
392
+ * Terrain request.
393
+ *
394
+ * @type {number}
395
+ * @constant
396
+ */
397
+ TERRAIN: 0,
398
+ /**
399
+ * Imagery request.
400
+ *
401
+ * @type {number}
402
+ * @constant
403
+ */
404
+ IMAGERY: 1,
405
+ /**
406
+ * 3D Tiles request.
407
+ *
408
+ * @type {number}
409
+ * @constant
410
+ */
411
+ TILES3D: 2,
412
+ /**
413
+ * Other request.
414
+ *
415
+ * @type {number}
416
+ * @constant
417
+ */
418
+ OTHER: 3
419
+ };
420
+ Object.freeze(RequestType);
421
+ var RequestType_default = RequestType;
422
+
423
+ // packages/engine/Source/Core/Request.js
424
+ function Request(options) {
425
+ options = options ?? Frozen_default.EMPTY_OBJECT;
426
+ const throttleByServer = options.throttleByServer ?? false;
427
+ const throttle = options.throttle ?? false;
428
+ this.url = options.url;
429
+ this.requestFunction = options.requestFunction;
430
+ this.cancelFunction = options.cancelFunction;
431
+ this.priorityFunction = options.priorityFunction;
432
+ this.priority = options.priority ?? 0;
433
+ this.throttle = throttle;
434
+ this.throttleByServer = throttleByServer;
435
+ this.type = options.type ?? RequestType_default.OTHER;
436
+ this.serverKey = options.serverKey;
437
+ this.state = RequestState_default.UNISSUED;
438
+ this.deferred = void 0;
439
+ this.cancelled = false;
440
+ }
441
+ Request.prototype.cancel = function() {
442
+ this.cancelled = true;
443
+ };
444
+ Request.prototype.clone = function(result) {
445
+ if (!defined_default(result)) {
446
+ return new Request(this);
447
+ }
448
+ result.url = this.url;
449
+ result.requestFunction = this.requestFunction;
450
+ result.cancelFunction = this.cancelFunction;
451
+ result.priorityFunction = this.priorityFunction;
452
+ result.priority = this.priority;
453
+ result.throttle = this.throttle;
454
+ result.throttleByServer = this.throttleByServer;
455
+ result.type = this.type;
456
+ result.serverKey = this.serverKey;
457
+ result.state = RequestState_default.UNISSUED;
458
+ result.deferred = void 0;
459
+ result.cancelled = false;
460
+ return result;
461
+ };
462
+ var Request_default = Request;
463
+
464
+ // packages/engine/Source/Core/parseResponseHeaders.js
465
+ function parseResponseHeaders(headerString) {
466
+ const headers = {};
467
+ if (!headerString) {
468
+ return headers;
469
+ }
470
+ const headerPairs = headerString.split("\r\n");
471
+ for (let i = 0; i < headerPairs.length; ++i) {
472
+ const headerPair = headerPairs[i];
473
+ const index = headerPair.indexOf(": ");
474
+ if (index > 0) {
475
+ const key = headerPair.substring(0, index);
476
+ const val = headerPair.substring(index + 2);
477
+ headers[key] = val;
478
+ }
479
+ }
480
+ return headers;
481
+ }
482
+ var parseResponseHeaders_default = parseResponseHeaders;
483
+
484
+ // packages/engine/Source/Core/RequestErrorEvent.js
485
+ function RequestErrorEvent(statusCode, response, responseHeaders) {
486
+ this.statusCode = statusCode;
487
+ this.response = response;
488
+ this.responseHeaders = responseHeaders;
489
+ if (typeof this.responseHeaders === "string") {
490
+ this.responseHeaders = parseResponseHeaders_default(this.responseHeaders);
491
+ }
492
+ }
493
+ RequestErrorEvent.prototype.toString = function() {
494
+ let str = "Request has failed.";
495
+ if (defined_default(this.statusCode)) {
496
+ str += ` Status Code: ${this.statusCode}`;
497
+ }
498
+ return str;
499
+ };
500
+ var RequestErrorEvent_default = RequestErrorEvent;
501
+
502
+ // packages/engine/Source/Core/RequestScheduler.js
503
+ var import_urijs4 = __toESM(require_URI(), 1);
504
+
505
+ // packages/engine/Source/Core/Event.js
506
+ function Event() {
507
+ this._listeners = /* @__PURE__ */ new Map();
508
+ this._toRemove = /* @__PURE__ */ new Map();
509
+ this._toAdd = /* @__PURE__ */ new Map();
510
+ this._invokingListeners = false;
511
+ this._listenerCount = 0;
512
+ }
513
+ Object.defineProperties(Event.prototype, {
514
+ /**
515
+ * The number of listeners currently subscribed to the event.
516
+ * @memberof Event.prototype
517
+ * @type {number}
518
+ * @readonly
519
+ */
520
+ numberOfListeners: {
521
+ get: function() {
522
+ return this._listenerCount;
523
+ }
524
+ }
525
+ });
526
+ Event.prototype.addEventListener = function(listener, scope) {
527
+ Check_default.typeOf.func("listener", listener);
528
+ const event = this;
529
+ const listenerMap = event._invokingListeners ? event._toAdd : event._listeners;
530
+ const added = addEventListener(this, listenerMap, listener, scope);
531
+ if (added) {
532
+ event._listenerCount++;
533
+ }
534
+ return function() {
535
+ event.removeEventListener(listener, scope);
536
+ };
537
+ };
538
+ function addEventListener(event, listenerMap, listener, scope) {
539
+ if (!listenerMap.has(listener)) {
540
+ listenerMap.set(listener, /* @__PURE__ */ new Set());
541
+ }
542
+ const scopes = listenerMap.get(listener);
543
+ if (!scopes.has(scope)) {
544
+ scopes.add(scope);
545
+ return true;
546
+ }
547
+ return false;
548
+ }
549
+ Event.prototype.removeEventListener = function(listener, scope) {
550
+ Check_default.typeOf.func("listener", listener);
551
+ const removedFromListeners = removeEventListener(
552
+ this,
553
+ this._listeners,
554
+ listener,
555
+ scope
556
+ );
557
+ const removedFromToAdd = removeEventListener(
558
+ this,
559
+ this._toAdd,
560
+ listener,
561
+ scope
562
+ );
563
+ const removed = removedFromListeners || removedFromToAdd;
564
+ if (removed) {
565
+ this._listenerCount--;
566
+ }
567
+ return removed;
568
+ };
569
+ function removeEventListener(event, listenerMap, listener, scope) {
570
+ const scopes = listenerMap.get(listener);
571
+ if (!scopes || !scopes.has(scope)) {
572
+ return false;
573
+ }
574
+ if (event._invokingListeners) {
575
+ if (!addEventListener(event, event._toRemove, listener, scope)) {
576
+ return false;
577
+ }
578
+ } else {
579
+ scopes.delete(scope);
580
+ if (scopes.size === 0) {
581
+ listenerMap.delete(listener);
582
+ }
583
+ }
584
+ return true;
585
+ }
586
+ Event.prototype.raiseEvent = function() {
587
+ this._invokingListeners = true;
588
+ for (const [listener, scopes] of this._listeners.entries()) {
589
+ if (!defined_default(listener)) {
590
+ continue;
591
+ }
592
+ for (const scope of scopes) {
593
+ listener.apply(scope, arguments);
594
+ }
595
+ }
596
+ this._invokingListeners = false;
597
+ for (const [listener, scopes] of this._toAdd.entries()) {
598
+ for (const scope of scopes) {
599
+ addEventListener(this, this._listeners, listener, scope);
600
+ }
601
+ }
602
+ this._toAdd.clear();
603
+ for (const [listener, scopes] of this._toRemove.entries()) {
604
+ for (const scope of scopes) {
605
+ removeEventListener(this, this._listeners, listener, scope);
606
+ }
607
+ }
608
+ this._toRemove.clear();
609
+ };
610
+ var Event_default = Event;
611
+
612
+ // packages/engine/Source/Core/Heap.js
613
+ function Heap(options) {
614
+ Check_default.typeOf.object("options", options);
615
+ Check_default.defined("options.comparator", options.comparator);
616
+ this._comparator = options.comparator;
617
+ this._array = [];
618
+ this._length = 0;
619
+ this._maximumLength = void 0;
620
+ }
621
+ Object.defineProperties(Heap.prototype, {
622
+ /**
623
+ * Gets the length of the heap.
624
+ *
625
+ * @memberof Heap.prototype
626
+ *
627
+ * @type {number}
628
+ * @readonly
629
+ */
630
+ length: {
631
+ get: function() {
632
+ return this._length;
633
+ }
634
+ },
635
+ /**
636
+ * Gets the internal array.
637
+ *
638
+ * @memberof Heap.prototype
639
+ *
640
+ * @type {Array}
641
+ * @readonly
642
+ */
643
+ internalArray: {
644
+ get: function() {
645
+ return this._array;
646
+ }
647
+ },
648
+ /**
649
+ * Gets and sets the maximum length of the heap.
650
+ *
651
+ * @memberof Heap.prototype
652
+ *
653
+ * @type {number}
654
+ */
655
+ maximumLength: {
656
+ get: function() {
657
+ return this._maximumLength;
658
+ },
659
+ set: function(value) {
660
+ Check_default.typeOf.number.greaterThanOrEquals("maximumLength", value, 0);
661
+ const originalLength = this._length;
662
+ if (value < originalLength) {
663
+ const array = this._array;
664
+ for (let i = value; i < originalLength; ++i) {
665
+ array[i] = void 0;
666
+ }
667
+ this._length = value;
668
+ array.length = value;
669
+ }
670
+ this._maximumLength = value;
671
+ }
672
+ },
673
+ /**
674
+ * The comparator to use for the heap. If comparator(a, b) is less than 0, sort a to a lower index than b, otherwise sort to a higher index.
675
+ *
676
+ * @memberof Heap.prototype
677
+ *
678
+ * @type {Heap.ComparatorCallback}
679
+ */
680
+ comparator: {
681
+ get: function() {
682
+ return this._comparator;
683
+ }
684
+ }
685
+ });
686
+ function swap(array, a2, b) {
687
+ const temp = array[a2];
688
+ array[a2] = array[b];
689
+ array[b] = temp;
690
+ }
691
+ Heap.prototype.reserve = function(length) {
692
+ length = length ?? this._length;
693
+ this._array.length = length;
694
+ };
695
+ Heap.prototype.heapify = function(index) {
696
+ index = index ?? 0;
697
+ const length = this._length;
698
+ const comparator = this._comparator;
699
+ const array = this._array;
700
+ let candidate;
701
+ let inserting = true;
702
+ while (inserting) {
703
+ const right = 2 * (index + 1);
704
+ const left = right - 1;
705
+ if (left < length && comparator(array[left], array[index]) < 0) {
706
+ candidate = left;
707
+ } else {
708
+ candidate = index;
709
+ }
710
+ if (right < length && comparator(array[right], array[candidate]) < 0) {
711
+ candidate = right;
712
+ }
713
+ if (candidate !== index) {
714
+ swap(array, candidate, index);
715
+ index = candidate;
716
+ } else {
717
+ inserting = false;
718
+ }
719
+ }
720
+ };
721
+ Heap.prototype.resort = function() {
722
+ const length = this._length;
723
+ for (let i = Math.ceil(length / 2); i >= 0; --i) {
724
+ this.heapify(i);
725
+ }
726
+ };
727
+ Heap.prototype.insert = function(element) {
728
+ Check_default.defined("element", element);
729
+ const array = this._array;
730
+ const comparator = this._comparator;
731
+ const maximumLength = this._maximumLength;
732
+ let index = this._length++;
733
+ if (index < array.length) {
734
+ array[index] = element;
735
+ } else {
736
+ array.push(element);
737
+ }
738
+ while (index !== 0) {
739
+ const parent = Math.floor((index - 1) / 2);
740
+ if (comparator(array[index], array[parent]) < 0) {
741
+ swap(array, index, parent);
742
+ index = parent;
743
+ } else {
744
+ break;
745
+ }
746
+ }
747
+ let removedElement;
748
+ if (defined_default(maximumLength) && this._length > maximumLength) {
749
+ removedElement = array[maximumLength];
750
+ this._length = maximumLength;
751
+ }
752
+ return removedElement;
753
+ };
754
+ Heap.prototype.pop = function(index) {
755
+ index = index ?? 0;
756
+ if (this._length === 0) {
757
+ return void 0;
758
+ }
759
+ Check_default.typeOf.number.lessThan("index", index, this._length);
760
+ const array = this._array;
761
+ const root = array[index];
762
+ swap(array, index, --this._length);
763
+ this.heapify(index);
764
+ array[this._length] = void 0;
765
+ return root;
766
+ };
767
+ var Heap_default = Heap;
768
+
769
+ // packages/engine/Source/Core/RequestScheduler.js
770
+ function sortRequests(a2, b) {
771
+ return a2.priority - b.priority;
772
+ }
773
+ var statistics = {
774
+ numberOfAttemptedRequests: 0,
775
+ numberOfActiveRequests: 0,
776
+ numberOfCancelledRequests: 0,
777
+ numberOfCancelledActiveRequests: 0,
778
+ numberOfFailedRequests: 0,
779
+ numberOfActiveRequestsEver: 0,
780
+ lastNumberOfActiveRequests: 0
781
+ };
782
+ var priorityHeapLength = 20;
783
+ var requestHeap = new Heap_default({
784
+ comparator: sortRequests
785
+ });
786
+ requestHeap.maximumLength = priorityHeapLength;
787
+ requestHeap.reserve(priorityHeapLength);
788
+ var activeRequests = [];
789
+ var numberOfActiveRequestsByServer = {};
790
+ var pageUri = typeof document !== "undefined" ? new import_urijs4.default(document.location.href) : new import_urijs4.default();
791
+ var requestCompletedEvent = new Event_default();
792
+ function RequestScheduler() {
793
+ }
794
+ RequestScheduler.maximumRequests = 50;
795
+ RequestScheduler.maximumRequestsPerServer = 18;
796
+ RequestScheduler.requestsByServer = {};
797
+ RequestScheduler.throttleRequests = true;
798
+ RequestScheduler.debugShowStatistics = false;
799
+ RequestScheduler.requestCompletedEvent = requestCompletedEvent;
800
+ Object.defineProperties(RequestScheduler, {
801
+ /**
802
+ * Returns the statistics used by the request scheduler.
803
+ *
804
+ * @memberof RequestScheduler
805
+ *
806
+ * @type {object}
807
+ * @readonly
808
+ * @private
809
+ */
810
+ statistics: {
811
+ get: function() {
812
+ return statistics;
813
+ }
814
+ },
815
+ /**
816
+ * The maximum size of the priority heap. This limits the number of requests that are sorted by priority. Only applies to requests that are not yet active.
817
+ *
818
+ * @memberof RequestScheduler
819
+ *
820
+ * @type {number}
821
+ * @default 20
822
+ * @private
823
+ */
824
+ priorityHeapLength: {
825
+ get: function() {
826
+ return priorityHeapLength;
827
+ },
828
+ set: function(value) {
829
+ if (value < priorityHeapLength) {
830
+ while (requestHeap.length > value) {
831
+ const request = requestHeap.pop();
832
+ cancelRequest(request);
833
+ }
834
+ }
835
+ priorityHeapLength = value;
836
+ requestHeap.maximumLength = value;
837
+ requestHeap.reserve(value);
838
+ }
839
+ }
840
+ });
841
+ function updatePriority(request) {
842
+ if (defined_default(request.priorityFunction)) {
843
+ request.priority = request.priorityFunction();
844
+ }
845
+ }
846
+ RequestScheduler.serverHasOpenSlots = function(serverKey, desiredRequests) {
847
+ desiredRequests = desiredRequests ?? 1;
848
+ const maxRequests = RequestScheduler.requestsByServer[serverKey] ?? RequestScheduler.maximumRequestsPerServer;
849
+ const hasOpenSlotsServer = numberOfActiveRequestsByServer[serverKey] + desiredRequests <= maxRequests;
850
+ return hasOpenSlotsServer;
851
+ };
852
+ RequestScheduler.heapHasOpenSlots = function(desiredRequests) {
853
+ const hasOpenSlotsHeap = requestHeap.length + desiredRequests <= priorityHeapLength;
854
+ return hasOpenSlotsHeap;
855
+ };
856
+ function issueRequest(request) {
857
+ if (request.state === RequestState_default.UNISSUED) {
858
+ request.state = RequestState_default.ISSUED;
859
+ request.deferred = defer_default();
860
+ }
861
+ return request.deferred.promise;
862
+ }
863
+ function getRequestReceivedFunction(request) {
864
+ return function(results) {
865
+ if (request.state === RequestState_default.CANCELLED) {
866
+ return;
867
+ }
868
+ const deferred = request.deferred;
869
+ --statistics.numberOfActiveRequests;
870
+ --numberOfActiveRequestsByServer[request.serverKey];
871
+ requestCompletedEvent.raiseEvent();
872
+ request.state = RequestState_default.RECEIVED;
873
+ request.deferred = void 0;
874
+ deferred.resolve(results);
875
+ };
876
+ }
877
+ function getRequestFailedFunction(request) {
878
+ return function(error) {
879
+ if (request.state === RequestState_default.CANCELLED) {
880
+ return;
881
+ }
882
+ ++statistics.numberOfFailedRequests;
883
+ --statistics.numberOfActiveRequests;
884
+ --numberOfActiveRequestsByServer[request.serverKey];
885
+ requestCompletedEvent.raiseEvent(error);
886
+ request.state = RequestState_default.FAILED;
887
+ request.deferred.reject(error);
888
+ };
889
+ }
890
+ function startRequest(request) {
891
+ const promise = issueRequest(request);
892
+ request.state = RequestState_default.ACTIVE;
893
+ activeRequests.push(request);
894
+ ++statistics.numberOfActiveRequests;
895
+ ++statistics.numberOfActiveRequestsEver;
896
+ ++numberOfActiveRequestsByServer[request.serverKey];
897
+ request.requestFunction().then(getRequestReceivedFunction(request)).catch(getRequestFailedFunction(request));
898
+ return promise;
899
+ }
900
+ function cancelRequest(request) {
901
+ const active = request.state === RequestState_default.ACTIVE;
902
+ request.state = RequestState_default.CANCELLED;
903
+ ++statistics.numberOfCancelledRequests;
904
+ if (defined_default(request.deferred)) {
905
+ const deferred = request.deferred;
906
+ deferred.promise.catch(() => {
907
+ });
908
+ request.deferred = void 0;
909
+ deferred.reject(new RuntimeError_default(`Request cancelled: "${request.url}"`));
910
+ }
911
+ if (active) {
912
+ --statistics.numberOfActiveRequests;
913
+ --numberOfActiveRequestsByServer[request.serverKey];
914
+ ++statistics.numberOfCancelledActiveRequests;
915
+ }
916
+ if (defined_default(request.cancelFunction)) {
917
+ request.cancelFunction();
918
+ }
919
+ }
920
+ RequestScheduler.update = function() {
921
+ let i;
922
+ let request;
923
+ let removeCount = 0;
924
+ const activeLength = activeRequests.length;
925
+ for (i = 0; i < activeLength; ++i) {
926
+ request = activeRequests[i];
927
+ if (request.cancelled) {
928
+ cancelRequest(request);
929
+ }
930
+ if (request.state !== RequestState_default.ACTIVE) {
931
+ ++removeCount;
932
+ continue;
933
+ }
934
+ if (removeCount > 0) {
935
+ activeRequests[i - removeCount] = request;
936
+ }
937
+ }
938
+ activeRequests.length -= removeCount;
939
+ const issuedRequests = requestHeap.internalArray;
940
+ const issuedLength = requestHeap.length;
941
+ for (i = 0; i < issuedLength; ++i) {
942
+ updatePriority(issuedRequests[i]);
943
+ }
944
+ requestHeap.resort();
945
+ const openSlots = Math.max(
946
+ RequestScheduler.maximumRequests - activeRequests.length,
947
+ 0
948
+ );
949
+ let filledSlots = 0;
950
+ while (filledSlots < openSlots && requestHeap.length > 0) {
951
+ request = requestHeap.pop();
952
+ if (request.cancelled) {
953
+ cancelRequest(request);
954
+ continue;
955
+ }
956
+ if (request.throttleByServer && !RequestScheduler.serverHasOpenSlots(request.serverKey)) {
957
+ cancelRequest(request);
958
+ continue;
959
+ }
960
+ startRequest(request);
961
+ ++filledSlots;
962
+ }
963
+ updateStatistics();
964
+ };
965
+ RequestScheduler.getServerKey = function(url) {
966
+ Check_default.typeOf.string("url", url);
967
+ let uri = new import_urijs4.default(url);
968
+ if (uri.scheme() === "") {
969
+ uri = uri.absoluteTo(pageUri);
970
+ uri.normalize();
971
+ }
972
+ let serverKey = uri.authority();
973
+ if (!/:/.test(serverKey)) {
974
+ serverKey = `${serverKey}:${uri.scheme() === "https" ? "443" : "80"}`;
975
+ }
976
+ const length = numberOfActiveRequestsByServer[serverKey];
977
+ if (!defined_default(length)) {
978
+ numberOfActiveRequestsByServer[serverKey] = 0;
979
+ }
980
+ return serverKey;
981
+ };
982
+ RequestScheduler.request = function(request) {
983
+ Check_default.typeOf.object("request", request);
984
+ Check_default.typeOf.string("request.url", request.url);
985
+ Check_default.typeOf.func("request.requestFunction", request.requestFunction);
986
+ if (isDataUri_default(request.url) || isBlobUri_default(request.url)) {
987
+ requestCompletedEvent.raiseEvent();
988
+ request.state = RequestState_default.RECEIVED;
989
+ return request.requestFunction();
990
+ }
991
+ ++statistics.numberOfAttemptedRequests;
992
+ if (!defined_default(request.serverKey)) {
993
+ request.serverKey = RequestScheduler.getServerKey(request.url);
994
+ }
995
+ if (RequestScheduler.throttleRequests && request.throttleByServer && !RequestScheduler.serverHasOpenSlots(request.serverKey)) {
996
+ return void 0;
997
+ }
998
+ if (!RequestScheduler.throttleRequests || !request.throttle) {
999
+ return startRequest(request);
1000
+ }
1001
+ if (activeRequests.length >= RequestScheduler.maximumRequests) {
1002
+ return void 0;
1003
+ }
1004
+ updatePriority(request);
1005
+ const removedRequest = requestHeap.insert(request);
1006
+ if (defined_default(removedRequest)) {
1007
+ if (removedRequest === request) {
1008
+ return void 0;
1009
+ }
1010
+ cancelRequest(removedRequest);
1011
+ }
1012
+ return issueRequest(request);
1013
+ };
1014
+ function updateStatistics() {
1015
+ if (!RequestScheduler.debugShowStatistics) {
1016
+ return;
1017
+ }
1018
+ if (statistics.numberOfActiveRequests === 0 && statistics.lastNumberOfActiveRequests > 0) {
1019
+ if (statistics.numberOfAttemptedRequests > 0) {
1020
+ console.log(
1021
+ `Number of attempted requests: ${statistics.numberOfAttemptedRequests}`
1022
+ );
1023
+ statistics.numberOfAttemptedRequests = 0;
1024
+ }
1025
+ if (statistics.numberOfCancelledRequests > 0) {
1026
+ console.log(
1027
+ `Number of cancelled requests: ${statistics.numberOfCancelledRequests}`
1028
+ );
1029
+ statistics.numberOfCancelledRequests = 0;
1030
+ }
1031
+ if (statistics.numberOfCancelledActiveRequests > 0) {
1032
+ console.log(
1033
+ `Number of cancelled active requests: ${statistics.numberOfCancelledActiveRequests}`
1034
+ );
1035
+ statistics.numberOfCancelledActiveRequests = 0;
1036
+ }
1037
+ if (statistics.numberOfFailedRequests > 0) {
1038
+ console.log(
1039
+ `Number of failed requests: ${statistics.numberOfFailedRequests}`
1040
+ );
1041
+ statistics.numberOfFailedRequests = 0;
1042
+ }
1043
+ }
1044
+ statistics.lastNumberOfActiveRequests = statistics.numberOfActiveRequests;
1045
+ }
1046
+ RequestScheduler.clearForSpecs = function() {
1047
+ while (requestHeap.length > 0) {
1048
+ const request = requestHeap.pop();
1049
+ cancelRequest(request);
1050
+ }
1051
+ const length = activeRequests.length;
1052
+ for (let i = 0; i < length; ++i) {
1053
+ cancelRequest(activeRequests[i]);
1054
+ }
1055
+ activeRequests.length = 0;
1056
+ numberOfActiveRequestsByServer = {};
1057
+ statistics.numberOfAttemptedRequests = 0;
1058
+ statistics.numberOfActiveRequests = 0;
1059
+ statistics.numberOfCancelledRequests = 0;
1060
+ statistics.numberOfCancelledActiveRequests = 0;
1061
+ statistics.numberOfFailedRequests = 0;
1062
+ statistics.numberOfActiveRequestsEver = 0;
1063
+ statistics.lastNumberOfActiveRequests = 0;
1064
+ };
1065
+ RequestScheduler.numberOfActiveRequestsByServer = function(serverKey) {
1066
+ return numberOfActiveRequestsByServer[serverKey];
1067
+ };
1068
+ RequestScheduler.requestHeap = requestHeap;
1069
+ var RequestScheduler_default = RequestScheduler;
1070
+
1071
+ // packages/engine/Source/Core/Resource.js
1072
+ var xhrBlobSupported = (function() {
1073
+ try {
1074
+ const xhr = new XMLHttpRequest();
1075
+ xhr.open("GET", "#", true);
1076
+ xhr.responseType = "blob";
1077
+ return xhr.responseType === "blob";
1078
+ } catch (e) {
1079
+ return false;
1080
+ }
1081
+ })();
1082
+ function Resource(options) {
1083
+ options = options ?? Frozen_default.EMPTY_OBJECT;
1084
+ if (typeof options === "string") {
1085
+ options = {
1086
+ url: options
1087
+ };
1088
+ }
1089
+ Check_default.typeOf.string("options.url", options.url);
1090
+ this._url = void 0;
1091
+ this._templateValues = defaultClone(options.templateValues, {});
1092
+ this._queryParameters = defaultClone(options.queryParameters, {});
1093
+ this.headers = defaultClone(options.headers, {});
1094
+ this.request = options.request ?? new Request_default();
1095
+ this.proxy = options.proxy;
1096
+ this.retryCallback = options.retryCallback;
1097
+ this.retryAttempts = options.retryAttempts ?? 0;
1098
+ this._retryCount = 0;
1099
+ const parseUrl = options.parseUrl ?? true;
1100
+ if (parseUrl) {
1101
+ this.parseUrl(options.url, true, true);
1102
+ } else {
1103
+ this._url = options.url;
1104
+ }
1105
+ this._credits = options.credits;
1106
+ }
1107
+ function defaultClone(value, defaultValue) {
1108
+ return defined_default(value) ? clone_default(value) : defaultValue;
1109
+ }
1110
+ Resource.createIfNeeded = function(resource) {
1111
+ if (resource instanceof Resource) {
1112
+ return resource.getDerivedResource({
1113
+ request: resource.request
1114
+ });
1115
+ }
1116
+ if (typeof resource !== "string") {
1117
+ return resource;
1118
+ }
1119
+ return new Resource({
1120
+ url: resource
1121
+ });
1122
+ };
1123
+ var supportsImageBitmapOptionsPromise;
1124
+ Resource.supportsImageBitmapOptions = function() {
1125
+ if (defined_default(supportsImageBitmapOptionsPromise)) {
1126
+ return supportsImageBitmapOptionsPromise;
1127
+ }
1128
+ if (typeof createImageBitmap !== "function") {
1129
+ supportsImageBitmapOptionsPromise = Promise.resolve(false);
1130
+ return supportsImageBitmapOptionsPromise;
1131
+ }
1132
+ const imageDataUri = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAABGdBTUEAAE4g3rEiDgAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADElEQVQI12Ng6GAAAAEUAIngE3ZiAAAAAElFTkSuQmCC";
1133
+ supportsImageBitmapOptionsPromise = Resource.fetchBlob({
1134
+ url: imageDataUri
1135
+ }).then(function(blob) {
1136
+ const imageBitmapOptions = {
1137
+ // 'from-image' is deprecated, new option is 'none'. However, we still need to support older browsers,
1138
+ // and there's no good way to detect support for these options. For now, continue to use 'from-image'. See: https://github.com/CesiumGS/cesium/issues/12846
1139
+ imageOrientation: "flipY",
1140
+ // default is "from-image"
1141
+ premultiplyAlpha: "none",
1142
+ // default is "default"
1143
+ colorSpaceConversion: "none"
1144
+ // default is "default"
1145
+ };
1146
+ return Promise.all([
1147
+ createImageBitmap(blob, imageBitmapOptions),
1148
+ createImageBitmap(blob)
1149
+ ]);
1150
+ }).then(function(imageBitmaps) {
1151
+ const colorWithOptions = getImagePixels_default(imageBitmaps[0]);
1152
+ const colorWithDefaults = getImagePixels_default(imageBitmaps[1]);
1153
+ return colorWithOptions[1] !== colorWithDefaults[1];
1154
+ }).catch(function() {
1155
+ return false;
1156
+ });
1157
+ return supportsImageBitmapOptionsPromise;
1158
+ };
1159
+ Object.defineProperties(Resource, {
1160
+ /**
1161
+ * Returns true if blobs are supported.
1162
+ *
1163
+ * @memberof Resource
1164
+ * @type {boolean}
1165
+ *
1166
+ * @readonly
1167
+ */
1168
+ isBlobSupported: {
1169
+ get: function() {
1170
+ return xhrBlobSupported;
1171
+ }
1172
+ }
1173
+ });
1174
+ Object.defineProperties(Resource.prototype, {
1175
+ /**
1176
+ * Query parameters appended to the url.
1177
+ *
1178
+ * @memberof Resource.prototype
1179
+ * @type {object}
1180
+ *
1181
+ * @readonly
1182
+ */
1183
+ queryParameters: {
1184
+ get: function() {
1185
+ return this._queryParameters;
1186
+ }
1187
+ },
1188
+ /**
1189
+ * The key/value pairs used to replace template parameters in the url.
1190
+ *
1191
+ * @memberof Resource.prototype
1192
+ * @type {object}
1193
+ *
1194
+ * @readonly
1195
+ */
1196
+ templateValues: {
1197
+ get: function() {
1198
+ return this._templateValues;
1199
+ }
1200
+ },
1201
+ /**
1202
+ * The url to the resource with template values replaced, query string appended and encoded by proxy if one was set.
1203
+ *
1204
+ * @memberof Resource.prototype
1205
+ * @type {string}
1206
+ */
1207
+ url: {
1208
+ get: function() {
1209
+ return this.getUrlComponent(true, true);
1210
+ },
1211
+ set: function(value) {
1212
+ this.parseUrl(value, false, false);
1213
+ }
1214
+ },
1215
+ /**
1216
+ * The file extension of the resource.
1217
+ *
1218
+ * @memberof Resource.prototype
1219
+ * @type {string}
1220
+ *
1221
+ * @readonly
1222
+ */
1223
+ extension: {
1224
+ get: function() {
1225
+ return getExtensionFromUri_default(this._url);
1226
+ }
1227
+ },
1228
+ /**
1229
+ * True if the Resource refers to a data URI.
1230
+ *
1231
+ * @memberof Resource.prototype
1232
+ * @type {boolean}
1233
+ */
1234
+ isDataUri: {
1235
+ get: function() {
1236
+ return isDataUri_default(this._url);
1237
+ }
1238
+ },
1239
+ /**
1240
+ * True if the Resource refers to a blob URI.
1241
+ *
1242
+ * @memberof Resource.prototype
1243
+ * @type {boolean}
1244
+ */
1245
+ isBlobUri: {
1246
+ get: function() {
1247
+ return isBlobUri_default(this._url);
1248
+ }
1249
+ },
1250
+ /**
1251
+ * True if the Resource refers to a cross origin URL.
1252
+ *
1253
+ * @memberof Resource.prototype
1254
+ * @type {boolean}
1255
+ */
1256
+ isCrossOriginUrl: {
1257
+ get: function() {
1258
+ return isCrossOriginUrl_default(this._url);
1259
+ }
1260
+ },
1261
+ /**
1262
+ * True if the Resource has request headers. This is equivalent to checking if the headers property has any keys.
1263
+ *
1264
+ * @memberof Resource.prototype
1265
+ * @type {boolean}
1266
+ */
1267
+ hasHeaders: {
1268
+ get: function() {
1269
+ return Object.keys(this.headers).length > 0;
1270
+ }
1271
+ },
1272
+ /**
1273
+ * Gets the credits required for attribution of an asset.
1274
+ * @private
1275
+ */
1276
+ credits: {
1277
+ get: function() {
1278
+ return this._credits;
1279
+ }
1280
+ }
1281
+ });
1282
+ Resource.prototype.toString = function() {
1283
+ return this.getUrlComponent(true, true);
1284
+ };
1285
+ Resource.prototype.parseUrl = function(url, merge, preserveQuery, baseUrl) {
1286
+ let uri = new import_urijs5.default(url);
1287
+ const query = parseQueryString(uri.query());
1288
+ this._queryParameters = merge ? combineQueryParameters(query, this.queryParameters, preserveQuery) : query;
1289
+ uri.search("");
1290
+ uri.fragment("");
1291
+ if (defined_default(baseUrl) && uri.scheme() === "") {
1292
+ uri = uri.absoluteTo(getAbsoluteUri_default(baseUrl));
1293
+ }
1294
+ this._url = uri.toString();
1295
+ };
1296
+ function parseQueryString(queryString) {
1297
+ if (queryString.length === 0) {
1298
+ return {};
1299
+ }
1300
+ if (queryString.indexOf("=") === -1) {
1301
+ return { [queryString]: void 0 };
1302
+ }
1303
+ return queryToObject_default(queryString);
1304
+ }
1305
+ function combineQueryParameters(q1, q2, preserveQueryParameters) {
1306
+ if (!preserveQueryParameters) {
1307
+ return combine_default(q1, q2);
1308
+ }
1309
+ const result = clone_default(q1, true);
1310
+ for (const param in q2) {
1311
+ if (q2.hasOwnProperty(param)) {
1312
+ let value = result[param];
1313
+ const q2Value = q2[param];
1314
+ if (defined_default(value)) {
1315
+ if (!Array.isArray(value)) {
1316
+ value = result[param] = [value];
1317
+ }
1318
+ result[param] = value.concat(q2Value);
1319
+ } else {
1320
+ result[param] = Array.isArray(q2Value) ? q2Value.slice() : q2Value;
1321
+ }
1322
+ }
1323
+ }
1324
+ return result;
1325
+ }
1326
+ Resource.prototype.getUrlComponent = function(query, proxy) {
1327
+ if (this.isDataUri) {
1328
+ return this._url;
1329
+ }
1330
+ let url = this._url;
1331
+ if (query) {
1332
+ url = `${url}${stringifyQuery(this.queryParameters)}`;
1333
+ }
1334
+ url = url.replace(/%7B/g, "{").replace(/%7D/g, "}");
1335
+ const templateValues = this._templateValues;
1336
+ if (Object.keys(templateValues).length > 0) {
1337
+ url = url.replace(/{(.*?)}/g, function(match, key) {
1338
+ const replacement = templateValues[key];
1339
+ if (defined_default(replacement)) {
1340
+ return encodeURIComponent(replacement);
1341
+ }
1342
+ return match;
1343
+ });
1344
+ }
1345
+ if (proxy && defined_default(this.proxy)) {
1346
+ url = this.proxy.getURL(url);
1347
+ }
1348
+ return url;
1349
+ };
1350
+ function stringifyQuery(queryObject) {
1351
+ const keys = Object.keys(queryObject);
1352
+ if (keys.length === 0) {
1353
+ return "";
1354
+ }
1355
+ if (keys.length === 1 && !defined_default(queryObject[keys[0]])) {
1356
+ return `?${keys[0]}`;
1357
+ }
1358
+ return `?${objectToQuery_default(queryObject)}`;
1359
+ }
1360
+ Resource.prototype.setQueryParameters = function(params, useAsDefault) {
1361
+ if (useAsDefault) {
1362
+ this._queryParameters = combineQueryParameters(
1363
+ this._queryParameters,
1364
+ params,
1365
+ false
1366
+ );
1367
+ } else {
1368
+ this._queryParameters = combineQueryParameters(
1369
+ params,
1370
+ this._queryParameters,
1371
+ false
1372
+ );
1373
+ }
1374
+ };
1375
+ Resource.prototype.appendQueryParameters = function(params) {
1376
+ this._queryParameters = combineQueryParameters(
1377
+ params,
1378
+ this._queryParameters,
1379
+ true
1380
+ );
1381
+ };
1382
+ Resource.prototype.setTemplateValues = function(template, useAsDefault) {
1383
+ if (useAsDefault) {
1384
+ this._templateValues = combine_default(this._templateValues, template);
1385
+ } else {
1386
+ this._templateValues = combine_default(template, this._templateValues);
1387
+ }
1388
+ };
1389
+ Resource.prototype.getDerivedResource = function(options) {
1390
+ const resource = this.clone();
1391
+ resource._retryCount = 0;
1392
+ if (defined_default(options.url)) {
1393
+ const preserveQuery = options.preserveQueryParameters ?? false;
1394
+ resource.parseUrl(options.url, true, preserveQuery, this._url);
1395
+ }
1396
+ if (defined_default(options.queryParameters)) {
1397
+ resource._queryParameters = combine_default(
1398
+ options.queryParameters,
1399
+ resource.queryParameters
1400
+ );
1401
+ }
1402
+ if (defined_default(options.templateValues)) {
1403
+ resource._templateValues = combine_default(
1404
+ options.templateValues,
1405
+ resource.templateValues
1406
+ );
1407
+ }
1408
+ if (defined_default(options.headers)) {
1409
+ resource.headers = combine_default(options.headers, resource.headers);
1410
+ }
1411
+ if (defined_default(options.proxy)) {
1412
+ resource.proxy = options.proxy;
1413
+ }
1414
+ if (defined_default(options.request)) {
1415
+ resource.request = options.request;
1416
+ }
1417
+ if (defined_default(options.retryCallback)) {
1418
+ resource.retryCallback = options.retryCallback;
1419
+ }
1420
+ if (defined_default(options.retryAttempts)) {
1421
+ resource.retryAttempts = options.retryAttempts;
1422
+ }
1423
+ return resource;
1424
+ };
1425
+ Resource.prototype.retryOnError = function(error) {
1426
+ const retryCallback = this.retryCallback;
1427
+ if (typeof retryCallback !== "function" || this._retryCount >= this.retryAttempts) {
1428
+ return Promise.resolve(false);
1429
+ }
1430
+ const that = this;
1431
+ return Promise.resolve(retryCallback(this, error)).then(function(result) {
1432
+ ++that._retryCount;
1433
+ return result;
1434
+ });
1435
+ };
1436
+ Resource.prototype.clone = function(result) {
1437
+ if (!defined_default(result)) {
1438
+ return new Resource({
1439
+ url: this._url,
1440
+ queryParameters: this.queryParameters,
1441
+ templateValues: this.templateValues,
1442
+ headers: this.headers,
1443
+ proxy: this.proxy,
1444
+ retryCallback: this.retryCallback,
1445
+ retryAttempts: this.retryAttempts,
1446
+ request: this.request.clone(),
1447
+ parseUrl: false,
1448
+ credits: defined_default(this.credits) ? this.credits.slice() : void 0
1449
+ });
1450
+ }
1451
+ result._url = this._url;
1452
+ result._queryParameters = clone_default(this._queryParameters);
1453
+ result._templateValues = clone_default(this._templateValues);
1454
+ result.headers = clone_default(this.headers);
1455
+ result.proxy = this.proxy;
1456
+ result.retryCallback = this.retryCallback;
1457
+ result.retryAttempts = this.retryAttempts;
1458
+ result._retryCount = 0;
1459
+ result.request = this.request.clone();
1460
+ return result;
1461
+ };
1462
+ Resource.prototype.getBaseUri = function(includeQuery) {
1463
+ return getBaseUri_default(this.getUrlComponent(includeQuery), includeQuery);
1464
+ };
1465
+ Resource.prototype.appendForwardSlash = function() {
1466
+ this._url = appendForwardSlash_default(this._url);
1467
+ };
1468
+ Resource.prototype.fetchArrayBuffer = function() {
1469
+ return this.fetch({
1470
+ responseType: "arraybuffer"
1471
+ });
1472
+ };
1473
+ Resource.fetchArrayBuffer = function(options) {
1474
+ const resource = new Resource(options);
1475
+ return resource.fetchArrayBuffer();
1476
+ };
1477
+ Resource.prototype.fetchBlob = function() {
1478
+ return this.fetch({
1479
+ responseType: "blob"
1480
+ });
1481
+ };
1482
+ Resource.fetchBlob = function(options) {
1483
+ const resource = new Resource(options);
1484
+ return resource.fetchBlob();
1485
+ };
1486
+ Resource.prototype.fetchImage = function(options) {
1487
+ options = options ?? Frozen_default.EMPTY_OBJECT;
1488
+ const preferImageBitmap = options.preferImageBitmap ?? false;
1489
+ const preferBlob = options.preferBlob ?? false;
1490
+ const flipY = options.flipY ?? false;
1491
+ const skipColorSpaceConversion = options.skipColorSpaceConversion ?? false;
1492
+ checkAndResetRequest(this.request);
1493
+ if (!xhrBlobSupported || this.isDataUri || this.isBlobUri || !this.hasHeaders && !preferBlob) {
1494
+ return this._fetchImage({
1495
+ resource: this,
1496
+ flipY,
1497
+ skipColorSpaceConversion,
1498
+ preferImageBitmap
1499
+ });
1500
+ }
1501
+ const blobPromise = this.fetchBlob();
1502
+ if (!defined_default(blobPromise)) {
1503
+ return;
1504
+ }
1505
+ let supportsImageBitmap;
1506
+ let useImageBitmap;
1507
+ let generatedBlobResource;
1508
+ let generatedBlob;
1509
+ return Resource.supportsImageBitmapOptions().then(function(result) {
1510
+ supportsImageBitmap = result;
1511
+ useImageBitmap = supportsImageBitmap && preferImageBitmap;
1512
+ return blobPromise;
1513
+ }).then(function(blob) {
1514
+ if (!defined_default(blob)) {
1515
+ return;
1516
+ }
1517
+ generatedBlob = blob;
1518
+ if (useImageBitmap) {
1519
+ return Resource.createImageBitmapFromBlob(blob, {
1520
+ flipY,
1521
+ premultiplyAlpha: false,
1522
+ skipColorSpaceConversion
1523
+ });
1524
+ }
1525
+ const blobUrl = window.URL.createObjectURL(blob);
1526
+ generatedBlobResource = new Resource({
1527
+ url: blobUrl
1528
+ });
1529
+ return generatedBlobResource._fetchImage({
1530
+ flipY,
1531
+ skipColorSpaceConversion,
1532
+ preferImageBitmap: false
1533
+ });
1534
+ }).then(function(image) {
1535
+ if (!defined_default(image)) {
1536
+ return;
1537
+ }
1538
+ image.blob = generatedBlob;
1539
+ if (useImageBitmap) {
1540
+ return image;
1541
+ }
1542
+ window.URL.revokeObjectURL(generatedBlobResource.url);
1543
+ return image;
1544
+ }).catch(function(error) {
1545
+ if (defined_default(generatedBlobResource)) {
1546
+ window.URL.revokeObjectURL(generatedBlobResource.url);
1547
+ }
1548
+ error.blob = generatedBlob;
1549
+ return Promise.reject(error);
1550
+ });
1551
+ };
1552
+ Resource.prototype._fetchImage = function(options) {
1553
+ const resource = this;
1554
+ const flipY = options.flipY;
1555
+ const skipColorSpaceConversion = options.skipColorSpaceConversion;
1556
+ const preferImageBitmap = options.preferImageBitmap;
1557
+ const request = resource.request;
1558
+ request.url = resource.url;
1559
+ request.requestFunction = function() {
1560
+ let crossOrigin = false;
1561
+ if (!resource.isDataUri && !resource.isBlobUri) {
1562
+ crossOrigin = resource.isCrossOriginUrl;
1563
+ }
1564
+ const deferred = defer_default();
1565
+ Resource._Implementations.createImage(
1566
+ request,
1567
+ crossOrigin,
1568
+ deferred,
1569
+ flipY,
1570
+ skipColorSpaceConversion,
1571
+ preferImageBitmap
1572
+ );
1573
+ return deferred.promise;
1574
+ };
1575
+ const promise = RequestScheduler_default.request(request);
1576
+ if (!defined_default(promise)) {
1577
+ return;
1578
+ }
1579
+ return promise.catch(function(e) {
1580
+ if (request.state !== RequestState_default.FAILED) {
1581
+ return Promise.reject(e);
1582
+ }
1583
+ return resource.retryOnError(e).then(function(retry) {
1584
+ if (retry) {
1585
+ request.state = RequestState_default.UNISSUED;
1586
+ request.deferred = void 0;
1587
+ return resource._fetchImage({
1588
+ flipY,
1589
+ skipColorSpaceConversion,
1590
+ preferImageBitmap
1591
+ });
1592
+ }
1593
+ return Promise.reject(e);
1594
+ });
1595
+ });
1596
+ };
1597
+ Resource.fetchImage = function(options) {
1598
+ const resource = new Resource(options);
1599
+ return resource.fetchImage({
1600
+ flipY: options.flipY,
1601
+ skipColorSpaceConversion: options.skipColorSpaceConversion,
1602
+ preferBlob: options.preferBlob,
1603
+ preferImageBitmap: options.preferImageBitmap
1604
+ });
1605
+ };
1606
+ Resource.prototype.fetchText = function() {
1607
+ return this.fetch({
1608
+ responseType: "text"
1609
+ });
1610
+ };
1611
+ Resource.fetchText = function(options) {
1612
+ const resource = new Resource(options);
1613
+ return resource.fetchText();
1614
+ };
1615
+ Resource.prototype.fetchJson = function() {
1616
+ const promise = this.fetch({
1617
+ responseType: "text",
1618
+ headers: {
1619
+ Accept: "application/json,*/*;q=0.01"
1620
+ }
1621
+ });
1622
+ if (!defined_default(promise)) {
1623
+ return void 0;
1624
+ }
1625
+ return promise.then(function(value) {
1626
+ if (!defined_default(value)) {
1627
+ return;
1628
+ }
1629
+ return JSON.parse(value);
1630
+ });
1631
+ };
1632
+ Resource.fetchJson = function(options) {
1633
+ const resource = new Resource(options);
1634
+ return resource.fetchJson();
1635
+ };
1636
+ Resource.prototype.fetchXML = function() {
1637
+ return this.fetch({
1638
+ responseType: "document",
1639
+ overrideMimeType: "text/xml"
1640
+ });
1641
+ };
1642
+ Resource.fetchXML = function(options) {
1643
+ const resource = new Resource(options);
1644
+ return resource.fetchXML();
1645
+ };
1646
+ Resource.prototype.fetchJsonp = function(callbackParameterName) {
1647
+ callbackParameterName = callbackParameterName ?? "callback";
1648
+ checkAndResetRequest(this.request);
1649
+ let functionName;
1650
+ do {
1651
+ functionName = `loadJsonp${Math_default.nextRandomNumber().toString().substring(2, 8)}`;
1652
+ } while (defined_default(window[functionName]));
1653
+ return fetchJsonp(this, callbackParameterName, functionName);
1654
+ };
1655
+ function fetchJsonp(resource, callbackParameterName, functionName) {
1656
+ const callbackQuery = {};
1657
+ callbackQuery[callbackParameterName] = functionName;
1658
+ resource.setQueryParameters(callbackQuery);
1659
+ const request = resource.request;
1660
+ const url = resource.url;
1661
+ request.url = url;
1662
+ request.requestFunction = function() {
1663
+ const deferred = defer_default();
1664
+ window[functionName] = function(data) {
1665
+ deferred.resolve(data);
1666
+ try {
1667
+ delete window[functionName];
1668
+ } catch (e) {
1669
+ window[functionName] = void 0;
1670
+ }
1671
+ };
1672
+ Resource._Implementations.loadAndExecuteScript(url, functionName, deferred);
1673
+ return deferred.promise;
1674
+ };
1675
+ const promise = RequestScheduler_default.request(request);
1676
+ if (!defined_default(promise)) {
1677
+ return;
1678
+ }
1679
+ return promise.catch(function(e) {
1680
+ if (request.state !== RequestState_default.FAILED) {
1681
+ return Promise.reject(e);
1682
+ }
1683
+ return resource.retryOnError(e).then(function(retry) {
1684
+ if (retry) {
1685
+ request.state = RequestState_default.UNISSUED;
1686
+ request.deferred = void 0;
1687
+ return fetchJsonp(resource, callbackParameterName, functionName);
1688
+ }
1689
+ return Promise.reject(e);
1690
+ });
1691
+ });
1692
+ }
1693
+ Resource.fetchJsonp = function(options) {
1694
+ const resource = new Resource(options);
1695
+ return resource.fetchJsonp(options.callbackParameterName);
1696
+ };
1697
+ Resource.prototype._makeRequest = function(options) {
1698
+ const resource = this;
1699
+ checkAndResetRequest(resource.request);
1700
+ const request = resource.request;
1701
+ const url = resource.url;
1702
+ request.url = url;
1703
+ request.requestFunction = function() {
1704
+ const responseType = options.responseType;
1705
+ const headers = combine_default(options.headers, resource.headers);
1706
+ const overrideMimeType = options.overrideMimeType;
1707
+ const method = options.method;
1708
+ const data = options.data;
1709
+ const deferred = defer_default();
1710
+ const xhr = Resource._Implementations.loadWithXhr(
1711
+ url,
1712
+ responseType,
1713
+ method,
1714
+ data,
1715
+ headers,
1716
+ deferred,
1717
+ overrideMimeType
1718
+ );
1719
+ if (defined_default(xhr) && defined_default(xhr.abort)) {
1720
+ request.cancelFunction = function() {
1721
+ xhr.abort();
1722
+ };
1723
+ }
1724
+ return deferred.promise;
1725
+ };
1726
+ const promise = RequestScheduler_default.request(request);
1727
+ if (!defined_default(promise)) {
1728
+ return;
1729
+ }
1730
+ return promise.then(function(data) {
1731
+ request.cancelFunction = void 0;
1732
+ return data;
1733
+ }).catch(function(e) {
1734
+ request.cancelFunction = void 0;
1735
+ if (request.state !== RequestState_default.FAILED) {
1736
+ return Promise.reject(e);
1737
+ }
1738
+ return resource.retryOnError(e).then(function(retry) {
1739
+ if (retry) {
1740
+ request.state = RequestState_default.UNISSUED;
1741
+ request.deferred = void 0;
1742
+ return resource.fetch(options);
1743
+ }
1744
+ return Promise.reject(e);
1745
+ });
1746
+ });
1747
+ };
1748
+ function checkAndResetRequest(request) {
1749
+ if (request.state === RequestState_default.ISSUED || request.state === RequestState_default.ACTIVE) {
1750
+ throw new RuntimeError_default("The Resource is already being fetched.");
1751
+ }
1752
+ request.state = RequestState_default.UNISSUED;
1753
+ request.deferred = void 0;
1754
+ }
1755
+ var dataUriRegex2 = /^data:(.*?)(;base64)?,(.*)$/;
1756
+ function decodeDataUriText(isBase64, data) {
1757
+ const result = decodeURIComponent(data);
1758
+ if (isBase64) {
1759
+ return atob(result);
1760
+ }
1761
+ return result;
1762
+ }
1763
+ function decodeDataUriArrayBuffer(isBase64, data) {
1764
+ const byteString = decodeDataUriText(isBase64, data);
1765
+ const buffer = new ArrayBuffer(byteString.length);
1766
+ const view = new Uint8Array(buffer);
1767
+ for (let i = 0; i < byteString.length; i++) {
1768
+ view[i] = byteString.charCodeAt(i);
1769
+ }
1770
+ return buffer;
1771
+ }
1772
+ function decodeDataUri(dataUriRegexResult, responseType) {
1773
+ responseType = responseType ?? "";
1774
+ const mimeType = dataUriRegexResult[1];
1775
+ const isBase64 = !!dataUriRegexResult[2];
1776
+ const data = dataUriRegexResult[3];
1777
+ let buffer;
1778
+ let parser;
1779
+ switch (responseType) {
1780
+ case "":
1781
+ case "text":
1782
+ return decodeDataUriText(isBase64, data);
1783
+ case "arraybuffer":
1784
+ return decodeDataUriArrayBuffer(isBase64, data);
1785
+ case "blob":
1786
+ buffer = decodeDataUriArrayBuffer(isBase64, data);
1787
+ return new Blob([buffer], {
1788
+ type: mimeType
1789
+ });
1790
+ case "document":
1791
+ parser = new DOMParser();
1792
+ return parser.parseFromString(
1793
+ decodeDataUriText(isBase64, data),
1794
+ mimeType
1795
+ );
1796
+ case "json":
1797
+ return JSON.parse(decodeDataUriText(isBase64, data));
1798
+ default:
1799
+ throw new DeveloperError_default(`Unhandled responseType: ${responseType}`);
1800
+ }
1801
+ }
1802
+ Resource.prototype.fetch = function(options) {
1803
+ options = defaultClone(options, {});
1804
+ options.method = "GET";
1805
+ return this._makeRequest(options);
1806
+ };
1807
+ Resource.fetch = function(options) {
1808
+ const resource = new Resource(options);
1809
+ return resource.fetch({
1810
+ // Make copy of just the needed fields because headers can be passed to both the constructor and to fetch
1811
+ responseType: options.responseType,
1812
+ overrideMimeType: options.overrideMimeType
1813
+ });
1814
+ };
1815
+ Resource.prototype.delete = function(options) {
1816
+ options = defaultClone(options, {});
1817
+ options.method = "DELETE";
1818
+ return this._makeRequest(options);
1819
+ };
1820
+ Resource.delete = function(options) {
1821
+ const resource = new Resource(options);
1822
+ return resource.delete({
1823
+ // Make copy of just the needed fields because headers can be passed to both the constructor and to fetch
1824
+ responseType: options.responseType,
1825
+ overrideMimeType: options.overrideMimeType,
1826
+ data: options.data
1827
+ });
1828
+ };
1829
+ Resource.prototype.head = function(options) {
1830
+ options = defaultClone(options, {});
1831
+ options.method = "HEAD";
1832
+ return this._makeRequest(options);
1833
+ };
1834
+ Resource.head = function(options) {
1835
+ const resource = new Resource(options);
1836
+ return resource.head({
1837
+ // Make copy of just the needed fields because headers can be passed to both the constructor and to fetch
1838
+ responseType: options.responseType,
1839
+ overrideMimeType: options.overrideMimeType
1840
+ });
1841
+ };
1842
+ Resource.prototype.options = function(options) {
1843
+ options = defaultClone(options, {});
1844
+ options.method = "OPTIONS";
1845
+ return this._makeRequest(options);
1846
+ };
1847
+ Resource.options = function(options) {
1848
+ const resource = new Resource(options);
1849
+ return resource.options({
1850
+ // Make copy of just the needed fields because headers can be passed to both the constructor and to fetch
1851
+ responseType: options.responseType,
1852
+ overrideMimeType: options.overrideMimeType
1853
+ });
1854
+ };
1855
+ Resource.prototype.post = function(data, options) {
1856
+ Check_default.defined("data", data);
1857
+ options = defaultClone(options, {});
1858
+ options.method = "POST";
1859
+ options.data = data;
1860
+ return this._makeRequest(options);
1861
+ };
1862
+ Resource.post = function(options) {
1863
+ const resource = new Resource(options);
1864
+ return resource.post(options.data, {
1865
+ // Make copy of just the needed fields because headers can be passed to both the constructor and to post
1866
+ responseType: options.responseType,
1867
+ overrideMimeType: options.overrideMimeType
1868
+ });
1869
+ };
1870
+ Resource.prototype.put = function(data, options) {
1871
+ Check_default.defined("data", data);
1872
+ options = defaultClone(options, {});
1873
+ options.method = "PUT";
1874
+ options.data = data;
1875
+ return this._makeRequest(options);
1876
+ };
1877
+ Resource.put = function(options) {
1878
+ const resource = new Resource(options);
1879
+ return resource.put(options.data, {
1880
+ // Make copy of just the needed fields because headers can be passed to both the constructor and to post
1881
+ responseType: options.responseType,
1882
+ overrideMimeType: options.overrideMimeType
1883
+ });
1884
+ };
1885
+ Resource.prototype.patch = function(data, options) {
1886
+ Check_default.defined("data", data);
1887
+ options = defaultClone(options, {});
1888
+ options.method = "PATCH";
1889
+ options.data = data;
1890
+ return this._makeRequest(options);
1891
+ };
1892
+ Resource.patch = function(options) {
1893
+ const resource = new Resource(options);
1894
+ return resource.patch(options.data, {
1895
+ // Make copy of just the needed fields because headers can be passed to both the constructor and to post
1896
+ responseType: options.responseType,
1897
+ overrideMimeType: options.overrideMimeType
1898
+ });
1899
+ };
1900
+ Resource._Implementations = {};
1901
+ Resource._Implementations.loadImageElement = function(url, crossOrigin, deferred) {
1902
+ const image = new Image();
1903
+ image.onload = function() {
1904
+ if (image.naturalWidth === 0 && image.naturalHeight === 0 && image.width === 0 && image.height === 0) {
1905
+ image.width = 300;
1906
+ image.height = 150;
1907
+ }
1908
+ deferred.resolve(image);
1909
+ };
1910
+ image.onerror = function(e) {
1911
+ deferred.reject(e);
1912
+ };
1913
+ if (crossOrigin) {
1914
+ if (TrustedServers_default.contains(url)) {
1915
+ image.crossOrigin = "use-credentials";
1916
+ } else {
1917
+ image.crossOrigin = "";
1918
+ }
1919
+ }
1920
+ image.src = url;
1921
+ };
1922
+ Resource._Implementations.createImage = function(request, crossOrigin, deferred, flipY, skipColorSpaceConversion, preferImageBitmap, headers) {
1923
+ const url = request.url;
1924
+ Resource.supportsImageBitmapOptions().then(function(supportsImageBitmap) {
1925
+ if (!(supportsImageBitmap && preferImageBitmap)) {
1926
+ Resource._Implementations.loadImageElement(url, crossOrigin, deferred);
1927
+ return;
1928
+ }
1929
+ const responseType = "blob";
1930
+ const method = "GET";
1931
+ const xhrDeferred = defer_default();
1932
+ const xhr = Resource._Implementations.loadWithXhr(
1933
+ url,
1934
+ responseType,
1935
+ method,
1936
+ void 0,
1937
+ headers,
1938
+ xhrDeferred,
1939
+ void 0,
1940
+ void 0,
1941
+ void 0
1942
+ );
1943
+ if (defined_default(xhr) && defined_default(xhr.abort)) {
1944
+ request.cancelFunction = function() {
1945
+ xhr.abort();
1946
+ };
1947
+ }
1948
+ return xhrDeferred.promise.then(function(blob) {
1949
+ if (!defined_default(blob)) {
1950
+ deferred.reject(
1951
+ new RuntimeError_default(
1952
+ `Successfully retrieved ${url} but it contained no content.`
1953
+ )
1954
+ );
1955
+ return;
1956
+ }
1957
+ return Resource.createImageBitmapFromBlob(blob, {
1958
+ flipY,
1959
+ premultiplyAlpha: false,
1960
+ skipColorSpaceConversion
1961
+ });
1962
+ }).then(function(image) {
1963
+ deferred.resolve(image);
1964
+ });
1965
+ }).catch(function(e) {
1966
+ deferred.reject(e);
1967
+ });
1968
+ };
1969
+ Resource.createImageBitmapFromBlob = function(blob, options) {
1970
+ Check_default.defined("options", options);
1971
+ Check_default.typeOf.bool("options.flipY", options.flipY);
1972
+ Check_default.typeOf.bool("options.premultiplyAlpha", options.premultiplyAlpha);
1973
+ Check_default.typeOf.bool(
1974
+ "options.skipColorSpaceConversion",
1975
+ options.skipColorSpaceConversion
1976
+ );
1977
+ return createImageBitmap(blob, {
1978
+ // 'from-image' is deprecated, new option is 'none'. However, we still need to support older browsers,
1979
+ // and there's no good way to detect support for these options. For now, continue to use 'from-image'. See: https://github.com/CesiumGS/cesium/issues/12846
1980
+ imageOrientation: options.flipY ? "flipY" : "none",
1981
+ premultiplyAlpha: options.premultiplyAlpha ? "premultiply" : "none",
1982
+ colorSpaceConversion: options.skipColorSpaceConversion ? "none" : "default"
1983
+ });
1984
+ };
1985
+ function loadWithHttpRequest(url, responseType, method, data, headers, deferred, overrideMimeType) {
1986
+ fetch(url, {
1987
+ method,
1988
+ headers,
1989
+ credentials: TrustedServers_default.contains(url) ? "include" : "same-origin"
1990
+ }).then(async (response) => {
1991
+ if (!response.ok) {
1992
+ const responseHeaders = {};
1993
+ response.headers.forEach((value, key) => {
1994
+ responseHeaders[key] = value;
1995
+ });
1996
+ deferred.reject(
1997
+ new RequestErrorEvent_default(response.status, response, responseHeaders)
1998
+ );
1999
+ return;
2000
+ }
2001
+ switch (responseType) {
2002
+ case "text":
2003
+ deferred.resolve(response.text());
2004
+ break;
2005
+ case "json":
2006
+ deferred.resolve(response.json());
2007
+ break;
2008
+ default:
2009
+ deferred.resolve(new Uint8Array(await response.arrayBuffer()).buffer);
2010
+ break;
2011
+ }
2012
+ }).catch(() => {
2013
+ deferred.reject(new RequestErrorEvent_default());
2014
+ });
2015
+ }
2016
+ var noXMLHttpRequest = typeof XMLHttpRequest === "undefined";
2017
+ Resource._Implementations.loadWithXhr = function(url, responseType, method, data, headers, deferred, overrideMimeType) {
2018
+ const dataUriRegexResult = dataUriRegex2.exec(url);
2019
+ if (dataUriRegexResult !== null) {
2020
+ deferred.resolve(decodeDataUri(dataUriRegexResult, responseType));
2021
+ return;
2022
+ }
2023
+ if (noXMLHttpRequest) {
2024
+ loadWithHttpRequest(
2025
+ url,
2026
+ responseType,
2027
+ method,
2028
+ data,
2029
+ headers,
2030
+ deferred,
2031
+ overrideMimeType
2032
+ );
2033
+ return;
2034
+ }
2035
+ const xhr = new XMLHttpRequest();
2036
+ if (TrustedServers_default.contains(url)) {
2037
+ xhr.withCredentials = true;
2038
+ }
2039
+ xhr.open(method, url, true);
2040
+ if (defined_default(overrideMimeType) && defined_default(xhr.overrideMimeType)) {
2041
+ xhr.overrideMimeType(overrideMimeType);
2042
+ }
2043
+ if (defined_default(headers)) {
2044
+ for (const key in headers) {
2045
+ if (headers.hasOwnProperty(key)) {
2046
+ xhr.setRequestHeader(key, headers[key]);
2047
+ }
2048
+ }
2049
+ }
2050
+ if (defined_default(responseType)) {
2051
+ xhr.responseType = responseType;
2052
+ }
2053
+ let localFile = false;
2054
+ if (typeof url === "string") {
2055
+ localFile = url.indexOf("file://") === 0 || typeof window !== "undefined" && window.location.origin === "file://";
2056
+ }
2057
+ xhr.onload = function() {
2058
+ if ((xhr.status < 200 || xhr.status >= 300) && !(localFile && xhr.status === 0)) {
2059
+ deferred.reject(
2060
+ new RequestErrorEvent_default(
2061
+ xhr.status,
2062
+ xhr.response,
2063
+ xhr.getAllResponseHeaders()
2064
+ )
2065
+ );
2066
+ return;
2067
+ }
2068
+ const response = xhr.response;
2069
+ const browserResponseType = xhr.responseType;
2070
+ if (method === "HEAD" || method === "OPTIONS") {
2071
+ const responseHeaderString = xhr.getAllResponseHeaders();
2072
+ const splitHeaders = responseHeaderString.trim().split(/[\r\n]+/);
2073
+ const responseHeaders = {};
2074
+ splitHeaders.forEach(function(line) {
2075
+ const parts = line.split(": ");
2076
+ const header = parts.shift();
2077
+ responseHeaders[header] = parts.join(": ");
2078
+ });
2079
+ deferred.resolve(responseHeaders);
2080
+ return;
2081
+ }
2082
+ if (xhr.status === 204) {
2083
+ deferred.resolve(void 0);
2084
+ } else if (defined_default(response) && (!defined_default(responseType) || browserResponseType === responseType)) {
2085
+ deferred.resolve(response);
2086
+ } else if (responseType === "json" && typeof response === "string") {
2087
+ try {
2088
+ deferred.resolve(JSON.parse(response));
2089
+ } catch (e) {
2090
+ deferred.reject(e);
2091
+ }
2092
+ } else if ((browserResponseType === "" || browserResponseType === "document") && defined_default(xhr.responseXML) && xhr.responseXML.hasChildNodes()) {
2093
+ deferred.resolve(xhr.responseXML);
2094
+ } else if ((browserResponseType === "" || browserResponseType === "text") && defined_default(xhr.responseText)) {
2095
+ deferred.resolve(xhr.responseText);
2096
+ } else {
2097
+ deferred.reject(
2098
+ new RuntimeError_default("Invalid XMLHttpRequest response type.")
2099
+ );
2100
+ }
2101
+ };
2102
+ xhr.onerror = function(e) {
2103
+ deferred.reject(new RequestErrorEvent_default());
2104
+ };
2105
+ xhr.send(data);
2106
+ return xhr;
2107
+ };
2108
+ Resource._Implementations.loadAndExecuteScript = function(url, functionName, deferred) {
2109
+ return loadAndExecuteScript_default(url, functionName).catch(function(e) {
2110
+ deferred.reject(e);
2111
+ });
2112
+ };
2113
+ Resource._DefaultImplementations = {};
2114
+ Resource._DefaultImplementations.createImage = Resource._Implementations.createImage;
2115
+ Resource._DefaultImplementations.loadWithXhr = Resource._Implementations.loadWithXhr;
2116
+ Resource._DefaultImplementations.loadWithHttpRequest = loadWithHttpRequest;
2117
+ Resource._DefaultImplementations.loadAndExecuteScript = Resource._Implementations.loadAndExecuteScript;
2118
+ Resource.DEFAULT = Object.freeze(
2119
+ new Resource({
2120
+ url: typeof document === "undefined" ? "" : document.location.href.split("?")[0]
2121
+ })
2122
+ );
2123
+ var Resource_default = Resource;
2124
+
2125
+ export {
2126
+ combine_default,
2127
+ getAbsoluteUri_default,
2128
+ isCrossOriginUrl_default,
2129
+ Event_default,
2130
+ Resource_default
2131
+ };