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