39 lines
954 B
JavaScript
39 lines
954 B
JavaScript
export function shorten(text, max = 90) {
|
|
if (!text || typeof text !== "string") return text;
|
|
return text.length > max ? `${text.slice(0, max - 3)}...` : text;
|
|
}
|
|
|
|
export function createReleaseLogger(logUi = () => {}) {
|
|
let lines = [];
|
|
let lastMessage = null;
|
|
const state = { el: null };
|
|
|
|
function render() {
|
|
if (state.el) {
|
|
state.el.textContent = lines.join("\n");
|
|
state.el.scrollTop = 0;
|
|
}
|
|
}
|
|
|
|
function log(msg) {
|
|
if (!msg) return;
|
|
const plain = msg.trim();
|
|
if (plain === lastMessage) return;
|
|
lastMessage = plain;
|
|
const ts = new Date().toLocaleTimeString();
|
|
const line = `${ts} ${msg}`;
|
|
lines.unshift(line);
|
|
lines = lines.slice(0, 120);
|
|
render();
|
|
const lvl = msg.toLowerCase().startsWith("error") ? "error" : "info";
|
|
logUi(`Update: ${msg}`, lvl);
|
|
}
|
|
|
|
function attach(el) {
|
|
state.el = el;
|
|
render();
|
|
}
|
|
|
|
return { log, attach, getLines: () => lines.slice() };
|
|
}
|