@loaders.gl/i3s 4.2.0-alpha.1 → 4.2.0-alpha.2

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 (36) hide show
  1. package/dist/arcgis-webscene-loader.js +1 -1
  2. package/dist/dist.dev.js +290 -59
  3. package/dist/i3s-attribute-loader.js +1 -1
  4. package/dist/i3s-building-scene-layer-loader.js +1 -1
  5. package/dist/i3s-content-loader.js +1 -1
  6. package/dist/i3s-content-worker-node.js +22 -22
  7. package/dist/i3s-content-worker-node.js.map +3 -3
  8. package/dist/i3s-content-worker.js +25 -8
  9. package/dist/i3s-loader.js +1 -1
  10. package/dist/i3s-node-page-loader.js +1 -1
  11. package/dist/i3s-slpk-loader.js +1 -1
  12. package/dist/index.cjs +54 -23
  13. package/dist/index.d.ts +1 -1
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +1 -0
  16. package/dist/index.js.map +1 -1
  17. package/dist/lib/helpers/i3s-nodepages-tiles.d.ts.map +1 -1
  18. package/dist/lib/helpers/i3s-nodepages-tiles.js +1 -1
  19. package/dist/lib/helpers/i3s-nodepages-tiles.js.map +1 -1
  20. package/dist/lib/parsers/parse-i3s-tile-content.d.ts.map +1 -1
  21. package/dist/lib/parsers/parse-i3s-tile-content.js +13 -1
  22. package/dist/lib/parsers/parse-i3s-tile-content.js.map +1 -1
  23. package/dist/lib/parsers/parse-slpk/parse-slpk.d.ts +1 -1
  24. package/dist/lib/parsers/parse-slpk/parse-slpk.d.ts.map +1 -1
  25. package/dist/lib/parsers/parse-slpk/parse-slpk.js +2 -2
  26. package/dist/lib/parsers/parse-slpk/parse-slpk.js.map +1 -1
  27. package/dist/lib/parsers/parse-slpk/slpk-archieve.d.ts +10 -6
  28. package/dist/lib/parsers/parse-slpk/slpk-archieve.d.ts.map +1 -1
  29. package/dist/lib/parsers/parse-slpk/slpk-archieve.js +23 -15
  30. package/dist/lib/parsers/parse-slpk/slpk-archieve.js.map +1 -1
  31. package/package.json +10 -10
  32. package/src/index.ts +1 -1
  33. package/src/lib/helpers/i3s-nodepages-tiles.ts +3 -1
  34. package/src/lib/parsers/parse-i3s-tile-content.ts +25 -2
  35. package/src/lib/parsers/parse-slpk/parse-slpk.ts +3 -2
  36. package/src/lib/parsers/parse-slpk/slpk-archieve.ts +34 -23
@@ -106,7 +106,7 @@
106
106
  );
107
107
  globalThis._loadersgl_.version = NPM_TAG;
108
108
  } else {
109
- globalThis._loadersgl_.version = "4.2.0-alpha.1";
109
+ globalThis._loadersgl_.version = "4.2.0-alpha.2";
110
110
  }
111
111
  }
112
112
  return globalThis._loadersgl_.version;
@@ -1442,7 +1442,7 @@
1442
1442
  var navigator_ = globalThis.navigator || {};
1443
1443
 
1444
1444
  // ../../node_modules/@probe.gl/log/node_modules/@probe.gl/env/dist/utils/globals.js
1445
- var VERSION2 = true ? "4.2.0-alpha.1" : "untranspiled source";
1445
+ var VERSION2 = true ? "4.2.0-alpha.2" : "untranspiled source";
1446
1446
  var isBrowser4 = isBrowser3();
1447
1447
 
1448
1448
  // ../../node_modules/@probe.gl/log/dist/utils/local-storage.js
@@ -5310,7 +5310,7 @@
5310
5310
  _defineProperty(Ellipsoid, "WGS84", new Ellipsoid(WGS84_RADIUS_X, WGS84_RADIUS_Y, WGS84_RADIUS_Z));
5311
5311
 
5312
5312
  // ../images/src/lib/utils/version.ts
5313
- var VERSION3 = true ? "4.2.0-alpha.1" : "latest";
5313
+ var VERSION3 = true ? "4.2.0-alpha.2" : "latest";
5314
5314
 
5315
5315
  // ../images/src/lib/category-api/image-type.ts
5316
5316
  var parseImageNode = globalThis.loaders?.parseImageNode;
@@ -5716,7 +5716,7 @@
5716
5716
  };
5717
5717
 
5718
5718
  // ../draco/src/lib/utils/version.ts
5719
- var VERSION4 = true ? "4.2.0-alpha.1" : "latest";
5719
+ var VERSION4 = true ? "4.2.0-alpha.2" : "latest";
5720
5720
 
5721
5721
  // ../draco/src/draco-loader.ts
5722
5722
  var DracoLoader = {
@@ -6319,7 +6319,7 @@
6319
6319
  }
6320
6320
 
6321
6321
  // ../textures/src/lib/utils/version.ts
6322
- var VERSION5 = true ? "4.2.0-alpha.1" : "latest";
6322
+ var VERSION5 = true ? "4.2.0-alpha.2" : "latest";
6323
6323
 
6324
6324
  // ../textures/src/lib/parsers/basis-module-loader.ts
6325
6325
  var BASIS_EXTERNAL_LIBRARIES = {
@@ -7481,7 +7481,11 @@
7481
7481
  texture: null
7482
7482
  };
7483
7483
  if (tileOptions.textureUrl) {
7484
- const url = getUrlWithToken(tileOptions.textureUrl, options?.i3s?.token);
7484
+ const url = getUrlWithToken(
7485
+ getInternalPathFromUrl(tileOptions.textureUrl),
7486
+ // @ts-expect-error options is not properly typed
7487
+ options?.i3s?.token
7488
+ );
7485
7489
  const loader = getLoaderForTextureFormat(tileOptions.textureFormat);
7486
7490
  const fetchFunc = context?.fetch || fetch;
7487
7491
  const response = await fetchFunc(url);
@@ -7519,6 +7523,18 @@
7519
7523
  }
7520
7524
  return await parseI3SNodeGeometry(arrayBuffer, content, tileOptions, tilesetOptions, options);
7521
7525
  }
7526
+ function getInternalPathFromUrl(url) {
7527
+ const slpkUrlParts = url.split(".slpk");
7528
+ let filename2;
7529
+ if (slpkUrlParts.length === 1) {
7530
+ filename2 = url;
7531
+ } else if (slpkUrlParts.length === 2) {
7532
+ filename2 = slpkUrlParts[1].slice(1);
7533
+ } else {
7534
+ filename2 = url;
7535
+ }
7536
+ return filename2;
7537
+ }
7522
7538
  async function parseI3SNodeGeometry(arrayBuffer, content, tileOptions, tilesetOptions, options) {
7523
7539
  const contentByteLength = arrayBuffer.byteLength;
7524
7540
  let attributes;
@@ -7583,7 +7599,8 @@
7583
7599
  flattenFeatureIdsByFaceRanges(normalizedFeatureAttributes);
7584
7600
  attributes = concatAttributes(normalizedVertexAttributes, normalizedFeatureAttributes);
7585
7601
  }
7586
- if (!options?.i3s?.coordinateSystem || options.i3s.coordinateSystem === 2 /* METER_OFFSETS */) {
7602
+ if (!options?.i3s?.coordinateSystem || // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
7603
+ options.i3s.coordinateSystem === 2 /* METER_OFFSETS */) {
7587
7604
  const enuMatrix = parsePositions(attributes.position, tileOptions);
7588
7605
  content.modelMatrix = enuMatrix.invert();
7589
7606
  content.coordinateSystem = 2 /* METER_OFFSETS */;
@@ -7847,7 +7864,7 @@
7847
7864
  }
7848
7865
 
7849
7866
  // src/i3s-content-loader.ts
7850
- var VERSION6 = true ? "4.2.0-alpha.1" : "latest";
7867
+ var VERSION6 = true ? "4.2.0-alpha.2" : "latest";
7851
7868
  var I3SContentLoader = {
7852
7869
  name: "I3S Content (Indexed Scene Layers)",
7853
7870
  id: "i3s-content",
@@ -3,7 +3,7 @@ import { I3SContentLoader } from "./i3s-content-loader.js";
3
3
  import { normalizeTileData, normalizeTilesetData } from "./lib/parsers/parse-i3s.js";
4
4
  import { COORDINATE_SYSTEM } from "./lib/parsers/constants.js";
5
5
  import { getUrlWithoutParams } from "./lib/utils/url-utils.js";
6
- const VERSION = typeof "4.2.0-alpha.1" !== 'undefined' ? "4.2.0-alpha.1" : 'latest';
6
+ const VERSION = typeof "4.2.0-alpha.2" !== 'undefined' ? "4.2.0-alpha.2" : 'latest';
7
7
  const TILESET_REGEX = /layers\/[0-9]+$/;
8
8
  const TILE_HEADER_REGEX = /nodes\/([0-9-]+|root)$/;
9
9
  const SLPK_HEX = '504b0304';
@@ -1,4 +1,4 @@
1
- const VERSION = typeof "4.2.0-alpha.1" !== 'undefined' ? "4.2.0-alpha.1" : 'latest';
1
+ const VERSION = typeof "4.2.0-alpha.2" !== 'undefined' ? "4.2.0-alpha.2" : 'latest';
2
2
  export const I3SNodePageLoader = {
3
3
  name: 'I3S Node Page',
4
4
  id: 'i3s-node-page',
@@ -1,6 +1,6 @@
1
1
  import { DataViewFile } from '@loaders.gl/loader-utils';
2
2
  import { parseSLPKArchive } from "./lib/parsers/parse-slpk/parse-slpk.js";
3
- const VERSION = typeof "4.2.0-alpha.1" !== 'undefined' ? "4.2.0-alpha.1" : 'latest';
3
+ const VERSION = typeof "4.2.0-alpha.2" !== 'undefined' ? "4.2.0-alpha.2" : 'latest';
4
4
  export const SLPKLoader = {
5
5
  name: 'I3S SLPK (Scene Layer Package)',
6
6
  id: 'slpk',
package/dist/index.cjs CHANGED
@@ -28,6 +28,7 @@ __export(src_exports, {
28
28
  I3SLoader: () => I3SLoader,
29
29
  I3SNodePageLoader: () => I3SNodePageLoader,
30
30
  LayerError: () => LayerError,
31
+ SLPKArchive: () => SLPKArchive,
31
32
  SLPKLoader: () => SLPKLoader,
32
33
  customizeColors: () => customizeColors,
33
34
  loadFeatureAttributes: () => loadFeatureAttributes,
@@ -165,7 +166,11 @@ async function parseI3STileContent(arrayBuffer, tileOptions, tilesetOptions, opt
165
166
  texture: null
166
167
  };
167
168
  if (tileOptions.textureUrl) {
168
- const url = getUrlWithToken(tileOptions.textureUrl, (_a = options == null ? void 0 : options.i3s) == null ? void 0 : _a.token);
169
+ const url = getUrlWithToken(
170
+ getInternalPathFromUrl(tileOptions.textureUrl),
171
+ // @ts-expect-error options is not properly typed
172
+ (_a = options == null ? void 0 : options.i3s) == null ? void 0 : _a.token
173
+ );
169
174
  const loader = getLoaderForTextureFormat(tileOptions.textureFormat);
170
175
  const fetchFunc = (context == null ? void 0 : context.fetch) || fetch;
171
176
  const response = await fetchFunc(url);
@@ -203,6 +208,18 @@ async function parseI3STileContent(arrayBuffer, tileOptions, tilesetOptions, opt
203
208
  }
204
209
  return await parseI3SNodeGeometry(arrayBuffer, content, tileOptions, tilesetOptions, options);
205
210
  }
211
+ function getInternalPathFromUrl(url) {
212
+ const slpkUrlParts = url.split(".slpk");
213
+ let filename;
214
+ if (slpkUrlParts.length === 1) {
215
+ filename = url;
216
+ } else if (slpkUrlParts.length === 2) {
217
+ filename = slpkUrlParts[1].slice(1);
218
+ } else {
219
+ filename = url;
220
+ }
221
+ return filename;
222
+ }
206
223
  async function parseI3SNodeGeometry(arrayBuffer, content, tileOptions, tilesetOptions, options) {
207
224
  var _a, _b;
208
225
  const contentByteLength = arrayBuffer.byteLength;
@@ -268,7 +285,8 @@ async function parseI3SNodeGeometry(arrayBuffer, content, tileOptions, tilesetOp
268
285
  flattenFeatureIdsByFaceRanges(normalizedFeatureAttributes);
269
286
  attributes = concatAttributes(normalizedVertexAttributes, normalizedFeatureAttributes);
270
287
  }
271
- if (!((_b = options == null ? void 0 : options.i3s) == null ? void 0 : _b.coordinateSystem) || options.i3s.coordinateSystem === 2 /* METER_OFFSETS */) {
288
+ if (!((_b = options == null ? void 0 : options.i3s) == null ? void 0 : _b.coordinateSystem) || // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
289
+ options.i3s.coordinateSystem === 2 /* METER_OFFSETS */) {
272
290
  const enuMatrix = parsePositions(attributes.position, tileOptions);
273
291
  content.modelMatrix = enuMatrix.invert();
274
292
  content.coordinateSystem = 2 /* METER_OFFSETS */;
@@ -624,7 +642,7 @@ var I3SNodePagesTiles = class {
624
642
  const pageIndex = Math.floor(id / this.nodesPerPage);
625
643
  if (!this.nodePages[pageIndex] && !this.pendingNodePages[pageIndex]) {
626
644
  const nodePageUrl = getUrlWithToken(
627
- `${this.url}/nodepages/${pageIndex}`,
645
+ this.url.indexOf(".slpk") !== -1 ? `nodepages/${pageIndex}` : `${this.url}/nodepages/${pageIndex}`,
628
646
  // @ts-expect-error this.options is not properly typed
629
647
  (_a = this.options.i3s) == null ? void 0 : _a.token
630
648
  );
@@ -1051,14 +1069,18 @@ var PATH_DESCRIPTIONS = [
1051
1069
  extensions: ["/sharedResource.json.gz"]
1052
1070
  }
1053
1071
  ];
1054
- var SLPKArchive = class {
1055
- constructor(slpkArchive, hashTable) {
1056
- /** Array of hashes and offsets into archive */
1057
- // hashToOffsetMap: Record<string, number>;
1072
+ var SLPKArchive = class extends import_zip.IndexedArchive {
1073
+ /**
1074
+ * Constructor
1075
+ * @param fileProvider - instance of a binary data reader
1076
+ * @param hashTable - pre-loaded hashTable. If presented, getFile will skip reading the hash file
1077
+ * @param fileName - name of the archive. It is used to add to an URL of a loader context
1078
+ */
1079
+ constructor(fileProvider, hashTable, fileName) {
1080
+ super(fileProvider, hashTable, fileName);
1058
1081
  this._textEncoder = new TextEncoder();
1059
1082
  this._textDecoder = new TextDecoder();
1060
1083
  this._md5Hash = new import_crypto.MD5Hash();
1061
- this.slpkArchive = slpkArchive;
1062
1084
  this.hashTable = hashTable;
1063
1085
  }
1064
1086
  /**
@@ -1122,26 +1144,35 @@ var SLPKArchive = class {
1122
1144
  * @returns buffer with the raw file data
1123
1145
  */
1124
1146
  async getFileBytes(path) {
1125
- const binaryPath = this._textEncoder.encode(path);
1126
- const nameHash = await this._md5Hash.hash(binaryPath.buffer, "hex");
1127
- const offset = this.hashTable[nameHash];
1128
- if (offset === void 0) {
1129
- return void 0;
1130
- }
1131
- const localFileHeader = await (0, import_zip.parseZipLocalFileHeader)(offset, this.slpkArchive);
1132
- if (!localFileHeader) {
1133
- return void 0;
1147
+ let compressedFile;
1148
+ if (this.hashTable) {
1149
+ const binaryPath = this._textEncoder.encode(path);
1150
+ const nameHash = await this._md5Hash.hash(binaryPath.buffer, "hex");
1151
+ const offset = this.hashTable[nameHash];
1152
+ if (offset === void 0) {
1153
+ return void 0;
1154
+ }
1155
+ const localFileHeader = await (0, import_zip.parseZipLocalFileHeader)(offset, this.fileProvider);
1156
+ if (!localFileHeader) {
1157
+ return void 0;
1158
+ }
1159
+ compressedFile = await this.fileProvider.slice(
1160
+ localFileHeader.fileDataOffset,
1161
+ localFileHeader.fileDataOffset + localFileHeader.compressedSize
1162
+ );
1163
+ } else {
1164
+ try {
1165
+ compressedFile = await this.getFileWithoutHash(path);
1166
+ } catch {
1167
+ compressedFile = void 0;
1168
+ }
1134
1169
  }
1135
- const compressedFile = this.slpkArchive.slice(
1136
- localFileHeader.fileDataOffset,
1137
- localFileHeader.fileDataOffset + localFileHeader.compressedSize
1138
- );
1139
1170
  return compressedFile;
1140
1171
  }
1141
1172
  };
1142
1173
 
1143
1174
  // src/lib/parsers/parse-slpk/parse-slpk.ts
1144
- async function parseSLPKArchive(fileProvider, cb) {
1175
+ async function parseSLPKArchive(fileProvider, cb, fileName) {
1145
1176
  const hashCDOffset = await (0, import_zip2.searchFromTheEnd)(fileProvider, import_zip2.CD_HEADER_SIGNATURE);
1146
1177
  const cdFileHeader = await (0, import_zip2.parseZipCDFileHeader)(hashCDOffset, fileProvider);
1147
1178
  let hashTable;
@@ -1165,7 +1196,7 @@ async function parseSLPKArchive(fileProvider, cb) {
1165
1196
  );
1166
1197
  hashTable = (0, import_zip2.parseHashTable)(hashFile);
1167
1198
  }
1168
- return new SLPKArchive(fileProvider, hashTable);
1199
+ return new SLPKArchive(fileProvider, hashTable, fileName);
1169
1200
  }
1170
1201
 
1171
1202
  // src/i3s-slpk-loader.ts
package/dist/index.d.ts CHANGED
@@ -8,7 +8,7 @@ export { I3SAttributeLoader, loadFeatureAttributes } from './i3s-attribute-loade
8
8
  export { I3SBuildingSceneLayerLoader } from './i3s-building-scene-layer-loader';
9
9
  export { I3SNodePageLoader } from './i3s-node-page-loader';
10
10
  export { ArcGISWebSceneLoader } from './arcgis-webscene-loader';
11
- export type { SLPKArchive } from './lib/parsers/parse-slpk/slpk-archieve';
11
+ export { SLPKArchive } from './lib/parsers/parse-slpk/slpk-archieve';
12
12
  export { parseSLPKArchive } from './lib/parsers/parse-slpk/parse-slpk';
13
13
  export { LayerError } from './lib/parsers/parse-arcgis-webscene';
14
14
  export { customizeColors } from './lib/utils/customize-colors';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,YAAY,EACV,eAAe,EACf,GAAG,EACH,GAAG,EACH,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,YAAY,EACZ,oBAAoB,EACpB,KAAK,EACL,SAAS,EACT,SAAS,EACT,mBAAmB,EACnB,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,oBAAoB,EACpB,UAAU,EACV,eAAe,EACf,SAAS,EACT,MAAM,EACN,gBAAgB,EAChB,SAAS,EACT,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,UAAU,EACV,cAAc,EACd,SAAS,EACT,SAAS,EACT,UAAU,EACV,qBAAqB,EACrB,gBAAgB,EAChB,2BAA2B,EAC5B,MAAM,SAAS,CAAC;AACjB,YAAY,EAAC,gBAAgB,EAAC,MAAM,cAAc,CAAC;AAEnD,OAAO,EAAC,iBAAiB,EAAC,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AACvC,OAAO,EAAC,UAAU,EAAC,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAC,gBAAgB,EAAC,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAC,kBAAkB,EAAE,qBAAqB,EAAC,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAC,2BAA2B,EAAC,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAC,iBAAiB,EAAC,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAC,oBAAoB,EAAC,MAAM,0BAA0B,CAAC;AAE9D,YAAY,EAAC,WAAW,EAAC,MAAM,wCAAwC,CAAC;AACxE,OAAO,EAAC,gBAAgB,EAAC,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAC,UAAU,EAAC,MAAM,qCAAqC,CAAC;AAC/D,OAAO,EAAC,eAAe,EAAC,MAAM,8BAA8B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,YAAY,EACV,eAAe,EACf,GAAG,EACH,GAAG,EACH,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,YAAY,EACZ,oBAAoB,EACpB,KAAK,EACL,SAAS,EACT,SAAS,EACT,mBAAmB,EACnB,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,oBAAoB,EACpB,UAAU,EACV,eAAe,EACf,SAAS,EACT,MAAM,EACN,gBAAgB,EAChB,SAAS,EACT,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,UAAU,EACV,cAAc,EACd,SAAS,EACT,SAAS,EACT,UAAU,EACV,qBAAqB,EACrB,gBAAgB,EAChB,2BAA2B,EAC5B,MAAM,SAAS,CAAC;AACjB,YAAY,EAAC,gBAAgB,EAAC,MAAM,cAAc,CAAC;AAEnD,OAAO,EAAC,iBAAiB,EAAC,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AACvC,OAAO,EAAC,UAAU,EAAC,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAC,gBAAgB,EAAC,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAC,kBAAkB,EAAE,qBAAqB,EAAC,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAC,2BAA2B,EAAC,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAC,iBAAiB,EAAC,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAC,oBAAoB,EAAC,MAAM,0BAA0B,CAAC;AAE9D,OAAO,EAAC,WAAW,EAAC,MAAM,wCAAwC,CAAC;AACnE,OAAO,EAAC,gBAAgB,EAAC,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAC,UAAU,EAAC,MAAM,qCAAqC,CAAC;AAC/D,OAAO,EAAC,eAAe,EAAC,MAAM,8BAA8B,CAAC"}
package/dist/index.js CHANGED
@@ -6,6 +6,7 @@ export { I3SAttributeLoader, loadFeatureAttributes } from "./i3s-attribute-loade
6
6
  export { I3SBuildingSceneLayerLoader } from "./i3s-building-scene-layer-loader.js";
7
7
  export { I3SNodePageLoader } from "./i3s-node-page-loader.js";
8
8
  export { ArcGISWebSceneLoader } from "./arcgis-webscene-loader.js";
9
+ export { SLPKArchive } from "./lib/parsers/parse-slpk/slpk-archieve.js";
9
10
  export { parseSLPKArchive } from "./lib/parsers/parse-slpk/parse-slpk.js";
10
11
  export { LayerError } from "./lib/parsers/parse-arcgis-webscene.js";
11
12
  export { customizeColors } from "./lib/utils/customize-colors.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["COORDINATE_SYSTEM","I3SLoader","SLPKLoader","I3SContentLoader","I3SAttributeLoader","loadFeatureAttributes","I3SBuildingSceneLayerLoader","I3SNodePageLoader","ArcGISWebSceneLoader","parseSLPKArchive","LayerError","customizeColors"],"sources":["../src/index.ts"],"sourcesContent":["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nexport type {\n BoundingVolumes,\n Mbs,\n Obb,\n I3STilesetHeader,\n I3STileContent,\n I3STileHeader,\n SceneLayer3D,\n AttributeStorageInfo,\n Field,\n ESRIField,\n PopupInfo,\n Node3DIndexDocument,\n LodSelection,\n NodeReference,\n Resource,\n MaxScreenThresholdSQ,\n NodeInPage,\n SharedResources,\n Attribute,\n Extent,\n FeatureAttribute,\n FieldInfo,\n I3SMaterialDefinition,\n TextureDefinitionInfo,\n MaterialDefinitionInfo,\n FullExtent,\n StatisticsInfo,\n StatsInfo,\n Histogram,\n ValueCount,\n BuildingSceneSublayer,\n OperationalLayer,\n TextureSetDefinitionFormats\n} from './types';\nexport type {I3SLoaderOptions} from './i3s-loader';\n\nexport {COORDINATE_SYSTEM} from './lib/parsers/constants';\n\nexport {I3SLoader} from './i3s-loader';\nexport {SLPKLoader} from './i3s-slpk-loader';\nexport {I3SContentLoader} from './i3s-content-loader';\nexport {I3SAttributeLoader, loadFeatureAttributes} from './i3s-attribute-loader';\nexport {I3SBuildingSceneLayerLoader} from './i3s-building-scene-layer-loader';\nexport {I3SNodePageLoader} from './i3s-node-page-loader';\nexport {ArcGISWebSceneLoader} from './arcgis-webscene-loader';\n\nexport type {SLPKArchive} from './lib/parsers/parse-slpk/slpk-archieve';\nexport {parseSLPKArchive} from './lib/parsers/parse-slpk/parse-slpk';\nexport {LayerError} from './lib/parsers/parse-arcgis-webscene';\nexport {customizeColors} from './lib/utils/customize-colors';\n"],"mappings":"SAyCQA,iBAAiB;AAAA,SAEjBC,SAAS;AAAA,SACTC,UAAU;AAAA,SACVC,gBAAgB;AAAA,SAChBC,kBAAkB,EAAEC,qBAAqB;AAAA,SACzCC,2BAA2B;AAAA,SAC3BC,iBAAiB;AAAA,SACjBC,oBAAoB;AAAA,SAGpBC,gBAAgB;AAAA,SAChBC,UAAU;AAAA,SACVC,eAAe"}
1
+ {"version":3,"file":"index.js","names":["COORDINATE_SYSTEM","I3SLoader","SLPKLoader","I3SContentLoader","I3SAttributeLoader","loadFeatureAttributes","I3SBuildingSceneLayerLoader","I3SNodePageLoader","ArcGISWebSceneLoader","SLPKArchive","parseSLPKArchive","LayerError","customizeColors"],"sources":["../src/index.ts"],"sourcesContent":["// loaders.gl\n// SPDX-License-Identifier: MIT\n// Copyright (c) vis.gl contributors\n\nexport type {\n BoundingVolumes,\n Mbs,\n Obb,\n I3STilesetHeader,\n I3STileContent,\n I3STileHeader,\n SceneLayer3D,\n AttributeStorageInfo,\n Field,\n ESRIField,\n PopupInfo,\n Node3DIndexDocument,\n LodSelection,\n NodeReference,\n Resource,\n MaxScreenThresholdSQ,\n NodeInPage,\n SharedResources,\n Attribute,\n Extent,\n FeatureAttribute,\n FieldInfo,\n I3SMaterialDefinition,\n TextureDefinitionInfo,\n MaterialDefinitionInfo,\n FullExtent,\n StatisticsInfo,\n StatsInfo,\n Histogram,\n ValueCount,\n BuildingSceneSublayer,\n OperationalLayer,\n TextureSetDefinitionFormats\n} from './types';\nexport type {I3SLoaderOptions} from './i3s-loader';\n\nexport {COORDINATE_SYSTEM} from './lib/parsers/constants';\n\nexport {I3SLoader} from './i3s-loader';\nexport {SLPKLoader} from './i3s-slpk-loader';\nexport {I3SContentLoader} from './i3s-content-loader';\nexport {I3SAttributeLoader, loadFeatureAttributes} from './i3s-attribute-loader';\nexport {I3SBuildingSceneLayerLoader} from './i3s-building-scene-layer-loader';\nexport {I3SNodePageLoader} from './i3s-node-page-loader';\nexport {ArcGISWebSceneLoader} from './arcgis-webscene-loader';\n\nexport {SLPKArchive} from './lib/parsers/parse-slpk/slpk-archieve';\nexport {parseSLPKArchive} from './lib/parsers/parse-slpk/parse-slpk';\nexport {LayerError} from './lib/parsers/parse-arcgis-webscene';\nexport {customizeColors} from './lib/utils/customize-colors';\n"],"mappings":"SAyCQA,iBAAiB;AAAA,SAEjBC,SAAS;AAAA,SACTC,UAAU;AAAA,SACVC,gBAAgB;AAAA,SAChBC,kBAAkB,EAAEC,qBAAqB;AAAA,SACzCC,2BAA2B;AAAA,SAC3BC,iBAAiB;AAAA,SACjBC,oBAAoB;AAAA,SAEpBC,WAAW;AAAA,SACXC,gBAAgB;AAAA,SAChBC,UAAU;AAAA,SACVC,eAAe"}
@@ -1 +1 @@
1
- {"version":3,"file":"i3s-nodepages-tiles.d.ts","sourceRoot":"","sources":["../../../src/lib/helpers/i3s-nodepages-tiles.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAEL,QAAQ,EACR,UAAU,EAIV,gBAAgB,EAEhB,aAAa,EACb,YAAY,EACb,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,iBAAiB;IACpC,OAAO,EAAE,YAAY,CAAC;IACtB,SAAS,EAAE,QAAQ,EAAE,CAAM;IAC3B,gBAAgB,EAAE;QAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAAA;KAAC,EAAE,CAAM;IAClF,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,aAAa,CAAC;IACvB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,iCAAiC,EAAE,CAAC;QAAC,MAAM,EAAE,gBAAgB,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC,GAAG,IAAI,CAAC,EAAE,CAAM;IAC5F,gBAAgB,EAAE,MAAM,CAAC;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,oBAAoB,CAA4B;IAExD;;;;;;OAMG;gBACS,OAAO,EAAE,YAAY,EAAE,GAAG,oBAAa,EAAE,OAAO,EAAE,aAAa;IAW3E;;;OAGG;IACG,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAuBlD;;;OAGG;IAEG,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAgE/D;;;;;;OAMG;IACH,OAAO,CAAC,aAAa;IA8BrB;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAiBvB;;;;;;;OAOG;IACH,OAAO,CAAC,0BAA0B;IAuBlC;;;;OAIG;IACH,OAAO,CAAC,wCAAwC;IA2BhD;;;OAGG;IACH,OAAO,CAAC,0BAA0B;CAwBnC"}
1
+ {"version":3,"file":"i3s-nodepages-tiles.d.ts","sourceRoot":"","sources":["../../../src/lib/helpers/i3s-nodepages-tiles.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAEL,QAAQ,EACR,UAAU,EAIV,gBAAgB,EAEhB,aAAa,EACb,YAAY,EACb,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,iBAAiB;IACpC,OAAO,EAAE,YAAY,CAAC;IACtB,SAAS,EAAE,QAAQ,EAAE,CAAM;IAC3B,gBAAgB,EAAE;QAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAAA;KAAC,EAAE,CAAM;IAClF,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,aAAa,CAAC;IACvB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,iCAAiC,EAAE,CAAC;QAAC,MAAM,EAAE,gBAAgB,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC,GAAG,IAAI,CAAC,EAAE,CAAM;IAC5F,gBAAgB,EAAE,MAAM,CAAC;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,oBAAoB,CAA4B;IAExD;;;;;;OAMG;gBACS,OAAO,EAAE,YAAY,EAAE,GAAG,oBAAa,EAAE,OAAO,EAAE,aAAa;IAW3E;;;OAGG;IACG,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAyBlD;;;OAGG;IAEG,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAgE/D;;;;;;OAMG;IACH,OAAO,CAAC,aAAa;IA8BrB;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAiBvB;;;;;;;OAOG;IACH,OAAO,CAAC,0BAA0B;IAuBlC;;;;OAIG;IACH,OAAO,CAAC,wCAAwC;IA2BhD;;;OAGG;IACH,OAAO,CAAC,0BAA0B;CAwBnC"}
@@ -32,7 +32,7 @@ export default class I3SNodePagesTiles {
32
32
  const pageIndex = Math.floor(id / this.nodesPerPage);
33
33
  if (!this.nodePages[pageIndex] && !this.pendingNodePages[pageIndex]) {
34
34
  var _this$options$i3s;
35
- const nodePageUrl = getUrlWithToken(`${this.url}/nodepages/${pageIndex}`, (_this$options$i3s = this.options.i3s) === null || _this$options$i3s === void 0 ? void 0 : _this$options$i3s.token);
35
+ const nodePageUrl = getUrlWithToken(this.url.indexOf('.slpk') !== -1 ? `nodepages/${pageIndex}` : `${this.url}/nodepages/${pageIndex}`, (_this$options$i3s = this.options.i3s) === null || _this$options$i3s === void 0 ? void 0 : _this$options$i3s.token);
36
36
  this.pendingNodePages[pageIndex] = {
37
37
  status: 'Pending',
38
38
  promise: load(nodePageUrl, I3SNodePageLoader, this.options)
@@ -1 +1 @@
1
- {"version":3,"file":"i3s-nodepages-tiles.js","names":["load","getSupportedGPUTextureFormats","selectSupportedBasisFormat","I3SNodePageLoader","normalizeTileNonUrlData","getUrlWithToken","generateTilesetAttributeUrls","I3SNodePagesTiles","constructor","tileset","_tileset$nodePages","_tileset$nodePages2","url","arguments","length","undefined","options","nodePages","pendingNodePages","nodesPerPage","lodSelectionMetricType","textureDefinitionsSelectedFormats","nodesInNodePages","textureLoaderOptions","initSelectedFormatsForTextureDefinitions","getNodeById","id","pageIndex","Math","floor","_this$options$i3s","nodePageUrl","i3s","token","status","promise","nodes","nodeIndex","formTileFromNodePages","node","children","childNodesPromises","child","push","childNodes","Promise","all","childNode","index","toString","obb","contentUrl","textureUrl","materialDefinition","textureFormat","attributeUrls","isDracoGeometry","mesh","isDracoGeometryResult","geometry","getContentUrl","textureData","nodeMaterialDefinition","getInformationFromMaterial","material","format","name","resource","attributeStorageInfo","attribute","lodSelection","getLodSelection","meshGeometryData","result","geometryDefinition","geometryDefinitions","definition","geometryIndex","useDracoGeometry","geometryBuffers","findIndex","buffer","compressedAttributes","encoding","Boolean","metricType","maxError","sqrt","lodThreshold","PI","informationFromMaterial","_this$tileset$materia","materialDefinitions","_materialDefinition$p","_materialDefinition$p2","textureSetDefinitionIndex","pbrMetallicRoughness","baseColorTexture","textureSetDefinitionId","possibleI3sFormats","getSupportedTextureFormats","textureSetDefinitions","textureSetDefinition","formats","selectedFormat","i3sFormat","find","value","basis","containerFormat","module","useCompressedTextures","supportedCompressedFormats","has"],"sources":["../../../src/lib/helpers/i3s-nodepages-tiles.ts"],"sourcesContent":["import {load} from '@loaders.gl/core';\nimport {getSupportedGPUTextureFormats, selectSupportedBasisFormat} from '@loaders.gl/textures';\nimport {I3SNodePageLoader} from '../../i3s-node-page-loader';\nimport {normalizeTileNonUrlData} from '../parsers/parse-i3s';\nimport {getUrlWithToken, generateTilesetAttributeUrls} from '../utils/url-utils';\nimport type {LoaderOptions} from '@loaders.gl/loader-utils';\nimport {\n LodSelection,\n NodePage,\n NodeInPage,\n Obb,\n MeshMaterial,\n I3SMaterialDefinition,\n I3STextureFormat,\n MeshGeometry,\n I3STileHeader,\n SceneLayer3D\n} from '../../types';\n\n/**\n * class I3SNodePagesTiles - loads nodePages and form i3s tiles from them\n */\nexport default class I3SNodePagesTiles {\n tileset: SceneLayer3D;\n nodePages: NodePage[] = [];\n pendingNodePages: {promise: Promise<NodePage>; status: 'Pending' | 'Done'}[] = [];\n nodesPerPage: number;\n options: LoaderOptions;\n lodSelectionMetricType?: string;\n textureDefinitionsSelectedFormats: ({format: I3STextureFormat; name: string} | null)[] = [];\n nodesInNodePages: number;\n url: string;\n private textureLoaderOptions: {[key: string]: any} = {};\n\n /**\n * @constructs\n * Create a I3SNodePagesTiles instance.\n * @param tileset - i3s tileset header ('layers/0')\n * @param url - tileset url\n * @param options - i3s loader options\n */\n constructor(tileset: SceneLayer3D, url: string = '', options: LoaderOptions) {\n this.tileset = {...tileset}; // spread the tileset to avoid circular reference\n this.url = url;\n this.nodesPerPage = tileset.nodePages?.nodesPerPage || 64;\n this.lodSelectionMetricType = tileset.nodePages?.lodSelectionMetricType;\n this.options = options;\n this.nodesInNodePages = 0;\n\n this.initSelectedFormatsForTextureDefinitions(tileset);\n }\n\n /**\n * Loads some nodePage and return a particular node from it\n * @param id - id of node through all node pages\n */\n async getNodeById(id: number): Promise<NodeInPage> {\n const pageIndex = Math.floor(id / this.nodesPerPage);\n if (!this.nodePages[pageIndex] && !this.pendingNodePages[pageIndex]) {\n const nodePageUrl = getUrlWithToken(\n `${this.url}/nodepages/${pageIndex}`,\n // @ts-expect-error this.options is not properly typed\n this.options.i3s?.token\n );\n this.pendingNodePages[pageIndex] = {\n status: 'Pending',\n promise: load(nodePageUrl, I3SNodePageLoader, this.options)\n };\n this.nodePages[pageIndex] = await this.pendingNodePages[pageIndex].promise;\n this.nodesInNodePages += this.nodePages[pageIndex].nodes.length;\n this.pendingNodePages[pageIndex].status = 'Done';\n }\n if (this.pendingNodePages[pageIndex].status === 'Pending') {\n this.nodePages[pageIndex] = await this.pendingNodePages[pageIndex].promise;\n }\n const nodeIndex = id % this.nodesPerPage;\n return this.nodePages[pageIndex].nodes[nodeIndex];\n }\n\n /**\n * Forms tile header using node and tileset data\n * @param id - id of node through all node pages\n */\n // eslint-disable-next-line complexity, max-statements\n async formTileFromNodePages(id: number): Promise<I3STileHeader> {\n const node: NodeInPage = await this.getNodeById(id);\n const children: {id: string; obb: Obb}[] = [];\n const childNodesPromises: Promise<NodeInPage>[] = [];\n for (const child of node.children || []) {\n childNodesPromises.push(this.getNodeById(child));\n }\n\n const childNodes = await Promise.all(childNodesPromises);\n for (const childNode of childNodes) {\n children.push({\n id: childNode.index.toString(),\n obb: childNode.obb\n });\n }\n\n let contentUrl: string | undefined;\n let textureUrl: string | undefined;\n let materialDefinition: I3SMaterialDefinition | undefined;\n let textureFormat: I3STextureFormat = 'jpg';\n let attributeUrls: string[] = [];\n let isDracoGeometry: boolean = false;\n\n if (node && node.mesh) {\n // Get geometry resource URL and type (compressed / non-compressed)\n const {url, isDracoGeometry: isDracoGeometryResult} = (node.mesh.geometry &&\n this.getContentUrl(node.mesh.geometry)) || {isDracoGeometry: false};\n contentUrl = url;\n isDracoGeometry = isDracoGeometryResult;\n\n const {textureData, materialDefinition: nodeMaterialDefinition} =\n this.getInformationFromMaterial(node.mesh.material);\n materialDefinition = nodeMaterialDefinition;\n textureFormat = textureData.format || textureFormat;\n if (textureData.name) {\n textureUrl = `${this.url}/nodes/${node.mesh.material.resource}/textures/${textureData.name}`;\n }\n\n if (this.tileset.attributeStorageInfo) {\n attributeUrls = generateTilesetAttributeUrls(\n this.tileset,\n this.url,\n node.mesh.attribute.resource\n );\n }\n }\n\n const lodSelection = this.getLodSelection(node);\n\n return normalizeTileNonUrlData({\n id: id.toString(),\n lodSelection,\n obb: node.obb,\n contentUrl,\n textureUrl,\n attributeUrls,\n materialDefinition,\n textureFormat,\n textureLoaderOptions: this.textureLoaderOptions,\n children,\n isDracoGeometry\n });\n }\n\n /**\n * Forms url and type of geometry resource by nodepage's data and `geometryDefinitions` in the tileset\n * @param - data about the node's mesh from the nodepage\n * @returns -\n * {string} url - url to the geometry resource\n * {boolean} isDracoGeometry - whether the geometry resource contain DRACO compressed geometry\n */\n private getContentUrl(meshGeometryData: MeshGeometry) {\n let result: {url: string; isDracoGeometry: boolean} | null = null;\n // @ts-ignore\n const geometryDefinition = this.tileset.geometryDefinitions[meshGeometryData.definition];\n let geometryIndex = -1;\n // Try to find DRACO geometryDefinition of `useDracoGeometry` option is set\n // @ts-expect-error this.options is not properly typed\n if (this.options.i3s && this.options.i3s.useDracoGeometry) {\n geometryIndex = geometryDefinition.geometryBuffers.findIndex(\n (buffer) => buffer.compressedAttributes && buffer.compressedAttributes.encoding === 'draco'\n );\n }\n // If DRACO geometry is not applicable try to select non-compressed geometry\n if (geometryIndex === -1) {\n geometryIndex = geometryDefinition.geometryBuffers.findIndex(\n (buffer) => !buffer.compressedAttributes\n );\n }\n if (geometryIndex !== -1) {\n const isDracoGeometry = Boolean(\n geometryDefinition.geometryBuffers[geometryIndex].compressedAttributes\n );\n result = {\n url: `${this.url}/nodes/${meshGeometryData.resource}/geometries/${geometryIndex}`,\n isDracoGeometry\n };\n }\n return result;\n }\n\n /**\n * Forms 1.6 compatible LOD selection object from a nodepage's node data\n * @param node - a node from nodepage\n * @returns- Array of LodSelection\n */\n private getLodSelection(node: NodeInPage): LodSelection[] {\n const lodSelection: LodSelection[] = [];\n if (this.lodSelectionMetricType === 'maxScreenThresholdSQ') {\n lodSelection.push({\n metricType: 'maxScreenThreshold',\n // @ts-ignore\n maxError: Math.sqrt(node.lodThreshold / (Math.PI * 0.25))\n });\n }\n lodSelection.push({\n metricType: this.lodSelectionMetricType,\n // @ts-ignore\n maxError: node.lodThreshold\n });\n return lodSelection;\n }\n\n /**\n * Returns information about texture and material from `materialDefinitions`\n * @param material - material data from nodepage\n * @returns - Couple {textureData, materialDefinition}\n * {string} textureData.name - path name of the texture\n * {string} textureData.format - format of the texture\n * materialDefinition - PBR-like material definition from `materialDefinitions`\n */\n private getInformationFromMaterial(material: MeshMaterial) {\n const informationFromMaterial: {\n textureData: {name: string | null; format?: I3STextureFormat};\n materialDefinition?: I3SMaterialDefinition;\n } = {textureData: {name: null}};\n\n if (material) {\n const materialDefinition = this.tileset.materialDefinitions?.[material.definition];\n if (materialDefinition) {\n informationFromMaterial.materialDefinition = materialDefinition;\n const textureSetDefinitionIndex =\n materialDefinition?.pbrMetallicRoughness?.baseColorTexture?.textureSetDefinitionId;\n\n if (typeof textureSetDefinitionIndex === 'number') {\n informationFromMaterial.textureData =\n this.textureDefinitionsSelectedFormats[textureSetDefinitionIndex] ||\n informationFromMaterial.textureData;\n }\n }\n }\n return informationFromMaterial;\n }\n\n /**\n * Sets preferable and supported format for each textureDefinition of the tileset\n * @param tileset - I3S layer data\n * @returns\n */\n private initSelectedFormatsForTextureDefinitions(tileset: SceneLayer3D): void {\n this.textureDefinitionsSelectedFormats = [];\n const possibleI3sFormats = this.getSupportedTextureFormats();\n const textureSetDefinitions = tileset.textureSetDefinitions || [];\n for (const textureSetDefinition of textureSetDefinitions) {\n const formats = (textureSetDefinition && textureSetDefinition.formats) || [];\n let selectedFormat: {name: string; format: I3STextureFormat} | null = null;\n for (const i3sFormat of possibleI3sFormats) {\n const format = formats.find((value) => value.format === i3sFormat);\n if (format) {\n selectedFormat = format;\n break;\n }\n }\n // For I3S 1.8 need to define basis target format to decode\n if (selectedFormat && selectedFormat.format === 'ktx2') {\n this.textureLoaderOptions.basis = {\n format: selectSupportedBasisFormat(),\n containerFormat: 'ktx2',\n module: 'encoder'\n };\n }\n\n this.textureDefinitionsSelectedFormats.push(selectedFormat);\n }\n }\n\n /**\n * Returns the array of supported texture format\n * @returns list of format strings\n */\n private getSupportedTextureFormats(): I3STextureFormat[] {\n const formats: I3STextureFormat[] = [];\n // @ts-expect-error this.options is not properly typed\n if (!this.options.i3s || this.options.i3s.useCompressedTextures) {\n // I3S 1.7 selection\n const supportedCompressedFormats = getSupportedGPUTextureFormats();\n // List of possible in i3s formats:\n // https://github.com/Esri/i3s-spec/blob/master/docs/1.7/textureSetDefinitionFormat.cmn.md\n if (supportedCompressedFormats.has('etc2')) {\n formats.push('ktx-etc2');\n }\n if (supportedCompressedFormats.has('dxt')) {\n formats.push('dds');\n }\n\n // I3S 1.8 selection\n // ktx2 wraps basis texture which at the edge case can be decoded as uncompressed image\n formats.push('ktx2');\n }\n\n formats.push('jpg');\n formats.push('png');\n return formats;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"i3s-nodepages-tiles.js","names":["load","getSupportedGPUTextureFormats","selectSupportedBasisFormat","I3SNodePageLoader","normalizeTileNonUrlData","getUrlWithToken","generateTilesetAttributeUrls","I3SNodePagesTiles","constructor","tileset","_tileset$nodePages","_tileset$nodePages2","url","arguments","length","undefined","options","nodePages","pendingNodePages","nodesPerPage","lodSelectionMetricType","textureDefinitionsSelectedFormats","nodesInNodePages","textureLoaderOptions","initSelectedFormatsForTextureDefinitions","getNodeById","id","pageIndex","Math","floor","_this$options$i3s","nodePageUrl","indexOf","i3s","token","status","promise","nodes","nodeIndex","formTileFromNodePages","node","children","childNodesPromises","child","push","childNodes","Promise","all","childNode","index","toString","obb","contentUrl","textureUrl","materialDefinition","textureFormat","attributeUrls","isDracoGeometry","mesh","isDracoGeometryResult","geometry","getContentUrl","textureData","nodeMaterialDefinition","getInformationFromMaterial","material","format","name","resource","attributeStorageInfo","attribute","lodSelection","getLodSelection","meshGeometryData","result","geometryDefinition","geometryDefinitions","definition","geometryIndex","useDracoGeometry","geometryBuffers","findIndex","buffer","compressedAttributes","encoding","Boolean","metricType","maxError","sqrt","lodThreshold","PI","informationFromMaterial","_this$tileset$materia","materialDefinitions","_materialDefinition$p","_materialDefinition$p2","textureSetDefinitionIndex","pbrMetallicRoughness","baseColorTexture","textureSetDefinitionId","possibleI3sFormats","getSupportedTextureFormats","textureSetDefinitions","textureSetDefinition","formats","selectedFormat","i3sFormat","find","value","basis","containerFormat","module","useCompressedTextures","supportedCompressedFormats","has"],"sources":["../../../src/lib/helpers/i3s-nodepages-tiles.ts"],"sourcesContent":["import {load} from '@loaders.gl/core';\nimport {getSupportedGPUTextureFormats, selectSupportedBasisFormat} from '@loaders.gl/textures';\nimport {I3SNodePageLoader} from '../../i3s-node-page-loader';\nimport {normalizeTileNonUrlData} from '../parsers/parse-i3s';\nimport {getUrlWithToken, generateTilesetAttributeUrls} from '../utils/url-utils';\nimport type {LoaderOptions} from '@loaders.gl/loader-utils';\nimport {\n LodSelection,\n NodePage,\n NodeInPage,\n Obb,\n MeshMaterial,\n I3SMaterialDefinition,\n I3STextureFormat,\n MeshGeometry,\n I3STileHeader,\n SceneLayer3D\n} from '../../types';\n\n/**\n * class I3SNodePagesTiles - loads nodePages and form i3s tiles from them\n */\nexport default class I3SNodePagesTiles {\n tileset: SceneLayer3D;\n nodePages: NodePage[] = [];\n pendingNodePages: {promise: Promise<NodePage>; status: 'Pending' | 'Done'}[] = [];\n nodesPerPage: number;\n options: LoaderOptions;\n lodSelectionMetricType?: string;\n textureDefinitionsSelectedFormats: ({format: I3STextureFormat; name: string} | null)[] = [];\n nodesInNodePages: number;\n url: string;\n private textureLoaderOptions: {[key: string]: any} = {};\n\n /**\n * @constructs\n * Create a I3SNodePagesTiles instance.\n * @param tileset - i3s tileset header ('layers/0')\n * @param url - tileset url\n * @param options - i3s loader options\n */\n constructor(tileset: SceneLayer3D, url: string = '', options: LoaderOptions) {\n this.tileset = {...tileset}; // spread the tileset to avoid circular reference\n this.url = url;\n this.nodesPerPage = tileset.nodePages?.nodesPerPage || 64;\n this.lodSelectionMetricType = tileset.nodePages?.lodSelectionMetricType;\n this.options = options;\n this.nodesInNodePages = 0;\n\n this.initSelectedFormatsForTextureDefinitions(tileset);\n }\n\n /**\n * Loads some nodePage and return a particular node from it\n * @param id - id of node through all node pages\n */\n async getNodeById(id: number): Promise<NodeInPage> {\n const pageIndex = Math.floor(id / this.nodesPerPage);\n if (!this.nodePages[pageIndex] && !this.pendingNodePages[pageIndex]) {\n const nodePageUrl = getUrlWithToken(\n this.url.indexOf('.slpk') !== -1\n ? `nodepages/${pageIndex}`\n : `${this.url}/nodepages/${pageIndex}`,\n // @ts-expect-error this.options is not properly typed\n this.options.i3s?.token\n );\n this.pendingNodePages[pageIndex] = {\n status: 'Pending',\n promise: load(nodePageUrl, I3SNodePageLoader, this.options)\n };\n this.nodePages[pageIndex] = await this.pendingNodePages[pageIndex].promise;\n this.nodesInNodePages += this.nodePages[pageIndex].nodes.length;\n this.pendingNodePages[pageIndex].status = 'Done';\n }\n if (this.pendingNodePages[pageIndex].status === 'Pending') {\n this.nodePages[pageIndex] = await this.pendingNodePages[pageIndex].promise;\n }\n const nodeIndex = id % this.nodesPerPage;\n return this.nodePages[pageIndex].nodes[nodeIndex];\n }\n\n /**\n * Forms tile header using node and tileset data\n * @param id - id of node through all node pages\n */\n // eslint-disable-next-line complexity, max-statements\n async formTileFromNodePages(id: number): Promise<I3STileHeader> {\n const node: NodeInPage = await this.getNodeById(id);\n const children: {id: string; obb: Obb}[] = [];\n const childNodesPromises: Promise<NodeInPage>[] = [];\n for (const child of node.children || []) {\n childNodesPromises.push(this.getNodeById(child));\n }\n\n const childNodes = await Promise.all(childNodesPromises);\n for (const childNode of childNodes) {\n children.push({\n id: childNode.index.toString(),\n obb: childNode.obb\n });\n }\n\n let contentUrl: string | undefined;\n let textureUrl: string | undefined;\n let materialDefinition: I3SMaterialDefinition | undefined;\n let textureFormat: I3STextureFormat = 'jpg';\n let attributeUrls: string[] = [];\n let isDracoGeometry: boolean = false;\n\n if (node && node.mesh) {\n // Get geometry resource URL and type (compressed / non-compressed)\n const {url, isDracoGeometry: isDracoGeometryResult} = (node.mesh.geometry &&\n this.getContentUrl(node.mesh.geometry)) || {isDracoGeometry: false};\n contentUrl = url;\n isDracoGeometry = isDracoGeometryResult;\n\n const {textureData, materialDefinition: nodeMaterialDefinition} =\n this.getInformationFromMaterial(node.mesh.material);\n materialDefinition = nodeMaterialDefinition;\n textureFormat = textureData.format || textureFormat;\n if (textureData.name) {\n textureUrl = `${this.url}/nodes/${node.mesh.material.resource}/textures/${textureData.name}`;\n }\n\n if (this.tileset.attributeStorageInfo) {\n attributeUrls = generateTilesetAttributeUrls(\n this.tileset,\n this.url,\n node.mesh.attribute.resource\n );\n }\n }\n\n const lodSelection = this.getLodSelection(node);\n\n return normalizeTileNonUrlData({\n id: id.toString(),\n lodSelection,\n obb: node.obb,\n contentUrl,\n textureUrl,\n attributeUrls,\n materialDefinition,\n textureFormat,\n textureLoaderOptions: this.textureLoaderOptions,\n children,\n isDracoGeometry\n });\n }\n\n /**\n * Forms url and type of geometry resource by nodepage's data and `geometryDefinitions` in the tileset\n * @param - data about the node's mesh from the nodepage\n * @returns -\n * {string} url - url to the geometry resource\n * {boolean} isDracoGeometry - whether the geometry resource contain DRACO compressed geometry\n */\n private getContentUrl(meshGeometryData: MeshGeometry) {\n let result: {url: string; isDracoGeometry: boolean} | null = null;\n // @ts-ignore\n const geometryDefinition = this.tileset.geometryDefinitions[meshGeometryData.definition];\n let geometryIndex = -1;\n // Try to find DRACO geometryDefinition of `useDracoGeometry` option is set\n // @ts-expect-error this.options is not properly typed\n if (this.options.i3s && this.options.i3s.useDracoGeometry) {\n geometryIndex = geometryDefinition.geometryBuffers.findIndex(\n (buffer) => buffer.compressedAttributes && buffer.compressedAttributes.encoding === 'draco'\n );\n }\n // If DRACO geometry is not applicable try to select non-compressed geometry\n if (geometryIndex === -1) {\n geometryIndex = geometryDefinition.geometryBuffers.findIndex(\n (buffer) => !buffer.compressedAttributes\n );\n }\n if (geometryIndex !== -1) {\n const isDracoGeometry = Boolean(\n geometryDefinition.geometryBuffers[geometryIndex].compressedAttributes\n );\n result = {\n url: `${this.url}/nodes/${meshGeometryData.resource}/geometries/${geometryIndex}`,\n isDracoGeometry\n };\n }\n return result;\n }\n\n /**\n * Forms 1.6 compatible LOD selection object from a nodepage's node data\n * @param node - a node from nodepage\n * @returns- Array of LodSelection\n */\n private getLodSelection(node: NodeInPage): LodSelection[] {\n const lodSelection: LodSelection[] = [];\n if (this.lodSelectionMetricType === 'maxScreenThresholdSQ') {\n lodSelection.push({\n metricType: 'maxScreenThreshold',\n // @ts-ignore\n maxError: Math.sqrt(node.lodThreshold / (Math.PI * 0.25))\n });\n }\n lodSelection.push({\n metricType: this.lodSelectionMetricType,\n // @ts-ignore\n maxError: node.lodThreshold\n });\n return lodSelection;\n }\n\n /**\n * Returns information about texture and material from `materialDefinitions`\n * @param material - material data from nodepage\n * @returns - Couple {textureData, materialDefinition}\n * {string} textureData.name - path name of the texture\n * {string} textureData.format - format of the texture\n * materialDefinition - PBR-like material definition from `materialDefinitions`\n */\n private getInformationFromMaterial(material: MeshMaterial) {\n const informationFromMaterial: {\n textureData: {name: string | null; format?: I3STextureFormat};\n materialDefinition?: I3SMaterialDefinition;\n } = {textureData: {name: null}};\n\n if (material) {\n const materialDefinition = this.tileset.materialDefinitions?.[material.definition];\n if (materialDefinition) {\n informationFromMaterial.materialDefinition = materialDefinition;\n const textureSetDefinitionIndex =\n materialDefinition?.pbrMetallicRoughness?.baseColorTexture?.textureSetDefinitionId;\n\n if (typeof textureSetDefinitionIndex === 'number') {\n informationFromMaterial.textureData =\n this.textureDefinitionsSelectedFormats[textureSetDefinitionIndex] ||\n informationFromMaterial.textureData;\n }\n }\n }\n return informationFromMaterial;\n }\n\n /**\n * Sets preferable and supported format for each textureDefinition of the tileset\n * @param tileset - I3S layer data\n * @returns\n */\n private initSelectedFormatsForTextureDefinitions(tileset: SceneLayer3D): void {\n this.textureDefinitionsSelectedFormats = [];\n const possibleI3sFormats = this.getSupportedTextureFormats();\n const textureSetDefinitions = tileset.textureSetDefinitions || [];\n for (const textureSetDefinition of textureSetDefinitions) {\n const formats = (textureSetDefinition && textureSetDefinition.formats) || [];\n let selectedFormat: {name: string; format: I3STextureFormat} | null = null;\n for (const i3sFormat of possibleI3sFormats) {\n const format = formats.find((value) => value.format === i3sFormat);\n if (format) {\n selectedFormat = format;\n break;\n }\n }\n // For I3S 1.8 need to define basis target format to decode\n if (selectedFormat && selectedFormat.format === 'ktx2') {\n this.textureLoaderOptions.basis = {\n format: selectSupportedBasisFormat(),\n containerFormat: 'ktx2',\n module: 'encoder'\n };\n }\n\n this.textureDefinitionsSelectedFormats.push(selectedFormat);\n }\n }\n\n /**\n * Returns the array of supported texture format\n * @returns list of format strings\n */\n private getSupportedTextureFormats(): I3STextureFormat[] {\n const formats: I3STextureFormat[] = [];\n // @ts-expect-error this.options is not properly typed\n if (!this.options.i3s || this.options.i3s.useCompressedTextures) {\n // I3S 1.7 selection\n const supportedCompressedFormats = getSupportedGPUTextureFormats();\n // List of possible in i3s formats:\n // https://github.com/Esri/i3s-spec/blob/master/docs/1.7/textureSetDefinitionFormat.cmn.md\n if (supportedCompressedFormats.has('etc2')) {\n formats.push('ktx-etc2');\n }\n if (supportedCompressedFormats.has('dxt')) {\n formats.push('dds');\n }\n\n // I3S 1.8 selection\n // ktx2 wraps basis texture which at the edge case can be decoded as uncompressed image\n formats.push('ktx2');\n }\n\n formats.push('jpg');\n formats.push('png');\n return formats;\n }\n}\n"],"mappings":"AAAA,SAAQA,IAAI,QAAO,kBAAkB;AACrC,SAAQC,6BAA6B,EAAEC,0BAA0B,QAAO,sBAAsB;AAAC,SACvFC,iBAAiB;AAAA,SACjBC,uBAAuB;AAAA,SACvBC,eAAe,EAAEC,4BAA4B;AAkBrD,eAAe,MAAMC,iBAAiB,CAAC;EAmBrCC,WAAWA,CAACC,OAAqB,EAA4C;IAAA,IAAAC,kBAAA,EAAAC,mBAAA;IAAA,IAA1CC,GAAW,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,EAAE;IAAA,IAAEG,OAAsB,GAAAH,SAAA,CAAAC,MAAA,OAAAD,SAAA,MAAAE,SAAA;IAAA,KAlB3EN,OAAO;IAAA,KACPQ,SAAS,GAAe,EAAE;IAAA,KAC1BC,gBAAgB,GAA+D,EAAE;IAAA,KACjFC,YAAY;IAAA,KACZH,OAAO;IAAA,KACPI,sBAAsB;IAAA,KACtBC,iCAAiC,GAAwD,EAAE;IAAA,KAC3FC,gBAAgB;IAAA,KAChBV,GAAG;IAAA,KACKW,oBAAoB,GAAyB,CAAC,CAAC;IAUrD,IAAI,CAACd,OAAO,GAAG;MAAC,GAAGA;IAAO,CAAC;IAC3B,IAAI,CAACG,GAAG,GAAGA,GAAG;IACd,IAAI,CAACO,YAAY,GAAG,EAAAT,kBAAA,GAAAD,OAAO,CAACQ,SAAS,cAAAP,kBAAA,uBAAjBA,kBAAA,CAAmBS,YAAY,KAAI,EAAE;IACzD,IAAI,CAACC,sBAAsB,IAAAT,mBAAA,GAAGF,OAAO,CAACQ,SAAS,cAAAN,mBAAA,uBAAjBA,mBAAA,CAAmBS,sBAAsB;IACvE,IAAI,CAACJ,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACM,gBAAgB,GAAG,CAAC;IAEzB,IAAI,CAACE,wCAAwC,CAACf,OAAO,CAAC;EACxD;EAMA,MAAMgB,WAAWA,CAACC,EAAU,EAAuB;IACjD,MAAMC,SAAS,GAAGC,IAAI,CAACC,KAAK,CAACH,EAAE,GAAG,IAAI,CAACP,YAAY,CAAC;IACpD,IAAI,CAAC,IAAI,CAACF,SAAS,CAACU,SAAS,CAAC,IAAI,CAAC,IAAI,CAACT,gBAAgB,CAACS,SAAS,CAAC,EAAE;MAAA,IAAAG,iBAAA;MACnE,MAAMC,WAAW,GAAG1B,eAAe,CACjC,IAAI,CAACO,GAAG,CAACoB,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAC3B,aAAYL,SAAU,EAAC,GACvB,GAAE,IAAI,CAACf,GAAI,cAAae,SAAU,EAAC,GAAAG,iBAAA,GAExC,IAAI,CAACd,OAAO,CAACiB,GAAG,cAAAH,iBAAA,uBAAhBA,iBAAA,CAAkBI,KACpB,CAAC;MACD,IAAI,CAAChB,gBAAgB,CAACS,SAAS,CAAC,GAAG;QACjCQ,MAAM,EAAE,SAAS;QACjBC,OAAO,EAAEpC,IAAI,CAAC+B,WAAW,EAAE5B,iBAAiB,EAAE,IAAI,CAACa,OAAO;MAC5D,CAAC;MACD,IAAI,CAACC,SAAS,CAACU,SAAS,CAAC,GAAG,MAAM,IAAI,CAACT,gBAAgB,CAACS,SAAS,CAAC,CAACS,OAAO;MAC1E,IAAI,CAACd,gBAAgB,IAAI,IAAI,CAACL,SAAS,CAACU,SAAS,CAAC,CAACU,KAAK,CAACvB,MAAM;MAC/D,IAAI,CAACI,gBAAgB,CAACS,SAAS,CAAC,CAACQ,MAAM,GAAG,MAAM;IAClD;IACA,IAAI,IAAI,CAACjB,gBAAgB,CAACS,SAAS,CAAC,CAACQ,MAAM,KAAK,SAAS,EAAE;MACzD,IAAI,CAAClB,SAAS,CAACU,SAAS,CAAC,GAAG,MAAM,IAAI,CAACT,gBAAgB,CAACS,SAAS,CAAC,CAACS,OAAO;IAC5E;IACA,MAAME,SAAS,GAAGZ,EAAE,GAAG,IAAI,CAACP,YAAY;IACxC,OAAO,IAAI,CAACF,SAAS,CAACU,SAAS,CAAC,CAACU,KAAK,CAACC,SAAS,CAAC;EACnD;EAOA,MAAMC,qBAAqBA,CAACb,EAAU,EAA0B;IAC9D,MAAMc,IAAgB,GAAG,MAAM,IAAI,CAACf,WAAW,CAACC,EAAE,CAAC;IACnD,MAAMe,QAAkC,GAAG,EAAE;IAC7C,MAAMC,kBAAyC,GAAG,EAAE;IACpD,KAAK,MAAMC,KAAK,IAAIH,IAAI,CAACC,QAAQ,IAAI,EAAE,EAAE;MACvCC,kBAAkB,CAACE,IAAI,CAAC,IAAI,CAACnB,WAAW,CAACkB,KAAK,CAAC,CAAC;IAClD;IAEA,MAAME,UAAU,GAAG,MAAMC,OAAO,CAACC,GAAG,CAACL,kBAAkB,CAAC;IACxD,KAAK,MAAMM,SAAS,IAAIH,UAAU,EAAE;MAClCJ,QAAQ,CAACG,IAAI,CAAC;QACZlB,EAAE,EAAEsB,SAAS,CAACC,KAAK,CAACC,QAAQ,CAAC,CAAC;QAC9BC,GAAG,EAAEH,SAAS,CAACG;MACjB,CAAC,CAAC;IACJ;IAEA,IAAIC,UAA8B;IAClC,IAAIC,UAA8B;IAClC,IAAIC,kBAAqD;IACzD,IAAIC,aAA+B,GAAG,KAAK;IAC3C,IAAIC,aAAuB,GAAG,EAAE;IAChC,IAAIC,eAAwB,GAAG,KAAK;IAEpC,IAAIjB,IAAI,IAAIA,IAAI,CAACkB,IAAI,EAAE;MAErB,MAAM;QAAC9C,GAAG;QAAE6C,eAAe,EAAEE;MAAqB,CAAC,GAAInB,IAAI,CAACkB,IAAI,CAACE,QAAQ,IACvE,IAAI,CAACC,aAAa,CAACrB,IAAI,CAACkB,IAAI,CAACE,QAAQ,CAAC,IAAK;QAACH,eAAe,EAAE;MAAK,CAAC;MACrEL,UAAU,GAAGxC,GAAG;MAChB6C,eAAe,GAAGE,qBAAqB;MAEvC,MAAM;QAACG,WAAW;QAAER,kBAAkB,EAAES;MAAsB,CAAC,GAC7D,IAAI,CAACC,0BAA0B,CAACxB,IAAI,CAACkB,IAAI,CAACO,QAAQ,CAAC;MACrDX,kBAAkB,GAAGS,sBAAsB;MAC3CR,aAAa,GAAGO,WAAW,CAACI,MAAM,IAAIX,aAAa;MACnD,IAAIO,WAAW,CAACK,IAAI,EAAE;QACpBd,UAAU,GAAI,GAAE,IAAI,CAACzC,GAAI,UAAS4B,IAAI,CAACkB,IAAI,CAACO,QAAQ,CAACG,QAAS,aAAYN,WAAW,CAACK,IAAK,EAAC;MAC9F;MAEA,IAAI,IAAI,CAAC1D,OAAO,CAAC4D,oBAAoB,EAAE;QACrCb,aAAa,GAAGlD,4BAA4B,CAC1C,IAAI,CAACG,OAAO,EACZ,IAAI,CAACG,GAAG,EACR4B,IAAI,CAACkB,IAAI,CAACY,SAAS,CAACF,QACtB,CAAC;MACH;IACF;IAEA,MAAMG,YAAY,GAAG,IAAI,CAACC,eAAe,CAAChC,IAAI,CAAC;IAE/C,OAAOpC,uBAAuB,CAAC;MAC7BsB,EAAE,EAAEA,EAAE,CAACwB,QAAQ,CAAC,CAAC;MACjBqB,YAAY;MACZpB,GAAG,EAAEX,IAAI,CAACW,GAAG;MACbC,UAAU;MACVC,UAAU;MACVG,aAAa;MACbF,kBAAkB;MAClBC,aAAa;MACbhC,oBAAoB,EAAE,IAAI,CAACA,oBAAoB;MAC/CkB,QAAQ;MACRgB;IACF,CAAC,CAAC;EACJ;EASQI,aAAaA,CAACY,gBAA8B,EAAE;IACpD,IAAIC,MAAsD,GAAG,IAAI;IAEjE,MAAMC,kBAAkB,GAAG,IAAI,CAAClE,OAAO,CAACmE,mBAAmB,CAACH,gBAAgB,CAACI,UAAU,CAAC;IACxF,IAAIC,aAAa,GAAG,CAAC,CAAC;IAGtB,IAAI,IAAI,CAAC9D,OAAO,CAACiB,GAAG,IAAI,IAAI,CAACjB,OAAO,CAACiB,GAAG,CAAC8C,gBAAgB,EAAE;MACzDD,aAAa,GAAGH,kBAAkB,CAACK,eAAe,CAACC,SAAS,CACzDC,MAAM,IAAKA,MAAM,CAACC,oBAAoB,IAAID,MAAM,CAACC,oBAAoB,CAACC,QAAQ,KAAK,OACtF,CAAC;IACH;IAEA,IAAIN,aAAa,KAAK,CAAC,CAAC,EAAE;MACxBA,aAAa,GAAGH,kBAAkB,CAACK,eAAe,CAACC,SAAS,CACzDC,MAAM,IAAK,CAACA,MAAM,CAACC,oBACtB,CAAC;IACH;IACA,IAAIL,aAAa,KAAK,CAAC,CAAC,EAAE;MACxB,MAAMrB,eAAe,GAAG4B,OAAO,CAC7BV,kBAAkB,CAACK,eAAe,CAACF,aAAa,CAAC,CAACK,oBACpD,CAAC;MACDT,MAAM,GAAG;QACP9D,GAAG,EAAG,GAAE,IAAI,CAACA,GAAI,UAAS6D,gBAAgB,CAACL,QAAS,eAAcU,aAAc,EAAC;QACjFrB;MACF,CAAC;IACH;IACA,OAAOiB,MAAM;EACf;EAOQF,eAAeA,CAAChC,IAAgB,EAAkB;IACxD,MAAM+B,YAA4B,GAAG,EAAE;IACvC,IAAI,IAAI,CAACnD,sBAAsB,KAAK,sBAAsB,EAAE;MAC1DmD,YAAY,CAAC3B,IAAI,CAAC;QAChB0C,UAAU,EAAE,oBAAoB;QAEhCC,QAAQ,EAAE3D,IAAI,CAAC4D,IAAI,CAAChD,IAAI,CAACiD,YAAY,IAAI7D,IAAI,CAAC8D,EAAE,GAAG,IAAI,CAAC;MAC1D,CAAC,CAAC;IACJ;IACAnB,YAAY,CAAC3B,IAAI,CAAC;MAChB0C,UAAU,EAAE,IAAI,CAAClE,sBAAsB;MAEvCmE,QAAQ,EAAE/C,IAAI,CAACiD;IACjB,CAAC,CAAC;IACF,OAAOlB,YAAY;EACrB;EAUQP,0BAA0BA,CAACC,QAAsB,EAAE;IACzD,MAAM0B,uBAGL,GAAG;MAAC7B,WAAW,EAAE;QAACK,IAAI,EAAE;MAAI;IAAC,CAAC;IAE/B,IAAIF,QAAQ,EAAE;MAAA,IAAA2B,qBAAA;MACZ,MAAMtC,kBAAkB,IAAAsC,qBAAA,GAAG,IAAI,CAACnF,OAAO,CAACoF,mBAAmB,cAAAD,qBAAA,uBAAhCA,qBAAA,CAAmC3B,QAAQ,CAACY,UAAU,CAAC;MAClF,IAAIvB,kBAAkB,EAAE;QAAA,IAAAwC,qBAAA,EAAAC,sBAAA;QACtBJ,uBAAuB,CAACrC,kBAAkB,GAAGA,kBAAkB;QAC/D,MAAM0C,yBAAyB,GAC7B1C,kBAAkB,aAAlBA,kBAAkB,wBAAAwC,qBAAA,GAAlBxC,kBAAkB,CAAE2C,oBAAoB,cAAAH,qBAAA,wBAAAC,sBAAA,GAAxCD,qBAAA,CAA0CI,gBAAgB,cAAAH,sBAAA,uBAA1DA,sBAAA,CAA4DI,sBAAsB;QAEpF,IAAI,OAAOH,yBAAyB,KAAK,QAAQ,EAAE;UACjDL,uBAAuB,CAAC7B,WAAW,GACjC,IAAI,CAACzC,iCAAiC,CAAC2E,yBAAyB,CAAC,IACjEL,uBAAuB,CAAC7B,WAAW;QACvC;MACF;IACF;IACA,OAAO6B,uBAAuB;EAChC;EAOQnE,wCAAwCA,CAACf,OAAqB,EAAQ;IAC5E,IAAI,CAACY,iCAAiC,GAAG,EAAE;IAC3C,MAAM+E,kBAAkB,GAAG,IAAI,CAACC,0BAA0B,CAAC,CAAC;IAC5D,MAAMC,qBAAqB,GAAG7F,OAAO,CAAC6F,qBAAqB,IAAI,EAAE;IACjE,KAAK,MAAMC,oBAAoB,IAAID,qBAAqB,EAAE;MACxD,MAAME,OAAO,GAAID,oBAAoB,IAAIA,oBAAoB,CAACC,OAAO,IAAK,EAAE;MAC5E,IAAIC,cAA+D,GAAG,IAAI;MAC1E,KAAK,MAAMC,SAAS,IAAIN,kBAAkB,EAAE;QAC1C,MAAMlC,MAAM,GAAGsC,OAAO,CAACG,IAAI,CAAEC,KAAK,IAAKA,KAAK,CAAC1C,MAAM,KAAKwC,SAAS,CAAC;QAClE,IAAIxC,MAAM,EAAE;UACVuC,cAAc,GAAGvC,MAAM;UACvB;QACF;MACF;MAEA,IAAIuC,cAAc,IAAIA,cAAc,CAACvC,MAAM,KAAK,MAAM,EAAE;QACtD,IAAI,CAAC3C,oBAAoB,CAACsF,KAAK,GAAG;UAChC3C,MAAM,EAAEhE,0BAA0B,CAAC,CAAC;UACpC4G,eAAe,EAAE,MAAM;UACvBC,MAAM,EAAE;QACV,CAAC;MACH;MAEA,IAAI,CAAC1F,iCAAiC,CAACuB,IAAI,CAAC6D,cAAc,CAAC;IAC7D;EACF;EAMQJ,0BAA0BA,CAAA,EAAuB;IACvD,MAAMG,OAA2B,GAAG,EAAE;IAEtC,IAAI,CAAC,IAAI,CAACxF,OAAO,CAACiB,GAAG,IAAI,IAAI,CAACjB,OAAO,CAACiB,GAAG,CAAC+E,qBAAqB,EAAE;MAE/D,MAAMC,0BAA0B,GAAGhH,6BAA6B,CAAC,CAAC;MAGlE,IAAIgH,0BAA0B,CAACC,GAAG,CAAC,MAAM,CAAC,EAAE;QAC1CV,OAAO,CAAC5D,IAAI,CAAC,UAAU,CAAC;MAC1B;MACA,IAAIqE,0BAA0B,CAACC,GAAG,CAAC,KAAK,CAAC,EAAE;QACzCV,OAAO,CAAC5D,IAAI,CAAC,KAAK,CAAC;MACrB;MAIA4D,OAAO,CAAC5D,IAAI,CAAC,MAAM,CAAC;IACtB;IAEA4D,OAAO,CAAC5D,IAAI,CAAC,KAAK,CAAC;IACnB4D,OAAO,CAAC5D,IAAI,CAAC,KAAK,CAAC;IACnB,OAAO4D,OAAO;EAChB;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"parse-i3s-tile-content.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/parse-i3s-tile-content.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,aAAa,EAAE,aAAa,EAAmB,MAAM,0BAA0B,CAAC;AAKxF,OAAO,EAQL,cAAc,EACd,cAAc,EACd,iBAAiB,EAClB,MAAM,aAAa,CAAC;AAwBrB,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,cAAc,EAC3B,cAAc,EAAE,iBAAiB,EACjC,OAAO,CAAC,EAAE,aAAa,EACvB,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,cAAc,CAAC,CA6DzB"}
1
+ {"version":3,"file":"parse-i3s-tile-content.d.ts","sourceRoot":"","sources":["../../../src/lib/parsers/parse-i3s-tile-content.ts"],"names":[],"mappings":"AAIA,OAAO,EAAC,aAAa,EAAE,aAAa,EAAmB,MAAM,0BAA0B,CAAC;AAKxF,OAAO,EAQL,cAAc,EACd,cAAc,EACd,iBAAiB,EAClB,MAAM,aAAa,CAAC;AAwBrB,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,cAAc,EAC3B,cAAc,EAAE,iBAAiB,EACjC,OAAO,CAAC,EAAE,aAAa,EACvB,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,cAAc,CAAC,CAgEzB"}
@@ -36,7 +36,7 @@ export async function parseI3STileContent(arrayBuffer, tileOptions, tilesetOptio
36
36
  };
37
37
  if (tileOptions.textureUrl) {
38
38
  var _options$i3s;
39
- const url = getUrlWithToken(tileOptions.textureUrl, options === null || options === void 0 ? void 0 : (_options$i3s = options.i3s) === null || _options$i3s === void 0 ? void 0 : _options$i3s.token);
39
+ const url = getUrlWithToken(getInternalPathFromUrl(tileOptions.textureUrl), options === null || options === void 0 ? void 0 : (_options$i3s = options.i3s) === null || _options$i3s === void 0 ? void 0 : _options$i3s.token);
40
40
  const loader = getLoaderForTextureFormat(tileOptions.textureFormat);
41
41
  const fetchFunc = (context === null || context === void 0 ? void 0 : context.fetch) || fetch;
42
42
  const response = await fetchFunc(url);
@@ -79,6 +79,18 @@ export async function parseI3STileContent(arrayBuffer, tileOptions, tilesetOptio
79
79
  }
80
80
  return await parseI3SNodeGeometry(arrayBuffer, content, tileOptions, tilesetOptions, options);
81
81
  }
82
+ function getInternalPathFromUrl(url) {
83
+ const slpkUrlParts = url.split('.slpk');
84
+ let filename;
85
+ if (slpkUrlParts.length === 1) {
86
+ filename = url;
87
+ } else if (slpkUrlParts.length === 2) {
88
+ filename = slpkUrlParts[1].slice(1);
89
+ } else {
90
+ filename = url;
91
+ }
92
+ return filename;
93
+ }
82
94
  async function parseI3SNodeGeometry(arrayBuffer, content, tileOptions, tilesetOptions, options) {
83
95
  var _options$i3s2;
84
96
  const contentByteLength = arrayBuffer.byteLength;