UNPKG

homebridge-homeconnect

Version:

A Homebridge plugin that connects Home Connect appliances to Apple HomeKit

51 lines 2.23 kB
// Homebridge plugin for Home Connect home appliances // Copyright © 2023-2025 Alexander Thoukydides import { setImmediate as setImmediateP } from 'timers/promises'; // A logger that sends messages to the client as events export class ServerLogger { // Minimum log level to send to the client minLevel = "info" /* LogLevel.INFO */; // Queue of pending log messages queue = []; // Wait until the client is ready before sending events ipcReady; ipc; // Create a new logger constructor() { this.ipc = new Promise(resolve => this.ipcReady = resolve); } // Start sending log messages to the client sendLogEvents(ipc, level) { this.minLevel = level; this.ipcReady(ipc); } // Is a specified log level enabled isEnabled(level) { const levelOrder = ["debug" /* LogLevel.DEBUG */, "info" /* LogLevel.INFO */, "warn" /* LogLevel.WARN */, "error" /* LogLevel.ERROR */]; return levelOrder.indexOf(this.minLevel) <= levelOrder.indexOf(level); } // Simple wrappers to log a message error(message, ...params) { this.log("error" /* LogLevel.ERROR */, message, ...params); } success(message, ...params) { this.log("success" /* LogLevel.SUCCESS */, message, ...params); } warn(message, ...params) { this.log("warn" /* LogLevel.WARN */, message, ...params); } info(message, ...params) { this.log("info" /* LogLevel.INFO */, message, ...params); } debug(message, ...params) { this.log("debug" /* LogLevel.DEBUG */, message, ...params); } // Log a message at the specified level log(level, message, ...params) { // Send queued log message as an event to the client const send = async () => { await setImmediateP(); const ipc = await this.ipc; const messages = this.queue.filter(log => this.isEnabled(log.level)); if (messages.length) ipc.pushEvent('log', messages); this.queue.length = 0; }; if (!this.queue.length) send(); // Add this message to the queue if (this.isEnabled(level)) this.queue.push({ level, message, params }); } } //# sourceMappingURL=logger.js.map