nativescript
Version:
Command-line interface for building NativeScript projects
72 lines • 3.18 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
// NOTE: This file is used to track data in a separate process.
// The instances here are not shared with the ones in main CLI process.
const fs = require("fs");
const analytics_broker_1 = require("./analytics-broker");
const file_log_service_1 = require("../../detached-processes/file-log-service");
const yok_1 = require("../../common/yok");
const pathToBootstrap = process.argv[2];
if (!pathToBootstrap || !fs.existsSync(pathToBootstrap)) {
throw new Error("Invalid path to bootstrap.");
}
const logFile = process.argv[3];
// After requiring the bootstrap we can use $injector
require(pathToBootstrap);
const analyticsLoggingService = yok_1.injector.resolve(file_log_service_1.FileLogService, { logFile });
analyticsLoggingService.logData({ message: "Initializing AnalyticsBroker." });
const analyticsBroker = yok_1.injector.resolve(analytics_broker_1.AnalyticsBroker, {
pathToBootstrap,
analyticsLoggingService,
});
let trackingQueue = Promise.resolve();
const sendDataForTracking = async (data) => {
trackingQueue = trackingQueue.then(() => analyticsBroker.sendDataForTracking(data));
await trackingQueue;
};
const finishTracking = async (data) => {
analyticsLoggingService.logData({
message: `analytics-broker-process finish tracking started`,
});
await trackingQueue;
analyticsLoggingService.logData({
message: `analytics-broker-process tracking finished`,
});
};
const killCurrentProcessGracefully = () => {
yok_1.injector.dispose();
process.exit();
};
process.on("message", async (data) => {
analyticsLoggingService.logData({
message: `analytics-broker-process received message of type: ${JSON.stringify(data)}`,
});
if (data.type === "FinishTracking" /* TrackingTypes.FinishTracking */) {
await finishTracking();
if (process.connected) {
analyticsLoggingService.logData({
message: `analytics-broker-process will send ${"ProcessFinishedTasks" /* DetachedProcessMessages.ProcessFinishedTasks */} message`,
});
process.send("ProcessFinishedTasks" /* DetachedProcessMessages.ProcessFinishedTasks */, () => {
analyticsLoggingService.logData({
message: `analytics-broker-process sent ${"ProcessFinishedTasks" /* DetachedProcessMessages.ProcessFinishedTasks */} message and will exit gracefully now`,
});
killCurrentProcessGracefully();
});
}
return;
}
await sendDataForTracking(data);
});
process.on("disconnect", async () => {
analyticsLoggingService.logData({
message: "analytics-broker-process received process.disconnect event",
});
await finishTracking();
killCurrentProcessGracefully();
});
analyticsLoggingService.logData({
message: `analytics-broker-process will send ${"ProcessReadyToReceive" /* DetachedProcessMessages.ProcessReadyToReceive */} message`,
});
process.send("ProcessReadyToReceive" /* DetachedProcessMessages.ProcessReadyToReceive */);
//# sourceMappingURL=analytics-broker-process.js.map
;