You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

84 lines
2.1 KiB

//@flow
// hopefully separating out styles like this is more readable -- sink
const styleBase = `
@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@700&display=swap');
font-family: 'IBM Plex Mono', monospace;
`;
const styleBg = `
${styleBase}
color: #1d1131;
background-color: #aa8dd8;
font-weight: 600;
font-size: 0.9em;
padding: 0px 5px 1px 5px;
border-radius: 5px;
`;
const styleTxt = `
${styleBase}
color: #E2EECE;
font-weight: 500;
font-size: 0.9em;
`;
type LogFuncs = "log" | "error" | "warn" | "trace" | "group";
type LoggerFunction = (message: string, locs: string[]) => void;
//TODO: make setting to save logs in idb, for debugging and troubleshooting purposes
function getLogger(type: LogFuncs, noDemoncord = false): LoggerFunction {
return function (message, locs) {
let rawParts = ["Demoncord", ...locs, message];
let styleParts = [];
let content = "";
if (noDemoncord) rawParts.splice(0, 1);
for (let i = 0; i < rawParts.length; i++) {
if (i === rawParts.length - 1) {
// last item
content += "%c" + rawParts[i];
styleParts.push(styleTxt);
} else {
content += "%c" + rawParts[i] + "%c ";
styleParts.push(styleBg, "");
}
}
console[type](content, ...styleParts);
};
}
const log: LoggerFunction = getLogger("log");
const warn: LoggerFunction = getLogger("warn");
const error: LoggerFunction = getLogger("error");
const trace: LoggerFunction = getLogger("trace");
type GroupFuncLog = [string, string[]] | [string, string[], LogFuncs];
type GroupFunc = (msg: string, loc: string[], sublogs: GroupFuncLog[]) => void;
const group: GroupFunc = (msg, loc, sublogs) => {
// start group
getLogger("group")(msg, loc);
for (const sublog of sublogs) {
const logFunc = getLogger(
sublog.length === 3 ? sublog[2] : "log",
true
);
logFunc(sublog[0], sublog[1]);
}
console.groupEnd();
};
export default {
log,
warn,
error,
trace,
group
};