@loaders.gl/i3s 4.0.0-alpha.15 → 4.0.0-alpha.16

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 (90) hide show
  1. package/dist/dist.min.js +278 -197
  2. package/dist/es5/arcgis-webscene-loader.js +1 -1
  3. package/dist/es5/i3s-attribute-loader.js +1 -1
  4. package/dist/es5/i3s-building-scene-layer-loader.js +1 -1
  5. package/dist/es5/i3s-content-loader.js +1 -1
  6. package/dist/es5/i3s-loader.js +1 -1
  7. package/dist/es5/i3s-node-page-loader.js +1 -1
  8. package/dist/es5/i3s-slpk-loader.js +1 -1
  9. package/dist/es5/index.js.map +1 -1
  10. package/dist/es5/lib/parsers/constants.js +14 -15
  11. package/dist/es5/lib/parsers/constants.js.map +1 -1
  12. package/dist/es5/lib/parsers/parse-slpk/parse-slpk.js +93 -29
  13. package/dist/es5/lib/parsers/parse-slpk/parse-slpk.js.map +1 -1
  14. package/dist/es5/lib/parsers/parse-slpk/slpk-archieve.js +51 -30
  15. package/dist/es5/lib/parsers/parse-slpk/slpk-archieve.js.map +1 -1
  16. package/dist/es5/lib/parsers/parse-zip/cd-file-header.js +61 -42
  17. package/dist/es5/lib/parsers/parse-zip/cd-file-header.js.map +1 -1
  18. package/dist/es5/lib/parsers/parse-zip/end-of-central-directory.js +100 -0
  19. package/dist/es5/lib/parsers/parse-zip/end-of-central-directory.js.map +1 -0
  20. package/dist/es5/lib/parsers/parse-zip/local-file-header.js +1 -1
  21. package/dist/es5/lib/parsers/parse-zip/local-file-header.js.map +1 -1
  22. package/dist/es5/lib/parsers/parse-zip/search-from-the-end.js.map +1 -0
  23. package/dist/es5/types.js +1 -14
  24. package/dist/es5/types.js.map +1 -1
  25. package/dist/esm/arcgis-webscene-loader.js +1 -1
  26. package/dist/esm/i3s-attribute-loader.js +1 -1
  27. package/dist/esm/i3s-building-scene-layer-loader.js +1 -1
  28. package/dist/esm/i3s-content-loader.js +1 -1
  29. package/dist/esm/i3s-loader.js +1 -1
  30. package/dist/esm/i3s-node-page-loader.js +1 -1
  31. package/dist/esm/i3s-slpk-loader.js +1 -1
  32. package/dist/esm/index.js.map +1 -1
  33. package/dist/esm/lib/parsers/constants.js +14 -15
  34. package/dist/esm/lib/parsers/constants.js.map +1 -1
  35. package/dist/esm/lib/parsers/parse-slpk/parse-slpk.js +49 -16
  36. package/dist/esm/lib/parsers/parse-slpk/parse-slpk.js.map +1 -1
  37. package/dist/esm/lib/parsers/parse-slpk/slpk-archieve.js +35 -18
  38. package/dist/esm/lib/parsers/parse-slpk/slpk-archieve.js.map +1 -1
  39. package/dist/esm/lib/parsers/parse-zip/cd-file-header.js +14 -8
  40. package/dist/esm/lib/parsers/parse-zip/cd-file-header.js.map +1 -1
  41. package/dist/esm/lib/parsers/parse-zip/end-of-central-directory.js +33 -0
  42. package/dist/esm/lib/parsers/parse-zip/end-of-central-directory.js.map +1 -0
  43. package/dist/esm/lib/parsers/parse-zip/local-file-header.js +1 -1
  44. package/dist/esm/lib/parsers/parse-zip/local-file-header.js.map +1 -1
  45. package/dist/esm/lib/parsers/parse-zip/search-from-the-end.js.map +1 -0
  46. package/dist/esm/types.js +0 -12
  47. package/dist/esm/types.js.map +1 -1
  48. package/dist/i3s-content-worker-node.js +47 -47
  49. package/dist/i3s-content-worker-node.js.map +2 -2
  50. package/dist/i3s-content-worker.js +22 -34
  51. package/dist/index.d.ts +1 -1
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/lib/parsers/constants.d.ts.map +1 -1
  54. package/dist/lib/parsers/constants.js +14 -15
  55. package/dist/lib/parsers/parse-slpk/parse-slpk.d.ts +2 -1
  56. package/dist/lib/parsers/parse-slpk/parse-slpk.d.ts.map +1 -1
  57. package/dist/lib/parsers/parse-slpk/parse-slpk.js +61 -15
  58. package/dist/lib/parsers/parse-slpk/slpk-archieve.d.ts +21 -10
  59. package/dist/lib/parsers/parse-slpk/slpk-archieve.d.ts.map +1 -1
  60. package/dist/lib/parsers/parse-slpk/slpk-archieve.js +53 -24
  61. package/dist/lib/parsers/parse-zip/cd-file-header.d.ts +5 -1
  62. package/dist/lib/parsers/parse-zip/cd-file-header.d.ts.map +1 -1
  63. package/dist/lib/parsers/parse-zip/cd-file-header.js +15 -9
  64. package/dist/lib/parsers/parse-zip/end-of-central-directory.d.ts +18 -0
  65. package/dist/lib/parsers/parse-zip/end-of-central-directory.d.ts.map +1 -0
  66. package/dist/lib/parsers/parse-zip/end-of-central-directory.js +41 -0
  67. package/dist/lib/parsers/parse-zip/local-file-header.d.ts +1 -1
  68. package/dist/lib/parsers/parse-zip/local-file-header.d.ts.map +1 -1
  69. package/dist/lib/parsers/parse-zip/local-file-header.js +1 -1
  70. package/dist/lib/parsers/parse-zip/search-from-the-end.d.ts.map +1 -0
  71. package/dist/types.d.ts +17 -24
  72. package/dist/types.d.ts.map +1 -1
  73. package/dist/types.js +1 -13
  74. package/package.json +9 -9
  75. package/src/index.ts +0 -1
  76. package/src/lib/parsers/constants.ts +14 -15
  77. package/src/lib/parsers/parse-slpk/parse-slpk.ts +79 -25
  78. package/src/lib/parsers/parse-slpk/slpk-archieve.ts +55 -37
  79. package/src/lib/parsers/parse-zip/cd-file-header.ts +27 -9
  80. package/src/lib/parsers/parse-zip/end-of-central-directory.ts +78 -0
  81. package/src/lib/parsers/parse-zip/local-file-header.ts +2 -2
  82. package/src/types.ts +25 -40
  83. package/dist/es5/lib/parsers/parse-slpk/search-from-the-end.js.map +0 -1
  84. package/dist/esm/lib/parsers/parse-slpk/search-from-the-end.js.map +0 -1
  85. package/dist/lib/parsers/parse-slpk/search-from-the-end.d.ts.map +0 -1
  86. /package/dist/es5/lib/parsers/{parse-slpk → parse-zip}/search-from-the-end.js +0 -0
  87. /package/dist/esm/lib/parsers/{parse-slpk → parse-zip}/search-from-the-end.js +0 -0
  88. /package/dist/lib/parsers/{parse-slpk → parse-zip}/search-from-the-end.d.ts +0 -0
  89. /package/dist/lib/parsers/{parse-slpk → parse-zip}/search-from-the-end.js +0 -0
  90. /package/src/lib/parsers/{parse-slpk → parse-zip}/search-from-the-end.ts +0 -0
package/dist/dist.min.js CHANGED
@@ -652,40 +652,18 @@
652
652
  }
653
653
  });
654
654
 
655
- // src/types.ts
656
- var DATA_TYPE, HeaderAttributeProperty;
657
- var init_types = __esm({
658
- "src/types.ts"() {
659
- (function(DATA_TYPE2) {
660
- DATA_TYPE2["UInt8"] = "UInt8";
661
- DATA_TYPE2["UInt16"] = "UInt16";
662
- DATA_TYPE2["UInt32"] = "UInt32";
663
- DATA_TYPE2["UInt64"] = "UInt64";
664
- DATA_TYPE2["Int16"] = "Int16";
665
- DATA_TYPE2["Int32"] = "Int32";
666
- DATA_TYPE2["Int64"] = "Int64";
667
- DATA_TYPE2["Float32"] = "Float32";
668
- DATA_TYPE2["Float64"] = "Float64";
669
- })(DATA_TYPE || (DATA_TYPE = {}));
670
- (function(HeaderAttributeProperty2) {
671
- HeaderAttributeProperty2["vertexCount"] = "vertexCount";
672
- HeaderAttributeProperty2["featureCount"] = "featureCount";
673
- })(HeaderAttributeProperty || (HeaderAttributeProperty = {}));
674
- }
675
- });
676
-
677
655
  // src/lib/parsers/constants.ts
678
656
  function getConstructorForDataFormat(dataType) {
679
657
  switch (dataType) {
680
- case DATA_TYPE.UInt8:
658
+ case "UInt8":
681
659
  return Uint8Array;
682
- case DATA_TYPE.UInt16:
660
+ case "UInt16":
683
661
  return Uint16Array;
684
- case DATA_TYPE.UInt32:
662
+ case "UInt32":
685
663
  return Uint32Array;
686
- case DATA_TYPE.Float32:
664
+ case "Float32":
687
665
  return Float32Array;
688
- case DATA_TYPE.UInt64:
666
+ case "UInt64":
689
667
  return Float64Array;
690
668
  default:
691
669
  throw new Error(`parse i3s tile content: unknown type of data: ${dataType}`);
@@ -693,18 +671,18 @@
693
671
  }
694
672
  function sizeOf(dataType) {
695
673
  switch (dataType) {
696
- case DATA_TYPE.UInt8:
674
+ case "UInt8":
697
675
  return 1;
698
- case DATA_TYPE.UInt16:
699
- case DATA_TYPE.Int16:
676
+ case "UInt16":
677
+ case "Int16":
700
678
  return 2;
701
- case DATA_TYPE.UInt32:
702
- case DATA_TYPE.Int32:
703
- case DATA_TYPE.Float32:
679
+ case "UInt32":
680
+ case "Int32":
681
+ case "Float32":
704
682
  return 4;
705
- case DATA_TYPE.UInt64:
706
- case DATA_TYPE.Int64:
707
- case DATA_TYPE.Float64:
683
+ case "UInt64":
684
+ case "Int64":
685
+ case "Float64":
708
686
  return 8;
709
687
  default:
710
688
  throw new Error(`parse i3s tile content: unknown size of data: ${dataType}`);
@@ -714,7 +692,6 @@
714
692
  var init_constants = __esm({
715
693
  "src/lib/parsers/constants.ts"() {
716
694
  init_esm();
717
- init_types();
718
695
  GL_TYPE_MAP = {
719
696
  UInt8: esm_default.UNSIGNED_BYTE,
720
697
  UInt16: esm_default.UNSIGNED_SHORT,
@@ -8833,6 +8810,17 @@
8833
8810
  }
8834
8811
  });
8835
8812
 
8813
+ // src/types.ts
8814
+ var HeaderAttributeProperty;
8815
+ var init_types = __esm({
8816
+ "src/types.ts"() {
8817
+ (function(HeaderAttributeProperty2) {
8818
+ HeaderAttributeProperty2["vertexCount"] = "vertexCount";
8819
+ HeaderAttributeProperty2["featureCount"] = "featureCount";
8820
+ })(HeaderAttributeProperty || (HeaderAttributeProperty = {}));
8821
+ }
8822
+ });
8823
+
8836
8824
  // src/lib/utils/url-utils.ts
8837
8825
  function getUrlWithToken(url, token = null) {
8838
8826
  return token ? `${url}?token=${token}` : url;
@@ -10491,124 +10479,6 @@
10491
10479
  }
10492
10480
  });
10493
10481
 
10494
- // src/lib/parsers/parse-zip/cd-file-header.ts
10495
- var parseZipCDFileHeader;
10496
- var init_cd_file_header = __esm({
10497
- "src/lib/parsers/parse-zip/cd-file-header.ts"() {
10498
- parseZipCDFileHeader = async (headerOffset, buffer) => {
10499
- const offsets2 = {
10500
- CD_COMPRESSED_SIZE_OFFSET: 20n,
10501
- CD_UNCOMPRESSED_SIZE_OFFSET: 24n,
10502
- CD_FILE_NAME_LENGTH_OFFSET: 28n,
10503
- CD_EXTRA_FIELD_LENGTH_OFFSET: 30n,
10504
- CD_LOCAL_HEADER_OFFSET_OFFSET: 42n,
10505
- CD_FILE_NAME_OFFSET: 46n
10506
- };
10507
- let compressedSize = BigInt(await buffer.getUint32(headerOffset + offsets2.CD_COMPRESSED_SIZE_OFFSET));
10508
- let uncompressedSize = BigInt(await buffer.getUint32(headerOffset + offsets2.CD_UNCOMPRESSED_SIZE_OFFSET));
10509
- const fileNameLength = await buffer.getUint16(headerOffset + offsets2.CD_FILE_NAME_LENGTH_OFFSET);
10510
- const fileName = new TextDecoder().decode(await buffer.slice(headerOffset + offsets2.CD_FILE_NAME_OFFSET, headerOffset + offsets2.CD_FILE_NAME_OFFSET + BigInt(fileNameLength)));
10511
- const extraOffset = headerOffset + offsets2.CD_FILE_NAME_OFFSET + BigInt(fileNameLength);
10512
- const oldFormatOffset = await buffer.getUint32(headerOffset + offsets2.CD_LOCAL_HEADER_OFFSET_OFFSET);
10513
- let fileDataOffset = BigInt(oldFormatOffset);
10514
- let offsetInZip64Data = 4n;
10515
- if (uncompressedSize === BigInt(4294967295)) {
10516
- uncompressedSize = await buffer.getBigUint64(extraOffset + offsetInZip64Data);
10517
- offsetInZip64Data += 8n;
10518
- }
10519
- if (compressedSize === BigInt(4294967295)) {
10520
- compressedSize = await buffer.getBigUint64(extraOffset + offsetInZip64Data);
10521
- offsetInZip64Data += 8n;
10522
- }
10523
- if (fileDataOffset === BigInt(4294967295)) {
10524
- fileDataOffset = await buffer.getBigUint64(extraOffset + offsetInZip64Data);
10525
- }
10526
- const localHeaderOffset = fileDataOffset;
10527
- return {
10528
- compressedSize,
10529
- uncompressedSize,
10530
- fileNameLength,
10531
- fileName,
10532
- extraOffset,
10533
- localHeaderOffset
10534
- };
10535
- };
10536
- }
10537
- });
10538
-
10539
- // src/lib/parsers/parse-zip/local-file-header.ts
10540
- var offsets, signature, parseZipLocalFileHeader;
10541
- var init_local_file_header = __esm({
10542
- "src/lib/parsers/parse-zip/local-file-header.ts"() {
10543
- offsets = {
10544
- COMPRESSED_SIZE_OFFSET: 18n,
10545
- UNCOMPRESSED_SIZE_OFFSET: 22n,
10546
- FILE_NAME_LENGTH_OFFSET: 26n,
10547
- EXTRA_FIELD_LENGTH_OFFSET: 28n,
10548
- FILE_NAME_OFFSET: 30n
10549
- };
10550
- signature = Buffer.from([80, 75, 3, 4]);
10551
- parseZipLocalFileHeader = async (headerOffset, buffer) => {
10552
- if (Buffer.from(await buffer.slice(headerOffset, headerOffset + 4n)).compare(signature) !== 0) {
10553
- return Promise.resolve(void 0);
10554
- }
10555
- const fileNameLength = await buffer.getUint16(headerOffset + offsets.FILE_NAME_LENGTH_OFFSET);
10556
- const fileName = new TextDecoder().decode(await buffer.slice(headerOffset + offsets.FILE_NAME_OFFSET, headerOffset + offsets.FILE_NAME_OFFSET + BigInt(fileNameLength))).split("\\").join("/");
10557
- const extraFieldLength = await buffer.getUint16(headerOffset + offsets.EXTRA_FIELD_LENGTH_OFFSET);
10558
- let fileDataOffset = headerOffset + offsets.FILE_NAME_OFFSET + BigInt(fileNameLength + extraFieldLength);
10559
- let compressedSize = BigInt(await buffer.getUint32(headerOffset + offsets.COMPRESSED_SIZE_OFFSET));
10560
- let uncompressedSize = BigInt(await buffer.getUint32(headerOffset + offsets.UNCOMPRESSED_SIZE_OFFSET));
10561
- const extraOffset = headerOffset + offsets.FILE_NAME_OFFSET + BigInt(fileNameLength);
10562
- let offsetInZip64Data = 4n;
10563
- if (uncompressedSize === BigInt(4294967295)) {
10564
- uncompressedSize = await buffer.getBigUint64(extraOffset + offsetInZip64Data);
10565
- offsetInZip64Data += 8n;
10566
- }
10567
- if (compressedSize === BigInt(4294967295)) {
10568
- compressedSize = await buffer.getBigUint64(extraOffset + offsetInZip64Data);
10569
- offsetInZip64Data += 8n;
10570
- }
10571
- if (fileDataOffset === BigInt(4294967295)) {
10572
- fileDataOffset = await buffer.getBigUint64(extraOffset + offsetInZip64Data);
10573
- }
10574
- return {
10575
- fileNameLength,
10576
- fileName,
10577
- extraFieldLength,
10578
- fileDataOffset,
10579
- compressedSize
10580
- };
10581
- };
10582
- }
10583
- });
10584
-
10585
- // src/lib/parsers/parse-slpk/search-from-the-end.ts
10586
- var searchFromTheEnd;
10587
- var init_search_from_the_end = __esm({
10588
- "src/lib/parsers/parse-slpk/search-from-the-end.ts"() {
10589
- searchFromTheEnd = async (file, target) => {
10590
- const searchWindow = [
10591
- await file.getUint8(file.length - 1n),
10592
- await file.getUint8(file.length - 2n),
10593
- await file.getUint8(file.length - 3n),
10594
- void 0
10595
- ];
10596
- let targetOffset = 0n;
10597
- for (let i2 = file.length - 4n; i2 > -1; i2--) {
10598
- searchWindow[3] = searchWindow[2];
10599
- searchWindow[2] = searchWindow[1];
10600
- searchWindow[1] = searchWindow[0];
10601
- searchWindow[0] = await file.getUint8(i2);
10602
- if (searchWindow.every((val, index) => val === target[index])) {
10603
- targetOffset = i2;
10604
- break;
10605
- }
10606
- }
10607
- return targetOffset;
10608
- };
10609
- }
10610
- });
10611
-
10612
10482
  // ../../node_modules/crypt/crypt.js
10613
10483
  var require_crypt = __commonJS({
10614
10484
  "../../node_modules/crypt/crypt.js"(exports, module) {
@@ -10729,7 +10599,7 @@
10729
10599
  var require_md5 = __commonJS({
10730
10600
  "../../node_modules/md5/md5.js"(exports, module) {
10731
10601
  (function() {
10732
- var crypt = require_crypt(), utf8 = require_charenc().utf8, isBuffer3 = require_is_buffer(), bin = require_charenc().bin, md52 = function(message, options) {
10602
+ var crypt = require_crypt(), utf8 = require_charenc().utf8, isBuffer3 = require_is_buffer(), bin = require_charenc().bin, md53 = function(message, options) {
10733
10603
  if (message.constructor == String)
10734
10604
  if (options && options.encoding === "binary")
10735
10605
  message = bin.stringToBytes(message);
@@ -10745,7 +10615,7 @@
10745
10615
  }
10746
10616
  m[l2 >>> 5] |= 128 << l2 % 32;
10747
10617
  m[(l2 + 64 >>> 9 << 4) + 14] = l2;
10748
- var FF = md52._ff, GG = md52._gg, HH = md52._hh, II = md52._ii;
10618
+ var FF = md53._ff, GG = md53._gg, HH = md53._hh, II = md53._ii;
10749
10619
  for (var i2 = 0; i2 < m.length; i2 += 16) {
10750
10620
  var aa = a2, bb = b, cc = c2, dd = d;
10751
10621
  a2 = FF(a2, b, c2, d, m[i2 + 0], 7, -680876936);
@@ -10819,34 +10689,197 @@
10819
10689
  }
10820
10690
  return crypt.endian([a2, b, c2, d]);
10821
10691
  };
10822
- md52._ff = function(a2, b, c2, d, x, s2, t2) {
10692
+ md53._ff = function(a2, b, c2, d, x, s2, t2) {
10823
10693
  var n2 = a2 + (b & c2 | ~b & d) + (x >>> 0) + t2;
10824
10694
  return (n2 << s2 | n2 >>> 32 - s2) + b;
10825
10695
  };
10826
- md52._gg = function(a2, b, c2, d, x, s2, t2) {
10696
+ md53._gg = function(a2, b, c2, d, x, s2, t2) {
10827
10697
  var n2 = a2 + (b & d | c2 & ~d) + (x >>> 0) + t2;
10828
10698
  return (n2 << s2 | n2 >>> 32 - s2) + b;
10829
10699
  };
10830
- md52._hh = function(a2, b, c2, d, x, s2, t2) {
10700
+ md53._hh = function(a2, b, c2, d, x, s2, t2) {
10831
10701
  var n2 = a2 + (b ^ c2 ^ d) + (x >>> 0) + t2;
10832
10702
  return (n2 << s2 | n2 >>> 32 - s2) + b;
10833
10703
  };
10834
- md52._ii = function(a2, b, c2, d, x, s2, t2) {
10704
+ md53._ii = function(a2, b, c2, d, x, s2, t2) {
10835
10705
  var n2 = a2 + (c2 ^ (b | ~d)) + (x >>> 0) + t2;
10836
10706
  return (n2 << s2 | n2 >>> 32 - s2) + b;
10837
10707
  };
10838
- md52._blocksize = 16;
10839
- md52._digestsize = 16;
10708
+ md53._blocksize = 16;
10709
+ md53._digestsize = 16;
10840
10710
  module.exports = function(message, options) {
10841
10711
  if (message === void 0 || message === null)
10842
10712
  throw new Error("Illegal argument " + message);
10843
- var digestbytes = crypt.wordsToBytes(md52(message, options));
10713
+ var digestbytes = crypt.wordsToBytes(md53(message, options));
10844
10714
  return options && options.asBytes ? digestbytes : options && options.asString ? bin.bytesToString(digestbytes) : crypt.bytesToHex(digestbytes);
10845
10715
  };
10846
10716
  })();
10847
10717
  }
10848
10718
  });
10849
10719
 
10720
+ // src/lib/parsers/parse-zip/cd-file-header.ts
10721
+ var offsets, signature, parseZipCDFileHeader;
10722
+ var init_cd_file_header = __esm({
10723
+ "src/lib/parsers/parse-zip/cd-file-header.ts"() {
10724
+ offsets = {
10725
+ CD_COMPRESSED_SIZE_OFFSET: 20n,
10726
+ CD_UNCOMPRESSED_SIZE_OFFSET: 24n,
10727
+ CD_FILE_NAME_LENGTH_OFFSET: 28n,
10728
+ CD_EXTRA_FIELD_LENGTH_OFFSET: 30n,
10729
+ CD_LOCAL_HEADER_OFFSET_OFFSET: 42n,
10730
+ CD_FILE_NAME_OFFSET: 46n
10731
+ };
10732
+ signature = [80, 75, 1, 2];
10733
+ parseZipCDFileHeader = async (headerOffset, buffer) => {
10734
+ if (Buffer.from(await buffer.slice(headerOffset, headerOffset + 4n)).compare(Buffer.from(signature)) !== 0) {
10735
+ return null;
10736
+ }
10737
+ let compressedSize = BigInt(await buffer.getUint32(headerOffset + offsets.CD_COMPRESSED_SIZE_OFFSET));
10738
+ let uncompressedSize = BigInt(await buffer.getUint32(headerOffset + offsets.CD_UNCOMPRESSED_SIZE_OFFSET));
10739
+ const extraFieldLength = await buffer.getUint16(headerOffset + offsets.CD_EXTRA_FIELD_LENGTH_OFFSET);
10740
+ const fileNameLength = await buffer.getUint16(headerOffset + offsets.CD_FILE_NAME_LENGTH_OFFSET);
10741
+ const fileName = new TextDecoder().decode(await buffer.slice(headerOffset + offsets.CD_FILE_NAME_OFFSET, headerOffset + offsets.CD_FILE_NAME_OFFSET + BigInt(fileNameLength)));
10742
+ const extraOffset = headerOffset + offsets.CD_FILE_NAME_OFFSET + BigInt(fileNameLength);
10743
+ const oldFormatOffset = await buffer.getUint32(headerOffset + offsets.CD_LOCAL_HEADER_OFFSET_OFFSET);
10744
+ let fileDataOffset = BigInt(oldFormatOffset);
10745
+ let offsetInZip64Data = 4n;
10746
+ if (uncompressedSize === BigInt(4294967295)) {
10747
+ uncompressedSize = await buffer.getBigUint64(extraOffset + offsetInZip64Data);
10748
+ offsetInZip64Data += 8n;
10749
+ }
10750
+ if (compressedSize === BigInt(4294967295)) {
10751
+ compressedSize = await buffer.getBigUint64(extraOffset + offsetInZip64Data);
10752
+ offsetInZip64Data += 8n;
10753
+ }
10754
+ if (fileDataOffset === BigInt(4294967295)) {
10755
+ fileDataOffset = await buffer.getBigUint64(extraOffset + offsetInZip64Data);
10756
+ }
10757
+ const localHeaderOffset = fileDataOffset;
10758
+ return {
10759
+ compressedSize,
10760
+ uncompressedSize,
10761
+ extraFieldLength,
10762
+ fileNameLength,
10763
+ fileName,
10764
+ extraOffset,
10765
+ localHeaderOffset
10766
+ };
10767
+ };
10768
+ }
10769
+ });
10770
+
10771
+ // src/lib/parsers/parse-zip/search-from-the-end.ts
10772
+ var searchFromTheEnd;
10773
+ var init_search_from_the_end = __esm({
10774
+ "src/lib/parsers/parse-zip/search-from-the-end.ts"() {
10775
+ searchFromTheEnd = async (file, target) => {
10776
+ const searchWindow = [
10777
+ await file.getUint8(file.length - 1n),
10778
+ await file.getUint8(file.length - 2n),
10779
+ await file.getUint8(file.length - 3n),
10780
+ void 0
10781
+ ];
10782
+ let targetOffset = 0n;
10783
+ for (let i2 = file.length - 4n; i2 > -1; i2--) {
10784
+ searchWindow[3] = searchWindow[2];
10785
+ searchWindow[2] = searchWindow[1];
10786
+ searchWindow[1] = searchWindow[0];
10787
+ searchWindow[0] = await file.getUint8(i2);
10788
+ if (searchWindow.every((val, index) => val === target[index])) {
10789
+ targetOffset = i2;
10790
+ break;
10791
+ }
10792
+ }
10793
+ return targetOffset;
10794
+ };
10795
+ }
10796
+ });
10797
+
10798
+ // src/lib/parsers/parse-zip/end-of-central-directory.ts
10799
+ var eoCDSignature, zip64EoCDLocatorSignature, zip64EoCDSignature, offsets2, parseEoCDRecord;
10800
+ var init_end_of_central_directory = __esm({
10801
+ "src/lib/parsers/parse-zip/end-of-central-directory.ts"() {
10802
+ init_search_from_the_end();
10803
+ eoCDSignature = [80, 75, 5, 6];
10804
+ zip64EoCDLocatorSignature = Buffer.from([80, 75, 6, 7]);
10805
+ zip64EoCDSignature = Buffer.from([80, 75, 6, 6]);
10806
+ offsets2 = {
10807
+ CD_RECORDS_NUMBER_OFFSET: 8n,
10808
+ CD_START_OFFSET_OFFSET: 16n,
10809
+ ZIP64_EOCD_START_OFFSET_OFFSET: 8n,
10810
+ ZIP64_CD_RECORDS_NUMBER_OFFSET: 24n,
10811
+ ZIP64_CD_START_OFFSET_OFFSET: 48n
10812
+ };
10813
+ parseEoCDRecord = async (fileProvider) => {
10814
+ const zipEoCDOffset = await searchFromTheEnd(fileProvider, eoCDSignature);
10815
+ let cdRecordsNumber = BigInt(await fileProvider.getUint16(zipEoCDOffset + offsets2.CD_RECORDS_NUMBER_OFFSET));
10816
+ let cdStartOffset = BigInt(await fileProvider.getUint32(zipEoCDOffset + offsets2.CD_START_OFFSET_OFFSET));
10817
+ if (cdStartOffset === BigInt(4294967295) || cdRecordsNumber === BigInt(4294967295)) {
10818
+ const zip64EoCDLocatorOffset = zipEoCDOffset - 20n;
10819
+ if (Buffer.from(await fileProvider.slice(zip64EoCDLocatorOffset, zip64EoCDLocatorOffset + 4n)).compare(zip64EoCDLocatorSignature) !== 0) {
10820
+ throw new Error("zip64 EoCD locator not found");
10821
+ }
10822
+ const zip64EoCDOffset = await fileProvider.getBigUint64(zip64EoCDLocatorOffset + offsets2.ZIP64_EOCD_START_OFFSET_OFFSET);
10823
+ if (Buffer.from(await fileProvider.slice(zip64EoCDOffset, zip64EoCDOffset + 4n)).compare(zip64EoCDSignature) !== 0) {
10824
+ throw new Error("zip64 EoCD not found");
10825
+ }
10826
+ cdRecordsNumber = await fileProvider.getBigUint64(zip64EoCDOffset + offsets2.ZIP64_CD_RECORDS_NUMBER_OFFSET);
10827
+ cdStartOffset = await fileProvider.getBigUint64(zip64EoCDOffset + offsets2.ZIP64_CD_START_OFFSET_OFFSET);
10828
+ }
10829
+ return {
10830
+ cdRecordsNumber,
10831
+ cdStartOffset
10832
+ };
10833
+ };
10834
+ }
10835
+ });
10836
+
10837
+ // src/lib/parsers/parse-zip/local-file-header.ts
10838
+ var offsets3, signature2, parseZipLocalFileHeader;
10839
+ var init_local_file_header = __esm({
10840
+ "src/lib/parsers/parse-zip/local-file-header.ts"() {
10841
+ offsets3 = {
10842
+ COMPRESSED_SIZE_OFFSET: 18n,
10843
+ UNCOMPRESSED_SIZE_OFFSET: 22n,
10844
+ FILE_NAME_LENGTH_OFFSET: 26n,
10845
+ EXTRA_FIELD_LENGTH_OFFSET: 28n,
10846
+ FILE_NAME_OFFSET: 30n
10847
+ };
10848
+ signature2 = Buffer.from([80, 75, 3, 4]);
10849
+ parseZipLocalFileHeader = async (headerOffset, buffer) => {
10850
+ if (Buffer.from(await buffer.slice(headerOffset, headerOffset + 4n)).compare(signature2) !== 0) {
10851
+ return null;
10852
+ }
10853
+ const fileNameLength = await buffer.getUint16(headerOffset + offsets3.FILE_NAME_LENGTH_OFFSET);
10854
+ const fileName = new TextDecoder().decode(await buffer.slice(headerOffset + offsets3.FILE_NAME_OFFSET, headerOffset + offsets3.FILE_NAME_OFFSET + BigInt(fileNameLength))).split("\\").join("/");
10855
+ const extraFieldLength = await buffer.getUint16(headerOffset + offsets3.EXTRA_FIELD_LENGTH_OFFSET);
10856
+ let fileDataOffset = headerOffset + offsets3.FILE_NAME_OFFSET + BigInt(fileNameLength + extraFieldLength);
10857
+ let compressedSize = BigInt(await buffer.getUint32(headerOffset + offsets3.COMPRESSED_SIZE_OFFSET));
10858
+ let uncompressedSize = BigInt(await buffer.getUint32(headerOffset + offsets3.UNCOMPRESSED_SIZE_OFFSET));
10859
+ const extraOffset = headerOffset + offsets3.FILE_NAME_OFFSET + BigInt(fileNameLength);
10860
+ let offsetInZip64Data = 4n;
10861
+ if (uncompressedSize === BigInt(4294967295)) {
10862
+ uncompressedSize = await buffer.getBigUint64(extraOffset + offsetInZip64Data);
10863
+ offsetInZip64Data += 8n;
10864
+ }
10865
+ if (compressedSize === BigInt(4294967295)) {
10866
+ compressedSize = await buffer.getBigUint64(extraOffset + offsetInZip64Data);
10867
+ offsetInZip64Data += 8n;
10868
+ }
10869
+ if (fileDataOffset === BigInt(4294967295)) {
10870
+ fileDataOffset = await buffer.getBigUint64(extraOffset + offsetInZip64Data);
10871
+ }
10872
+ return {
10873
+ fileNameLength,
10874
+ fileName,
10875
+ extraFieldLength,
10876
+ fileDataOffset,
10877
+ compressedSize
10878
+ };
10879
+ };
10880
+ }
10881
+ });
10882
+
10850
10883
  // ../compression/src/lib/compression.ts
10851
10884
  var Compression;
10852
10885
  var init_compression = __esm({
@@ -15135,12 +15168,23 @@
15135
15168
  });
15136
15169
 
15137
15170
  // src/lib/parsers/parse-slpk/slpk-archieve.ts
15138
- var import_md5, PATH_DESCRIPTIONS, SLPKArchive;
15171
+ var import_md5, compareHashes, PATH_DESCRIPTIONS, SLPKArchive;
15139
15172
  var init_slpk_archieve = __esm({
15140
15173
  "src/lib/parsers/parse-slpk/slpk-archieve.ts"() {
15141
15174
  import_md5 = __toModule(require_md5());
15142
15175
  init_local_file_header();
15143
15176
  init_src9();
15177
+ compareHashes = (hash1, hash2) => {
15178
+ const h1 = new BigUint64Array(hash1.buffer, hash1.byteOffset, 2);
15179
+ const h2 = new BigUint64Array(hash2.buffer, hash2.byteOffset, 2);
15180
+ const diff = h1[0] === h2[0] ? h1[1] - h2[1] : h1[0] - h2[0];
15181
+ if (diff < 0n) {
15182
+ return -1;
15183
+ } else if (diff === 0n) {
15184
+ return 0;
15185
+ }
15186
+ return 1;
15187
+ };
15144
15188
  PATH_DESCRIPTIONS = [
15145
15189
  {
15146
15190
  test: /^$/,
@@ -15151,7 +15195,7 @@
15151
15195
  extensions: [".json.gz"]
15152
15196
  },
15153
15197
  {
15154
- test: /^nodes\/\d+$/,
15198
+ test: /^nodes\/(\d+|root)$/,
15155
15199
  extensions: ["/3dNodeIndexDocument.json.gz"]
15156
15200
  },
15157
15201
  {
@@ -15177,21 +15221,24 @@
15177
15221
  ];
15178
15222
  SLPKArchive = class {
15179
15223
  constructor(slpkArchive, hashFile) {
15224
+ this.findBin = (hashToSearch) => {
15225
+ let lowerBorder = 0;
15226
+ let upperBorder = this.hashArray.length;
15227
+ while (upperBorder - lowerBorder > 1) {
15228
+ const middle = lowerBorder + Math.floor((upperBorder - lowerBorder) / 2);
15229
+ const value = compareHashes(this.hashArray[middle].hash, hashToSearch);
15230
+ if (value === 0) {
15231
+ return this.hashArray[middle];
15232
+ } else if (value < 0) {
15233
+ lowerBorder = middle;
15234
+ } else {
15235
+ upperBorder = middle;
15236
+ }
15237
+ }
15238
+ return void 0;
15239
+ };
15180
15240
  this.slpkArchive = slpkArchive;
15181
- this.hashArray = this.parseHashFile(hashFile);
15182
- }
15183
- parseHashFile(hashFile) {
15184
- const hashFileBuffer = Buffer.from(hashFile);
15185
- const hashArray = [];
15186
- for (let i2 = 0; i2 < hashFileBuffer.buffer.byteLength; i2 = i2 + 24) {
15187
- const offsetBuffer = new DataView(hashFileBuffer.buffer.slice(hashFileBuffer.byteOffset + i2 + 16, hashFileBuffer.byteOffset + i2 + 24));
15188
- const offset = offsetBuffer.getBigUint64(offsetBuffer.byteOffset, true);
15189
- hashArray.push({
15190
- hash: Buffer.from(hashFileBuffer.subarray(hashFileBuffer.byteOffset + i2, hashFileBuffer.byteOffset + i2 + 16)),
15191
- offset
15192
- });
15193
- }
15194
- return hashArray;
15241
+ this.hashArray = hashFile;
15195
15242
  }
15196
15243
  async getFile(path, mode = "raw") {
15197
15244
  if (mode === "http") {
@@ -15222,7 +15269,10 @@
15222
15269
  throw new Error("No such file in the archieve");
15223
15270
  }
15224
15271
  async getDataByPath(path) {
15225
- const data = await this.getFileBytes(path);
15272
+ let data = await this.getFileBytes(path.toLocaleLowerCase());
15273
+ if (!data) {
15274
+ data = await this.getFileBytes(path);
15275
+ }
15226
15276
  if (!data) {
15227
15277
  return void 0;
15228
15278
  }
@@ -15235,11 +15285,11 @@
15235
15285
  }
15236
15286
  async getFileBytes(path) {
15237
15287
  const nameHash = Buffer.from((0, import_md5.default)(path), "hex");
15238
- const fileInfo = this.hashArray.find((val) => Buffer.compare(val.hash, nameHash) === 0);
15288
+ const fileInfo = this.findBin(nameHash);
15239
15289
  if (!fileInfo) {
15240
15290
  return void 0;
15241
15291
  }
15242
- const localFileHeader = await parseZipLocalFileHeader(fileInfo?.offset, this.slpkArchive);
15292
+ const localFileHeader = await parseZipLocalFileHeader(fileInfo.offset, this.slpkArchive);
15243
15293
  if (!localFileHeader) {
15244
15294
  return void 0;
15245
15295
  }
@@ -15251,30 +15301,61 @@
15251
15301
  });
15252
15302
 
15253
15303
  // src/lib/parsers/parse-slpk/parse-slpk.ts
15254
- var parseSLPK;
15304
+ var import_md52, parseSLPK, generateHashInfo, parseHashFile;
15255
15305
  var init_parse_slpk = __esm({
15256
15306
  "src/lib/parsers/parse-slpk/parse-slpk.ts"() {
15307
+ import_md52 = __toModule(require_md5());
15257
15308
  init_cd_file_header();
15309
+ init_end_of_central_directory();
15258
15310
  init_local_file_header();
15259
15311
  init_search_from_the_end();
15260
15312
  init_slpk_archieve();
15261
- parseSLPK = async (fileProvider) => {
15262
- const cdFileHeaderSignature = [80, 75, 1, 2];
15263
- const hashCDOffset = await searchFromTheEnd(fileProvider, cdFileHeaderSignature);
15313
+ parseSLPK = async (fileProvider, cb) => {
15314
+ const hashCDOffset = await searchFromTheEnd(fileProvider, signature);
15264
15315
  const cdFileHeader = await parseZipCDFileHeader(hashCDOffset, fileProvider);
15265
- if (cdFileHeader.fileName !== "@specialIndexFileHASH128@") {
15266
- throw new Error("No hash file in slpk");
15316
+ let hashData;
15317
+ if (cdFileHeader?.fileName !== "@specialIndexFileHASH128@") {
15318
+ cb?.("SLPK doesnt contain hash file");
15319
+ hashData = await generateHashInfo(fileProvider);
15320
+ cb?.("hash info has been composed according to central directory records");
15321
+ } else {
15322
+ cb?.("SLPK contains hash file");
15323
+ const localFileHeader = await parseZipLocalFileHeader(cdFileHeader.localHeaderOffset, fileProvider);
15324
+ if (!localFileHeader) {
15325
+ throw new Error("corrupted SLPK");
15326
+ }
15327
+ const fileDataOffset = localFileHeader.fileDataOffset;
15328
+ const hashFile = await fileProvider.slice(fileDataOffset, fileDataOffset + localFileHeader.compressedSize);
15329
+ hashData = parseHashFile(hashFile);
15267
15330
  }
15268
- const localFileHeader = await parseZipLocalFileHeader(cdFileHeader.localHeaderOffset, fileProvider);
15269
- if (!localFileHeader) {
15270
- throw new Error("No hash file in slpk");
15331
+ return new SLPKArchive(fileProvider, hashData);
15332
+ };
15333
+ generateHashInfo = async (fileProvider) => {
15334
+ const { cdStartOffset } = await parseEoCDRecord(fileProvider);
15335
+ let cdHeader = await parseZipCDFileHeader(cdStartOffset, fileProvider);
15336
+ const hashInfo = [];
15337
+ while (cdHeader) {
15338
+ hashInfo.push({
15339
+ hash: Buffer.from((0, import_md52.default)(cdHeader.fileName.split("\\").join("/").toLocaleLowerCase()), "hex"),
15340
+ offset: cdHeader.localHeaderOffset
15341
+ });
15342
+ cdHeader = await parseZipCDFileHeader(cdHeader.extraOffset + BigInt(cdHeader.extraFieldLength), fileProvider);
15271
15343
  }
15272
- const fileDataOffset = localFileHeader.fileDataOffset;
15273
- const hashFile = await fileProvider.slice(fileDataOffset, fileDataOffset + localFileHeader.compressedSize);
15274
- if (!hashFile) {
15275
- throw new Error("No hash file in slpk");
15344
+ hashInfo.sort((a2, b) => compareHashes(a2.hash, b.hash));
15345
+ return hashInfo;
15346
+ };
15347
+ parseHashFile = (hashFile) => {
15348
+ const hashFileBuffer = Buffer.from(hashFile);
15349
+ const hashArray = [];
15350
+ for (let i2 = 0; i2 < hashFileBuffer.buffer.byteLength; i2 = i2 + 24) {
15351
+ const offsetBuffer = new DataView(hashFileBuffer.buffer.slice(hashFileBuffer.byteOffset + i2 + 16, hashFileBuffer.byteOffset + i2 + 24));
15352
+ const offset = offsetBuffer.getBigUint64(offsetBuffer.byteOffset, true);
15353
+ hashArray.push({
15354
+ hash: Buffer.from(hashFileBuffer.subarray(hashFileBuffer.byteOffset + i2, hashFileBuffer.byteOffset + i2 + 16)),
15355
+ offset
15356
+ });
15276
15357
  }
15277
- return new SLPKArchive(fileProvider, hashFile);
15358
+ return hashArray;
15278
15359
  };
15279
15360
  }
15280
15361
  });
@@ -8,7 +8,7 @@ exports.ArcGisWebSceneLoader = void 0;
8
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
9
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
10
  var _parseArcgisWebscene = require("./lib/parsers/parse-arcgis-webscene");
11
- var VERSION = typeof "4.0.0-alpha.15" !== 'undefined' ? "4.0.0-alpha.15" : 'beta';
11
+ var VERSION = typeof "4.0.0-alpha.16" !== 'undefined' ? "4.0.0-alpha.16" : 'beta';
12
12
  var ArcGisWebSceneLoader = {
13
13
  name: 'ArcGIS Web Scene Loader',
14
14
  id: 'arcgis-web-scene',
@@ -15,7 +15,7 @@ var _parseI3sAttribute = require("./lib/parsers/parse-i3s-attribute");
15
15
  var _urlUtils = require("./lib/utils/url-utils");
16
16
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
17
17
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
18
- var VERSION = typeof "4.0.0-alpha.15" !== 'undefined' ? "4.0.0-alpha.15" : 'latest';
18
+ var VERSION = typeof "4.0.0-alpha.16" !== 'undefined' ? "4.0.0-alpha.16" : 'latest';
19
19
  var EMPTY_VALUE = '';
20
20
  var REJECTED_STATUS = 'rejected';
21
21
  var I3SAttributeLoader = {
@@ -8,7 +8,7 @@ exports.I3SBuildingSceneLayerLoader = void 0;
8
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
9
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
10
  var _parseI3sBuildingSceneLayer = require("./lib/parsers/parse-i3s-building-scene-layer");
11
- var VERSION = typeof "4.0.0-alpha.15" !== 'undefined' ? "4.0.0-alpha.15" : 'beta';
11
+ var VERSION = typeof "4.0.0-alpha.16" !== 'undefined' ? "4.0.0-alpha.16" : 'beta';
12
12
  var I3SBuildingSceneLayerLoader = {
13
13
  name: 'I3S Building Scene Layer',
14
14
  id: 'i3s-building-scene-layer',
@@ -8,7 +8,7 @@ exports.I3SContentLoader = void 0;
8
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
9
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
10
  var _parseI3sTileContent = require("./lib/parsers/parse-i3s-tile-content");
11
- var VERSION = typeof "4.0.0-alpha.15" !== 'undefined' ? "4.0.0-alpha.15" : 'beta';
11
+ var VERSION = typeof "4.0.0-alpha.16" !== 'undefined' ? "4.0.0-alpha.16" : 'beta';
12
12
  var I3SContentLoader = {
13
13
  name: 'I3S Content (Indexed Scene Layers)',
14
14
  id: 'i3s-content',
@@ -12,7 +12,7 @@ var _core = require("@loaders.gl/core");
12
12
  var _i3sContentLoader = require("./i3s-content-loader");
13
13
  var _parseI3s = require("./lib/parsers/parse-i3s");
14
14
  var _constants = require("./lib/parsers/constants");
15
- var VERSION = typeof "4.0.0-alpha.15" !== 'undefined' ? "4.0.0-alpha.15" : 'latest';
15
+ var VERSION = typeof "4.0.0-alpha.16" !== 'undefined' ? "4.0.0-alpha.16" : 'latest';
16
16
  var TILESET_REGEX = /layers\/[0-9]+$/;
17
17
  var TILE_HEADER_REGEX = /nodes\/([0-9-]+|root)$/;
18
18
  var SLPK_HEX = '504b0304';