@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
JavaScript
"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;