MCPcopy Index your code
hub / github.com/darkreader/darkreader / createEchoServer

Function createEchoServer

tests/inject/support/echo-server.js:4–72  ·  view source on GitHub ↗
(/** @type {number} */port)

Source from the content-addressed store, hash-verified

2import http from 'http';
3
4export async function createEchoServer(/** @type {number} */port) {
5 /** @type {import('http').Server | null} */
6 let server;
7
8 /** @type {import('http').RequestListener} */
9 function handleRequest(req, res) {
10 const parsedURL = new URL(req.url ?? '', `http://${req.headers.host}`);
11 const pathName = parsedURL.pathname;
12
13 if (pathName !== '/echo') {
14 res.statusCode = 500;
15 res.end('The URL path must be /echo');
16 return;
17 }
18
19 const {searchParams} = parsedURL;
20
21 const content = searchParams.get('content');
22 if (!content) {
23 res.statusCode = 500;
24 res.end('Send content like /echo?type=text%2Fplain&content=XYZ');
25 return;
26 }
27
28 const contentType = searchParams.get('type') || 'text/plain';
29 res.statusCode = 200;
30 res.setHeader('Content-Type', contentType);
31 res.end(content, 'utf8');
32 }
33
34 /**
35 * @returns {Promise<void>}
36 */
37 function start() {
38 return new Promise((resolve) => {
39 server = http
40 .createServer(handleRequest)
41 .listen(port, () => resolve());
42 });
43 }
44
45 /**
46 * @returns {Promise<void> | undefined}
47 */
48 function close() {
49 if (!server) {
50 return;
51 }
52 return new Promise((resolve) => {
53 server?.close((err) => {
54 if (err) {
55 console.error(err);
56 }
57 server = null;
58 resolve();
59 });
60 });
61 }

Callers 1

configureKarmaFunction · 0.90

Calls 1

startFunction · 0.70

Tested by

no test coverage detected