Skip to content

Commit d737d94

Browse files
committed
refactor: rewrite using ES modules
1 parent 5898e21 commit d737d94

File tree

2 files changed

+171
-118
lines changed

2 files changed

+171
-118
lines changed

server/index.js

Lines changed: 170 additions & 118 deletions
Original file line numberDiff line numberDiff line change
@@ -1,173 +1,225 @@
1-
const express = require('express')
2-
const bodyParser = require('body-parser')
3-
const path = require('path')
4-
const fs = require('fs');
5-
const fsp = require('fs/promises');
1+
import express from "express";
2+
import bodyParser from "body-parser";
3+
import path from "path";
4+
import fs from "fs";
5+
import fsp from "fs/promises";
6+
import { cwd } from "process";
67

7-
const app = express()
8-
const port = 8080
8+
const app = express();
9+
const port = 8080;
910

1011
let addCSP = false;
1112

1213
app.use(express.json());
1314

14-
let frameworkDirectory = path.join(__dirname, "..", "frameworks");
15-
let webDriverResultDirectory = path.join(__dirname, "..", "webdriver-ts-results");
15+
const __dirname = cwd();
1616

17-
if (process.argv.length===3) {
18-
console.log("Changing working directory to "+process.argv[2]);
17+
let frameworkDirectory = path.join(__dirname, "..", "frameworks");
18+
let webDriverResultDirectory = path.join(
19+
__dirname,
20+
"..",
21+
"webdriver-ts-results"
22+
);
23+
24+
if (process.argv.length === 3) {
25+
console.log("Changing working directory to " + process.argv[2]);
1926
frameworkDirectory = process.argv[2];
2027
}
2128

2229
async function loadFrameworkInfo(keyedDir, directoryName) {
23-
let result = {
24-
type: keyedDir,
25-
directory: directoryName,
26-
};
27-
28-
let copyProps = (result, packageJSON) => {
29-
result.issues = packageJSON["js-framework-benchmark"]["issues"];
30-
result.customURL = packageJSON["js-framework-benchmark"]["customURL"];
31-
result.frameworkHomeURL = packageJSON["js-framework-benchmark"]["frameworkHomeURL"];
32-
let useShadowRoot = packageJSON["js-framework-benchmark"]["useShadowRoot"];
33-
result.useShadowRoot = useShadowRoot;
34-
result.useRowShadowRoot = packageJSON["js-framework-benchmark"]["useRowShadowRoot"];
35-
result.shadowRootName = useShadowRoot ? (packageJSON["js-framework-benchmark"]["shadowRootName"] ?? "main-element" ) : undefined;
36-
result.buttonsInShadowRoot = useShadowRoot ? (packageJSON["js-framework-benchmark"]["buttonsInShadowRoot"] ?? true) : undefined;
37-
}
38-
39-
const frameworkPath = path.resolve(frameworkDirectory, keyedDir, directoryName);
40-
const packageJSONPath = path.resolve(frameworkPath, "package.json");
41-
const packageLockJSONPath = path.resolve(frameworkPath, "package-lock.json");
42-
if (fs.existsSync(packageJSONPath)) {
43-
let packageJSON = JSON.parse(await fsp.readFile(packageJSONPath, "utf8"));
44-
if (packageJSON["js-framework-benchmark"]) {
45-
if (packageJSON["js-framework-benchmark"]["frameworkVersionFromPackage"]) {
46-
let packageNames = packageJSON["js-framework-benchmark"]["frameworkVersionFromPackage"].split(":");
47-
let packageLockJSON = JSON.parse(await fsp.readFile(packageLockJSONPath, "utf8"));
48-
result.versions = {};
49-
for (let packageName of packageNames) {
50-
if (packageLockJSON.dependencies?.[packageName]) {
51-
result.versions[packageName] = packageLockJSON.dependencies[packageName].version;
52-
} else if (packageLockJSON.packages?.[`node_modules/${packageName}`]) {
53-
result.versions[packageName] = packageLockJSON.packages[`node_modules/${packageName}`].version;
54-
} else {
55-
result.versions[packageName] = "ERROR: Not found in package-lock";
56-
}
57-
}
58-
result.frameworkVersionString = directoryName + "-v" + packageNames.map(p => result.versions[p]).join(" + ") + "-"+keyedDir;
59-
copyProps(result, packageJSON);
60-
} else if (typeof packageJSON["js-framework-benchmark"]["frameworkVersion"] === "string") {
61-
result.version = packageJSON["js-framework-benchmark"]["frameworkVersion"];
62-
result.frameworkVersionString = directoryName + (result.version ? "-v" + result.version : "")+ "-"+keyedDir;
63-
copyProps(result, packageJSON);
64-
} else {
65-
result.error = "package.json must contain a 'frameworkVersionFromPackage' or 'frameworkVersion' in the 'js-framework-benchmark'.property";
30+
let result = {
31+
type: keyedDir,
32+
directory: directoryName,
33+
};
34+
35+
let copyProps = (result, packageJSON) => {
36+
result.issues = packageJSON["js-framework-benchmark"]["issues"];
37+
result.customURL = packageJSON["js-framework-benchmark"]["customURL"];
38+
result.frameworkHomeURL =
39+
packageJSON["js-framework-benchmark"]["frameworkHomeURL"];
40+
let useShadowRoot = packageJSON["js-framework-benchmark"]["useShadowRoot"];
41+
result.useShadowRoot = useShadowRoot;
42+
result.useRowShadowRoot =
43+
packageJSON["js-framework-benchmark"]["useRowShadowRoot"];
44+
result.shadowRootName = useShadowRoot
45+
? packageJSON["js-framework-benchmark"]["shadowRootName"] ??
46+
"main-element"
47+
: undefined;
48+
result.buttonsInShadowRoot = useShadowRoot
49+
? packageJSON["js-framework-benchmark"]["buttonsInShadowRoot"] ?? true
50+
: undefined;
51+
};
52+
53+
const frameworkPath = path.resolve(
54+
frameworkDirectory,
55+
keyedDir,
56+
directoryName
57+
);
58+
const packageJSONPath = path.resolve(frameworkPath, "package.json");
59+
const packageLockJSONPath = path.resolve(frameworkPath, "package-lock.json");
60+
if (fs.existsSync(packageJSONPath)) {
61+
let packageJSON = JSON.parse(await fsp.readFile(packageJSONPath, "utf8"));
62+
if (packageJSON["js-framework-benchmark"]) {
63+
if (
64+
packageJSON["js-framework-benchmark"]["frameworkVersionFromPackage"]
65+
) {
66+
let packageNames =
67+
packageJSON["js-framework-benchmark"][
68+
"frameworkVersionFromPackage"
69+
].split(":");
70+
let packageLockJSON = JSON.parse(
71+
await fsp.readFile(packageLockJSONPath, "utf8")
72+
);
73+
result.versions = {};
74+
for (let packageName of packageNames) {
75+
if (packageLockJSON.dependencies?.[packageName]) {
76+
result.versions[packageName] =
77+
packageLockJSON.dependencies[packageName].version;
78+
} else if (
79+
packageLockJSON.packages?.[`node_modules/${packageName}`]
80+
) {
81+
result.versions[packageName] =
82+
packageLockJSON.packages[`node_modules/${packageName}`].version;
83+
} else {
84+
result.versions[packageName] = "ERROR: Not found in package-lock";
85+
}
6686
}
87+
result.frameworkVersionString =
88+
directoryName +
89+
"-v" +
90+
packageNames.map((p) => result.versions[p]).join(" + ") +
91+
"-" +
92+
keyedDir;
93+
copyProps(result, packageJSON);
94+
} else if (
95+
typeof packageJSON["js-framework-benchmark"]["frameworkVersion"] ===
96+
"string"
97+
) {
98+
result.version =
99+
packageJSON["js-framework-benchmark"]["frameworkVersion"];
100+
result.frameworkVersionString =
101+
directoryName +
102+
(result.version ? "-v" + result.version : "") +
103+
"-" +
104+
keyedDir;
105+
copyProps(result, packageJSON);
67106
} else {
68-
result.error = "package.json must contain a 'js-framework-benchmark' property";
107+
result.error =
108+
"package.json must contain a 'frameworkVersionFromPackage' or 'frameworkVersion' in the 'js-framework-benchmark'.property";
69109
}
70110
} else {
71-
result.error = "No package.json found";
111+
result.error =
112+
"package.json must contain a 'js-framework-benchmark' property";
72113
}
73-
return result;
114+
} else {
115+
result.error = "No package.json found";
74116
}
117+
return result;
118+
}
75119

76120
function isFrameworkDir(keyedDir, directoryName) {
77-
const frameworkPath = path.resolve(frameworkDirectory, keyedDir, directoryName);
78-
const packageJSONPath = path.resolve(frameworkPath, "package.json");
79-
const packageLockJSONPath = path.resolve(frameworkPath, "package-lock.json");
80-
const exists = fs.existsSync(packageJSONPath) && fs.existsSync(packageLockJSONPath);
121+
const frameworkPath = path.resolve(
122+
frameworkDirectory,
123+
keyedDir,
124+
directoryName
125+
);
126+
const packageJSONPath = path.resolve(frameworkPath, "package.json");
127+
const packageLockJSONPath = path.resolve(frameworkPath, "package-lock.json");
128+
const exists =
129+
fs.existsSync(packageJSONPath) && fs.existsSync(packageLockJSONPath);
81130
return exists;
82131
}
83132

84133
async function loadFrameworkVersionInformation(filterForFramework) {
85-
// let matchesDirectoryArg = (directoryName) =>
86-
// frameworkArgument.length == 0 || frameworkArgument.some((arg: string) => arg == directoryName);
87-
88-
let resultsProm = [];
89-
let frameworksPath = path.resolve(frameworkDirectory);
90-
for (keyedType of ["keyed", "non-keyed"]) {
91-
let directories = fs.readdirSync(path.resolve(frameworksPath, keyedType));
92-
for (let directory of directories) {
93-
let pathInFrameworksDir = keyedType + "/" + directory;
94-
if (!filterForFramework || filterForFramework===pathInFrameworksDir) {
95-
if (isFrameworkDir(keyedType, directory)) {
96-
let fi = loadFrameworkInfo(keyedType, directory);
97-
resultsProm.push(fi);
98-
}
134+
// let matchesDirectoryArg = (directoryName) =>
135+
// frameworkArgument.length == 0 || frameworkArgument.some((arg: string) => arg == directoryName);
136+
137+
let resultsProm = [];
138+
let frameworksPath = path.resolve(frameworkDirectory);
139+
for (const keyedType of ["keyed", "non-keyed"]) {
140+
let directories = fs.readdirSync(path.resolve(frameworksPath, keyedType));
141+
for (let directory of directories) {
142+
let pathInFrameworksDir = keyedType + "/" + directory;
143+
if (!filterForFramework || filterForFramework === pathInFrameworksDir) {
144+
if (isFrameworkDir(keyedType, directory)) {
145+
let fi = loadFrameworkInfo(keyedType, directory);
146+
resultsProm.push(fi);
99147
}
100148
}
101149
}
102-
return Promise.all(resultsProm);
103150
}
151+
return Promise.all(resultsProm);
152+
}
104153

105154
function addSiteIsolationForIndex(request, response, next) {
106155
if (request.path.endsWith("/index.html")) {
107-
response.setHeader("Cross-Origin-Embedder-Policy","require-corp");
108-
response.setHeader("Cross-Origin-Opener-Policy","same-origin");
156+
response.setHeader("Cross-Origin-Embedder-Policy", "require-corp");
157+
response.setHeader("Cross-Origin-Opener-Policy", "same-origin");
109158
}
110159
next();
111160
}
112161
app.use(addSiteIsolationForIndex);
113162

114-
app.use('/frameworks', express.static(frameworkDirectory,
115-
{
116-
setHeaders: function(res, path) {
163+
app.use(
164+
"/frameworks",
165+
express.static(frameworkDirectory, {
166+
setHeaders: function (res, path) {
117167
if (addCSP && path.endsWith("index.html")) {
118168
console.log("adding CSP to ", path);
119-
res.setHeader('Content-Security-Policy', "default-src 'self'; report-uri /csp");
169+
res.setHeader(
170+
"Content-Security-Policy",
171+
"default-src 'self'; report-uri /csp"
172+
);
120173
}
121-
}
122-
}
123-
))
124-
app.use('/webdriver-ts-results', express.static(webDriverResultDirectory))
125-
app.use('/css', express.static(path.join(frameworkDirectory, '..', 'css')))
126-
app.get('/index.html', async (req, res, next) => {
127-
res.sendFile(path.join(__dirname,'..', 'index.html'));
128-
})
129-
app.get('/ls', async (req, res) => {
130-
let t0 = Date.now();
131-
let frameworks = await loadFrameworkVersionInformation();
132-
res.send(frameworks);
133-
let t1 = Date.now();
134-
console.log("/ls duration ", (t1-t0));
135-
})
136-
app.use('/csp', bodyParser.json({ type: 'application/csp-report' }))
137-
138-
let violations = []
139-
140-
app.post('/csp', async (req, res) => {
174+
},
175+
})
176+
);
177+
app.use("/webdriver-ts-results", express.static(webDriverResultDirectory));
178+
app.use("/css", express.static(path.join(frameworkDirectory, "..", "css")));
179+
app.get("/index.html", async (req, res, next) => {
180+
res.sendFile(path.join(__dirname, "..", "index.html"));
181+
});
182+
app.get("/ls", async (req, res) => {
183+
let t0 = Date.now();
184+
let frameworks = await loadFrameworkVersionInformation();
185+
res.send(frameworks);
186+
let t1 = Date.now();
187+
console.log("/ls duration ", t1 - t0);
188+
});
189+
app.use("/csp", bodyParser.json({ type: "application/csp-report" }));
190+
191+
let violations = [];
192+
193+
app.post("/csp", async (req, res) => {
141194
console.log("/CSP ", req.body);
142-
let uri = req.body['csp-report']["document-uri"]
143-
let frameworkRegEx = /((non-)?keyed\/.*?\/)/
195+
let uri = req.body["csp-report"]["document-uri"];
196+
let frameworkRegEx = /((non-)?keyed\/.*?\/)/;
144197
let framework = uri.match(frameworkRegEx)[0];
145-
if (violations.indexOf(framework)==-1) {
146-
violations.push(framework)
198+
if (violations.indexOf(framework) == -1) {
199+
violations.push(framework);
147200
}
148201
res.sendStatus(201);
149-
})
202+
});
150203

151-
app.get('/startCSP', async (req, res) => {
204+
app.get("/startCSP", async (req, res) => {
152205
console.log("/startCSP");
153206
violations = [];
154207
addCSP = true;
155-
res.send("OK")
156-
})
208+
res.send("OK");
209+
});
157210

158-
app.get('/endCSP', async (req, res) => {
211+
app.get("/endCSP", async (req, res) => {
159212
console.log("/endCSP");
160213
violations = [];
161214
addCSP = false;
162-
res.send("OK")
163-
})
215+
res.send("OK");
216+
});
164217

165-
app.get('/csp', async (req, res) => {
218+
app.get("/csp", async (req, res) => {
166219
console.log("CSP violations recorded for", violations);
167-
res.send(violations)
168-
})
169-
220+
res.send(violations);
221+
});
170222

171223
app.listen(port, () => {
172224
console.log(`Server running on port ${port}`);
173-
})
225+
});

server/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
{
22
"name": "js-framework-benchmark-server",
33
"version": "1.0.0",
4+
"type": "module",
45
"description": "",
56
"main": "index.js",
67
"scripts": {

0 commit comments

Comments
 (0)