93 lines
2.7 KiB
JavaScript
Executable File
93 lines
2.7 KiB
JavaScript
Executable File
const DEFAULT_HOST = "localhost";
|
|
const DEFAULT_PORT = 3456;
|
|
|
|
const configure = (conn, defaultConsole) => {
|
|
// skip if already configured
|
|
if (console._tsconsole_configured) return;
|
|
console._tsconsole_configured = true;
|
|
|
|
console.info = (...args) => {
|
|
sendWhenConnected(conn, JSON.stringify({ type: 'info', data: Array.from(args) , }), defaultConsole);
|
|
defaultConsole.info.apply(defaultConsole, args);
|
|
};
|
|
|
|
console.log = (...args) => {
|
|
sendWhenConnected(conn, JSON.stringify({ type: 'log', data: Array.from(args) , }), defaultConsole);
|
|
defaultConsole.log.apply(defaultConsole, args);
|
|
};
|
|
|
|
console.error = (...args) => {
|
|
sendWhenConnected(conn, JSON.stringify({ type: 'error', data: Array.from(args) }), defaultConsole);
|
|
defaultConsole.error.apply(defaultConsole, args);
|
|
};
|
|
|
|
console.warn = (...args) => {
|
|
sendWhenConnected(conn, JSON.stringify({ type: 'warn', data: Array.from(args) }), defaultConsole);
|
|
defaultConsole.warn.apply(defaultConsole, args);
|
|
};
|
|
|
|
console.debug = (...args) => {
|
|
sendWhenConnected(conn, JSON.stringify({ type: 'debug', data: Array.from(args) }), defaultConsole);
|
|
defaultConsole.debug.apply(defaultConsole, args);
|
|
};
|
|
|
|
}
|
|
|
|
const release = (defaultConsole) => {
|
|
console = defaultConsole;
|
|
console._tsconsole_configured = false;
|
|
}
|
|
|
|
const termlog = (options = {}) => {
|
|
// Ensure tconsole doesn't run in production mode
|
|
options = {
|
|
host: DEFAULT_HOST,
|
|
port: DEFAULT_PORT,
|
|
ssl: false,
|
|
disableEnvironmentCheck: false,
|
|
...options,
|
|
}
|
|
|
|
if (!options.disableEnvironmentCheck && process && process.env.NODE_ENV && process.env.NODE_ENV !== 'development') return;
|
|
|
|
const defaultConsole = Object.assign(Object.create(Object.getPrototypeOf(console)), console);
|
|
|
|
const ws = new WebSocket(`${options.ssl ? "wss" : "ws"}://${options.host}:${options.port}`);
|
|
|
|
configure(ws, defaultConsole);
|
|
|
|
ws.onopen = () => {
|
|
console.log('[TERMLOG]: Connected');
|
|
};
|
|
|
|
ws.onclose = (event) => {
|
|
release(defaultConsole);
|
|
console.log("[TERMLOG]: Disconnected", event.message);
|
|
}
|
|
|
|
ws.onerror = (event) => {
|
|
release(defaultConsole);
|
|
console.error("[TERMLOG]: Disconnected", event.message);
|
|
}
|
|
}
|
|
|
|
|
|
// *** Utils *** //
|
|
const sendWhenConnected = (ws, msg, defaultConsole, n = 0, maxTries = 100) => {
|
|
// Closing or closed
|
|
if (ws.readyState === 2 || ws.readyState === 3) return;
|
|
|
|
// try sending
|
|
setTimeout(() => {
|
|
if (ws.readyState === 1) {
|
|
ws.send(msg);
|
|
} else if (n < maxTries) {
|
|
sendWhenConnected(ws, msg, defaultConsole, n + 1);
|
|
} else{
|
|
defaultConsole.error("Exceed tries to send message: ", msg);
|
|
}
|
|
}, 10); // wait 10 milisecond for the connection...
|
|
}
|
|
|
|
export default termlog;
|