r2-utils-js
Version:
Readium 2 'utils' for NodeJS (TypeScript)
102 lines • 4.15 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.HttpZipReader = void 0;
var tslib_1 = require("tslib");
var debug_ = require("debug");
var request = require("request");
var stream_1 = require("stream");
var yauzl = require("yauzl");
var BufferUtils_1 = require("../stream/BufferUtils");
var debug = debug_("r2:utils#zip/zip2RandomAccessReader_Http");
var HttpZipReader = (function (_super) {
tslib_1.__extends(HttpZipReader, _super);
function HttpZipReader(url, byteLength) {
var _this = _super.call(this) || this;
_this.url = url;
_this.byteLength = byteLength;
_this.firstBuffer = undefined;
_this.firstBufferStart = 0;
_this.firstBufferEnd = 0;
return _this;
}
HttpZipReader.prototype._readStreamForRange = function (start, end) {
var _this = this;
if (this.firstBuffer && start >= this.firstBufferStart && end <= this.firstBufferEnd) {
var begin = start - this.firstBufferStart;
var stop_1 = end - this.firstBufferStart;
return (0, BufferUtils_1.bufferToStream)(this.firstBuffer.slice(begin, stop_1));
}
var stream = new stream_1.PassThrough();
var lastByteIndex = end - 1;
var range = "".concat(start, "-").concat(lastByteIndex);
var failure = function (err) {
debug(err);
};
var success = function (res) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
var buffer, err_1;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
if (res.statusCode && (res.statusCode < 200 || res.statusCode >= 300)) {
failure("HTTP CODE " + res.statusCode);
return [2];
}
if (!this.firstBuffer) return [3, 1];
res.pipe(stream);
return [3, 6];
case 1:
buffer = void 0;
_a.label = 2;
case 2:
_a.trys.push([2, 4, , 5]);
return [4, (0, BufferUtils_1.streamToBufferPromise)(res)];
case 3:
buffer = _a.sent();
return [3, 5];
case 4:
err_1 = _a.sent();
debug(err_1);
stream.end();
return [2];
case 5:
debug("streamToBufferPromise: ".concat(buffer.length));
this.firstBuffer = buffer;
this.firstBufferStart = start;
this.firstBufferEnd = end;
stream.write(buffer);
stream.end();
_a.label = 6;
case 6: return [2];
}
});
}); };
request.get({
headers: { Range: "bytes=".concat(range) },
method: "GET",
uri: this.url,
})
.on("response", function (res) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
var successError_1;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 2, , 3]);
return [4, success(res)];
case 1:
_a.sent();
return [3, 3];
case 2:
successError_1 = _a.sent();
failure(successError_1);
return [2];
case 3: return [2];
}
});
}); })
.on("error", failure);
return stream;
};
return HttpZipReader;
}(yauzl.RandomAccessReader));
exports.HttpZipReader = HttpZipReader;
//# sourceMappingURL=zip2RandomAccessReader_Http.js.map