@loaders.gl/tile-converter 3.2.0-alpha.1 → 3.2.0-alpha.4

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 (203) hide show
  1. package/dist/3d-tiles-attributes-worker.d.ts +28 -0
  2. package/dist/3d-tiles-attributes-worker.d.ts.map +1 -0
  3. package/dist/3d-tiles-attributes-worker.js +4 -0
  4. package/dist/3d-tiles-attributes-worker.js.map +7 -0
  5. package/dist/3d-tiles-converter/3d-tiles-converter.d.ts +5 -1
  6. package/dist/3d-tiles-converter/3d-tiles-converter.d.ts.map +1 -1
  7. package/dist/3d-tiles-converter/3d-tiles-converter.js +34 -3
  8. package/dist/3d-tiles-converter/helpers/b3dm-converter.d.ts +5 -4
  9. package/dist/3d-tiles-converter/helpers/b3dm-converter.d.ts.map +1 -1
  10. package/dist/3d-tiles-converter/helpers/b3dm-converter.js +10 -10
  11. package/dist/constants.d.ts +2 -0
  12. package/dist/constants.d.ts.map +1 -0
  13. package/dist/constants.js +4 -0
  14. package/dist/converter-cli.d.ts +2 -0
  15. package/dist/converter-cli.d.ts.map +1 -0
  16. package/dist/converter-cli.js +232 -0
  17. package/dist/converter.min.js +68 -68
  18. package/dist/deps-installer/deps-installer.d.ts +11 -1
  19. package/dist/deps-installer/deps-installer.d.ts.map +1 -1
  20. package/dist/deps-installer/deps-installer.js +10 -0
  21. package/dist/dist.min.js +910 -790
  22. package/dist/es5/3d-tiles-attributes-worker.js +29 -0
  23. package/dist/es5/3d-tiles-attributes-worker.js.map +1 -0
  24. package/dist/es5/3d-tiles-converter/3d-tiles-converter.js +116 -46
  25. package/dist/es5/3d-tiles-converter/3d-tiles-converter.js.map +1 -1
  26. package/dist/es5/3d-tiles-converter/helpers/b3dm-converter.js +21 -23
  27. package/dist/es5/3d-tiles-converter/helpers/b3dm-converter.js.map +1 -1
  28. package/dist/es5/constants.js +9 -0
  29. package/dist/es5/constants.js.map +1 -0
  30. package/dist/es5/converter-cli.js +306 -0
  31. package/dist/es5/converter-cli.js.map +1 -0
  32. package/dist/es5/deps-installer/deps-installer.js.map +1 -1
  33. package/dist/es5/i3s-attributes-worker.js +29 -0
  34. package/dist/es5/i3s-attributes-worker.js.map +1 -0
  35. package/dist/es5/i3s-converter/helpers/coordinate-converter.js +19 -11
  36. package/dist/es5/i3s-converter/helpers/coordinate-converter.js.map +1 -1
  37. package/dist/es5/i3s-converter/helpers/geometry-attributes.js +2 -2
  38. package/dist/es5/i3s-converter/helpers/geometry-attributes.js.map +1 -1
  39. package/dist/es5/i3s-converter/helpers/geometry-converter.js +271 -182
  40. package/dist/es5/i3s-converter/helpers/geometry-converter.js.map +1 -1
  41. package/dist/es5/i3s-converter/helpers/gltf-attributes.js +71 -0
  42. package/dist/es5/i3s-converter/helpers/gltf-attributes.js.map +1 -0
  43. package/dist/es5/i3s-converter/helpers/node-pages.js +47 -99
  44. package/dist/es5/i3s-converter/helpers/node-pages.js.map +1 -1
  45. package/dist/es5/i3s-converter/i3s-converter.js +293 -223
  46. package/dist/es5/i3s-converter/i3s-converter.js.map +1 -1
  47. package/dist/es5/i3s-converter/json-templates/layers.js +29 -0
  48. package/dist/es5/i3s-converter/json-templates/layers.js.map +1 -1
  49. package/dist/es5/index.js +0 -16
  50. package/dist/es5/index.js.map +1 -1
  51. package/dist/es5/lib/utils/compress-util.js +14 -17
  52. package/dist/es5/lib/utils/compress-util.js.map +1 -1
  53. package/dist/es5/lib/utils/file-utils.js +39 -14
  54. package/dist/es5/lib/utils/file-utils.js.map +1 -1
  55. package/dist/es5/lib/utils/lod-conversion-utils.js.map +1 -1
  56. package/dist/es5/lib/utils/queue.js +61 -0
  57. package/dist/es5/lib/utils/queue.js.map +1 -0
  58. package/dist/es5/lib/utils/statistic-utills.js.map +1 -1
  59. package/dist/es5/lib/utils/write-queue.js +225 -0
  60. package/dist/es5/lib/utils/write-queue.js.map +1 -0
  61. package/dist/es5/pgm-loader.js +1 -1
  62. package/dist/es5/workers/3d-tiles-attributes-worker.js +37 -0
  63. package/dist/es5/workers/3d-tiles-attributes-worker.js.map +1 -0
  64. package/dist/es5/workers/i3s-attributes-worker.js +40 -0
  65. package/dist/es5/workers/i3s-attributes-worker.js.map +1 -0
  66. package/dist/esm/3d-tiles-attributes-worker.js +16 -0
  67. package/dist/esm/3d-tiles-attributes-worker.js.map +1 -0
  68. package/dist/esm/3d-tiles-converter/3d-tiles-converter.js +36 -4
  69. package/dist/esm/3d-tiles-converter/3d-tiles-converter.js.map +1 -1
  70. package/dist/esm/3d-tiles-converter/helpers/b3dm-converter.js +16 -18
  71. package/dist/esm/3d-tiles-converter/helpers/b3dm-converter.js.map +1 -1
  72. package/dist/esm/constants.js +2 -0
  73. package/dist/esm/constants.js.map +1 -0
  74. package/dist/esm/converter-cli.js +230 -0
  75. package/dist/esm/converter-cli.js.map +1 -0
  76. package/dist/esm/deps-installer/deps-installer.js.map +1 -1
  77. package/dist/esm/i3s-attributes-worker.js +16 -0
  78. package/dist/esm/i3s-attributes-worker.js.map +1 -0
  79. package/dist/esm/i3s-converter/helpers/coordinate-converter.js +19 -11
  80. package/dist/esm/i3s-converter/helpers/coordinate-converter.js.map +1 -1
  81. package/dist/esm/i3s-converter/helpers/geometry-attributes.js +2 -2
  82. package/dist/esm/i3s-converter/helpers/geometry-attributes.js.map +1 -1
  83. package/dist/esm/i3s-converter/helpers/geometry-converter.js +121 -62
  84. package/dist/esm/i3s-converter/helpers/geometry-converter.js.map +1 -1
  85. package/dist/esm/i3s-converter/helpers/gltf-attributes.js +54 -0
  86. package/dist/esm/i3s-converter/helpers/gltf-attributes.js.map +1 -0
  87. package/dist/esm/i3s-converter/helpers/node-pages.js +12 -4
  88. package/dist/esm/i3s-converter/helpers/node-pages.js.map +1 -1
  89. package/dist/esm/i3s-converter/i3s-converter.js +157 -52
  90. package/dist/esm/i3s-converter/i3s-converter.js.map +1 -1
  91. package/dist/esm/i3s-converter/json-templates/layers.js +25 -0
  92. package/dist/esm/i3s-converter/json-templates/layers.js.map +1 -1
  93. package/dist/esm/index.js +0 -2
  94. package/dist/esm/index.js.map +1 -1
  95. package/dist/esm/lib/utils/compress-util.js +6 -8
  96. package/dist/esm/lib/utils/compress-util.js.map +1 -1
  97. package/dist/esm/lib/utils/file-utils.js +11 -1
  98. package/dist/esm/lib/utils/file-utils.js.map +1 -1
  99. package/dist/esm/lib/utils/lod-conversion-utils.js.map +1 -1
  100. package/dist/esm/lib/utils/queue.js +19 -0
  101. package/dist/esm/lib/utils/queue.js.map +1 -0
  102. package/dist/esm/lib/utils/statistic-utills.js.map +1 -1
  103. package/dist/esm/lib/utils/write-queue.js +88 -0
  104. package/dist/esm/lib/utils/write-queue.js.map +1 -0
  105. package/dist/esm/pgm-loader.js +1 -1
  106. package/dist/esm/workers/3d-tiles-attributes-worker.js +5 -0
  107. package/dist/esm/workers/3d-tiles-attributes-worker.js.map +1 -0
  108. package/dist/esm/workers/i3s-attributes-worker.js +4 -0
  109. package/dist/esm/workers/i3s-attributes-worker.js.map +1 -0
  110. package/dist/i3s-attributes-worker.d.ts +33 -0
  111. package/dist/i3s-attributes-worker.d.ts.map +1 -0
  112. package/dist/i3s-attributes-worker.js +10 -0
  113. package/dist/i3s-attributes-worker.js.map +7 -0
  114. package/dist/i3s-converter/helpers/coordinate-converter.d.ts +7 -7
  115. package/dist/i3s-converter/helpers/coordinate-converter.d.ts.map +1 -1
  116. package/dist/i3s-converter/helpers/coordinate-converter.js +25 -21
  117. package/dist/i3s-converter/helpers/geometry-attributes.d.ts +2 -2
  118. package/dist/i3s-converter/helpers/geometry-attributes.d.ts.map +1 -1
  119. package/dist/i3s-converter/helpers/geometry-attributes.js +2 -1
  120. package/dist/i3s-converter/helpers/geometry-converter.d.ts +28 -11
  121. package/dist/i3s-converter/helpers/geometry-converter.d.ts.map +1 -1
  122. package/dist/i3s-converter/helpers/geometry-converter.js +223 -113
  123. package/dist/i3s-converter/helpers/gltf-attributes.d.ts +9 -0
  124. package/dist/i3s-converter/helpers/gltf-attributes.d.ts.map +1 -0
  125. package/dist/i3s-converter/helpers/gltf-attributes.js +56 -0
  126. package/dist/i3s-converter/helpers/node-pages.d.ts +6 -5
  127. package/dist/i3s-converter/helpers/node-pages.d.ts.map +1 -1
  128. package/dist/i3s-converter/helpers/node-pages.js +13 -8
  129. package/dist/i3s-converter/i3s-converter.d.ts +7 -5
  130. package/dist/i3s-converter/i3s-converter.d.ts.map +1 -1
  131. package/dist/i3s-converter/i3s-converter.js +126 -40
  132. package/dist/i3s-converter/json-templates/layers.d.ts +4 -0
  133. package/dist/i3s-converter/json-templates/layers.d.ts.map +1 -1
  134. package/dist/i3s-converter/json-templates/layers.js +24 -0
  135. package/dist/i3s-converter/types.d.ts +83 -8
  136. package/dist/i3s-converter/types.d.ts.map +1 -1
  137. package/dist/index.d.ts +0 -2
  138. package/dist/index.d.ts.map +1 -1
  139. package/dist/index.js +1 -5
  140. package/dist/lib/utils/compress-util.d.ts +44 -5
  141. package/dist/lib/utils/compress-util.d.ts.map +1 -1
  142. package/dist/lib/utils/compress-util.js +73 -6
  143. package/dist/lib/utils/file-utils.d.ts +34 -5
  144. package/dist/lib/utils/file-utils.d.ts.map +1 -1
  145. package/dist/lib/utils/file-utils.js +40 -1
  146. package/dist/lib/utils/lod-conversion-utils.d.ts +25 -4
  147. package/dist/lib/utils/lod-conversion-utils.d.ts.map +1 -1
  148. package/dist/lib/utils/lod-conversion-utils.js +21 -2
  149. package/dist/lib/utils/queue.d.ts +7 -0
  150. package/dist/lib/utils/queue.d.ts.map +1 -0
  151. package/dist/lib/utils/queue.js +18 -0
  152. package/dist/lib/utils/statistic-utills.d.ts +2 -2
  153. package/dist/lib/utils/statistic-utills.d.ts.map +1 -1
  154. package/dist/lib/utils/write-queue.d.ts +22 -0
  155. package/dist/lib/utils/write-queue.d.ts.map +1 -0
  156. package/dist/lib/utils/write-queue.js +62 -0
  157. package/dist/workers/3d-tiles-attributes-worker.d.ts +2 -0
  158. package/dist/workers/3d-tiles-attributes-worker.d.ts.map +1 -0
  159. package/dist/workers/3d-tiles-attributes-worker.js +9 -0
  160. package/dist/workers/i3s-attributes-worker.d.ts +2 -0
  161. package/dist/workers/i3s-attributes-worker.d.ts.map +1 -0
  162. package/dist/workers/i3s-attributes-worker.js +5 -0
  163. package/package.json +23 -18
  164. package/src/3d-tiles-attributes-worker.ts +43 -0
  165. package/src/3d-tiles-converter/3d-tiles-converter.ts +50 -5
  166. package/src/3d-tiles-converter/helpers/b3dm-converter.ts +15 -13
  167. package/src/constants.ts +2 -0
  168. package/src/converter-cli.ts +310 -0
  169. package/src/deps-installer/{deps-installer.js → deps-installer.ts} +11 -1
  170. package/src/i3s-attributes-worker.ts +46 -0
  171. package/src/i3s-converter/helpers/coordinate-converter.ts +29 -24
  172. package/src/i3s-converter/helpers/geometry-attributes.ts +4 -3
  173. package/src/i3s-converter/helpers/{geometry-converter.js → geometry-converter.ts} +425 -179
  174. package/src/i3s-converter/helpers/gltf-attributes.ts +68 -0
  175. package/src/i3s-converter/helpers/node-pages.ts +25 -17
  176. package/src/i3s-converter/i3s-converter.ts +150 -90
  177. package/src/i3s-converter/json-templates/layers.ts +25 -0
  178. package/src/i3s-converter/types.ts +90 -8
  179. package/src/index.ts +0 -4
  180. package/src/lib/utils/{compress-util.js → compress-util.ts} +105 -18
  181. package/src/lib/utils/file-utils.ts +84 -0
  182. package/src/lib/utils/{lod-conversion-utils.js → lod-conversion-utils.ts} +27 -5
  183. package/src/lib/utils/queue.ts +17 -0
  184. package/src/lib/utils/{statistic-utills.js → statistic-utills.ts} +0 -0
  185. package/src/lib/utils/write-queue.ts +75 -0
  186. package/src/workers/3d-tiles-attributes-worker.ts +6 -0
  187. package/src/workers/i3s-attributes-worker.ts +6 -0
  188. package/dist/es5/deps-installer/deps-installer.d.ts +0 -10
  189. package/dist/es5/i3s-converter/helpers/geometry-converter.d.ts +0 -44
  190. package/dist/es5/lib/utils/compress-util.d.ts +0 -53
  191. package/dist/es5/lib/utils/file-utils.d.ts +0 -43
  192. package/dist/es5/lib/utils/lod-conversion-utils.d.ts +0 -32
  193. package/dist/esm/deps-installer/deps-installer.d.ts +0 -10
  194. package/dist/esm/i3s-converter/helpers/geometry-converter.d.ts +0 -44
  195. package/dist/esm/lib/utils/compress-util.d.ts +0 -53
  196. package/dist/esm/lib/utils/file-utils.d.ts +0 -43
  197. package/dist/esm/lib/utils/lod-conversion-utils.d.ts +0 -32
  198. package/src/deps-installer/deps-installer.d.ts +0 -10
  199. package/src/i3s-converter/helpers/geometry-converter.d.ts +0 -44
  200. package/src/lib/utils/compress-util.d.ts +0 -53
  201. package/src/lib/utils/file-utils.d.ts +0 -43
  202. package/src/lib/utils/file-utils.js +0 -38
  203. package/src/lib/utils/lod-conversion-utils.d.ts +0 -32
package/dist/dist.min.js CHANGED
@@ -556,8 +556,8 @@ var require_globals2 = __commonJS({
556
556
  exports.isBrowser = exports.VERSION = void 0;
557
557
  var _isBrowser = _interopRequireDefault(require_is_browser());
558
558
  var _globals = require_globals();
559
- var VERSION15 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "untranspiled source";
560
- exports.VERSION = VERSION15;
559
+ var VERSION17 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "untranspiled source";
560
+ exports.VERSION = VERSION17;
561
561
  var isBrowser3 = (0, _isBrowser.default)();
562
562
  exports.isBrowser = isBrowser3;
563
563
  }
@@ -1027,7 +1027,7 @@ var require_log = __commonJS({
1027
1027
  enabled: true,
1028
1028
  level: 0
1029
1029
  };
1030
- function noop2() {
1030
+ function noop() {
1031
1031
  }
1032
1032
  var cache = {};
1033
1033
  var ONCE = {
@@ -1168,18 +1168,18 @@ var require_log = __commonJS({
1168
1168
  key: "table",
1169
1169
  value: function table(logLevel, _table, columns) {
1170
1170
  if (_table) {
1171
- return this._getLogFunction(logLevel, _table, console.table || noop2, columns && [columns], {
1171
+ return this._getLogFunction(logLevel, _table, console.table || noop, columns && [columns], {
1172
1172
  tag: getTableHeader(_table)
1173
1173
  });
1174
1174
  }
1175
- return noop2;
1175
+ return noop;
1176
1176
  }
1177
1177
  }, {
1178
1178
  key: "image",
1179
1179
  value: function image(_ref2) {
1180
1180
  var logLevel = _ref2.logLevel, priority = _ref2.priority, _image = _ref2.image, _ref2$message = _ref2.message, message = _ref2$message === void 0 ? "" : _ref2$message, _ref2$scale = _ref2.scale, scale = _ref2$scale === void 0 ? 1 : _ref2$scale;
1181
1181
  if (!this._shouldLog(logLevel || priority)) {
1182
- return noop2;
1182
+ return noop;
1183
1183
  }
1184
1184
  return _globals.isBrowser ? logImageInBrowser({
1185
1185
  image: _image,
@@ -1223,7 +1223,7 @@ var require_log = __commonJS({
1223
1223
  }, {
1224
1224
  key: "timeStamp",
1225
1225
  value: function timeStamp(logLevel, message) {
1226
- return this._getLogFunction(logLevel, message, console.timeStamp || noop2);
1226
+ return this._getLogFunction(logLevel, message, console.timeStamp || noop);
1227
1227
  }
1228
1228
  }, {
1229
1229
  key: "group",
@@ -1251,7 +1251,7 @@ var require_log = __commonJS({
1251
1251
  }, {
1252
1252
  key: "groupEnd",
1253
1253
  value: function groupEnd(logLevel) {
1254
- return this._getLogFunction(logLevel, "", console.groupEnd || noop2);
1254
+ return this._getLogFunction(logLevel, "", console.groupEnd || noop);
1255
1255
  }
1256
1256
  }, {
1257
1257
  key: "withGroup",
@@ -1298,13 +1298,13 @@ var require_log = __commonJS({
1298
1298
  if (!cache[tag]) {
1299
1299
  cache[tag] = (0, _hiResTimestamp.default)();
1300
1300
  } else {
1301
- return noop2;
1301
+ return noop;
1302
1302
  }
1303
1303
  }
1304
1304
  message = decorateMessage(this.id, opts.message, opts);
1305
1305
  return (_method = method).bind.apply(_method, [console, message].concat((0, _toConsumableArray2.default)(opts.args)));
1306
1306
  }
1307
- return noop2;
1307
+ return noop;
1308
1308
  }
1309
1309
  }]);
1310
1310
  return Log4;
@@ -1381,7 +1381,7 @@ var require_log = __commonJS({
1381
1381
  });
1382
1382
  };
1383
1383
  }
1384
- return noop2;
1384
+ return noop;
1385
1385
  }
1386
1386
  function logImageInBrowser(_ref4) {
1387
1387
  var image = _ref4.image, _ref4$message = _ref4.message, message = _ref4$message === void 0 ? "" : _ref4$message, _ref4$scale = _ref4.scale, scale = _ref4$scale === void 0 ? 1 : _ref4$scale;
@@ -1393,13 +1393,13 @@ var require_log = __commonJS({
1393
1393
  (_console = console).log.apply(_console, (0, _toConsumableArray2.default)(args));
1394
1394
  };
1395
1395
  img.src = image;
1396
- return noop2;
1396
+ return noop;
1397
1397
  }
1398
1398
  var element = image.nodeName || "";
1399
1399
  if (element.toLowerCase() === "img") {
1400
1400
  var _console2;
1401
1401
  (_console2 = console).log.apply(_console2, (0, _toConsumableArray2.default)((0, _formatters.formatImage)(image, message, scale)));
1402
- return noop2;
1402
+ return noop;
1403
1403
  }
1404
1404
  if (element.toLowerCase() === "canvas") {
1405
1405
  var _img = new Image();
@@ -1408,9 +1408,9 @@ var require_log = __commonJS({
1408
1408
  return (_console3 = console).log.apply(_console3, (0, _toConsumableArray2.default)((0, _formatters.formatImage)(_img, message, scale)));
1409
1409
  };
1410
1410
  _img.src = image.toDataURL();
1411
- return noop2;
1411
+ return noop;
1412
1412
  }
1413
- return noop2;
1413
+ return noop;
1414
1414
  }
1415
1415
  }
1416
1416
  });
@@ -2097,8 +2097,8 @@ var require_globals4 = __commonJS({
2097
2097
  });
2098
2098
  var _isBrowser = _interopRequireDefault(require_is_browser2());
2099
2099
  var _globals = require_globals3();
2100
- var VERSION15 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "untranspiled source";
2101
- exports.VERSION = VERSION15;
2100
+ var VERSION17 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "untranspiled source";
2101
+ exports.VERSION = VERSION17;
2102
2102
  var isBrowser3 = (0, _isBrowser.default)();
2103
2103
  exports.isBrowser = isBrowser3;
2104
2104
  }
@@ -2681,7 +2681,7 @@ var require_log2 = __commonJS({
2681
2681
  enabled: true,
2682
2682
  level: 0
2683
2683
  };
2684
- function noop2() {
2684
+ function noop() {
2685
2685
  }
2686
2686
  var cache = {};
2687
2687
  var ONCE = {
@@ -2839,18 +2839,18 @@ var require_log2 = __commonJS({
2839
2839
  key: "table",
2840
2840
  value: function table(logLevel, _table, columns) {
2841
2841
  if (_table) {
2842
- return this._getLogFunction(logLevel, _table, console.table || noop2, columns && [columns], {
2842
+ return this._getLogFunction(logLevel, _table, console.table || noop, columns && [columns], {
2843
2843
  tag: getTableHeader(_table)
2844
2844
  });
2845
2845
  }
2846
- return noop2;
2846
+ return noop;
2847
2847
  }
2848
2848
  }, {
2849
2849
  key: "image",
2850
2850
  value: function image(_ref2) {
2851
2851
  var logLevel = _ref2.logLevel, priority = _ref2.priority, _image = _ref2.image, _ref2$message = _ref2.message, message = _ref2$message === void 0 ? "" : _ref2$message, _ref2$scale = _ref2.scale, scale = _ref2$scale === void 0 ? 1 : _ref2$scale;
2852
2852
  if (!this._shouldLog(logLevel || priority)) {
2853
- return noop2;
2853
+ return noop;
2854
2854
  }
2855
2855
  return _env.isBrowser ? logImageInBrowser({
2856
2856
  image: _image,
@@ -2875,7 +2875,7 @@ var require_log2 = __commonJS({
2875
2875
  }, {
2876
2876
  key: "timeStamp",
2877
2877
  value: function timeStamp(logLevel, message) {
2878
- return this._getLogFunction(logLevel, message, console.timeStamp || noop2);
2878
+ return this._getLogFunction(logLevel, message, console.timeStamp || noop);
2879
2879
  }
2880
2880
  }, {
2881
2881
  key: "group",
@@ -2903,7 +2903,7 @@ var require_log2 = __commonJS({
2903
2903
  }, {
2904
2904
  key: "groupEnd",
2905
2905
  value: function groupEnd(logLevel) {
2906
- return this._getLogFunction(logLevel, "", console.groupEnd || noop2);
2906
+ return this._getLogFunction(logLevel, "", console.groupEnd || noop);
2907
2907
  }
2908
2908
  }, {
2909
2909
  key: "withGroup",
@@ -2948,13 +2948,13 @@ var require_log2 = __commonJS({
2948
2948
  if (!cache[tag]) {
2949
2949
  cache[tag] = (0, _hiResTimestamp.getHiResTimestamp)();
2950
2950
  } else {
2951
- return noop2;
2951
+ return noop;
2952
2952
  }
2953
2953
  }
2954
2954
  message = decorateMessage(this.id, opts.message, opts);
2955
2955
  return (_method = method).bind.apply(_method, [console, message].concat((0, _toConsumableArray2.default)(opts.args)));
2956
2956
  }
2957
- return noop2;
2957
+ return noop;
2958
2958
  }
2959
2959
  }]);
2960
2960
  return Log4;
@@ -3032,7 +3032,7 @@ var require_log2 = __commonJS({
3032
3032
  });
3033
3033
  };
3034
3034
  }
3035
- return noop2;
3035
+ return noop;
3036
3036
  }
3037
3037
  function logImageInBrowser(_ref4) {
3038
3038
  var image = _ref4.image, _ref4$message = _ref4.message, message = _ref4$message === void 0 ? "" : _ref4$message, _ref4$scale = _ref4.scale, scale = _ref4$scale === void 0 ? 1 : _ref4$scale;
@@ -3044,13 +3044,13 @@ var require_log2 = __commonJS({
3044
3044
  (_console = console).log.apply(_console, (0, _toConsumableArray2.default)(args));
3045
3045
  };
3046
3046
  img.src = image;
3047
- return noop2;
3047
+ return noop;
3048
3048
  }
3049
3049
  var element = image.nodeName || "";
3050
3050
  if (element.toLowerCase() === "img") {
3051
3051
  var _console2;
3052
3052
  (_console2 = console).log.apply(_console2, (0, _toConsumableArray2.default)((0, _formatters.formatImage)(image, message, scale)));
3053
- return noop2;
3053
+ return noop;
3054
3054
  }
3055
3055
  if (element.toLowerCase() === "canvas") {
3056
3056
  var _img = new Image();
@@ -3059,9 +3059,9 @@ var require_log2 = __commonJS({
3059
3059
  return (_console3 = console).log.apply(_console3, (0, _toConsumableArray2.default)((0, _formatters.formatImage)(_img, message, scale)));
3060
3060
  };
3061
3061
  _img.src = image.toDataURL();
3062
- return noop2;
3062
+ return noop;
3063
3063
  }
3064
- return noop2;
3064
+ return noop;
3065
3065
  }
3066
3066
  function getTableHeader(table) {
3067
3067
  for (var _key2 in table) {
@@ -10785,12 +10785,12 @@ var require_type_utils = __commonJS({
10785
10785
  exports.isWGS84 = isWGS84;
10786
10786
  var _core = require_es56();
10787
10787
  var _constants = require_constants();
10788
- var noop2 = function noop3(x) {
10788
+ var noop = function noop2(x) {
10789
10789
  return x;
10790
10790
  };
10791
10791
  var scratchVector7 = new _core.Vector3();
10792
10792
  function fromCartographic(cartographic, result) {
10793
- var map = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : noop2;
10793
+ var map = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : noop;
10794
10794
  if ((0, _core.isArray)(cartographic)) {
10795
10795
  result[0] = map(cartographic[0]);
10796
10796
  result[1] = map(cartographic[1]);
@@ -10808,14 +10808,14 @@ var require_type_utils = __commonJS({
10808
10808
  }
10809
10809
  function fromCartographicToRadians(cartographic) {
10810
10810
  var vector = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : scratchVector7;
10811
- return fromCartographic(cartographic, vector, _core.config._cartographicRadians ? noop2 : _core.toRadians);
10811
+ return fromCartographic(cartographic, vector, _core.config._cartographicRadians ? noop : _core.toRadians);
10812
10812
  }
10813
10813
  function fromCartographicToDegrees(cartographic) {
10814
10814
  var vector = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : scratchVector7;
10815
- return fromCartographic(cartographic, vector, _core.config._cartographicRadians ? _core.toDegrees : noop2);
10815
+ return fromCartographic(cartographic, vector, _core.config._cartographicRadians ? _core.toDegrees : noop);
10816
10816
  }
10817
10817
  function toCartographic(vector, cartographic) {
10818
- var map = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : noop2;
10818
+ var map = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : noop;
10819
10819
  if ((0, _core.isArray)(cartographic)) {
10820
10820
  cartographic[0] = map(vector[0]);
10821
10821
  cartographic[1] = map(vector[1]);
@@ -10832,10 +10832,10 @@ var require_type_utils = __commonJS({
10832
10832
  return cartographic;
10833
10833
  }
10834
10834
  function toCartographicFromRadians(vector, cartographic) {
10835
- return toCartographic(vector, cartographic, _core.config._cartographicRadians ? noop2 : _core.toDegrees);
10835
+ return toCartographic(vector, cartographic, _core.config._cartographicRadians ? noop : _core.toDegrees);
10836
10836
  }
10837
10837
  function toCartographicFromDegrees(vector, cartographic) {
10838
- return toCartographic(vector, cartographic, _core.config._cartographicRadians ? _core.toRadians : noop2);
10838
+ return toCartographic(vector, cartographic, _core.config._cartographicRadians ? _core.toRadians : noop);
10839
10839
  }
10840
10840
  function isWGS84(vector) {
10841
10841
  if (!vector) {
@@ -11146,12 +11146,12 @@ var require_ellipsoid = __commonJS({
11146
11146
  var scratchHeight = new _core.Vector3();
11147
11147
  var scratchCartesian = new _core.Vector3();
11148
11148
  var wgs84;
11149
- var Ellipsoid14 = function() {
11150
- function Ellipsoid15() {
11149
+ var Ellipsoid15 = function() {
11150
+ function Ellipsoid16() {
11151
11151
  var x = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : 0;
11152
11152
  var y = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0;
11153
11153
  var z = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : 0;
11154
- (0, _classCallCheck2.default)(this, Ellipsoid15);
11154
+ (0, _classCallCheck2.default)(this, Ellipsoid16);
11155
11155
  (0, _core.assert)(x >= 0);
11156
11156
  (0, _core.assert)(y >= 0);
11157
11157
  (0, _core.assert)(z >= 0);
@@ -11168,7 +11168,7 @@ var require_ellipsoid = __commonJS({
11168
11168
  }
11169
11169
  Object.freeze(this);
11170
11170
  }
11171
- (0, _createClass2.default)(Ellipsoid15, [{
11171
+ (0, _createClass2.default)(Ellipsoid16, [{
11172
11172
  key: "equals",
11173
11173
  value: function equals(right) {
11174
11174
  return this === right || Boolean(right && this.radii.equals(right.radii));
@@ -11291,13 +11291,13 @@ var require_ellipsoid = __commonJS({
11291
11291
  }], [{
11292
11292
  key: "WGS84",
11293
11293
  get: function get() {
11294
- wgs84 = wgs84 || new Ellipsoid15(_constants.WGS84_RADIUS_X, _constants.WGS84_RADIUS_Y, _constants.WGS84_RADIUS_Z);
11294
+ wgs84 = wgs84 || new Ellipsoid16(_constants.WGS84_RADIUS_X, _constants.WGS84_RADIUS_Y, _constants.WGS84_RADIUS_Z);
11295
11295
  return wgs84;
11296
11296
  }
11297
11297
  }]);
11298
- return Ellipsoid15;
11298
+ return Ellipsoid16;
11299
11299
  }();
11300
- exports.default = Ellipsoid14;
11300
+ exports.default = Ellipsoid15;
11301
11301
  }
11302
11302
  });
11303
11303
 
@@ -11492,16 +11492,16 @@ var require_bounding_sphere = __commonJS({
11492
11492
  }
11493
11493
  var scratchVector7 = new _core.Vector3();
11494
11494
  var scratchVector23 = new _core.Vector3();
11495
- var BoundingSphere4 = function() {
11496
- function BoundingSphere5() {
11495
+ var BoundingSphere5 = function() {
11496
+ function BoundingSphere6() {
11497
11497
  var center = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : [0, 0, 0];
11498
11498
  var radius = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0;
11499
- (0, _classCallCheck2.default)(this, BoundingSphere5);
11499
+ (0, _classCallCheck2.default)(this, BoundingSphere6);
11500
11500
  this.radius = -0;
11501
11501
  this.center = new _core.Vector3();
11502
11502
  this.fromCenterRadius(center, radius);
11503
11503
  }
11504
- (0, _createClass2.default)(BoundingSphere5, [{
11504
+ (0, _createClass2.default)(BoundingSphere6, [{
11505
11505
  key: "fromCenterRadius",
11506
11506
  value: function fromCenterRadius(center, radius) {
11507
11507
  this.center.from(center);
@@ -11524,7 +11524,7 @@ var require_bounding_sphere = __commonJS({
11524
11524
  }, {
11525
11525
  key: "clone",
11526
11526
  value: function clone2() {
11527
- return new BoundingSphere5(this.center, this.radius);
11527
+ return new BoundingSphere6(this.center, this.radius);
11528
11528
  }
11529
11529
  }, {
11530
11530
  key: "union",
@@ -11593,9 +11593,9 @@ var require_bounding_sphere = __commonJS({
11593
11593
  return _constants.INTERSECTION.INSIDE;
11594
11594
  }
11595
11595
  }]);
11596
- return BoundingSphere5;
11596
+ return BoundingSphere6;
11597
11597
  }();
11598
- exports.default = BoundingSphere4;
11598
+ exports.default = BoundingSphere5;
11599
11599
  }
11600
11600
  });
11601
11601
 
@@ -17410,7 +17410,7 @@ var require_graceful_fs = __commonJS({
17410
17410
  gracefulQueue = "___graceful-fs.queue";
17411
17411
  previousSymbol = "___graceful-fs.previous";
17412
17412
  }
17413
- function noop2() {
17413
+ function noop() {
17414
17414
  }
17415
17415
  function publishQueue(context, queue2) {
17416
17416
  Object.defineProperty(context, gracefulQueue, {
@@ -17419,7 +17419,7 @@ var require_graceful_fs = __commonJS({
17419
17419
  }
17420
17420
  });
17421
17421
  }
17422
- var debug = noop2;
17422
+ var debug = noop;
17423
17423
  if (util2.debuglog)
17424
17424
  debug = util2.debuglog("gfs4");
17425
17425
  else if (/\bgfs4\b/i.test(process.env.NODE_DEBUG || ""))
@@ -17998,7 +17998,7 @@ var require_BufferList = __commonJS({
17998
17998
  this.head = this.tail = null;
17999
17999
  this.length = 0;
18000
18000
  };
18001
- BufferList.prototype.join = function join10(s) {
18001
+ BufferList.prototype.join = function join9(s) {
18002
18002
  if (this.length === 0)
18003
18003
  return "";
18004
18004
  var p = this.head;
@@ -20885,7 +20885,7 @@ var require_lodash4 = __commonJS({
20885
20885
  }
20886
20886
  return result;
20887
20887
  }
20888
- var createSet = !(Set2 && 1 / setToArray(new Set2([, -0]))[1] == INFINITY) ? noop2 : function(values) {
20888
+ var createSet = !(Set2 && 1 / setToArray(new Set2([, -0]))[1] == INFINITY) ? noop : function(values) {
20889
20889
  return new Set2(values);
20890
20890
  };
20891
20891
  function getMapData(map, key) {
@@ -20949,7 +20949,7 @@ var require_lodash4 = __commonJS({
20949
20949
  function isObjectLike(value) {
20950
20950
  return !!value && typeof value == "object";
20951
20951
  }
20952
- function noop2() {
20952
+ function noop() {
20953
20953
  }
20954
20954
  module2.exports = union;
20955
20955
  }
@@ -22945,7 +22945,7 @@ var require_buffer_list = __commonJS({
22945
22945
  }
22946
22946
  }, {
22947
22947
  key: "join",
22948
- value: function join10(s) {
22948
+ value: function join9(s) {
22949
22949
  if (this.length === 0)
22950
22950
  return "";
22951
22951
  var p = this.head;
@@ -24196,7 +24196,7 @@ var require_end_of_stream = __commonJS({
24196
24196
  callback.apply(this, args);
24197
24197
  };
24198
24198
  }
24199
- function noop2() {
24199
+ function noop() {
24200
24200
  }
24201
24201
  function isRequest(stream) {
24202
24202
  return stream.setHeader && typeof stream.abort === "function";
@@ -24206,7 +24206,7 @@ var require_end_of_stream = __commonJS({
24206
24206
  return eos(stream, null, opts);
24207
24207
  if (!opts)
24208
24208
  opts = {};
24209
- callback = once(callback || noop2);
24209
+ callback = once(callback || noop);
24210
24210
  var readable = opts.readable || opts.readable !== false && stream.readable;
24211
24211
  var writable = opts.writable || opts.writable !== false && stream.writable;
24212
24212
  var onlegacyfinish = function onlegacyfinish2() {
@@ -25491,7 +25491,7 @@ var require_pipeline = __commonJS({
25491
25491
  var _require$codes = require_errors().codes;
25492
25492
  var ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS;
25493
25493
  var ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;
25494
- function noop2(err) {
25494
+ function noop(err) {
25495
25495
  if (err)
25496
25496
  throw err;
25497
25497
  }
@@ -25537,9 +25537,9 @@ var require_pipeline = __commonJS({
25537
25537
  }
25538
25538
  function popCallback(streams) {
25539
25539
  if (!streams.length)
25540
- return noop2;
25540
+ return noop;
25541
25541
  if (typeof streams[streams.length - 1] !== "function")
25542
- return noop2;
25542
+ return noop;
25543
25543
  return streams.pop();
25544
25544
  }
25545
25545
  function pipeline() {
@@ -26657,7 +26657,7 @@ var require_buffer_list2 = __commonJS({
26657
26657
  }
26658
26658
  }, {
26659
26659
  key: "join",
26660
- value: function join10(s) {
26660
+ value: function join9(s) {
26661
26661
  if (this.length === 0)
26662
26662
  return "";
26663
26663
  var p = this.head;
@@ -27850,7 +27850,7 @@ var require_end_of_stream2 = __commonJS({
27850
27850
  callback.apply(this, args);
27851
27851
  };
27852
27852
  }
27853
- function noop2() {
27853
+ function noop() {
27854
27854
  }
27855
27855
  function isRequest(stream) {
27856
27856
  return stream.setHeader && typeof stream.abort === "function";
@@ -27860,7 +27860,7 @@ var require_end_of_stream2 = __commonJS({
27860
27860
  return eos(stream, null, opts);
27861
27861
  if (!opts)
27862
27862
  opts = {};
27863
- callback = once(callback || noop2);
27863
+ callback = once(callback || noop);
27864
27864
  var readable = opts.readable || opts.readable !== false && stream.readable;
27865
27865
  var writable = opts.writable || opts.writable !== false && stream.writable;
27866
27866
  var onlegacyfinish = function onlegacyfinish2() {
@@ -29145,7 +29145,7 @@ var require_pipeline2 = __commonJS({
29145
29145
  var _require$codes = require_errors2().codes;
29146
29146
  var ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS;
29147
29147
  var ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;
29148
- function noop2(err) {
29148
+ function noop(err) {
29149
29149
  if (err)
29150
29150
  throw err;
29151
29151
  }
@@ -29191,9 +29191,9 @@ var require_pipeline2 = __commonJS({
29191
29191
  }
29192
29192
  function popCallback(streams) {
29193
29193
  if (!streams.length)
29194
- return noop2;
29194
+ return noop;
29195
29195
  if (typeof streams[streams.length - 1] !== "function")
29196
- return noop2;
29196
+ return noop;
29197
29197
  return streams.pop();
29198
29198
  }
29199
29199
  function pipeline() {
@@ -29799,7 +29799,7 @@ var require_buffer_list3 = __commonJS({
29799
29799
  }
29800
29800
  }, {
29801
29801
  key: "join",
29802
- value: function join10(s) {
29802
+ value: function join9(s) {
29803
29803
  if (this.length === 0)
29804
29804
  return "";
29805
29805
  var p = this.head;
@@ -30992,7 +30992,7 @@ var require_end_of_stream3 = __commonJS({
30992
30992
  callback.apply(this, args);
30993
30993
  };
30994
30994
  }
30995
- function noop2() {
30995
+ function noop() {
30996
30996
  }
30997
30997
  function isRequest(stream) {
30998
30998
  return stream.setHeader && typeof stream.abort === "function";
@@ -31002,7 +31002,7 @@ var require_end_of_stream3 = __commonJS({
31002
31002
  return eos(stream, null, opts);
31003
31003
  if (!opts)
31004
31004
  opts = {};
31005
- callback = once(callback || noop2);
31005
+ callback = once(callback || noop);
31006
31006
  var readable = opts.readable || opts.readable !== false && stream.readable;
31007
31007
  var writable = opts.writable || opts.writable !== false && stream.writable;
31008
31008
  var onlegacyfinish = function onlegacyfinish2() {
@@ -32287,7 +32287,7 @@ var require_pipeline3 = __commonJS({
32287
32287
  var _require$codes = require_errors3().codes;
32288
32288
  var ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS;
32289
32289
  var ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;
32290
- function noop2(err) {
32290
+ function noop(err) {
32291
32291
  if (err)
32292
32292
  throw err;
32293
32293
  }
@@ -32333,9 +32333,9 @@ var require_pipeline3 = __commonJS({
32333
32333
  }
32334
32334
  function popCallback(streams) {
32335
32335
  if (!streams.length)
32336
- return noop2;
32336
+ return noop;
32337
32337
  if (typeof streams[streams.length - 1] !== "function")
32338
- return noop2;
32338
+ return noop;
32339
32339
  return streams.pop();
32340
32340
  }
32341
32341
  function pipeline() {
@@ -33171,7 +33171,7 @@ var require_buffer_list4 = __commonJS({
33171
33171
  }
33172
33172
  }, {
33173
33173
  key: "join",
33174
- value: function join10(s) {
33174
+ value: function join9(s) {
33175
33175
  if (this.length === 0)
33176
33176
  return "";
33177
33177
  var p = this.head;
@@ -34364,7 +34364,7 @@ var require_end_of_stream4 = __commonJS({
34364
34364
  callback.apply(this, args);
34365
34365
  };
34366
34366
  }
34367
- function noop2() {
34367
+ function noop() {
34368
34368
  }
34369
34369
  function isRequest(stream) {
34370
34370
  return stream.setHeader && typeof stream.abort === "function";
@@ -34374,7 +34374,7 @@ var require_end_of_stream4 = __commonJS({
34374
34374
  return eos(stream, null, opts);
34375
34375
  if (!opts)
34376
34376
  opts = {};
34377
- callback = once(callback || noop2);
34377
+ callback = once(callback || noop);
34378
34378
  var readable = opts.readable || opts.readable !== false && stream.readable;
34379
34379
  var writable = opts.writable || opts.writable !== false && stream.writable;
34380
34380
  var onlegacyfinish = function onlegacyfinish2() {
@@ -35659,7 +35659,7 @@ var require_pipeline4 = __commonJS({
35659
35659
  var _require$codes = require_errors4().codes;
35660
35660
  var ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS;
35661
35661
  var ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;
35662
- function noop2(err) {
35662
+ function noop(err) {
35663
35663
  if (err)
35664
35664
  throw err;
35665
35665
  }
@@ -35705,9 +35705,9 @@ var require_pipeline4 = __commonJS({
35705
35705
  }
35706
35706
  function popCallback(streams) {
35707
35707
  if (!streams.length)
35708
- return noop2;
35708
+ return noop;
35709
35709
  if (typeof streams[streams.length - 1] !== "function")
35710
- return noop2;
35710
+ return noop;
35711
35711
  return streams.pop();
35712
35712
  }
35713
35713
  function pipeline() {
@@ -36545,7 +36545,7 @@ var require_buffer_list5 = __commonJS({
36545
36545
  }
36546
36546
  }, {
36547
36547
  key: "join",
36548
- value: function join10(s) {
36548
+ value: function join9(s) {
36549
36549
  if (this.length === 0)
36550
36550
  return "";
36551
36551
  var p = this.head;
@@ -37738,7 +37738,7 @@ var require_end_of_stream5 = __commonJS({
37738
37738
  callback.apply(this, args);
37739
37739
  };
37740
37740
  }
37741
- function noop2() {
37741
+ function noop() {
37742
37742
  }
37743
37743
  function isRequest(stream) {
37744
37744
  return stream.setHeader && typeof stream.abort === "function";
@@ -37748,7 +37748,7 @@ var require_end_of_stream5 = __commonJS({
37748
37748
  return eos(stream, null, opts);
37749
37749
  if (!opts)
37750
37750
  opts = {};
37751
- callback = once(callback || noop2);
37751
+ callback = once(callback || noop);
37752
37752
  var readable = opts.readable || opts.readable !== false && stream.readable;
37753
37753
  var writable = opts.writable || opts.writable !== false && stream.writable;
37754
37754
  var onlegacyfinish = function onlegacyfinish2() {
@@ -39033,7 +39033,7 @@ var require_pipeline5 = __commonJS({
39033
39033
  var _require$codes = require_errors5().codes;
39034
39034
  var ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS;
39035
39035
  var ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;
39036
- function noop2(err) {
39036
+ function noop(err) {
39037
39037
  if (err)
39038
39038
  throw err;
39039
39039
  }
@@ -39079,9 +39079,9 @@ var require_pipeline5 = __commonJS({
39079
39079
  }
39080
39080
  function popCallback(streams) {
39081
39081
  if (!streams.length)
39082
- return noop2;
39082
+ return noop;
39083
39083
  if (typeof streams[streams.length - 1] !== "function")
39084
- return noop2;
39084
+ return noop;
39085
39085
  return streams.pop();
39086
39086
  }
39087
39087
  function pipeline() {
@@ -39145,7 +39145,7 @@ var require_extract = __commonJS({
39145
39145
  var headers = require_headers();
39146
39146
  var Writable = require_readable6().Writable;
39147
39147
  var PassThrough = require_readable6().PassThrough;
39148
- var noop2 = function() {
39148
+ var noop = function() {
39149
39149
  };
39150
39150
  var overflow = function(size) {
39151
39151
  size &= 511;
@@ -39184,7 +39184,7 @@ var require_extract = __commonJS({
39184
39184
  this._buffer = bl();
39185
39185
  this._missing = 0;
39186
39186
  this._partial = false;
39187
- this._onparse = noop2;
39187
+ this._onparse = noop;
39188
39188
  this._header = null;
39189
39189
  this._stream = null;
39190
39190
  this._overflow = null;
@@ -39332,7 +39332,7 @@ var require_extract = __commonJS({
39332
39332
  if (this._destroyed)
39333
39333
  return;
39334
39334
  var cb = this._cb;
39335
- this._cb = noop2;
39335
+ this._cb = noop;
39336
39336
  if (this._overflow)
39337
39337
  this._write(this._overflow, void 0, cb);
39338
39338
  else
@@ -39388,7 +39388,7 @@ var require_fs_constants = __commonJS({
39388
39388
  var require_end_of_stream6 = __commonJS({
39389
39389
  "../../node_modules/end-of-stream/index.js"(exports, module2) {
39390
39390
  var once = require_once();
39391
- var noop2 = function() {
39391
+ var noop = function() {
39392
39392
  };
39393
39393
  var isRequest = function(stream) {
39394
39394
  return stream.setHeader && typeof stream.abort === "function";
@@ -39401,7 +39401,7 @@ var require_end_of_stream6 = __commonJS({
39401
39401
  return eos(stream, null, opts);
39402
39402
  if (!opts)
39403
39403
  opts = {};
39404
- callback = once(callback || noop2);
39404
+ callback = once(callback || noop);
39405
39405
  var ws = stream._writableState;
39406
39406
  var rs = stream._readableState;
39407
39407
  var readable = opts.readable || opts.readable !== false && stream.readable;
@@ -39493,7 +39493,7 @@ var require_pack = __commonJS({
39493
39493
  var DMODE = parseInt("755", 8);
39494
39494
  var FMODE = parseInt("644", 8);
39495
39495
  var END_OF_TAR = alloc(1024);
39496
- var noop2 = function() {
39496
+ var noop = function() {
39497
39497
  };
39498
39498
  var overflow = function(self2, size) {
39499
39499
  size &= 511;
@@ -39569,7 +39569,7 @@ var require_pack = __commonJS({
39569
39569
  if (!(this instanceof Pack))
39570
39570
  return new Pack(opts);
39571
39571
  Readable.call(this, opts);
39572
- this._drain = noop2;
39572
+ this._drain = noop;
39573
39573
  this._finalized = false;
39574
39574
  this._finalizing = false;
39575
39575
  this._destroyed = false;
@@ -39586,7 +39586,7 @@ var require_pack = __commonJS({
39586
39586
  buffer = null;
39587
39587
  }
39588
39588
  if (!callback)
39589
- callback = noop2;
39589
+ callback = noop;
39590
39590
  var self2 = this;
39591
39591
  if (!header.size || header.type === "symlink")
39592
39592
  header.size = 0;
@@ -39710,7 +39710,7 @@ var require_pack = __commonJS({
39710
39710
  };
39711
39711
  Pack.prototype._read = function(n) {
39712
39712
  var drain = this._drain;
39713
- this._drain = noop2;
39713
+ this._drain = noop;
39714
39714
  drain();
39715
39715
  };
39716
39716
  module2.exports = Pack;
@@ -46941,9 +46941,9 @@ var require_load = __commonJS({
46941
46941
  var require_lib4 = __commonJS({
46942
46942
  "../../node_modules/jszip/lib/index.js"(exports, module2) {
46943
46943
  "use strict";
46944
- function JSZip3() {
46945
- if (!(this instanceof JSZip3)) {
46946
- return new JSZip3();
46944
+ function JSZip2() {
46945
+ if (!(this instanceof JSZip2)) {
46946
+ return new JSZip2();
46947
46947
  }
46948
46948
  if (arguments.length) {
46949
46949
  throw new Error("The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.");
@@ -46952,7 +46952,7 @@ var require_lib4 = __commonJS({
46952
46952
  this.comment = null;
46953
46953
  this.root = "";
46954
46954
  this.clone = function() {
46955
- var newObj = new JSZip3();
46955
+ var newObj = new JSZip2();
46956
46956
  for (var i in this) {
46957
46957
  if (typeof this[i] !== "function") {
46958
46958
  newObj[i] = this[i];
@@ -46961,16 +46961,16 @@ var require_lib4 = __commonJS({
46961
46961
  return newObj;
46962
46962
  };
46963
46963
  }
46964
- JSZip3.prototype = require_object();
46965
- JSZip3.prototype.loadAsync = require_load();
46966
- JSZip3.support = require_support();
46967
- JSZip3.defaults = require_defaults();
46968
- JSZip3.version = "3.7.0";
46969
- JSZip3.loadAsync = function(content, options) {
46970
- return new JSZip3().loadAsync(content, options);
46964
+ JSZip2.prototype = require_object();
46965
+ JSZip2.prototype.loadAsync = require_load();
46966
+ JSZip2.support = require_support();
46967
+ JSZip2.defaults = require_defaults();
46968
+ JSZip2.version = "3.7.0";
46969
+ JSZip2.loadAsync = function(content, options) {
46970
+ return new JSZip2().loadAsync(content, options);
46971
46971
  };
46972
- JSZip3.external = require_external();
46973
- module2.exports = JSZip3;
46972
+ JSZip2.external = require_external();
46973
+ module2.exports = JSZip2;
46974
46974
  }
46975
46975
  });
46976
46976
 
@@ -49832,7 +49832,7 @@ var require_init3 = __commonJS({
49832
49832
  var _gltools = require_es510();
49833
49833
  var _probe = require_es53();
49834
49834
  var _env = require_env2();
49835
- var VERSION15 = true ? "8.5.4" : "untranspiled source";
49835
+ var VERSION17 = true ? "8.5.4" : "untranspiled source";
49836
49836
  var STARTUP_MESSAGE = "set luma.log.level=1 (or higher) to trace rendering";
49837
49837
  var StatsManager = function() {
49838
49838
  function StatsManager2() {
@@ -49854,16 +49854,16 @@ var require_init3 = __commonJS({
49854
49854
  }();
49855
49855
  var lumaStats = new StatsManager();
49856
49856
  exports.lumaStats = lumaStats;
49857
- if (_env.global.luma && _env.global.luma.VERSION !== VERSION15) {
49858
- throw new Error("luma.gl - multiple VERSIONs detected: ".concat(_env.global.luma.VERSION, " vs ").concat(VERSION15));
49857
+ if (_env.global.luma && _env.global.luma.VERSION !== VERSION17) {
49858
+ throw new Error("luma.gl - multiple VERSIONs detected: ".concat(_env.global.luma.VERSION, " vs ").concat(VERSION17));
49859
49859
  }
49860
49860
  if (!_env.global.luma) {
49861
49861
  if ((0, _env.isBrowser)()) {
49862
- _gltools.log.log(1, "luma.gl ".concat(VERSION15, " - ").concat(STARTUP_MESSAGE))();
49862
+ _gltools.log.log(1, "luma.gl ".concat(VERSION17, " - ").concat(STARTUP_MESSAGE))();
49863
49863
  }
49864
49864
  _env.global.luma = _env.global.luma || {
49865
- VERSION: VERSION15,
49866
- version: VERSION15,
49865
+ VERSION: VERSION17,
49866
+ version: VERSION17,
49867
49867
  log: _gltools.log,
49868
49868
  stats: lumaStats,
49869
49869
  globals: {
@@ -73404,9 +73404,7 @@ var require_es516 = __commonJS({
73404
73404
 
73405
73405
  // src/index.ts
73406
73406
  __export(exports, {
73407
- DepsInstaller: () => DepsInstaller,
73408
73407
  I3SConverter: () => I3SConverter,
73409
- NodePages: () => NodePages,
73410
73408
  Tiles3DConverter: () => Tiles3DConverter
73411
73409
  });
73412
73410
 
@@ -73590,7 +73588,7 @@ var WorkerThread = class {
73590
73588
  this.worker = isBrowser2 ? this._createBrowserWorker() : this._createNodeWorker();
73591
73589
  }
73592
73590
  static isSupported() {
73593
- return typeof Worker !== "undefined" && isBrowser2;
73591
+ return typeof Worker !== "undefined" && isBrowser2 || typeof import_worker_threads.Worker !== void 0;
73594
73592
  }
73595
73593
  destroy() {
73596
73594
  this.onMessage = NOOP;
@@ -73699,9 +73697,9 @@ var WorkerPool = class {
73699
73697
  this.onDebug = props.onDebug;
73700
73698
  }
73701
73699
  }
73702
- async startJob(name8, onMessage2 = (job, type, data) => job.done(data), onError = (job, error) => job.error(error)) {
73700
+ async startJob(name8, onMessage3 = (job, type, data) => job.done(data), onError = (job, error) => job.error(error)) {
73703
73701
  const startPromise = new Promise((onStart) => {
73704
- this.jobQueue.push({ name: name8, onMessage: onMessage2, onError, onStart });
73702
+ this.jobQueue.push({ name: name8, onMessage: onMessage3, onError, onStart });
73705
73703
  return this;
73706
73704
  });
73707
73705
  this._startQueuedJob();
@@ -73821,8 +73819,34 @@ var WorkerFarm = class {
73821
73819
  }
73822
73820
  };
73823
73821
 
73822
+ // ../worker-utils/src/lib/worker-utils/remove-nontransferable-options.ts
73823
+ function removeNontransferableOptions(object) {
73824
+ return JSON.parse(stringifyJSON(object));
73825
+ }
73826
+ function stringifyJSON(v) {
73827
+ const cache = new Set();
73828
+ return JSON.stringify(v, (key, value) => {
73829
+ if (typeof value === "object" && value !== null) {
73830
+ if (cache.has(value)) {
73831
+ try {
73832
+ return JSON.parse(JSON.stringify(value));
73833
+ } catch (err) {
73834
+ return void 0;
73835
+ }
73836
+ }
73837
+ cache.add(value);
73838
+ }
73839
+ return value;
73840
+ });
73841
+ }
73842
+
73824
73843
  // ../worker-utils/src/lib/worker-api/get-worker-url.ts
73825
73844
  var NPM_TAG = "beta";
73845
+ var VERSION2 = typeof VERSION !== "undefined" ? VERSION : NPM_TAG;
73846
+ function getWorkerName(worker) {
73847
+ const warning = worker.version !== VERSION2 ? ` (worker-utils@${VERSION2})` : "";
73848
+ return `${worker.name}@${worker.version}${warning}`;
73849
+ }
73826
73850
  function getWorkerURL(worker, options = {}) {
73827
73851
  const workerOptions = options[worker.id] || {};
73828
73852
  const workerFile = `${worker.id}-worker.js`;
@@ -73845,6 +73869,50 @@ function getWorkerURL(worker, options = {}) {
73845
73869
  return url;
73846
73870
  }
73847
73871
 
73872
+ // ../worker-utils/src/lib/worker-api/process-on-worker.ts
73873
+ async function processOnWorker(worker, data, options = {}, context = {}) {
73874
+ const name8 = getWorkerName(worker);
73875
+ const workerFarm = WorkerFarm.getWorkerFarm(options);
73876
+ const { source } = options;
73877
+ const workerPoolProps = { name: name8, source };
73878
+ if (!source) {
73879
+ workerPoolProps.url = getWorkerURL(worker, options);
73880
+ }
73881
+ const workerPool = workerFarm.getWorkerPool(workerPoolProps);
73882
+ const jobName = options.jobName || worker.name;
73883
+ const job = await workerPool.startJob(jobName, onMessage.bind(null, context));
73884
+ const transferableOptions = removeNontransferableOptions(options);
73885
+ job.postMessage("process", { input: data, options: transferableOptions });
73886
+ const result = await job.result;
73887
+ return result.result;
73888
+ }
73889
+ async function onMessage(context, job, type, payload) {
73890
+ switch (type) {
73891
+ case "done":
73892
+ job.done(payload);
73893
+ break;
73894
+ case "error":
73895
+ job.error(new Error(payload.error));
73896
+ break;
73897
+ case "process":
73898
+ const { id, input, options } = payload;
73899
+ try {
73900
+ if (!context.process) {
73901
+ job.postMessage("error", { id, error: "Worker not set up to process on main thread" });
73902
+ return;
73903
+ }
73904
+ const result = await context.process(input, options);
73905
+ job.postMessage("done", { id, result });
73906
+ } catch (error) {
73907
+ const message = error instanceof Error ? error.message : "unknown error";
73908
+ job.postMessage("error", { id, error: message });
73909
+ }
73910
+ break;
73911
+ default:
73912
+ console.warn(`process-on-worker: unknown message ${type}`);
73913
+ }
73914
+ }
73915
+
73848
73916
  // ../worker-utils/src/lib/worker-api/validate-worker-version.ts
73849
73917
  function validateWorkerVersion(worker, coreVersion = VERSION) {
73850
73918
  assert3(worker, "no worker provided");
@@ -73896,7 +73964,7 @@ function requireFromString(code, filename2 = "", options) {
73896
73964
 
73897
73965
  // ../worker-utils/src/lib/library-utils/library-utils.ts
73898
73966
  var LATEST = "beta";
73899
- var VERSION2 = typeof VERSION !== "undefined" ? VERSION : LATEST;
73967
+ var VERSION3 = typeof VERSION !== "undefined" ? VERSION : LATEST;
73900
73968
  var loadLibraryPromises = {};
73901
73969
  async function loadLibrary(libraryUrl, moduleName = null, options = {}) {
73902
73970
  if (moduleName) {
@@ -73918,7 +73986,7 @@ function getLibraryUrl(library, moduleName, options) {
73918
73986
  }
73919
73987
  if (options.CDN) {
73920
73988
  assert3(options.CDN.startsWith("http"));
73921
- return `${options.CDN}/${moduleName}@${VERSION2}/dist/libs/${library}`;
73989
+ return `${options.CDN}/${moduleName}@${VERSION3}/dist/libs/${library}`;
73922
73990
  }
73923
73991
  if (isWorker) {
73924
73992
  return `../src/libs/${library}`;
@@ -74099,15 +74167,17 @@ async function parseWithWorker(loader, data, options, context, parseOnMainThread
74099
74167
  const workerFarm = WorkerFarm.getWorkerFarm(options);
74100
74168
  const workerPool = workerFarm.getWorkerPool({ name: name8, url });
74101
74169
  options = JSON.parse(JSON.stringify(options));
74102
- const job = await workerPool.startJob("process-on-worker", onMessage.bind(null, parseOnMainThread));
74170
+ context = JSON.parse(JSON.stringify(context || {}));
74171
+ const job = await workerPool.startJob("process-on-worker", onMessage2.bind(null, parseOnMainThread));
74103
74172
  job.postMessage("process", {
74104
74173
  input: data,
74105
- options
74174
+ options,
74175
+ context
74106
74176
  });
74107
74177
  const result = await job.result;
74108
74178
  return await result.result;
74109
74179
  }
74110
- async function onMessage(parseOnMainThread, job, type, payload) {
74180
+ async function onMessage2(parseOnMainThread, job, type, payload) {
74111
74181
  switch (type) {
74112
74182
  case "done":
74113
74183
  job.done(payload);
@@ -74130,6 +74200,17 @@ async function onMessage(parseOnMainThread, job, type, payload) {
74130
74200
  }
74131
74201
  }
74132
74202
 
74203
+ // ../loader-utils/src/lib/worker-loader-utils/encode-with-worker.ts
74204
+ function canEncodeWithWorker(writer, options) {
74205
+ if (!WorkerFarm.isSupported()) {
74206
+ return false;
74207
+ }
74208
+ if (!isBrowser && !options?._nodeWorkers) {
74209
+ return false;
74210
+ }
74211
+ return writer.worker && options?.worker;
74212
+ }
74213
+
74133
74214
  // ../loader-utils/src/lib/binary-utils/get-first-characters.ts
74134
74215
  function getFirstCharacters(data, length = 5) {
74135
74216
  if (typeof data === "string") {
@@ -74670,7 +74751,7 @@ async function getResponseError(response) {
74670
74751
  text += ` ${await response.text()}`;
74671
74752
  }
74672
74753
  message += text;
74673
- message = message.length > 60 ? `${message.slice(60)}...` : message;
74754
+ message = message.length > 60 ? `${message.slice(0, 60)}...` : message;
74674
74755
  } catch (error) {
74675
74756
  }
74676
74757
  return message;
@@ -75336,6 +75417,12 @@ async function parse(data, loaders, options, context) {
75336
75417
  }
75337
75418
  async function parseWithLoader(loader, data, options, context) {
75338
75419
  validateWorkerVersion(loader);
75420
+ if (isResponse(data)) {
75421
+ const response = data;
75422
+ const { ok, redirected, status, statusText, type, url } = response;
75423
+ const headers = Object.fromEntries(response.headers.entries());
75424
+ context.response = { headers, ok, redirected, status, statusText, type, url };
75425
+ }
75339
75426
  data = await getArrayBufferOrStringFromData(data, loader, options);
75340
75427
  if (loader.parseTextSync && typeof data === "string") {
75341
75428
  options.dataType = "text";
@@ -75374,6 +75461,11 @@ async function load(url, loaders, options, context) {
75374
75461
 
75375
75462
  // ../core/src/lib/api/encode.ts
75376
75463
  async function encode(data, writer, options) {
75464
+ const globalOptions = getGlobalLoaderOptions();
75465
+ options = { ...globalOptions, ...options };
75466
+ if (canEncodeWithWorker(writer, options)) {
75467
+ return await processOnWorker(writer, data, options);
75468
+ }
75377
75469
  if (writer.encode) {
75378
75470
  return await writer.encode(data, options);
75379
75471
  }
@@ -75433,7 +75525,7 @@ function getTemporaryFilename(filename2) {
75433
75525
 
75434
75526
  // ../tiles/src/tileset/tileset-3d.ts
75435
75527
  var import_core10 = __toModule(require_es56());
75436
- var import_geospatial5 = __toModule(require_es57());
75528
+ var import_geospatial6 = __toModule(require_es57());
75437
75529
  var import_stats2 = __toModule(require_es5());
75438
75530
 
75439
75531
  // ../tiles/src/utils/doubly-linked-list-node.ts
@@ -75700,6 +75792,7 @@ function commonSpacePlanesToWGS84(viewport, viewportCenterCartesian) {
75700
75792
  // ../tiles/src/tileset/helpers/zoom.ts
75701
75793
  var import_core3 = __toModule(require_es56());
75702
75794
  var import_culling2 = __toModule(require_es58());
75795
+ var import_geospatial3 = __toModule(require_es57());
75703
75796
  var WGS84_RADIUS_X = 6378137;
75704
75797
  var WGS84_RADIUS_Y = 6378137;
75705
75798
  var WGS84_RADIUS_Z = 6356752314245179e-9;
@@ -75720,6 +75813,15 @@ function getZoomFromBoundingVolume(boundingVolume, cartorgraphicCenter) {
75720
75813
  }
75721
75814
  return 1;
75722
75815
  }
75816
+ function getZoomFromFullExtent(fullExtent, cartorgraphicCenter, cartesianCenter) {
75817
+ const extentVertex = import_geospatial3.Ellipsoid.WGS84.cartographicToCartesian([fullExtent.xmax, fullExtent.ymax, fullExtent.zmax], new import_core3.Vector3());
75818
+ const extentSize = Math.sqrt(Math.pow(extentVertex[0] - cartesianCenter[0], 2) + Math.pow(extentVertex[1] - cartesianCenter[1], 2) + Math.pow(extentVertex[2] - cartesianCenter[2], 2));
75819
+ return Math.log2(WGS84_RADIUS_Z / (extentSize + cartorgraphicCenter[2]));
75820
+ }
75821
+ function getZoomFromExtent(extent, cartorgraphicCenter, cartesianCenter) {
75822
+ const [xmin, ymin, xmax, ymax] = extent;
75823
+ return getZoomFromFullExtent({ xmin, xmax, ymin, ymax, zmin: 0, zmax: 0 }, cartorgraphicCenter, cartesianCenter);
75824
+ }
75723
75825
  function getObbSize(halfAxes) {
75724
75826
  halfAxes.getColumn(0, scratchVector2);
75725
75827
  const axeY = halfAxes.getColumn(1);
@@ -75769,7 +75871,7 @@ var TILE3D_OPTIMIZATION_HINT = {
75769
75871
  // ../tiles/src/tileset/helpers/bounding-volume.ts
75770
75872
  var import_core4 = __toModule(require_es56());
75771
75873
  var import_culling3 = __toModule(require_es58());
75772
- var import_geospatial3 = __toModule(require_es57());
75874
+ var import_geospatial4 = __toModule(require_es57());
75773
75875
  function defined2(x) {
75774
75876
  return x !== void 0 && x !== null;
75775
75877
  }
@@ -75783,8 +75885,8 @@ function createBoundingVolume(boundingVolumeHeader, transform9, result) {
75783
75885
  }
75784
75886
  if (boundingVolumeHeader.region) {
75785
75887
  const [west, south, east, north, minHeight, maxHeight] = boundingVolumeHeader.region;
75786
- const northWest = import_geospatial3.Ellipsoid.WGS84.cartographicToCartesian([(0, import_core4.degrees)(west), (0, import_core4.degrees)(north), minHeight], scratchNorthWest);
75787
- const southEast = import_geospatial3.Ellipsoid.WGS84.cartographicToCartesian([(0, import_core4.degrees)(east), (0, import_core4.degrees)(south), maxHeight], scratchSouthEast);
75888
+ const northWest = import_geospatial4.Ellipsoid.WGS84.cartographicToCartesian([(0, import_core4.degrees)(west), (0, import_core4.degrees)(north), minHeight], scratchNorthWest);
75889
+ const southEast = import_geospatial4.Ellipsoid.WGS84.cartographicToCartesian([(0, import_core4.degrees)(east), (0, import_core4.degrees)(south), maxHeight], scratchSouthEast);
75788
75890
  const centerInCartesian = new import_core4.Vector3().addVectors(northWest, southEast).multiplyScalar(0.5);
75789
75891
  const radius = new import_core4.Vector3().subVectors(northWest, southEast).len() / 2;
75790
75892
  return createSphere([centerInCartesian[0], centerInCartesian[1], centerInCartesian[2], radius], new import_core4.Matrix4());
@@ -75888,7 +75990,7 @@ function getTiles3DScreenSpaceError(tile, frameState, useParentLodMetric) {
75888
75990
 
75889
75991
  // ../tiles/src/tileset/helpers/i3s-lod.ts
75890
75992
  var import_core6 = __toModule(require_es56());
75891
- var import_geospatial4 = __toModule(require_es57());
75993
+ var import_geospatial5 = __toModule(require_es57());
75892
75994
  var cameraPositionCartesian = new import_core6.Vector3();
75893
75995
  var toEye = new import_core6.Vector3();
75894
75996
  var cameraPositionEnu = new import_core6.Vector3();
@@ -75919,9 +76021,9 @@ function getProjectedRadius(tile, frameState) {
75919
76021
  const mbsR = tile.header.mbs[3];
75920
76022
  const mbsCenterCartesian = [...tile.boundingVolume.center];
75921
76023
  const cameraPositionCartographic = viewport.unprojectPosition(viewport.cameraPosition);
75922
- import_geospatial4.Ellipsoid.WGS84.cartographicToCartesian(cameraPositionCartographic, cameraPositionCartesian);
76024
+ import_geospatial5.Ellipsoid.WGS84.cartographicToCartesian(cameraPositionCartographic, cameraPositionCartesian);
75923
76025
  toEye.copy(cameraPositionCartesian).subtract(mbsCenterCartesian).normalize();
75924
- import_geospatial4.Ellipsoid.WGS84.eastNorthUpToFixedFrame(mbsCenterCartesian, enuToCartesianMatrix);
76026
+ import_geospatial5.Ellipsoid.WGS84.eastNorthUpToFixedFrame(mbsCenterCartesian, enuToCartesianMatrix);
75925
76027
  cartesianToEnuMatrix.copy(enuToCartesianMatrix).invert();
75926
76028
  cameraPositionEnu.copy(cameraPositionCartesian).transform(cartesianToEnuMatrix);
75927
76029
  const projection = Math.sqrt(cameraPositionEnu[0] * cameraPositionEnu[0] + cameraPositionEnu[1] * cameraPositionEnu[1]);
@@ -75931,7 +76033,7 @@ function getProjectedRadius(tile, frameState) {
75931
76033
  const extraVectorCartesian = extraVertexCartesian.subtract(mbsCenterCartesian).normalize();
75932
76034
  const radiusVector = toEye.cross(extraVectorCartesian).normalize().scale(mbsR);
75933
76035
  const sphereMbsBorderVertexCartesian = radiusVector.add(mbsCenterCartesian);
75934
- const sphereMbsBorderVertexCartographic = import_geospatial4.Ellipsoid.WGS84.cartesianToCartographic(sphereMbsBorderVertexCartesian);
76036
+ const sphereMbsBorderVertexCartographic = import_geospatial5.Ellipsoid.WGS84.cartesianToCartographic(sphereMbsBorderVertexCartesian);
75935
76037
  const projectedOrigin = viewport.project([mbsLon, mbsLat, mbsZ]);
75936
76038
  const projectedMbsBorderVertex = viewport.project(sphereMbsBorderVertexCartographic);
75937
76039
  const projectedRadius = projectedOriginVector.copy(projectedOrigin).subtract(projectedMbsBorderVertex).magnitude();
@@ -76041,6 +76143,8 @@ var DEFAULT_PROPS4 = {
76041
76143
  };
76042
76144
  var TilesetTraverser = class {
76043
76145
  constructor(options) {
76146
+ this.lastUpdate = new Date().getTime();
76147
+ this.updateDebounceTime = 1e3;
76044
76148
  this.options = { ...DEFAULT_PROPS4, ...options };
76045
76149
  this._traversalStack = new ManagedArray();
76046
76150
  this._emptyTraversalStack = new ManagedArray();
@@ -76050,6 +76154,9 @@ var TilesetTraverser = class {
76050
76154
  this.requestedTiles = {};
76051
76155
  this.emptyTiles = {};
76052
76156
  }
76157
+ get traversalFinished() {
76158
+ return true;
76159
+ }
76053
76160
  traverse(root, frameState, options) {
76054
76161
  this.root = root;
76055
76162
  this.options = { ...this.options, ...options };
@@ -76097,7 +76204,11 @@ var TilesetTraverser = class {
76097
76204
  this.touchTile(tile, frameState);
76098
76205
  tile._shouldRefine = shouldRefine && parentRefines;
76099
76206
  }
76100
- this.options.onTraversalEnd(frameState);
76207
+ const newTime = new Date().getTime();
76208
+ if (this.traversalFinished || newTime - this.lastUpdate > this.updateDebounceTime) {
76209
+ this.lastUpdate = newTime;
76210
+ this.options.onTraversalEnd(frameState);
76211
+ }
76101
76212
  }
76102
76213
  updateChildTiles(tile, frameState) {
76103
76214
  const children = tile.children;
@@ -76631,6 +76742,25 @@ var Tileset3DTraverser = class extends TilesetTraverser {
76631
76742
  }
76632
76743
  };
76633
76744
 
76745
+ // ../tiles/src/tileset/traversers/i3s-frame-counter.ts
76746
+ var I3SPendingTilesRegister = class {
76747
+ constructor() {
76748
+ this.frameNumberMap = new Map();
76749
+ }
76750
+ register(frameNumber) {
76751
+ const oldCount = this.frameNumberMap.get(frameNumber) || 0;
76752
+ this.frameNumberMap.set(frameNumber, (oldCount || 0) + 1);
76753
+ }
76754
+ deregister(frameNumber) {
76755
+ const oldCount = this.frameNumberMap.get(frameNumber) || 1;
76756
+ this.frameNumberMap.set(frameNumber, (oldCount || 0) - 1);
76757
+ }
76758
+ isZero(frameNumber) {
76759
+ const count = this.frameNumberMap.get(frameNumber) || 0;
76760
+ return count === 0;
76761
+ }
76762
+ };
76763
+
76634
76764
  // ../tiles/src/tileset/traversers/i3s-tile-manager.ts
76635
76765
  var STATUS = {
76636
76766
  REQUESTED: "REQUESTED",
@@ -76639,32 +76769,45 @@ var STATUS = {
76639
76769
  };
76640
76770
  var I3STileManager = class {
76641
76771
  constructor() {
76772
+ this.pendingTilesRegister = new I3SPendingTilesRegister();
76642
76773
  this._statusMap = {};
76643
76774
  }
76644
76775
  add(request, key, callback, frameState) {
76645
76776
  if (!this._statusMap[key]) {
76777
+ const { frameNumber } = frameState;
76646
76778
  this._statusMap[key] = { request, callback, key, frameState, status: STATUS.REQUESTED };
76779
+ this.pendingTilesRegister.register(frameNumber);
76647
76780
  request().then((data) => {
76648
76781
  this._statusMap[key].status = STATUS.COMPLETED;
76782
+ this.pendingTilesRegister.deregister(frameNumber);
76649
76783
  this._statusMap[key].callback(data, frameState);
76650
76784
  }).catch((error) => {
76651
76785
  this._statusMap[key].status = STATUS.ERROR;
76786
+ this.pendingTilesRegister.deregister(frameNumber);
76652
76787
  callback(error);
76653
76788
  });
76654
76789
  }
76655
76790
  }
76656
76791
  update(key, frameState) {
76657
76792
  if (this._statusMap[key]) {
76793
+ this.pendingTilesRegister.deregister(this._statusMap[key].frameState.frameNumber);
76794
+ this.pendingTilesRegister.register(frameState.frameNumber);
76658
76795
  this._statusMap[key].frameState = frameState;
76659
76796
  }
76660
76797
  }
76661
76798
  find(key) {
76662
76799
  return this._statusMap[key];
76663
76800
  }
76801
+ hasPendingTiles(frameNumber) {
76802
+ return !this.pendingTilesRegister.isZero(frameNumber);
76803
+ }
76664
76804
  };
76665
76805
 
76666
76806
  // ../tiles/src/tileset/traversers/i3s-tileset-traverser.ts
76667
76807
  var I3STilesetTraverser = class extends TilesetTraverser {
76808
+ get traversalFinished() {
76809
+ return !this._tileManager.hasPendingTiles(this._frameNumber || 0);
76810
+ }
76668
76811
  constructor(options) {
76669
76812
  super(options);
76670
76813
  this._tileManager = new I3STileManager();
@@ -76715,7 +76858,7 @@ var I3STilesetTraverser = class extends TilesetTraverser {
76715
76858
  tile.children.push(childTile);
76716
76859
  const frameState = this._tileManager.find(childTile.id).frameState;
76717
76860
  this.updateTile(childTile, frameState);
76718
- if (this._frameNumber === frameState.frameNumber) {
76861
+ if (this._frameNumber === frameState.frameNumber && (this.traversalFinished || new Date().getTime() - this.lastUpdate > this.updateDebounceTime)) {
76719
76862
  this.executeTraversal(childTile, frameState);
76720
76863
  }
76721
76864
  }
@@ -76724,7 +76867,7 @@ var I3STilesetTraverser = class extends TilesetTraverser {
76724
76867
  // ../tiles/src/tileset/tileset-3d.ts
76725
76868
  var DEFAULT_PROPS5 = {
76726
76869
  description: "",
76727
- ellipsoid: import_geospatial5.Ellipsoid.WGS84,
76870
+ ellipsoid: import_geospatial6.Ellipsoid.WGS84,
76728
76871
  modelMatrix: new import_core10.Matrix4(),
76729
76872
  throttleRequests: true,
76730
76873
  maxRequests: 64,
@@ -76757,7 +76900,7 @@ var TILES_LOADED = "Tiles Loaded";
76757
76900
  var TILES_LOADING = "Tiles Loading";
76758
76901
  var TILES_UNLOADED = "Tiles Unloaded";
76759
76902
  var TILES_LOAD_FAILED = "Failed Tile Loads";
76760
- var POINTS_COUNT = "Points";
76903
+ var POINTS_COUNT = "Points/Vertices";
76761
76904
  var TILES_GPU_MEMORY = "Tile Memory Use";
76762
76905
  var Tileset3D = class {
76763
76906
  constructor(json, options) {
@@ -76809,13 +76952,13 @@ var Tileset3D = class {
76809
76952
  this.asset = {};
76810
76953
  this.credits = {};
76811
76954
  this.description = this.options.description || "";
76812
- this._initializeTileSet(json);
76955
+ this.tilesetInitializationPromise = this._initializeTileSet(json);
76813
76956
  }
76814
76957
  destroy() {
76815
76958
  this._destroy();
76816
76959
  }
76817
76960
  isLoaded() {
76818
- return this._pendingCount === 0 && this._frameNumber !== 0;
76961
+ return this._pendingCount === 0 && this._frameNumber !== 0 && this._requestedTiles.length === 0;
76819
76962
  }
76820
76963
  get tiles() {
76821
76964
  return Object.values(this._tiles);
@@ -76846,14 +76989,17 @@ var Tileset3D = class {
76846
76989
  return Boolean(this._extensionsUsed && this._extensionsUsed.indexOf(extensionName) > -1);
76847
76990
  }
76848
76991
  update(viewports = null) {
76849
- if (!viewports && this.lastUpdatedVieports) {
76850
- viewports = this.lastUpdatedVieports;
76851
- } else {
76852
- this.lastUpdatedVieports = viewports;
76853
- }
76854
- this.doUpdate(viewports);
76992
+ this.tilesetInitializationPromise.then(() => {
76993
+ if (!viewports && this.lastUpdatedVieports) {
76994
+ viewports = this.lastUpdatedVieports;
76995
+ } else {
76996
+ this.lastUpdatedVieports = viewports;
76997
+ }
76998
+ this.doUpdate(viewports);
76999
+ });
76855
77000
  }
76856
77001
  async selectTiles(viewports = null) {
77002
+ await this.tilesetInitializationPromise;
76857
77003
  if (viewports) {
76858
77004
  this.lastUpdatedVieports = viewports;
76859
77005
  }
@@ -76978,6 +77124,8 @@ var Tileset3D = class {
76978
77124
  tilesRenderable++;
76979
77125
  if (tile.content.pointCount) {
76980
77126
  pointsRenderable += tile.content.pointCount;
77127
+ } else {
77128
+ pointsRenderable += tile.content.vertexCount;
76981
77129
  }
76982
77130
  }
76983
77131
  }
@@ -76985,17 +77133,43 @@ var Tileset3D = class {
76985
77133
  this.stats.get(TILES_RENDERABLE).count = tilesRenderable;
76986
77134
  this.stats.get(POINTS_COUNT).count = pointsRenderable;
76987
77135
  }
76988
- _initializeTileSet(tilesetJson) {
77136
+ async _initializeTileSet(tilesetJson) {
77137
+ if (this.type === TILESET_TYPE.I3S) {
77138
+ this.calculateViewPropsI3S();
77139
+ tilesetJson.root = await tilesetJson.root;
77140
+ }
76989
77141
  this.root = this._initializeTileHeaders(tilesetJson, null);
76990
77142
  if (this.type === TILESET_TYPE.TILES3D) {
76991
- this._initializeCesiumTileset(tilesetJson);
77143
+ this._initializeTiles3DTileset(tilesetJson);
77144
+ this.calculateViewPropsTiles3D();
76992
77145
  }
76993
77146
  if (this.type === TILESET_TYPE.I3S) {
76994
77147
  this._initializeI3STileset();
76995
77148
  }
76996
- this._calculateViewProps();
76997
77149
  }
76998
- _calculateViewProps() {
77150
+ calculateViewPropsI3S() {
77151
+ const fullExtent = this.tileset.fullExtent;
77152
+ if (fullExtent) {
77153
+ const { xmin, xmax, ymin, ymax, zmin, zmax } = fullExtent;
77154
+ this.cartographicCenter = new import_core10.Vector3(xmin + (xmax - xmin) / 2, ymin + (ymax - ymin) / 2, zmin + (zmax - zmin) / 2);
77155
+ this.cartesianCenter = import_geospatial6.Ellipsoid.WGS84.cartographicToCartesian(this.cartographicCenter, new import_core10.Vector3());
77156
+ this.zoom = getZoomFromFullExtent(fullExtent, this.cartographicCenter, this.cartesianCenter);
77157
+ return;
77158
+ }
77159
+ const extent = this.tileset.store?.extent;
77160
+ if (extent) {
77161
+ const [xmin, ymin, xmax, ymax] = extent;
77162
+ this.cartographicCenter = new import_core10.Vector3(xmin + (xmax - xmin) / 2, ymin + (ymax - ymin) / 2, 0);
77163
+ this.cartesianCenter = import_geospatial6.Ellipsoid.WGS84.cartographicToCartesian(this.cartographicCenter, new import_core10.Vector3());
77164
+ this.zoom = getZoomFromExtent(extent, this.cartographicCenter, this.cartesianCenter);
77165
+ return;
77166
+ }
77167
+ console.warn("Extent is not defined in the tileset header");
77168
+ this.cartographicCenter = new import_core10.Vector3();
77169
+ this.zoom = 1;
77170
+ return;
77171
+ }
77172
+ calculateViewPropsTiles3D() {
76999
77173
  const root = this.root;
77000
77174
  assert2(root);
77001
77175
  const { center } = root.boundingVolume;
@@ -77005,7 +77179,7 @@ var Tileset3D = class {
77005
77179
  this.zoom = 1;
77006
77180
  return;
77007
77181
  }
77008
- this.cartographicCenter = import_geospatial5.Ellipsoid.WGS84.cartesianToCartographic(center, new import_core10.Vector3());
77182
+ this.cartographicCenter = import_geospatial6.Ellipsoid.WGS84.cartesianToCartographic(center, new import_core10.Vector3());
77009
77183
  this.cartesianCenter = center;
77010
77184
  this.zoom = getZoomFromBoundingVolume(root.boundingVolume, this.cartographicCenter);
77011
77185
  }
@@ -77088,6 +77262,11 @@ var Tileset3D = class {
77088
77262
  if (!loaded) {
77089
77263
  return;
77090
77264
  }
77265
+ if (this.type === TILESET_TYPE.I3S) {
77266
+ const nodesInNodePages = this.tileset?.nodePagesTile?.nodesInNodePages || 0;
77267
+ this.stats.get(TILES_TOTAL).reset();
77268
+ this.stats.get(TILES_TOTAL).addCount(nodesInNodePages);
77269
+ }
77091
77270
  if (tile && tile.content) {
77092
77271
  calculateTransformProps(tile, tile.content);
77093
77272
  }
@@ -77153,7 +77332,7 @@ var Tileset3D = class {
77153
77332
  this._unloadTile(tile);
77154
77333
  tile.destroy();
77155
77334
  }
77156
- _initializeCesiumTileset(tilesetJson) {
77335
+ _initializeTiles3DTileset(tilesetJson) {
77157
77336
  this.asset = tilesetJson.asset;
77158
77337
  if (!this.asset) {
77159
77338
  throw new Error("Tileset must have an asset property.");
@@ -77195,7 +77374,7 @@ function getQueryParamString(queryParams) {
77195
77374
  }
77196
77375
 
77197
77376
  // ../3d-tiles/src/lib/utils/version.ts
77198
- var VERSION3 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
77377
+ var VERSION4 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
77199
77378
 
77200
77379
  // ../3d-tiles/src/lib/constants.ts
77201
77380
  var TILE3D_TYPE = {
@@ -77229,7 +77408,7 @@ function getMagicString3(arrayBuffer, byteOffset = 0) {
77229
77408
  }
77230
77409
 
77231
77410
  // ../draco/src/lib/utils/version.ts
77232
- var VERSION4 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
77411
+ var VERSION5 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
77233
77412
 
77234
77413
  // ../draco/src/draco-loader.ts
77235
77414
  var DEFAULT_DRACO_OPTIONS = {
@@ -77245,7 +77424,7 @@ var DracoLoader = {
77245
77424
  id: "draco",
77246
77425
  module: "draco",
77247
77426
  shapes: ["mesh"],
77248
- version: VERSION4,
77427
+ version: VERSION5,
77249
77428
  worker: true,
77250
77429
  extensions: ["drc"],
77251
77430
  mimeTypes: ["application/octet-stream"],
@@ -78156,7 +78335,6 @@ var DRACO_WASM_WRAPPER_URL = `https://www.gstatic.com/draco/versioned/decoders/$
78156
78335
  var DRACO_WASM_DECODER_URL = `https://www.gstatic.com/draco/versioned/decoders/${DRACO_VERSION}/draco_decoder.wasm`;
78157
78336
  var DRACO_ENCODER_URL = `https://raw.githubusercontent.com/google/draco/${DRACO_VERSION}/javascript/draco_encoder.js`;
78158
78337
  var loadDecoderPromise;
78159
- var loadEncoderPromise;
78160
78338
  async function loadDracoDecoderModule(options) {
78161
78339
  const modules = options.modules || {};
78162
78340
  if (modules.draco3d) {
@@ -78168,17 +78346,6 @@ async function loadDracoDecoderModule(options) {
78168
78346
  }
78169
78347
  return await loadDecoderPromise;
78170
78348
  }
78171
- async function loadDracoEncoderModule(options) {
78172
- const modules = options.modules || {};
78173
- if (modules.draco3d) {
78174
- loadEncoderPromise = loadEncoderPromise || modules.draco3d.createEncoderModule({}).then((draco) => {
78175
- return { draco };
78176
- });
78177
- } else {
78178
- loadEncoderPromise = loadEncoderPromise || loadDracoEncoder(options);
78179
- }
78180
- return await loadEncoderPromise;
78181
- }
78182
78349
  async function loadDracoDecoder(options) {
78183
78350
  let DracoDecoderModule;
78184
78351
  let wasmBinary;
@@ -78208,303 +78375,19 @@ function initializeDracoDecoder(DracoDecoderModule, wasmBinary) {
78208
78375
  });
78209
78376
  });
78210
78377
  }
78211
- async function loadDracoEncoder(options) {
78212
- let DracoEncoderModule = await loadLibrary(DRACO_ENCODER_URL, "draco", options);
78213
- DracoEncoderModule = DracoEncoderModule || globalThis.DracoEncoderModule;
78214
- return new Promise((resolve) => {
78215
- DracoEncoderModule({
78216
- onModuleLoaded: (draco) => resolve({ draco })
78217
- });
78218
- });
78219
- }
78220
-
78221
- // ../draco/src/lib/draco-builder.ts
78222
- var GLTF_TO_DRACO_ATTRIBUTE_NAME_MAP = {
78223
- POSITION: "POSITION",
78224
- NORMAL: "NORMAL",
78225
- COLOR_0: "COLOR",
78226
- TEXCOORD_0: "TEX_COORD"
78227
- };
78228
- var noop = () => {
78229
- };
78230
- var DracoBuilder = class {
78231
- constructor(draco) {
78232
- this.draco = draco;
78233
- this.dracoEncoder = new this.draco.Encoder();
78234
- this.dracoMeshBuilder = new this.draco.MeshBuilder();
78235
- this.dracoMetadataBuilder = new this.draco.MetadataBuilder();
78236
- }
78237
- destroy() {
78238
- this.destroyEncodedObject(this.dracoMeshBuilder);
78239
- this.destroyEncodedObject(this.dracoEncoder);
78240
- this.destroyEncodedObject(this.dracoMetadataBuilder);
78241
- this.dracoMeshBuilder = null;
78242
- this.dracoEncoder = null;
78243
- this.draco = null;
78244
- }
78245
- destroyEncodedObject(object) {
78246
- if (object) {
78247
- this.draco.destroy(object);
78248
- }
78249
- }
78250
- encodeSync(mesh, options = {}) {
78251
- this.log = noop;
78252
- this._setOptions(options);
78253
- return options.pointcloud ? this._encodePointCloud(mesh, options) : this._encodeMesh(mesh, options);
78254
- }
78255
- _getAttributesFromMesh(mesh) {
78256
- const attributes = { ...mesh, ...mesh.attributes };
78257
- if (mesh.indices) {
78258
- attributes.indices = mesh.indices;
78259
- }
78260
- return attributes;
78261
- }
78262
- _encodePointCloud(pointcloud, options) {
78263
- const dracoPointCloud = new this.draco.PointCloud();
78264
- if (options.metadata) {
78265
- this._addGeometryMetadata(dracoPointCloud, options.metadata);
78266
- }
78267
- const attributes = this._getAttributesFromMesh(pointcloud);
78268
- this._createDracoPointCloud(dracoPointCloud, attributes, options);
78269
- const dracoData = new this.draco.DracoInt8Array();
78270
- try {
78271
- const encodedLen = this.dracoEncoder.EncodePointCloudToDracoBuffer(dracoPointCloud, false, dracoData);
78272
- if (!(encodedLen > 0)) {
78273
- throw new Error("Draco encoding failed.");
78274
- }
78275
- this.log(`DRACO encoded ${dracoPointCloud.num_points()} points
78276
- with ${dracoPointCloud.num_attributes()} attributes into ${encodedLen} bytes`);
78277
- return dracoInt8ArrayToArrayBuffer(dracoData);
78278
- } finally {
78279
- this.destroyEncodedObject(dracoData);
78280
- this.destroyEncodedObject(dracoPointCloud);
78281
- }
78282
- }
78283
- _encodeMesh(mesh, options) {
78284
- const dracoMesh = new this.draco.Mesh();
78285
- if (options.metadata) {
78286
- this._addGeometryMetadata(dracoMesh, options.metadata);
78287
- }
78288
- const attributes = this._getAttributesFromMesh(mesh);
78289
- this._createDracoMesh(dracoMesh, attributes, options);
78290
- const dracoData = new this.draco.DracoInt8Array();
78291
- try {
78292
- const encodedLen = this.dracoEncoder.EncodeMeshToDracoBuffer(dracoMesh, dracoData);
78293
- if (encodedLen <= 0) {
78294
- throw new Error("Draco encoding failed.");
78295
- }
78296
- this.log(`DRACO encoded ${dracoMesh.num_points()} points
78297
- with ${dracoMesh.num_attributes()} attributes into ${encodedLen} bytes`);
78298
- return dracoInt8ArrayToArrayBuffer(dracoData);
78299
- } finally {
78300
- this.destroyEncodedObject(dracoData);
78301
- this.destroyEncodedObject(dracoMesh);
78302
- }
78303
- }
78304
- _setOptions(options) {
78305
- if ("speed" in options) {
78306
- this.dracoEncoder.SetSpeedOptions(...options.speed);
78307
- }
78308
- if ("method" in options) {
78309
- const dracoMethod = this.draco[options.method || "MESH_SEQUENTIAL_ENCODING"];
78310
- this.dracoEncoder.SetEncodingMethod(dracoMethod);
78311
- }
78312
- if ("quantization" in options) {
78313
- for (const attribute in options.quantization) {
78314
- const bits = options.quantization[attribute];
78315
- const dracoPosition = this.draco[attribute];
78316
- this.dracoEncoder.SetAttributeQuantization(dracoPosition, bits);
78317
- }
78318
- }
78319
- }
78320
- _createDracoMesh(dracoMesh, attributes, options) {
78321
- const optionalMetadata = options.attributesMetadata || {};
78322
- try {
78323
- const positions = this._getPositionAttribute(attributes);
78324
- if (!positions) {
78325
- throw new Error("positions");
78326
- }
78327
- const vertexCount = positions.length / 3;
78328
- for (let attributeName in attributes) {
78329
- const attribute = attributes[attributeName];
78330
- attributeName = GLTF_TO_DRACO_ATTRIBUTE_NAME_MAP[attributeName] || attributeName;
78331
- const uniqueId = this._addAttributeToMesh(dracoMesh, attributeName, attribute, vertexCount);
78332
- if (uniqueId !== -1) {
78333
- this._addAttributeMetadata(dracoMesh, uniqueId, {
78334
- name: attributeName,
78335
- ...optionalMetadata[attributeName] || {}
78336
- });
78337
- }
78338
- }
78339
- } catch (error) {
78340
- this.destroyEncodedObject(dracoMesh);
78341
- throw error;
78342
- }
78343
- return dracoMesh;
78344
- }
78345
- _createDracoPointCloud(dracoPointCloud, attributes, options) {
78346
- const optionalMetadata = options.attributesMetadata || {};
78347
- try {
78348
- const positions = this._getPositionAttribute(attributes);
78349
- if (!positions) {
78350
- throw new Error("positions");
78351
- }
78352
- const vertexCount = positions.length / 3;
78353
- for (let attributeName in attributes) {
78354
- const attribute = attributes[attributeName];
78355
- attributeName = GLTF_TO_DRACO_ATTRIBUTE_NAME_MAP[attributeName] || attributeName;
78356
- const uniqueId = this._addAttributeToMesh(dracoPointCloud, attributeName, attribute, vertexCount);
78357
- if (uniqueId !== -1) {
78358
- this._addAttributeMetadata(dracoPointCloud, uniqueId, {
78359
- name: attributeName,
78360
- ...optionalMetadata[attributeName] || {}
78361
- });
78362
- }
78363
- }
78364
- } catch (error) {
78365
- this.destroyEncodedObject(dracoPointCloud);
78366
- throw error;
78367
- }
78368
- return dracoPointCloud;
78369
- }
78370
- _addAttributeToMesh(mesh, attributeName, attribute, vertexCount) {
78371
- if (!ArrayBuffer.isView(attribute)) {
78372
- return -1;
78373
- }
78374
- const type = this._getDracoAttributeType(attributeName);
78375
- const size = attribute.length / vertexCount;
78376
- if (type === "indices") {
78377
- const numFaces = attribute.length / 3;
78378
- this.log(`Adding attribute ${attributeName}, size ${numFaces}`);
78379
- this.dracoMeshBuilder.AddFacesToMesh(mesh, numFaces, attribute);
78380
- return -1;
78381
- }
78382
- this.log(`Adding attribute ${attributeName}, size ${size}`);
78383
- const builder = this.dracoMeshBuilder;
78384
- const { buffer } = attribute;
78385
- switch (attribute.constructor) {
78386
- case Int8Array:
78387
- return builder.AddInt8Attribute(mesh, type, vertexCount, size, new Int8Array(buffer));
78388
- case Int16Array:
78389
- return builder.AddInt16Attribute(mesh, type, vertexCount, size, new Int16Array(buffer));
78390
- case Int32Array:
78391
- return builder.AddInt32Attribute(mesh, type, vertexCount, size, new Int32Array(buffer));
78392
- case Uint8Array:
78393
- case Uint8ClampedArray:
78394
- return builder.AddUInt8Attribute(mesh, type, vertexCount, size, new Uint8Array(buffer));
78395
- case Uint16Array:
78396
- return builder.AddUInt16Attribute(mesh, type, vertexCount, size, new Uint16Array(buffer));
78397
- case Uint32Array:
78398
- return builder.AddUInt32Attribute(mesh, type, vertexCount, size, new Uint32Array(buffer));
78399
- case Float32Array:
78400
- default:
78401
- return builder.AddFloatAttribute(mesh, type, vertexCount, size, new Float32Array(buffer));
78402
- }
78403
- }
78404
- _getDracoAttributeType(attributeName) {
78405
- switch (attributeName.toLowerCase()) {
78406
- case "indices":
78407
- return "indices";
78408
- case "position":
78409
- case "positions":
78410
- case "vertices":
78411
- return this.draco.POSITION;
78412
- case "normal":
78413
- case "normals":
78414
- return this.draco.NORMAL;
78415
- case "color":
78416
- case "colors":
78417
- return this.draco.COLOR;
78418
- case "texcoord":
78419
- case "texcoords":
78420
- return this.draco.TEX_COORD;
78421
- default:
78422
- return this.draco.GENERIC;
78423
- }
78424
- }
78425
- _getPositionAttribute(attributes) {
78426
- for (const attributeName in attributes) {
78427
- const attribute = attributes[attributeName];
78428
- const dracoType = this._getDracoAttributeType(attributeName);
78429
- if (dracoType === this.draco.POSITION) {
78430
- return attribute;
78431
- }
78432
- }
78433
- return null;
78434
- }
78435
- _addGeometryMetadata(dracoGeometry, metadata) {
78436
- const dracoMetadata = new this.draco.Metadata();
78437
- this._populateDracoMetadata(dracoMetadata, metadata);
78438
- this.dracoMeshBuilder.AddMetadata(dracoGeometry, dracoMetadata);
78439
- }
78440
- _addAttributeMetadata(dracoGeometry, uniqueAttributeId, metadata) {
78441
- const dracoAttributeMetadata = new this.draco.Metadata();
78442
- this._populateDracoMetadata(dracoAttributeMetadata, metadata);
78443
- this.dracoMeshBuilder.SetMetadataForAttribute(dracoGeometry, uniqueAttributeId, dracoAttributeMetadata);
78444
- }
78445
- _populateDracoMetadata(dracoMetadata, metadata) {
78446
- for (const [key, value] of getEntries(metadata)) {
78447
- switch (typeof value) {
78448
- case "number":
78449
- if (Math.trunc(value) === value) {
78450
- this.dracoMetadataBuilder.AddIntEntry(dracoMetadata, key, value);
78451
- } else {
78452
- this.dracoMetadataBuilder.AddDoubleEntry(dracoMetadata, key, value);
78453
- }
78454
- break;
78455
- case "object":
78456
- if (value instanceof Int32Array) {
78457
- this.dracoMetadataBuilder.AddIntEntryArray(dracoMetadata, key, value, value.length);
78458
- }
78459
- break;
78460
- case "string":
78461
- default:
78462
- this.dracoMetadataBuilder.AddStringEntry(dracoMetadata, key, value);
78463
- }
78464
- }
78465
- }
78466
- };
78467
- function dracoInt8ArrayToArrayBuffer(dracoData) {
78468
- const byteLength = dracoData.size();
78469
- const outputBuffer = new ArrayBuffer(byteLength);
78470
- const outputData = new Int8Array(outputBuffer);
78471
- for (let i = 0; i < byteLength; ++i) {
78472
- outputData[i] = dracoData.GetValue(i);
78473
- }
78474
- return outputBuffer;
78475
- }
78476
- function getEntries(container) {
78477
- const hasEntriesFunc = container.entries && !container.hasOwnProperty("entries");
78478
- return hasEntriesFunc ? container.entries() : Object.entries(container);
78479
- }
78480
78378
 
78481
- // ../draco/src/draco-writer.ts
78482
- var DEFAULT_DRACO_OPTIONS2 = {
78483
- pointcloud: false,
78484
- attributeNameEntry: "name"
78485
- };
78486
- var DracoWriter = {
78487
- name: "DRACO",
78488
- id: "draco",
78379
+ // ../draco/src/index.ts
78380
+ var DracoWriterWorker = {
78381
+ id: isBrowser2 ? "draco-writer" : "draco-writer-nodejs",
78382
+ name: "Draco compressed geometry writer",
78489
78383
  module: "draco",
78490
- version: VERSION4,
78491
- extensions: ["drc"],
78492
- encode: encode2,
78384
+ version: VERSION5,
78385
+ worker: true,
78493
78386
  options: {
78494
- draco: DEFAULT_DRACO_OPTIONS2
78387
+ draco: {},
78388
+ source: null
78495
78389
  }
78496
78390
  };
78497
- async function encode2(data, options = {}) {
78498
- const { draco } = await loadDracoEncoderModule(options);
78499
- const dracoBuilder = new DracoBuilder(draco);
78500
- try {
78501
- return dracoBuilder.encodeSync(data, options.draco);
78502
- } finally {
78503
- dracoBuilder.destroy();
78504
- }
78505
- }
78506
-
78507
- // ../draco/src/index.ts
78508
78391
  var DracoLoader2 = {
78509
78392
  ...DracoLoader,
78510
78393
  parse: parse2
@@ -79633,15 +79516,15 @@ async function loadDraco(tile, dracoData, options, context) {
79633
79516
  }
79634
79517
 
79635
79518
  // ../gltf/src/lib/utils/version.ts
79636
- var VERSION5 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
79519
+ var VERSION6 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
79637
79520
 
79638
79521
  // ../textures/src/lib/utils/version.ts
79639
- var VERSION6 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "beta";
79522
+ var VERSION7 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "beta";
79640
79523
 
79641
79524
  // ../textures/src/lib/parsers/basis-module-loader.ts
79642
- var VERSION7 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "beta";
79643
- var BASIS_CDN_ENCODER_WASM = `https://unpkg.com/@loaders.gl/textures@${VERSION7}/dist/libs/basis_encoder.wasm`;
79644
- var BASIS_CDN_ENCODER_JS = `https://unpkg.com/@loaders.gl/textures@${VERSION7}/dist/libs/basis_encoder.js`;
79525
+ var VERSION8 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "beta";
79526
+ var BASIS_CDN_ENCODER_WASM = `https://unpkg.com/@loaders.gl/textures@${VERSION8}/dist/libs/basis_encoder.wasm`;
79527
+ var BASIS_CDN_ENCODER_JS = `https://unpkg.com/@loaders.gl/textures@${VERSION8}/dist/libs/basis_encoder.js`;
79645
79528
  var loadBasisTranscoderPromise;
79646
79529
  async function loadBasisTrascoderModule(options) {
79647
79530
  const modules = options.modules || {};
@@ -80137,7 +80020,7 @@ var BasisWorkerLoader = {
80137
80020
  name: "Basis",
80138
80021
  id: "basis",
80139
80022
  module: "textures",
80140
- version: VERSION6,
80023
+ version: VERSION7,
80141
80024
  worker: true,
80142
80025
  extensions: ["basis", "ktx2"],
80143
80026
  mimeTypes: ["application/octet-stream", "image/ktx2"],
@@ -80450,7 +80333,7 @@ var CompressedTextureWorkerLoader = {
80450
80333
  name: "Texture Containers",
80451
80334
  id: "compressed-texture",
80452
80335
  module: "textures",
80453
- version: VERSION6,
80336
+ version: VERSION7,
80454
80337
  worker: true,
80455
80338
  extensions: [
80456
80339
  "ktx",
@@ -80487,51 +80370,8 @@ var CompressedTextureLoader = {
80487
80370
  }
80488
80371
  };
80489
80372
 
80490
- // ../textures/src/lib/encoders/encode-ktx2-basis-texture.ts
80491
- async function encodeKTX2BasisTexture(image, options = {}) {
80492
- const { useSRGB = false, qualityLevel = 10, encodeUASTC = false, mipmaps = false } = options;
80493
- const { BasisEncoder } = await loadBasisEncoderModule(options);
80494
- const basisEncoder = new BasisEncoder();
80495
- try {
80496
- const basisFileData = new Uint8Array(image.width * image.height * 4);
80497
- basisEncoder.setCreateKTX2File(true);
80498
- basisEncoder.setKTX2UASTCSupercompression(true);
80499
- basisEncoder.setKTX2SRGBTransferFunc(true);
80500
- basisEncoder.setSliceSourceImage(0, image.data, image.width, image.height, false);
80501
- basisEncoder.setPerceptual(useSRGB);
80502
- basisEncoder.setMipSRGB(useSRGB);
80503
- basisEncoder.setQualityLevel(qualityLevel);
80504
- basisEncoder.setUASTC(encodeUASTC);
80505
- basisEncoder.setMipGen(mipmaps);
80506
- const numOutputBytes = basisEncoder.encode(basisFileData);
80507
- const actualKTX2FileData = basisFileData.subarray(0, numOutputBytes).buffer;
80508
- return actualKTX2FileData;
80509
- } catch (error) {
80510
- console.error("Basis Universal Supercompressed GPU Texture encoder Error: ", error);
80511
- throw error;
80512
- } finally {
80513
- basisEncoder.delete();
80514
- }
80515
- }
80516
-
80517
- // ../textures/src/ktx2-basis-universal-texture-writer.ts
80518
- var KTX2BasisUniversalTextureWriter = {
80519
- name: "Basis Universal Supercompressed GPU Texture",
80520
- id: "ktx2-basis-supercompressed-texture",
80521
- module: "textures",
80522
- version: VERSION6,
80523
- extensions: ["ktx2"],
80524
- options: {
80525
- useSRGB: false,
80526
- qualityLevel: 10,
80527
- encodeUASTC: false,
80528
- mipmaps: false
80529
- },
80530
- encode: encodeKTX2BasisTexture
80531
- };
80532
-
80533
80373
  // ../images/src/lib/utils/version.ts
80534
- var VERSION8 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
80374
+ var VERSION9 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
80535
80375
 
80536
80376
  // ../images/src/lib/category-api/image-type.ts
80537
80377
  var { _parseImageNode } = globalThis;
@@ -80873,7 +80713,7 @@ var ImageLoader = {
80873
80713
  id: "image",
80874
80714
  module: "images",
80875
80715
  name: "Images",
80876
- version: VERSION8,
80716
+ version: VERSION9,
80877
80717
  mimeTypes: MIME_TYPES,
80878
80718
  extensions: EXTENSIONS,
80879
80719
  parse: parseImage,
@@ -80936,7 +80776,7 @@ var ImageWriter = {
80936
80776
  name: "Images",
80937
80777
  id: "image",
80938
80778
  module: "images",
80939
- version: VERSION8,
80779
+ version: VERSION9,
80940
80780
  extensions: ["jpeg"],
80941
80781
  options: {
80942
80782
  image: {
@@ -80982,6 +80822,22 @@ function checkWebPSupport() {
80982
80822
  }
80983
80823
  }
80984
80824
 
80825
+ // ../textures/src/index.ts
80826
+ var KTX2BasisWriterWorker = {
80827
+ name: "Basis Universal Supercompressed GPU Texture",
80828
+ id: isBrowser ? "ktx2-basis-writer" : "ktx2-basis-writer-nodejs",
80829
+ module: "textures",
80830
+ version: VERSION7,
80831
+ extensions: ["ktx2"],
80832
+ worker: true,
80833
+ options: {
80834
+ useSRGB: false,
80835
+ qualityLevel: 10,
80836
+ encodeUASTC: false,
80837
+ mipmaps: false
80838
+ }
80839
+ };
80840
+
80985
80841
  // ../gltf/src/lib/utils/assert.ts
80986
80842
  function assert6(condition, message) {
80987
80843
  if (!condition) {
@@ -81017,8 +80873,7 @@ function getTypedArrayForBufferView(json, buffers, bufferViewIndex) {
81017
80873
  var EXT_meshopt_compression_exports = {};
81018
80874
  __export(EXT_meshopt_compression_exports, {
81019
80875
  decode: () => decode2,
81020
- name: () => name,
81021
- preprocess: () => preprocess
80876
+ name: () => name
81022
80877
  });
81023
80878
 
81024
80879
  // ../gltf/src/lib/gltf-utils/gltf-utils.ts
@@ -81467,7 +81322,6 @@ var GLTFScenegraph = class {
81467
81322
  };
81468
81323
 
81469
81324
  // ../gltf/src/meshopt/meshopt-decoder.ts
81470
- var isWebAssemblySupported = typeof WebAssembly !== "object";
81471
81325
  var wasm_base = "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";
81472
81326
  var wasm_simd = "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";
81473
81327
  var detector = new Uint8Array([
@@ -81603,9 +81457,6 @@ var DECODERS = {
81603
81457
  TRIANGLES: "meshopt_decodeIndexBuffer",
81604
81458
  INDICES: "meshopt_decodeIndexSequence"
81605
81459
  };
81606
- function isMeshoptSupported() {
81607
- return isWebAssemblySupported;
81608
- }
81609
81460
  async function meshoptDecodeGltfBuffer(target, count, size, source, mode, filter = "NONE") {
81610
81461
  const instance = await loadWasmInstance();
81611
81462
  decode(instance, instance.exports[DECODERS[mode]], target, count, size, source, instance.exports[FILTERS[filter || "NONE"]]);
@@ -81660,12 +81511,6 @@ function decode(instance, fun, target, count, size, source, filter) {
81660
81511
  // ../gltf/src/lib/extensions/EXT_meshopt_compression.ts
81661
81512
  var EXT_MESHOPT_COMPRESSION = "EXT_meshopt_compression";
81662
81513
  var name = EXT_MESHOPT_COMPRESSION;
81663
- function preprocess(gltfData) {
81664
- const scenegraph = new GLTFScenegraph(gltfData);
81665
- if (scenegraph.getRequiredExtensions().includes(EXT_MESHOPT_COMPRESSION) && !isMeshoptSupported()) {
81666
- throw new Error(`gltf: Required extension ${EXT_MESHOPT_COMPRESSION} not supported by browser`);
81667
- }
81668
- }
81669
81514
  async function decode2(gltfData, options) {
81670
81515
  const scenegraph = new GLTFScenegraph(gltfData);
81671
81516
  if (!options?.gltf?.decompressMeshes) {
@@ -81681,18 +81526,19 @@ async function decode2(gltfData, options) {
81681
81526
  async function decodeMeshoptBufferView(scenegraph, bufferView) {
81682
81527
  const meshoptExtension = scenegraph.getObjectExtension(bufferView, EXT_MESHOPT_COMPRESSION);
81683
81528
  if (meshoptExtension) {
81684
- const buffer = bufferView.buffer;
81685
81529
  const {
81686
81530
  byteOffset = 0,
81687
81531
  byteLength = 0,
81688
81532
  byteStride,
81689
81533
  count,
81690
81534
  mode,
81691
- filter = "NONE"
81535
+ filter = "NONE",
81536
+ buffer: bufferIndex
81692
81537
  } = meshoptExtension;
81693
- const source = new Uint8Array(buffer, byteOffset, byteLength);
81694
- const result = new ArrayBuffer(count * byteStride);
81695
- await meshoptDecodeGltfBuffer(new Uint8Array(result), count, byteStride, source, mode, filter);
81538
+ const buffer = scenegraph.gltf.buffers[bufferIndex];
81539
+ const source = new Uint8Array(buffer.arrayBuffer, buffer.byteOffset + byteOffset, byteLength);
81540
+ const result = new Uint8Array(scenegraph.gltf.buffers[bufferView.buffer].arrayBuffer, bufferView.byteOffset, bufferView.byteLength);
81541
+ await meshoptDecodeGltfBuffer(result, count, byteStride, source, mode, filter);
81696
81542
  return result;
81697
81543
  }
81698
81544
  return null;
@@ -81702,11 +81548,11 @@ async function decodeMeshoptBufferView(scenegraph, bufferView) {
81702
81548
  var EXT_texture_webp_exports = {};
81703
81549
  __export(EXT_texture_webp_exports, {
81704
81550
  name: () => name2,
81705
- preprocess: () => preprocess2
81551
+ preprocess: () => preprocess
81706
81552
  });
81707
81553
  var EXT_TEXTURE_WEBP = "EXT_texture_webp";
81708
81554
  var name2 = EXT_TEXTURE_WEBP;
81709
- function preprocess2(gltfData, options) {
81555
+ function preprocess(gltfData, options) {
81710
81556
  const scenegraph = new GLTFScenegraph(gltfData);
81711
81557
  if (!_isImageFormatSupported("image/webp")) {
81712
81558
  if (scenegraph.getRequiredExtensions().includes(EXT_TEXTURE_WEBP)) {
@@ -81729,11 +81575,11 @@ function preprocess2(gltfData, options) {
81729
81575
  var KHR_texture_basisu_exports = {};
81730
81576
  __export(KHR_texture_basisu_exports, {
81731
81577
  name: () => name3,
81732
- preprocess: () => preprocess3
81578
+ preprocess: () => preprocess2
81733
81579
  });
81734
81580
  var KHR_TEXTURE_BASISU = "KHR_texture_basisu";
81735
81581
  var name3 = KHR_TEXTURE_BASISU;
81736
- function preprocess3(gltfData, options) {
81582
+ function preprocess2(gltfData, options) {
81737
81583
  const scene = new GLTFScenegraph(gltfData);
81738
81584
  const { json } = scene;
81739
81585
  for (const texture of json.textures || []) {
@@ -81750,9 +81596,9 @@ function preprocess3(gltfData, options) {
81750
81596
  var KHR_draco_mesh_compression_exports = {};
81751
81597
  __export(KHR_draco_mesh_compression_exports, {
81752
81598
  decode: () => decode3,
81753
- encode: () => encode3,
81599
+ encode: () => encode2,
81754
81600
  name: () => name4,
81755
- preprocess: () => preprocess4
81601
+ preprocess: () => preprocess3
81756
81602
  });
81757
81603
 
81758
81604
  // ../gltf/src/lib/gltf-utils/gltf-attribute-utils.ts
@@ -81811,7 +81657,7 @@ function toTypedArray(array, ArrayType, convertTypedArrays = false) {
81811
81657
  // ../gltf/src/lib/extensions/KHR_draco_mesh_compression.ts
81812
81658
  var KHR_DRACO_MESH_COMPRESSION = "KHR_draco_mesh_compression";
81813
81659
  var name4 = KHR_DRACO_MESH_COMPRESSION;
81814
- function preprocess4(gltfData, options, context) {
81660
+ function preprocess3(gltfData, options, context) {
81815
81661
  const scenegraph = new GLTFScenegraph(gltfData);
81816
81662
  for (const primitive of makeMeshPrimitiveIterator(scenegraph)) {
81817
81663
  if (scenegraph.getObjectExtension(primitive, KHR_DRACO_MESH_COMPRESSION)) {
@@ -81832,7 +81678,7 @@ async function decode3(gltfData, options, context) {
81832
81678
  await Promise.all(promises);
81833
81679
  scenegraph.removeExtension(KHR_DRACO_MESH_COMPRESSION);
81834
81680
  }
81835
- function encode3(gltfData, options = {}) {
81681
+ function encode2(gltfData, options = {}) {
81836
81682
  const scenegraph = new GLTFScenegraph(gltfData);
81837
81683
  for (const mesh of scenegraph.json.meshes || []) {
81838
81684
  compressMesh(mesh, options);
@@ -81908,7 +81754,7 @@ function* makeMeshPrimitiveIterator(scenegraph) {
81908
81754
  var KHR_lights_punctual_exports = {};
81909
81755
  __export(KHR_lights_punctual_exports, {
81910
81756
  decode: () => decode4,
81911
- encode: () => encode4,
81757
+ encode: () => encode3,
81912
81758
  name: () => name5
81913
81759
  });
81914
81760
  var KHR_LIGHTS_PUNCTUAL = "KHR_lights_punctual";
@@ -81929,7 +81775,7 @@ async function decode4(gltfData) {
81929
81775
  gltfScenegraph.removeObjectExtension(node2, KHR_LIGHTS_PUNCTUAL);
81930
81776
  }
81931
81777
  }
81932
- async function encode4(gltfData) {
81778
+ async function encode3(gltfData) {
81933
81779
  const gltfScenegraph = new GLTFScenegraph(gltfData);
81934
81780
  const { json } = gltfScenegraph;
81935
81781
  if (json.lights) {
@@ -81951,7 +81797,7 @@ async function encode4(gltfData) {
81951
81797
  var KHR_materials_unlit_exports = {};
81952
81798
  __export(KHR_materials_unlit_exports, {
81953
81799
  decode: () => decode5,
81954
- encode: () => encode5,
81800
+ encode: () => encode4,
81955
81801
  name: () => name6
81956
81802
  });
81957
81803
  var KHR_MATERIALS_UNLIT = "KHR_materials_unlit";
@@ -81968,7 +81814,7 @@ async function decode5(gltfData) {
81968
81814
  gltfScenegraph.removeObjectExtension(material, KHR_MATERIALS_UNLIT);
81969
81815
  }
81970
81816
  }
81971
- function encode5(gltfData) {
81817
+ function encode4(gltfData) {
81972
81818
  const gltfScenegraph = new GLTFScenegraph(gltfData);
81973
81819
  const { json } = gltfScenegraph;
81974
81820
  if (gltfScenegraph.materials) {
@@ -81986,7 +81832,7 @@ function encode5(gltfData) {
81986
81832
  var KHR_techniques_webgl_exports = {};
81987
81833
  __export(KHR_techniques_webgl_exports, {
81988
81834
  decode: () => decode6,
81989
- encode: () => encode6,
81835
+ encode: () => encode5,
81990
81836
  name: () => name7
81991
81837
  });
81992
81838
  var KHR_TECHNIQUES_WEBGL = "KHR_techniques_webgl";
@@ -82008,7 +81854,7 @@ async function decode6(gltfData) {
82008
81854
  gltfScenegraph.removeExtension(KHR_TECHNIQUES_WEBGL);
82009
81855
  }
82010
81856
  }
82011
- async function encode6(gltfData, options) {
81857
+ async function encode5(gltfData, options) {
82012
81858
  }
82013
81859
  function resolveTechniques(techniquesExtension, gltfScenegraph) {
82014
81860
  const { programs = [], shaders = [], techniques = [] } = techniquesExtension;
@@ -82074,7 +81920,7 @@ function useExtension(extensionName, options) {
82074
81920
 
82075
81921
  // ../gltf/src/lib/extensions/KHR_binary_gltf.ts
82076
81922
  var KHR_BINARY_GLTF = "KHR_binary_glTF";
82077
- function preprocess5(gltfData) {
81923
+ function preprocess4(gltfData) {
82078
81924
  const gltfScenegraph = new GLTFScenegraph(gltfData);
82079
81925
  const { json } = gltfScenegraph;
82080
81926
  for (const image of json.images || []) {
@@ -82155,7 +82001,7 @@ var GLTFV1Normalizer = class {
82155
82001
  console.warn("Converting glTF v1 to glTF v2 format. This is experimental and may fail.");
82156
82002
  this._addAsset(json);
82157
82003
  this._convertTopLevelObjectsToArrays(json);
82158
- preprocess5(gltf);
82004
+ preprocess4(gltf);
82159
82005
  this._convertObjectIdsToArrayIndices(json);
82160
82006
  this._updateObjects(json);
82161
82007
  this._updateMaterial(json);
@@ -82272,7 +82118,7 @@ var GLTFV1Normalizer = class {
82272
82118
  metallicFactor: 1,
82273
82119
  roughnessFactor: 1
82274
82120
  };
82275
- const textureId = material.values && material.values.tex;
82121
+ const textureId = material.values?.tex || material.values?.texture2d_0;
82276
82122
  const textureIndex = json.textures.findIndex((texture) => texture.id === textureId);
82277
82123
  if (textureIndex !== -1) {
82278
82124
  material.pbrMetallicRoughness.baseColorTexture = { index: textureIndex };
@@ -82772,6 +82618,12 @@ async function loadBuffers(gltf, options, context) {
82772
82618
  byteLength: arrayBuffer.byteLength
82773
82619
  };
82774
82620
  delete buffer.uri;
82621
+ } else if (gltf.buffers[i] === null) {
82622
+ gltf.buffers[i] = {
82623
+ arrayBuffer: new ArrayBuffer(buffer.byteLength),
82624
+ byteOffset: 0,
82625
+ byteLength: buffer.byteLength
82626
+ };
82775
82627
  }
82776
82628
  }
82777
82629
  }
@@ -82826,7 +82678,7 @@ var GLTFLoader = {
82826
82678
  name: "glTF",
82827
82679
  id: "gltf",
82828
82680
  module: "gltf",
82829
- version: VERSION5,
82681
+ version: VERSION6,
82830
82682
  extensions: ["gltf", "glb"],
82831
82683
  mimeTypes: ["model/gltf+json", "model/gltf-binary"],
82832
82684
  text: true,
@@ -82924,7 +82776,7 @@ var GLTFWriter = {
82924
82776
  name: "glTF",
82925
82777
  id: "gltf",
82926
82778
  module: "gltf",
82927
- version: VERSION5,
82779
+ version: VERSION6,
82928
82780
  extensions: ["glb"],
82929
82781
  mimeTypes: ["model/gltf-binary"],
82930
82782
  binary: true,
@@ -83020,7 +82872,7 @@ function parseBatchedModel(tile, arrayBuffer, byteOffset, options, context) {
83020
82872
 
83021
82873
  // ../3d-tiles/src/lib/parsers/parse-3d-tile-instanced-model.ts
83022
82874
  var import_core15 = __toModule(require_es56());
83023
- var import_geospatial6 = __toModule(require_es57());
82875
+ var import_geospatial7 = __toModule(require_es57());
83024
82876
  async function parseInstancedModel3DTile(tile, arrayBuffer, byteOffset, options, context) {
83025
82877
  byteOffset = parseInstancedModel(tile, arrayBuffer, byteOffset, options, context);
83026
82878
  await extractGLTF(tile, tile.gltfFormat, options, context);
@@ -83118,7 +82970,7 @@ function extractInstancedAttributes(tile, featureTable, batchTable, instancesLen
83118
82970
  }
83119
82971
  throw new Error("i3dm: oct-encoded orientation not implemented");
83120
82972
  } else if (tile.eastNorthUp) {
83121
- import_geospatial6.Ellipsoid.WGS84.eastNorthUpToFixedFrame(instancePosition, instanceTransform);
82973
+ import_geospatial7.Ellipsoid.WGS84.eastNorthUpToFixedFrame(instancePosition, instanceTransform);
83122
82974
  instanceTransform.getRotationMatrix3(instanceRotation);
83123
82975
  } else {
83124
82976
  instanceRotation.identity();
@@ -83259,7 +83111,7 @@ var Tile3DSubtreeLoader = {
83259
83111
  id: "3d-tiles-subtree",
83260
83112
  name: "3D Tiles Subtree",
83261
83113
  module: "3d-tiles",
83262
- version: VERSION3,
83114
+ version: VERSION4,
83263
83115
  extensions: ["subtree"],
83264
83116
  mimeTypes: ["application/octet-stream"],
83265
83117
  tests: ["subtree"],
@@ -83563,7 +83415,7 @@ var Tiles3DLoader = {
83563
83415
  id: "3d-tiles",
83564
83416
  name: "3D Tiles",
83565
83417
  module: "3d-tiles",
83566
- version: VERSION3,
83418
+ version: VERSION4,
83567
83419
  extensions: ["cmpt", "pnts", "b3dm", "i3dm"],
83568
83420
  mimeTypes: ["application/octet-stream"],
83569
83421
  tests: ["cmpt", "pnts", "b3dm", "i3dm"],
@@ -83858,7 +83710,7 @@ var Tile3DWriter = {
83858
83710
  name: "3D Tile",
83859
83711
  id: "3d-tiles",
83860
83712
  module: "3d-tiles",
83861
- version: VERSION3,
83713
+ version: VERSION4,
83862
83714
  extensions: ["cmpt", "pnts", "b3dm", "i3dm"],
83863
83715
  mimeTypes: ["application/octet-stream"],
83864
83716
  encodeSync: encodeSync3,
@@ -83997,31 +83849,37 @@ var NodePages = class {
83997
83849
  this.updateResourceInMesh(node2);
83998
83850
  return node2.index;
83999
83851
  }
84000
- async save(layers0Path, fileMap, slpk = false) {
83852
+ async save(layers0Path, writeQueue, slpk = false) {
84001
83853
  if (slpk) {
84002
83854
  for (const [index, nodePage] of this.nodePages.entries()) {
84003
83855
  const nodePageStr = JSON.stringify(nodePage);
84004
83856
  const slpkPath = (0, import_path2.join)(layers0Path, "nodepages");
84005
- fileMap[`nodePages/${index.toString()}.json.gz`] = await this.writeFile(slpkPath, nodePageStr, `${index.toString()}.json`);
83857
+ writeQueue.enqueue({
83858
+ archiveKey: `nodePages/${index.toString()}.json.gz`,
83859
+ writePromise: this.writeFile(slpkPath, nodePageStr, `${index.toString()}.json`)
83860
+ });
84006
83861
  }
84007
83862
  const metadata = (0, import_json_map_transform.default)({ nodeCount: this.nodesCounter }, METADATA());
84008
83863
  const compress = false;
84009
- fileMap["metadata.json"] = await this.writeFile(layers0Path, JSON.stringify(metadata), "metadata.json", compress);
83864
+ writeQueue.enqueue({
83865
+ archiveKey: "metadata.json",
83866
+ writePromise: this.writeFile(layers0Path, JSON.stringify(metadata), "metadata.json", compress)
83867
+ });
84010
83868
  } else {
84011
83869
  for (const [index, nodePage] of this.nodePages.entries()) {
84012
83870
  const nodePageStr = JSON.stringify(nodePage);
84013
83871
  const nodePagePath = (0, import_path2.join)(layers0Path, "nodepages", index.toString());
84014
- await this.writeFile(nodePagePath, nodePageStr);
83872
+ writeQueue.enqueue({ writePromise: this.writeFile(nodePagePath, nodePageStr) });
84015
83873
  }
84016
83874
  }
84017
83875
  }
84018
83876
  };
84019
83877
 
84020
- // src/lib/utils/file-utils.js
83878
+ // src/lib/utils/file-utils.ts
84021
83879
  var import_fs3 = __toModule(require("fs"));
84022
83880
  var import_path4 = __toModule(require("path"));
84023
83881
 
84024
- // src/lib/utils/compress-util.js
83882
+ // src/lib/utils/compress-util.ts
84025
83883
  var import_zlib = __toModule(require("zlib"));
84026
83884
  var import_path3 = __toModule(require("path"));
84027
83885
  var import_fs2 = __toModule(require("fs"));
@@ -84045,11 +83903,11 @@ function compressFileWithGzip(pathFile) {
84045
83903
  input.pipe(gzip).pipe(output);
84046
83904
  });
84047
83905
  }
84048
- async function compressWithChildProcess() {
83906
+ async function compressWithChildProcess(inputFolder, outputFile, level, inputFiles, sevenZipExe) {
84049
83907
  if (process.platform === "win32") {
84050
- await compressWithChildProcessWindows(...arguments);
83908
+ await compressWithChildProcessWindows(inputFolder, outputFile, level, inputFiles, sevenZipExe);
84051
83909
  } else {
84052
- await compressWithChildProcessUnix(...arguments);
83910
+ await compressWithChildProcessUnix(inputFolder, outputFile, level, inputFiles);
84053
83911
  }
84054
83912
  }
84055
83913
  async function compressWithChildProcessUnix(inputFolder, outputFile, level = 0, inputFiles = ".") {
@@ -84082,12 +83940,20 @@ async function compressWithChildProcessWindows(inputFolder, outputFile, level =
84082
83940
  });
84083
83941
  }
84084
83942
 
84085
- // src/lib/utils/file-utils.js
83943
+ // src/lib/utils/file-utils.ts
84086
83944
  async function writeFile3(path2, data, fileName = "index.json") {
83945
+ let toWriteData;
83946
+ if (data instanceof Promise) {
83947
+ toWriteData = new Uint8Array(await data);
83948
+ } else if (data instanceof ArrayBuffer) {
83949
+ toWriteData = new Uint8Array(data);
83950
+ } else {
83951
+ toWriteData = data;
83952
+ }
84087
83953
  await import_fs3.promises.mkdir(path2, { recursive: true });
84088
83954
  const pathFile = (0, import_path4.join)(path2, fileName);
84089
83955
  try {
84090
- await import_fs3.promises.writeFile(pathFile, data);
83956
+ await import_fs3.promises.writeFile(pathFile, toWriteData);
84091
83957
  } catch (err) {
84092
83958
  throw err;
84093
83959
  }
@@ -84113,7 +83979,7 @@ function getAbsoluteFilePath(filePath) {
84113
83979
  return (0, import_path4.isAbsolute)(filePath) ? filePath : (0, import_path4.join)(process.cwd(), filePath);
84114
83980
  }
84115
83981
 
84116
- // src/lib/utils/statistic-utills.js
83982
+ // src/lib/utils/statistic-utills.ts
84117
83983
  var import_path5 = __toModule(require("path"));
84118
83984
  var import_fs4 = __toModule(require("fs"));
84119
83985
  function timeConverter(time) {
@@ -84171,16 +84037,17 @@ async function getTotalFilesSize(dirPath) {
84171
84037
  return totalFileSize;
84172
84038
  }
84173
84039
 
84174
- // src/i3s-converter/helpers/geometry-converter.js
84040
+ // src/i3s-converter/helpers/geometry-converter.ts
84175
84041
  var import_core21 = __toModule(require_es56());
84176
- var import_geospatial8 = __toModule(require_es57());
84042
+ var import_geospatial9 = __toModule(require_es57());
84177
84043
  var import_md5 = __toModule(require_md52());
84178
84044
 
84179
84045
  // src/i3s-converter/helpers/geometry-attributes.ts
84180
84046
  var VALUES_PER_VERTEX = 3;
84181
84047
  var POSITIONS_AND_NORMALS_PER_TRIANGLE = 9;
84182
84048
  function generateAttributes(attributes) {
84183
- const { positions, normals, texCoords, colors, featureIndices, triangleCount } = attributes;
84049
+ const { positions, normals, texCoords, colors, featureIndices } = attributes;
84050
+ const triangleCount = positions.length / POSITIONS_AND_NORMALS_PER_TRIANGLE;
84184
84051
  if (!featureIndices.length) {
84185
84052
  return {
84186
84053
  faceRange: new Uint32Array([0, triangleCount - 1]),
@@ -84325,14 +84192,14 @@ function groupAttributesAndRangesByFeatureId(unifiedObjects, featureCount) {
84325
84192
 
84326
84193
  // src/i3s-converter/helpers/coordinate-converter.ts
84327
84194
  var import_core20 = __toModule(require_es56());
84328
- var import_geospatial7 = __toModule(require_es57());
84195
+ var import_geospatial8 = __toModule(require_es57());
84329
84196
  var import_culling5 = __toModule(require_es58());
84330
84197
  function createBoundingVolumes(tile, geoidHeightModel) {
84331
84198
  let radius;
84332
84199
  let halfSize;
84333
84200
  let quaternion;
84334
84201
  const boundingVolume = tile.boundingVolume;
84335
- const cartographicCenter = import_geospatial7.Ellipsoid.WGS84.cartesianToCartographic(boundingVolume.center, new import_core20.Vector3());
84202
+ const cartographicCenter = import_geospatial8.Ellipsoid.WGS84.cartesianToCartographic(boundingVolume.center, new import_core20.Vector3());
84336
84203
  cartographicCenter[2] = cartographicCenter[2] - geoidHeightModel.getHeight(cartographicCenter[1], cartographicCenter[0]);
84337
84204
  if (boundingVolume instanceof import_culling5.OrientedBoundingBox) {
84338
84205
  halfSize = boundingVolume.halfSize;
@@ -84356,8 +84223,8 @@ function createBoundingVolumesFromGeometry(cartesianPositions, geoidHeightModel)
84356
84223
  const positionVectors = convertPositionsToVectors(cartesianPositions);
84357
84224
  const geometryObb = (0, import_culling5.makeOrientedBoundingBoxFromPoints)(positionVectors);
84358
84225
  const geometryMbs = (0, import_culling5.makeBoundingSphereFromPoints)(positionVectors);
84359
- let mbsCenter = import_geospatial7.Ellipsoid.WGS84.cartesianToCartographic(geometryMbs.center, new import_core20.Vector3());
84360
- let obbCenter = import_geospatial7.Ellipsoid.WGS84.cartesianToCartographic(geometryObb.center, new import_core20.Vector3());
84226
+ let mbsCenter = import_geospatial8.Ellipsoid.WGS84.cartesianToCartographic(geometryMbs.center, new import_core20.Vector3());
84227
+ let obbCenter = import_geospatial8.Ellipsoid.WGS84.cartesianToCartographic(geometryObb.center, new import_core20.Vector3());
84361
84228
  mbsCenter[2] = mbsCenter[2] - geoidHeightModel.getHeight(mbsCenter[1], mbsCenter[0]);
84362
84229
  obbCenter[2] = obbCenter[2] - geoidHeightModel.getHeight(obbCenter[1], obbCenter[0]);
84363
84230
  return {
@@ -84377,22 +84244,25 @@ function convertPositionsToVectors(positions) {
84377
84244
  }
84378
84245
  return result;
84379
84246
  }
84380
- function convertCommonToI3SExtentCoordinate(tileset) {
84381
- const cartesianCenter = tileset?.cartesianCenter;
84382
- if (!cartesianCenter) {
84383
- return null;
84247
+ function convertBoundingVolumeToI3SFullExtent(boundingVolume) {
84248
+ let sphere;
84249
+ if (boundingVolume instanceof import_culling5.BoundingSphere) {
84250
+ sphere = boundingVolume;
84251
+ } else {
84252
+ sphere = boundingVolume.getBoundingSphere();
84384
84253
  }
84385
- const radius = tileset?.lodMetricValue;
84386
- const rightTop = import_geospatial7.Ellipsoid.WGS84.cartesianToCartographic(new import_core20.Vector3(cartesianCenter[0] + radius, cartesianCenter[1] + radius, cartesianCenter[2]), new import_core20.Vector3());
84387
- const leftBottom = import_geospatial7.Ellipsoid.WGS84.cartesianToCartographic(new import_core20.Vector3(cartesianCenter[0] - radius, cartesianCenter[1] - radius, cartesianCenter[2]), new import_core20.Vector3());
84388
- const isFirstRight = rightTop[0] < leftBottom[0];
84389
- const isFirstTop = rightTop[1] < leftBottom[1];
84390
- return [
84391
- isFirstRight ? rightTop[0] : leftBottom[0],
84392
- isFirstTop ? rightTop[1] : leftBottom[1],
84393
- isFirstRight ? leftBottom[0] : rightTop[0],
84394
- isFirstTop ? leftBottom[1] : rightTop[1]
84395
- ];
84254
+ const center = sphere.center;
84255
+ const radius = sphere.radius;
84256
+ const vertexMax = import_geospatial8.Ellipsoid.WGS84.cartesianToCartographic(new import_core20.Vector3(center[0] + radius, center[1] + radius, center[2] + radius), new import_core20.Vector3());
84257
+ const vertexMin = import_geospatial8.Ellipsoid.WGS84.cartesianToCartographic(new import_core20.Vector3(center[0] - radius, center[1] - radius, center[2] - radius), new import_core20.Vector3());
84258
+ return {
84259
+ xmin: vertexMin[0],
84260
+ xmax: vertexMax[0],
84261
+ ymin: vertexMin[1],
84262
+ ymax: vertexMax[1],
84263
+ zmin: vertexMin[2],
84264
+ zmax: vertexMax[2]
84265
+ };
84396
84266
  }
84397
84267
  function createObbFromMbs(mbs) {
84398
84268
  const radius = mbs[3];
@@ -84401,7 +84271,49 @@ function createObbFromMbs(mbs) {
84401
84271
  return new import_culling5.OrientedBoundingBox(center, halfAxex);
84402
84272
  }
84403
84273
 
84404
- // src/i3s-converter/helpers/geometry-converter.js
84274
+ // src/i3s-converter/helpers/gltf-attributes.ts
84275
+ function getB3DMAttributesWithoutBufferView(attributes) {
84276
+ const attributesWithoutBufferView = {};
84277
+ for (const attributeName in attributes) {
84278
+ attributesWithoutBufferView[attributeName] = {
84279
+ value: attributes[attributeName].value
84280
+ };
84281
+ }
84282
+ return attributesWithoutBufferView;
84283
+ }
84284
+ function prepareDataForAttributesConversion(tileContent) {
84285
+ const gltfMaterials = tileContent.gltf?.materials?.map((material) => ({ id: material.id }));
84286
+ let nodes = tileContent.gltf?.scene?.nodes || tileContent.gltf?.scenes?.[0]?.nodes || tileContent.gltf?.nodes || [];
84287
+ const prepearedNodes = nodes.map((node2) => {
84288
+ if (!node2.mesh) {
84289
+ return node2;
84290
+ }
84291
+ return {
84292
+ ...node2,
84293
+ mesh: {
84294
+ ...node2.mesh,
84295
+ primitives: node2.mesh?.primitives.map((primitive) => ({
84296
+ ...primitive,
84297
+ indices: { value: primitive?.indices?.value },
84298
+ attributes: getB3DMAttributesWithoutBufferView(primitive.attributes),
84299
+ material: {
84300
+ id: primitive?.material?.id
84301
+ }
84302
+ }))
84303
+ }
84304
+ };
84305
+ });
84306
+ const cartographicOrigin = tileContent.cartographicOrigin;
84307
+ const cartesianModelMatrix = tileContent.cartesianModelMatrix;
84308
+ return {
84309
+ gltfMaterials,
84310
+ nodes: prepearedNodes,
84311
+ cartographicOrigin,
84312
+ cartesianModelMatrix
84313
+ };
84314
+ }
84315
+
84316
+ // src/i3s-converter/helpers/geometry-converter.ts
84405
84317
  var DEFAULT_ROUGHNESS_FACTOR = 1;
84406
84318
  var DEFAULT_METALLIC_FACTOR = 1;
84407
84319
  var VALUES_PER_VERTEX2 = 3;
@@ -84413,10 +84325,11 @@ var DOUBLE_TYPE = "Float64";
84413
84325
  var OBJECT_ID_TYPE = "Oid32";
84414
84326
  var BATCHED_ID_POSSIBLE_ATTRIBUTE_NAMES = ["CUSTOM_ATTRIBUTE_2", "_BATCHID", "BATCHID"];
84415
84327
  var scratchVector4 = new import_core21.Vector3();
84416
- async function convertB3dmToI3sGeometry(tileContent, nodeId, featuresHashArray, attributeStorageInfo, draco, generateBoundingVolumes, geoidHeightModel) {
84328
+ async function convertB3dmToI3sGeometry(tileContent, nodeId, featuresHashArray, attributeStorageInfo, draco, generateBoundingVolumes, geoidHeightModel, workerSource) {
84417
84329
  const useCartesianPositions = generateBoundingVolumes;
84418
- const materialAndTextureList = convertMaterials(tileContent);
84419
- const convertedAttributesMap = convertAttributes(tileContent, useCartesianPositions);
84330
+ const materialAndTextureList = convertMaterials(tileContent.gltf?.materials);
84331
+ const dataForAttributesConversion = prepareDataForAttributesConversion(tileContent);
84332
+ const convertedAttributesMap = await convertAttributes(dataForAttributesConversion, useCartesianPositions);
84420
84333
  if (generateBoundingVolumes) {
84421
84334
  _generateBoundingVolumesFromGeometry(convertedAttributesMap, geoidHeightModel);
84422
84335
  }
@@ -84427,7 +84340,7 @@ async function convertB3dmToI3sGeometry(tileContent, nodeId, featuresHashArray,
84427
84340
  }
84428
84341
  const result = [];
84429
84342
  let nodesCounter = nodeId;
84430
- let { materials = [] } = tileContent.gltf;
84343
+ let { materials = [] } = tileContent.gltf || { materials: [] };
84431
84344
  if (!materials?.length) {
84432
84345
  materials.push({ id: "default" });
84433
84346
  }
@@ -84437,6 +84350,9 @@ async function convertB3dmToI3sGeometry(tileContent, nodeId, featuresHashArray,
84437
84350
  continue;
84438
84351
  }
84439
84352
  const convertedAttributes = convertedAttributesMap.get(sourceMaterial.id);
84353
+ if (!convertedAttributes) {
84354
+ continue;
84355
+ }
84440
84356
  const { material, texture } = materialAndTextureList[i];
84441
84357
  result.push(await _makeNodeResources({
84442
84358
  convertedAttributes,
@@ -84446,7 +84362,8 @@ async function convertB3dmToI3sGeometry(tileContent, nodeId, featuresHashArray,
84446
84362
  nodeId: nodesCounter,
84447
84363
  featuresHashArray,
84448
84364
  attributeStorageInfo,
84449
- draco
84365
+ draco,
84366
+ workerSource
84450
84367
  }));
84451
84368
  nodesCounter++;
84452
84369
  }
@@ -84462,7 +84379,7 @@ function _generateBoundingVolumesFromGeometry(convertedAttributesMap, geoidHeigh
84462
84379
  const cartographicOrigin = boundingVolumes.obb.center;
84463
84380
  for (let index = 0; index < attributes.positions.length; index += VALUES_PER_VERTEX2) {
84464
84381
  const vertex = attributes.positions.subarray(index, index + VALUES_PER_VERTEX2);
84465
- import_geospatial8.Ellipsoid.WGS84.cartesianToCartographic(Array.from(vertex), scratchVector4);
84382
+ import_geospatial9.Ellipsoid.WGS84.cartesianToCartographic(Array.from(vertex), scratchVector4);
84466
84383
  scratchVector4[2] = scratchVector4[2] - geoidHeightModel.getHeight(scratchVector4[1], scratchVector4[0]);
84467
84384
  scratchVector4 = scratchVector4.subtract(cartographicOrigin);
84468
84385
  attributes.positions.set(scratchVector4, index);
@@ -84477,12 +84394,12 @@ async function _makeNodeResources({
84477
84394
  nodeId,
84478
84395
  featuresHashArray,
84479
84396
  attributeStorageInfo,
84480
- draco
84397
+ draco,
84398
+ workerSource
84481
84399
  }) {
84482
84400
  const boundingVolumes = convertedAttributes.boundingVolumes;
84483
84401
  const vertexCount = convertedAttributes.positions.length / VALUES_PER_VERTEX2;
84484
- const triangleCount = vertexCount / 3;
84485
- const { faceRange, featureIds, positions, normals, colors, texCoords, featureCount } = generateAttributes({ triangleCount, ...convertedAttributes });
84402
+ const { faceRange, featureIds, positions, normals, colors, texCoords, featureCount } = generateAttributes(convertedAttributes);
84486
84403
  if (tileContent.batchTableJson) {
84487
84404
  makeFeatureIdsUnique(featureIds, convertedAttributes.featureIndices, featuresHashArray, tileContent.batchTableJson);
84488
84405
  }
@@ -84490,20 +84407,20 @@ async function _makeNodeResources({
84490
84407
  const typedFeatureIds = generateBigUint64Array(featureIds);
84491
84408
  header.set([vertexCount, featureCount], 0);
84492
84409
  const fileBuffer = new Uint8Array(concatenateArrayBuffers(header.buffer, positions.buffer, normals.buffer, texture ? texCoords.buffer : new ArrayBuffer(0), colors.buffer, typedFeatureIds.buffer, faceRange.buffer));
84493
- const compressedGeometry = draco ? await generateCompressedGeometry(vertexCount, convertedAttributes, {
84410
+ const compressedGeometry = draco ? generateCompressedGeometry(vertexCount, convertedAttributes, {
84494
84411
  positions,
84495
84412
  normals,
84496
84413
  texCoords: texture ? texCoords : new Float32Array(0),
84497
84414
  colors,
84498
84415
  featureIds,
84499
84416
  faceRange
84500
- }) : null;
84417
+ }, workerSource.draco) : null;
84501
84418
  const attributes = convertBatchTableToAttributeBuffers(tileContent.batchTableJson, featureIds, attributeStorageInfo);
84502
84419
  return {
84503
84420
  geometry: fileBuffer,
84504
84421
  compressedGeometry,
84505
84422
  texture,
84506
- sharedResources: getSharedResources(tileContent, nodeId),
84423
+ sharedResources: getSharedResources(tileContent.gltf?.materials || [], nodeId),
84507
84424
  meshMaterial: material,
84508
84425
  vertexCount,
84509
84426
  attributes,
@@ -84511,34 +84428,41 @@ async function _makeNodeResources({
84511
84428
  boundingVolumes
84512
84429
  };
84513
84430
  }
84514
- function convertAttributes(tileContent, useCartesianPositions) {
84431
+ async function convertAttributes(attributesData, useCartesianPositions) {
84432
+ const { gltfMaterials, nodes, cartographicOrigin, cartesianModelMatrix } = attributesData;
84515
84433
  const attributesMap = new Map();
84516
- for (const material of tileContent.gltf.materials || [{ id: "default" }]) {
84434
+ for (const material of gltfMaterials || [{ id: "default" }]) {
84517
84435
  attributesMap.set(material.id, {
84518
84436
  positions: new Float32Array(0),
84519
84437
  normals: new Float32Array(0),
84520
84438
  texCoords: new Float32Array(0),
84521
84439
  colors: new Uint8Array(0),
84440
+ featureIndicesGroups: [],
84522
84441
  featureIndices: [],
84523
84442
  boundingVolumes: null
84524
84443
  });
84525
84444
  }
84526
- const nodes = (tileContent.gltf.scene || tileContent.gltf.scenes?.[0] || tileContent.gltf).nodes;
84527
- convertNodes(nodes, tileContent, attributesMap, useCartesianPositions);
84445
+ convertNodes(nodes, cartographicOrigin, cartesianModelMatrix, attributesMap, useCartesianPositions);
84528
84446
  for (const attrKey of attributesMap.keys()) {
84529
84447
  const attributes = attributesMap.get(attrKey);
84448
+ if (!attributes) {
84449
+ continue;
84450
+ }
84530
84451
  if (attributes.positions.length === 0) {
84531
84452
  attributesMap.delete(attrKey);
84532
84453
  continue;
84533
84454
  }
84534
- attributes.featureIndices = attributes.featureIndices.reduce((acc, value) => acc.concat(value));
84455
+ if (attributes.featureIndicesGroups) {
84456
+ attributes.featureIndices = attributes.featureIndicesGroups.reduce((acc, value) => acc.concat(value));
84457
+ delete attributes.featureIndicesGroups;
84458
+ }
84535
84459
  }
84536
84460
  return attributesMap;
84537
84461
  }
84538
- function convertNodes(nodes, tileContent, attributesMap, useCartesianPositions, matrix = new import_core21.Matrix4([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1])) {
84462
+ function convertNodes(nodes, cartographicOrigin, cartesianModelMatrix, attributesMap, useCartesianPositions, matrix = new import_core21.Matrix4([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1])) {
84539
84463
  if (nodes) {
84540
84464
  for (const node2 of nodes) {
84541
- convertNode(node2, tileContent, attributesMap, useCartesianPositions, matrix);
84465
+ convertNode(node2, cartographicOrigin, cartesianModelMatrix, attributesMap, useCartesianPositions, matrix);
84542
84466
  }
84543
84467
  }
84544
84468
  }
@@ -84548,26 +84472,26 @@ function getCompositeTransformationMatrix(node2, matrix) {
84548
84472
  if (nodeMatrix) {
84549
84473
  transformationMatrix = matrix.multiplyRight(nodeMatrix);
84550
84474
  }
84475
+ if (translation) {
84476
+ transformationMatrix = transformationMatrix.translate(translation);
84477
+ }
84551
84478
  if (rotation) {
84552
84479
  transformationMatrix = transformationMatrix.rotateXYZ(rotation);
84553
84480
  }
84554
84481
  if (scale) {
84555
84482
  transformationMatrix = transformationMatrix.scale(scale);
84556
84483
  }
84557
- if (translation) {
84558
- transformationMatrix = transformationMatrix.translate(translation);
84559
- }
84560
84484
  return transformationMatrix;
84561
84485
  }
84562
- function convertNode(node2, tileContent, attributesMap, useCartesianPositions, matrix = new import_core21.Matrix4([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1])) {
84486
+ function convertNode(node2, cartographicOrigin, cartesianModelMatrix, attributesMap, useCartesianPositions, matrix = new import_core21.Matrix4([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1])) {
84563
84487
  const transformationMatrix = getCompositeTransformationMatrix(node2, matrix);
84564
84488
  const mesh = node2.mesh;
84565
84489
  if (mesh) {
84566
- convertMesh(mesh, tileContent, attributesMap, useCartesianPositions, transformationMatrix);
84490
+ convertMesh(mesh, cartographicOrigin, cartesianModelMatrix, attributesMap, useCartesianPositions, transformationMatrix);
84567
84491
  }
84568
- convertNodes(node2.children, tileContent, attributesMap, useCartesianPositions, transformationMatrix);
84492
+ convertNodes(node2.children || [], cartographicOrigin, cartesianModelMatrix, attributesMap, useCartesianPositions, transformationMatrix);
84569
84493
  }
84570
- function convertMesh(mesh, content, attributesMap, useCartesianPositions = false, matrix = new import_core21.Matrix4([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1])) {
84494
+ function convertMesh(mesh, cartographicOrigin, cartesianModelMatrix, attributesMap, useCartesianPositions = false, matrix = new import_core21.Matrix4([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1])) {
84571
84495
  for (const primitive of mesh.primitives) {
84572
84496
  let outputAttributes = null;
84573
84497
  if (primitive.material) {
@@ -84577,27 +84501,31 @@ function convertMesh(mesh, content, attributesMap, useCartesianPositions = false
84577
84501
  }
84578
84502
  assert2(outputAttributes !== null, "Primitive - material mapping failed");
84579
84503
  const attributes = primitive.attributes;
84504
+ if (!outputAttributes) {
84505
+ continue;
84506
+ }
84580
84507
  outputAttributes.positions = concatenateTypedArrays(outputAttributes.positions, transformVertexArray({
84581
84508
  vertices: attributes.POSITION.value,
84582
- cartographicOrigin: content.cartographicOrigin,
84583
- cartesianModelMatrix: content.cartesianModelMatrix,
84509
+ cartographicOrigin,
84510
+ cartesianModelMatrix,
84584
84511
  nodeMatrix: matrix,
84585
- indices: primitive.indices.value,
84512
+ indices: primitive.indices?.value,
84586
84513
  attributeSpecificTransformation: transformVertexPositions,
84587
84514
  useCartesianPositions
84588
84515
  }));
84589
84516
  outputAttributes.normals = concatenateTypedArrays(outputAttributes.normals, transformVertexArray({
84590
84517
  vertices: attributes.NORMAL && attributes.NORMAL.value,
84591
- cartographicOrigin: content.cartographicOrigin,
84592
- cartesianModelMatrix: content.cartesianModelMatrix,
84518
+ cartographicOrigin,
84519
+ cartesianModelMatrix,
84593
84520
  nodeMatrix: matrix,
84594
- indices: primitive.indices.value,
84521
+ indices: primitive.indices?.value,
84595
84522
  attributeSpecificTransformation: transformVertexNormals,
84596
84523
  useCartesianPositions: false
84597
84524
  }));
84598
- outputAttributes.texCoords = concatenateTypedArrays(outputAttributes.texCoords, flattenTexCoords(attributes.TEXCOORD_0 && attributes.TEXCOORD_0.value, primitive.indices.value));
84599
- outputAttributes.colors = concatenateTypedArrays(outputAttributes.colors, flattenColors(attributes.COLOR_0, primitive.indices.value));
84600
- outputAttributes.featureIndices.push(flattenBatchIds(getBatchIdsByAttributeName(attributes), primitive.indices.value));
84525
+ outputAttributes.texCoords = concatenateTypedArrays(outputAttributes.texCoords, flattenTexCoords(attributes.TEXCOORD_0 && attributes.TEXCOORD_0.value, primitive.indices?.value));
84526
+ outputAttributes.colors = concatenateTypedArrays(outputAttributes.colors, flattenColors(attributes.COLOR_0, primitive.indices?.value));
84527
+ outputAttributes.featureIndicesGroups = outputAttributes.featureIndicesGroups || [];
84528
+ outputAttributes.featureIndicesGroups.push(flattenBatchIds(getBatchIdsByAttributeName(attributes), primitive.indices?.value));
84601
84529
  }
84602
84530
  }
84603
84531
  function transformVertexArray(args) {
@@ -84626,7 +84554,7 @@ function transformVertexPositions(vertexVector, calleeArgs) {
84626
84554
  if (useCartesianPositions) {
84627
84555
  return vertexVector;
84628
84556
  }
84629
- import_geospatial8.Ellipsoid.WGS84.cartesianToCartographic([vertexVector[0], vertexVector[1], vertexVector[2]], vertexVector);
84557
+ import_geospatial9.Ellipsoid.WGS84.cartesianToCartographic([vertexVector[0], vertexVector[1], vertexVector[2]], vertexVector);
84630
84558
  vertexVector = vertexVector.subtract(cartographicOrigin);
84631
84559
  return vertexVector;
84632
84560
  }
@@ -84693,9 +84621,8 @@ function getBatchIdsByAttributeName(attributes) {
84693
84621
  }
84694
84622
  return batchIds;
84695
84623
  }
84696
- function convertMaterials(tileContent) {
84624
+ function convertMaterials(sourceMaterials = []) {
84697
84625
  const result = [];
84698
- const sourceMaterials = tileContent.gltf.materials || [];
84699
84626
  for (const sourceMaterial of sourceMaterials) {
84700
84627
  result.push(convertMaterial(sourceMaterial));
84701
84628
  }
@@ -84704,8 +84631,8 @@ function convertMaterials(tileContent) {
84704
84631
  function convertMaterial(sourceMaterial) {
84705
84632
  const material = {
84706
84633
  doubleSided: sourceMaterial.doubleSided,
84707
- emissiveFactor: sourceMaterial.emissiveFactor.map((c) => Math.round(c * 255)),
84708
- alphaMode: (sourceMaterial.alphaMode || "OPAQUE").toLowerCase(),
84634
+ emissiveFactor: sourceMaterial.emissiveFactor?.map((c) => Math.round(c * 255)),
84635
+ alphaMode: convertAlphaMode(sourceMaterial.alphaMode),
84709
84636
  pbrMetallicRoughness: {
84710
84637
  roughnessFactor: sourceMaterial?.pbrMetallicRoughness?.roughnessFactor || DEFAULT_ROUGHNESS_FACTOR,
84711
84638
  metallicFactor: sourceMaterial?.pbrMetallicRoughness?.metallicFactor || DEFAULT_METALLIC_FACTOR
@@ -84729,14 +84656,28 @@ function convertMaterial(sourceMaterial) {
84729
84656
  }
84730
84657
  return { material, texture };
84731
84658
  }
84659
+ function convertAlphaMode(gltfAlphaMode) {
84660
+ switch (gltfAlphaMode) {
84661
+ case "OPAQUE":
84662
+ return "opaque";
84663
+ case "MASK":
84664
+ return "mask";
84665
+ case "BLEND":
84666
+ return "blend";
84667
+ default:
84668
+ return "opaque";
84669
+ }
84670
+ }
84732
84671
  function getDefaultMaterial() {
84733
84672
  return {
84734
84673
  alphaMode: "opaque",
84735
- pbrMetallicRoughness: {}
84674
+ pbrMetallicRoughness: {
84675
+ metallicFactor: 1,
84676
+ roughnessFactor: 1
84677
+ }
84736
84678
  };
84737
84679
  }
84738
- function getSharedResources(tileContent, nodeId) {
84739
- const gltfMaterials = tileContent.gltf.materials;
84680
+ function getSharedResources(gltfMaterials, nodeId) {
84740
84681
  const i3sResources = {};
84741
84682
  if (!gltfMaterials || !gltfMaterials.length) {
84742
84683
  return i3sResources;
@@ -84765,7 +84706,7 @@ function convertGLTFMaterialToI3sSharedResources(gltfMaterial, nodeId) {
84765
84706
  colorFactor[3] = colorFactor[3] || 1;
84766
84707
  }
84767
84708
  return {
84768
- materialDefinitionInfo: extractSharedResourcesMaterialInfo(colorFactor, metallicFactor),
84709
+ materialDefinitionInfo: extractSharedResourcesMaterialInfo(colorFactor || [1, 1, 1, 1], metallicFactor),
84769
84710
  textureDefinitionInfo
84770
84711
  };
84771
84712
  }
@@ -84780,24 +84721,27 @@ function extractSharedResourcesMaterialInfo(baseColorFactor, metallicFactor = 1)
84780
84721
  dielectricSpecular[3] = 1;
84781
84722
  const specular = dielectricSpecular.lerp(dielectricSpecular, baseColorVector, metallicFactor);
84782
84723
  return {
84783
- diffuse: diffuse.toArray(),
84784
- specular: specular.toArray()
84724
+ params: {
84725
+ diffuse: diffuse.toArray(),
84726
+ specular: specular.toArray(),
84727
+ renderMode: "solid"
84728
+ }
84785
84729
  };
84786
84730
  }
84787
84731
  function extractSharedResourcesTextureInfo(texture, nodeId) {
84788
84732
  return {
84789
- encoding: [texture.source.mimeType],
84733
+ encoding: texture?.source?.mimeType ? [texture.source.mimeType] : void 0,
84790
84734
  images: [
84791
84735
  {
84792
84736
  id: generateImageId(texture, nodeId),
84793
- size: texture.source.image.width,
84794
- length: [texture.source.image.data.length]
84737
+ size: texture.source?.image.width,
84738
+ length: [texture.source?.image.data.length]
84795
84739
  }
84796
84740
  ]
84797
84741
  };
84798
84742
  }
84799
84743
  function generateImageId(texture, nodeId) {
84800
- const { width, height } = texture.source.image;
84744
+ const { width, height } = texture.source?.image;
84801
84745
  const levelCountOfTexture = 1;
84802
84746
  const indexOfLevel = 0;
84803
84747
  const indexOfTextureInStore = nodeId + 1;
@@ -84869,7 +84813,9 @@ function convertBatchTableToAttributeBuffers(batchTable, featureIds, attributeSt
84869
84813
  default:
84870
84814
  attributeBuffer = generateStringAttributeBuffer(batchTableWithFeatureIds[key]);
84871
84815
  }
84872
- attributeBuffers.push(attributeBuffer);
84816
+ if (attributeBuffer) {
84817
+ attributeBuffers.push(attributeBuffer);
84818
+ }
84873
84819
  }
84874
84820
  }
84875
84821
  return attributeBuffers;
@@ -84912,7 +84858,7 @@ function generateBigUint64Array(featureIds) {
84912
84858
  }
84913
84859
  return typedFeatureIds;
84914
84860
  }
84915
- async function generateCompressedGeometry(vertexCount, convertedAttributes, attributes) {
84861
+ async function generateCompressedGeometry(vertexCount, convertedAttributes, attributes, dracoWorkerSoure) {
84916
84862
  const { positions, normals, texCoords, colors, featureIds, faceRange } = attributes;
84917
84863
  const indices = new Uint32Array(vertexCount);
84918
84864
  for (let index = 0; index < indices.length; index++) {
@@ -84935,12 +84881,16 @@ async function generateCompressedGeometry(vertexCount, convertedAttributes, attr
84935
84881
  "i3s-feature-ids": new Int32Array(featureIds)
84936
84882
  }
84937
84883
  };
84938
- return new Uint8Array(await encode({ attributes: compressedAttributes, indices }, DracoWriter, {
84884
+ return encode({ attributes: compressedAttributes, indices }, DracoWriterWorker, {
84885
+ ...DracoWriterWorker.options,
84886
+ source: dracoWorkerSoure,
84887
+ reuseWorkers: true,
84888
+ _nodeWorkers: true,
84939
84889
  draco: {
84940
84890
  method: "MESH_SEQUENTIAL_ENCODING",
84941
84891
  attributesMetadata
84942
84892
  }
84943
- }));
84893
+ });
84944
84894
  }
84945
84895
  function generateFeatureIndexAttribute(featureIndex, faceRange) {
84946
84896
  const orderedFeatureIndices = new Uint32Array(featureIndex.length);
@@ -85000,7 +84950,7 @@ async function createSceneServerPath(layerName, layers0, rootPath) {
85000
84950
  await writeFile3(nodePagePath, JSON.stringify(sceneServer));
85001
84951
  }
85002
84952
 
85003
- // src/lib/utils/lod-conversion-utils.js
84953
+ // src/lib/utils/lod-conversion-utils.ts
85004
84954
  var DEFAULT_MAXIMUM_SCREEN_SPACE_ERROR = 16;
85005
84955
  function convertGeometricErrorToScreenThreshold(tile, coordinates) {
85006
84956
  const lodSelection = [];
@@ -85040,12 +84990,12 @@ function convertScreenThresholdToGeometricError(node2) {
85040
84990
 
85041
84991
  // src/pgm-loader.ts
85042
84992
  var import_geoid = __toModule(require_es59());
85043
- var VERSION9 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
84993
+ var VERSION10 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
85044
84994
  var PGMLoader = {
85045
84995
  name: "PGM - Netpbm grayscale image format",
85046
84996
  id: "pgm",
85047
84997
  module: "tile-converter",
85048
- version: VERSION9,
84998
+ version: VERSION10,
85049
84999
  mimeTypes: ["image/x-portable-graymap"],
85050
85000
  parse: async (arrayBuffer, options) => (0, import_geoid.parsePGM)(new Uint8Array(arrayBuffer), options),
85051
85001
  extensions: ["pgm"],
@@ -85267,6 +85217,26 @@ var NODE_PAGES = () => ({
85267
85217
  default: "maxScreenThresholdSQ"
85268
85218
  }
85269
85219
  });
85220
+ var FULL_EXTENT = () => ({
85221
+ xmin: {
85222
+ path: "xmin"
85223
+ },
85224
+ ymin: {
85225
+ path: "ymin"
85226
+ },
85227
+ xmax: {
85228
+ path: "xmax"
85229
+ },
85230
+ ymax: {
85231
+ path: "ymax"
85232
+ },
85233
+ zmin: {
85234
+ path: "zmin"
85235
+ },
85236
+ zmax: {
85237
+ path: "zmax"
85238
+ }
85239
+ });
85270
85240
  var LAYERS = () => ({
85271
85241
  version: {
85272
85242
  path: "version",
@@ -85299,6 +85269,10 @@ var LAYERS = () => ({
85299
85269
  path: "store",
85300
85270
  transform: (val) => (0, import_json_map_transform3.default)(val, STORE)
85301
85271
  },
85272
+ fullExtent: {
85273
+ path: "fullExtent",
85274
+ transform: (val) => (0, import_json_map_transform3.default)(val, FULL_EXTENT())
85275
+ },
85302
85276
  heightModelInfo: {
85303
85277
  path: "heightModelInfo",
85304
85278
  transform: (val) => (0, import_json_map_transform3.default)(val, HEIGHT_MODEL_INFO())
@@ -85559,7 +85533,7 @@ function transfromTextureDefinitions(textureDefinitionInfos, thisObject, origina
85559
85533
  var import_culling6 = __toModule(require_es58());
85560
85534
  var import_engine = __toModule(require_es515());
85561
85535
  var import_core23 = __toModule(require_es56());
85562
- var import_geospatial9 = __toModule(require_es57());
85536
+ var import_geospatial10 = __toModule(require_es57());
85563
85537
  function validateNodeBoundingVolumes(node2) {
85564
85538
  if (!node2?.parentNode?.obb || !node2?.parentNode?.mbs) {
85565
85539
  return [];
@@ -85600,7 +85574,7 @@ function getTileObbVertices(node2) {
85600
85574
  const halfSize = node2.obb.halfSize;
85601
85575
  const attributes = geometry.getAttributes();
85602
85576
  const positions = new Float32Array(attributes.POSITION.value);
85603
- const obbCenterCartesian = import_geospatial9.Ellipsoid.WGS84.cartographicToCartesian(node2.obb.center);
85577
+ const obbCenterCartesian = import_geospatial10.Ellipsoid.WGS84.cartographicToCartesian(node2.obb.center);
85604
85578
  let vertices = [];
85605
85579
  for (let i = 0; i < positions.length; i += 3) {
85606
85580
  const positionsVector = new import_core23.Vector3(positions[i] *= halfSize[0], positions[i + 1] *= halfSize[1], positions[i + 2] *= halfSize[2]);
@@ -85613,7 +85587,7 @@ function isAllVerticesInsideBoundingVolume(boundingVolume, positions) {
85613
85587
  let isVerticesInsideObb = true;
85614
85588
  for (let index = 0; index < positions.length / 3; index += 3) {
85615
85589
  const point = [positions[index], positions[index + 1], positions[index + 2]];
85616
- const cartographicPoint = import_geospatial9.Ellipsoid.WGS84.cartesianToCartographic(point);
85590
+ const cartographicPoint = import_geospatial10.Ellipsoid.WGS84.cartesianToCartographic(point);
85617
85591
  const distance = boundingVolume.distanceTo(cartographicPoint);
85618
85592
  if (distance > 0) {
85619
85593
  isVerticesInsideObb = false;
@@ -85623,8 +85597,99 @@ function isAllVerticesInsideBoundingVolume(boundingVolume, positions) {
85623
85597
  return isVerticesInsideObb;
85624
85598
  }
85625
85599
 
85600
+ // src/lib/utils/queue.ts
85601
+ var Queue = class extends Array {
85602
+ enqueue(val) {
85603
+ this.push(val);
85604
+ }
85605
+ dequeue() {
85606
+ return this.shift();
85607
+ }
85608
+ peek() {
85609
+ return this[0];
85610
+ }
85611
+ isEmpty() {
85612
+ return this.length === 0;
85613
+ }
85614
+ };
85615
+
85616
+ // src/lib/utils/write-queue.ts
85617
+ var WriteQueue = class extends Queue {
85618
+ constructor(listeningInterval = 2e3, writeConcurrency = 400) {
85619
+ super();
85620
+ this.writePromise = null;
85621
+ this.fileMap = {};
85622
+ this.listeningInterval = listeningInterval;
85623
+ this.writeConcurrency = writeConcurrency;
85624
+ }
85625
+ startListening() {
85626
+ this.intervalId = setInterval(this.startWrite.bind(this), this.listeningInterval);
85627
+ }
85628
+ stopListening() {
85629
+ if (this.intervalId) {
85630
+ clearInterval(this.intervalId);
85631
+ }
85632
+ }
85633
+ async startWrite() {
85634
+ if (this.writePromise) {
85635
+ await this.writePromise;
85636
+ this.writePromise = null;
85637
+ return;
85638
+ }
85639
+ this.writePromise = this.doWrite();
85640
+ await this.writePromise;
85641
+ this.writePromise = null;
85642
+ }
85643
+ async finalize() {
85644
+ this.stopListening();
85645
+ await this.startWrite();
85646
+ }
85647
+ async doWrite() {
85648
+ while (this.length) {
85649
+ const promises = [];
85650
+ const archiveKeys = [];
85651
+ for (let i = 0; i < this.writeConcurrency; i++) {
85652
+ const item = this.dequeue();
85653
+ if (!item) {
85654
+ break;
85655
+ }
85656
+ const { archiveKey, writePromise } = item;
85657
+ archiveKeys.push(archiveKey);
85658
+ promises.push(writePromise);
85659
+ }
85660
+ const writeResults = await Promise.all(promises);
85661
+ this.updateFileMap(archiveKeys, writeResults);
85662
+ }
85663
+ this.writePromise = null;
85664
+ }
85665
+ updateFileMap(archiveKeys, writeResults) {
85666
+ for (let i = 0; i < archiveKeys.length; i++) {
85667
+ const archiveKey = archiveKeys[i];
85668
+ if (!archiveKey) {
85669
+ continue;
85670
+ }
85671
+ this.fileMap[archiveKey] = writeResults[i];
85672
+ }
85673
+ }
85674
+ };
85675
+
85676
+ // src/i3s-attributes-worker.ts
85677
+ var VERSION11 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
85678
+ var I3SAttributesWorker = {
85679
+ id: "i3s-attributes",
85680
+ name: "I3S Attributes Worker",
85681
+ module: "tile-converter",
85682
+ version: VERSION11,
85683
+ options: {
85684
+ useCartesianPositions: false
85685
+ }
85686
+ };
85687
+
85688
+ // src/constants.ts
85689
+ var BROWSER_ERROR_MESSAGE = "Tile converter does not work in browser, only in node js environment";
85690
+
85626
85691
  // src/i3s-converter/i3s-converter.ts
85627
- var ION_DEFAULT_TOKEN = import_process.default.env.IonToken || "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJlYWMxMzcyYy0zZjJkLTQwODctODNlNi01MDRkZmMzMjIxOWIiLCJpZCI6OTYyMCwic2NvcGVzIjpbImFzbCIsImFzciIsImdjIl0sImlhdCI6MTU2Mjg2NjI3M30.1FNiClUyk00YH_nWfSGpiQAjR5V2OvREDq1PJ5QMjWQ";
85692
+ var ION_DEFAULT_TOKEN = import_process.default.env?.IonToken || "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJlYWMxMzcyYy0zZjJkLTQwODctODNlNi01MDRkZmMzMjIxOWIiLCJpZCI6OTYyMCwic2NvcGVzIjpbImFzbCIsImFzciIsImdjIl0sImlhdCI6MTU2Mjg2NjI3M30.1FNiClUyk00YH_nWfSGpiQAjR5V2OvREDq1PJ5QMjWQ";
85628
85693
  var HARDCODED_NODES_PER_PAGE = 64;
85629
85694
  var _3D_TILES = "3DTILES";
85630
85695
  var _3D_OBJECT_LAYER_TYPE = "3DObject";
@@ -85642,8 +85707,9 @@ var I3SConverter = class {
85642
85707
  this.sourceTileset = null;
85643
85708
  this.geoidHeightModel = null;
85644
85709
  this.Loader = Tiles3DLoader;
85710
+ this.workerSource = {};
85711
+ this.writeQueue = new WriteQueue();
85645
85712
  this.nodePages = new NodePages(writeFile3, HARDCODED_NODES_PER_PAGE);
85646
- this.fileMap = {};
85647
85713
  this.options = {};
85648
85714
  this.layers0Path = "";
85649
85715
  this.materialMap = new Map();
@@ -85661,6 +85727,10 @@ var I3SConverter = class {
85661
85727
  this.layersHasTexture = false;
85662
85728
  }
85663
85729
  async convert(options) {
85730
+ if (isBrowser) {
85731
+ console.log(BROWSER_ERROR_MESSAGE);
85732
+ return BROWSER_ERROR_MESSAGE;
85733
+ }
85664
85734
  this.conversionStartTime = import_process.default.hrtime();
85665
85735
  const {
85666
85736
  tilesetName,
@@ -85681,23 +85751,33 @@ var I3SConverter = class {
85681
85751
  this.Loader = inputUrl.indexOf(CESIUM_DATASET_PREFIX) !== -1 ? CesiumIonLoader : Tiles3DLoader;
85682
85752
  this.generateTextures = Boolean(generateTextures);
85683
85753
  this.generateBoundingVolumes = Boolean(generateBoundingVolumes);
85754
+ this.writeQueue = new WriteQueue();
85755
+ this.writeQueue.startListening();
85684
85756
  console.log("Loading egm file...");
85685
85757
  this.geoidHeightModel = await load(egmFilePath, PGMLoader);
85686
85758
  console.log("Loading egm file completed!");
85687
85759
  if (slpk) {
85688
85760
  this.nodePages.useWriteFunction(writeFileForSlpk);
85689
85761
  }
85690
- const preloadOptions = await this._fetchPreloadOptions();
85691
- const tilesetOptions = { loadOptions: { basis: { format: "rgba32" } } };
85692
- if (preloadOptions.headers) {
85693
- tilesetOptions.loadOptions.fetch = { headers: preloadOptions.headers };
85762
+ await this.loadWorkers();
85763
+ try {
85764
+ const preloadOptions = await this._fetchPreloadOptions();
85765
+ const tilesetOptions = { loadOptions: { basis: { format: "rgba32" } } };
85766
+ if (preloadOptions.headers) {
85767
+ tilesetOptions.loadOptions.fetch = { headers: preloadOptions.headers };
85768
+ }
85769
+ Object.assign(tilesetOptions, preloadOptions);
85770
+ const sourceTilesetJson = await load(inputUrl, this.Loader, tilesetOptions.loadOptions);
85771
+ this.sourceTileset = new Tileset3D(sourceTilesetJson, tilesetOptions);
85772
+ await this._createAndSaveTileset(outputPath, tilesetName);
85773
+ await this._finishConversion({ slpk: Boolean(slpk), outputPath, tilesetName });
85774
+ return sourceTilesetJson;
85775
+ } catch (error) {
85776
+ throw error;
85777
+ } finally {
85778
+ const workerFarm = WorkerFarm.getWorkerFarm({});
85779
+ workerFarm.destroy();
85694
85780
  }
85695
- Object.assign(tilesetOptions, preloadOptions);
85696
- const sourceTilesetJson = await load(inputUrl, this.Loader, tilesetOptions.loadOptions);
85697
- this.sourceTileset = new Tileset3D(sourceTilesetJson, tilesetOptions);
85698
- await this._createAndSaveTileset(outputPath, tilesetName);
85699
- await this._finishConversion({ slpk: Boolean(slpk), outputPath, tilesetName });
85700
- return sourceTilesetJson;
85701
85781
  }
85702
85782
  async _createAndSaveTileset(outputPath, tilesetName) {
85703
85783
  const tilesetPath = (0, import_path7.join)(`${outputPath}`, `${tilesetName}`);
@@ -85727,11 +85807,13 @@ var I3SConverter = class {
85727
85807
  await this._writeLayers0();
85728
85808
  createSceneServerPath(tilesetName, this.layers0, tilesetPath);
85729
85809
  await this._writeNodeIndexDocument(root0, "root", (0, import_path7.join)(this.layers0Path, "nodes", "root"));
85730
- await this.nodePages.save(this.layers0Path, this.fileMap, isCreateSlpk);
85810
+ await this.nodePages.save(this.layers0Path, this.writeQueue, isCreateSlpk);
85811
+ await this.writeQueue.finalize();
85731
85812
  await this._createSlpk(tilesetPath);
85732
85813
  }
85733
85814
  _formLayers0(tilesetName) {
85734
- const extent = convertCommonToI3SExtentCoordinate(this.sourceTileset);
85815
+ const fullExtent = convertBoundingVolumeToI3SFullExtent(this.sourceTileset?.boundingVolume || this.sourceTileset?.root?.boundingVolume);
85816
+ const extent = [fullExtent.xmin, fullExtent.ymin, fullExtent.xmax, fullExtent.ymax];
85735
85817
  const layers0data = {
85736
85818
  version: `{${v4().toUpperCase()}}`,
85737
85819
  id: 0,
@@ -85744,7 +85826,8 @@ var I3SConverter = class {
85744
85826
  nodePages: {
85745
85827
  nodesPerPage: HARDCODED_NODES_PER_PAGE
85746
85828
  },
85747
- compressGeometry: this.options.draco
85829
+ compressGeometry: this.options.draco,
85830
+ fullExtent
85748
85831
  };
85749
85832
  this.layers0 = (0, import_json_map_transform6.default)(layers0data, LAYERS());
85750
85833
  }
@@ -85780,9 +85863,12 @@ var I3SConverter = class {
85780
85863
  const [child] = await this._createNode(root0, sourceRootTile, parentId, 0);
85781
85864
  const childPath = (0, import_path7.join)(this.layers0Path, "nodes", child.path);
85782
85865
  if (this.options.slpk) {
85783
- this.fileMap["nodes/1/3dNodeIndexDocument.json.gz"] = await writeFileForSlpk(childPath, JSON.stringify(child), "3dNodeIndexDocument.json");
85866
+ this.writeQueue.enqueue({
85867
+ archiveKey: "nodes/1/3dNodeIndexDocument.json.gz",
85868
+ writePromise: writeFileForSlpk(childPath, JSON.stringify(child), "3dNodeIndexDocument.json")
85869
+ });
85784
85870
  } else {
85785
- await writeFile3(childPath, JSON.stringify(child));
85871
+ this.writeQueue.enqueue({ writePromise: writeFile3(childPath, JSON.stringify(child)) });
85786
85872
  }
85787
85873
  } else {
85788
85874
  await this._addChildrenWithNeighborsAndWriteFile({
@@ -85796,16 +85882,24 @@ var I3SConverter = class {
85796
85882
  }
85797
85883
  async _writeLayers0() {
85798
85884
  if (this.options.slpk) {
85799
- this.fileMap["3dSceneLayer.json.gz"] = await writeFileForSlpk(this.layers0Path, JSON.stringify(this.layers0), "3dSceneLayer.json");
85885
+ this.writeQueue.enqueue({
85886
+ archiveKey: "3dSceneLayer.json.gz",
85887
+ writePromise: writeFileForSlpk(this.layers0Path, JSON.stringify(this.layers0), "3dSceneLayer.json")
85888
+ });
85800
85889
  } else {
85801
- await writeFile3(this.layers0Path, JSON.stringify(this.layers0));
85890
+ this.writeQueue.enqueue({
85891
+ writePromise: writeFile3(this.layers0Path, JSON.stringify(this.layers0))
85892
+ });
85802
85893
  }
85803
85894
  }
85804
85895
  async _writeNodeIndexDocument(root0, nodePath, rootPath) {
85805
85896
  if (this.options.slpk) {
85806
- this.fileMap[`nodes/${nodePath}/3dNodeIndexDocument.json.gz`] = await writeFileForSlpk(rootPath, JSON.stringify(root0), "3dNodeIndexDocument.json");
85897
+ this.writeQueue.enqueue({
85898
+ archiveKey: `nodes/${nodePath}/3dNodeIndexDocument.json.gz`,
85899
+ writePromise: writeFileForSlpk(rootPath, JSON.stringify(root0), "3dNodeIndexDocument.json")
85900
+ });
85807
85901
  } else {
85808
- await writeFile3(rootPath, JSON.stringify(root0));
85902
+ this.writeQueue.enqueue({ writePromise: writeFile3(rootPath, JSON.stringify(root0)) });
85809
85903
  }
85810
85904
  }
85811
85905
  async _createSlpk(tilesetPath) {
@@ -85945,7 +86039,7 @@ var I3SConverter = class {
85945
86039
  if (!this.isContentSupported(sourceTile)) {
85946
86040
  return null;
85947
86041
  }
85948
- const resourcesData = await convertB3dmToI3sGeometry(sourceTile.content, Number(this.nodePages.nodesCounter), this.featuresHashArray, this.layers0?.attributeStorageInfo, this.options.draco, this.generateBoundingVolumes, this.geoidHeightModel);
86042
+ const resourcesData = await convertB3dmToI3sGeometry(sourceTile.content, Number(this.nodePages.nodesCounter), this.featuresHashArray, this.layers0?.attributeStorageInfo, this.options.draco, this.generateBoundingVolumes, this.geoidHeightModel, this.workerSource);
85949
86043
  return resourcesData;
85950
86044
  }
85951
86045
  _createNodeInNodePages(maxScreenThresholdSQ, boundingVolumes, sourceTile, parentId, resources) {
@@ -86042,31 +86136,47 @@ var I3SConverter = class {
86042
86136
  async _writeGeometries(geometryBuffer, compressedGeometry, childPath, slpkChildPath) {
86043
86137
  if (this.options.slpk) {
86044
86138
  const slpkGeometryPath = (0, import_path7.join)(childPath, "geometries");
86045
- this.fileMap[`${slpkChildPath}/geometries/0.bin.gz`] = await writeFileForSlpk(slpkGeometryPath, geometryBuffer, "0.bin");
86139
+ this.writeQueue.enqueue({
86140
+ archiveKey: `${slpkChildPath}/geometries/0.bin.gz`,
86141
+ writePromise: writeFileForSlpk(slpkGeometryPath, geometryBuffer, "0.bin")
86142
+ });
86046
86143
  } else {
86047
86144
  const geometryPath = (0, import_path7.join)(childPath, "geometries/0/");
86048
- await writeFile3(geometryPath, geometryBuffer, "index.bin");
86145
+ this.writeQueue.enqueue({
86146
+ writePromise: writeFile3(geometryPath, geometryBuffer, "index.bin")
86147
+ });
86049
86148
  }
86050
86149
  if (this.options.draco) {
86051
86150
  if (this.options.slpk) {
86052
86151
  const slpkCompressedGeometryPath = (0, import_path7.join)(childPath, "geometries");
86053
- this.fileMap[`${slpkChildPath}/geometries/1.bin.gz`] = await writeFileForSlpk(slpkCompressedGeometryPath, compressedGeometry, "1.bin");
86152
+ this.writeQueue.enqueue({
86153
+ archiveKey: `${slpkChildPath}/geometries/1.bin.gz`,
86154
+ writePromise: writeFileForSlpk(slpkCompressedGeometryPath, compressedGeometry, "1.bin")
86155
+ });
86054
86156
  } else {
86055
86157
  const compressedGeometryPath = (0, import_path7.join)(childPath, "geometries/1/");
86056
- await writeFile3(compressedGeometryPath, compressedGeometry, "index.bin");
86158
+ this.writeQueue.enqueue({
86159
+ writePromise: writeFile3(compressedGeometryPath, compressedGeometry, "index.bin")
86160
+ });
86057
86161
  }
86058
86162
  }
86059
86163
  }
86060
86164
  async _writeShared(sharedResources, childPath, slpkChildPath, nodePath) {
86165
+ if (!sharedResources) {
86166
+ return;
86167
+ }
86061
86168
  sharedResources.nodePath = nodePath;
86062
86169
  const sharedData = (0, import_json_map_transform6.default)(sharedResources, SHARED_RESOURCES());
86063
86170
  const sharedDataStr = JSON.stringify(sharedData);
86064
86171
  if (this.options.slpk) {
86065
86172
  const slpkSharedPath = (0, import_path7.join)(childPath, "shared");
86066
- this.fileMap[`${slpkChildPath}/shared/sharedResource.json.gz`] = await writeFileForSlpk(slpkSharedPath, sharedDataStr, "sharedResource.json");
86173
+ this.writeQueue.enqueue({
86174
+ archiveKey: `${slpkChildPath}/shared/sharedResource.json.gz`,
86175
+ writePromise: writeFileForSlpk(slpkSharedPath, sharedDataStr, "sharedResource.json")
86176
+ });
86067
86177
  } else {
86068
86178
  const sharedPath = (0, import_path7.join)(childPath, "shared/");
86069
- await writeFile3(sharedPath, sharedDataStr);
86179
+ this.writeQueue.enqueue({ writePromise: writeFile3(sharedPath, sharedDataStr) });
86070
86180
  }
86071
86181
  }
86072
86182
  async _writeTexture(texture, childPath, slpkChildPath) {
@@ -86081,7 +86191,12 @@ var I3SConverter = class {
86081
86191
  await this.writeTextureFile(textureData, "0", format, childPath, slpkChildPath);
86082
86192
  if (this.generateTextures) {
86083
86193
  formats2.push({ name: "1", format: "ktx2" });
86084
- const ktx2TextureData = new Uint8Array(await encode(texture.image, KTX2BasisUniversalTextureWriter));
86194
+ const ktx2TextureData = encode(texture.image, KTX2BasisWriterWorker, {
86195
+ ...KTX2BasisWriterWorker.options,
86196
+ source: this.workerSource.ktx2,
86197
+ reuseWorkers: true,
86198
+ _nodeWorkers: true
86199
+ });
86085
86200
  await this.writeTextureFile(ktx2TextureData, "1", "ktx2", childPath, slpkChildPath);
86086
86201
  }
86087
86202
  break;
@@ -86091,7 +86206,7 @@ var I3SConverter = class {
86091
86206
  await this.writeTextureFile(textureData, "1", format, childPath, slpkChildPath);
86092
86207
  if (this.generateTextures) {
86093
86208
  formats2.push({ name: "0", format: "jpg" });
86094
- const decodedFromKTX2TextureData = new Uint8Array(await encode(texture.image.data[0], ImageWriter));
86209
+ const decodedFromKTX2TextureData = encode(texture.image.data[0], ImageWriter);
86095
86210
  await this.writeTextureFile(decodedFromKTX2TextureData, "0", "jpg", childPath, slpkChildPath);
86096
86211
  }
86097
86212
  }
@@ -86105,23 +86220,33 @@ var I3SConverter = class {
86105
86220
  if (this.options.slpk) {
86106
86221
  const slpkTexturePath = (0, import_path7.join)(childPath, "textures");
86107
86222
  const compress = false;
86108
- this.fileMap[`${slpkChildPath}/textures/${name8}.${format}`] = await writeFileForSlpk(slpkTexturePath, textureData, `${name8}.${format}`, compress);
86223
+ this.writeQueue.enqueue({
86224
+ archiveKey: `${slpkChildPath}/textures/${name8}.${format}`,
86225
+ writePromise: writeFileForSlpk(slpkTexturePath, textureData, `${name8}.${format}`, compress)
86226
+ });
86109
86227
  } else {
86110
86228
  const texturePath = (0, import_path7.join)(childPath, `textures/${name8}/`);
86111
- await writeFile3(texturePath, textureData, `index.${format}`);
86229
+ this.writeQueue.enqueue({
86230
+ writePromise: writeFile3(texturePath, textureData, `index.${format}`)
86231
+ });
86112
86232
  }
86113
86233
  }
86114
- async _writeAttributes(attributes, childPath, slpkChildPath) {
86115
- if (attributes.length && this.layers0?.attributeStorageInfo?.length) {
86234
+ async _writeAttributes(attributes = [], childPath, slpkChildPath) {
86235
+ if (attributes?.length && this.layers0?.attributeStorageInfo?.length) {
86116
86236
  for (let index = 0; index < attributes.length; index++) {
86117
86237
  const folderName = this.layers0.attributeStorageInfo[index].key;
86118
86238
  const fileBuffer = new Uint8Array(attributes[index]);
86119
86239
  if (this.options.slpk) {
86120
86240
  const slpkAttributesPath = (0, import_path7.join)(childPath, "attributes", folderName);
86121
- this.fileMap[`${slpkChildPath}/attributes/${folderName}.bin.gz`] = await writeFileForSlpk(slpkAttributesPath, fileBuffer, "0.bin");
86241
+ this.writeQueue.enqueue({
86242
+ archiveKey: `${slpkChildPath}/attributes/${folderName}.bin.gz`,
86243
+ writePromise: writeFileForSlpk(slpkAttributesPath, fileBuffer, "0.bin")
86244
+ });
86122
86245
  } else {
86123
86246
  const attributesPath = (0, import_path7.join)(childPath, `attributes/${folderName}/0`);
86124
- await writeFile3(attributesPath, fileBuffer, "index.bin");
86247
+ this.writeQueue.enqueue({
86248
+ writePromise: writeFile3(attributesPath, fileBuffer, "index.bin")
86249
+ });
86125
86250
  }
86126
86251
  }
86127
86252
  }
@@ -86327,6 +86452,26 @@ var I3SConverter = class {
86327
86452
  isContentSupported(sourceRootTile) {
86328
86453
  return ["b3dm", "glTF"].includes(sourceRootTile?.content?.type);
86329
86454
  }
86455
+ async loadWorkers() {
86456
+ console.log(`Loading workers source...`);
86457
+ if (this.options.draco) {
86458
+ const url = getWorkerURL(DracoWriterWorker, { ...getGlobalLoaderOptions() });
86459
+ const sourceResponse2 = await fetchFile(url);
86460
+ const source2 = await sourceResponse2.text();
86461
+ this.workerSource.draco = source2;
86462
+ }
86463
+ if (this.generateTextures) {
86464
+ const url = getWorkerURL(KTX2BasisWriterWorker, { ...getGlobalLoaderOptions() });
86465
+ const sourceResponse2 = await fetchFile(url);
86466
+ const source2 = await sourceResponse2.text();
86467
+ this.workerSource.ktx2 = source2;
86468
+ }
86469
+ const i3sAttributesWorkerUrl = getWorkerURL(I3SAttributesWorker, { ...getGlobalLoaderOptions() });
86470
+ const sourceResponse = await fetchFile(i3sAttributesWorkerUrl);
86471
+ const source = await sourceResponse.text();
86472
+ this.workerSource.I3SAttributes = source;
86473
+ console.log(`Loading workers source completed!`);
86474
+ }
86330
86475
  };
86331
86476
 
86332
86477
  // src/3d-tiles-converter/3d-tiles-converter.ts
@@ -86336,7 +86481,7 @@ var import_json_map_transform8 = __toModule(require_json_map_transform());
86336
86481
 
86337
86482
  // ../i3s/src/lib/parsers/parse-i3s-tile-content.ts
86338
86483
  var import_core26 = __toModule(require_es56());
86339
- var import_geospatial10 = __toModule(require_es57());
86484
+ var import_geospatial11 = __toModule(require_es57());
86340
86485
 
86341
86486
  // ../i3s/src/types.ts
86342
86487
  var DATA_TYPE;
@@ -86381,7 +86526,7 @@ function generateTilesetAttributeUrls(tileset, resource) {
86381
86526
  }
86382
86527
 
86383
86528
  // ../i3s/src/lib/parsers/constants.ts
86384
- var import_constants14 = __toModule(require_es516());
86529
+ var import_constants15 = __toModule(require_es516());
86385
86530
  function getConstructorForDataFormat(dataType) {
86386
86531
  switch (dataType) {
86387
86532
  case DATA_TYPE.UInt8:
@@ -86399,11 +86544,11 @@ function getConstructorForDataFormat(dataType) {
86399
86544
  }
86400
86545
  }
86401
86546
  var GL_TYPE_MAP = {
86402
- UInt8: import_constants14.default.UNSIGNED_BYTE,
86403
- UInt16: import_constants14.default.UNSIGNED_INT,
86404
- Float32: import_constants14.default.FLOAT,
86405
- UInt32: import_constants14.default.UNSIGNED_INT,
86406
- UInt64: import_constants14.default.DOUBLE
86547
+ UInt8: import_constants15.default.UNSIGNED_BYTE,
86548
+ UInt16: import_constants15.default.UNSIGNED_INT,
86549
+ Float32: import_constants15.default.FLOAT,
86550
+ UInt32: import_constants15.default.UNSIGNED_INT,
86551
+ UInt64: import_constants15.default.DOUBLE
86407
86552
  };
86408
86553
  function sizeOf(dataType) {
86409
86554
  switch (dataType) {
@@ -86498,6 +86643,7 @@ async function parseI3SNodeGeometry(arrayBuffer, tile, tileset, options) {
86498
86643
  return tile;
86499
86644
  }
86500
86645
  const content = tile.content;
86646
+ const contentByteLength = arrayBuffer.byteLength;
86501
86647
  let attributes;
86502
86648
  let vertexCount;
86503
86649
  let byteOffset = 0;
@@ -86573,7 +86719,7 @@ async function parseI3SNodeGeometry(arrayBuffer, tile, tileset, options) {
86573
86719
  }
86574
86720
  }
86575
86721
  content.vertexCount = vertexCount;
86576
- content.byteLength = arrayBuffer.byteLength;
86722
+ content.byteLength = contentByteLength;
86577
86723
  return tile;
86578
86724
  }
86579
86725
  function updateAttributesMetadata(attributes, decompressedGeometry) {
@@ -86682,8 +86828,8 @@ function parsePositions2(attribute, tile) {
86682
86828
  const enuMatrix = new import_core26.Matrix4();
86683
86829
  const cartographicOrigin = new import_core26.Vector3(mbs[0], mbs[1], mbs[2]);
86684
86830
  const cartesianOrigin = new import_core26.Vector3();
86685
- import_geospatial10.Ellipsoid.WGS84.cartographicToCartesian(cartographicOrigin, cartesianOrigin);
86686
- import_geospatial10.Ellipsoid.WGS84.eastNorthUpToFixedFrame(cartesianOrigin, enuMatrix);
86831
+ import_geospatial11.Ellipsoid.WGS84.cartographicToCartesian(cartographicOrigin, cartesianOrigin);
86832
+ import_geospatial11.Ellipsoid.WGS84.eastNorthUpToFixedFrame(cartesianOrigin, enuMatrix);
86687
86833
  attribute.value = offsetsToCartesians(value, metadata, cartographicOrigin);
86688
86834
  return enuMatrix;
86689
86835
  }
@@ -86697,7 +86843,7 @@ function offsetsToCartesians(vertices, metadata = {}, cartographicOrigin) {
86697
86843
  positions[i + 2] = vertices[i + 2] + cartographicOrigin.z;
86698
86844
  }
86699
86845
  for (let i = 0; i < positions.length; i += 3) {
86700
- import_geospatial10.Ellipsoid.WGS84.cartographicToCartesian(positions.subarray(i, i + 3), scratchVector5);
86846
+ import_geospatial11.Ellipsoid.WGS84.cartographicToCartesian(positions.subarray(i, i + 3), scratchVector5);
86701
86847
  positions[i] = scratchVector5.x;
86702
86848
  positions[i + 1] = scratchVector5.y;
86703
86849
  positions[i + 2] = scratchVector5.z;
@@ -86808,13 +86954,13 @@ function getFeatureIdsFromFeatureIndexMetadata(featureIndex) {
86808
86954
  }
86809
86955
 
86810
86956
  // ../i3s/src/i3s-content-loader.ts
86811
- var VERSION10 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "beta";
86957
+ var VERSION12 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "beta";
86812
86958
  var I3SContentLoader = {
86813
86959
  name: "I3S Content (Indexed Scene Layers)",
86814
86960
  id: "i3s-content",
86815
86961
  module: "i3s",
86816
86962
  worker: true,
86817
- version: VERSION10,
86963
+ version: VERSION12,
86818
86964
  mimeTypes: ["application/octet-stream"],
86819
86965
  parse: parse6,
86820
86966
  extensions: ["bin"],
@@ -86830,10 +86976,10 @@ async function parse6(data, options, context) {
86830
86976
 
86831
86977
  // ../i3s/src/lib/parsers/parse-i3s.ts
86832
86978
  var import_culling7 = __toModule(require_es58());
86833
- var import_geospatial11 = __toModule(require_es57());
86979
+ var import_geospatial12 = __toModule(require_es57());
86834
86980
 
86835
86981
  // ../i3s/src/i3s-node-page-loader.ts
86836
- var VERSION11 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
86982
+ var VERSION13 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
86837
86983
  async function parseNodePage(data) {
86838
86984
  return JSON.parse(new TextDecoder().decode(data));
86839
86985
  }
@@ -86841,7 +86987,7 @@ var I3SNodePageLoader = {
86841
86987
  name: "I3S Node Page",
86842
86988
  id: "i3s-node-page",
86843
86989
  module: "i3s",
86844
- version: VERSION11,
86990
+ version: VERSION13,
86845
86991
  mimeTypes: ["application/json"],
86846
86992
  parse: parse7,
86847
86993
  extensions: ["json"],
@@ -86863,6 +87009,7 @@ var I3SNodePagesTiles = class {
86863
87009
  this.nodesPerPage = tileset.nodePages?.nodesPerPage || 64;
86864
87010
  this.lodSelectionMetricType = tileset.nodePages?.lodSelectionMetricType;
86865
87011
  this.options = options;
87012
+ this.nodesInNodePages = 0;
86866
87013
  this.initSelectedFormatsForTextureDefinitions(tileset);
86867
87014
  }
86868
87015
  async getNodeById(id) {
@@ -86874,6 +87021,7 @@ var I3SNodePagesTiles = class {
86874
87021
  promise: load(nodePageUrl, I3SNodePageLoader, this.options)
86875
87022
  };
86876
87023
  this.nodePages[pageIndex] = await this.pendingNodePages[pageIndex].promise;
87024
+ this.nodesInNodePages += this.nodePages[pageIndex].nodes.length;
86877
87025
  this.pendingNodePages[pageIndex].status = "Done";
86878
87026
  }
86879
87027
  if (this.pendingNodePages[pageIndex].status === "Pending") {
@@ -86885,10 +87033,14 @@ var I3SNodePagesTiles = class {
86885
87033
  async formTileFromNodePages(id) {
86886
87034
  const node2 = await this.getNodeById(id);
86887
87035
  const children = [];
87036
+ const childNodesPromises = [];
86888
87037
  for (const child of node2.children || []) {
86889
- const childNode = await this.getNodeById(child);
87038
+ childNodesPromises.push(this.getNodeById(child));
87039
+ }
87040
+ const childNodes = await Promise.all(childNodesPromises);
87041
+ for (const childNode of childNodes) {
86890
87042
  children.push({
86891
- id: child.toString(),
87043
+ id: childNode.index.toString(),
86892
87044
  obb: childNode.obb
86893
87045
  });
86894
87046
  }
@@ -87046,12 +87198,12 @@ function normalizeTileNonUrlData(tile) {
87046
87198
  if (tile.mbs) {
87047
87199
  mbs = tile.mbs;
87048
87200
  boundingVolume.sphere = [
87049
- ...import_geospatial11.Ellipsoid.WGS84.cartographicToCartesian(tile.mbs.slice(0, 3)),
87201
+ ...import_geospatial12.Ellipsoid.WGS84.cartographicToCartesian(tile.mbs.slice(0, 3)),
87050
87202
  tile.mbs[3]
87051
87203
  ];
87052
87204
  } else if (tile.obb) {
87053
87205
  boundingVolume.box = [
87054
- ...import_geospatial11.Ellipsoid.WGS84.cartographicToCartesian(tile.obb.center),
87206
+ ...import_geospatial12.Ellipsoid.WGS84.cartographicToCartesian(tile.obb.center),
87055
87207
  ...tile.obb.halfSize,
87056
87208
  ...tile.obb.quaternion
87057
87209
  ];
@@ -87071,7 +87223,7 @@ async function normalizeTilesetData(tileset, options, context) {
87071
87223
  tileset.url = context.url;
87072
87224
  if (tileset.nodePages) {
87073
87225
  tileset.nodePagesTile = new I3SNodePagesTiles(tileset, options);
87074
- tileset.root = await tileset.nodePagesTile.formTileFromNodePages(0);
87226
+ tileset.root = tileset.nodePagesTile.formTileFromNodePages(0);
87075
87227
  } else {
87076
87228
  const rootNodeUrl = getUrlWithToken(`${tileset.url}/nodes/root`, options.i3s?.token);
87077
87229
  tileset.root = await load(rootNodeUrl, tileset.loader, {
@@ -87091,7 +87243,7 @@ async function normalizeTilesetData(tileset, options, context) {
87091
87243
  }
87092
87244
 
87093
87245
  // ../i3s/src/i3s-loader.ts
87094
- var VERSION12 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
87246
+ var VERSION14 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
87095
87247
  var TILESET_REGEX = /layers\/[0-9]+$/;
87096
87248
  var TILE_HEADER_REGEX = /nodes\/([0-9-]+|root)$/;
87097
87249
  var SLPK_HEX = "504b0304";
@@ -87099,7 +87251,7 @@ var I3SLoader = {
87099
87251
  name: "I3S (Indexed Scene Layers)",
87100
87252
  id: "i3s",
87101
87253
  module: "i3s",
87102
- version: VERSION12,
87254
+ version: VERSION14,
87103
87255
  mimeTypes: ["application/octet-stream"],
87104
87256
  parse: parseI3S,
87105
87257
  extensions: ["bin"],
@@ -87228,12 +87380,12 @@ function parseStringsAttribute(arrayBuffer) {
87228
87380
  }
87229
87381
 
87230
87382
  // ../i3s/src/i3s-attribute-loader.ts
87231
- var VERSION13 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
87383
+ var VERSION15 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
87232
87384
  var I3SAttributeLoader = {
87233
87385
  name: "I3S Attribute",
87234
87386
  id: "i3s-attribute",
87235
87387
  module: "i3s",
87236
- version: VERSION13,
87388
+ version: VERSION15,
87237
87389
  mimeTypes: ["application/binary"],
87238
87390
  parse: parse8,
87239
87391
  extensions: ["bin"],
@@ -87247,7 +87399,7 @@ async function parse8(data, options) {
87247
87399
 
87248
87400
  // src/3d-tiles-converter/helpers/i3s-obb-to-3d-tiles-obb.ts
87249
87401
  var import_core30 = __toModule(require_es56());
87250
- var import_geospatial12 = __toModule(require_es57());
87402
+ var import_geospatial13 = __toModule(require_es57());
87251
87403
  var import_culling8 = __toModule(require_es58());
87252
87404
  function i3sObbTo3dTilesObb(i3SObb, geoidHeightModel) {
87253
87405
  const tiles3DCenter = [
@@ -87255,7 +87407,7 @@ function i3sObbTo3dTilesObb(i3SObb, geoidHeightModel) {
87255
87407
  i3SObb.center[1],
87256
87408
  i3SObb.center[2] + geoidHeightModel.getHeight(i3SObb.center[1], i3SObb.center[0])
87257
87409
  ];
87258
- const cartesianCenter = import_geospatial12.Ellipsoid.WGS84.cartographicToCartesian(tiles3DCenter, new import_core30.Vector3());
87410
+ const cartesianCenter = import_geospatial13.Ellipsoid.WGS84.cartographicToCartesian(tiles3DCenter, new import_core30.Vector3());
87259
87411
  const tiles3DObb = new import_culling8.OrientedBoundingBox().fromCenterHalfSizeQuaternion(cartesianCenter, i3SObb.halfSize, i3SObb.quaternion);
87260
87412
  return [...tiles3DObb.center, ...tiles3DObb.halfAxes.toArray()];
87261
87413
  }
@@ -87300,7 +87452,7 @@ var TILESET = () => ({
87300
87452
 
87301
87453
  // src/3d-tiles-converter/helpers/b3dm-converter.ts
87302
87454
  var import_core32 = __toModule(require_es56());
87303
- var import_geospatial13 = __toModule(require_es57());
87455
+ var import_geospatial14 = __toModule(require_es57());
87304
87456
 
87305
87457
  // src/3d-tiles-converter/helpers/texture-atlas.ts
87306
87458
  function convertTextureAtlas(texCoords, uvRegions) {
@@ -87337,18 +87489,18 @@ function normalizeRegions(regions) {
87337
87489
  var Z_UP_TO_Y_UP_MATRIX = new import_core32.Matrix4([1, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1]);
87338
87490
  var scratchVector6 = new import_core32.Vector3();
87339
87491
  var B3dmConverter = class {
87340
- async convert(i3sTile, attributes = null) {
87341
- this.i3sTile = i3sTile;
87342
- const gltf = await this.buildGltf(i3sTile);
87492
+ async convert(i3sAttributesData, featureAttributes = null) {
87493
+ const gltf = await this.buildGltf(i3sAttributesData);
87343
87494
  const b3dm = encodeSync({
87344
87495
  gltfEncoded: new Uint8Array(gltf),
87345
87496
  type: "b3dm",
87346
- featuresLength: this._getFeaturesLength(attributes),
87347
- batchTable: attributes
87497
+ featuresLength: this._getFeaturesLength(featureAttributes),
87498
+ batchTable: featureAttributes
87348
87499
  }, Tile3DWriter);
87349
87500
  return b3dm;
87350
87501
  }
87351
- async buildGltf(i3sTile) {
87502
+ async buildGltf(i3sAttributesData) {
87503
+ const { tileContent, textureFormat } = i3sAttributesData;
87352
87504
  const {
87353
87505
  material,
87354
87506
  attributes,
@@ -87356,9 +87508,9 @@ var B3dmConverter = class {
87356
87508
  cartesianOrigin,
87357
87509
  cartographicOrigin,
87358
87510
  modelMatrix
87359
- } = i3sTile.content;
87511
+ } = tileContent;
87360
87512
  const gltfBuilder = new GLTFScenegraph();
87361
- const textureIndex = await this._addI3sTextureToGltf(i3sTile, gltfBuilder);
87513
+ const textureIndex = await this._addI3sTextureToGltf(tileContent, textureFormat, gltfBuilder);
87362
87514
  const pbrMaterialInfo = this._convertI3sMaterialToGltfMaterial(material, textureIndex);
87363
87515
  const materialIndex = gltfBuilder.addMaterial(pbrMaterialInfo);
87364
87516
  const positions = attributes.positions;
@@ -87385,11 +87537,8 @@ var B3dmConverter = class {
87385
87537
  const gltfBuffer = encodeSync(gltfBuilder.gltf, GLTFWriter);
87386
87538
  return gltfBuffer;
87387
87539
  }
87388
- async _addI3sTextureToGltf(i3sTile, gltfBuilder) {
87389
- const {
87390
- content: { texture, material, attributes },
87391
- header: { textureFormat }
87392
- } = i3sTile;
87540
+ async _addI3sTextureToGltf(tileContent, textureFormat, gltfBuilder) {
87541
+ const { texture, material, attributes } = tileContent;
87393
87542
  let textureIndex = null;
87394
87543
  let selectedTexture = texture;
87395
87544
  if (!texture && material) {
@@ -87409,7 +87558,7 @@ var B3dmConverter = class {
87409
87558
  const vertex = positionsValue.subarray(index, index + 3);
87410
87559
  const cartesianOriginVector = new import_core32.Vector3(cartesianOrigin);
87411
87560
  let vertexVector = new import_core32.Vector3(Array.from(vertex)).transform(modelMatrix).add(cartographicOrigin);
87412
- import_geospatial13.Ellipsoid.WGS84.cartographicToCartesian(vertexVector, scratchVector6);
87561
+ import_geospatial14.Ellipsoid.WGS84.cartographicToCartesian(vertexVector, scratchVector6);
87413
87562
  vertexVector = scratchVector6.subtract(cartesianOriginVector);
87414
87563
  newPositionsValue.set(vertexVector, index);
87415
87564
  }
@@ -87525,10 +87674,23 @@ var B3dmConverter = class {
87525
87674
  }
87526
87675
  };
87527
87676
 
87677
+ // src/3d-tiles-attributes-worker.ts
87678
+ var VERSION16 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
87679
+ var Tile3dAttributesWorker = {
87680
+ id: "3d-tiles-attributes",
87681
+ name: "3DTiles Attributes Worker",
87682
+ module: "tile-converter",
87683
+ version: VERSION16,
87684
+ options: {
87685
+ attributes: null
87686
+ }
87687
+ };
87688
+
87528
87689
  // src/3d-tiles-converter/3d-tiles-converter.ts
87529
87690
  var I3S = "I3S";
87530
87691
  var Tiles3DConverter = class {
87531
87692
  constructor() {
87693
+ this.workerSource = {};
87532
87694
  this.options = {};
87533
87695
  this.tilesetPath = "";
87534
87696
  this.vertexCounter = 0;
@@ -87536,20 +87698,27 @@ var Tiles3DConverter = class {
87536
87698
  this.geoidHeightModel = null;
87537
87699
  this.sourceTileset = null;
87538
87700
  this.attributeStorageInfo = null;
87701
+ this.workerSource = {};
87539
87702
  }
87540
87703
  async convert(options) {
87704
+ if (isBrowser) {
87705
+ console.log(BROWSER_ERROR_MESSAGE);
87706
+ return BROWSER_ERROR_MESSAGE;
87707
+ }
87541
87708
  const { inputUrl, outputPath, tilesetName, maxDepth, egmFilePath } = options;
87542
87709
  this.conversionStartTime = import_process2.default.hrtime();
87543
87710
  this.options = { maxDepth };
87544
87711
  console.log("Loading egm file...");
87545
87712
  this.geoidHeightModel = await load(egmFilePath, PGMLoader);
87546
87713
  console.log("Loading egm file completed!");
87714
+ await this.loadWorkers();
87547
87715
  const sourceTilesetJson = await load(inputUrl, I3SLoader, {});
87548
87716
  this.sourceTileset = new Tileset3D(sourceTilesetJson, {
87549
87717
  loadOptions: {
87550
87718
  i3s: { coordinateSystem: COORDINATE_SYSTEM.LNGLAT_OFFSETS, decodeTextures: false }
87551
87719
  }
87552
87720
  });
87721
+ await this.sourceTileset.tilesetInitializationPromise;
87553
87722
  const rootNode = this.sourceTileset.root;
87554
87723
  if (!rootNode.header.obb) {
87555
87724
  rootNode.header.obb = createObbFromMbs(rootNode.header.mbs);
@@ -87571,6 +87740,8 @@ var Tiles3DConverter = class {
87571
87740
  const tileset = (0, import_json_map_transform8.default)({ root: rootTile }, TILESET());
87572
87741
  await writeFile3(this.tilesetPath, JSON.stringify(tileset), "tileset.json");
87573
87742
  this._finishConversion({ slpk: false, outputPath, tilesetName });
87743
+ const workerFarm = WorkerFarm.getWorkerFarm({});
87744
+ workerFarm.destroy();
87574
87745
  }
87575
87746
  async _addChildren(parentSourceNode, parentNode, level) {
87576
87747
  if (this.options.maxDepth && level > this.options.maxDepth) {
@@ -87582,9 +87753,9 @@ var Tiles3DConverter = class {
87582
87753
  if (sourceChild.contentUrl) {
87583
87754
  await this.sourceTileset._loadTile(sourceChild);
87584
87755
  this.vertexCounter += sourceChild.content.vertexCount;
87585
- let attributes = null;
87756
+ let featureAttributes = null;
87586
87757
  if (this.attributeStorageInfo) {
87587
- attributes = await this._loadChildAttributes(sourceChild, this.attributeStorageInfo);
87758
+ featureAttributes = await this._loadChildAttributes(sourceChild, this.attributeStorageInfo);
87588
87759
  }
87589
87760
  if (!sourceChild.header.obb) {
87590
87761
  sourceChild.header.obb = createObbFromMbs(sourceChild.header.mbs);
@@ -87597,7 +87768,11 @@ var Tiles3DConverter = class {
87597
87768
  geometricError: convertScreenThresholdToGeometricError(sourceChild),
87598
87769
  children: []
87599
87770
  };
87600
- const b3dm = await new B3dmConverter().convert(sourceChild, attributes);
87771
+ const i3sAttributesData = {
87772
+ tileContent: sourceChild.content,
87773
+ textureFormat: sourceChild?.header?.textureFormat
87774
+ };
87775
+ const b3dm = await new B3dmConverter().convert(i3sAttributesData, featureAttributes);
87601
87776
  child.content = {
87602
87777
  uri: `${sourceChild.id}.b3dm`,
87603
87778
  boundingVolume
@@ -87690,73 +87865,18 @@ var Tiles3DConverter = class {
87690
87865
  console.log(`File(s) size: `, filesSize, " bytes");
87691
87866
  console.log(`------------------------------------------------`);
87692
87867
  }
87693
- };
87694
-
87695
- // ../zip/src/zip-loader.ts
87696
- var import_jszip2 = __toModule(require_lib4());
87697
- var VERSION14 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
87698
- var ZipLoader = {
87699
- id: "zip",
87700
- module: "zip",
87701
- name: "Zip Archive",
87702
- version: VERSION14,
87703
- extensions: ["zip"],
87704
- mimeTypes: ["application/zip"],
87705
- category: "archive",
87706
- tests: ["PK"],
87707
- options: {},
87708
- parse: parseZipAsync
87709
- };
87710
- async function parseZipAsync(data, options = {}) {
87711
- const promises = [];
87712
- const fileMap = {};
87713
- try {
87714
- const jsZip = new import_jszip2.default();
87715
- const zip = await jsZip.loadAsync(data, options);
87716
- zip.forEach((relativePath, zipEntry) => {
87717
- const subFilename = zipEntry.name;
87718
- const promise = loadZipEntry(jsZip, subFilename, options).then((arrayBufferOrError) => {
87719
- fileMap[relativePath] = arrayBufferOrError;
87720
- });
87721
- promises.push(promise);
87722
- });
87723
- await Promise.all(promises);
87724
- return fileMap;
87725
- } catch (error) {
87726
- options.log.error(`Unable to read zip archive: ${error}`);
87727
- throw error;
87728
- }
87729
- }
87730
- async function loadZipEntry(jsZip, subFilename, options = {}) {
87731
- try {
87732
- const arrayBuffer = await jsZip.file(subFilename).async(options.dataType || "arraybuffer");
87733
- return arrayBuffer;
87734
- } catch (error) {
87735
- options.log.error(`Unable to read ${subFilename} from zip archive: ${error}`);
87736
- return error;
87737
- }
87738
- }
87739
-
87740
- // src/deps-installer/deps-installer.js
87741
- var import_path9 = __toModule(require("path"));
87742
- var PGM_LINK = "https://raw.githubusercontent.com/visgl/deck.gl-data/master/egm/egm2008-5.zip";
87743
- var DepsInstaller = class {
87744
- async install(path2 = "") {
87745
- console.log('Installing "EGM2008-5" model...');
87746
- const fileMap = await load(PGM_LINK, ZipLoader, {});
87747
- let depsPath = process.cwd();
87748
- if (path2) {
87749
- depsPath = (0, import_path9.join)(depsPath, path2);
87750
- }
87751
- await writeFile3(depsPath, new Uint8Array(fileMap["geoids/egm2008-5.pgm"]), "egm2008-5.pgm");
87752
- console.log("All dependencies were installed succesfully.");
87868
+ async loadWorkers() {
87869
+ console.log(`Loading workers source...`);
87870
+ const tile3dAttributesWorkerUrl = getWorkerURL(Tile3dAttributesWorker, { ...getGlobalLoaderOptions() });
87871
+ const sourceResponse = await fetchFile(tile3dAttributesWorkerUrl);
87872
+ const source = await sourceResponse.text();
87873
+ this.workerSource.tile3dWorkerSource = source;
87874
+ console.log(`Loading workers source completed!`);
87753
87875
  }
87754
87876
  };
87755
87877
  // Annotate the CommonJS export names for ESM import in node:
87756
87878
  0 && (module.exports = {
87757
- DepsInstaller,
87758
87879
  I3SConverter,
87759
- NodePages,
87760
87880
  Tiles3DConverter
87761
87881
  });
87762
87882
  /*!