ajsfw
Version:
Ajs Framework
84 lines (83 loc) • 4.09 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var logger = require("ajsfw/dbg/logger");
var utils = require("ajsfw/utils");
var logmsg = require("./Strings_Log.Debug");
var ResourceLoader = (function () {
function ResourceLoader() {
}
ResourceLoader.prototype.loadResource = function (url, isBinary, lastModified) {
return __awaiter(this, void 0, void 0, function () {
var requestData;
return __generator(this, function (_a) {
logger.log(logger.LogType.Info, 0, logmsg.LOG_AJSRES, this, logmsg.LOG_REQUESTING_RESOURCE + url, isBinary, lastModified);
lastModified = lastModified || utils.minDate();
requestData = {
url: url,
isBinary: isBinary,
lastModified: lastModified,
startTime: new Date(),
};
return [2, this.__loadResource(requestData)];
});
});
};
ResourceLoader.prototype.__loadResource = function (requestData) {
var _this = this;
return new Promise(function (resolve, reject) {
logger.log(logger.LogType.Info, 0, logmsg.LOG_AJSRES, _this, logmsg.LOG_XHR_INIT);
var xhr = new XMLHttpRequest();
xhr.open("GET", encodeURI(requestData.url));
xhr.resourceRequestData = requestData;
if (requestData.isBinary) {
xhr.responseType = "arraybuffer";
}
if (requestData.lastModified !== null) {
xhr.setRequestHeader("If-Modified-Since", utils.ie10UTCDate(requestData.lastModified));
}
xhr.addEventListener("readystatechange", function (e) {
_this._xhrStatusChanged(e, resolve);
});
xhr.send();
});
};
ResourceLoader.prototype._xhrStatusChanged = function (e, resolve) {
var xhr = e.target;
var requestData = xhr.resourceRequestData;
logger.log(logger.LogType.Info, 3, logmsg.LOG_AJSRES, this, logmsg.LOG_XHR_READY_STATE + xhr.readyState + logmsg.LOG_XHR_READY_STATE_URL + xhr.resourceRequestData.url);
if (xhr.readyState === xhr.DONE) {
var responseData = {
type: xhr.responseType,
data: requestData.isBinary ? xhr.response : xhr.responseText,
httpStatus: xhr.status,
startTime: requestData.startTime,
endTime: new Date()
};
logger.log(logger.LogType.Info, 0, logmsg.LOG_AJSRES, this, logmsg.LOG_XHR_FOR + requestData.url + logmsg.LOG_XHR_RDY_IN + (responseData.endTime.getTime() - responseData.startTime.getTime()) +
logmsg.LOG_XHR_MS + xhr.status + " " + xhr.statusText);
if (responseData.httpStatus === 200 && typeof (responseData.data) === "string") {
var tmp = responseData.data.substr(0, 50);
if (tmp.indexOf("<!--offline-->") !== -1) {
responseData.httpStatus = 304;
logger.log(logger.LogType.Info, 0, logmsg.LOG_AJSRES, this, logmsg.LOG_XHR_OFFLINE_DETECTED);
}
}
if (responseData.httpStatus === 200 &&
responseData.data instanceof ArrayBuffer) {
var buffer = new Int8Array(responseData.data);
var count = buffer.byteLength < 50 ? buffer.byteLength : 50;
var str = "";
for (var i = 0; i < count; i++) {
str += String.fromCharCode(buffer[i]);
}
if (str.indexOf("<!--offline-->") !== -1) {
responseData.httpStatus = 304;
logger.log(logger.LogType.Info, 0, logmsg.LOG_AJSRES, this, logmsg.LOG_XHR_OFFLINE_DETECTED);
}
}
resolve(responseData);
}
};
return ResourceLoader;
}());
exports.ResourceLoader = ResourceLoader;