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

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 +282 -205
  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 +26 -42
  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,
@@ -1989,16 +1966,12 @@
1989
1966
  });
1990
1967
 
1991
1968
  // ../core/src/lib/fetch/fetch-file.ts
1992
- async function fetchFile(url, options) {
1993
- if (typeof url === "string") {
1994
- url = resolvePath(url);
1995
- let fetchOptions = options;
1996
- if (options?.fetch && typeof options?.fetch !== "function") {
1997
- fetchOptions = options.fetch;
1998
- }
1969
+ async function fetchFile(urlOrData, fetchOptions) {
1970
+ if (typeof urlOrData === "string") {
1971
+ const url = resolvePath(urlOrData);
1999
1972
  return await fetch(url, fetchOptions);
2000
1973
  }
2001
- return await makeResponse(url);
1974
+ return await makeResponse(urlOrData);
2002
1975
  }
2003
1976
  var init_fetch_file = __esm({
2004
1977
  "../core/src/lib/fetch/fetch-file.ts"() {
@@ -8833,6 +8806,17 @@
8833
8806
  }
8834
8807
  });
8835
8808
 
8809
+ // src/types.ts
8810
+ var HeaderAttributeProperty;
8811
+ var init_types = __esm({
8812
+ "src/types.ts"() {
8813
+ (function(HeaderAttributeProperty2) {
8814
+ HeaderAttributeProperty2["vertexCount"] = "vertexCount";
8815
+ HeaderAttributeProperty2["featureCount"] = "featureCount";
8816
+ })(HeaderAttributeProperty || (HeaderAttributeProperty = {}));
8817
+ }
8818
+ });
8819
+
8836
8820
  // src/lib/utils/url-utils.ts
8837
8821
  function getUrlWithToken(url, token = null) {
8838
8822
  return token ? `${url}?token=${token}` : url;
@@ -10491,124 +10475,6 @@
10491
10475
  }
10492
10476
  });
10493
10477
 
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
10478
  // ../../node_modules/crypt/crypt.js
10613
10479
  var require_crypt = __commonJS({
10614
10480
  "../../node_modules/crypt/crypt.js"(exports, module) {
@@ -10729,7 +10595,7 @@
10729
10595
  var require_md5 = __commonJS({
10730
10596
  "../../node_modules/md5/md5.js"(exports, module) {
10731
10597
  (function() {
10732
- var crypt = require_crypt(), utf8 = require_charenc().utf8, isBuffer3 = require_is_buffer(), bin = require_charenc().bin, md52 = function(message, options) {
10598
+ var crypt = require_crypt(), utf8 = require_charenc().utf8, isBuffer3 = require_is_buffer(), bin = require_charenc().bin, md53 = function(message, options) {
10733
10599
  if (message.constructor == String)
10734
10600
  if (options && options.encoding === "binary")
10735
10601
  message = bin.stringToBytes(message);
@@ -10745,7 +10611,7 @@
10745
10611
  }
10746
10612
  m[l2 >>> 5] |= 128 << l2 % 32;
10747
10613
  m[(l2 + 64 >>> 9 << 4) + 14] = l2;
10748
- var FF = md52._ff, GG = md52._gg, HH = md52._hh, II = md52._ii;
10614
+ var FF = md53._ff, GG = md53._gg, HH = md53._hh, II = md53._ii;
10749
10615
  for (var i2 = 0; i2 < m.length; i2 += 16) {
10750
10616
  var aa = a2, bb = b, cc = c2, dd = d;
10751
10617
  a2 = FF(a2, b, c2, d, m[i2 + 0], 7, -680876936);
@@ -10819,34 +10685,197 @@
10819
10685
  }
10820
10686
  return crypt.endian([a2, b, c2, d]);
10821
10687
  };
10822
- md52._ff = function(a2, b, c2, d, x, s2, t2) {
10688
+ md53._ff = function(a2, b, c2, d, x, s2, t2) {
10823
10689
  var n2 = a2 + (b & c2 | ~b & d) + (x >>> 0) + t2;
10824
10690
  return (n2 << s2 | n2 >>> 32 - s2) + b;
10825
10691
  };
10826
- md52._gg = function(a2, b, c2, d, x, s2, t2) {
10692
+ md53._gg = function(a2, b, c2, d, x, s2, t2) {
10827
10693
  var n2 = a2 + (b & d | c2 & ~d) + (x >>> 0) + t2;
10828
10694
  return (n2 << s2 | n2 >>> 32 - s2) + b;
10829
10695
  };
10830
- md52._hh = function(a2, b, c2, d, x, s2, t2) {
10696
+ md53._hh = function(a2, b, c2, d, x, s2, t2) {
10831
10697
  var n2 = a2 + (b ^ c2 ^ d) + (x >>> 0) + t2;
10832
10698
  return (n2 << s2 | n2 >>> 32 - s2) + b;
10833
10699
  };
10834
- md52._ii = function(a2, b, c2, d, x, s2, t2) {
10700
+ md53._ii = function(a2, b, c2, d, x, s2, t2) {
10835
10701
  var n2 = a2 + (c2 ^ (b | ~d)) + (x >>> 0) + t2;
10836
10702
  return (n2 << s2 | n2 >>> 32 - s2) + b;
10837
10703
  };
10838
- md52._blocksize = 16;
10839
- md52._digestsize = 16;
10704
+ md53._blocksize = 16;
10705
+ md53._digestsize = 16;
10840
10706
  module.exports = function(message, options) {
10841
10707
  if (message === void 0 || message === null)
10842
10708
  throw new Error("Illegal argument " + message);
10843
- var digestbytes = crypt.wordsToBytes(md52(message, options));
10709
+ var digestbytes = crypt.wordsToBytes(md53(message, options));
10844
10710
  return options && options.asBytes ? digestbytes : options && options.asString ? bin.bytesToString(digestbytes) : crypt.bytesToHex(digestbytes);
10845
10711
  };
10846
10712
  })();
10847
10713
  }
10848
10714
  });
10849
10715
 
10716
+ // src/lib/parsers/parse-zip/cd-file-header.ts
10717
+ var offsets, signature, parseZipCDFileHeader;
10718
+ var init_cd_file_header = __esm({
10719
+ "src/lib/parsers/parse-zip/cd-file-header.ts"() {
10720
+ offsets = {
10721
+ CD_COMPRESSED_SIZE_OFFSET: 20n,
10722
+ CD_UNCOMPRESSED_SIZE_OFFSET: 24n,
10723
+ CD_FILE_NAME_LENGTH_OFFSET: 28n,
10724
+ CD_EXTRA_FIELD_LENGTH_OFFSET: 30n,
10725
+ CD_LOCAL_HEADER_OFFSET_OFFSET: 42n,
10726
+ CD_FILE_NAME_OFFSET: 46n
10727
+ };
10728
+ signature = [80, 75, 1, 2];
10729
+ parseZipCDFileHeader = async (headerOffset, buffer) => {
10730
+ if (Buffer.from(await buffer.slice(headerOffset, headerOffset + 4n)).compare(Buffer.from(signature)) !== 0) {
10731
+ return null;
10732
+ }
10733
+ let compressedSize = BigInt(await buffer.getUint32(headerOffset + offsets.CD_COMPRESSED_SIZE_OFFSET));
10734
+ let uncompressedSize = BigInt(await buffer.getUint32(headerOffset + offsets.CD_UNCOMPRESSED_SIZE_OFFSET));
10735
+ const extraFieldLength = await buffer.getUint16(headerOffset + offsets.CD_EXTRA_FIELD_LENGTH_OFFSET);
10736
+ const fileNameLength = await buffer.getUint16(headerOffset + offsets.CD_FILE_NAME_LENGTH_OFFSET);
10737
+ const fileName = new TextDecoder().decode(await buffer.slice(headerOffset + offsets.CD_FILE_NAME_OFFSET, headerOffset + offsets.CD_FILE_NAME_OFFSET + BigInt(fileNameLength)));
10738
+ const extraOffset = headerOffset + offsets.CD_FILE_NAME_OFFSET + BigInt(fileNameLength);
10739
+ const oldFormatOffset = await buffer.getUint32(headerOffset + offsets.CD_LOCAL_HEADER_OFFSET_OFFSET);
10740
+ let fileDataOffset = BigInt(oldFormatOffset);
10741
+ let offsetInZip64Data = 4n;
10742
+ if (uncompressedSize === BigInt(4294967295)) {
10743
+ uncompressedSize = await buffer.getBigUint64(extraOffset + offsetInZip64Data);
10744
+ offsetInZip64Data += 8n;
10745
+ }
10746
+ if (compressedSize === BigInt(4294967295)) {
10747
+ compressedSize = await buffer.getBigUint64(extraOffset + offsetInZip64Data);
10748
+ offsetInZip64Data += 8n;
10749
+ }
10750
+ if (fileDataOffset === BigInt(4294967295)) {
10751
+ fileDataOffset = await buffer.getBigUint64(extraOffset + offsetInZip64Data);
10752
+ }
10753
+ const localHeaderOffset = fileDataOffset;
10754
+ return {
10755
+ compressedSize,
10756
+ uncompressedSize,
10757
+ extraFieldLength,
10758
+ fileNameLength,
10759
+ fileName,
10760
+ extraOffset,
10761
+ localHeaderOffset
10762
+ };
10763
+ };
10764
+ }
10765
+ });
10766
+
10767
+ // src/lib/parsers/parse-zip/search-from-the-end.ts
10768
+ var searchFromTheEnd;
10769
+ var init_search_from_the_end = __esm({
10770
+ "src/lib/parsers/parse-zip/search-from-the-end.ts"() {
10771
+ searchFromTheEnd = async (file, target) => {
10772
+ const searchWindow = [
10773
+ await file.getUint8(file.length - 1n),
10774
+ await file.getUint8(file.length - 2n),
10775
+ await file.getUint8(file.length - 3n),
10776
+ void 0
10777
+ ];
10778
+ let targetOffset = 0n;
10779
+ for (let i2 = file.length - 4n; i2 > -1; i2--) {
10780
+ searchWindow[3] = searchWindow[2];
10781
+ searchWindow[2] = searchWindow[1];
10782
+ searchWindow[1] = searchWindow[0];
10783
+ searchWindow[0] = await file.getUint8(i2);
10784
+ if (searchWindow.every((val, index) => val === target[index])) {
10785
+ targetOffset = i2;
10786
+ break;
10787
+ }
10788
+ }
10789
+ return targetOffset;
10790
+ };
10791
+ }
10792
+ });
10793
+
10794
+ // src/lib/parsers/parse-zip/end-of-central-directory.ts
10795
+ var eoCDSignature, zip64EoCDLocatorSignature, zip64EoCDSignature, offsets2, parseEoCDRecord;
10796
+ var init_end_of_central_directory = __esm({
10797
+ "src/lib/parsers/parse-zip/end-of-central-directory.ts"() {
10798
+ init_search_from_the_end();
10799
+ eoCDSignature = [80, 75, 5, 6];
10800
+ zip64EoCDLocatorSignature = Buffer.from([80, 75, 6, 7]);
10801
+ zip64EoCDSignature = Buffer.from([80, 75, 6, 6]);
10802
+ offsets2 = {
10803
+ CD_RECORDS_NUMBER_OFFSET: 8n,
10804
+ CD_START_OFFSET_OFFSET: 16n,
10805
+ ZIP64_EOCD_START_OFFSET_OFFSET: 8n,
10806
+ ZIP64_CD_RECORDS_NUMBER_OFFSET: 24n,
10807
+ ZIP64_CD_START_OFFSET_OFFSET: 48n
10808
+ };
10809
+ parseEoCDRecord = async (fileProvider) => {
10810
+ const zipEoCDOffset = await searchFromTheEnd(fileProvider, eoCDSignature);
10811
+ let cdRecordsNumber = BigInt(await fileProvider.getUint16(zipEoCDOffset + offsets2.CD_RECORDS_NUMBER_OFFSET));
10812
+ let cdStartOffset = BigInt(await fileProvider.getUint32(zipEoCDOffset + offsets2.CD_START_OFFSET_OFFSET));
10813
+ if (cdStartOffset === BigInt(4294967295) || cdRecordsNumber === BigInt(4294967295)) {
10814
+ const zip64EoCDLocatorOffset = zipEoCDOffset - 20n;
10815
+ if (Buffer.from(await fileProvider.slice(zip64EoCDLocatorOffset, zip64EoCDLocatorOffset + 4n)).compare(zip64EoCDLocatorSignature) !== 0) {
10816
+ throw new Error("zip64 EoCD locator not found");
10817
+ }
10818
+ const zip64EoCDOffset = await fileProvider.getBigUint64(zip64EoCDLocatorOffset + offsets2.ZIP64_EOCD_START_OFFSET_OFFSET);
10819
+ if (Buffer.from(await fileProvider.slice(zip64EoCDOffset, zip64EoCDOffset + 4n)).compare(zip64EoCDSignature) !== 0) {
10820
+ throw new Error("zip64 EoCD not found");
10821
+ }
10822
+ cdRecordsNumber = await fileProvider.getBigUint64(zip64EoCDOffset + offsets2.ZIP64_CD_RECORDS_NUMBER_OFFSET);
10823
+ cdStartOffset = await fileProvider.getBigUint64(zip64EoCDOffset + offsets2.ZIP64_CD_START_OFFSET_OFFSET);
10824
+ }
10825
+ return {
10826
+ cdRecordsNumber,
10827
+ cdStartOffset
10828
+ };
10829
+ };
10830
+ }
10831
+ });
10832
+
10833
+ // src/lib/parsers/parse-zip/local-file-header.ts
10834
+ var offsets3, signature2, parseZipLocalFileHeader;
10835
+ var init_local_file_header = __esm({
10836
+ "src/lib/parsers/parse-zip/local-file-header.ts"() {
10837
+ offsets3 = {
10838
+ COMPRESSED_SIZE_OFFSET: 18n,
10839
+ UNCOMPRESSED_SIZE_OFFSET: 22n,
10840
+ FILE_NAME_LENGTH_OFFSET: 26n,
10841
+ EXTRA_FIELD_LENGTH_OFFSET: 28n,
10842
+ FILE_NAME_OFFSET: 30n
10843
+ };
10844
+ signature2 = Buffer.from([80, 75, 3, 4]);
10845
+ parseZipLocalFileHeader = async (headerOffset, buffer) => {
10846
+ if (Buffer.from(await buffer.slice(headerOffset, headerOffset + 4n)).compare(signature2) !== 0) {
10847
+ return null;
10848
+ }
10849
+ const fileNameLength = await buffer.getUint16(headerOffset + offsets3.FILE_NAME_LENGTH_OFFSET);
10850
+ const fileName = new TextDecoder().decode(await buffer.slice(headerOffset + offsets3.FILE_NAME_OFFSET, headerOffset + offsets3.FILE_NAME_OFFSET + BigInt(fileNameLength))).split("\\").join("/");
10851
+ const extraFieldLength = await buffer.getUint16(headerOffset + offsets3.EXTRA_FIELD_LENGTH_OFFSET);
10852
+ let fileDataOffset = headerOffset + offsets3.FILE_NAME_OFFSET + BigInt(fileNameLength + extraFieldLength);
10853
+ let compressedSize = BigInt(await buffer.getUint32(headerOffset + offsets3.COMPRESSED_SIZE_OFFSET));
10854
+ let uncompressedSize = BigInt(await buffer.getUint32(headerOffset + offsets3.UNCOMPRESSED_SIZE_OFFSET));
10855
+ const extraOffset = headerOffset + offsets3.FILE_NAME_OFFSET + BigInt(fileNameLength);
10856
+ let offsetInZip64Data = 4n;
10857
+ if (uncompressedSize === BigInt(4294967295)) {
10858
+ uncompressedSize = await buffer.getBigUint64(extraOffset + offsetInZip64Data);
10859
+ offsetInZip64Data += 8n;
10860
+ }
10861
+ if (compressedSize === BigInt(4294967295)) {
10862
+ compressedSize = await buffer.getBigUint64(extraOffset + offsetInZip64Data);
10863
+ offsetInZip64Data += 8n;
10864
+ }
10865
+ if (fileDataOffset === BigInt(4294967295)) {
10866
+ fileDataOffset = await buffer.getBigUint64(extraOffset + offsetInZip64Data);
10867
+ }
10868
+ return {
10869
+ fileNameLength,
10870
+ fileName,
10871
+ extraFieldLength,
10872
+ fileDataOffset,
10873
+ compressedSize
10874
+ };
10875
+ };
10876
+ }
10877
+ });
10878
+
10850
10879
  // ../compression/src/lib/compression.ts
10851
10880
  var Compression;
10852
10881
  var init_compression = __esm({
@@ -15135,12 +15164,23 @@
15135
15164
  });
15136
15165
 
15137
15166
  // src/lib/parsers/parse-slpk/slpk-archieve.ts
15138
- var import_md5, PATH_DESCRIPTIONS, SLPKArchive;
15167
+ var import_md5, compareHashes, PATH_DESCRIPTIONS, SLPKArchive;
15139
15168
  var init_slpk_archieve = __esm({
15140
15169
  "src/lib/parsers/parse-slpk/slpk-archieve.ts"() {
15141
15170
  import_md5 = __toModule(require_md5());
15142
15171
  init_local_file_header();
15143
15172
  init_src9();
15173
+ compareHashes = (hash1, hash2) => {
15174
+ const h1 = new BigUint64Array(hash1.buffer, hash1.byteOffset, 2);
15175
+ const h2 = new BigUint64Array(hash2.buffer, hash2.byteOffset, 2);
15176
+ const diff = h1[0] === h2[0] ? h1[1] - h2[1] : h1[0] - h2[0];
15177
+ if (diff < 0n) {
15178
+ return -1;
15179
+ } else if (diff === 0n) {
15180
+ return 0;
15181
+ }
15182
+ return 1;
15183
+ };
15144
15184
  PATH_DESCRIPTIONS = [
15145
15185
  {
15146
15186
  test: /^$/,
@@ -15151,7 +15191,7 @@
15151
15191
  extensions: [".json.gz"]
15152
15192
  },
15153
15193
  {
15154
- test: /^nodes\/\d+$/,
15194
+ test: /^nodes\/(\d+|root)$/,
15155
15195
  extensions: ["/3dNodeIndexDocument.json.gz"]
15156
15196
  },
15157
15197
  {
@@ -15177,21 +15217,24 @@
15177
15217
  ];
15178
15218
  SLPKArchive = class {
15179
15219
  constructor(slpkArchive, hashFile) {
15220
+ this.findBin = (hashToSearch) => {
15221
+ let lowerBorder = 0;
15222
+ let upperBorder = this.hashArray.length;
15223
+ while (upperBorder - lowerBorder > 1) {
15224
+ const middle = lowerBorder + Math.floor((upperBorder - lowerBorder) / 2);
15225
+ const value = compareHashes(this.hashArray[middle].hash, hashToSearch);
15226
+ if (value === 0) {
15227
+ return this.hashArray[middle];
15228
+ } else if (value < 0) {
15229
+ lowerBorder = middle;
15230
+ } else {
15231
+ upperBorder = middle;
15232
+ }
15233
+ }
15234
+ return void 0;
15235
+ };
15180
15236
  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;
15237
+ this.hashArray = hashFile;
15195
15238
  }
15196
15239
  async getFile(path, mode = "raw") {
15197
15240
  if (mode === "http") {
@@ -15222,7 +15265,10 @@
15222
15265
  throw new Error("No such file in the archieve");
15223
15266
  }
15224
15267
  async getDataByPath(path) {
15225
- const data = await this.getFileBytes(path);
15268
+ let data = await this.getFileBytes(path.toLocaleLowerCase());
15269
+ if (!data) {
15270
+ data = await this.getFileBytes(path);
15271
+ }
15226
15272
  if (!data) {
15227
15273
  return void 0;
15228
15274
  }
@@ -15235,11 +15281,11 @@
15235
15281
  }
15236
15282
  async getFileBytes(path) {
15237
15283
  const nameHash = Buffer.from((0, import_md5.default)(path), "hex");
15238
- const fileInfo = this.hashArray.find((val) => Buffer.compare(val.hash, nameHash) === 0);
15284
+ const fileInfo = this.findBin(nameHash);
15239
15285
  if (!fileInfo) {
15240
15286
  return void 0;
15241
15287
  }
15242
- const localFileHeader = await parseZipLocalFileHeader(fileInfo?.offset, this.slpkArchive);
15288
+ const localFileHeader = await parseZipLocalFileHeader(fileInfo.offset, this.slpkArchive);
15243
15289
  if (!localFileHeader) {
15244
15290
  return void 0;
15245
15291
  }
@@ -15251,30 +15297,61 @@
15251
15297
  });
15252
15298
 
15253
15299
  // src/lib/parsers/parse-slpk/parse-slpk.ts
15254
- var parseSLPK;
15300
+ var import_md52, parseSLPK, generateHashInfo, parseHashFile;
15255
15301
  var init_parse_slpk = __esm({
15256
15302
  "src/lib/parsers/parse-slpk/parse-slpk.ts"() {
15303
+ import_md52 = __toModule(require_md5());
15257
15304
  init_cd_file_header();
15305
+ init_end_of_central_directory();
15258
15306
  init_local_file_header();
15259
15307
  init_search_from_the_end();
15260
15308
  init_slpk_archieve();
15261
- parseSLPK = async (fileProvider) => {
15262
- const cdFileHeaderSignature = [80, 75, 1, 2];
15263
- const hashCDOffset = await searchFromTheEnd(fileProvider, cdFileHeaderSignature);
15309
+ parseSLPK = async (fileProvider, cb) => {
15310
+ const hashCDOffset = await searchFromTheEnd(fileProvider, signature);
15264
15311
  const cdFileHeader = await parseZipCDFileHeader(hashCDOffset, fileProvider);
15265
- if (cdFileHeader.fileName !== "@specialIndexFileHASH128@") {
15266
- throw new Error("No hash file in slpk");
15312
+ let hashData;
15313
+ if (cdFileHeader?.fileName !== "@specialIndexFileHASH128@") {
15314
+ cb?.("SLPK doesnt contain hash file");
15315
+ hashData = await generateHashInfo(fileProvider);
15316
+ cb?.("hash info has been composed according to central directory records");
15317
+ } else {
15318
+ cb?.("SLPK contains hash file");
15319
+ const localFileHeader = await parseZipLocalFileHeader(cdFileHeader.localHeaderOffset, fileProvider);
15320
+ if (!localFileHeader) {
15321
+ throw new Error("corrupted SLPK");
15322
+ }
15323
+ const fileDataOffset = localFileHeader.fileDataOffset;
15324
+ const hashFile = await fileProvider.slice(fileDataOffset, fileDataOffset + localFileHeader.compressedSize);
15325
+ hashData = parseHashFile(hashFile);
15267
15326
  }
15268
- const localFileHeader = await parseZipLocalFileHeader(cdFileHeader.localHeaderOffset, fileProvider);
15269
- if (!localFileHeader) {
15270
- throw new Error("No hash file in slpk");
15327
+ return new SLPKArchive(fileProvider, hashData);
15328
+ };
15329
+ generateHashInfo = async (fileProvider) => {
15330
+ const { cdStartOffset } = await parseEoCDRecord(fileProvider);
15331
+ let cdHeader = await parseZipCDFileHeader(cdStartOffset, fileProvider);
15332
+ const hashInfo = [];
15333
+ while (cdHeader) {
15334
+ hashInfo.push({
15335
+ hash: Buffer.from((0, import_md52.default)(cdHeader.fileName.split("\\").join("/").toLocaleLowerCase()), "hex"),
15336
+ offset: cdHeader.localHeaderOffset
15337
+ });
15338
+ cdHeader = await parseZipCDFileHeader(cdHeader.extraOffset + BigInt(cdHeader.extraFieldLength), fileProvider);
15271
15339
  }
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");
15340
+ hashInfo.sort((a2, b) => compareHashes(a2.hash, b.hash));
15341
+ return hashInfo;
15342
+ };
15343
+ parseHashFile = (hashFile) => {
15344
+ const hashFileBuffer = Buffer.from(hashFile);
15345
+ const hashArray = [];
15346
+ for (let i2 = 0; i2 < hashFileBuffer.buffer.byteLength; i2 = i2 + 24) {
15347
+ const offsetBuffer = new DataView(hashFileBuffer.buffer.slice(hashFileBuffer.byteOffset + i2 + 16, hashFileBuffer.byteOffset + i2 + 24));
15348
+ const offset = offsetBuffer.getBigUint64(offsetBuffer.byteOffset, true);
15349
+ hashArray.push({
15350
+ hash: Buffer.from(hashFileBuffer.subarray(hashFileBuffer.byteOffset + i2, hashFileBuffer.byteOffset + i2 + 16)),
15351
+ offset
15352
+ });
15276
15353
  }
15277
- return new SLPKArchive(fileProvider, hashFile);
15354
+ return hashArray;
15278
15355
  };
15279
15356
  }
15280
15357
  });
@@ -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.17" !== 'undefined' ? "4.0.0-alpha.17" : '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.17" !== 'undefined' ? "4.0.0-alpha.17" : '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.17" !== 'undefined' ? "4.0.0-alpha.17" : 'beta';
12
12
  var I3SBuildingSceneLayerLoader = {
13
13
  name: 'I3S Building Scene Layer',
14
14
  id: 'i3s-building-scene-layer',