@codingame/monaco-vscode-extensions-service-override
Version:
VSCode public API plugged on the monaco editor - extensions service-override
75 lines (71 loc) • 2.19 kB
JavaScript
import '@codingame/monaco-vscode-api/vscode/vs/base/common/charCode';
import '@codingame/monaco-vscode-api/vscode/vs/base/common/marshallingIds';
import '@codingame/monaco-vscode-api/vscode/vs/base/common/path';
import '@codingame/monaco-vscode-api/vscode/vs/base/common/platform';
function parse(entry) {
const args = [];
let stack;
try {
const parsedArguments = JSON.parse(entry.arguments);
const stackArgument = parsedArguments[parsedArguments.length - 1];
if (stackArgument && stackArgument.__$stack) {
parsedArguments.pop();
stack = stackArgument.__$stack;
}
args.push(...parsedArguments);
} catch (error) {
args.push("Unable to log remote console arguments", entry.arguments);
}
return {
args,
stack
};
}
function findFirstFrame(stack) {
if (!stack) {
return stack;
}
const newlineIndex = stack.indexOf("\n");
if (newlineIndex === -1) {
return stack;
}
return stack.substring(0, newlineIndex);
}
function log(entry, label) {
const {
args,
stack
} = parse(entry);
const isOneStringArg = typeof args[0] === "string" && args.length === 1;
let topFrame = findFirstFrame(stack);
if (topFrame) {
topFrame = `(${topFrame.trim()})`;
}
let consoleArgs = [];
if (typeof args[0] === "string") {
if (topFrame && isOneStringArg) {
consoleArgs = [
`%c[${label}] %c${args[0]} %c${topFrame}`,
color("blue"),
color(""),
color("grey")
];
} else {
consoleArgs = [`%c[${label}] %c${args[0]}`, color("blue"), color(""), ...args.slice(1)];
}
}
else {
consoleArgs = [`%c[${label}]%`, color("blue"), ...args];
}
if (topFrame && !isOneStringArg) {
consoleArgs.push(topFrame);
}
if (typeof console[entry.severity] !== "function") {
throw ( new Error("Unknown console method"));
}
console[entry.severity].apply(console, consoleArgs);
}
function color(color) {
return `color: ${color}`;
}
export { log, parse };