UNPKG

ajsfw

Version:
84 lines (83 loc) 4.09 kB
"use strict"; 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;