vscode-chrome-debug-core
Version:
A library for building VS Code debug adapters for targets that support the Chrome Remote Debug Protocol
54 lines (52 loc) • 2.07 kB
JavaScript
;
/*---------------------------------------------------------
* Copyright (C) Microsoft Corporation. All rights reserved.
*--------------------------------------------------------*/
Object.defineProperty(exports, "__esModule", { value: true });
class InternalSourceBreakpoint {
constructor(breakpoint) {
this.line = breakpoint.line;
this.column = breakpoint.column;
this.hitCondition = breakpoint.hitCondition;
if (breakpoint.logMessage) {
this.condition = logMessageToExpression(breakpoint.logMessage);
if (breakpoint.condition) {
this.condition = `(${breakpoint.condition}) && ${this.condition}`;
}
}
else if (breakpoint.condition) {
this.condition = breakpoint.condition;
}
}
}
InternalSourceBreakpoint.LOGPOINT_URL = 'vscode.logpoint.js';
exports.InternalSourceBreakpoint = InternalSourceBreakpoint;
function isLogpointStack(stackTrace) {
return stackTrace && stackTrace.callFrames.length > 0 && stackTrace.callFrames[0].url === InternalSourceBreakpoint.LOGPOINT_URL;
}
function stackTraceWithoutLogpointFrame(stackTrace) {
if (isLogpointStack(stackTrace)) {
return Object.assign({}, stackTrace, { callFrames: stackTrace.callFrames.slice(1) });
}
return stackTrace;
}
exports.stackTraceWithoutLogpointFrame = stackTraceWithoutLogpointFrame;
const LOGMESSAGE_VARIABLE_REGEXP = /{(.*?)}/g;
function logMessageToExpression(msg) {
msg = msg.replace('%', '%%');
const args = [];
let format = msg.replace(LOGMESSAGE_VARIABLE_REGEXP, (match, group) => {
const a = group.trim();
if (a) {
args.push(`(${a})`);
return '%O';
}
else {
return '';
}
});
format = format.replace('\'', '\\\'');
const argStr = args.length ? `, ${args.join(', ')}` : '';
return `console.log('${format}'${argStr});\n//# sourceURL=${InternalSourceBreakpoint.LOGPOINT_URL}`;
}
//# sourceMappingURL=internalSourceBreakpoint.js.map