r2-utils-js
Version:
Readium 2 'utils' for NodeJS (TypeScript)
310 lines • 18 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ZipExplodedHTTP = void 0;
var tslib_1 = require("tslib");
var debug_ = require("debug");
var request = require("request");
var requestPromise = require("request-promise-native");
var stream_1 = require("stream");
var url_1 = require("url");
var zip_1 = require("./zip");
var debug = debug_("r2:utils#zip/zip-ex-http");
var ZipExplodedHTTP = (function (_super) {
tslib_1.__extends(ZipExplodedHTTP, _super);
function ZipExplodedHTTP(urlStr) {
var _this = _super.call(this) || this;
_this.urlStr = urlStr;
debug("ZipExplodedHTTP: ".concat(urlStr));
return _this;
}
ZipExplodedHTTP.loadPromise = function (urlStr) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
return [2, Promise.resolve(new ZipExplodedHTTP(urlStr))];
});
});
};
ZipExplodedHTTP.prototype.freeDestroy = function () {
debug("freeDestroy: ZipExplodedHTTP -- " + this.urlStr);
};
ZipExplodedHTTP.prototype.entriesCount = function () {
return 0;
};
ZipExplodedHTTP.prototype.hasEntries = function () {
return true;
};
ZipExplodedHTTP.prototype.hasEntry = function (_entryPath) {
return true;
};
ZipExplodedHTTP.prototype.hasEntryAsync = function (entryPath) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var url, urlStrEntry;
var _this = this;
return tslib_1.__generator(this, function (_a) {
debug("hasEntryAsync: ".concat(entryPath));
url = new url_1.URL(this.urlStr);
url.pathname += entryPath;
urlStrEntry = url.toString();
debug("urlStrEntry: ", urlStrEntry);
return [2, new Promise(function (topresolve, _topreject) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
var failure, success, needsStreamingResponse, promise, _err_1, response, err_1;
var _this = this;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
failure = function (err) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
debug(err);
topresolve(false);
return [2];
});
}); };
success = function (response) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
if (response.statusCode && (response.statusCode < 200 || response.statusCode >= 300)) {
topresolve(false);
return [2];
}
topresolve(true);
return [2];
});
}); };
needsStreamingResponse = true;
if (!needsStreamingResponse) return [3, 5];
promise = new Promise(function (resolve, reject) {
request.get({
headers: {},
method: "HEAD",
uri: urlStrEntry,
})
.on("response", function (response) { 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, , 4]);
return [4, success(response)];
case 1:
_a.sent();
return [3, 4];
case 2:
successError_1 = _a.sent();
return [4, failure(successError_1)];
case 3:
_a.sent();
return [2];
case 4:
resolve();
return [2];
}
});
}); })
.on("error", function (err) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4, failure(err)];
case 1:
_a.sent();
reject();
return [2];
}
});
}); });
});
_a.label = 1;
case 1:
_a.trys.push([1, 3, , 4]);
return [4, promise];
case 2:
_a.sent();
return [3, 4];
case 3:
_err_1 = _a.sent();
return [3, 4];
case 4: return [3, 11];
case 5:
response = void 0;
_a.label = 6;
case 6:
_a.trys.push([6, 9, , 11]);
return [4, requestPromise({
headers: {},
method: "HEAD",
resolveWithFullResponse: true,
uri: urlStrEntry,
})];
case 7:
response = _a.sent();
return [4, success(response)];
case 8:
_a.sent();
return [3, 11];
case 9:
err_1 = _a.sent();
return [4, failure(err_1)];
case 10:
_a.sent();
return [3, 11];
case 11: return [2];
}
});
}); })];
});
});
};
ZipExplodedHTTP.prototype.getEntries = function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var _this = this;
return tslib_1.__generator(this, function (_a) {
return [2, new Promise(function (_resolve, reject) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
reject("Not implemented.");
return [2];
});
}); })];
});
});
};
ZipExplodedHTTP.prototype.entryStreamPromise = function (entryPath) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var url, urlStrEntry;
var _this = this;
return tslib_1.__generator(this, function (_a) {
debug("entryStreamPromise: ".concat(entryPath));
url = new url_1.URL(this.urlStr);
url.pathname += entryPath;
urlStrEntry = url.toString();
debug("urlStrEntry: ", urlStrEntry);
return [2, new Promise(function (topresolve, topreject) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
var failure, success, needsStreamingResponse, promise, _err_2, response, err_2;
var _this = this;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
failure = function (err) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
debug(err);
topreject(err);
return [2];
});
}); };
success = function (response) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
var length, lengthStr, stream, streamAndLength;
var _this = this;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
if (!(response.statusCode && (response.statusCode < 200 || response.statusCode >= 300))) return [3, 2];
return [4, failure("HTTP CODE " + response.statusCode)];
case 1:
_a.sent();
return [2];
case 2:
length = 0;
lengthStr = response.headers["content-length"];
if (lengthStr) {
length = parseInt(lengthStr, 10);
}
stream = new stream_1.PassThrough();
response.pipe(stream);
streamAndLength = {
length: length,
reset: function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
return [2, this.entryStreamPromise(entryPath)];
});
}); },
stream: stream,
};
topresolve(streamAndLength);
return [2];
}
});
}); };
needsStreamingResponse = true;
if (!needsStreamingResponse) return [3, 5];
promise = new Promise(function (resolve, reject) {
request.get({
headers: {},
method: "GET",
uri: urlStrEntry,
})
.on("response", function (response) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
var successError_2;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 2, , 4]);
return [4, success(response)];
case 1:
_a.sent();
return [3, 4];
case 2:
successError_2 = _a.sent();
return [4, failure(successError_2)];
case 3:
_a.sent();
return [2];
case 4:
resolve();
return [2];
}
});
}); })
.on("error", function (err) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4, failure(err)];
case 1:
_a.sent();
reject();
return [2];
}
});
}); });
});
_a.label = 1;
case 1:
_a.trys.push([1, 3, , 4]);
return [4, promise];
case 2:
_a.sent();
return [3, 4];
case 3:
_err_2 = _a.sent();
return [3, 4];
case 4: return [3, 11];
case 5:
response = void 0;
_a.label = 6;
case 6:
_a.trys.push([6, 9, , 11]);
return [4, requestPromise({
headers: {},
method: "GET",
resolveWithFullResponse: true,
uri: urlStrEntry,
})];
case 7:
response = _a.sent();
return [4, success(response)];
case 8:
_a.sent();
return [3, 11];
case 9:
err_2 = _a.sent();
return [4, failure(err_2)];
case 10:
_a.sent();
return [3, 11];
case 11: return [2];
}
});
}); })];
});
});
};
return ZipExplodedHTTP;
}(zip_1.Zip));
exports.ZipExplodedHTTP = ZipExplodedHTTP;
//# sourceMappingURL=zip-ex-http.js.map