@@ -36,6 +36,7 @@ async function all_runs_sorted (runs_dir) {
36
36
const dir = await opendir ( `./${ runs_dir } ` )
37
37
const runs = [ ]
38
38
for await ( const run of dir ) {
39
+ if ( run . name === '.DS_Store' ) continue
39
40
runs . push ( run . name )
40
41
}
41
42
@@ -47,6 +48,8 @@ async function process_chunks (path) {
47
48
const dir = await opendir ( path )
48
49
let result = { }
49
50
for await ( const chunk of dir ) {
51
+ if ( chunk . name === '.DS_Store' ) continue
52
+ console . log ( `Processing chunk ${ chunk . name } ` )
50
53
const chunk_run = await read_json_file ( `${ path } /${ chunk . name } ` )
51
54
const scored_chunk = process_raw_results ( chunk_run )
52
55
if ( ! result . run_info ) {
@@ -67,34 +70,34 @@ async function process_chunks (path) {
67
70
68
71
// Sorts the keys of the test_scores object alphabetically
69
72
function sort_test_results ( result ) {
70
- result . test_scores = sort_object ( result . test_scores )
73
+ console . log ( 'Sorting results' )
74
+ result . test_scores = into_sorted_map ( result . test_scores )
71
75
}
72
76
73
- // Sorts the keys of an objects
77
+ // Convert an object into a sorted Map
74
78
//
75
- // JS objects serialize keys in insertion order, so to control the order of JSON serialized output
79
+ // JS Maps serialize keys in insertion order, so to control the order of JSON serialized output
76
80
// we can:
77
81
//
78
82
// - Convert the object into an array
79
83
// - Sort the array by test object key
80
- // - Reinsert the results into a new object in order
84
+ // - Reinsert the results into a new Map in order
81
85
//
82
- // This sort is not perfect as JS will still serialize keys that can be parsed as integers before
83
- // all other keys, but it's a lot better than nothing.
84
- function sort_object ( obj ) {
86
+ // Storing the result in a Map rather a regular object allows us to have full control over the order
87
+ function into_sorted_map ( obj ) {
85
88
const arr = Object . entries ( obj ) . map ( ( [ key , value ] ) => ( { key, value } ) )
86
89
arr . sort ( ( a , b ) => {
87
90
if ( a . key < b . key ) return - 1
88
91
if ( a . key > b . key ) return 1
89
92
return 0
90
93
} )
91
94
92
- const obj2 = { }
95
+ const map = new Map ( )
93
96
for ( const entry of arr ) {
94
- obj2 [ entry . key ] = entry . value
97
+ map [ entry . key ] = entry . value
95
98
}
96
99
97
- return obj2
100
+ return map
98
101
}
99
102
100
103
async function add_run ( runs_dir , chunks_dir , date ) {
0 commit comments