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" ;
6
7
7
- const app = express ( )
8
- const port = 8080
8
+ const app = express ( ) ;
9
+ const port = 8080 ;
9
10
10
11
let addCSP = false ;
11
12
12
13
app . use ( express . json ( ) ) ;
13
14
14
- let frameworkDirectory = path . join ( __dirname , ".." , "frameworks" ) ;
15
- let webDriverResultDirectory = path . join ( __dirname , ".." , "webdriver-ts-results" ) ;
15
+ const __dirname = cwd ( ) ;
16
16
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 ] ) ;
19
26
frameworkDirectory = process . argv [ 2 ] ;
20
27
}
21
28
22
29
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
+ }
66
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 ) ;
67
106
} 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" ;
69
109
}
70
110
} else {
71
- result . error = "No package.json found" ;
111
+ result . error =
112
+ "package.json must contain a 'js-framework-benchmark' property" ;
72
113
}
73
- return result ;
114
+ } else {
115
+ result . error = "No package.json found" ;
74
116
}
117
+ return result ;
118
+ }
75
119
76
120
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 ) ;
81
130
return exists ;
82
131
}
83
132
84
133
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 ) ;
99
147
}
100
148
}
101
149
}
102
- return Promise . all ( resultsProm ) ;
103
150
}
151
+ return Promise . all ( resultsProm ) ;
152
+ }
104
153
105
154
function addSiteIsolationForIndex ( request , response , next ) {
106
155
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" ) ;
109
158
}
110
159
next ( ) ;
111
160
}
112
161
app . use ( addSiteIsolationForIndex ) ;
113
162
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 ) {
117
167
if ( addCSP && path . endsWith ( "index.html" ) ) {
118
168
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
+ ) ;
120
173
}
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 ) => {
141
194
console . log ( "/CSP " , req . body ) ;
142
- let uri = req . body [ ' csp-report' ] [ "document-uri" ]
143
- let frameworkRegEx = / ( ( n o n - ) ? k e y e d \/ .* ?\/ ) /
195
+ let uri = req . body [ " csp-report" ] [ "document-uri" ] ;
196
+ let frameworkRegEx = / ( ( n o n - ) ? k e y e d \/ .* ?\/ ) / ;
144
197
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 ) ;
147
200
}
148
201
res . sendStatus ( 201 ) ;
149
- } )
202
+ } ) ;
150
203
151
- app . get ( ' /startCSP' , async ( req , res ) => {
204
+ app . get ( " /startCSP" , async ( req , res ) => {
152
205
console . log ( "/startCSP" ) ;
153
206
violations = [ ] ;
154
207
addCSP = true ;
155
- res . send ( "OK" )
156
- } )
208
+ res . send ( "OK" ) ;
209
+ } ) ;
157
210
158
- app . get ( ' /endCSP' , async ( req , res ) => {
211
+ app . get ( " /endCSP" , async ( req , res ) => {
159
212
console . log ( "/endCSP" ) ;
160
213
violations = [ ] ;
161
214
addCSP = false ;
162
- res . send ( "OK" )
163
- } )
215
+ res . send ( "OK" ) ;
216
+ } ) ;
164
217
165
- app . get ( ' /csp' , async ( req , res ) => {
218
+ app . get ( " /csp" , async ( req , res ) => {
166
219
console . log ( "CSP violations recorded for" , violations ) ;
167
- res . send ( violations )
168
- } )
169
-
220
+ res . send ( violations ) ;
221
+ } ) ;
170
222
171
223
app . listen ( port , ( ) => {
172
224
console . log ( `Server running on port ${ port } ` ) ;
173
- } )
225
+ } ) ;
0 commit comments