(
event: Cdp.Runtime.ConsoleAPICalledEvent,
)
| 988 | } |
| 989 | |
| 990 | async _onConsoleMessage( |
| 991 | event: Cdp.Runtime.ConsoleAPICalledEvent, |
| 992 | ): Promise<Dap.OutputEventParams | undefined> { |
| 993 | switch (event.type) { |
| 994 | case 'endGroup': |
| 995 | return { category: 'stdout', output: '', group: 'end' }; |
| 996 | case 'clear': |
| 997 | return this._clearDebuggerConsole(); |
| 998 | } |
| 999 | |
| 1000 | // Ignore the duplicate group events that Node.js can emit: |
| 1001 | // See: https://github.com/nodejs/node/issues/31973 |
| 1002 | if (event.type === 'log') { |
| 1003 | const firstFrame = event.stackTrace?.callFrames[0]; |
| 1004 | if ( |
| 1005 | firstFrame && |
| 1006 | firstFrame.functionName === 'group' && |
| 1007 | firstFrame.url === 'internal/console/constructor.js' |
| 1008 | ) { |
| 1009 | return undefined; |
| 1010 | } |
| 1011 | } |
| 1012 | |
| 1013 | let stackTrace: StackTrace | undefined; |
| 1014 | let uiLocation: IUiLocation | undefined; |
| 1015 | const isAssert = event.type === 'assert'; |
| 1016 | const isError = event.type === 'error'; |
| 1017 | if (event.stackTrace) { |
| 1018 | stackTrace = StackTrace.fromRuntime(this, event.stackTrace); |
| 1019 | const frames = await stackTrace.loadFrames(1); |
| 1020 | if (frames.length) uiLocation = await frames[0].uiLocation(); |
| 1021 | if (!isError && event.type !== 'warning' && !isAssert && event.type !== 'trace') |
| 1022 | stackTrace = undefined; |
| 1023 | } |
| 1024 | |
| 1025 | let category: 'console' | 'stdout' | 'stderr' | 'telemetry' = 'stdout'; |
| 1026 | if (isError || isAssert) category = 'stderr'; |
| 1027 | if (event.type === 'warning') category = 'console'; |
| 1028 | |
| 1029 | if (isAssert && event.args[0] && event.args[0].value === 'console.assert') |
| 1030 | event.args[0].value = localize('console.assert', 'Assertion failed'); |
| 1031 | |
| 1032 | let messageText: string; |
| 1033 | let usedAllArgs = false; |
| 1034 | if (event.type === 'table' && event.args.length && event.args[0].preview) { |
| 1035 | messageText = objectPreview.formatAsTable(event.args[0].preview); |
| 1036 | } else { |
| 1037 | const useMessageFormat = event.args.length > 1 && event.args[0].type === 'string'; |
| 1038 | const formatString = useMessageFormat ? (event.args[0].value as string) : ''; |
| 1039 | const formatResult = messageFormat.formatMessage( |
| 1040 | formatString, |
| 1041 | (useMessageFormat ? event.args.slice(1) : event.args) as AnyObject[], |
| 1042 | objectPreview.messageFormatters, |
| 1043 | ); |
| 1044 | messageText = formatResult.result; |
| 1045 | usedAllArgs = formatResult.usedAllSubs; |
| 1046 | } |
| 1047 |
no test coverage detected