@dilapidated-penguin/cubetimer
Version:
fast and lightweight CLI timer for speedcubing. Track your solves, get random scrambles, and analyze your times
64 lines (51 loc) • 2.2 kB
text/typescript
const session_date:string = process.argv[2]
import * as storage from "./util/storage"
import {settings, sessionLog, file_data,global_statistics,event_types, session_statistics, SolveInstance} from "./util/interfaces"
import chalk, { ChalkInstance } from "chalk";
import { createTable } from 'nice-table';
import fs from 'fs';
import path from 'path';
const DATA_FILE = path.join(__dirname,"./util/data.json")
const STATS_FILE = path.join(__dirname,"./util/stats.json")
let stored_data:file_data = storage.loadData()
let global_stats:global_statistics = storage.loadStats()
let ao5_list:number[] = []
let ao12_list:number[] = []
function updateInfo():void {
let current_session_data:sessionLog = stored_data.data.get(session_date)
ao5_list.push(storage.Ao5(current_session_data))
ao12_list.push(storage.Ao12(current_session_data))
let current_session_stats:session_statistics = global_stats.session_data.get(session_date)
//display
console.clear()
console.log(`session: ${chalk.bgBlueBright(session_date)}`)
let info_table = current_session_data.entries.map((instance,index)=>{
const label = (instance.label === "DNF") ? chalk.red(instance.label) : instance.label
const time:string|number = (instance.time === current_session_stats.fastest_solve) ? chalk.blue(instance.time.toFixed(4)) : instance.time.toFixed(4)
return {
n: index+1,
time: time,
label: label ?? chalk.green('OK'),
ao5: ao5_list[index] ?? '-',
ao12:ao12_list[index] ?? '-'
}
})
console.log(`\n`)
console.log(createTable(info_table,['n','time','label','ao5','ao12']))
console.log(Object.keys(current_session_stats).map((key_name:string)=>{
return `${key_name}: ${current_session_stats[key_name].toFixed(3)} ${chalk.green('s')}`
})
.join(chalk.blue('\n')))
}
fs.watch(DATA_FILE, (eventType, filename) => {
if (eventType === 'change') {
stored_data = storage.loadData()
updateInfo()
}
});
fs.watch(STATS_FILE, (eventType, filename) => {
if (eventType === 'change') {
global_stats = storage.loadStats()
updateInfo()
}
});