@@ -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 ) {
@@ -59,9 +62,44 @@ async function process_chunks (path) {
59
62
delete scored_chunk . run_info
60
63
result = merge_nonoverlap ( result , scored_chunk )
61
64
}
65
+
66
+ sort_test_results ( result )
67
+
62
68
return result
63
69
}
64
70
71
+ // Sorts the keys of the test_scores object alphabetically
72
+ function sort_test_results ( result ) {
73
+ console . log ( 'Sorting results' )
74
+ result . test_scores = into_sorted_map ( result . test_scores )
75
+ }
76
+
77
+ // Convert an object into a sorted Map
78
+ //
79
+ // JS Maps serialize keys in insertion order, so to control the order of JSON serialized output
80
+ // we can:
81
+ //
82
+ // - Convert the object into an array
83
+ // - Sort the array by test object key
84
+ // - Reinsert the results into a new Map in order
85
+ //
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 ) {
88
+ const arr = Object . entries ( obj ) . map ( ( [ key , value ] ) => ( { key, value } ) )
89
+ arr . sort ( ( a , b ) => {
90
+ if ( a . key < b . key ) return - 1
91
+ if ( a . key > b . key ) return 1
92
+ return 0
93
+ } )
94
+
95
+ const map = new Map ( )
96
+ for ( const entry of arr ) {
97
+ map [ entry . key ] = entry . value
98
+ }
99
+
100
+ return map
101
+ }
102
+
65
103
async function add_run ( runs_dir , chunks_dir , date ) {
66
104
const new_run = await process_chunks ( chunks_dir )
67
105
await write_compressed ( `./${ runs_dir } /${ date } .xz` , new_run )
0 commit comments