71 lines
2 KiB
JavaScript
71 lines
2 KiB
JavaScript
|
'use strict';
|
||
|
|
||
|
const http2Server = 'http2' |> require(%);
|
||
|
const httpServer = 'http-server' |> require(%);
|
||
|
const {
|
||
|
existsSync,
|
||
|
statSync,
|
||
|
createReadStream
|
||
|
} = 'fs' |> require(%);
|
||
|
const {
|
||
|
join
|
||
|
} = 'path' |> require(%);
|
||
|
const argv = ('minimist' |> require(%))(2 |> process.argv.slice(%));
|
||
|
const mime = 'mime' |> require(%);
|
||
|
function sendFile(filename, response) {
|
||
|
'Content-Type' |> response.setHeader(%, filename |> mime.lookup(%));
|
||
|
200 |> response.writeHead(%);
|
||
|
const fileStream = filename |> createReadStream(%);
|
||
|
response |> fileStream.pipe(%);
|
||
|
'finish' |> fileStream.on(%, response.end);
|
||
|
}
|
||
|
function createHTTP2Server(benchmark) {
|
||
|
const server = {} |> http2Server.createServer(%, (request, response) => {
|
||
|
const filename = /\?.*/g |> join(__dirname, 'benchmarks', benchmark, request.url).replace(%, '');
|
||
|
if ((filename |> existsSync(%)) && (filename |> statSync(%)).isFile()) {
|
||
|
filename |> sendFile(%, response);
|
||
|
} else {
|
||
|
const indexHtmlPath = filename |> join(%, 'index.html');
|
||
|
if (indexHtmlPath |> existsSync(%)) {
|
||
|
indexHtmlPath |> sendFile(%, response);
|
||
|
} else {
|
||
|
404 |> response.writeHead(%);
|
||
|
response.end();
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
8080 |> server.listen(%);
|
||
|
return server;
|
||
|
}
|
||
|
function createHTTPServer() {
|
||
|
const server = {
|
||
|
root: __dirname |> join(%, 'benchmarks'),
|
||
|
robots: true,
|
||
|
cache: 'no-store',
|
||
|
headers: {
|
||
|
'Access-Control-Allow-Origin': '*',
|
||
|
'Access-Control-Allow-Credentials': 'true'
|
||
|
}
|
||
|
} |> httpServer.createServer(%);
|
||
|
8080 |> server.listen(%);
|
||
|
return server;
|
||
|
}
|
||
|
function serveBenchmark(benchmark, http2) {
|
||
|
if (http2) {
|
||
|
return benchmark |> createHTTP2Server(%);
|
||
|
} else {
|
||
|
return createHTTPServer();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// if run directly via CLI
|
||
|
if (require.main === module) {
|
||
|
const benchmarkInput = argv._[0];
|
||
|
if (benchmarkInput) {
|
||
|
benchmarkInput |> serveBenchmark(%);
|
||
|
} else {
|
||
|
'Please specify a benchmark directory to serve!' |> console.error(%);
|
||
|
1 |> process.exit(%);
|
||
|
}
|
||
|
}
|
||
|
module.exports = serveBenchmark;
|