nativescript
Version:
Command-line interface for building NativeScript projects
128 lines • 5.74 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.IOSDebuggerPortService = void 0;
const constants_1 = require("../common/constants");
const decorators_1 = require("../common/decorators");
const constants_2 = require("../constants");
const yok_1 = require("../common/yok");
class IOSDebuggerPortService {
constructor($logParserService, $iOSNotification, $devicePlatformsConstants, $logger) {
this.$logParserService = $logParserService;
this.$iOSNotification = $iOSNotification;
this.$devicePlatformsConstants = $devicePlatformsConstants;
this.$logger = $logger;
this.mapDebuggerPortData = {};
}
async getPort(data) {
return new Promise((resolve, reject) => {
const key = `${data.deviceId}${data.appId}`;
const retryInterval = 500;
let retryCount = Math.max((constants_2.APPLICATION_RESPONSE_TIMEOUT_SECONDS * 1000) / retryInterval, 10);
const interval = setInterval(() => {
const port = this.getPortByKey(key);
if (port || retryCount === 0) {
clearInterval(interval);
resolve(port);
}
else {
if (this.mapDebuggerPortData[key] &&
this.mapDebuggerPortData[key].error) {
clearInterval(interval);
reject(this.mapDebuggerPortData[key].error);
}
else {
retryCount--;
}
}
}, retryInterval);
});
}
async attachToDebuggerPortFoundEvent(appId) {
this.currentAppId = appId;
this.attachToDebuggerPortFoundEventCore();
this.attachToAttachRequestEvent();
}
attachToDebuggerPortFoundEventCore() {
this.$logParserService.addParseRule({
regex: IOSDebuggerPortService.DEBUG_PORT_LOG_REGEX,
handler: this.handlePortFound.bind(this),
name: "debugPort",
platform: this.$devicePlatformsConstants.iOS.toLowerCase(),
});
this.$logParserService.addParseRule({
regex: constants_1.IOS_APP_CRASH_LOG_REG_EXP,
handler: this.handleAppCrash.bind(this),
name: "appCrash",
platform: this.$devicePlatformsConstants.iOS.toLowerCase(),
});
}
handleAppCrash(matches, deviceId) {
const data = {
port: 0,
appId: this.currentAppId,
deviceId,
error: new Error("The application has been terminated."),
};
this.clearTimeout(data);
this.setData(data, { port: data.port, error: data.error });
}
handlePortFound(matches, deviceId) {
const data = {
port: parseInt(matches[1]),
appId: matches[2],
deviceId,
};
this.$logger.trace(constants_1.DEBUGGER_PORT_FOUND_EVENT_NAME, data);
this.clearTimeout(data);
this.setData(data, { port: data.port });
}
attachToAttachRequestEvent() {
this.$iOSNotification.on(constants_1.ATTACH_REQUEST_EVENT_NAME, (data) => {
this.$logger.trace(constants_1.ATTACH_REQUEST_EVENT_NAME, data);
const timer = setTimeout(() => {
this.clearTimeout(data);
if (!this.getPortByKey(`${data.deviceId}${data.appId}`)) {
this.$logger.warn(`NativeScript debugger was not able to get inspector socket port on device ${data.deviceId} for application ${data.appId}.`);
}
}, constants_2.APPLICATION_RESPONSE_TIMEOUT_SECONDS * 1000);
this.setData(data, { port: null, timer });
});
}
getPortByKey(key) {
if (this.mapDebuggerPortData[key] && this.mapDebuggerPortData[key].port) {
return this.mapDebuggerPortData[key].port;
}
return null;
}
setData(data, storedData) {
const key = `${data.deviceId}${data.appId}`;
if (!this.mapDebuggerPortData[key]) {
this.mapDebuggerPortData[key] = {};
}
this.mapDebuggerPortData[key].port = storedData.port;
this.mapDebuggerPortData[key].timer = storedData.timer;
this.mapDebuggerPortData[key].error = storedData.error;
}
clearTimeout(data) {
const storedData = this.mapDebuggerPortData[`${data.deviceId}${data.appId}`];
if (storedData && typeof storedData.timer === "number") {
clearTimeout(storedData.timer);
}
}
}
exports.IOSDebuggerPortService = IOSDebuggerPortService;
IOSDebuggerPortService.DEBUG_PORT_LOG_REGEX = /NativeScript debugger has opened inspector socket on port (\d+?) for (.*)[.]/;
__decorate([
(0, decorators_1.cache)()
], IOSDebuggerPortService.prototype, "attachToDebuggerPortFoundEventCore", null);
__decorate([
(0, decorators_1.cache)()
], IOSDebuggerPortService.prototype, "attachToAttachRequestEvent", null);
yok_1.injector.register("iOSDebuggerPortService", IOSDebuggerPortService);
//# sourceMappingURL=ios-debugger-port-service.js.map