1
+ const express = require ( 'express' )
2
+ const path = require ( 'path' )
3
+ const fs = require ( 'fs' ) ;
4
+ const fsp = require ( 'fs/promises' ) ;
5
+
6
+ const app = express ( )
7
+ const port = 8080
8
+
9
+ async function loadFrameworkInfo ( keyedDir , directoryName ) {
10
+ let result = {
11
+ type : keyedDir ,
12
+ directory : directoryName ,
13
+ } ;
14
+
15
+ let copyProps = ( result , packageJSON ) => {
16
+ result . issues = packageJSON [ "js-framework-benchmark" ] [ "issues" ] ;
17
+ result . customURL = packageJSON [ "js-framework-benchmark" ] [ "customURL" ] ;
18
+ let useShadowRoot = packageJSON [ "js-framework-benchmark" ] [ "useShadowRoot" ] ;
19
+ result . useShadowRoot = useShadowRoot ;
20
+ result . useRowShadowRoot = packageJSON [ "js-framework-benchmark" ] [ "useRowShadowRoot" ] ;
21
+ result . shadowRootName = useShadowRoot ? ( packageJSON [ "js-framework-benchmark" ] [ "shadowRootName" ] ?? "main-element" ) : undefined ;
22
+ result . buttonsInShadowRoot = useShadowRoot ? ( packageJSON [ "js-framework-benchmark" ] [ "buttonsInShadowRoot" ] ?? true ) : undefined ;
23
+ }
24
+
25
+ const frameworkPath = path . resolve ( ".." , "frameworks" , keyedDir , directoryName ) ;
26
+ const packageJSONPath = path . resolve ( frameworkPath , "package.json" ) ;
27
+ const packageLockJSONPath = path . resolve ( frameworkPath , "package-lock.json" ) ;
28
+ if ( fs . existsSync ( packageJSONPath ) ) {
29
+ let packageJSON = JSON . parse ( await fsp . readFile ( packageJSONPath , "utf8" ) ) ;
30
+ if ( packageJSON [ "js-framework-benchmark" ] ) {
31
+ if ( packageJSON [ "js-framework-benchmark" ] [ "frameworkVersionFromPackage" ] ) {
32
+ let packageNames = packageJSON [ "js-framework-benchmark" ] [ "frameworkVersionFromPackage" ] . split ( ":" ) ;
33
+ let packageLockJSON = JSON . parse ( await fsp . readFile ( packageLockJSONPath , "utf8" ) ) ;
34
+ result . versions = { } ;
35
+ for ( let packageName of packageNames ) {
36
+ if ( packageLockJSON . dependencies [ packageName ] ) {
37
+ result . versions [ packageName ] = packageLockJSON . dependencies [ packageName ] . version ;
38
+ } else {
39
+ result . versions [ packageName ] = "ERROR: Not found in package-lock" ;
40
+ }
41
+ }
42
+ result . frameworkVersionString = directoryName + "-v" + packageNames . map ( p => result . versions [ p ] ) . join ( " + " ) + "-" + keyedDir ;
43
+ copyProps ( result , packageJSON ) ;
44
+ } else if ( typeof packageJSON [ "js-framework-benchmark" ] [ "frameworkVersion" ] === "string" ) {
45
+ result . version = packageJSON [ "js-framework-benchmark" ] [ "frameworkVersion" ] ;
46
+ result . frameworkVersionString = directoryName + ( result . version ? "-v" + result . version : "" ) + "-" + keyedDir ;
47
+ copyProps ( result , packageJSON ) ;
48
+ } else {
49
+ result . error = "package.json must contain a 'frameworkVersionFromPackage' or 'frameworkVersion' in the 'js-framework-benchmark'.property" ;
50
+ }
51
+ } else {
52
+ result . error = "package.json must contain a 'js-framework-benchmark' property" ;
53
+ }
54
+ } else {
55
+ result . error = "No package.json found" ;
56
+ }
57
+ return result ;
58
+ }
59
+
60
+ async function loadFrameworkVersionInformation ( filterForFramework ) {
61
+ // let matchesDirectoryArg = (directoryName) =>
62
+ // frameworkArgument.length == 0 || frameworkArgument.some((arg: string) => arg == directoryName);
63
+
64
+ let resultsProm = [ ] ;
65
+ let frameworksPath = path . resolve ( ".." , "frameworks" ) ;
66
+ for ( keyedType of [ "keyed" , "non-keyed" ] ) {
67
+ let directories = fs . readdirSync ( path . resolve ( frameworksPath , keyedType ) ) ;
68
+ for ( let directory of directories ) {
69
+ let pathInFrameworksDir = keyedType + "/" + directory ;
70
+ if ( ! filterForFramework || filterForFramework === pathInFrameworksDir ) {
71
+ let fi = loadFrameworkInfo ( keyedType , directory ) ;
72
+ resultsProm . push ( fi ) ;
73
+ }
74
+ }
75
+ }
76
+ return Promise . all ( resultsProm ) ;
77
+ }
78
+
79
+ app . use ( '/frameworks' , express . static ( path . join ( __dirname , '..' , 'frameworks' ) ) )
80
+ app . use ( '/css' , express . static ( path . join ( __dirname , '..' , 'css' ) ) )
81
+
82
+ app . get ( '/ls' , async ( req , res ) => {
83
+ let t0 = Date . now ( ) ;
84
+ let frameworks = await loadFrameworkVersionInformation ( ) ;
85
+ res . send ( frameworks ) ;
86
+ let t1 = Date . now ( ) ;
87
+ console . log ( "/ls duration " , ( t1 - t0 ) ) ;
88
+ } )
89
+
90
+ app . listen ( port , ( ) => {
91
+ console . log ( `Server running on port ${ port } ` )
92
+ } )
0 commit comments