@loaders.gl/i3s 4.0.0-alpha.13 → 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.
- package/dist/dist.min.js +139 -102
- package/dist/es5/arcgis-webscene-loader.js +1 -1
- package/dist/es5/i3s-attribute-loader.js +1 -1
- package/dist/es5/i3s-building-scene-layer-loader.js +1 -1
- package/dist/es5/i3s-content-loader.js +1 -1
- package/dist/es5/i3s-loader.js +1 -1
- package/dist/es5/i3s-node-page-loader.js +1 -1
- package/dist/es5/i3s-slpk-loader.js +30 -2
- package/dist/es5/i3s-slpk-loader.js.map +1 -1
- package/dist/es5/index.js +7 -7
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/lib/parsers/parse-slpk/parse-slpk.js +30 -69
- package/dist/es5/lib/parsers/parse-slpk/parse-slpk.js.map +1 -1
- package/dist/es5/lib/parsers/parse-slpk/search-from-the-end.js +69 -0
- package/dist/es5/lib/parsers/parse-slpk/search-from-the-end.js.map +1 -0
- package/dist/es5/lib/parsers/parse-slpk/slpk-archieve.js +5 -6
- package/dist/es5/lib/parsers/parse-slpk/slpk-archieve.js.map +1 -1
- package/dist/es5/lib/parsers/parse-zip/cd-file-header.js +53 -35
- package/dist/es5/lib/parsers/parse-zip/cd-file-header.js.map +1 -1
- package/dist/es5/lib/parsers/parse-zip/data-view-file-provider.js +129 -0
- package/dist/es5/lib/parsers/parse-zip/data-view-file-provider.js.map +1 -0
- package/dist/es5/lib/parsers/parse-zip/file-provider.js.map +1 -1
- package/dist/es5/lib/parsers/parse-zip/local-file-header.js +54 -13
- package/dist/es5/lib/parsers/parse-zip/local-file-header.js.map +1 -1
- package/dist/esm/arcgis-webscene-loader.js +1 -1
- package/dist/esm/i3s-attribute-loader.js +1 -1
- package/dist/esm/i3s-building-scene-layer-loader.js +1 -1
- package/dist/esm/i3s-content-loader.js +1 -1
- package/dist/esm/i3s-loader.js +1 -1
- package/dist/esm/i3s-node-page-loader.js +1 -1
- package/dist/esm/i3s-slpk-loader.js +8 -2
- package/dist/esm/i3s-slpk-loader.js.map +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/parsers/parse-slpk/parse-slpk.js +7 -25
- package/dist/esm/lib/parsers/parse-slpk/parse-slpk.js.map +1 -1
- package/dist/esm/lib/parsers/parse-slpk/search-from-the-end.js +16 -0
- package/dist/esm/lib/parsers/parse-slpk/search-from-the-end.js.map +1 -0
- package/dist/esm/lib/parsers/parse-slpk/slpk-archieve.js +5 -6
- package/dist/esm/lib/parsers/parse-slpk/slpk-archieve.js.map +1 -1
- package/dist/esm/lib/parsers/parse-zip/cd-file-header.js +22 -20
- package/dist/esm/lib/parsers/parse-zip/cd-file-header.js.map +1 -1
- package/dist/esm/lib/parsers/parse-zip/data-view-file-provider.js +32 -0
- package/dist/esm/lib/parsers/parse-zip/data-view-file-provider.js.map +1 -0
- package/dist/esm/lib/parsers/parse-zip/file-provider.js.map +1 -1
- package/dist/esm/lib/parsers/parse-zip/local-file-header.js +24 -9
- package/dist/esm/lib/parsers/parse-zip/local-file-header.js.map +1 -1
- package/dist/i3s-content-worker-node.js +2 -2
- package/dist/i3s-content-worker.js +8 -8
- package/dist/i3s-slpk-loader.d.ts +3 -0
- package/dist/i3s-slpk-loader.d.ts.map +1 -1
- package/dist/i3s-slpk-loader.js +11 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/lib/parsers/parse-slpk/parse-slpk.d.ts +8 -3
- package/dist/lib/parsers/parse-slpk/parse-slpk.d.ts.map +1 -1
- package/dist/lib/parsers/parse-slpk/parse-slpk.js +10 -33
- package/dist/lib/parsers/parse-slpk/search-from-the-end.d.ts +11 -0
- package/dist/lib/parsers/parse-slpk/search-from-the-end.d.ts.map +1 -0
- package/dist/lib/parsers/parse-slpk/search-from-the-end.js +31 -0
- package/dist/lib/parsers/parse-slpk/slpk-archieve.d.ts +4 -3
- package/dist/lib/parsers/parse-slpk/slpk-archieve.d.ts.map +1 -1
- package/dist/lib/parsers/parse-slpk/slpk-archieve.js +5 -6
- package/dist/lib/parsers/parse-zip/cd-file-header.d.ts +5 -5
- package/dist/lib/parsers/parse-zip/cd-file-header.d.ts.map +1 -1
- package/dist/lib/parsers/parse-zip/cd-file-header.js +23 -22
- package/dist/lib/parsers/parse-zip/{buffer-file-provider.d.ts → data-view-file-provider.d.ts} +15 -16
- package/dist/lib/parsers/parse-zip/data-view-file-provider.d.ts.map +1 -0
- package/dist/lib/parsers/parse-zip/{buffer-file-provider.js → data-view-file-provider.js} +28 -14
- package/dist/lib/parsers/parse-zip/file-provider.d.ts +10 -5
- package/dist/lib/parsers/parse-zip/file-provider.d.ts.map +1 -1
- package/dist/lib/parsers/parse-zip/local-file-header.d.ts +5 -3
- package/dist/lib/parsers/parse-zip/local-file-header.d.ts.map +1 -1
- package/dist/lib/parsers/parse-zip/local-file-header.js +29 -10
- package/package.json +9 -9
- package/src/i3s-slpk-loader.ts +19 -1
- package/src/index.ts +2 -1
- package/src/lib/parsers/parse-slpk/parse-slpk.ts +11 -40
- package/src/lib/parsers/parse-slpk/search-from-the-end.ts +38 -0
- package/src/lib/parsers/parse-slpk/slpk-archieve.ts +9 -12
- package/src/lib/parsers/parse-zip/cd-file-header.ts +31 -29
- package/src/lib/parsers/parse-zip/data-view-file-provider.ts +69 -0
- package/src/lib/parsers/parse-zip/file-provider.ts +11 -5
- package/src/lib/parsers/parse-zip/local-file-header.ts +43 -17
- package/dist/es5/lib/parsers/parse-zip/buffer-file-provider.js +0 -46
- package/dist/es5/lib/parsers/parse-zip/buffer-file-provider.js.map +0 -1
- package/dist/esm/lib/parsers/parse-zip/buffer-file-provider.js +0 -23
- package/dist/esm/lib/parsers/parse-zip/buffer-file-provider.js.map +0 -1
- package/dist/lib/parsers/parse-zip/buffer-file-provider.d.ts.map +0 -1
- 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 =
|
|
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
|
|
15
|
-
|
|
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
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
hashCDOffset =
|
|
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
|
|
27
|
+
case 6:
|
|
70
28
|
cdFileHeader = _context.sent;
|
|
71
29
|
if (!(cdFileHeader.fileName !== '@specialIndexFileHASH128@')) {
|
|
72
|
-
_context.next =
|
|
30
|
+
_context.next = 9;
|
|
73
31
|
break;
|
|
74
32
|
}
|
|
75
33
|
throw new Error('No hash file in slpk');
|
|
76
|
-
case
|
|
77
|
-
_context.next =
|
|
34
|
+
case 9:
|
|
35
|
+
_context.next = 11;
|
|
78
36
|
return (0, _localFileHeader.parseZipLocalFileHeader)(cdFileHeader.localHeaderOffset, fileProvider);
|
|
79
|
-
case
|
|
37
|
+
case 11:
|
|
80
38
|
localFileHeader = _context.sent;
|
|
81
39
|
if (localFileHeader) {
|
|
82
|
-
_context.next =
|
|
40
|
+
_context.next = 14;
|
|
83
41
|
break;
|
|
84
42
|
}
|
|
85
43
|
throw new Error('No hash file in slpk');
|
|
86
|
-
case
|
|
44
|
+
case 14:
|
|
87
45
|
fileDataOffset = localFileHeader.fileDataOffset;
|
|
88
|
-
|
|
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 =
|
|
51
|
+
_context.next = 20;
|
|
91
52
|
break;
|
|
92
53
|
}
|
|
93
54
|
throw new Error('No hash file in slpk');
|
|
94
|
-
case
|
|
95
|
-
_context.
|
|
96
|
-
|
|
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
|
|
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":["
|
|
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(
|
|
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 =
|
|
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.
|
|
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)(
|
|
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.
|
|
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":";;;;;;;;;;;;AAAA,IAAAA,GAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,gBAAA,GAAAD,OAAA;AACA,IAAAE,YAAA,GAAAF,OAAA;AAAwD,SAAAG,2BAAAC,CAAA,EAAAC,cAAA,QAAAC,EAAA,UAAAC,MAAA,oBAAAH,CAAA,CAAAG,MAAA,CAAAC,QAAA,KAAAJ,CAAA,qBAAAE,EAAA,QAAAG,KAAA,CAAAC,OAAA,CAAAN,CAAA,MAAAE,EAAA,GAAAK,2BAAA,CAAAP,CAAA,MAAAC,cAAA,IAAAD,CAAA,WAAAA,CAAA,CAAAQ,MAAA,qBAAAN,EAAA,EAAAF,CAAA,GAAAE,EAAA,MAAAO,CAAA,UAAAC,CAAA,YAAAA,EAAA,eAAAC,CAAA,EAAAD,CAAA,EAAAE,CAAA,WAAAA,EAAA,QAAAH,CAAA,IAAAT,CAAA,CAAAQ,MAAA,WAAAK,IAAA,mBAAAA,IAAA,SAAAC,KAAA,EAAAd,CAAA,CAAAS,CAAA,UAAAM,CAAA,WAAAA,EAAAC,EAAA,UAAAA,EAAA,KAAAC,CAAA,EAAAP,CAAA,gBAAAQ,SAAA,iJAAAC,gBAAA,SAAAC,MAAA,UAAAC,GAAA,WAAAV,CAAA,WAAAA,EAAA,IAAAT,EAAA,GAAAA,EAAA,CAAAoB,IAAA,CAAAtB,CAAA,MAAAY,CAAA,WAAAA,EAAA,QAAAW,IAAA,GAAArB,EAAA,CAAAsB,IAAA,IAAAL,gBAAA,GAAAI,IAAA,CAAAV,IAAA,SAAAU,IAAA,KAAAR,CAAA,WAAAA,EAAAU,GAAA,IAAAL,MAAA,SAAAC,GAAA,GAAAI,GAAA,KAAAR,CAAA,WAAAA,EAAA,eAAAE,gBAAA,IAAAjB,EAAA,CAAAwB,MAAA,UAAAxB,EAAA,CAAAwB,MAAA,oBAAAN,MAAA,QAAAC,GAAA;AAAA,SAAAd,4BAAAP,CAAA,EAAA2B,MAAA,SAAA3B,CAAA,qBAAAA,CAAA,sBAAA4B,iBAAA,CAAA5B,CAAA,EAAA2B,MAAA,OAAAf,CAAA,GAAAiB,MAAA,CAAAC,SAAA,CAAAC,QAAA,CAAAT,IAAA,CAAAtB,CAAA,EAAAgC,KAAA,aAAApB,CAAA,iBAAAZ,CAAA,CAAAiC,WAAA,EAAArB,CAAA,GAAAZ,CAAA,CAAAiC,WAAA,CAAAC,IAAA,MAAAtB,CAAA,cAAAA,CAAA,mBAAAP,KAAA,CAAA8B,IAAA,CAAAnC,CAAA,OAAAY,CAAA,+DAAAwB,IAAA,CAAAxB,CAAA,UAAAgB,iBAAA,CAAA5B,CAAA,EAAA2B,MAAA;AAAA,SAAAC,kBAAAS,GAAA,EAAAC,GAAA,QAAAA,GAAA,YAAAA,GAAA,GAAAD,GAAA,CAAA7B,MAAA,EAAA8B,GAAA,GAAAD,GAAA,CAAA7B,MAAA,WAAAC,CAAA,MAAA8B,IAAA,OAAAlC,KAAA,CAAAiC,GAAA,GAAA7B,CAAA,GAAA6B,GAAA,EAAA7B,CAAA,IAAA8B,IAAA,CAAA9B,CAAA,IAAA4B,GAAA,CAAA5B,CAAA,UAAA8B,IAAA;AAgBxD,IAAMC,iBAAyD,GAAG,CAChE;EACEJ,IAAI,EAAE,IAAI;EACVK,UAAU,EAAE,CAAC,sBAAsB;AACrC,CAAC,EACD;EACEL,IAAI,EAAE,kBAAkB;EACxBK,UAAU,EAAE,CAAC,UAAU;AACzB,CAAC,EACD;EACEL,IAAI,EAAE,cAAc;EACpBK,UAAU,EAAE,CAAC,8BAA8B;AAC7C,CAAC,EACD;EACEL,IAAI,EAAE,4BAA4B;EAClCK,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM;AACpD,CAAC,EACD;EACEL,IAAI,EAAE,+BAA+B;EACrCK,UAAU,EAAE,CAAC,SAAS,EAAE,WAAW;AACrC,CAAC,EACD;EACEL,IAAI,EAAE,sCAAsC;EAC5CK,UAAU,EAAE,CAAC,SAAS;AACxB,CAAC,EACD;EACEL,IAAI,EAAE,0BAA0B;EAChCK,UAAU,EAAE,CAAC,UAAU;AACzB,CAAC,EACD;EACEL,IAAI,EAAE,sBAAsB;EAC5BK,UAAU,EAAE,CAAC,yBAAyB;AACxC,CAAC,CACF;AAAC,IAKWC,WAAW;EAGtB,SAAAA,YAAYC,WAAyB,EAAEC,QAAqB,EAAE;IAAA,IAAAC,gBAAA,CAAAC,OAAA,QAAAJ,WAAA;IAAA,IAAAK,gBAAA,CAAAD,OAAA;IAAA,IAAAC,gBAAA,CAAAD,OAAA;IAC5D,IAAI,CAACH,WAAW,GAAGA,WAAW;IAC9B,IAAI,CAACK,SAAS,GAAG,IAAI,CAACC,aAAa,CAACL,QAAQ,CAAC;EAC/C;EAAC,IAAAM,aAAA,CAAAJ,OAAA,EAAAJ,WAAA;IAAAS,GAAA;IAAArC,KAAA,EAOD,SAAAmC,cAAsBL,QAAqB,EAAiB;MAC1D,IAAMQ,cAAc,GAAGC,MAAM,CAAClB,IAAI,CAACS,QAAQ,CAAC;MAC5C,IAAMI,SAAwB,GAAG,EAAE;MACnC,KAAK,IAAIvC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG2C,cAAc,CAACE,MAAM,CAACC,UAAU,EAAE9C,CAAC,GAAGA,CAAC,GAAG,EAAE,EAAE;QAChE,IAAM+C,YAAY,GAAG,IAAIC,QAAQ,CAC/BL,cAAc,CAACE,MAAM,CAACtB,KAAK,CACzBoB,cAAc,CAACM,UAAU,GAAGjD,CAAC,GAAG,EAAE,EAClC2C,cAAc,CAACM,UAAU,GAAGjD,CAAC,GAAG,EAClC,CACF,CAAC;QACD,IAAMkD,MAAM,GAAGH,YAAY,CAACI,YAAY,CAACJ,YAAY,CAACE,UAAU,EAAE,IAAI,CAAC;QACvEV,SAAS,CAACa,IAAI,CAAC;UACbC,IAAI,EAAET,MAAM,CAAClB,IAAI,CACfiB,cAAc,CAACW,QAAQ,CAACX,cAAc,CAACM,UAAU,GAAGjD,CAAC,EAAE2C,cAAc,CAACM,UAAU,GAAGjD,CAAC,GAAG,EAAE,CAC3F,CAAC;UACDkD,MAAM,EAANA;QACF,CAAC,CAAC;MACJ;MACA,OAAOX,SAAS;IAClB;EAAC;IAAAG,GAAA;IAAArC,KAAA;MAAA,IAAAkD,QAAA,OAAAC,kBAAA,CAAAnB,OAAA,EAAAoB,YAAA,CAAApB,OAAA,CAAAqB,IAAA,CAQD,SAAAC,QAAcC,IAAY;QAAA,IAAAC,IAAA;UAAAC,qBAAA;UAAA9B,UAAA;UAAA+B,IAAA;UAAAC,SAAA;UAAAC,KAAA;UAAAC,GAAA;UAAAC,gBAAA;UAAAC,sBAAA;UAAAC,KAAA,GAAAC,SAAA;QAAA,OAAAb,YAAA,CAAApB,OAAA,CAAAkC,IAAA,UAAAC,SAAAC,QAAA;UAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAA1D,IAAA;YAAA;cAAE8C,IAAoB,GAAAQ,KAAA,CAAAtE,MAAA,QAAAsE,KAAA,QAAAM,SAAA,GAAAN,KAAA,MAAG,KAAK;cAAA,MAClDR,IAAI,KAAK,MAAM;gBAAAY,QAAA,CAAA1D,IAAA;gBAAA;cAAA;cACXiB,UAAU,IAAA8B,qBAAA,GAAG/B,iBAAiB,CAAC6C,IAAI,CAAC,UAACC,GAAG;gBAAA,OAAKA,GAAG,CAAClD,IAAI,CAACA,IAAI,CAACiC,IAAI,CAAC;cAAA,EAAC,cAAAE,qBAAA,uBAApDA,qBAAA,CAAsD9B,UAAU;cAAA,KAC/EA,UAAU;gBAAAyC,QAAA,CAAA1D,IAAA;gBAAA;cAAA;cAAAiD,SAAA,GAAA1E,0BAAA,CAEM0C,UAAU;cAAAyC,QAAA,CAAAC,IAAA;cAAAV,SAAA,CAAA9D,CAAA;YAAA;cAAA,KAAA+D,KAAA,GAAAD,SAAA,CAAA7D,CAAA,IAAAC,IAAA;gBAAAqE,QAAA,CAAA1D,IAAA;gBAAA;cAAA;cAAjBmD,GAAG,GAAAD,KAAA,CAAA5D,KAAA;cAAAoE,QAAA,CAAA1D,IAAA;cAAA,OACC,IAAI,CAAC+D,aAAa,IAAAC,MAAA,CAAInB,IAAI,EAAAmB,MAAA,CAAGb,GAAG,CAAE,CAAC;YAAA;cAAhDH,IAAI,GAAAU,QAAA,CAAAO,IAAA;cAAA,KACAjB,IAAI;gBAAAU,QAAA,CAAA1D,IAAA;gBAAA;cAAA;cAAA,OAAA0D,QAAA,CAAAQ,MAAA;YAAA;cAAAR,QAAA,CAAA1D,IAAA;cAAA;YAAA;cAAA0D,QAAA,CAAA1D,IAAA;cAAA;YAAA;cAAA0D,QAAA,CAAAC,IAAA;cAAAD,QAAA,CAAAS,EAAA,GAAAT,QAAA;cAAAT,SAAA,CAAA1D,CAAA,CAAAmE,QAAA,CAAAS,EAAA;YAAA;cAAAT,QAAA,CAAAC,IAAA;cAAAV,SAAA,CAAAxD,CAAA;cAAA,OAAAiE,QAAA,CAAAU,MAAA;YAAA;cAAA,KAINpB,IAAI;gBAAAU,QAAA,CAAA1D,IAAA;gBAAA;cAAA;cAAA,OAAA0D,QAAA,CAAAQ,MAAA,WACCrC,MAAM,CAAClB,IAAI,CAACqC,IAAI,CAAC;YAAA;cAAA,MAI1BF,IAAI,KAAK,KAAK;gBAAAY,QAAA,CAAA1D,IAAA;gBAAA;cAAA;cAAA0D,QAAA,CAAA1D,IAAA;cAAA,OACe,IAAI,CAAC+D,aAAa,IAAAC,MAAA,CAAInB,IAAI,QAAK,CAAC;YAAA;cAAzDO,gBAAgB,GAAAM,QAAA,CAAAO,IAAA;cAAA,KAClBb,gBAAgB;gBAAAM,QAAA,CAAA1D,IAAA;gBAAA;cAAA;cAAA,OAAA0D,QAAA,CAAAQ,MAAA,WACXrC,MAAM,CAAClB,IAAI,CAACyC,gBAAgB,CAAC;YAAA;cAAAM,QAAA,CAAA1D,IAAA;cAAA,OAED,IAAI,CAACqE,YAAY,CAACxB,IAAI,CAAC;YAAA;cAAtDQ,sBAAsB,GAAAK,QAAA,CAAAO,IAAA;cAAA,KACxBZ,sBAAsB;gBAAAK,QAAA,CAAA1D,IAAA;gBAAA;cAAA;cAAA,OAAA0D,QAAA,CAAAQ,MAAA,WACjBrC,MAAM,CAAClB,IAAI,CAAC0C,sBAAsB,CAAC;YAAA;cAAA,MAIxC,IAAIiB,KAAK,CAAC,8BAA8B,CAAC;YAAA;YAAA;cAAA,OAAAZ,QAAA,CAAAa,IAAA;UAAA;QAAA,GAAA3B,OAAA;MAAA,CAChD;MAAA,SAAA4B,QAAAC,EAAA;QAAA,OAAAjC,QAAA,CAAAkC,KAAA,OAAAnB,SAAA;MAAA;MAAA,OAAAiB,OAAA;IAAA;EAAA;IAAA7C,GAAA;IAAArC,KAAA;MAAA,IAAAqF,cAAA,OAAAlC,kBAAA,CAAAnB,OAAA,EAAAoB,YAAA,CAAApB,OAAA,CAAAqB,IAAA,CAOD,SAAAiC,SAA4B/B,IAAY;QAAA,IAAAG,IAAA,EAAA6B,WAAA,EAAAC,gBAAA;QAAA,OAAApC,YAAA,CAAApB,OAAA,CAAAkC,IAAA,UAAAuB,UAAAC,SAAA;UAAA,kBAAAA,SAAA,CAAArB,IAAA,GAAAqB,SAAA,CAAAhF,IAAA;YAAA;cAAAgF,SAAA,CAAAhF,IAAA;cAAA,OACnB,IAAI,CAACqE,YAAY,CAACxB,IAAI,CAAC;YAAA;cAApCG,IAAI,GAAAgC,SAAA,CAAAf,IAAA;cAAA,IACLjB,IAAI;gBAAAgC,SAAA,CAAAhF,IAAA;gBAAA;cAAA;cAAA,OAAAgF,SAAA,CAAAd,MAAA,WACAN,SAAS;YAAA;cAAA,KAEd,OAAO,CAAChD,IAAI,CAACiC,IAAI,CAAC;gBAAAmC,SAAA,CAAAhF,IAAA;gBAAA;cAAA;cACd6E,WAAW,GAAG,IAAII,4BAAe,CAAC,CAAC;cAAAD,SAAA,CAAAhF,IAAA;cAAA,OAEV6E,WAAW,CAACK,UAAU,CAAClC,IAAI,CAAC;YAAA;cAArD8B,gBAAgB,GAAAE,SAAA,CAAAf,IAAA;cAAA,OAAAe,SAAA,CAAAd,MAAA,WACfY,gBAAgB;YAAA;cAAA,OAAAE,SAAA,CAAAd,MAAA,WAElBrC,MAAM,CAAClB,IAAI,CAACqC,IAAI,CAAC;YAAA;YAAA;cAAA,OAAAgC,SAAA,CAAAT,IAAA;UAAA;QAAA,GAAAK,QAAA;MAAA,CACzB;MAAA,SAAAb,cAAAoB,GAAA;QAAA,OAAAR,cAAA,CAAAD,KAAA,OAAAnB,SAAA;MAAA;MAAA,OAAAQ,aAAA;IAAA;EAAA;IAAApC,GAAA;IAAArC,KAAA;MAAA,IAAA8F,aAAA,OAAA3C,kBAAA,CAAAnB,OAAA,EAAAoB,YAAA,CAAApB,OAAA,CAAAqB,IAAA,CAOD,SAAA0C,SAA2BxC,IAAY;QAAA,IAAAyC,QAAA,EAAAC,QAAA,EAAAC,eAAA,EAAAC,cAAA;QAAA,OAAA/C,YAAA,CAAApB,OAAA,CAAAkC,IAAA,UAAAkC,UAAAC,SAAA;UAAA,kBAAAA,SAAA,CAAAhC,IAAA,GAAAgC,SAAA,CAAA3F,IAAA;YAAA;cAC/BsF,QAAQ,GAAGzD,MAAM,CAAClB,IAAI,CAAC,IAAAiF,WAAG,EAAC/C,IAAI,CAAC,EAAE,KAAK,CAAC;cACxC0C,QAAQ,GAAG,IAAI,CAAC/D,SAAS,CAACqC,IAAI,CAAC,UAACC,GAAG;gBAAA,OAAKjC,MAAM,CAACgE,OAAO,CAAC/B,GAAG,CAACxB,IAAI,EAAEgD,QAAQ,CAAC,KAAK,CAAC;cAAA,EAAC;cAAA,IAClFC,QAAQ;gBAAAI,SAAA,CAAA3F,IAAA;gBAAA;cAAA;cAAA,OAAA2F,SAAA,CAAAzB,MAAA,WACJN,SAAS;YAAA;cAAA+B,SAAA,CAAA3F,IAAA;cAAA,OAGY,IAAA8F,wCAAuB,EAACP,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEpD,MAAM,EAAE,IAAI,CAAChB,WAAW,CAAC;YAAA;cAAnFqE,eAAe,GAAAG,SAAA,CAAA1B,IAAA;cAAA,IAChBuB,eAAe;gBAAAG,SAAA,CAAA3F,IAAA;gBAAA;cAAA;cAAA,OAAA2F,SAAA,CAAAzB,MAAA,WACXN,SAAS;YAAA;cAGZ6B,cAAc,GAAG,IAAI,CAACtE,WAAW,CAACX,KAAK,CAC3CgF,eAAe,CAACO,cAAc,EAC9BP,eAAe,CAACO,cAAc,GAAGP,eAAe,CAACQ,cACnD,CAAC;cAAA,OAAAL,SAAA,CAAAzB,MAAA,WAEMuB,cAAc;YAAA;YAAA;cAAA,OAAAE,SAAA,CAAApB,IAAA;UAAA;QAAA,GAAAc,QAAA;MAAA,CACtB;MAAA,SAAAhB,aAAA4B,GAAA;QAAA,OAAAb,aAAA,CAAAV,KAAA,OAAAnB,SAAA;MAAA;MAAA,OAAAc,YAAA;IAAA;EAAA;EAAA,OAAAnD,WAAA;AAAA;AAAAgF,OAAA,CAAAhF,WAAA,GAAAA,WAAA"}
|
|
@@ -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:
|
|
18
|
-
CD_UNCOMPRESSED_SIZE_OFFSET:
|
|
19
|
-
CD_FILE_NAME_LENGTH_OFFSET:
|
|
20
|
-
CD_EXTRA_FIELD_LENGTH_OFFSET:
|
|
21
|
-
CD_LOCAL_HEADER_OFFSET_OFFSET:
|
|
22
|
-
CD_FILE_NAME_OFFSET:
|
|
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.
|
|
24
|
+
_context.t0 = BigInt;
|
|
25
|
+
_context.next = 4;
|
|
25
26
|
return buffer.getUint32(headerOffset + offsets.CD_COMPRESSED_SIZE_OFFSET);
|
|
26
|
-
case
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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.
|
|
32
|
+
return buffer.getUint32(headerOffset + offsets.CD_UNCOMPRESSED_SIZE_OFFSET);
|
|
34
33
|
case 9:
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
_context.t3 = _context.sent;
|
|
35
|
+
uncompressedSize = (0, _context.t2)(_context.t3);
|
|
37
36
|
_context.next = 13;
|
|
38
|
-
return buffer.
|
|
37
|
+
return buffer.getUint16(headerOffset + offsets.CD_FILE_NAME_LENGTH_OFFSET);
|
|
39
38
|
case 13:
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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
|
|
49
|
+
case 22:
|
|
46
50
|
oldFormatOffset = _context.sent;
|
|
47
|
-
fileDataOffset = oldFormatOffset;
|
|
48
|
-
|
|
49
|
-
|
|
51
|
+
fileDataOffset = BigInt(oldFormatOffset);
|
|
52
|
+
offsetInZip64Data = 4n;
|
|
53
|
+
if (!(uncompressedSize === BigInt(0xffffffff))) {
|
|
54
|
+
_context.next = 30;
|
|
50
55
|
break;
|
|
51
56
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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
|
-
|
|
57
|
-
|
|
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 =
|
|
60
|
-
return buffer.
|
|
61
|
-
case
|
|
77
|
+
_context.next = 38;
|
|
78
|
+
return buffer.getBigUint64(extraOffset + offsetInZip64Data);
|
|
79
|
+
case 38:
|
|
62
80
|
fileDataOffset = _context.sent;
|
|
63
|
-
case
|
|
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
|
|
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","
|
|
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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"}
|