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

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 (91) hide show
  1. package/dist/dist.min.js +139 -102
  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/parse-slpk/parse-slpk.js +30 -69
  13. package/dist/es5/lib/parsers/parse-slpk/parse-slpk.js.map +1 -1
  14. package/dist/es5/lib/parsers/parse-slpk/search-from-the-end.js +69 -0
  15. package/dist/es5/lib/parsers/parse-slpk/search-from-the-end.js.map +1 -0
  16. package/dist/es5/lib/parsers/parse-slpk/slpk-archieve.js +5 -6
  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 +53 -35
  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/file-provider.js.map +1 -1
  23. package/dist/es5/lib/parsers/parse-zip/local-file-header.js +54 -13
  24. package/dist/es5/lib/parsers/parse-zip/local-file-header.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 +8 -2
  32. package/dist/esm/i3s-slpk-loader.js.map +1 -1
  33. package/dist/esm/index.js +1 -1
  34. package/dist/esm/index.js.map +1 -1
  35. package/dist/esm/lib/parsers/parse-slpk/parse-slpk.js +7 -25
  36. package/dist/esm/lib/parsers/parse-slpk/parse-slpk.js.map +1 -1
  37. package/dist/esm/lib/parsers/parse-slpk/search-from-the-end.js +16 -0
  38. package/dist/esm/lib/parsers/parse-slpk/search-from-the-end.js.map +1 -0
  39. package/dist/esm/lib/parsers/parse-slpk/slpk-archieve.js +5 -6
  40. package/dist/esm/lib/parsers/parse-slpk/slpk-archieve.js.map +1 -1
  41. package/dist/esm/lib/parsers/parse-zip/cd-file-header.js +22 -20
  42. package/dist/esm/lib/parsers/parse-zip/cd-file-header.js.map +1 -1
  43. package/dist/esm/lib/parsers/parse-zip/data-view-file-provider.js +32 -0
  44. package/dist/esm/lib/parsers/parse-zip/data-view-file-provider.js.map +1 -0
  45. package/dist/esm/lib/parsers/parse-zip/file-provider.js.map +1 -1
  46. package/dist/esm/lib/parsers/parse-zip/local-file-header.js +24 -9
  47. package/dist/esm/lib/parsers/parse-zip/local-file-header.js.map +1 -1
  48. package/dist/i3s-content-worker-node.js +2 -2
  49. package/dist/i3s-content-worker.js +8 -8
  50. package/dist/i3s-slpk-loader.d.ts +3 -0
  51. package/dist/i3s-slpk-loader.d.ts.map +1 -1
  52. package/dist/i3s-slpk-loader.js +11 -1
  53. package/dist/index.d.ts +2 -1
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js +3 -1
  56. package/dist/lib/parsers/parse-slpk/parse-slpk.d.ts +8 -3
  57. package/dist/lib/parsers/parse-slpk/parse-slpk.d.ts.map +1 -1
  58. package/dist/lib/parsers/parse-slpk/parse-slpk.js +10 -33
  59. package/dist/lib/parsers/parse-slpk/search-from-the-end.d.ts +11 -0
  60. package/dist/lib/parsers/parse-slpk/search-from-the-end.d.ts.map +1 -0
  61. package/dist/lib/parsers/parse-slpk/search-from-the-end.js +31 -0
  62. package/dist/lib/parsers/parse-slpk/slpk-archieve.d.ts +4 -3
  63. package/dist/lib/parsers/parse-slpk/slpk-archieve.d.ts.map +1 -1
  64. package/dist/lib/parsers/parse-slpk/slpk-archieve.js +5 -6
  65. package/dist/lib/parsers/parse-zip/cd-file-header.d.ts +5 -5
  66. package/dist/lib/parsers/parse-zip/cd-file-header.d.ts.map +1 -1
  67. package/dist/lib/parsers/parse-zip/cd-file-header.js +23 -22
  68. package/dist/lib/parsers/parse-zip/{buffer-file-provider.d.ts → data-view-file-provider.d.ts} +15 -16
  69. package/dist/lib/parsers/parse-zip/data-view-file-provider.d.ts.map +1 -0
  70. package/dist/lib/parsers/parse-zip/{buffer-file-provider.js → data-view-file-provider.js} +28 -14
  71. package/dist/lib/parsers/parse-zip/file-provider.d.ts +10 -5
  72. package/dist/lib/parsers/parse-zip/file-provider.d.ts.map +1 -1
  73. package/dist/lib/parsers/parse-zip/local-file-header.d.ts +5 -3
  74. package/dist/lib/parsers/parse-zip/local-file-header.d.ts.map +1 -1
  75. package/dist/lib/parsers/parse-zip/local-file-header.js +29 -10
  76. package/package.json +9 -9
  77. package/src/i3s-slpk-loader.ts +19 -1
  78. package/src/index.ts +2 -1
  79. package/src/lib/parsers/parse-slpk/parse-slpk.ts +11 -40
  80. package/src/lib/parsers/parse-slpk/search-from-the-end.ts +38 -0
  81. package/src/lib/parsers/parse-slpk/slpk-archieve.ts +9 -12
  82. package/src/lib/parsers/parse-zip/cd-file-header.ts +31 -29
  83. package/src/lib/parsers/parse-zip/data-view-file-provider.ts +69 -0
  84. package/src/lib/parsers/parse-zip/file-provider.ts +11 -5
  85. package/src/lib/parsers/parse-zip/local-file-header.ts +43 -17
  86. package/dist/es5/lib/parsers/parse-zip/buffer-file-provider.js +0 -46
  87. package/dist/es5/lib/parsers/parse-zip/buffer-file-provider.js.map +0 -1
  88. package/dist/esm/lib/parsers/parse-zip/buffer-file-provider.js +0 -23
  89. package/dist/esm/lib/parsers/parse-zip/buffer-file-provider.js.map +0 -1
  90. package/dist/lib/parsers/parse-zip/buffer-file-provider.d.ts.map +0 -1
  91. package/src/lib/parsers/parse-zip/buffer-file-provider.ts +0 -55
@@ -4,104 +4,65 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.parseSLPK = parseSLPK;
7
+ exports.parseSLPK = void 0;
8
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
9
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
- var _bufferFileProvider = require("../parse-zip/buffer-file-provider");
11
10
  var _cdFileHeader = require("../parse-zip/cd-file-header");
12
11
  var _localFileHeader = require("../parse-zip/local-file-header");
12
+ var _searchFromTheEnd = require("./search-from-the-end");
13
13
  var _slpkArchieve = require("./slpk-archieve");
14
- var getByteAt = function getByteAt(offset, buffer) {
15
- return buffer.getUint8(buffer.byteOffset + offset);
16
- };
17
- function parseSLPK(_x) {
18
- return _parseSLPK.apply(this, arguments);
19
- }
20
- function _parseSLPK() {
21
- _parseSLPK = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(data) {
22
- var _options$slpk$path, _options$slpk, _options$slpk2;
23
- var options,
24
- archive,
25
- cdFileHeaderSignature,
26
- searchWindow,
27
- hashCDOffset,
28
- i,
29
- fileProvider,
30
- cdFileHeader,
31
- localFileHeader,
32
- fileDataOffset,
33
- hashFile,
34
- _args = arguments;
14
+ var parseSLPK = function () {
15
+ var _ref = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(fileProvider) {
16
+ var cdFileHeaderSignature, hashCDOffset, cdFileHeader, localFileHeader, fileDataOffset, hashFile;
35
17
  return _regenerator.default.wrap(function _callee$(_context) {
36
18
  while (1) switch (_context.prev = _context.next) {
37
19
  case 0:
38
- options = _args.length > 1 && _args[1] !== undefined ? _args[1] : {};
39
- archive = new DataView(data);
40
- cdFileHeaderSignature = [80, 75, 1, 2];
41
- searchWindow = [getByteAt(archive.byteLength - 1, archive), getByteAt(archive.byteLength - 2, archive), getByteAt(archive.byteLength - 3, archive), undefined];
42
- hashCDOffset = 0;
43
- i = archive.byteLength - 4;
44
- case 6:
45
- if (!(i > -1)) {
46
- _context.next = 17;
47
- break;
48
- }
49
- searchWindow[3] = searchWindow[2];
50
- searchWindow[2] = searchWindow[1];
51
- searchWindow[1] = searchWindow[0];
52
- searchWindow[0] = getByteAt(i, archive);
53
- if (!searchWindow.every(function (val, index) {
54
- return val === cdFileHeaderSignature[index];
55
- })) {
56
- _context.next = 14;
57
- break;
58
- }
59
- hashCDOffset = i;
60
- return _context.abrupt("break", 17);
61
- case 14:
62
- i--;
20
+ cdFileHeaderSignature = [0x50, 0x4b, 0x01, 0x02];
21
+ _context.next = 3;
22
+ return (0, _searchFromTheEnd.searchFromTheEnd)(fileProvider, cdFileHeaderSignature);
23
+ case 3:
24
+ hashCDOffset = _context.sent;
63
25
  _context.next = 6;
64
- break;
65
- case 17:
66
- fileProvider = new _bufferFileProvider.DataViewFileProvider(archive);
67
- _context.next = 20;
68
26
  return (0, _cdFileHeader.parseZipCDFileHeader)(hashCDOffset, fileProvider);
69
- case 20:
27
+ case 6:
70
28
  cdFileHeader = _context.sent;
71
29
  if (!(cdFileHeader.fileName !== '@specialIndexFileHASH128@')) {
72
- _context.next = 23;
30
+ _context.next = 9;
73
31
  break;
74
32
  }
75
33
  throw new Error('No hash file in slpk');
76
- case 23:
77
- _context.next = 25;
34
+ case 9:
35
+ _context.next = 11;
78
36
  return (0, _localFileHeader.parseZipLocalFileHeader)(cdFileHeader.localHeaderOffset, fileProvider);
79
- case 25:
37
+ case 11:
80
38
  localFileHeader = _context.sent;
81
39
  if (localFileHeader) {
82
- _context.next = 28;
40
+ _context.next = 14;
83
41
  break;
84
42
  }
85
43
  throw new Error('No hash file in slpk');
86
- case 28:
44
+ case 14:
87
45
  fileDataOffset = localFileHeader.fileDataOffset;
88
- hashFile = archive.buffer.slice(fileDataOffset, fileDataOffset + localFileHeader.compressedSize);
46
+ _context.next = 17;
47
+ return fileProvider.slice(fileDataOffset, fileDataOffset + localFileHeader.compressedSize);
48
+ case 17:
49
+ hashFile = _context.sent;
89
50
  if (hashFile) {
90
- _context.next = 32;
51
+ _context.next = 20;
91
52
  break;
92
53
  }
93
54
  throw new Error('No hash file in slpk');
94
- case 32:
95
- _context.next = 34;
96
- return new _slpkArchieve.SLPKArchive(data, hashFile).getFile((_options$slpk$path = (_options$slpk = options.slpk) === null || _options$slpk === void 0 ? void 0 : _options$slpk.path) !== null && _options$slpk$path !== void 0 ? _options$slpk$path : '', (_options$slpk2 = options.slpk) === null || _options$slpk2 === void 0 ? void 0 : _options$slpk2.pathMode);
97
- case 34:
98
- return _context.abrupt("return", _context.sent);
99
- case 35:
55
+ case 20:
56
+ return _context.abrupt("return", new _slpkArchieve.SLPKArchive(fileProvider, hashFile));
57
+ case 21:
100
58
  case "end":
101
59
  return _context.stop();
102
60
  }
103
61
  }, _callee);
104
62
  }));
105
- return _parseSLPK.apply(this, arguments);
106
- }
63
+ return function parseSLPK(_x) {
64
+ return _ref.apply(this, arguments);
65
+ };
66
+ }();
67
+ exports.parseSLPK = parseSLPK;
107
68
  //# sourceMappingURL=parse-slpk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parse-slpk.js","names":["_bufferFileProvider","require","_cdFileHeader","_localFileHeader","_slpkArchieve","getByteAt","offset","buffer","getUint8","byteOffset","parseSLPK","_x","_parseSLPK","apply","arguments","_asyncToGenerator2","default","_regenerator","mark","_callee","data","_options$slpk$path","_options$slpk","_options$slpk2","options","archive","cdFileHeaderSignature","searchWindow","hashCDOffset","i","fileProvider","cdFileHeader","localFileHeader","fileDataOffset","hashFile","_args","wrap","_callee$","_context","prev","next","length","undefined","DataView","byteLength","every","val","index","abrupt","DataViewFileProvider","parseZipCDFileHeader","sent","fileName","Error","parseZipLocalFileHeader","localHeaderOffset","slice","compressedSize","SLPKArchive","getFile","slpk","path","pathMode","stop"],"sources":["../../../../../src/lib/parsers/parse-slpk/parse-slpk.ts"],"sourcesContent":["import type {SLPKLoaderOptions} from '../../../i3s-slpk-loader';\nimport {DataViewFileProvider} from '../parse-zip/buffer-file-provider';\nimport {parseZipCDFileHeader} from '../parse-zip/cd-file-header';\nimport {parseZipLocalFileHeader} from '../parse-zip/local-file-header';\nimport {SLPKArchive} from './slpk-archieve';\n\n/**\n * Returns one byte from the provided buffer at the provided position\n * @param offset - position where to read\n * @param buffer - buffer to read\n * @returns one byte from the provided buffer at the provided position\n */\nconst getByteAt = (offset: number, buffer: DataView): number => {\n return buffer.getUint8(buffer.byteOffset + offset);\n};\n\nexport async function parseSLPK(data: ArrayBuffer, options: SLPKLoaderOptions = {}) {\n const archive = new DataView(data);\n const cdFileHeaderSignature = [80, 75, 1, 2];\n\n const searchWindow = [\n getByteAt(archive.byteLength - 1, archive),\n getByteAt(archive.byteLength - 2, archive),\n getByteAt(archive.byteLength - 3, archive),\n undefined\n ];\n\n let hashCDOffset = 0;\n\n // looking for the last record in the central directory\n for (let i = archive.byteLength - 4; i > -1; i--) {\n searchWindow[3] = searchWindow[2];\n searchWindow[2] = searchWindow[1];\n searchWindow[1] = searchWindow[0];\n searchWindow[0] = getByteAt(i, archive);\n if (searchWindow.every((val, index) => val === cdFileHeaderSignature[index])) {\n hashCDOffset = i;\n break;\n }\n }\n\n const fileProvider = new DataViewFileProvider(archive);\n\n const cdFileHeader = await parseZipCDFileHeader(hashCDOffset, fileProvider);\n\n if (cdFileHeader.fileName !== '@specialIndexFileHASH128@') {\n throw new Error('No hash file in slpk');\n }\n\n const localFileHeader = await parseZipLocalFileHeader(\n cdFileHeader.localHeaderOffset,\n fileProvider\n );\n if (!localFileHeader) {\n throw new Error('No hash file in slpk');\n }\n\n const fileDataOffset = localFileHeader.fileDataOffset;\n const hashFile = archive.buffer.slice(\n fileDataOffset,\n fileDataOffset + localFileHeader.compressedSize\n );\n\n if (!hashFile) {\n throw new Error('No hash file in slpk');\n }\n\n return await new SLPKArchive(data, hashFile).getFile(\n options.slpk?.path ?? '',\n options.slpk?.pathMode\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"parse-slpk.js","names":["_cdFileHeader","require","_localFileHeader","_searchFromTheEnd","_slpkArchieve","parseSLPK","_ref","_asyncToGenerator2","default","_regenerator","mark","_callee","fileProvider","cdFileHeaderSignature","hashCDOffset","cdFileHeader","localFileHeader","fileDataOffset","hashFile","wrap","_callee$","_context","prev","next","searchFromTheEnd","sent","parseZipCDFileHeader","fileName","Error","parseZipLocalFileHeader","localHeaderOffset","slice","compressedSize","abrupt","SLPKArchive","stop","_x","apply","arguments","exports"],"sources":["../../../../../src/lib/parsers/parse-slpk/parse-slpk.ts"],"sourcesContent":["import {parseZipCDFileHeader} from '../parse-zip/cd-file-header';\nimport {FileProvider} from '../parse-zip/file-provider';\nimport {parseZipLocalFileHeader} from '../parse-zip/local-file-header';\nimport {ZipSignature, searchFromTheEnd} from './search-from-the-end';\nimport {SLPKArchive} from './slpk-archieve';\n\n/**\n * Creates slpk file handler from raw file\n * @param fileProvider raw file data\n * @returns slpk file handler\n */\n\nexport const parseSLPK = async (fileProvider: FileProvider): Promise<SLPKArchive> => {\n const cdFileHeaderSignature: ZipSignature = [0x50, 0x4b, 0x01, 0x02];\n\n const hashCDOffset = await searchFromTheEnd(fileProvider, cdFileHeaderSignature);\n\n const cdFileHeader = await parseZipCDFileHeader(hashCDOffset, fileProvider);\n\n if (cdFileHeader.fileName !== '@specialIndexFileHASH128@') {\n throw new Error('No hash file in slpk');\n }\n\n const localFileHeader = await parseZipLocalFileHeader(\n cdFileHeader.localHeaderOffset,\n fileProvider\n );\n if (!localFileHeader) {\n throw new Error('No hash file in slpk');\n }\n\n const fileDataOffset = localFileHeader.fileDataOffset;\n const hashFile = await fileProvider.slice(\n fileDataOffset,\n fileDataOffset + localFileHeader.compressedSize\n );\n\n if (!hashFile) {\n throw new Error('No hash file in slpk');\n }\n\n return new SLPKArchive(fileProvider, hashFile);\n};\n"],"mappings":";;;;;;;;;AAAA,IAAAA,aAAA,GAAAC,OAAA;AAEA,IAAAC,gBAAA,GAAAD,OAAA;AACA,IAAAE,iBAAA,GAAAF,OAAA;AACA,IAAAG,aAAA,GAAAH,OAAA;AAQO,IAAMI,SAAS;EAAA,IAAAC,IAAA,OAAAC,kBAAA,CAAAC,OAAA,EAAAC,YAAA,CAAAD,OAAA,CAAAE,IAAA,CAAG,SAAAC,QAAOC,YAA0B;IAAA,IAAAC,qBAAA,EAAAC,YAAA,EAAAC,YAAA,EAAAC,eAAA,EAAAC,cAAA,EAAAC,QAAA;IAAA,OAAAT,YAAA,CAAAD,OAAA,CAAAW,IAAA,UAAAC,SAAAC,QAAA;MAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;QAAA;UAClDV,qBAAmC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;UAAAQ,QAAA,CAAAE,IAAA;UAAA,OAEzC,IAAAC,kCAAgB,EAACZ,YAAY,EAAEC,qBAAqB,CAAC;QAAA;UAA1EC,YAAY,GAAAO,QAAA,CAAAI,IAAA;UAAAJ,QAAA,CAAAE,IAAA;UAAA,OAES,IAAAG,kCAAoB,EAACZ,YAAY,EAAEF,YAAY,CAAC;QAAA;UAArEG,YAAY,GAAAM,QAAA,CAAAI,IAAA;UAAA,MAEdV,YAAY,CAACY,QAAQ,KAAK,2BAA2B;YAAAN,QAAA,CAAAE,IAAA;YAAA;UAAA;UAAA,MACjD,IAAIK,KAAK,CAAC,sBAAsB,CAAC;QAAA;UAAAP,QAAA,CAAAE,IAAA;UAAA,OAGX,IAAAM,wCAAuB,EACnDd,YAAY,CAACe,iBAAiB,EAC9BlB,YACF,CAAC;QAAA;UAHKI,eAAe,GAAAK,QAAA,CAAAI,IAAA;UAAA,IAIhBT,eAAe;YAAAK,QAAA,CAAAE,IAAA;YAAA;UAAA;UAAA,MACZ,IAAIK,KAAK,CAAC,sBAAsB,CAAC;QAAA;UAGnCX,cAAc,GAAGD,eAAe,CAACC,cAAc;UAAAI,QAAA,CAAAE,IAAA;UAAA,OAC9BX,YAAY,CAACmB,KAAK,CACvCd,cAAc,EACdA,cAAc,GAAGD,eAAe,CAACgB,cACnC,CAAC;QAAA;UAHKd,QAAQ,GAAAG,QAAA,CAAAI,IAAA;UAAA,IAKTP,QAAQ;YAAAG,QAAA,CAAAE,IAAA;YAAA;UAAA;UAAA,MACL,IAAIK,KAAK,CAAC,sBAAsB,CAAC;QAAA;UAAA,OAAAP,QAAA,CAAAY,MAAA,WAGlC,IAAIC,yBAAW,CAACtB,YAAY,EAAEM,QAAQ,CAAC;QAAA;QAAA;UAAA,OAAAG,QAAA,CAAAc,IAAA;MAAA;IAAA,GAAAxB,OAAA;EAAA,CAC/C;EAAA,gBA9BYN,SAASA,CAAA+B,EAAA;IAAA,OAAA9B,IAAA,CAAA+B,KAAA,OAAAC,SAAA;EAAA;AAAA,GA8BrB;AAACC,OAAA,CAAAlC,SAAA,GAAAA,SAAA"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.searchFromTheEnd = void 0;
8
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
+ var searchFromTheEnd = function () {
11
+ var _ref = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee(file, target) {
12
+ var searchWindow, targetOffset, i;
13
+ return _regenerator.default.wrap(function _callee$(_context) {
14
+ while (1) switch (_context.prev = _context.next) {
15
+ case 0:
16
+ _context.next = 2;
17
+ return file.getUint8(file.length - 1n);
18
+ case 2:
19
+ _context.t0 = _context.sent;
20
+ _context.next = 5;
21
+ return file.getUint8(file.length - 2n);
22
+ case 5:
23
+ _context.t1 = _context.sent;
24
+ _context.next = 8;
25
+ return file.getUint8(file.length - 3n);
26
+ case 8:
27
+ _context.t2 = _context.sent;
28
+ _context.t3 = undefined;
29
+ searchWindow = [_context.t0, _context.t1, _context.t2, _context.t3];
30
+ targetOffset = 0n;
31
+ i = file.length - 4n;
32
+ case 13:
33
+ if (!(i > -1)) {
34
+ _context.next = 26;
35
+ break;
36
+ }
37
+ searchWindow[3] = searchWindow[2];
38
+ searchWindow[2] = searchWindow[1];
39
+ searchWindow[1] = searchWindow[0];
40
+ _context.next = 19;
41
+ return file.getUint8(i);
42
+ case 19:
43
+ searchWindow[0] = _context.sent;
44
+ if (!searchWindow.every(function (val, index) {
45
+ return val === target[index];
46
+ })) {
47
+ _context.next = 23;
48
+ break;
49
+ }
50
+ targetOffset = i;
51
+ return _context.abrupt("break", 26);
52
+ case 23:
53
+ i--;
54
+ _context.next = 13;
55
+ break;
56
+ case 26:
57
+ return _context.abrupt("return", targetOffset);
58
+ case 27:
59
+ case "end":
60
+ return _context.stop();
61
+ }
62
+ }, _callee);
63
+ }));
64
+ return function searchFromTheEnd(_x, _x2) {
65
+ return _ref.apply(this, arguments);
66
+ };
67
+ }();
68
+ exports.searchFromTheEnd = searchFromTheEnd;
69
+ //# sourceMappingURL=search-from-the-end.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-from-the-end.js","names":["searchFromTheEnd","_ref","_asyncToGenerator2","default","_regenerator","mark","_callee","file","target","searchWindow","targetOffset","i","wrap","_callee$","_context","prev","next","getUint8","length","t0","sent","t1","t2","t3","undefined","every","val","index","abrupt","stop","_x","_x2","apply","arguments","exports"],"sources":["../../../../../src/lib/parsers/parse-slpk/search-from-the-end.ts"],"sourcesContent":["import {FileProvider} from 'modules/i3s/src/lib/parsers/parse-zip/file-provider';\n\n/** Description of zip signature type */\nexport type ZipSignature = [number, number, number, number];\n\n/**\n * looking for the last occurrence of the provided\n * @param file\n * @param target\n * @returns\n */\nexport const searchFromTheEnd = async (\n file: FileProvider,\n target: ZipSignature\n): Promise<bigint> => {\n const searchWindow = [\n await file.getUint8(file.length - 1n),\n await file.getUint8(file.length - 2n),\n await file.getUint8(file.length - 3n),\n undefined\n ];\n\n let targetOffset = 0n;\n\n // looking for the last record in the central directory\n for (let i = file.length - 4n; i > -1; i--) {\n searchWindow[3] = searchWindow[2];\n searchWindow[2] = searchWindow[1];\n searchWindow[1] = searchWindow[0];\n searchWindow[0] = await file.getUint8(i);\n if (searchWindow.every((val, index) => val === target[index])) {\n targetOffset = i;\n break;\n }\n }\n\n return targetOffset;\n};\n"],"mappings":";;;;;;;;;AAWO,IAAMA,gBAAgB;EAAA,IAAAC,IAAA,OAAAC,kBAAA,CAAAC,OAAA,EAAAC,YAAA,CAAAD,OAAA,CAAAE,IAAA,CAAG,SAAAC,QAC9BC,IAAkB,EAClBC,MAAoB;IAAA,IAAAC,YAAA,EAAAC,YAAA,EAAAC,CAAA;IAAA,OAAAP,YAAA,CAAAD,OAAA,CAAAS,IAAA,UAAAC,SAAAC,QAAA;MAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;QAAA;UAAAF,QAAA,CAAAE,IAAA;UAAA,OAGZT,IAAI,CAACU,QAAQ,CAACV,IAAI,CAACW,MAAM,GAAG,EAAE,CAAC;QAAA;UAAAJ,QAAA,CAAAK,EAAA,GAAAL,QAAA,CAAAM,IAAA;UAAAN,QAAA,CAAAE,IAAA;UAAA,OAC/BT,IAAI,CAACU,QAAQ,CAACV,IAAI,CAACW,MAAM,GAAG,EAAE,CAAC;QAAA;UAAAJ,QAAA,CAAAO,EAAA,GAAAP,QAAA,CAAAM,IAAA;UAAAN,QAAA,CAAAE,IAAA;UAAA,OAC/BT,IAAI,CAACU,QAAQ,CAACV,IAAI,CAACW,MAAM,GAAG,EAAE,CAAC;QAAA;UAAAJ,QAAA,CAAAQ,EAAA,GAAAR,QAAA,CAAAM,IAAA;UAAAN,QAAA,CAAAS,EAAA,GACrCC,SAAS;UAJLf,YAAY,IAAAK,QAAA,CAAAK,EAAA,EAAAL,QAAA,CAAAO,EAAA,EAAAP,QAAA,CAAAQ,EAAA,EAAAR,QAAA,CAAAS,EAAA;UAOdb,YAAY,GAAG,EAAE;UAGZC,CAAC,GAAGJ,IAAI,CAACW,MAAM,GAAG,EAAE;QAAA;UAAA,MAAEP,CAAC,GAAG,CAAC,CAAC;YAAAG,QAAA,CAAAE,IAAA;YAAA;UAAA;UACnCP,YAAY,CAAC,CAAC,CAAC,GAAGA,YAAY,CAAC,CAAC,CAAC;UACjCA,YAAY,CAAC,CAAC,CAAC,GAAGA,YAAY,CAAC,CAAC,CAAC;UACjCA,YAAY,CAAC,CAAC,CAAC,GAAGA,YAAY,CAAC,CAAC,CAAC;UAACK,QAAA,CAAAE,IAAA;UAAA,OACVT,IAAI,CAACU,QAAQ,CAACN,CAAC,CAAC;QAAA;UAAxCF,YAAY,CAAC,CAAC,CAAC,GAAAK,QAAA,CAAAM,IAAA;UAAA,KACXX,YAAY,CAACgB,KAAK,CAAC,UAACC,GAAG,EAAEC,KAAK;YAAA,OAAKD,GAAG,KAAKlB,MAAM,CAACmB,KAAK,CAAC;UAAA,EAAC;YAAAb,QAAA,CAAAE,IAAA;YAAA;UAAA;UAC3DN,YAAY,GAAGC,CAAC;UAAC,OAAAG,QAAA,CAAAc,MAAA;QAAA;UANkBjB,CAAC,EAAE;UAAAG,QAAA,CAAAE,IAAA;UAAA;QAAA;UAAA,OAAAF,QAAA,CAAAc,MAAA,WAWnClB,YAAY;QAAA;QAAA;UAAA,OAAAI,QAAA,CAAAe,IAAA;MAAA;IAAA,GAAAvB,OAAA;EAAA,CACpB;EAAA,gBA1BYN,gBAAgBA,CAAA8B,EAAA,EAAAC,GAAA;IAAA,OAAA9B,IAAA,CAAA+B,KAAA,OAAAC,SAAA;EAAA;AAAA,GA0B5B;AAACC,OAAA,CAAAlC,gBAAA,GAAAA,gBAAA"}
@@ -12,7 +12,6 @@ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/creat
12
12
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
13
  var _md = _interopRequireDefault(require("md5"));
14
14
  var _localFileHeader = require("../parse-zip/local-file-header");
15
- var _bufferFileProvider = require("../parse-zip/buffer-file-provider");
16
15
  var _compression = require("@loaders.gl/compression");
17
16
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
18
17
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
@@ -43,11 +42,11 @@ var PATH_DESCRIPTIONS = [{
43
42
  extensions: ['/sharedResource.json.gz']
44
43
  }];
45
44
  var SLPKArchive = function () {
46
- function SLPKArchive(slpkArchiveBuffer, hashFile) {
45
+ function SLPKArchive(slpkArchive, hashFile) {
47
46
  (0, _classCallCheck2.default)(this, SLPKArchive);
48
47
  (0, _defineProperty2.default)(this, "slpkArchive", void 0);
49
48
  (0, _defineProperty2.default)(this, "hashArray", void 0);
50
- this.slpkArchive = new DataView(slpkArchiveBuffer);
49
+ this.slpkArchive = slpkArchive;
51
50
  this.hashArray = this.parseHashFile(hashFile);
52
51
  }
53
52
  (0, _createClass2.default)(SLPKArchive, [{
@@ -57,7 +56,7 @@ var SLPKArchive = function () {
57
56
  var hashArray = [];
58
57
  for (var i = 0; i < hashFileBuffer.buffer.byteLength; i = i + 24) {
59
58
  var offsetBuffer = new DataView(hashFileBuffer.buffer.slice(hashFileBuffer.byteOffset + i + 16, hashFileBuffer.byteOffset + i + 24));
60
- var offset = offsetBuffer.getUint32(offsetBuffer.byteOffset, true);
59
+ var offset = offsetBuffer.getBigUint64(offsetBuffer.byteOffset, true);
61
60
  hashArray.push({
62
61
  hash: Buffer.from(hashFileBuffer.subarray(hashFileBuffer.byteOffset + i, hashFileBuffer.byteOffset + i + 16)),
63
62
  offset: offset
@@ -229,7 +228,7 @@ var SLPKArchive = function () {
229
228
  return _context3.abrupt("return", undefined);
230
229
  case 4:
231
230
  _context3.next = 6;
232
- return (0, _localFileHeader.parseZipLocalFileHeader)(this.slpkArchive.byteOffset + (fileInfo === null || fileInfo === void 0 ? void 0 : fileInfo.offset), new _bufferFileProvider.DataViewFileProvider(this.slpkArchive));
231
+ return (0, _localFileHeader.parseZipLocalFileHeader)(fileInfo === null || fileInfo === void 0 ? void 0 : fileInfo.offset, this.slpkArchive);
233
232
  case 6:
234
233
  localFileHeader = _context3.sent;
235
234
  if (localFileHeader) {
@@ -238,7 +237,7 @@ var SLPKArchive = function () {
238
237
  }
239
238
  return _context3.abrupt("return", undefined);
240
239
  case 9:
241
- compressedFile = this.slpkArchive.buffer.slice(localFileHeader.fileDataOffset, localFileHeader.fileDataOffset + localFileHeader.compressedSize);
240
+ compressedFile = this.slpkArchive.slice(localFileHeader.fileDataOffset, localFileHeader.fileDataOffset + localFileHeader.compressedSize);
242
241
  return _context3.abrupt("return", compressedFile);
243
242
  case 11:
244
243
  case "end":
@@ -1 +1 @@
1
- {"version":3,"file":"slpk-archieve.js","names":["_md","_interopRequireDefault","require","_localFileHeader","_bufferFileProvider","_compression","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","length","i","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","Object","prototype","toString","slice","constructor","name","from","test","arr","len","arr2","PATH_DESCRIPTIONS","extensions","SLPKArchive","slpkArchiveBuffer","hashFile","_classCallCheck2","default","_defineProperty2","slpkArchive","DataView","hashArray","parseHashFile","_createClass2","key","hashFileBuffer","Buffer","buffer","byteLength","offsetBuffer","byteOffset","offset","getUint32","push","hash","subarray","_getFile","_asyncToGenerator2","_regenerator","mark","_callee","path","mode","_PATH_DESCRIPTIONS$fi","data","_iterator","_step","ext","decompressedFile","fileWithoutCompression","_args","arguments","wrap","_callee$","_context","prev","undefined","find","val","getDataByPath","concat","sent","abrupt","t0","finish","getFileBytes","Error","stop","getFile","_x","apply","_getDataByPath","_callee2","compression","decompressedData","_callee2$","_context2","GZipCompression","decompress","_x2","_getFileBytes","_callee3","nameHash","fileInfo","localFileHeader","compressedFile","_callee3$","_context3","md5","compare","parseZipLocalFileHeader","DataViewFileProvider","fileDataOffset","compressedSize","_x3","exports"],"sources":["../../../../../src/lib/parsers/parse-slpk/slpk-archieve.ts"],"sourcesContent":["import md5 from 'md5';\nimport {parseZipLocalFileHeader} from '../parse-zip/local-file-header';\nimport {DataViewFileProvider} from '../parse-zip/buffer-file-provider';\nimport {GZipCompression} from '@loaders.gl/compression';\n\n/** Element of hash array */\ntype HashElement = {\n /**\n * File name hash\n */\n hash: Buffer;\n /**\n * File offset in the archive\n */\n offset: number;\n};\n\n/** Description of real paths for different file types */\nconst PATH_DESCRIPTIONS: {test: RegExp; extensions: string[]}[] = [\n {\n test: /^$/,\n extensions: ['3dSceneLayer.json.gz']\n },\n {\n test: /^nodepages\\/\\d+$/,\n extensions: ['.json.gz']\n },\n {\n test: /^nodes\\/\\d+$/,\n extensions: ['/3dNodeIndexDocument.json.gz']\n },\n {\n test: /^nodes\\/\\d+\\/textures\\/.+$/,\n extensions: ['.jpg', '.png', '.bin.dds.gz', '.ktx']\n },\n {\n test: /^nodes\\/\\d+\\/geometries\\/\\d+$/,\n extensions: ['.bin.gz', '.draco.gz']\n },\n {\n test: /^nodes\\/\\d+\\/attributes\\/f_\\d+\\/\\d+$/,\n extensions: ['.bin.gz']\n },\n {\n test: /^statistics\\/f_\\d+\\/\\d+$/,\n extensions: ['.json.gz']\n },\n {\n test: /^nodes\\/\\d+\\/shared$/,\n extensions: ['/sharedResource.json.gz']\n }\n];\n\n/**\n * Class for handling information about slpk file\n */\nexport class SLPKArchive {\n slpkArchive: DataView;\n hashArray: {hash: Buffer; offset: number}[];\n constructor(slpkArchiveBuffer: ArrayBuffer, hashFile: ArrayBuffer) {\n this.slpkArchive = new DataView(slpkArchiveBuffer);\n this.hashArray = this.parseHashFile(hashFile);\n }\n\n /**\n * Reads hash file from buffer and returns it in ready-to-use form\n * @param hashFile - bufer containing hash file\n * @returns Array containing file info\n */\n private parseHashFile(hashFile: ArrayBuffer): HashElement[] {\n const hashFileBuffer = Buffer.from(hashFile);\n const hashArray: HashElement[] = [];\n for (let i = 0; i < hashFileBuffer.buffer.byteLength; i = i + 24) {\n const offsetBuffer = new DataView(\n hashFileBuffer.buffer.slice(\n hashFileBuffer.byteOffset + i + 16,\n hashFileBuffer.byteOffset + i + 24\n )\n );\n const offset = offsetBuffer.getUint32(offsetBuffer.byteOffset, true);\n hashArray.push({\n hash: Buffer.from(\n hashFileBuffer.subarray(hashFileBuffer.byteOffset + i, hashFileBuffer.byteOffset + i + 16)\n ),\n offset\n });\n }\n return hashArray;\n }\n\n /**\n * Returns file with the given path from slpk archive\n * @param path - path inside the slpk\n * @param mode - currently only raw mode supported\n * @returns buffer with ready to use file\n */\n async getFile(path: string, mode: 'http' | 'raw' = 'raw'): Promise<Buffer> {\n if (mode === 'http') {\n const extensions = PATH_DESCRIPTIONS.find((val) => val.test.test(path))?.extensions;\n if (extensions) {\n let data: ArrayBuffer | undefined;\n for (const ext of extensions) {\n data = await this.getDataByPath(`${path}${ext}`);\n if (data) {\n break;\n }\n }\n if (data) {\n return Buffer.from(data);\n }\n }\n }\n if (mode === 'raw') {\n const decompressedFile = await this.getDataByPath(`${path}.gz`);\n if (decompressedFile) {\n return Buffer.from(decompressedFile);\n }\n const fileWithoutCompression = await this.getFileBytes(path);\n if (fileWithoutCompression) {\n return Buffer.from(fileWithoutCompression);\n }\n }\n\n throw new Error('No such file in the archieve');\n }\n\n /**\n * returning uncompressed data for paths that ends with .gz and raw data for all other paths\n * @param path - path inside the archive\n * @returns buffer with the file data\n */\n private async getDataByPath(path: string): Promise<ArrayBuffer | undefined> {\n const data = await this.getFileBytes(path);\n if (!data) {\n return undefined;\n }\n if (/\\.gz$/.test(path)) {\n const compression = new GZipCompression();\n\n const decompressedData = await compression.decompress(data);\n return decompressedData;\n }\n return Buffer.from(data);\n }\n\n /**\n * Trying to get raw file data by adress\n * @param path - path inside the archive\n * @returns buffer with the raw file data\n */\n private async getFileBytes(path: string): Promise<ArrayBuffer | undefined> {\n const nameHash = Buffer.from(md5(path), 'hex');\n const fileInfo = this.hashArray.find((val) => Buffer.compare(val.hash, nameHash) === 0);\n if (!fileInfo) {\n return undefined;\n }\n\n const localFileHeader = await parseZipLocalFileHeader(\n this.slpkArchive.byteOffset + fileInfo?.offset,\n new DataViewFileProvider(this.slpkArchive)\n );\n if (!localFileHeader) {\n return undefined;\n }\n\n const compressedFile = this.slpkArchive.buffer.slice(\n localFileHeader.fileDataOffset,\n localFileHeader.fileDataOffset + localFileHeader.compressedSize\n );\n\n return compressedFile;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"slpk-archieve.js","names":["_md","_interopRequireDefault","require","_localFileHeader","_compression","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","length","i","F","s","n","done","value","e","_e","f","TypeError","normalCompletion","didErr","err","call","step","next","_e2","return","minLen","_arrayLikeToArray","Object","prototype","toString","slice","constructor","name","from","test","arr","len","arr2","PATH_DESCRIPTIONS","extensions","SLPKArchive","slpkArchive","hashFile","_classCallCheck2","default","_defineProperty2","hashArray","parseHashFile","_createClass2","key","hashFileBuffer","Buffer","buffer","byteLength","offsetBuffer","DataView","byteOffset","offset","getBigUint64","push","hash","subarray","_getFile","_asyncToGenerator2","_regenerator","mark","_callee","path","mode","_PATH_DESCRIPTIONS$fi","data","_iterator","_step","ext","decompressedFile","fileWithoutCompression","_args","arguments","wrap","_callee$","_context","prev","undefined","find","val","getDataByPath","concat","sent","abrupt","t0","finish","getFileBytes","Error","stop","getFile","_x","apply","_getDataByPath","_callee2","compression","decompressedData","_callee2$","_context2","GZipCompression","decompress","_x2","_getFileBytes","_callee3","nameHash","fileInfo","localFileHeader","compressedFile","_callee3$","_context3","md5","compare","parseZipLocalFileHeader","fileDataOffset","compressedSize","_x3","exports"],"sources":["../../../../../src/lib/parsers/parse-slpk/slpk-archieve.ts"],"sourcesContent":["import md5 from 'md5';\nimport {parseZipLocalFileHeader} from '../parse-zip/local-file-header';\nimport {GZipCompression} from '@loaders.gl/compression';\nimport {FileProvider} from '../parse-zip/file-provider';\n\n/** Element of hash array */\ntype HashElement = {\n /**\n * File name hash\n */\n hash: Buffer;\n /**\n * File offset in the archive\n */\n offset: bigint;\n};\n\n/** Description of real paths for different file types */\nconst PATH_DESCRIPTIONS: {test: RegExp; extensions: string[]}[] = [\n {\n test: /^$/,\n extensions: ['3dSceneLayer.json.gz']\n },\n {\n test: /^nodepages\\/\\d+$/,\n extensions: ['.json.gz']\n },\n {\n test: /^nodes\\/\\d+$/,\n extensions: ['/3dNodeIndexDocument.json.gz']\n },\n {\n test: /^nodes\\/\\d+\\/textures\\/.+$/,\n extensions: ['.jpg', '.png', '.bin.dds.gz', '.ktx']\n },\n {\n test: /^nodes\\/\\d+\\/geometries\\/\\d+$/,\n extensions: ['.bin.gz', '.draco.gz']\n },\n {\n test: /^nodes\\/\\d+\\/attributes\\/f_\\d+\\/\\d+$/,\n extensions: ['.bin.gz']\n },\n {\n test: /^statistics\\/f_\\d+\\/\\d+$/,\n extensions: ['.json.gz']\n },\n {\n test: /^nodes\\/\\d+\\/shared$/,\n extensions: ['/sharedResource.json.gz']\n }\n];\n\n/**\n * Class for handling information about slpk file\n */\nexport class SLPKArchive {\n slpkArchive: FileProvider;\n hashArray: {hash: Buffer; offset: bigint}[];\n constructor(slpkArchive: FileProvider, hashFile: ArrayBuffer) {\n this.slpkArchive = slpkArchive;\n this.hashArray = this.parseHashFile(hashFile);\n }\n\n /**\n * Reads hash file from buffer and returns it in ready-to-use form\n * @param hashFile - bufer containing hash file\n * @returns Array containing file info\n */\n private parseHashFile(hashFile: ArrayBuffer): HashElement[] {\n const hashFileBuffer = Buffer.from(hashFile);\n const hashArray: HashElement[] = [];\n for (let i = 0; i < hashFileBuffer.buffer.byteLength; i = i + 24) {\n const offsetBuffer = new DataView(\n hashFileBuffer.buffer.slice(\n hashFileBuffer.byteOffset + i + 16,\n hashFileBuffer.byteOffset + i + 24\n )\n );\n const offset = offsetBuffer.getBigUint64(offsetBuffer.byteOffset, true);\n hashArray.push({\n hash: Buffer.from(\n hashFileBuffer.subarray(hashFileBuffer.byteOffset + i, hashFileBuffer.byteOffset + i + 16)\n ),\n offset\n });\n }\n return hashArray;\n }\n\n /**\n * Returns file with the given path from slpk archive\n * @param path - path inside the slpk\n * @param mode - currently only raw mode supported\n * @returns buffer with ready to use file\n */\n async getFile(path: string, mode: 'http' | 'raw' = 'raw'): Promise<Buffer> {\n if (mode === 'http') {\n const extensions = PATH_DESCRIPTIONS.find((val) => val.test.test(path))?.extensions;\n if (extensions) {\n let data: ArrayBuffer | undefined;\n for (const ext of extensions) {\n data = await this.getDataByPath(`${path}${ext}`);\n if (data) {\n break;\n }\n }\n if (data) {\n return Buffer.from(data);\n }\n }\n }\n if (mode === 'raw') {\n const decompressedFile = await this.getDataByPath(`${path}.gz`);\n if (decompressedFile) {\n return Buffer.from(decompressedFile);\n }\n const fileWithoutCompression = await this.getFileBytes(path);\n if (fileWithoutCompression) {\n return Buffer.from(fileWithoutCompression);\n }\n }\n\n throw new Error('No such file in the archieve');\n }\n\n /**\n * returning uncompressed data for paths that ends with .gz and raw data for all other paths\n * @param path - path inside the archive\n * @returns buffer with the file data\n */\n private async getDataByPath(path: string): Promise<ArrayBuffer | undefined> {\n const data = await this.getFileBytes(path);\n if (!data) {\n return undefined;\n }\n if (/\\.gz$/.test(path)) {\n const compression = new GZipCompression();\n\n const decompressedData = await compression.decompress(data);\n return decompressedData;\n }\n return Buffer.from(data);\n }\n\n /**\n * Trying to get raw file data by adress\n * @param path - path inside the archive\n * @returns buffer with the raw file data\n */\n private async getFileBytes(path: string): Promise<ArrayBuffer | undefined> {\n const nameHash = Buffer.from(md5(path), 'hex');\n const fileInfo = this.hashArray.find((val) => Buffer.compare(val.hash, nameHash) === 0);\n if (!fileInfo) {\n return undefined;\n }\n\n const localFileHeader = await parseZipLocalFileHeader(fileInfo?.offset, this.slpkArchive);\n if (!localFileHeader) {\n return undefined;\n }\n\n const compressedFile = this.slpkArchive.slice(\n localFileHeader.fileDataOffset,\n localFileHeader.fileDataOffset + localFileHeader.compressedSize\n );\n\n return compressedFile;\n }\n}\n"],"mappings":"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"}
@@ -14,53 +14,71 @@ var parseZipCDFileHeader = function () {
14
14
  while (1) switch (_context.prev = _context.next) {
15
15
  case 0:
16
16
  offsets = {
17
- CD_COMPRESSED_SIZE_OFFSET: 20,
18
- CD_UNCOMPRESSED_SIZE_OFFSET: 24,
19
- CD_FILE_NAME_LENGTH_OFFSET: 28,
20
- CD_EXTRA_FIELD_LENGTH_OFFSET: 30,
21
- CD_LOCAL_HEADER_OFFSET_OFFSET: 42,
22
- CD_FILE_NAME_OFFSET: 46
17
+ CD_COMPRESSED_SIZE_OFFSET: 20n,
18
+ CD_UNCOMPRESSED_SIZE_OFFSET: 24n,
19
+ CD_FILE_NAME_LENGTH_OFFSET: 28n,
20
+ CD_EXTRA_FIELD_LENGTH_OFFSET: 30n,
21
+ CD_LOCAL_HEADER_OFFSET_OFFSET: 42n,
22
+ CD_FILE_NAME_OFFSET: 46n
23
23
  };
24
- _context.next = 3;
24
+ _context.t0 = BigInt;
25
+ _context.next = 4;
25
26
  return buffer.getUint32(headerOffset + offsets.CD_COMPRESSED_SIZE_OFFSET);
26
- case 3:
27
- compressedSize = _context.sent;
28
- _context.next = 6;
29
- return buffer.getUint32(headerOffset + offsets.CD_UNCOMPRESSED_SIZE_OFFSET);
30
- case 6:
31
- uncompressedSize = _context.sent;
27
+ case 4:
28
+ _context.t1 = _context.sent;
29
+ compressedSize = (0, _context.t0)(_context.t1);
30
+ _context.t2 = BigInt;
32
31
  _context.next = 9;
33
- return buffer.getUint16(headerOffset + offsets.CD_FILE_NAME_LENGTH_OFFSET);
32
+ return buffer.getUint32(headerOffset + offsets.CD_UNCOMPRESSED_SIZE_OFFSET);
34
33
  case 9:
35
- fileNameLength = _context.sent;
36
- _context.t0 = new TextDecoder();
34
+ _context.t3 = _context.sent;
35
+ uncompressedSize = (0, _context.t2)(_context.t3);
37
36
  _context.next = 13;
38
- return buffer.slice(headerOffset + offsets.CD_FILE_NAME_OFFSET, headerOffset + offsets.CD_FILE_NAME_OFFSET + fileNameLength);
37
+ return buffer.getUint16(headerOffset + offsets.CD_FILE_NAME_LENGTH_OFFSET);
39
38
  case 13:
40
- _context.t1 = _context.sent;
41
- fileName = _context.t0.decode.call(_context.t0, _context.t1);
42
- extraOffset = headerOffset + offsets.CD_FILE_NAME_OFFSET + fileNameLength;
43
- _context.next = 18;
39
+ fileNameLength = _context.sent;
40
+ _context.t4 = new TextDecoder();
41
+ _context.next = 17;
42
+ return buffer.slice(headerOffset + offsets.CD_FILE_NAME_OFFSET, headerOffset + offsets.CD_FILE_NAME_OFFSET + BigInt(fileNameLength));
43
+ case 17:
44
+ _context.t5 = _context.sent;
45
+ fileName = _context.t4.decode.call(_context.t4, _context.t5);
46
+ extraOffset = headerOffset + offsets.CD_FILE_NAME_OFFSET + BigInt(fileNameLength);
47
+ _context.next = 22;
44
48
  return buffer.getUint32(headerOffset + offsets.CD_LOCAL_HEADER_OFFSET_OFFSET);
45
- case 18:
49
+ case 22:
46
50
  oldFormatOffset = _context.sent;
47
- fileDataOffset = oldFormatOffset;
48
- if (!(fileDataOffset === 0xffffffff)) {
49
- _context.next = 27;
51
+ fileDataOffset = BigInt(oldFormatOffset);
52
+ offsetInZip64Data = 4n;
53
+ if (!(uncompressedSize === BigInt(0xffffffff))) {
54
+ _context.next = 30;
50
55
  break;
51
56
  }
52
- offsetInZip64Data = 4;
53
- if (compressedSize === 0xffffffff) {
54
- offsetInZip64Data += 8;
57
+ _context.next = 28;
58
+ return buffer.getBigUint64(extraOffset + offsetInZip64Data);
59
+ case 28:
60
+ uncompressedSize = _context.sent;
61
+ offsetInZip64Data += 8n;
62
+ case 30:
63
+ if (!(compressedSize === BigInt(0xffffffff))) {
64
+ _context.next = 35;
65
+ break;
55
66
  }
56
- if (uncompressedSize === 0xffffffff) {
57
- offsetInZip64Data += 8;
67
+ _context.next = 33;
68
+ return buffer.getBigUint64(extraOffset + offsetInZip64Data);
69
+ case 33:
70
+ compressedSize = _context.sent;
71
+ offsetInZip64Data += 8n;
72
+ case 35:
73
+ if (!(fileDataOffset === BigInt(0xffffffff))) {
74
+ _context.next = 39;
75
+ break;
58
76
  }
59
- _context.next = 26;
60
- return buffer.getUint32(extraOffset + offsetInZip64Data);
61
- case 26:
77
+ _context.next = 38;
78
+ return buffer.getBigUint64(extraOffset + offsetInZip64Data);
79
+ case 38:
62
80
  fileDataOffset = _context.sent;
63
- case 27:
81
+ case 39:
64
82
  localHeaderOffset = fileDataOffset;
65
83
  return _context.abrupt("return", {
66
84
  compressedSize: compressedSize,
@@ -70,7 +88,7 @@ var parseZipCDFileHeader = function () {
70
88
  extraOffset: extraOffset,
71
89
  localHeaderOffset: localHeaderOffset
72
90
  });
73
- case 29:
91
+ case 41:
74
92
  case "end":
75
93
  return _context.stop();
76
94
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cd-file-header.js","names":["parseZipCDFileHeader","_ref","_asyncToGenerator2","default","_regenerator","mark","_callee","headerOffset","buffer","offsets","compressedSize","uncompressedSize","fileNameLength","fileName","extraOffset","oldFormatOffset","fileDataOffset","offsetInZip64Data","localHeaderOffset","wrap","_callee$","_context","prev","next","CD_COMPRESSED_SIZE_OFFSET","CD_UNCOMPRESSED_SIZE_OFFSET","CD_FILE_NAME_LENGTH_OFFSET","CD_EXTRA_FIELD_LENGTH_OFFSET","CD_LOCAL_HEADER_OFFSET_OFFSET","CD_FILE_NAME_OFFSET","getUint32","sent","getUint16","t0","TextDecoder","slice","t1","decode","call","abrupt","stop","_x","_x2","apply","arguments","exports"],"sources":["../../../../../src/lib/parsers/parse-zip/cd-file-header.ts"],"sourcesContent":["import {FileProvider} from './file-provider';\n\n/**\n * zip central directory file header info\n * according to https://en.wikipedia.org/wiki/ZIP_(file_format)\n */\nexport type ZipCDFileHeader = {\n /** Compressed size */\n compressedSize: number;\n /** Uncompressed size */\n uncompressedSize: number;\n /** File name length */\n fileNameLength: number;\n /** File name */\n fileName: string;\n /** Extra field offset */\n extraOffset: number;\n /** Relative offset of local file header */\n localHeaderOffset: number;\n};\n\n/**\n * Parses central directory file header of zip file\n * @param headerOffset - offset in the archive where header starts\n * @param buffer - buffer containing whole array\n * @returns Info from the header\n */\nexport const parseZipCDFileHeader = async (\n headerOffset: number,\n buffer: FileProvider\n): Promise<ZipCDFileHeader> => {\n const offsets = {\n CD_COMPRESSED_SIZE_OFFSET: 20,\n CD_UNCOMPRESSED_SIZE_OFFSET: 24,\n CD_FILE_NAME_LENGTH_OFFSET: 28,\n CD_EXTRA_FIELD_LENGTH_OFFSET: 30,\n CD_LOCAL_HEADER_OFFSET_OFFSET: 42,\n CD_FILE_NAME_OFFSET: 46\n };\n\n const compressedSize = await buffer.getUint32(headerOffset + offsets.CD_COMPRESSED_SIZE_OFFSET);\n\n const uncompressedSize = await buffer.getUint32(\n headerOffset + offsets.CD_UNCOMPRESSED_SIZE_OFFSET\n );\n\n const fileNameLength = await buffer.getUint16(headerOffset + offsets.CD_FILE_NAME_LENGTH_OFFSET);\n\n const fileName = new TextDecoder().decode(\n await buffer.slice(\n headerOffset + offsets.CD_FILE_NAME_OFFSET,\n headerOffset + offsets.CD_FILE_NAME_OFFSET + fileNameLength\n )\n );\n\n const extraOffset = headerOffset + offsets.CD_FILE_NAME_OFFSET + fileNameLength;\n\n const oldFormatOffset = await buffer.getUint32(\n headerOffset + offsets.CD_LOCAL_HEADER_OFFSET_OFFSET\n );\n\n let fileDataOffset = oldFormatOffset;\n if (fileDataOffset === 0xffffffff) {\n let offsetInZip64Data = 4;\n // looking for info that might be also be in zip64 extra field\n if (compressedSize === 0xffffffff) {\n offsetInZip64Data += 8;\n }\n if (uncompressedSize === 0xffffffff) {\n offsetInZip64Data += 8;\n }\n\n // getUint32 needs to be replaced with getBigUint64 for archieves bigger than 2gb\n fileDataOffset = await buffer.getUint32(extraOffset + offsetInZip64Data); // setting it to the one from zip64\n }\n const localHeaderOffset = fileDataOffset;\n\n return {\n compressedSize,\n uncompressedSize,\n fileNameLength,\n fileName,\n extraOffset,\n localHeaderOffset\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"cd-file-header.js","names":["parseZipCDFileHeader","_ref","_asyncToGenerator2","default","_regenerator","mark","_callee","headerOffset","buffer","offsets","compressedSize","uncompressedSize","fileNameLength","fileName","extraOffset","oldFormatOffset","fileDataOffset","offsetInZip64Data","localHeaderOffset","wrap","_callee$","_context","prev","next","CD_COMPRESSED_SIZE_OFFSET","CD_UNCOMPRESSED_SIZE_OFFSET","CD_FILE_NAME_LENGTH_OFFSET","CD_EXTRA_FIELD_LENGTH_OFFSET","CD_LOCAL_HEADER_OFFSET_OFFSET","CD_FILE_NAME_OFFSET","t0","BigInt","getUint32","t1","sent","t2","t3","getUint16","t4","TextDecoder","slice","t5","decode","call","getBigUint64","abrupt","stop","_x","_x2","apply","arguments","exports"],"sources":["../../../../../src/lib/parsers/parse-zip/cd-file-header.ts"],"sourcesContent":["import {FileProvider} from './file-provider';\n\n/**\n * zip central directory file header info\n * according to https://en.wikipedia.org/wiki/ZIP_(file_format)\n */\nexport type ZipCDFileHeader = {\n /** Compressed size */\n compressedSize: bigint;\n /** Uncompressed size */\n uncompressedSize: bigint;\n /** File name length */\n fileNameLength: number;\n /** File name */\n fileName: string;\n /** Extra field offset */\n extraOffset: bigint;\n /** Relative offset of local file header */\n localHeaderOffset: bigint;\n};\n\n/**\n * Parses central directory file header of zip file\n * @param headerOffset - offset in the archive where header starts\n * @param buffer - buffer containing whole array\n * @returns Info from the header\n */\nexport const parseZipCDFileHeader = async (\n headerOffset: bigint,\n buffer: FileProvider\n): Promise<ZipCDFileHeader> => {\n const offsets = {\n CD_COMPRESSED_SIZE_OFFSET: 20n,\n CD_UNCOMPRESSED_SIZE_OFFSET: 24n,\n CD_FILE_NAME_LENGTH_OFFSET: 28n,\n CD_EXTRA_FIELD_LENGTH_OFFSET: 30n,\n CD_LOCAL_HEADER_OFFSET_OFFSET: 42n,\n CD_FILE_NAME_OFFSET: 46n\n };\n\n let compressedSize = BigInt(\n await buffer.getUint32(headerOffset + offsets.CD_COMPRESSED_SIZE_OFFSET)\n );\n\n let uncompressedSize = BigInt(\n await buffer.getUint32(headerOffset + offsets.CD_UNCOMPRESSED_SIZE_OFFSET)\n );\n\n const fileNameLength = await buffer.getUint16(headerOffset + offsets.CD_FILE_NAME_LENGTH_OFFSET);\n\n const fileName = new TextDecoder().decode(\n await buffer.slice(\n headerOffset + offsets.CD_FILE_NAME_OFFSET,\n headerOffset + offsets.CD_FILE_NAME_OFFSET + BigInt(fileNameLength)\n )\n );\n\n const extraOffset = headerOffset + offsets.CD_FILE_NAME_OFFSET + BigInt(fileNameLength);\n\n const oldFormatOffset = await buffer.getUint32(\n headerOffset + offsets.CD_LOCAL_HEADER_OFFSET_OFFSET\n );\n\n let fileDataOffset = BigInt(oldFormatOffset);\n let offsetInZip64Data = 4n;\n // looking for info that might be also be in zip64 extra field\n if (uncompressedSize === BigInt(0xffffffff)) {\n uncompressedSize = await buffer.getBigUint64(extraOffset + offsetInZip64Data);\n offsetInZip64Data += 8n;\n }\n if (compressedSize === BigInt(0xffffffff)) {\n compressedSize = await buffer.getBigUint64(extraOffset + offsetInZip64Data);\n offsetInZip64Data += 8n;\n }\n if (fileDataOffset === BigInt(0xffffffff)) {\n fileDataOffset = await buffer.getBigUint64(extraOffset + offsetInZip64Data); // setting it to the one from zip64\n }\n const localHeaderOffset = fileDataOffset;\n\n return {\n compressedSize,\n uncompressedSize,\n fileNameLength,\n fileName,\n extraOffset,\n localHeaderOffset\n };\n};\n"],"mappings":"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"}