Skip to content

Commit bf6f16c

Browse files
eslint fixes in tests (modelcontextprotocol#1418)
1 parent 55a28ed commit bf6f16c

File tree

20 files changed

+219
-184
lines changed

20 files changed

+219
-184
lines changed

.changeset/brave-lions-glow.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
"@modelcontextprotocol/node": patch
2+
'@modelcontextprotocol/node': patch
33
---
44

55
Prevent Hono from overriding global Response object by passing `overrideGlobalObjects: false` to `getRequestListener()`. This fixes compatibility with frameworks like Next.js whose response classes extend the native Response.

.github/pages/index.html

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@
124124
</head>
125125
<body>
126126
<h1>MCP TypeScript SDK</h1>
127-
127+
128128
<div class="redirect-notice">
129129
<p>Redirecting to <a href="{{ site.data.latest_version }}/">latest documentation ({{ site.data.latest_version }})</a>...</p>
130130
</div>
@@ -142,31 +142,39 @@ <h2>All Documentation Versions</h2>
142142

143143
<script>
144144
// Redirect to latest version
145-
setTimeout(function() {
145+
setTimeout(function () {
146146
window.location.href = '{{ site.data.latest_version }}/';
147147
}, 1000);
148148

149149
// Load and display package versions from versions.json
150150
fetch('{{ site.data.latest_version }}/versions.json')
151-
.then(function(response) {
151+
.then(function (response) {
152152
if (!response.ok) throw new Error('versions.json not found');
153153
return response.json();
154154
})
155-
.then(function(data) {
155+
.then(function (data) {
156156
var container = document.getElementById('package-versions');
157157
var html = '<p>Packages included in the latest documentation:</p><ul class="package-list">';
158-
158+
159159
for (var pkg in data.packages) {
160-
html += '<li><span class="package-name">' + pkg + '</span>: <span class="package-version">' + data.packages[pkg] + '</span></li>';
160+
html +=
161+
'<li><span class="package-name">' +
162+
pkg +
163+
'</span>: <span class="package-version">' +
164+
data.packages[pkg] +
165+
'</span></li>';
161166
}
162-
167+
163168
html += '</ul>';
164-
html += '<p style="font-size: 0.85rem; color: #666; margin-top: 1rem;">Generated from tag: ' + data.generated_from_tag + '</p>';
165-
169+
html +=
170+
'<p style="font-size: 0.85rem; color: #666; margin-top: 1rem;">Generated from tag: ' +
171+
data.generated_from_tag +
172+
'</p>';
173+
166174
container.innerHTML = html;
167175
container.classList.add('loaded');
168176
})
169-
.catch(function(err) {
177+
.catch(function (err) {
170178
// versions.json may not exist for older docs
171179
document.getElementById('package-versions').style.display = 'none';
172180
});

common/eslint-config/eslint.config.mjs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,13 @@ export default defineConfig(
7979
]
8080
}
8181
},
82+
{
83+
// Disable consistent-function-scoping in test files where helper functions are common
84+
files: ['**/*.test.ts', '**/*.test.tsx', '**/test/**'],
85+
rules: {
86+
'unicorn/consistent-function-scoping': 'off'
87+
}
88+
},
8289
{
8390
// Ignore generated protocol types everywhere
8491
ignores: ['**/spec.types.ts']

docs/documents.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
---
22
title: Documents
33
children:
4-
- ./server.md
5-
- ./client.md
6-
- ./capabilities.md
7-
- ./faq.md
4+
- ./server.md
5+
- ./client.md
6+
- ./capabilities.md
7+
- ./faq.md
88
---
99

1010
# Documents
File renamed without changes.
File renamed without changes.

packages/client/test/client/middleware.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1018,9 +1018,9 @@ describe('createMiddleware', () => {
10181018

10191019
if (response.headers.get('content-type')?.includes('application/json')) {
10201020
const data = (await response.json()) as Record<string, unknown>;
1021-
const transformed = { ...data, timestamp: 123456789 };
1021+
const transformed = { ...data, timestamp: 123_456_789 };
10221022

1023-
return new Response(JSON.stringify(transformed), {
1023+
return Response.json(transformed, {
10241024
status: response.status,
10251025
statusText: response.statusText,
10261026
headers: response.headers
@@ -1036,7 +1036,7 @@ describe('createMiddleware', () => {
10361036

10371037
expect(result).toEqual({
10381038
data: 'original',
1039-
timestamp: 123456789
1039+
timestamp: 123_456_789
10401040
});
10411041
});
10421042

packages/client/test/client/sse.test.ts

Lines changed: 32 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -300,9 +300,9 @@ describe('SSEClientTransport', () => {
300300

301301
await transport.start();
302302

303-
const originalFetch = global.fetch;
303+
const originalFetch = globalThis.fetch;
304304
try {
305-
global.fetch = vi.fn().mockResolvedValue({ ok: true });
305+
globalThis.fetch = vi.fn().mockResolvedValue({ ok: true });
306306

307307
const message: JSONRPCMessage = {
308308
jsonrpc: '2.0',
@@ -313,7 +313,7 @@ describe('SSEClientTransport', () => {
313313

314314
await transport.send(message);
315315

316-
const calledHeaders = (global.fetch as Mock).mock.calls[0]![1].headers;
316+
const calledHeaders = (globalThis.fetch as Mock).mock.calls[0]![1].headers;
317317
expect(calledHeaders.get('Authorization')).toBe('Bearer test-token');
318318
expect(calledHeaders.get('X-Custom-Header')).toBe('custom-value');
319319
expect(calledHeaders.get('content-type')).toBe('application/json');
@@ -322,10 +322,10 @@ describe('SSEClientTransport', () => {
322322

323323
await transport.send(message);
324324

325-
const updatedHeaders = (global.fetch as Mock).mock.calls[1]![1].headers;
325+
const updatedHeaders = (globalThis.fetch as Mock).mock.calls[1]![1].headers;
326326
expect(updatedHeaders.get('X-Custom-Header')).toBe('updated-value');
327327
} finally {
328-
global.fetch = originalFetch;
328+
globalThis.fetch = originalFetch;
329329
}
330330
});
331331

@@ -343,9 +343,9 @@ describe('SSEClientTransport', () => {
343343

344344
await transport.start();
345345

346-
const originalFetch = global.fetch;
346+
const originalFetch = globalThis.fetch;
347347
try {
348-
global.fetch = vi.fn().mockResolvedValue({ ok: true });
348+
globalThis.fetch = vi.fn().mockResolvedValue({ ok: true });
349349

350350
const message: JSONRPCMessage = {
351351
jsonrpc: '2.0',
@@ -356,7 +356,7 @@ describe('SSEClientTransport', () => {
356356

357357
await transport.send(message);
358358

359-
const calledHeaders = (global.fetch as Mock).mock.calls[0]![1].headers;
359+
const calledHeaders = (globalThis.fetch as Mock).mock.calls[0]![1].headers;
360360
expect(calledHeaders.get('Authorization')).toBe('Bearer test-token');
361361
expect(calledHeaders.get('X-Custom-Header')).toBe('custom-value');
362362
expect(calledHeaders.get('content-type')).toBe('application/json');
@@ -365,10 +365,10 @@ describe('SSEClientTransport', () => {
365365

366366
await transport.send(message);
367367

368-
const updatedHeaders = (global.fetch as Mock).mock.calls[1]![1].headers;
368+
const updatedHeaders = (globalThis.fetch as Mock).mock.calls[1]![1].headers;
369369
expect(updatedHeaders.get('X-Custom-Header')).toBe('updated-value');
370370
} finally {
371-
global.fetch = originalFetch;
371+
globalThis.fetch = originalFetch;
372372
}
373373
});
374374

@@ -384,24 +384,24 @@ describe('SSEClientTransport', () => {
384384

385385
await transport.start();
386386

387-
const originalFetch = global.fetch;
387+
const originalFetch = globalThis.fetch;
388388
try {
389-
global.fetch = vi.fn().mockResolvedValue({ ok: true });
389+
globalThis.fetch = vi.fn().mockResolvedValue({ ok: true });
390390

391391
await transport.send({ jsonrpc: '2.0', id: '1', method: 'test', params: {} });
392392

393-
const calledHeaders = (global.fetch as Mock).mock.calls[0]![1].headers;
393+
const calledHeaders = (globalThis.fetch as Mock).mock.calls[0]![1].headers;
394394
expect(calledHeaders.get('Authorization')).toBe('Bearer test-token');
395395
expect(calledHeaders.get('X-Custom-Header')).toBe('custom-value');
396396
expect(calledHeaders.get('content-type')).toBe('application/json');
397397
} finally {
398-
global.fetch = originalFetch;
398+
globalThis.fetch = originalFetch;
399399
}
400400
});
401401
});
402402

403403
describe('auth handling', () => {
404-
const authServerMetadataUrls = ['/.well-known/oauth-authorization-server', '/.well-known/openid-configuration'];
404+
const authServerMetadataUrls = new Set(['/.well-known/oauth-authorization-server', '/.well-known/openid-configuration']);
405405

406406
let mockAuthProvider: Mocked<OAuthClientProvider>;
407407

@@ -516,10 +516,10 @@ describe('SSEClientTransport', () => {
516516
return;
517517
}
518518

519-
if (req.url !== '/') {
520-
res.writeHead(404).end();
521-
} else {
519+
if (req.url === '/') {
522520
res.writeHead(401).end();
521+
} else {
522+
res.writeHead(404).end();
523523
}
524524
});
525525

@@ -550,7 +550,7 @@ describe('SSEClientTransport', () => {
550550
lastServerRequest = req;
551551

552552
switch (req.method) {
553-
case 'GET':
553+
case 'GET': {
554554
if (req.url === '/.well-known/oauth-protected-resource') {
555555
res.writeHead(200, {
556556
'Content-Type': 'application/json'
@@ -576,11 +576,13 @@ describe('SSEClientTransport', () => {
576576
res.write('event: endpoint\n');
577577
res.write(`data: ${resourceBaseUrl.href}\n\n`);
578578
break;
579+
}
579580

580-
case 'POST':
581+
case 'POST': {
581582
res.writeHead(401);
582583
res.end();
583584
break;
585+
}
584586
}
585587
});
586588

@@ -658,7 +660,7 @@ describe('SSEClientTransport', () => {
658660
authServer.close();
659661

660662
authServer = createServer((req, res) => {
661-
if (req.url && authServerMetadataUrls.includes(req.url)) {
663+
if (req.url && authServerMetadataUrls.has(req.url)) {
662664
res.writeHead(404).end();
663665
return;
664666
}
@@ -786,7 +788,7 @@ describe('SSEClientTransport', () => {
786788
authServer.close();
787789

788790
authServer = createServer((req, res) => {
789-
if (req.url && authServerMetadataUrls.includes(req.url)) {
791+
if (req.url && authServerMetadataUrls.has(req.url)) {
790792
res.writeHead(404).end();
791793
return;
792794
}
@@ -849,7 +851,7 @@ describe('SSEClientTransport', () => {
849851
}
850852

851853
switch (req.method) {
852-
case 'GET':
854+
case 'GET': {
853855
if (req.url !== '/') {
854856
res.writeHead(404).end();
855857
return;
@@ -863,6 +865,7 @@ describe('SSEClientTransport', () => {
863865
res.write('event: endpoint\n');
864866
res.write(`data: ${resourceBaseUrl.href}\n\n`);
865867
break;
868+
}
866869

867870
case 'POST': {
868871
if (req.url !== '/') {
@@ -937,7 +940,7 @@ describe('SSEClientTransport', () => {
937940
authServer.close();
938941

939942
authServer = createServer((req, res) => {
940-
if (req.url && authServerMetadataUrls.includes(req.url)) {
943+
if (req.url && authServerMetadataUrls.has(req.url)) {
941944
res.writeHead(404).end();
942945
return;
943946
}
@@ -1309,7 +1312,7 @@ describe('SSEClientTransport', () => {
13091312
});
13101313

13111314
// Spy on global fetch to detect unauthorized usage
1312-
globalFetchSpy = vi.spyOn(global, 'fetch');
1315+
globalFetchSpy = vi.spyOn(globalThis, 'fetch');
13131316

13141317
// Create mock auth provider with default configuration
13151318
mockAuthProvider = createMockAuthProvider({
@@ -1386,7 +1389,7 @@ describe('SSEClientTransport', () => {
13861389
// Set up resource server that accepts SSE connection but returns 401 on POST
13871390
resourceServerHandler.mockImplementation((req: IncomingMessage, res: ServerResponse) => {
13881391
switch (req.method) {
1389-
case 'GET':
1392+
case 'GET': {
13901393
if (req.url === '/') {
13911394
// Accept SSE connection
13921395
res.writeHead(200, {
@@ -1399,8 +1402,9 @@ describe('SSEClientTransport', () => {
13991402
return;
14001403
}
14011404
break;
1405+
}
14021406

1403-
case 'POST':
1407+
case 'POST': {
14041408
if (req.url === '/') {
14051409
// Return 401 to trigger auth retry
14061410
res.writeHead(401, {
@@ -1410,6 +1414,7 @@ describe('SSEClientTransport', () => {
14101414
return;
14111415
}
14121416
break;
1417+
}
14131418
}
14141419

14151420
res.writeHead(404).end();

0 commit comments

Comments
 (0)