main
js 78 lines 1.88 KB
Raw
1 'use strict';
2
3 const http2Server = require('http2');
4 const httpServer = require('http-server');
5 const {existsSync, statSync, createReadStream} = require('fs');
6 const {join} = require('path');
7 const argv = require('minimist')(process.argv.slice(2));
8 const mime = require('mime');
9
10 function sendFile(filename, response) {
11 response.setHeader('Content-Type', mime.lookup(filename));
12 response.writeHead(200);
13 const fileStream = createReadStream(filename);
14 fileStream.pipe(response);
15 fileStream.on('finish', response.end);
16 }
17
18 function createHTTP2Server(benchmark) {
19 const server = http2Server.createServer({}, (request, response) => {
20 const filename = join(
21 __dirname,
22 'benchmarks',
23 benchmark,
24 request.url
25 ).replace(/\?.*/g, '');
26
27 if (existsSync(filename) && statSync(filename).isFile()) {
28 sendFile(filename, response);
29 } else {
30 const indexHtmlPath = join(filename, 'index.html');
31
32 if (existsSync(indexHtmlPath)) {
33 sendFile(indexHtmlPath, response);
34 } else {
35 response.writeHead(404);
36 response.end();
37 }
38 }
39 });
40 server.listen(8080);
41 return server;
42 }
43
44 function createHTTPServer() {
45 const server = httpServer.createServer({
46 root: join(__dirname, 'benchmarks'),
47 robots: true,
48 cache: 'no-store',
49 headers: {
50 'Access-Control-Allow-Origin': '*',
51 'Access-Control-Allow-Credentials': 'true',
52 },
53 });
54 server.listen(8080);
55 return server;
56 }
57
58 function serveBenchmark(benchmark, http2) {
59 if (http2) {
60 return createHTTP2Server(benchmark);
61 } else {
62 return createHTTPServer();
63 }
64 }
65
66 // if run directly via CLI
67 if (require.main === module) {
68 const benchmarkInput = argv._[0];
69
70 if (benchmarkInput) {
71 serveBenchmark(benchmarkInput);
72 } else {
73 console.error('Please specify a benchmark directory to serve!');
74 process.exit(1);
75 }
76 }
77
78 module.exports = serveBenchmark;