@loaders.gl/i3s 4.0.0-alpha.14 → 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 (115) hide show
  1. package/dist/dist.min.js +329 -211
  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 +30 -2
  9. package/dist/es5/i3s-slpk-loader.js.map +1 -1
  10. package/dist/es5/index.js +7 -7
  11. package/dist/es5/index.js.map +1 -1
  12. package/dist/es5/lib/parsers/constants.js +14 -15
  13. package/dist/es5/lib/parsers/constants.js.map +1 -1
  14. package/dist/es5/lib/parsers/parse-slpk/parse-slpk.js +101 -76
  15. package/dist/es5/lib/parsers/parse-slpk/parse-slpk.js.map +1 -1
  16. package/dist/es5/lib/parsers/parse-slpk/slpk-archieve.js +54 -34
  17. package/dist/es5/lib/parsers/parse-slpk/slpk-archieve.js.map +1 -1
  18. package/dist/es5/lib/parsers/parse-zip/cd-file-header.js +76 -39
  19. package/dist/es5/lib/parsers/parse-zip/cd-file-header.js.map +1 -1
  20. package/dist/es5/lib/parsers/parse-zip/data-view-file-provider.js +129 -0
  21. package/dist/es5/lib/parsers/parse-zip/data-view-file-provider.js.map +1 -0
  22. package/dist/es5/lib/parsers/parse-zip/end-of-central-directory.js +100 -0
  23. package/dist/es5/lib/parsers/parse-zip/end-of-central-directory.js.map +1 -0
  24. package/dist/es5/lib/parsers/parse-zip/file-provider.js.map +1 -1
  25. package/dist/es5/lib/parsers/parse-zip/local-file-header.js +55 -14
  26. package/dist/es5/lib/parsers/parse-zip/local-file-header.js.map +1 -1
  27. package/dist/es5/lib/parsers/parse-zip/search-from-the-end.js +69 -0
  28. package/dist/es5/lib/parsers/parse-zip/search-from-the-end.js.map +1 -0
  29. package/dist/es5/types.js +1 -14
  30. package/dist/es5/types.js.map +1 -1
  31. package/dist/esm/arcgis-webscene-loader.js +1 -1
  32. package/dist/esm/i3s-attribute-loader.js +1 -1
  33. package/dist/esm/i3s-building-scene-layer-loader.js +1 -1
  34. package/dist/esm/i3s-content-loader.js +1 -1
  35. package/dist/esm/i3s-loader.js +1 -1
  36. package/dist/esm/i3s-node-page-loader.js +1 -1
  37. package/dist/esm/i3s-slpk-loader.js +8 -2
  38. package/dist/esm/i3s-slpk-loader.js.map +1 -1
  39. package/dist/esm/index.js +1 -1
  40. package/dist/esm/index.js.map +1 -1
  41. package/dist/esm/lib/parsers/constants.js +14 -15
  42. package/dist/esm/lib/parsers/constants.js.map +1 -1
  43. package/dist/esm/lib/parsers/parse-slpk/parse-slpk.js +50 -35
  44. package/dist/esm/lib/parsers/parse-slpk/parse-slpk.js.map +1 -1
  45. package/dist/esm/lib/parsers/parse-slpk/slpk-archieve.js +38 -22
  46. package/dist/esm/lib/parsers/parse-slpk/slpk-archieve.js.map +1 -1
  47. package/dist/esm/lib/parsers/parse-zip/cd-file-header.js +30 -22
  48. package/dist/esm/lib/parsers/parse-zip/cd-file-header.js.map +1 -1
  49. package/dist/esm/lib/parsers/parse-zip/data-view-file-provider.js +32 -0
  50. package/dist/esm/lib/parsers/parse-zip/data-view-file-provider.js.map +1 -0
  51. package/dist/esm/lib/parsers/parse-zip/end-of-central-directory.js +33 -0
  52. package/dist/esm/lib/parsers/parse-zip/end-of-central-directory.js.map +1 -0
  53. package/dist/esm/lib/parsers/parse-zip/file-provider.js.map +1 -1
  54. package/dist/esm/lib/parsers/parse-zip/local-file-header.js +25 -10
  55. package/dist/esm/lib/parsers/parse-zip/local-file-header.js.map +1 -1
  56. package/dist/esm/lib/parsers/parse-zip/search-from-the-end.js +16 -0
  57. package/dist/esm/lib/parsers/parse-zip/search-from-the-end.js.map +1 -0
  58. package/dist/esm/types.js +0 -12
  59. package/dist/esm/types.js.map +1 -1
  60. package/dist/i3s-content-worker-node.js +47 -47
  61. package/dist/i3s-content-worker-node.js.map +2 -2
  62. package/dist/i3s-content-worker.js +22 -34
  63. package/dist/i3s-slpk-loader.d.ts +3 -0
  64. package/dist/i3s-slpk-loader.d.ts.map +1 -1
  65. package/dist/i3s-slpk-loader.js +11 -1
  66. package/dist/index.d.ts +3 -2
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js +3 -1
  69. package/dist/lib/parsers/constants.d.ts.map +1 -1
  70. package/dist/lib/parsers/constants.js +14 -15
  71. package/dist/lib/parsers/parse-slpk/parse-slpk.d.ts +9 -3
  72. package/dist/lib/parsers/parse-slpk/parse-slpk.d.ts.map +1 -1
  73. package/dist/lib/parsers/parse-slpk/parse-slpk.js +65 -42
  74. package/dist/lib/parsers/parse-slpk/slpk-archieve.d.ts +22 -10
  75. package/dist/lib/parsers/parse-slpk/slpk-archieve.d.ts.map +1 -1
  76. package/dist/lib/parsers/parse-slpk/slpk-archieve.js +56 -28
  77. package/dist/lib/parsers/parse-zip/cd-file-header.d.ts +9 -5
  78. package/dist/lib/parsers/parse-zip/cd-file-header.d.ts.map +1 -1
  79. package/dist/lib/parsers/parse-zip/cd-file-header.js +32 -25
  80. package/dist/lib/parsers/parse-zip/{buffer-file-provider.d.ts → data-view-file-provider.d.ts} +15 -16
  81. package/dist/lib/parsers/parse-zip/data-view-file-provider.d.ts.map +1 -0
  82. package/dist/lib/parsers/parse-zip/{buffer-file-provider.js → data-view-file-provider.js} +28 -14
  83. package/dist/lib/parsers/parse-zip/end-of-central-directory.d.ts +18 -0
  84. package/dist/lib/parsers/parse-zip/end-of-central-directory.d.ts.map +1 -0
  85. package/dist/lib/parsers/parse-zip/end-of-central-directory.js +41 -0
  86. package/dist/lib/parsers/parse-zip/file-provider.d.ts +10 -5
  87. package/dist/lib/parsers/parse-zip/file-provider.d.ts.map +1 -1
  88. package/dist/lib/parsers/parse-zip/local-file-header.d.ts +5 -3
  89. package/dist/lib/parsers/parse-zip/local-file-header.d.ts.map +1 -1
  90. package/dist/lib/parsers/parse-zip/local-file-header.js +30 -11
  91. package/dist/lib/parsers/parse-zip/search-from-the-end.d.ts +11 -0
  92. package/dist/lib/parsers/parse-zip/search-from-the-end.d.ts.map +1 -0
  93. package/dist/lib/parsers/parse-zip/search-from-the-end.js +31 -0
  94. package/dist/types.d.ts +17 -24
  95. package/dist/types.d.ts.map +1 -1
  96. package/dist/types.js +1 -13
  97. package/package.json +9 -9
  98. package/src/i3s-slpk-loader.ts +19 -1
  99. package/src/index.ts +2 -2
  100. package/src/lib/parsers/constants.ts +14 -15
  101. package/src/lib/parsers/parse-slpk/parse-slpk.ts +83 -58
  102. package/src/lib/parsers/parse-slpk/slpk-archieve.ts +59 -44
  103. package/src/lib/parsers/parse-zip/cd-file-header.ts +52 -32
  104. package/src/lib/parsers/parse-zip/data-view-file-provider.ts +69 -0
  105. package/src/lib/parsers/parse-zip/end-of-central-directory.ts +78 -0
  106. package/src/lib/parsers/parse-zip/file-provider.ts +11 -5
  107. package/src/lib/parsers/parse-zip/local-file-header.ts +45 -19
  108. package/src/lib/parsers/parse-zip/search-from-the-end.ts +38 -0
  109. package/src/types.ts +25 -40
  110. package/dist/es5/lib/parsers/parse-zip/buffer-file-provider.js +0 -46
  111. package/dist/es5/lib/parsers/parse-zip/buffer-file-provider.js.map +0 -1
  112. package/dist/esm/lib/parsers/parse-zip/buffer-file-provider.js +0 -23
  113. package/dist/esm/lib/parsers/parse-zip/buffer-file-provider.js.map +0 -1
  114. package/dist/lib/parsers/parse-zip/buffer-file-provider.d.ts.map +0 -1
  115. package/src/lib/parsers/parse-zip/buffer-file-provider.ts +0 -55
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,107 +10479,6 @@
10491
10479
  }
10492
10480
  });
10493
10481
 
10494
- // src/lib/parsers/parse-zip/buffer-file-provider.ts
10495
- var DataViewFileProvider;
10496
- var init_buffer_file_provider = __esm({
10497
- "src/lib/parsers/parse-zip/buffer-file-provider.ts"() {
10498
- DataViewFileProvider = class {
10499
- constructor(file) {
10500
- this.file = file;
10501
- }
10502
- getUint8(offset) {
10503
- return Promise.resolve(this.file.getUint8(offset));
10504
- }
10505
- getUint16(offset) {
10506
- return Promise.resolve(this.file.getUint16(offset, true));
10507
- }
10508
- getUint32(offset) {
10509
- return Promise.resolve(this.file.getUint32(offset, true));
10510
- }
10511
- slice(startOffset, endOffset) {
10512
- return Promise.resolve(this.file.buffer.slice(startOffset, endOffset));
10513
- }
10514
- get length() {
10515
- return this.file.byteLength;
10516
- }
10517
- };
10518
- }
10519
- });
10520
-
10521
- // src/lib/parsers/parse-zip/cd-file-header.ts
10522
- var parseZipCDFileHeader;
10523
- var init_cd_file_header = __esm({
10524
- "src/lib/parsers/parse-zip/cd-file-header.ts"() {
10525
- parseZipCDFileHeader = async (headerOffset, buffer) => {
10526
- const offsets2 = {
10527
- CD_COMPRESSED_SIZE_OFFSET: 20,
10528
- CD_UNCOMPRESSED_SIZE_OFFSET: 24,
10529
- CD_FILE_NAME_LENGTH_OFFSET: 28,
10530
- CD_EXTRA_FIELD_LENGTH_OFFSET: 30,
10531
- CD_LOCAL_HEADER_OFFSET_OFFSET: 42,
10532
- CD_FILE_NAME_OFFSET: 46
10533
- };
10534
- const compressedSize = await buffer.getUint32(headerOffset + offsets2.CD_COMPRESSED_SIZE_OFFSET);
10535
- const uncompressedSize = await buffer.getUint32(headerOffset + offsets2.CD_UNCOMPRESSED_SIZE_OFFSET);
10536
- const fileNameLength = await buffer.getUint16(headerOffset + offsets2.CD_FILE_NAME_LENGTH_OFFSET);
10537
- const fileName = new TextDecoder().decode(await buffer.slice(headerOffset + offsets2.CD_FILE_NAME_OFFSET, headerOffset + offsets2.CD_FILE_NAME_OFFSET + fileNameLength));
10538
- const extraOffset = headerOffset + offsets2.CD_FILE_NAME_OFFSET + fileNameLength;
10539
- const oldFormatOffset = await buffer.getUint32(headerOffset + offsets2.CD_LOCAL_HEADER_OFFSET_OFFSET);
10540
- let fileDataOffset = oldFormatOffset;
10541
- if (fileDataOffset === 4294967295) {
10542
- let offsetInZip64Data = 4;
10543
- if (compressedSize === 4294967295) {
10544
- offsetInZip64Data += 8;
10545
- }
10546
- if (uncompressedSize === 4294967295) {
10547
- offsetInZip64Data += 8;
10548
- }
10549
- fileDataOffset = await buffer.getUint32(extraOffset + offsetInZip64Data);
10550
- }
10551
- const localHeaderOffset = fileDataOffset;
10552
- return {
10553
- compressedSize,
10554
- uncompressedSize,
10555
- fileNameLength,
10556
- fileName,
10557
- extraOffset,
10558
- localHeaderOffset
10559
- };
10560
- };
10561
- }
10562
- });
10563
-
10564
- // src/lib/parsers/parse-zip/local-file-header.ts
10565
- var offsets, signature, parseZipLocalFileHeader;
10566
- var init_local_file_header = __esm({
10567
- "src/lib/parsers/parse-zip/local-file-header.ts"() {
10568
- offsets = {
10569
- COMPRESSED_SIZE_OFFSET: 18,
10570
- FILE_NAME_LENGTH_OFFSET: 26,
10571
- EXTRA_FIELD_LENGTH_OFFSET: 28,
10572
- FILE_NAME_OFFSET: 30
10573
- };
10574
- signature = Buffer.from([80, 75, 3, 4]);
10575
- parseZipLocalFileHeader = async (headerOffset, buffer) => {
10576
- if (Buffer.from(await buffer.slice(headerOffset, headerOffset + 4)).compare(signature) !== 0) {
10577
- return Promise.resolve(void 0);
10578
- }
10579
- const fileNameLength = await buffer.getUint16(headerOffset + offsets.FILE_NAME_LENGTH_OFFSET);
10580
- const fileName = new TextDecoder().decode(await buffer.slice(headerOffset + offsets.FILE_NAME_OFFSET, headerOffset + offsets.FILE_NAME_OFFSET + fileNameLength));
10581
- const extraFieldLength = await buffer.getUint16(headerOffset + offsets.EXTRA_FIELD_LENGTH_OFFSET);
10582
- const fileDataOffset = headerOffset + offsets.FILE_NAME_OFFSET + fileNameLength + extraFieldLength;
10583
- const compressedSize = await buffer.getUint32(headerOffset + offsets.COMPRESSED_SIZE_OFFSET);
10584
- return {
10585
- fileNameLength,
10586
- fileName,
10587
- extraFieldLength,
10588
- fileDataOffset,
10589
- compressedSize
10590
- };
10591
- };
10592
- }
10593
- });
10594
-
10595
10482
  // ../../node_modules/crypt/crypt.js
10596
10483
  var require_crypt = __commonJS({
10597
10484
  "../../node_modules/crypt/crypt.js"(exports, module) {
@@ -10712,7 +10599,7 @@
10712
10599
  var require_md5 = __commonJS({
10713
10600
  "../../node_modules/md5/md5.js"(exports, module) {
10714
10601
  (function() {
10715
- 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) {
10716
10603
  if (message.constructor == String)
10717
10604
  if (options && options.encoding === "binary")
10718
10605
  message = bin.stringToBytes(message);
@@ -10728,7 +10615,7 @@
10728
10615
  }
10729
10616
  m[l2 >>> 5] |= 128 << l2 % 32;
10730
10617
  m[(l2 + 64 >>> 9 << 4) + 14] = l2;
10731
- 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;
10732
10619
  for (var i2 = 0; i2 < m.length; i2 += 16) {
10733
10620
  var aa = a2, bb = b, cc = c2, dd = d;
10734
10621
  a2 = FF(a2, b, c2, d, m[i2 + 0], 7, -680876936);
@@ -10802,34 +10689,197 @@
10802
10689
  }
10803
10690
  return crypt.endian([a2, b, c2, d]);
10804
10691
  };
10805
- md52._ff = function(a2, b, c2, d, x, s2, t2) {
10692
+ md53._ff = function(a2, b, c2, d, x, s2, t2) {
10806
10693
  var n2 = a2 + (b & c2 | ~b & d) + (x >>> 0) + t2;
10807
10694
  return (n2 << s2 | n2 >>> 32 - s2) + b;
10808
10695
  };
10809
- md52._gg = function(a2, b, c2, d, x, s2, t2) {
10696
+ md53._gg = function(a2, b, c2, d, x, s2, t2) {
10810
10697
  var n2 = a2 + (b & d | c2 & ~d) + (x >>> 0) + t2;
10811
10698
  return (n2 << s2 | n2 >>> 32 - s2) + b;
10812
10699
  };
10813
- md52._hh = function(a2, b, c2, d, x, s2, t2) {
10700
+ md53._hh = function(a2, b, c2, d, x, s2, t2) {
10814
10701
  var n2 = a2 + (b ^ c2 ^ d) + (x >>> 0) + t2;
10815
10702
  return (n2 << s2 | n2 >>> 32 - s2) + b;
10816
10703
  };
10817
- md52._ii = function(a2, b, c2, d, x, s2, t2) {
10704
+ md53._ii = function(a2, b, c2, d, x, s2, t2) {
10818
10705
  var n2 = a2 + (c2 ^ (b | ~d)) + (x >>> 0) + t2;
10819
10706
  return (n2 << s2 | n2 >>> 32 - s2) + b;
10820
10707
  };
10821
- md52._blocksize = 16;
10822
- md52._digestsize = 16;
10708
+ md53._blocksize = 16;
10709
+ md53._digestsize = 16;
10823
10710
  module.exports = function(message, options) {
10824
10711
  if (message === void 0 || message === null)
10825
10712
  throw new Error("Illegal argument " + message);
10826
- var digestbytes = crypt.wordsToBytes(md52(message, options));
10713
+ var digestbytes = crypt.wordsToBytes(md53(message, options));
10827
10714
  return options && options.asBytes ? digestbytes : options && options.asString ? bin.bytesToString(digestbytes) : crypt.bytesToHex(digestbytes);
10828
10715
  };
10829
10716
  })();
10830
10717
  }
10831
10718
  });
10832
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
+
10833
10883
  // ../compression/src/lib/compression.ts
10834
10884
  var Compression;
10835
10885
  var init_compression = __esm({
@@ -15118,13 +15168,23 @@
15118
15168
  });
15119
15169
 
15120
15170
  // src/lib/parsers/parse-slpk/slpk-archieve.ts
15121
- var import_md5, PATH_DESCRIPTIONS, SLPKArchive;
15171
+ var import_md5, compareHashes, PATH_DESCRIPTIONS, SLPKArchive;
15122
15172
  var init_slpk_archieve = __esm({
15123
15173
  "src/lib/parsers/parse-slpk/slpk-archieve.ts"() {
15124
15174
  import_md5 = __toModule(require_md5());
15125
15175
  init_local_file_header();
15126
- init_buffer_file_provider();
15127
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
+ };
15128
15188
  PATH_DESCRIPTIONS = [
15129
15189
  {
15130
15190
  test: /^$/,
@@ -15135,7 +15195,7 @@
15135
15195
  extensions: [".json.gz"]
15136
15196
  },
15137
15197
  {
15138
- test: /^nodes\/\d+$/,
15198
+ test: /^nodes\/(\d+|root)$/,
15139
15199
  extensions: ["/3dNodeIndexDocument.json.gz"]
15140
15200
  },
15141
15201
  {
@@ -15160,22 +15220,25 @@
15160
15220
  }
15161
15221
  ];
15162
15222
  SLPKArchive = class {
15163
- constructor(slpkArchiveBuffer, hashFile) {
15164
- this.slpkArchive = new DataView(slpkArchiveBuffer);
15165
- this.hashArray = this.parseHashFile(hashFile);
15166
- }
15167
- parseHashFile(hashFile) {
15168
- const hashFileBuffer = Buffer.from(hashFile);
15169
- const hashArray = [];
15170
- for (let i2 = 0; i2 < hashFileBuffer.buffer.byteLength; i2 = i2 + 24) {
15171
- const offsetBuffer = new DataView(hashFileBuffer.buffer.slice(hashFileBuffer.byteOffset + i2 + 16, hashFileBuffer.byteOffset + i2 + 24));
15172
- const offset = offsetBuffer.getUint32(offsetBuffer.byteOffset, true);
15173
- hashArray.push({
15174
- hash: Buffer.from(hashFileBuffer.subarray(hashFileBuffer.byteOffset + i2, hashFileBuffer.byteOffset + i2 + 16)),
15175
- offset
15176
- });
15177
- }
15178
- return hashArray;
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
+ };
15240
+ this.slpkArchive = slpkArchive;
15241
+ this.hashArray = hashFile;
15179
15242
  }
15180
15243
  async getFile(path, mode = "raw") {
15181
15244
  if (mode === "http") {
@@ -15206,7 +15269,10 @@
15206
15269
  throw new Error("No such file in the archieve");
15207
15270
  }
15208
15271
  async getDataByPath(path) {
15209
- const data = await this.getFileBytes(path);
15272
+ let data = await this.getFileBytes(path.toLocaleLowerCase());
15273
+ if (!data) {
15274
+ data = await this.getFileBytes(path);
15275
+ }
15210
15276
  if (!data) {
15211
15277
  return void 0;
15212
15278
  }
@@ -15219,15 +15285,15 @@
15219
15285
  }
15220
15286
  async getFileBytes(path) {
15221
15287
  const nameHash = Buffer.from((0, import_md5.default)(path), "hex");
15222
- const fileInfo = this.hashArray.find((val) => Buffer.compare(val.hash, nameHash) === 0);
15288
+ const fileInfo = this.findBin(nameHash);
15223
15289
  if (!fileInfo) {
15224
15290
  return void 0;
15225
15291
  }
15226
- const localFileHeader = await parseZipLocalFileHeader(this.slpkArchive.byteOffset + fileInfo?.offset, new DataViewFileProvider(this.slpkArchive));
15292
+ const localFileHeader = await parseZipLocalFileHeader(fileInfo.offset, this.slpkArchive);
15227
15293
  if (!localFileHeader) {
15228
15294
  return void 0;
15229
15295
  }
15230
- const compressedFile = this.slpkArchive.buffer.slice(localFileHeader.fileDataOffset, localFileHeader.fileDataOffset + localFileHeader.compressedSize);
15296
+ const compressedFile = this.slpkArchive.slice(localFileHeader.fileDataOffset, localFileHeader.fileDataOffset + localFileHeader.compressedSize);
15231
15297
  return compressedFile;
15232
15298
  }
15233
15299
  };
@@ -15235,60 +15301,110 @@
15235
15301
  });
15236
15302
 
15237
15303
  // src/lib/parsers/parse-slpk/parse-slpk.ts
15238
- async function parseSLPK(data, options = {}) {
15239
- const archive = new DataView(data);
15240
- const cdFileHeaderSignature = [80, 75, 1, 2];
15241
- const searchWindow = [
15242
- getByteAt(archive.byteLength - 1, archive),
15243
- getByteAt(archive.byteLength - 2, archive),
15244
- getByteAt(archive.byteLength - 3, archive),
15245
- void 0
15246
- ];
15247
- let hashCDOffset = 0;
15248
- for (let i2 = archive.byteLength - 4; i2 > -1; i2--) {
15249
- searchWindow[3] = searchWindow[2];
15250
- searchWindow[2] = searchWindow[1];
15251
- searchWindow[1] = searchWindow[0];
15252
- searchWindow[0] = getByteAt(i2, archive);
15253
- if (searchWindow.every((val, index) => val === cdFileHeaderSignature[index])) {
15254
- hashCDOffset = i2;
15255
- break;
15256
- }
15257
- }
15258
- const fileProvider = new DataViewFileProvider(archive);
15259
- const cdFileHeader = await parseZipCDFileHeader(hashCDOffset, fileProvider);
15260
- if (cdFileHeader.fileName !== "@specialIndexFileHASH128@") {
15261
- throw new Error("No hash file in slpk");
15262
- }
15263
- const localFileHeader = await parseZipLocalFileHeader(cdFileHeader.localHeaderOffset, fileProvider);
15264
- if (!localFileHeader) {
15265
- throw new Error("No hash file in slpk");
15266
- }
15267
- const fileDataOffset = localFileHeader.fileDataOffset;
15268
- const hashFile = archive.buffer.slice(fileDataOffset, fileDataOffset + localFileHeader.compressedSize);
15269
- if (!hashFile) {
15270
- throw new Error("No hash file in slpk");
15271
- }
15272
- return await new SLPKArchive(data, hashFile).getFile(options.slpk?.path ?? "", options.slpk?.pathMode);
15273
- }
15274
- var getByteAt;
15304
+ var import_md52, parseSLPK, generateHashInfo, parseHashFile;
15275
15305
  var init_parse_slpk = __esm({
15276
15306
  "src/lib/parsers/parse-slpk/parse-slpk.ts"() {
15277
- init_buffer_file_provider();
15307
+ import_md52 = __toModule(require_md5());
15278
15308
  init_cd_file_header();
15309
+ init_end_of_central_directory();
15279
15310
  init_local_file_header();
15311
+ init_search_from_the_end();
15280
15312
  init_slpk_archieve();
15281
- getByteAt = (offset, buffer) => {
15282
- return buffer.getUint8(buffer.byteOffset + offset);
15313
+ parseSLPK = async (fileProvider, cb) => {
15314
+ const hashCDOffset = await searchFromTheEnd(fileProvider, signature);
15315
+ const cdFileHeader = await parseZipCDFileHeader(hashCDOffset, fileProvider);
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);
15330
+ }
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);
15343
+ }
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
+ });
15357
+ }
15358
+ return hashArray;
15359
+ };
15360
+ }
15361
+ });
15362
+
15363
+ // src/lib/parsers/parse-zip/data-view-file-provider.ts
15364
+ var toNumber, DataViewFileProvider;
15365
+ var init_data_view_file_provider = __esm({
15366
+ "src/lib/parsers/parse-zip/data-view-file-provider.ts"() {
15367
+ toNumber = (bigint) => {
15368
+ if (bigint > Number.MAX_SAFE_INTEGER) {
15369
+ throw new Error("Offset is out of bounds");
15370
+ }
15371
+ return Number(bigint);
15372
+ };
15373
+ DataViewFileProvider = class {
15374
+ constructor(file) {
15375
+ this.file = file;
15376
+ }
15377
+ async getUint8(offset) {
15378
+ return this.file.getUint8(toNumber(offset));
15379
+ }
15380
+ async getUint16(offset) {
15381
+ return this.file.getUint16(toNumber(offset), true);
15382
+ }
15383
+ async getUint32(offset) {
15384
+ return this.file.getUint32(toNumber(offset), true);
15385
+ }
15386
+ async getBigUint64(offset) {
15387
+ return this.file.getBigUint64(toNumber(offset), true);
15388
+ }
15389
+ async slice(startOffset, endOffset) {
15390
+ return this.file.buffer.slice(toNumber(startOffset), toNumber(endOffset));
15391
+ }
15392
+ get length() {
15393
+ return BigInt(this.file.byteLength);
15394
+ }
15283
15395
  };
15284
15396
  }
15285
15397
  });
15286
15398
 
15287
15399
  // src/i3s-slpk-loader.ts
15400
+ async function parseSLPK2(data, options = {}) {
15401
+ return (await parseSLPK(new DataViewFileProvider(new DataView(data)))).getFile(options.slpk?.path ?? "", options.slpk?.pathMode);
15402
+ }
15288
15403
  var VERSION13, SLPKLoader;
15289
15404
  var init_i3s_slpk_loader = __esm({
15290
15405
  "src/i3s-slpk-loader.ts"() {
15291
15406
  init_parse_slpk();
15407
+ init_data_view_file_provider();
15292
15408
  VERSION13 = typeof __VERSION__ !== "undefined" ? __VERSION__ : "latest";
15293
15409
  SLPKLoader = {
15294
15410
  name: "I3S SLPK (Scene Layer Package)",
@@ -15296,7 +15412,7 @@
15296
15412
  module: "i3s",
15297
15413
  version: VERSION13,
15298
15414
  mimeTypes: ["application/octet-stream"],
15299
- parse: parseSLPK,
15415
+ parse: parseSLPK2,
15300
15416
  extensions: ["slpk"],
15301
15417
  options: {}
15302
15418
  };
@@ -15467,6 +15583,7 @@
15467
15583
  I3SNodePageLoader: () => I3SNodePageLoader,
15468
15584
  SLPKLoader: () => SLPKLoader,
15469
15585
  loadFeatureAttributes: () => loadFeatureAttributes,
15586
+ parseSLPK: () => parseSLPK,
15470
15587
  parseZipLocalFileHeader: () => parseZipLocalFileHeader
15471
15588
  });
15472
15589
  var init_src10 = __esm({
@@ -15480,6 +15597,7 @@
15480
15597
  init_i3s_node_page_loader();
15481
15598
  init_arcgis_webscene_loader();
15482
15599
  init_local_file_header();
15600
+ init_parse_slpk();
15483
15601
  }
15484
15602
  });
15485
15603