homebridge-homeconnect
Version:
A Homebridge plugin that connects Home Connect appliances to Apple HomeKit
51 lines • 2.23 kB
JavaScript
// 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