Skip to content

Commit e37a40a

Browse files
author
Natallia Harshunova
committed
Handle null issues messages
1 parent f83f9b6 commit e37a40a

File tree

2 files changed

+50
-4
lines changed

2 files changed

+50
-4
lines changed

src/McpResponse.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -252,10 +252,11 @@ export class McpResponse implements Response {
252252
),
253253
};
254254
} else if (message instanceof AggregatedIssue) {
255-
const result = mapIssueToMessageObject(message);
255+
const mappedIssueMessage = mapIssueToMessageObject(message);
256+
if (!mappedIssueMessage) throw new Error('Can\'t prpovide detals for the msgid ' + consoleMessageStableId);
256257
consoleData = {
257258
consoleMessageStableId,
258-
...result,
259+
...mappedIssueMessage,
259260
};
260261
} else {
261262
consoleData = {
@@ -310,10 +311,11 @@ export class McpResponse implements Response {
310311
};
311312
}
312313
if (item instanceof AggregatedIssue) {
313-
const message = mapIssueToMessageObject(item);
314+
const mappedIssueMessage = mapIssueToMessageObject(item);
315+
if (!mappedIssueMessage) return null;
314316
return {
315317
consoleMessageStableId,
316-
...message,
318+
...mappedIssueMessage,
317319
};
318320
}
319321
return {

tests/McpResponse.test.ts

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ import {tmpdir} from 'node:os';
1010
import {join} from 'node:path';
1111
import {describe, it} from 'node:test';
1212

13+
import sinon from 'sinon';
14+
15+
import { AggregatedIssue } from '../node_modules/chrome-devtools-frontend/mcp/mcp.js';
16+
1317
import {
1418
getMockRequest,
1519
getMockResponse,
@@ -295,6 +299,46 @@ describe('McpResponse', () => {
295299
t.assert.snapshot?.(result[0].text);
296300
});
297301
});
302+
303+
it('doesn\'t list the issue message if mapping returns null', async () => {
304+
await withBrowser(async (response, context) => {
305+
const mockAggregatedIssue = sinon.createStubInstance(AggregatedIssue);
306+
const mockDescription = {
307+
file: 'not-existing-description-file.md',
308+
links: [],
309+
};
310+
mockAggregatedIssue.getDescription.returns(mockDescription);
311+
response.setIncludeConsoleData(true);
312+
context.getConsoleData = () => {
313+
return [mockAggregatedIssue];
314+
};
315+
316+
const result = await response.handle('test', context);
317+
const text = (result[0].text as string).toString();
318+
assert.ok(text.includes('<no console messages found>'));
319+
});
320+
});
321+
322+
it('throws error if mapping returns null on get issue details', async () => {
323+
await withBrowser(async (response, context) => {
324+
const mockAggregatedIssue = sinon.createStubInstance(AggregatedIssue);
325+
const mockDescription = {
326+
file: 'not-existing-description-file.md',
327+
links: [],
328+
};
329+
mockAggregatedIssue.getDescription.returns(mockDescription);
330+
response.attachConsoleMessage(1);
331+
context.getConsoleMessageById = () => {
332+
return mockAggregatedIssue;
333+
};
334+
335+
try {
336+
await response.handle('test', context);
337+
} catch (e) {
338+
assert.ok(e.message.includes('Can\'t prpovide detals for the msgid 1'));
339+
}
340+
});
341+
});
298342
});
299343

300344
describe('McpResponse network request filtering', () => {

0 commit comments

Comments
 (0)