UNPKG

@trap_stevo/logtide

Version:

A groundbreaking OTA (Over-The-Air) logging system that seamlessly connects and communicates logs across any application. Transform the way you monitor and manage data with a tool that redefines real-time logging, putting unmatched power and precision at

380 lines (379 loc) 12 kB
"use strict"; const { HUDIoTide } = require("@trap_stevo/iotide-client"); const IoTide = require("@trap_stevo/iotide"); const Loml = require("@trap_stevo/loml"); class LomlLoggingSystem { constructor(config = {}, ...args) { this.lomlLogging = null; this.clientInstance = config.clientInstance || false; this.serverInstance = config.serverInstance || false; this.setupIoTideInstance(config.lomlLoggingSystemOptions, ...args); if (this.clientInstance) { this.lomlLoggerClient = new HUDIoTide(...(config?.connectionConfigurations ?? [])); this.initializeClient(config.clientOptions); } if (this.serverInstance) { this.lomlLogging.on("external-log", data => { this.processExternalLog(data); }); } } setupIoTideInstance(lomlLoggingSystemOptions, ...args) { if (this.serverInstance) { this.lomlLogging = new IoTide(lomlLoggingSystemOptions.port || 3069, lomlLoggingSystemOptions.options || {}, ...args); this.lomlLogging.server.listen(lomlLoggingSystemOptions.port || 3069, "0.0.0.0", () => { console.log(`LomlLoggingSystem ~ ${lomlLoggingSystemOptions.port || 3069}`); }); } } initializeClient(clientOptions) { const { socketName, url, options, onConnect, clientParams = [] } = clientOptions; this.lomlLoggerClient.createIO(socketName, url, options, ...clientParams); this.lomlLoggerClient.onEvent(socketName, "connect", () => { console.log("Connected to the LomlLoggingSystem!"); if (onConnect) { onConnect(this.lomlLoggerClient); } }); } processExternalLog(data) { const { roomName, tideID, text, styles, colors, direction, href, tag, type, protocol } = data; const loml = new Loml(); let formattedMessage; switch (type) { case "text": formattedMessage = loml.text(text, styles).build(); break; case "bold": formattedMessage = loml.bold(text, styles).build(); break; case "italic": formattedMessage = loml.italic(text, styles).build(); break; case "link": formattedMessage = loml.link(text, href, styles).build(); break; case "color": formattedMessage = loml.color(text, styles.color, styles).build(); break; case "gradientText": formattedMessage = loml.gradientText(text, colors, direction, styles).build(); break; case "customElement": formattedMessage = loml.element(tag, text, styles).build(); break; default: formattedMessage = loml.text(text, styles).build(); } if (protocol && protocol === "system") { this.lomlLogging.emitTide("log", { message: formattedMessage }); return formattedMessage; } if (roomName) { this.lomlLogging.emitToChannel(tideID, roomName, "log", { message: formattedMessage }); return formattedMessage; } this.lomlLogging.emit("log", { message: formattedMessage }); return formattedMessage; } logToAll(text, styles = {}) { const loml = new Loml(); const formattedMessage = loml.text(text, styles).build(); this.lomlLogging.emit("log", { message: formattedMessage }); return formattedMessage; } logToRoom(tideID, roomName, text, styles = {}) { const loml = new Loml(); const formattedMessage = loml.text(text, styles).build(); this.lomlLogging.emitToChannel(tideID, roomName, "log", { message: formattedMessage }); return formattedMessage; } logBoldToAll(text, styles = {}) { const loml = new Loml(); const formattedMessage = loml.bold(text, styles).build(); this.lomlLogging.emit("log", { message: formattedMessage }); return formattedMessage; } logBoldToRoom(tideID, roomName, text, styles = {}) { const loml = new Loml(); const formattedMessage = loml.bold(text, styles).build(); this.lomlLogging.emitToChannel(tideID, roomName, "log", { message: formattedMessage }); return formattedMessage; } logItalicToAll(text, styles = {}) { const loml = new Loml(); const formattedMessage = loml.italic(text, styles).build(); this.lomlLogging.emit("log", { message: formattedMessage }); return formattedMessage; } logItalicToRoom(tideID, roomName, text, styles = {}) { const loml = new Loml(); const formattedMessage = loml.italic(text, styles).build(); this.lomlLogging.emitToChannel(tideID, roomName, "log", { message: formattedMessage }); return formattedMessage; } logLinkToAll(text, href, styles = {}) { const loml = new Loml(); const formattedMessage = loml.link(text, href, styles).build(); this.lomlLogging.emit("log", { message: formattedMessage }); return formattedMessage; } logLinkToRoom(tideID, roomName, text, href, styles = {}) { const loml = new Loml(); const formattedMessage = loml.link(text, href, styles).build(); this.lomlLogging.emitToChannel(tideID, roomName, "log", { message: formattedMessage }); return formattedMessage; } logColorToAll(text, color, styles = {}) { const loml = new Loml(); const formattedMessage = loml.color(text, color, styles).build(); this.lomlLogging.emit("log", { message: formattedMessage }); return formattedMessage; } logColorToRoom(tideID, roomName, text, color, styles = {}) { const loml = new Loml(); const formattedMessage = loml.color(text, color, styles).build(); this.lomlLogging.emitToChannel(tideID, roomName, "log", { message: formattedMessage }); return formattedMessage; } logGradientTextToRoom(tideID, roomName, text, colors, direction = "to right", styles = {}) { const loml = new Loml(); const formattedMessage = loml.gradientText(text, colors, direction, styles).build(); this.lomlLogging.emitToChannel(tideID, roomName, "log", { message: formattedMessage }); return formattedMessage; } logGradientTextToAll(text, colors, direction = "to right", styles = {}) { const loml = new Loml(); const formattedMessage = loml.gradientText(text, colors, direction, styles).build(); this.lomlLogging.emit("log", { message: formattedMessage }); return formattedMessage; } logCustomElementToAll(tag, text, styles = {}) { const loml = new Loml(); const formattedMessage = loml.element(tag, text, styles).build(); this.lomlLogging.emit("log", { message: formattedMessage }); return formattedMessage; } logCustomElementToRoom(tideID, roomName, tag, text, styles = {}) { const loml = new Loml(); const formattedMessage = loml.element(tag, text, styles).build(); this.lomlLogging.emitToChannel(tideID, roomName, "log", { message: formattedMessage }); return formattedMessage; } logLineBreakToAll() { const loml = new Loml(); const formattedMessage = loml.br().build(); this.lomlLogging.emit("log", { message: formattedMessage }); return formattedMessage; } logLineBreakToRoom(tideID, roomName) { const loml = new Loml(); const formattedMessage = loml.br().build(); this.lomlLogging.emitToChannel(tideID, roomName, "log", { message: formattedMessage }); return formattedMessage; } logStyledMessageToAll(messageParts) { const loml = new Loml(); messageParts.forEach(part => { if (typeof loml[part.method] === "function") { loml[part.method](...part.args); } }); const formattedMessage = loml.build(); this.lomlLogging.emit("log", { message: formattedMessage }); return formattedMessage; } logStyledMessageToRoom(tideID, roomName, messageParts) { const loml = new Loml(); messageParts.forEach(part => { if (typeof loml[part.method] === "function") { loml[part.method](...part.args); } }); const formattedMessage = loml.build(); this.lomlLogging.emitToChannel(tideID, roomName, "log", { message: formattedMessage }); return formattedMessage; } logTextToSystem(text, styles = {}) { const loml = new Loml(); const formattedMessage = loml.text(text, styles).build(); this.lomlLogging.emitTide("log", { message: formattedMessage }); return formattedMessage; } logBoldToSystem(text, styles = {}) { const loml = new Loml(); const formattedMessage = loml.bold(text, styles).build(); this.lomlLogging.emitTide("log", { message: formattedMessage }); return formattedMessage; } logItalicToSystem(text, styles = {}) { const loml = new Loml(); const formattedMessage = loml.italic(text, styles).build(); this.lomlLogging.emitTide("log", { message: formattedMessage }); return formattedMessage; } logLinkToSystem(text, href, styles = {}) { const loml = new Loml(); const formattedMessage = loml.link(text, href, styles).build(); this.lomlLogging.emitTide("log", { message: formattedMessage }); return formattedMessage; } logColorToSystem(text, color, styles = {}) { const loml = new Loml(); const formattedMessage = loml.color(text, color, styles).build(); this.lomlLogging.emitTide("log", { message: formattedMessage }); return formattedMessage; } logGradientTextToSystem(text, colors, direction = "to right", styles = {}) { const loml = new Loml(); const formattedMessage = loml.gradientText(text, colors, direction, styles).build(); this.lomlLogging.emitTide("log", { message: formattedMessage }); return formattedMessage; } logCustomElementToSystem(tag, text, styles = {}) { const loml = new Loml(); const formattedMessage = loml.element(tag, text, styles).build(); this.lomlLogging.emitTide("log", { message: formattedMessage }); return formattedMessage; } logLineBreakToSystem() { const loml = new Loml(); const formattedMessage = loml.br().build(); this.lomlLogging.emitTide("log", { message: formattedMessage }); return formattedMessage; } logStyledMessageToSystem(messageParts) { const loml = new Loml(); messageParts.forEach(part => { if (typeof loml[part.method] === "function") { loml[part.method](...part.args); } }); const formattedMessage = loml.build(); this.lomlLogging.emitTide("log", { message: formattedMessage }); return formattedMessage; } static log(options = {}) { const { text = "Sample text", type = "text", direction = "to right", colors = [], styles = {}, href = "", tag = "span", logToConsole = true } = options; const loml = new Loml(); let formattedMessage; switch (type) { case "text": formattedMessage = loml.text(text, styles).build(); break; case "bold": formattedMessage = loml.bold(text, styles).build(); break; case "italic": formattedMessage = loml.italic(text, styles).build(); break; case "link": formattedMessage = loml.link(text, href, styles).build(); break; case "color": formattedMessage = loml.color(text, styles.color, styles).build(); break; case "gradientText": formattedMessage = loml.gradientText(text, colors, direction, styles).build(); break; case "customElement": formattedMessage = loml.element(tag, text, styles).build(); break; default: formattedMessage = loml.text(text, styles).build(); } if (logToConsole) { console.log(`${type.charAt(0).toUpperCase() + type.slice(1)} Log:`, formattedMessage); } return formattedMessage; } } module.exports = LomlLoggingSystem;