Skip to content

Commit 1dcd281

Browse files
committed
Merge branch 'pr/nakrovati/1369-1'
2 parents b4ceefa + c9c889f commit 1dcd281

File tree

14 files changed

+284
-220
lines changed

14 files changed

+284
-220
lines changed

index.html

Lines changed: 0 additions & 1 deletion
This file was deleted.

server/app.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import Fastify from "fastify";
22
import frameworksRouter from "./src/frameworks/frameworksRouter.js";
33
import cspRouter from "./src/csp/cspRouter.js";
44
import staticRouter from "./src/static/staticRouter.js";
5+
import * as ejs from "ejs";
6+
import * as fastifyView from "@fastify/view";
57

68
/**
79
* Builds the server but does not start it. Need it for testing API
@@ -11,6 +13,12 @@ import staticRouter from "./src/static/staticRouter.js";
1113
function buildServer(options = {}) {
1214
const fastify = Fastify(options);
1315

16+
fastify.register(fastifyView, {
17+
engine: {
18+
ejs: ejs,
19+
},
20+
});
21+
1422
fastify.addHook("onRequest", (request, reply, done) => {
1523
if (request.url.endsWith("index.html")) {
1624
reply.header("Cross-Origin-Embedder-Policy", "require-corp");

server/package-lock.json

Lines changed: 137 additions & 61 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

server/package.json

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,16 @@
1515
"author": "",
1616
"license": "ISC",
1717
"dependencies": {
18-
"@fastify/static": "^6.10.2",
19-
"fastify": "^4.21.0"
18+
"@fastify/static": "^6.11.2",
19+
"@fastify/view": "^8.2.0",
20+
"ejs": "^3.1.9",
21+
"fastify": "^4.23.2"
2022
},
2123
"devDependencies": {
22-
"@types/node": "^20.4.4",
23-
"eslint": "^8.46.0",
24+
"@types/ejs": "^3.1.2",
25+
"@types/node": "^20.6.2",
26+
"eslint": "^8.49.0",
2427
"nodemon": "^3.0.1",
25-
"prettier": "^3.0.0"
28+
"prettier": "^3.0.3"
2629
}
2730
}

server/src/frameworks/frameworksControllers.js

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
1+
// @ts-check
12
import { loadFrameworkVersions } from "./frameworksServices.js";
3+
import { prepareFrameworkData } from "./helpers/index.js";
24

35
/**
46
* @typedef {import("fastify").FastifyRequest} Request
57
* @typedef {import("fastify").FastifyReply} Reply
68
*/
79

810
/**
11+
* Get framework versions.
912
* @param {Request} request
1013
* @param {Reply} reply
1114
*/
12-
export async function getFrameworksVersions(_request, reply) {
15+
export async function getFrameworksVersions(request, reply) {
1316
performance.mark("Start");
1417

1518
const frameworks = await loadFrameworkVersions();
@@ -26,3 +29,12 @@ export async function getFrameworksVersions(_request, reply) {
2629

2730
return reply.send(frameworks);
2831
}
32+
33+
/**
34+
* Get and serve the index HTML page.
35+
* @param {Request} request
36+
* @param {Reply} reply
37+
*/
38+
export async function generateAndServeIndex(request, reply) {
39+
return reply.view("templates/index.ejs", {frameworks: await prepareFrameworkData()});
40+
}

server/src/frameworks/frameworksServices.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import path from "path";
2-
import fs from "fs";
1+
import path from "node:path";
2+
import * as fs from "node:fs";
33

44
import { frameworksDirectory } from "../config/directories.js";
55
import { buildFrameworkVersionString, copyProps } from "./helpers/index.js";
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
export { copyProps } from "./copyProps.js";
22
export { buildFrameworkVersionString } from "./buildFrameworkVersionString.js";
3+
export { prepareFrameworkData } from "./prepareFrameworkData.js";
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { loadFrameworkVersions } from "../frameworksServices.js";
2+
3+
/**
4+
* Generate the index HTML page.
5+
*/
6+
export async function prepareFrameworkData() {
7+
const frameworks = await loadFrameworkVersions();
8+
9+
for (const framework of frameworks) {
10+
framework.uri = `frameworks/${framework.type}/${framework.directory}${
11+
framework.customURL || ""
12+
}`;
13+
}
14+
15+
frameworks.sort((a, b) =>
16+
a.frameworkVersionString.localeCompare(b.frameworkVersionString),
17+
);
18+
return frameworks;
19+
}

server/src/static/staticRouter.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import fastifyStatic from "@fastify/static";
2-
import path from "path";
3-
import { cwd } from "process";
2+
import path from "node:path";
3+
import { cwd } from "node:process";
44

55
import { isCSPEnabled } from "../csp/cspControllers.js";
66
import { frameworksDirectory } from "../config/directories.js";
7+
import { generateAndServeIndex } from "../frameworks/frameworksControllers.js";
78

89
const projectRootPath = path.join(cwd(), "..");
910

@@ -37,9 +38,8 @@ async function routes(fastify) {
3738
decorateReply: false,
3839
});
3940

40-
fastify.get("/index.html", async (_request, reply) => {
41-
return reply.sendFile("index.html", projectRootPath);
42-
});
41+
fastify.get("/", generateAndServeIndex);
42+
fastify.get("/index.html", generateAndServeIndex);
4343
}
4444

4545
export default routes;

server/templates/index.ejs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<!doctype html>
2+
<html>
3+
<head>
4+
<title>JS-Frameworks Benchmark</title>
5+
<meta charset="UTF-8" />
6+
<link href="css/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet" />
7+
<link rel="stylesheet" href="css/main.css" />
8+
<meta name="viewport" content="width=device-width, initial-scale=1" />
9+
</head>
10+
11+
<body>
12+
<div class="container">
13+
<div class="panel panel-default">
14+
<div class="panel-heading">
15+
<h3 class="panel-title">Choose a framework:</h3>
16+
</div>
17+
<div class="panel-body">
18+
<ul class="nav nav-pills nav-stacked">
19+
<% frameworks.forEach(framework => { %>
20+
<li>
21+
<a href="/<%= framework.uri %>/index.html"
22+
><span
23+
class="glyphicon glyphicon-arrow-right mr-5"
24+
aria-hidden="true"
25+
></span>&nbsp;<%= framework.frameworkVersionString %>
26+
</a>
27+
</li>
28+
<% }); %>
29+
</ul>
30+
</div>
31+
</div>
32+
</div>
33+
</body>
34+
</html>

0 commit comments

Comments
 (0)