@@ -6,114 +6,115 @@ import fsp from "fs/promises";
6
6
import { cwd } from "process" ;
7
7
8
8
const app = express ( ) ;
9
- const port = 8080 ;
9
+ const PORT = 8080 ;
10
10
11
- let addCSP = false ;
11
+ let isCSPEnabled = false ;
12
12
13
13
app . use ( express . json ( ) ) ;
14
14
15
15
const __dirname = cwd ( ) ;
16
16
17
17
let frameworkDirectory = path . join ( __dirname , ".." , "frameworks" ) ;
18
- let webDriverResultDirectory = path . join (
18
+ const webDriverResultDirectory = path . join (
19
19
__dirname ,
20
20
".." ,
21
21
"webdriver-ts-results"
22
22
) ;
23
23
24
24
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 ] } ` ) ;
26
26
frameworkDirectory = process . argv [ 2 ] ;
27
27
}
28
28
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
+
29
53
async function loadFrameworkInfo ( keyedDir , directoryName ) {
30
- let result = {
54
+ const result = {
31
55
type : keyedDir ,
32
56
directory : directoryName ,
33
57
} ;
34
58
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
59
const frameworkPath = path . resolve (
54
60
frameworkDirectory ,
55
61
keyedDir ,
56
62
directoryName
57
63
) ;
58
64
const packageJSONPath = path . resolve ( frameworkPath , "package.json" ) ;
59
65
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 ;
106
96
} 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" ;
109
98
}
110
- } else {
111
- result . error =
112
- "package.json must contain a 'js-framework-benchmark' property" ;
113
99
}
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 ) ;
114
113
} 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" ;
116
116
}
117
+
117
118
return result ;
118
119
}
119
120
@@ -127,25 +128,31 @@ function isFrameworkDir(keyedDir, directoryName) {
127
128
const packageLockJSONPath = path . resolve ( frameworkPath , "package-lock.json" ) ;
128
129
const exists =
129
130
fs . existsSync ( packageJSONPath ) && fs . existsSync ( packageLockJSONPath ) ;
131
+
130
132
return exists ;
131
133
}
132
134
133
135
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 ;
148
148
}
149
+
150
+ if ( ! isFrameworkDir ( keyedType , directory ) ) {
151
+ continue ;
152
+ }
153
+
154
+ const frameworkInfo = loadFrameworkInfo ( keyedType , directory ) ;
155
+ resultsProm . push ( frameworkInfo ) ;
149
156
}
150
157
}
151
158
return Promise . all ( resultsProm ) ;
@@ -163,8 +170,8 @@ app.use(addSiteIsolationForIndex);
163
170
app . use (
164
171
"/frameworks" ,
165
172
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" ) ) {
168
175
console . log ( "adding CSP to " , path ) ;
169
176
res . setHeader (
170
177
"Content-Security-Policy" ,
@@ -176,50 +183,57 @@ app.use(
176
183
) ;
177
184
app . use ( "/webdriver-ts-results" , express . static ( webDriverResultDirectory ) ) ;
178
185
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 ) ;
181
189
} ) ;
182
190
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 ( ) ;
185
193
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` ) ;
188
202
} ) ;
189
203
app . use ( "/csp" , bodyParser . json ( { type : "application/csp-report" } ) ) ;
190
204
191
205
let violations = [ ] ;
192
206
193
- app . post ( "/csp" , async ( req , res ) => {
207
+ app . post ( "/csp" , ( req , res ) => {
194
208
console . log ( "/CSP " , req . body ) ;
195
- let uri = req . body [ "csp-report" ] [ "document-uri" ] ;
196
- let frameworkRegEx = / ( ( n o n - ) ? k e y e d \/ .* ?\/ ) / ;
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 = / ( ( n o n - ) ? k e y e d \/ .* ?\/ ) / ;
211
+ const framework = uri . match ( frameworkRegEx ) [ 0 ] ;
212
+ if ( ! violations . includes ( framework ) ) {
199
213
violations . push ( framework ) ;
200
214
}
201
215
res . sendStatus ( 201 ) ;
202
216
} ) ;
203
217
204
- app . get ( "/startCSP" , async ( req , res ) => {
218
+ app . get ( "/startCSP" , ( req , res ) => {
205
219
console . log ( "/startCSP" ) ;
206
220
violations = [ ] ;
207
- addCSP = true ;
221
+ isCSPEnabled = true ;
208
222
res . send ( "OK" ) ;
209
223
} ) ;
210
224
211
- app . get ( "/endCSP" , async ( req , res ) => {
225
+ app . get ( "/endCSP" , ( req , res ) => {
212
226
console . log ( "/endCSP" ) ;
213
227
violations = [ ] ;
214
- addCSP = false ;
228
+ isCSPEnabled = false ;
215
229
res . send ( "OK" ) ;
216
230
} ) ;
217
231
218
- app . get ( "/csp" , async ( req , res ) => {
232
+ app . get ( "/csp" , ( req , res ) => {
219
233
console . log ( "CSP violations recorded for" , violations ) ;
220
234
res . send ( violations ) ;
221
235
} ) ;
222
236
223
- app . listen ( port , ( ) => {
224
- console . log ( `Server running on port ${ port } ` ) ;
237
+ app . listen ( PORT , ( ) => {
238
+ console . log ( `Server running on port ${ PORT } ` ) ;
225
239
} ) ;
0 commit comments