node-hk-zip
Version:
UNZIP implementation for NodeJS
65 lines • 4.6 kB
JavaScript
"use strict";
/**
* @fileOverview Definition of LocalFileHeader class
*/
Object.defineProperty(exports, "__esModule", { value: true });
const InvalidLocalFileHeaderError_1 = require("../errors/InvalidLocalFileHeaderError");
const ZipByteMap_1 = require("../ZipByteMap");
const HeaderMap_1 = require("./HeaderMap");
/**
* Class representing a LocalFileHeader
* @extends HeaderMap<ILocalFileByteMap>
*/
class LocalFileHeader extends HeaderMap_1.HeaderMap {
/**
* Creates a LocalFileHeader object
* @param {Buffer} input - Zip binary data
* @param {number} offset - Offset of the header
* @return {LocalFileHeader} - LocalFileHeader object
*/
constructor(input, offset) {
super(ZipByteMap_1.LOCAL_FILE_HEADER_MAP, input, offset);
this.parsed = this.loadBinaryHeader();
}
/**
* Combines compressed data offset
* @param {number} offset - LocalFileHeader offset
* @return {number} offset - Compressed data offset
*/
getCompressedSliceOffset(offset) {
return (offset +
this.map.SIZE +
this.parsed.FILENAME_LENGTH +
this.parsed.EXTRA_FIELD_LENGTH);
}
/**
* Parses local file header using ByteMap
* @return {IParsedLocalFile} - ParsedLocalFile object
*/
loadBinaryHeader() {
if (!this.isValidHeaderData()) {
throw new InvalidLocalFileHeaderError_1.InvalidLocalFileHeaderError();
}
return {
VERSION: this.data.readUInt16LE(this.map.VERSION),
GENERAL_BIT_FLAG: this.data.readUInt16LE(this.map.GENERAL_BIT_FLAG),
COMPRESSION_METHOD: this.data.readUInt16LE(this.map.COMPRESSION_METHOD),
MODIFICATION_TIME: this.data.readUInt16LE(this.map.MODIFICATION_TIME),
MODIFICATION_DATE: this.data.readUInt16LE(this.map.MODIFICATION_DATE),
CRC: this.data.readUInt32LE(this.map.CRC),
COMPRESSED_SIZE: this.data.readUInt32LE(this.map.COMPRESSED_SIZE),
UNCOMPRESSED_SIZE: this.data.readUInt32LE(this.map.UNCOMPRESSED_SIZE),
FILENAME_LENGTH: this.data.readUInt16LE(this.map.FILENAME_LENGTH),
EXTRA_FIELD_LENGTH: this.data.readUInt16LE(this.map.EXTRA_FIELD_LENGTH)
};
}
/**
* Getter for parsed CRC value
* @return {number} - CRC-32 value
*/
getCRC32() {
return this.parsed.CRC;
}
}
exports.LocalFileHeader = LocalFileHeader;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9jYWxGaWxlSGVhZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9oZWFkZXJzL0xvY2FsRmlsZUhlYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7O0FBRUgsdUZBQW9GO0FBS3BGLDhDQUFzRDtBQUN0RCwyQ0FBd0M7QUFFeEM7OztHQUdHO0FBQ0gsTUFBYSxlQUFnQixTQUFRLHFCQUE0QjtJQUcvRDs7Ozs7T0FLRztJQUNILFlBQVksS0FBYSxFQUFFLE1BQWM7UUFDdkMsS0FBSyxDQUFDLGtDQUFxQixFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksd0JBQXdCLENBQUMsTUFBYztRQUM1QyxPQUFPLENBQ0wsTUFBTTtZQUNOLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSTtZQUNiLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZTtZQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUMvQixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNJLGdCQUFnQjtRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUU7WUFDN0IsTUFBTSxJQUFJLHlEQUEyQixFQUFFLENBQUM7U0FDekM7UUFDRCxPQUFPO1lBQ0wsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO1lBQ2pELGdCQUFnQixFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUM7WUFDbkUsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQztZQUN2RSxpQkFBaUIsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDO1lBQ3JFLGlCQUFpQixFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUM7WUFDckUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO1lBQ3pDLGVBQWUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQztZQUNqRSxpQkFBaUIsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDO1lBQ3JFLGVBQWUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQztZQUNqRSxrQkFBa0IsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDO1NBQ3hFLENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksUUFBUTtRQUNiLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDekIsQ0FBQztDQUNGO0FBekRELDBDQXlEQyJ9