Skip to content

Commit 9608904

Browse files
committed
refactor: improve code readability
Remove the if..else nesting. Move the copyProps function outside the loadFrameworkInfo function. Rename addCSP to isCSPEnabled. Replace images to object properties through square brackets with point reference. Replace string addition with the use of template strings. Replace framework checking with indexOf() with includes(). Replace let with const where possible. Replace runtime calculations '/ls' from Date.now() with performance.mark() and performance.measure(). Remove unnecessary async declarations. Format with prettier.
1 parent d737d94 commit 9608904

File tree

1 file changed

+123
-109
lines changed

1 file changed

+123
-109
lines changed

server/index.js

Lines changed: 123 additions & 109 deletions
Original file line numberDiff line numberDiff line change
@@ -6,114 +6,115 @@ import fsp from "fs/promises";
66
import { cwd } from "process";
77

88
const app = express();
9-
const port = 8080;
9+
const PORT = 8080;
1010

11-
let addCSP = false;
11+
let isCSPEnabled = false;
1212

1313
app.use(express.json());
1414

1515
const __dirname = cwd();
1616

1717
let frameworkDirectory = path.join(__dirname, "..", "frameworks");
18-
let webDriverResultDirectory = path.join(
18+
const webDriverResultDirectory = path.join(
1919
__dirname,
2020
"..",
2121
"webdriver-ts-results"
2222
);
2323

2424
if (process.argv.length === 3) {
25-
console.log("Changing working directory to " + process.argv[2]);
25+
console.log(`Changing working directory to ${process.argv[2]}`);
2626
frameworkDirectory = process.argv[2];
2727
}
2828

29+
function copyProps(result, benchmarkData) {
30+
const {
31+
issues,
32+
customURL,
33+
frameworkHomeURL,
34+
useShadowRoot,
35+
useRowShadowRoot,
36+
shadowRootName,
37+
buttonsInShadowRoot,
38+
} = benchmarkData;
39+
40+
result.issues = issues;
41+
result.customURL = customURL;
42+
result.frameworkHomeURL = frameworkHomeURL;
43+
result.useShadowRoot = useShadowRoot;
44+
result.useRowShadowRoot = useRowShadowRoot;
45+
result.shadowRootName = useShadowRoot
46+
? shadowRootName ?? "main-element"
47+
: undefined;
48+
result.buttonsInShadowRoot = useShadowRoot
49+
? buttonsInShadowRoot ?? true
50+
: undefined;
51+
}
52+
2953
async function loadFrameworkInfo(keyedDir, directoryName) {
30-
let result = {
54+
const result = {
3155
type: keyedDir,
3256
directory: directoryName,
3357
};
3458

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-
5359
const frameworkPath = path.resolve(
5460
frameworkDirectory,
5561
keyedDir,
5662
directoryName
5763
);
5864
const packageJSONPath = path.resolve(frameworkPath, "package.json");
5965
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-
}
86-
}
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);
66+
67+
if (!fs.existsSync(packageJSONPath)) {
68+
result.error = "No package.json found";
69+
return result;
70+
}
71+
72+
const packageJSON = JSON.parse(await fsp.readFile(packageJSONPath, "utf8"));
73+
const benchmarkData = packageJSON["js-framework-benchmark"];
74+
75+
if (!benchmarkData) {
76+
result.error =
77+
"package.json must contain a 'js-framework-benchmark' property";
78+
return result;
79+
}
80+
81+
if (benchmarkData.frameworkVersionFromPackage) {
82+
const packageNames = benchmarkData.frameworkVersionFromPackage.split(":");
83+
const packageLockJSON = JSON.parse(
84+
await fsp.readFile(packageLockJSONPath, "utf8")
85+
);
86+
87+
result.versions = {};
88+
89+
for (const packageName of packageNames) {
90+
if (packageLockJSON.dependencies?.[packageName]) {
91+
result.versions[packageName] =
92+
packageLockJSON.dependencies[packageName].version;
93+
} else if (packageLockJSON.packages?.[`node_modules/${packageName}`]) {
94+
result.versions[packageName] =
95+
packageLockJSON.packages[`node_modules/${packageName}`].version;
10696
} else {
107-
result.error =
108-
"package.json must contain a 'frameworkVersionFromPackage' or 'frameworkVersion' in the 'js-framework-benchmark'.property";
97+
result.versions[packageName] = "ERROR: Not found in package-lock";
10998
}
110-
} else {
111-
result.error =
112-
"package.json must contain a 'js-framework-benchmark' property";
11399
}
100+
101+
result.frameworkVersionString = `${directoryName}-v${packageNames
102+
.map((p) => result.versions[p])
103+
.join(" + ")}-${keyedDir}`;
104+
105+
copyProps(result, benchmarkData);
106+
} else if (typeof benchmarkData.frameworkVersion === "string") {
107+
result.version = benchmarkData.frameworkVersion;
108+
result.frameworkVersionString = `${directoryName}${
109+
result.version ? `-v${result.version}` : ""
110+
}-${keyedDir}`;
111+
112+
copyProps(result, benchmarkData);
114113
} else {
115-
result.error = "No package.json found";
114+
result.error =
115+
"package.json must contain a 'frameworkVersionFromPackage' or 'frameworkVersion' in the 'js-framework-benchmark'.property";
116116
}
117+
117118
return result;
118119
}
119120

@@ -127,25 +128,31 @@ function isFrameworkDir(keyedDir, directoryName) {
127128
const packageLockJSONPath = path.resolve(frameworkPath, "package-lock.json");
128129
const exists =
129130
fs.existsSync(packageJSONPath) && fs.existsSync(packageLockJSONPath);
131+
130132
return exists;
131133
}
132134

133135
async function loadFrameworkVersionInformation(filterForFramework) {
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);
147-
}
136+
const resultsProm = [];
137+
const frameworksPath = path.resolve(frameworkDirectory);
138+
const keyedTypes = ["keyed", "non-keyed"];
139+
140+
for (const keyedType of keyedTypes) {
141+
const directories = fs.readdirSync(path.resolve(frameworksPath, keyedType));
142+
143+
for (const directory of directories) {
144+
const pathInFrameworksDir = `${keyedType}/${directory}`;
145+
146+
if (filterForFramework && filterForFramework !== pathInFrameworksDir) {
147+
continue;
148148
}
149+
150+
if (!isFrameworkDir(keyedType, directory)) {
151+
continue;
152+
}
153+
154+
const frameworkInfo = loadFrameworkInfo(keyedType, directory);
155+
resultsProm.push(frameworkInfo);
149156
}
150157
}
151158
return Promise.all(resultsProm);
@@ -163,8 +170,8 @@ app.use(addSiteIsolationForIndex);
163170
app.use(
164171
"/frameworks",
165172
express.static(frameworkDirectory, {
166-
setHeaders: function (res, path) {
167-
if (addCSP && path.endsWith("index.html")) {
173+
setHeaders: (res, path) => {
174+
if (isCSPEnabled && path.endsWith("index.html")) {
168175
console.log("adding CSP to ", path);
169176
res.setHeader(
170177
"Content-Security-Policy",
@@ -176,50 +183,57 @@ app.use(
176183
);
177184
app.use("/webdriver-ts-results", express.static(webDriverResultDirectory));
178185
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"));
186+
app.get("/index.html", (req, res) => {
187+
const indexHTMLPath = path.join(__dirname, "..", "index.html");
188+
res.sendFile(indexHTMLPath);
181189
});
182190
app.get("/ls", async (req, res) => {
183-
let t0 = Date.now();
184-
let frameworks = await loadFrameworkVersionInformation();
191+
performance.mark("Start");
192+
const frameworks = await loadFrameworkVersionInformation();
185193
res.send(frameworks);
186-
let t1 = Date.now();
187-
console.log("/ls duration ", t1 - t0);
194+
performance.mark("End");
195+
const executionTime = performance.measure(
196+
"/ls duration measurement",
197+
"Start",
198+
"End"
199+
).duration;
200+
201+
console.log(`/ls duration: ${executionTime}ms`);
188202
});
189203
app.use("/csp", bodyParser.json({ type: "application/csp-report" }));
190204

191205
let violations = [];
192206

193-
app.post("/csp", async (req, res) => {
207+
app.post("/csp", (req, res) => {
194208
console.log("/CSP ", req.body);
195-
let uri = req.body["csp-report"]["document-uri"];
196-
let frameworkRegEx = /((non-)?keyed\/.*?\/)/;
197-
let framework = uri.match(frameworkRegEx)[0];
198-
if (violations.indexOf(framework) == -1) {
209+
const uri = req.body["csp-report"]["document-uri"];
210+
const frameworkRegEx = /((non-)?keyed\/.*?\/)/;
211+
const framework = uri.match(frameworkRegEx)[0];
212+
if (!violations.includes(framework)) {
199213
violations.push(framework);
200214
}
201215
res.sendStatus(201);
202216
});
203217

204-
app.get("/startCSP", async (req, res) => {
218+
app.get("/startCSP", (req, res) => {
205219
console.log("/startCSP");
206220
violations = [];
207-
addCSP = true;
221+
isCSPEnabled = true;
208222
res.send("OK");
209223
});
210224

211-
app.get("/endCSP", async (req, res) => {
225+
app.get("/endCSP", (req, res) => {
212226
console.log("/endCSP");
213227
violations = [];
214-
addCSP = false;
228+
isCSPEnabled = false;
215229
res.send("OK");
216230
});
217231

218-
app.get("/csp", async (req, res) => {
232+
app.get("/csp", (req, res) => {
219233
console.log("CSP violations recorded for", violations);
220234
res.send(violations);
221235
});
222236

223-
app.listen(port, () => {
224-
console.log(`Server running on port ${port}`);
237+
app.listen(PORT, () => {
238+
console.log(`Server running on port ${PORT}`);
225239
});

0 commit comments

Comments
 (0)