@loaders.gl/tile-converter 3.2.4 → 3.2.7

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 (32) hide show
  1. package/dist/3d-tiles-attributes-worker.js +3 -3
  2. package/dist/3d-tiles-attributes-worker.js.map +1 -1
  3. package/dist/converter.min.js +10 -10
  4. package/dist/dist.min.js +160 -105
  5. package/dist/es5/3d-tiles-attributes-worker.js +1 -1
  6. package/dist/es5/i3s-attributes-worker.js +1 -1
  7. package/dist/es5/i3s-converter/helpers/node-pages.js +102 -46
  8. package/dist/es5/i3s-converter/helpers/node-pages.js.map +1 -1
  9. package/dist/es5/i3s-converter/i3s-converter.js +204 -105
  10. package/dist/es5/i3s-converter/i3s-converter.js.map +1 -1
  11. package/dist/es5/lib/utils/write-queue.js +66 -28
  12. package/dist/es5/lib/utils/write-queue.js.map +1 -1
  13. package/dist/es5/pgm-loader.js +1 -1
  14. package/dist/esm/3d-tiles-attributes-worker.js +1 -1
  15. package/dist/esm/i3s-attributes-worker.js +1 -1
  16. package/dist/esm/i3s-converter/helpers/node-pages.js +3 -3
  17. package/dist/esm/i3s-converter/helpers/node-pages.js.map +1 -1
  18. package/dist/esm/i3s-converter/i3s-converter.js +16 -16
  19. package/dist/esm/i3s-converter/i3s-converter.js.map +1 -1
  20. package/dist/esm/lib/utils/write-queue.js +10 -0
  21. package/dist/esm/lib/utils/write-queue.js.map +1 -1
  22. package/dist/esm/pgm-loader.js +1 -1
  23. package/dist/i3s-attributes-worker.js.map +1 -1
  24. package/dist/i3s-converter/helpers/node-pages.js +3 -3
  25. package/dist/i3s-converter/i3s-converter.js +16 -16
  26. package/dist/lib/utils/write-queue.d.ts +1 -0
  27. package/dist/lib/utils/write-queue.d.ts.map +1 -1
  28. package/dist/lib/utils/write-queue.js +13 -0
  29. package/package.json +15 -15
  30. package/src/i3s-converter/helpers/node-pages.ts +3 -3
  31. package/src/i3s-converter/i3s-converter.ts +16 -16
  32. package/src/lib/utils/write-queue.ts +12 -0
package/dist/dist.min.js CHANGED
@@ -32723,22 +32723,22 @@ var require_zip_archive_output_stream = __commonJS({
32723
32723
  };
32724
32724
  ZipArchiveOutputStream.prototype._smartStream = function(ae, callback) {
32725
32725
  var deflate = ae.getMethod() === constants.METHOD_DEFLATED;
32726
- var process4 = deflate ? new DeflateCRC32Stream(this.options.zlib) : new CRC32Stream();
32726
+ var process5 = deflate ? new DeflateCRC32Stream(this.options.zlib) : new CRC32Stream();
32727
32727
  var error = null;
32728
32728
  function handleStuff() {
32729
- var digest = process4.digest().readUInt32BE(0);
32729
+ var digest = process5.digest().readUInt32BE(0);
32730
32730
  ae.setCrc(digest);
32731
- ae.setSize(process4.size());
32732
- ae.setCompressedSize(process4.size(true));
32731
+ ae.setSize(process5.size());
32732
+ ae.setCompressedSize(process5.size(true));
32733
32733
  this._afterAppend(ae);
32734
32734
  callback(error, ae);
32735
32735
  }
32736
- process4.once("end", handleStuff.bind(this));
32737
- process4.once("error", function(err) {
32736
+ process5.once("end", handleStuff.bind(this));
32737
+ process5.once("error", function(err) {
32738
32738
  error = err;
32739
32739
  });
32740
- process4.pipe(this, { end: false });
32741
- return process4;
32740
+ process5.pipe(this, { end: false });
32741
+ return process5;
32742
32742
  };
32743
32743
  ZipArchiveOutputStream.prototype._writeCentralDirectoryEnd = function() {
32744
32744
  var records = this._entries.length;
@@ -73572,6 +73572,22 @@ function isTransferable(object) {
73572
73572
  }
73573
73573
  return false;
73574
73574
  }
73575
+ function getTransferListForWriter(object) {
73576
+ if (object === null) {
73577
+ return {};
73578
+ }
73579
+ const clone2 = Object.assign({}, object);
73580
+ Object.keys(clone2).forEach((key) => {
73581
+ if (typeof object[key] === "object" && !ArrayBuffer.isView(object[key])) {
73582
+ clone2[key] = getTransferListForWriter(object[key]);
73583
+ } else if (typeof clone2[key] === "function" || clone2[key] instanceof RegExp) {
73584
+ clone2[key] = {};
73585
+ } else {
73586
+ clone2[key] = object[key];
73587
+ }
73588
+ });
73589
+ return clone2;
73590
+ }
73575
73591
 
73576
73592
  // ../worker-utils/src/lib/worker-farm/worker-thread.ts
73577
73593
  var NOOP = () => {
@@ -73821,27 +73837,6 @@ var WorkerFarm = class {
73821
73837
  }
73822
73838
  };
73823
73839
 
73824
- // ../worker-utils/src/lib/worker-utils/remove-nontransferable-options.ts
73825
- function removeNontransferableOptions(object) {
73826
- return JSON.parse(stringifyJSON(object));
73827
- }
73828
- function stringifyJSON(v) {
73829
- const cache = new Set();
73830
- return JSON.stringify(v, (key, value) => {
73831
- if (typeof value === "object" && value !== null) {
73832
- if (cache.has(value)) {
73833
- try {
73834
- return JSON.parse(JSON.stringify(value));
73835
- } catch (err) {
73836
- return void 0;
73837
- }
73838
- }
73839
- cache.add(value);
73840
- }
73841
- return value;
73842
- });
73843
- }
73844
-
73845
73840
  // ../worker-utils/src/lib/worker-api/get-worker-url.ts
73846
73841
  var NPM_TAG = "latest";
73847
73842
  var VERSION2 = typeof VERSION !== "undefined" ? VERSION : NPM_TAG;
@@ -73883,7 +73878,7 @@ async function processOnWorker(worker, data, options = {}, context = {}) {
73883
73878
  const workerPool = workerFarm.getWorkerPool(workerPoolProps);
73884
73879
  const jobName = options.jobName || worker.name;
73885
73880
  const job = await workerPool.startJob(jobName, onMessage.bind(null, context));
73886
- const transferableOptions = removeNontransferableOptions(options);
73881
+ const transferableOptions = getTransferListForWriter(options);
73887
73882
  job.postMessage("process", { input: data, options: transferableOptions });
73888
73883
  const result = await job.result;
73889
73884
  return result.result;
@@ -75721,14 +75716,13 @@ var cullingVolume = new import_culling.CullingVolume([
75721
75716
  function getFrameState(viewport, frameNumber) {
75722
75717
  const { cameraDirection, cameraUp, height } = viewport;
75723
75718
  const { metersPerUnit } = viewport.distanceScales;
75724
- const viewportCenterCartographic = viewport.unprojectPosition(viewport.center);
75725
- const viewportCenterCartesian = import_geospatial2.Ellipsoid.WGS84.cartographicToCartesian(viewportCenterCartographic, new import_core2.Vector3());
75719
+ const viewportCenterCartesian = worldToCartesian(viewport, viewport.center);
75726
75720
  const enuToFixedTransform = import_geospatial2.Ellipsoid.WGS84.eastNorthUpToFixedFrame(viewportCenterCartesian);
75727
75721
  const cameraPositionCartographic = viewport.unprojectPosition(viewport.cameraPosition);
75728
75722
  const cameraPositionCartesian2 = import_geospatial2.Ellipsoid.WGS84.cartographicToCartesian(cameraPositionCartographic, new import_core2.Vector3());
75729
75723
  const cameraDirectionCartesian = new import_core2.Vector3(enuToFixedTransform.transformAsVector(new import_core2.Vector3(cameraDirection).scale(metersPerUnit))).normalize();
75730
75724
  const cameraUpCartesian = new import_core2.Vector3(enuToFixedTransform.transformAsVector(new import_core2.Vector3(cameraUp).scale(metersPerUnit))).normalize();
75731
- commonSpacePlanesToWGS84(viewport, viewportCenterCartesian);
75725
+ commonSpacePlanesToWGS84(viewport);
75732
75726
  const ViewportClass = viewport.constructor;
75733
75727
  const { longitude, latitude, width, bearing, zoom } = viewport;
75734
75728
  const topDownViewport = new ViewportClass({
@@ -75778,18 +75772,32 @@ function limitSelectedTiles(tiles, frameState, maximumTilesSelected) {
75778
75772
  }
75779
75773
  return [selectedTiles, unselectedTiles];
75780
75774
  }
75781
- function commonSpacePlanesToWGS84(viewport, viewportCenterCartesian) {
75775
+ function commonSpacePlanesToWGS84(viewport) {
75782
75776
  const frustumPlanes = viewport.getFrustumPlanes();
75777
+ const nearCenterCommon = closestPointOnPlane(frustumPlanes.near, viewport.cameraPosition);
75778
+ const nearCenterCartesian = worldToCartesian(viewport, nearCenterCommon);
75779
+ const cameraCartesian = worldToCartesian(viewport, viewport.cameraPosition, scratchPosition);
75783
75780
  let i = 0;
75781
+ cullingVolume.planes[i++].fromPointNormal(nearCenterCartesian, scratchVector.copy(nearCenterCartesian).subtract(cameraCartesian));
75784
75782
  for (const dir in frustumPlanes) {
75783
+ if (dir === "near") {
75784
+ continue;
75785
+ }
75785
75786
  const plane = frustumPlanes[dir];
75786
- const distanceToCenter = plane.normal.dot(viewport.center);
75787
- scratchPosition.copy(plane.normal).scale(plane.distance - distanceToCenter).add(viewport.center);
75788
- const cartographicPos = viewport.unprojectPosition(scratchPosition);
75789
- const cartesianPos = import_geospatial2.Ellipsoid.WGS84.cartographicToCartesian(cartographicPos, new import_core2.Vector3());
75790
- cullingVolume.planes[i++].fromPointNormal(cartesianPos, scratchVector.copy(viewportCenterCartesian).subtract(cartesianPos));
75787
+ const posCommon = closestPointOnPlane(plane, nearCenterCommon, scratchPosition);
75788
+ const cartesianPos = worldToCartesian(viewport, posCommon, scratchPosition);
75789
+ cullingVolume.planes[i++].fromPointNormal(cartesianPos, scratchVector.copy(nearCenterCartesian).subtract(cartesianPos));
75791
75790
  }
75792
75791
  }
75792
+ function closestPointOnPlane(plane, refPoint, out = new import_core2.Vector3()) {
75793
+ const distanceToRef = plane.normal.dot(refPoint);
75794
+ out.copy(plane.normal).scale(plane.distance - distanceToRef).add(refPoint);
75795
+ return out;
75796
+ }
75797
+ function worldToCartesian(viewport, point, out = new import_core2.Vector3()) {
75798
+ const cartographicPos = viewport.unprojectPosition(point);
75799
+ return import_geospatial2.Ellipsoid.WGS84.cartographicToCartesian(cartographicPos, out);
75800
+ }
75793
75801
 
75794
75802
  // ../tiles/src/tileset/helpers/zoom.ts
75795
75803
  var import_core3 = __toModule(require_es56());
@@ -76156,7 +76164,7 @@ var TilesetTraverser = class {
76156
76164
  this.requestedTiles = {};
76157
76165
  this.emptyTiles = {};
76158
76166
  }
76159
- get traversalFinished() {
76167
+ traversalFinished(frameState) {
76160
76168
  return true;
76161
76169
  }
76162
76170
  traverse(root, frameState, options) {
@@ -76207,7 +76215,7 @@ var TilesetTraverser = class {
76207
76215
  tile._shouldRefine = shouldRefine && parentRefines;
76208
76216
  }
76209
76217
  const newTime = new Date().getTime();
76210
- if (this.traversalFinished || newTime - this.lastUpdate > this.updateDebounceTime) {
76218
+ if (this.traversalFinished(frameState) || newTime - this.lastUpdate > this.updateDebounceTime) {
76211
76219
  this.lastUpdate = newTime;
76212
76220
  this.options.onTraversalEnd(frameState);
76213
76221
  }
@@ -76744,21 +76752,27 @@ var Tileset3DTraverser = class extends TilesetTraverser {
76744
76752
  }
76745
76753
  };
76746
76754
 
76747
- // ../tiles/src/tileset/traversers/i3s-frame-counter.ts
76755
+ // ../tiles/src/tileset/traversers/i3s-pending-tiles-register.ts
76748
76756
  var I3SPendingTilesRegister = class {
76749
76757
  constructor() {
76750
76758
  this.frameNumberMap = new Map();
76751
76759
  }
76752
- register(frameNumber) {
76753
- const oldCount = this.frameNumberMap.get(frameNumber) || 0;
76754
- this.frameNumberMap.set(frameNumber, oldCount + 1);
76760
+ register(viewportId, frameNumber) {
76761
+ const viewportMap = this.frameNumberMap.get(viewportId) || new Map();
76762
+ const oldCount = viewportMap.get(frameNumber) || 0;
76763
+ viewportMap.set(frameNumber, oldCount + 1);
76764
+ this.frameNumberMap.set(viewportId, viewportMap);
76755
76765
  }
76756
- deregister(frameNumber) {
76757
- const oldCount = this.frameNumberMap.get(frameNumber) || 1;
76758
- this.frameNumberMap.set(frameNumber, oldCount - 1);
76766
+ deregister(viewportId, frameNumber) {
76767
+ const viewportMap = this.frameNumberMap.get(viewportId);
76768
+ if (!viewportMap) {
76769
+ return;
76770
+ }
76771
+ const oldCount = viewportMap.get(frameNumber) || 1;
76772
+ viewportMap.set(frameNumber, oldCount - 1);
76759
76773
  }
76760
- isZero(frameNumber) {
76761
- const count = this.frameNumberMap.get(frameNumber) || 0;
76774
+ isZero(viewportId, frameNumber) {
76775
+ const count = this.frameNumberMap.get(viewportId)?.get(frameNumber) || 0;
76762
76776
  return count === 0;
76763
76777
  }
76764
76778
  };
@@ -76776,41 +76790,58 @@ var I3STileManager = class {
76776
76790
  }
76777
76791
  add(request, key, callback, frameState) {
76778
76792
  if (!this._statusMap[key]) {
76779
- const { frameNumber } = frameState;
76793
+ const {
76794
+ frameNumber,
76795
+ viewport: { id }
76796
+ } = frameState;
76780
76797
  this._statusMap[key] = { request, callback, key, frameState, status: STATUS.REQUESTED };
76781
- this.pendingTilesRegister.register(frameNumber);
76798
+ this.pendingTilesRegister.register(id, frameNumber);
76782
76799
  request().then((data) => {
76783
76800
  this._statusMap[key].status = STATUS.COMPLETED;
76784
- const { frameNumber: actualFrameNumber } = this._statusMap[key].frameState;
76785
- this.pendingTilesRegister.deregister(actualFrameNumber);
76801
+ const {
76802
+ frameNumber: actualFrameNumber,
76803
+ viewport: { id: id2 }
76804
+ } = this._statusMap[key].frameState;
76805
+ this.pendingTilesRegister.deregister(id2, actualFrameNumber);
76786
76806
  this._statusMap[key].callback(data, frameState);
76787
76807
  }).catch((error) => {
76788
76808
  this._statusMap[key].status = STATUS.ERROR;
76789
- const { frameNumber: actualFrameNumber } = this._statusMap[key].frameState;
76790
- this.pendingTilesRegister.deregister(actualFrameNumber);
76809
+ const {
76810
+ frameNumber: actualFrameNumber,
76811
+ viewport: { id: id2 }
76812
+ } = this._statusMap[key].frameState;
76813
+ this.pendingTilesRegister.deregister(id2, actualFrameNumber);
76791
76814
  callback(error);
76792
76815
  });
76793
76816
  }
76794
76817
  }
76795
76818
  update(key, frameState) {
76796
76819
  if (this._statusMap[key]) {
76797
- this.pendingTilesRegister.deregister(this._statusMap[key].frameState.frameNumber);
76798
- this.pendingTilesRegister.register(frameState.frameNumber);
76820
+ const {
76821
+ frameNumber,
76822
+ viewport: { id }
76823
+ } = this._statusMap[key].frameState;
76824
+ this.pendingTilesRegister.deregister(id, frameNumber);
76825
+ const {
76826
+ frameNumber: newFrameNumber,
76827
+ viewport: { id: newViewportId }
76828
+ } = frameState;
76829
+ this.pendingTilesRegister.register(newViewportId, newFrameNumber);
76799
76830
  this._statusMap[key].frameState = frameState;
76800
76831
  }
76801
76832
  }
76802
76833
  find(key) {
76803
76834
  return this._statusMap[key];
76804
76835
  }
76805
- hasPendingTiles(frameNumber) {
76806
- return !this.pendingTilesRegister.isZero(frameNumber);
76836
+ hasPendingTiles(viewportId, frameNumber) {
76837
+ return !this.pendingTilesRegister.isZero(viewportId, frameNumber);
76807
76838
  }
76808
76839
  };
76809
76840
 
76810
76841
  // ../tiles/src/tileset/traversers/i3s-tileset-traverser.ts
76811
76842
  var I3STilesetTraverser = class extends TilesetTraverser {
76812
- get traversalFinished() {
76813
- return !this._tileManager.hasPendingTiles(this._frameNumber || 0);
76843
+ traversalFinished(frameState) {
76844
+ return !this._tileManager.hasPendingTiles(frameState.viewport.id, this._frameNumber || 0);
76814
76845
  }
76815
76846
  constructor(options) {
76816
76847
  super(options);
@@ -76862,7 +76893,7 @@ var I3STilesetTraverser = class extends TilesetTraverser {
76862
76893
  tile.children.push(childTile);
76863
76894
  const frameState = this._tileManager.find(childTile.id).frameState;
76864
76895
  this.updateTile(childTile, frameState);
76865
- if (this._frameNumber === frameState.frameNumber && (this.traversalFinished || new Date().getTime() - this.lastUpdate > this.updateDebounceTime)) {
76896
+ if (this._frameNumber === frameState.frameNumber && (this.traversalFinished(frameState) || new Date().getTime() - this.lastUpdate > this.updateDebounceTime)) {
76866
76897
  this.executeTraversal(childTile, frameState);
76867
76898
  }
76868
76899
  }
@@ -76999,7 +77030,9 @@ var Tileset3D = class {
76999
77030
  } else {
77000
77031
  this.lastUpdatedVieports = viewports;
77001
77032
  }
77002
- this.doUpdate(viewports);
77033
+ if (viewports) {
77034
+ this.doUpdate(viewports);
77035
+ }
77003
77036
  });
77004
77037
  }
77005
77038
  async selectTiles(viewports = null) {
@@ -77010,7 +77043,9 @@ var Tileset3D = class {
77010
77043
  if (!this.updatePromise) {
77011
77044
  this.updatePromise = new Promise((resolve) => {
77012
77045
  setTimeout(() => {
77013
- this.doUpdate(this.lastUpdatedVieports);
77046
+ if (this.lastUpdatedVieports) {
77047
+ this.doUpdate(this.lastUpdatedVieports);
77048
+ }
77014
77049
  resolve(this._frameNumber);
77015
77050
  this.updatePromise = null;
77016
77051
  }, this.options.debounceTime);
@@ -77018,21 +77053,19 @@ var Tileset3D = class {
77018
77053
  }
77019
77054
  return this.updatePromise;
77020
77055
  }
77021
- doUpdate(viewports = null) {
77056
+ doUpdate(viewports) {
77022
77057
  if ("loadTiles" in this.options && !this.options.loadTiles) {
77023
77058
  return;
77024
77059
  }
77025
77060
  if (this.traverseCounter > 0) {
77026
77061
  return;
77027
77062
  }
77028
- if (!(viewports instanceof Array)) {
77029
- viewports = [viewports];
77030
- }
77063
+ const preparedViewports = viewports instanceof Array ? viewports : [viewports];
77031
77064
  this._cache.reset();
77032
77065
  this._frameNumber++;
77033
- this.traverseCounter = viewports.length;
77066
+ this.traverseCounter = preparedViewports.length;
77034
77067
  const viewportsToTraverse = [];
77035
- for (const viewport of viewports) {
77068
+ for (const viewport of preparedViewports) {
77036
77069
  const id = viewport.id;
77037
77070
  if (this._needTraverse(id)) {
77038
77071
  viewportsToTraverse.push(id);
@@ -77040,7 +77073,7 @@ var Tileset3D = class {
77040
77073
  this.traverseCounter--;
77041
77074
  }
77042
77075
  }
77043
- for (const viewport of viewports) {
77076
+ for (const viewport of preparedViewports) {
77044
77077
  const id = viewport.id;
77045
77078
  if (!this.roots[id]) {
77046
77079
  this.roots[id] = this._initializeTileHeaders(this.tileset, null);
@@ -77183,7 +77216,11 @@ var Tileset3D = class {
77183
77216
  this.zoom = 1;
77184
77217
  return;
77185
77218
  }
77186
- this.cartographicCenter = import_geospatial6.Ellipsoid.WGS84.cartesianToCartographic(center, new import_core10.Vector3());
77219
+ if (center[0] !== 0 || center[1] !== 0 || center[2] !== 0) {
77220
+ this.cartographicCenter = import_geospatial6.Ellipsoid.WGS84.cartesianToCartographic(center, new import_core10.Vector3());
77221
+ } else {
77222
+ this.cartographicCenter = new import_core10.Vector3(0, 0, -import_geospatial6.Ellipsoid.WGS84.radii[0]);
77223
+ }
77187
77224
  this.cartesianCenter = center;
77188
77225
  this.zoom = getZoomFromBoundingVolume(root.boundingVolume, this.cartographicCenter);
77189
77226
  }
@@ -83328,13 +83365,23 @@ function getRefine(refine) {
83328
83365
  return refine;
83329
83366
  }
83330
83367
  }
83368
+ function resolveUri(uri, basePath) {
83369
+ const urlSchemeRegex = /^[a-z][0-9a-z+.-]*:/i;
83370
+ if (urlSchemeRegex.test(basePath)) {
83371
+ const url = new URL(uri, `${basePath}/`);
83372
+ return decodeURI(url.toString());
83373
+ } else if (uri.startsWith("/")) {
83374
+ return uri;
83375
+ }
83376
+ return `${basePath}/${uri}`;
83377
+ }
83331
83378
  function normalizeTileData(tile, options) {
83332
83379
  if (!tile) {
83333
83380
  return null;
83334
83381
  }
83335
83382
  if (tile.content) {
83336
83383
  const contentUri = tile.content.uri || tile.content.url;
83337
- tile.contentUrl = `${options.basePath}/${contentUri}`;
83384
+ tile.contentUrl = resolveUri(contentUri, options.basePath);
83338
83385
  }
83339
83386
  tile.id = tile.contentUrl;
83340
83387
  tile.lodMetricType = LOD_METRIC_TYPE.GEOMETRIC_ERROR;
@@ -83372,9 +83419,9 @@ async function normalizeImplicitTileHeaders(tileset) {
83372
83419
  subtrees: { uri: subtreesUriTemplate }
83373
83420
  } = implicitTilingExtension;
83374
83421
  const subtreeUrl = replaceContentUrlTemplate(subtreesUriTemplate, 0, 0, 0, 0);
83375
- const rootSubtreeUrl = `${basePath}/${subtreeUrl}`;
83422
+ const rootSubtreeUrl = resolveUri(subtreeUrl, basePath);
83376
83423
  const rootSubtree = await load(rootSubtreeUrl, Tile3DSubtreeLoader);
83377
- const contentUrlTemplate = `${basePath}/${tileset.root.content.uri}`;
83424
+ const contentUrlTemplate = resolveUri(tileset.root.content.uri, basePath);
83378
83425
  const refine = tileset.root.refine;
83379
83426
  const rootLodMetricValue = tileset.root.geometricError;
83380
83427
  const rootBoundingVolume = tileset.root.boundingVolume;
@@ -83743,7 +83790,7 @@ var stringify = import_dist.default.stringify;
83743
83790
  var parse5 = import_dist.default.parse;
83744
83791
 
83745
83792
  // src/i3s-converter/i3s-converter.ts
83746
- var import_process = __toModule(require("process"));
83793
+ var import_process2 = __toModule(require("process"));
83747
83794
  var import_json_map_transform6 = __toModule(require_json_map_transform());
83748
83795
  var import_md52 = __toModule(require_md52());
83749
83796
 
@@ -83858,14 +83905,14 @@ var NodePages = class {
83858
83905
  for (const [index, nodePage] of this.nodePages.entries()) {
83859
83906
  const nodePageStr = JSON.stringify(nodePage);
83860
83907
  const slpkPath = (0, import_path2.join)(layers0Path, "nodepages");
83861
- writeQueue.enqueue({
83908
+ await writeQueue.enqueue({
83862
83909
  archiveKey: `nodePages/${index.toString()}.json.gz`,
83863
83910
  writePromise: this.writeFile(slpkPath, nodePageStr, `${index.toString()}.json`)
83864
83911
  });
83865
83912
  }
83866
83913
  const metadata = (0, import_json_map_transform.default)({ nodeCount: this.nodesCounter }, METADATA());
83867
83914
  const compress = false;
83868
- writeQueue.enqueue({
83915
+ await writeQueue.enqueue({
83869
83916
  archiveKey: "metadata.json",
83870
83917
  writePromise: this.writeFile(layers0Path, JSON.stringify(metadata), "metadata.json", compress)
83871
83918
  });
@@ -83873,7 +83920,7 @@ var NodePages = class {
83873
83920
  for (const [index, nodePage] of this.nodePages.entries()) {
83874
83921
  const nodePageStr = JSON.stringify(nodePage);
83875
83922
  const nodePagePath = (0, import_path2.join)(layers0Path, "nodepages", index.toString());
83876
- writeQueue.enqueue({ writePromise: this.writeFile(nodePagePath, nodePageStr) });
83923
+ await writeQueue.enqueue({ writePromise: this.writeFile(nodePagePath, nodePageStr) });
83877
83924
  }
83878
83925
  }
83879
83926
  }
@@ -85618,6 +85665,8 @@ var Queue = class extends Array {
85618
85665
  };
85619
85666
 
85620
85667
  // src/lib/utils/write-queue.ts
85668
+ var import_process = __toModule(require("process"));
85669
+ var MEMORY_LIMIT = 4 * 1024 * 1024 * 1024;
85621
85670
  var WriteQueue = class extends Queue {
85622
85671
  constructor(listeningInterval = 2e3, writeConcurrency = 400) {
85623
85672
  super();
@@ -85626,6 +85675,12 @@ var WriteQueue = class extends Queue {
85626
85675
  this.listeningInterval = listeningInterval;
85627
85676
  this.writeConcurrency = writeConcurrency;
85628
85677
  }
85678
+ async enqueue(val) {
85679
+ super.enqueue(val);
85680
+ if (import_process.default.memoryUsage().rss > MEMORY_LIMIT) {
85681
+ await this.startWrite();
85682
+ }
85683
+ }
85629
85684
  startListening() {
85630
85685
  this.intervalId = setInterval(this.startWrite.bind(this), this.listeningInterval);
85631
85686
  }
@@ -85693,7 +85748,7 @@ var I3SAttributesWorker = {
85693
85748
  var BROWSER_ERROR_MESSAGE = "Tile converter does not work in browser, only in node js environment";
85694
85749
 
85695
85750
  // src/i3s-converter/i3s-converter.ts
85696
- var ION_DEFAULT_TOKEN = import_process.default.env?.IonToken || "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJlYWMxMzcyYy0zZjJkLTQwODctODNlNi01MDRkZmMzMjIxOWIiLCJpZCI6OTYyMCwic2NvcGVzIjpbImFzbCIsImFzciIsImdjIl0sImlhdCI6MTU2Mjg2NjI3M30.1FNiClUyk00YH_nWfSGpiQAjR5V2OvREDq1PJ5QMjWQ";
85751
+ var ION_DEFAULT_TOKEN = import_process2.default.env?.IonToken || "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJlYWMxMzcyYy0zZjJkLTQwODctODNlNi01MDRkZmMzMjIxOWIiLCJpZCI6OTYyMCwic2NvcGVzIjpbImFzbCIsImFzciIsImdjIl0sImlhdCI6MTU2Mjg2NjI3M30.1FNiClUyk00YH_nWfSGpiQAjR5V2OvREDq1PJ5QMjWQ";
85697
85752
  var HARDCODED_NODES_PER_PAGE = 64;
85698
85753
  var _3D_TILES = "3DTILES";
85699
85754
  var _3D_OBJECT_LAYER_TYPE = "3DObject";
@@ -85735,7 +85790,7 @@ var I3SConverter = class {
85735
85790
  console.log(BROWSER_ERROR_MESSAGE);
85736
85791
  return BROWSER_ERROR_MESSAGE;
85737
85792
  }
85738
- this.conversionStartTime = import_process.default.hrtime();
85793
+ this.conversionStartTime = import_process2.default.hrtime();
85739
85794
  const {
85740
85795
  tilesetName,
85741
85796
  slpk,
@@ -85867,12 +85922,12 @@ var I3SConverter = class {
85867
85922
  const [child] = await this._createNode(root0, sourceRootTile, parentId, 0);
85868
85923
  const childPath = (0, import_path7.join)(this.layers0Path, "nodes", child.path);
85869
85924
  if (this.options.slpk) {
85870
- this.writeQueue.enqueue({
85925
+ await this.writeQueue.enqueue({
85871
85926
  archiveKey: "nodes/1/3dNodeIndexDocument.json.gz",
85872
85927
  writePromise: writeFileForSlpk(childPath, JSON.stringify(child), "3dNodeIndexDocument.json")
85873
85928
  });
85874
85929
  } else {
85875
- this.writeQueue.enqueue({ writePromise: writeFile3(childPath, JSON.stringify(child)) });
85930
+ await this.writeQueue.enqueue({ writePromise: writeFile3(childPath, JSON.stringify(child)) });
85876
85931
  }
85877
85932
  } else {
85878
85933
  await this._addChildrenWithNeighborsAndWriteFile({
@@ -85886,24 +85941,24 @@ var I3SConverter = class {
85886
85941
  }
85887
85942
  async _writeLayers0() {
85888
85943
  if (this.options.slpk) {
85889
- this.writeQueue.enqueue({
85944
+ await this.writeQueue.enqueue({
85890
85945
  archiveKey: "3dSceneLayer.json.gz",
85891
85946
  writePromise: writeFileForSlpk(this.layers0Path, JSON.stringify(this.layers0), "3dSceneLayer.json")
85892
85947
  });
85893
85948
  } else {
85894
- this.writeQueue.enqueue({
85949
+ await this.writeQueue.enqueue({
85895
85950
  writePromise: writeFile3(this.layers0Path, JSON.stringify(this.layers0))
85896
85951
  });
85897
85952
  }
85898
85953
  }
85899
85954
  async _writeNodeIndexDocument(root0, nodePath, rootPath) {
85900
85955
  if (this.options.slpk) {
85901
- this.writeQueue.enqueue({
85956
+ await this.writeQueue.enqueue({
85902
85957
  archiveKey: `nodes/${nodePath}/3dNodeIndexDocument.json.gz`,
85903
85958
  writePromise: writeFileForSlpk(rootPath, JSON.stringify(root0), "3dNodeIndexDocument.json")
85904
85959
  });
85905
85960
  } else {
85906
- this.writeQueue.enqueue({ writePromise: writeFile3(rootPath, JSON.stringify(root0)) });
85961
+ await this.writeQueue.enqueue({ writePromise: writeFile3(rootPath, JSON.stringify(root0)) });
85907
85962
  }
85908
85963
  }
85909
85964
  async _createSlpk(tilesetPath) {
@@ -86140,26 +86195,26 @@ var I3SConverter = class {
86140
86195
  async _writeGeometries(geometryBuffer, compressedGeometry, childPath, slpkChildPath) {
86141
86196
  if (this.options.slpk) {
86142
86197
  const slpkGeometryPath = (0, import_path7.join)(childPath, "geometries");
86143
- this.writeQueue.enqueue({
86198
+ await this.writeQueue.enqueue({
86144
86199
  archiveKey: `${slpkChildPath}/geometries/0.bin.gz`,
86145
86200
  writePromise: writeFileForSlpk(slpkGeometryPath, geometryBuffer, "0.bin")
86146
86201
  });
86147
86202
  } else {
86148
86203
  const geometryPath = (0, import_path7.join)(childPath, "geometries/0/");
86149
- this.writeQueue.enqueue({
86204
+ await this.writeQueue.enqueue({
86150
86205
  writePromise: writeFile3(geometryPath, geometryBuffer, "index.bin")
86151
86206
  });
86152
86207
  }
86153
86208
  if (this.options.draco) {
86154
86209
  if (this.options.slpk) {
86155
86210
  const slpkCompressedGeometryPath = (0, import_path7.join)(childPath, "geometries");
86156
- this.writeQueue.enqueue({
86211
+ await this.writeQueue.enqueue({
86157
86212
  archiveKey: `${slpkChildPath}/geometries/1.bin.gz`,
86158
86213
  writePromise: writeFileForSlpk(slpkCompressedGeometryPath, compressedGeometry, "1.bin")
86159
86214
  });
86160
86215
  } else {
86161
86216
  const compressedGeometryPath = (0, import_path7.join)(childPath, "geometries/1/");
86162
- this.writeQueue.enqueue({
86217
+ await this.writeQueue.enqueue({
86163
86218
  writePromise: writeFile3(compressedGeometryPath, compressedGeometry, "index.bin")
86164
86219
  });
86165
86220
  }
@@ -86174,13 +86229,13 @@ var I3SConverter = class {
86174
86229
  const sharedDataStr = JSON.stringify(sharedData);
86175
86230
  if (this.options.slpk) {
86176
86231
  const slpkSharedPath = (0, import_path7.join)(childPath, "shared");
86177
- this.writeQueue.enqueue({
86232
+ await this.writeQueue.enqueue({
86178
86233
  archiveKey: `${slpkChildPath}/shared/sharedResource.json.gz`,
86179
86234
  writePromise: writeFileForSlpk(slpkSharedPath, sharedDataStr, "sharedResource.json")
86180
86235
  });
86181
86236
  } else {
86182
86237
  const sharedPath = (0, import_path7.join)(childPath, "shared/");
86183
- this.writeQueue.enqueue({ writePromise: writeFile3(sharedPath, sharedDataStr) });
86238
+ await this.writeQueue.enqueue({ writePromise: writeFile3(sharedPath, sharedDataStr) });
86184
86239
  }
86185
86240
  }
86186
86241
  async _writeTexture(texture, childPath, slpkChildPath) {
@@ -86224,13 +86279,13 @@ var I3SConverter = class {
86224
86279
  if (this.options.slpk) {
86225
86280
  const slpkTexturePath = (0, import_path7.join)(childPath, "textures");
86226
86281
  const compress = false;
86227
- this.writeQueue.enqueue({
86282
+ await this.writeQueue.enqueue({
86228
86283
  archiveKey: `${slpkChildPath}/textures/${name8}.${format}`,
86229
86284
  writePromise: writeFileForSlpk(slpkTexturePath, textureData, `${name8}.${format}`, compress)
86230
86285
  });
86231
86286
  } else {
86232
86287
  const texturePath = (0, import_path7.join)(childPath, `textures/${name8}/`);
86233
- this.writeQueue.enqueue({
86288
+ await this.writeQueue.enqueue({
86234
86289
  writePromise: writeFile3(texturePath, textureData, `index.${format}`)
86235
86290
  });
86236
86291
  }
@@ -86242,13 +86297,13 @@ var I3SConverter = class {
86242
86297
  const fileBuffer = new Uint8Array(attributes[index]);
86243
86298
  if (this.options.slpk) {
86244
86299
  const slpkAttributesPath = (0, import_path7.join)(childPath, "attributes", folderName);
86245
- this.writeQueue.enqueue({
86300
+ await this.writeQueue.enqueue({
86246
86301
  archiveKey: `${slpkChildPath}/attributes/${folderName}.bin.gz`,
86247
86302
  writePromise: writeFileForSlpk(slpkAttributesPath, fileBuffer, "0.bin")
86248
86303
  });
86249
86304
  } else {
86250
86305
  const attributesPath = (0, import_path7.join)(childPath, `attributes/${folderName}/0`);
86251
- this.writeQueue.enqueue({
86306
+ await this.writeQueue.enqueue({
86252
86307
  writePromise: writeFile3(attributesPath, fileBuffer, "index.bin")
86253
86308
  });
86254
86309
  }
@@ -86408,7 +86463,7 @@ var I3SConverter = class {
86408
86463
  const { tilesCount, tilesWithAddRefineCount } = this.refinementCounter;
86409
86464
  const addRefinementPercentage = tilesWithAddRefineCount ? tilesWithAddRefineCount / tilesCount * 100 : 0;
86410
86465
  const filesSize = await calculateFilesSize(params);
86411
- const diff = import_process.default.hrtime(this.conversionStartTime);
86466
+ const diff = import_process2.default.hrtime(this.conversionStartTime);
86412
86467
  const conversionTime = timeConverter(diff);
86413
86468
  console.log(`------------------------------------------------`);
86414
86469
  console.log(`Finishing conversion of ${_3D_TILES}`);
@@ -86426,15 +86481,15 @@ var I3SConverter = class {
86426
86481
  "cesium-ion": { accessToken: this.options.token || ION_DEFAULT_TOKEN }
86427
86482
  };
86428
86483
  const preloadOptions = await this.Loader.preload(this.options.inputUrl, options);
86429
- this.refreshTokenTime = import_process.default.hrtime();
86484
+ this.refreshTokenTime = import_process2.default.hrtime();
86430
86485
  return { ...options, ...preloadOptions };
86431
86486
  }
86432
86487
  async _updateTilesetOptions() {
86433
- const diff = import_process.default.hrtime(this.refreshTokenTime);
86488
+ const diff = import_process2.default.hrtime(this.refreshTokenTime);
86434
86489
  if (diff[0] < REFRESH_TOKEN_TIMEOUT) {
86435
86490
  return;
86436
86491
  }
86437
- this.refreshTokenTime = import_process.default.hrtime();
86492
+ this.refreshTokenTime = import_process2.default.hrtime();
86438
86493
  const preloadOptions = await this._fetchPreloadOptions();
86439
86494
  this.sourceTileset.options = { ...this.sourceTileset.options, ...preloadOptions };
86440
86495
  if (preloadOptions.headers) {
@@ -86480,7 +86535,7 @@ var I3SConverter = class {
86480
86535
 
86481
86536
  // src/3d-tiles-converter/3d-tiles-converter.ts
86482
86537
  var import_path8 = __toModule(require("path"));
86483
- var import_process2 = __toModule(require("process"));
86538
+ var import_process3 = __toModule(require("process"));
86484
86539
  var import_json_map_transform8 = __toModule(require_json_map_transform());
86485
86540
 
86486
86541
  // ../i3s/src/lib/parsers/parse-i3s-tile-content.ts
@@ -87710,7 +87765,7 @@ var Tiles3DConverter = class {
87710
87765
  return BROWSER_ERROR_MESSAGE;
87711
87766
  }
87712
87767
  const { inputUrl, outputPath, tilesetName, maxDepth, egmFilePath } = options;
87713
- this.conversionStartTime = import_process2.default.hrtime();
87768
+ this.conversionStartTime = import_process3.default.hrtime();
87714
87769
  this.options = { maxDepth };
87715
87770
  console.log("Loading egm file...");
87716
87771
  this.geoidHeightModel = await load(egmFilePath, PGMLoader);
@@ -87860,7 +87915,7 @@ var Tiles3DConverter = class {
87860
87915
  }
87861
87916
  async _finishConversion(params) {
87862
87917
  const filesSize = await calculateFilesSize(params);
87863
- const diff = import_process2.default.hrtime(this.conversionStartTime);
87918
+ const diff = import_process3.default.hrtime(this.conversionStartTime);
87864
87919
  const conversionTime = timeConverter(diff);
87865
87920
  console.log(`------------------------------------------------`);
87866
87921
  console.log(`Finish conversion of ${I3S}`);
@@ -8,7 +8,7 @@ exports._typecheckI3SAttributesWorker = exports.Tile3dAttributesWorker = void 0;
8
8
 
9
9
  var _workerUtils = require("@loaders.gl/worker-utils");
10
10
 
11
- var VERSION = typeof "3.2.4" !== 'undefined' ? "3.2.4" : 'latest';
11
+ var VERSION = typeof "3.2.7" !== 'undefined' ? "3.2.7" : 'latest';
12
12
  var Tile3dAttributesWorker = {
13
13
  id: '3d-tiles-attributes',
14
14
  name: '3DTiles Attributes Worker',
@@ -8,7 +8,7 @@ exports._typecheckI3SAttributesWorker = exports.I3SAttributesWorker = void 0;
8
8
 
9
9
  var _workerUtils = require("@loaders.gl/worker-utils");
10
10
 
11
- var VERSION = typeof "3.2.4" !== 'undefined' ? "3.2.4" : 'latest';
11
+ var VERSION = typeof "3.2.7" !== 'undefined' ? "3.2.7" : 'latest';
12
12
  var I3SAttributesWorker = {
13
13
  id: 'i3s-attributes',
14
14
  name: 'I3S Attributes Worker',