"use strict";
|
Object.defineProperty(exports, "__esModule", { value: true });
|
exports.FileWithEmbeddedBlockMapDifferentialDownloader = void 0;
|
const fs_extra_1 = require("fs-extra");
|
const DifferentialDownloader_1 = require("./DifferentialDownloader");
|
const zlib_1 = require("zlib");
|
class FileWithEmbeddedBlockMapDifferentialDownloader extends DifferentialDownloader_1.DifferentialDownloader {
|
async download() {
|
const packageInfo = this.blockAwareFileInfo;
|
const fileSize = packageInfo.size;
|
const offset = fileSize - (packageInfo.blockMapSize + 4);
|
this.fileMetadataBuffer = await this.readRemoteBytes(offset, fileSize - 1);
|
const newBlockMap = readBlockMap(this.fileMetadataBuffer.slice(0, this.fileMetadataBuffer.length - 4));
|
await this.doDownload(await readEmbeddedBlockMapData(this.options.oldFile), newBlockMap);
|
}
|
}
|
exports.FileWithEmbeddedBlockMapDifferentialDownloader = FileWithEmbeddedBlockMapDifferentialDownloader;
|
function readBlockMap(data) {
|
return JSON.parse(zlib_1.inflateRawSync(data).toString());
|
}
|
async function readEmbeddedBlockMapData(file) {
|
const fd = await fs_extra_1.open(file, "r");
|
try {
|
const fileSize = (await fs_extra_1.fstat(fd)).size;
|
const sizeBuffer = Buffer.allocUnsafe(4);
|
await fs_extra_1.read(fd, sizeBuffer, 0, sizeBuffer.length, fileSize - sizeBuffer.length);
|
const dataBuffer = Buffer.allocUnsafe(sizeBuffer.readUInt32BE(0));
|
await fs_extra_1.read(fd, dataBuffer, 0, dataBuffer.length, fileSize - sizeBuffer.length - dataBuffer.length);
|
await fs_extra_1.close(fd);
|
return readBlockMap(dataBuffer);
|
}
|
catch (e) {
|
await fs_extra_1.close(fd);
|
throw e;
|
}
|
}
|
//# sourceMappingURL=FileWithEmbeddedBlockMapDifferentialDownloader.js.map
|