nativescript
Version:
Command-line interface for building NativeScript projects
130 lines • 5.4 kB
JavaScript
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.HmrStatusService = void 0;
const decorators_1 = require("../common/decorators");
const constants_1 = require("../common/constants");
const yok_1 = require("../common/yok");
class HmrStatusService {
constructor($logParserService, $devicePlatformsConstants, $logger) {
this.$logParserService = $logParserService;
this.$devicePlatformsConstants = $devicePlatformsConstants;
this.$logger = $logger;
this.hashOperationStatuses = {};
this.intervals = {};
}
getHmrStatus(deviceId, operationHash) {
return new Promise((resolve, reject) => {
const key = `${deviceId}${operationHash}`;
let retryCount = 40;
this.intervals[key] = setInterval(() => {
const status = this.getStatusByKey(key);
if (status || retryCount === 0) {
clearInterval(this.intervals[key]);
this.intervals[key] = null;
resolve(status);
}
else {
retryCount--;
}
}, 250);
});
}
watchHmrStatus(deviceId, operationHash) {
this.setData(deviceId, operationHash);
}
attachToHmrStatusEvent() {
this.$logParserService.addParseRule({
regex: HmrStatusService.HMR_STATUS_LOG_REGEX,
handler: this.handleHmrStatusFound.bind(this),
name: "hmrStatus",
});
this.$logParserService.addParseRule({
regex: constants_1.IOS_APP_CRASH_LOG_REG_EXP,
handler: this.handleAppCrash.bind(this),
name: "appCrashHmr",
platform: this.$devicePlatformsConstants.iOS.toLowerCase(),
});
this.$logParserService.addParseRule({
regex: constants_1.FAIL_LIVESYNC_LOG_REGEX,
handler: this.handleAppCrash.bind(this),
name: "failedLiveSync",
platform: this.$devicePlatformsConstants.iOS.toLowerCase(),
});
// webpack5
const statusStringMap = {
success: constants_1.HmrConstants.HMR_SUCCESS_STATUS,
failure: constants_1.HmrConstants.HMR_ERROR_STATUS,
};
this.$logParserService.addParseRule({
regex: /\[HMR]\[(.+)]\s*(\w+)\s*\|/,
handler: (matches, deviceId) => {
const [hash, status] = matches.slice(1);
const mappedStatus = statusStringMap[status.trim()];
if (mappedStatus) {
this.setData(deviceId, hash, statusStringMap[status]);
}
},
name: "hmr-status",
});
}
handleAppCrash(matches, deviceId) {
for (const operationId in this.hashOperationStatuses) {
const operation = this.hashOperationStatuses[operationId];
if (operationId.startsWith(deviceId) && !operation.status) {
operation.status = constants_1.HmrConstants.HMR_ERROR_STATUS;
}
}
}
handleHmrStatusFound(matches, deviceId) {
const message = matches[1].trim();
const hash = matches[2];
let status;
switch (message) {
case HmrStatusService.SUCCESS_MESSAGE: {
status = constants_1.HmrConstants.HMR_SUCCESS_STATUS;
break;
}
case HmrStatusService.FAILED_MESSAGE: {
status = constants_1.HmrConstants.HMR_ERROR_STATUS;
break;
}
default: {
status = null;
break;
}
}
this.$logger.trace("Found hmr status.", { status, hash });
if (status) {
this.setData(deviceId, hash, status);
}
}
getStatusByKey(key) {
if (this.hashOperationStatuses[key]) {
return this.hashOperationStatuses[key].status;
}
return null;
}
setData(deviceId, operationHash, status) {
const key = `${deviceId}${operationHash}`;
if (!this.hashOperationStatuses[key]) {
this.hashOperationStatuses[key] = {};
}
this.hashOperationStatuses[key].status = status;
}
}
exports.HmrStatusService = HmrStatusService;
HmrStatusService.HMR_STATUS_LOG_REGEX = /([a-z A-Z]*) hmr hash ([a-z0-9]*)\./;
HmrStatusService.STARTED_MESSAGE = "Checking for updates to the bundle with";
HmrStatusService.SUCCESS_MESSAGE = "Successfully applied update with";
HmrStatusService.FAILED_MESSAGE = "Cannot apply update with";
__decorate([
(0, decorators_1.cache)()
], HmrStatusService.prototype, "attachToHmrStatusEvent", null);
yok_1.injector.register("hmrStatusService", HmrStatusService);
//# sourceMappingURL=hmr-status-service.js.map