UNPKG

react-native

Version:

A framework for building native apps using React

91 lines (73 loc) 2.11 kB
/** * Copyright (c) 2015-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * * @flow */ 'use strict'; const os = require('os'); const {EventEmitter} = require('events'); const VERSION = require('../../package.json').version; import type { ActionLogEntryData, ActionStartLogEntry, LogEntry, } from './Types'; const log_session = `${os.hostname()}-${Date.now()}`; const eventEmitter = new EventEmitter(); function on(event: string, handler: (logEntry: LogEntry) => void): void { eventEmitter.on(event, handler); } function createEntry(data: LogEntry | string): LogEntry { const logEntry = typeof data === 'string' ? {log_entry_label: data} : data; return { ...logEntry, log_session, packager_version: VERSION, }; } function createActionStartEntry(data: ActionLogEntryData | string): LogEntry { const logEntry = typeof data === 'string' ? {action_name: data} : data; const {action_name} = logEntry; return createEntry({ ...logEntry, action_name, action_phase: 'start', log_entry_label: action_name, start_timestamp: process.hrtime(), }); } function createActionEndEntry(logEntry: ActionStartLogEntry): LogEntry { const { action_name, action_phase, start_timestamp, } = logEntry; if (action_phase !== 'start' || !Array.isArray(start_timestamp)) { throw new Error('Action has not started or has already ended'); } const timeDelta = process.hrtime(start_timestamp); const duration_ms = Math.round((timeDelta[0] * 1e9 + timeDelta[1]) / 1e6); return createEntry({ ...logEntry, action_name, action_phase: 'end', duration_ms, log_entry_label: action_name, }); } function log(logEntry: LogEntry): LogEntry { eventEmitter.emit('log', logEntry); return logEntry; } module.exports = { on, createEntry, createActionStartEntry, createActionEndEntry, log, };