UNPKG

@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
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() } });