klog.js
Version:
A JavaScript implementation of the Klog time tracking file format
49 lines (48 loc) • 1.23 kB
TypeScript
import { RangeDashFormat } from "./range.js";
import { DayShift, TimeFormat } from "./time.js";
export type Sign = "" | "+" | "-";
export type Indentation = " " | " " | " " | "\t";
export interface FileNode {
type: "file";
records: RecordNode[];
}
export interface RecordNode {
type: "record";
date: Date;
shouldTotal: number | null;
summary: string | null;
entries: EntryNode[];
}
export interface EntryNode {
type: "entry";
summary: string | null;
value: TimeRangeNode | DurationNode;
}
export interface OpenTimeRangeNode {
type: "timeRange";
open: true;
placeholderCount: number;
format: RangeDashFormat;
start: TimeNode;
}
export interface ClosedTimeRangeNode {
type: "timeRange";
open: false;
format: RangeDashFormat;
start: TimeNode;
end: TimeNode;
}
export type TimeRangeNode = OpenTimeRangeNode | ClosedTimeRangeNode;
export interface TimeNode {
type: "time";
shift: DayShift;
hour: number;
minute: number;
format: TimeFormat;
}
export interface DurationNode {
type: "duration";
value: number;
sign: Sign;
}
export type KlogNode = FileNode | RecordNode | EntryNode | TimeRangeNode | TimeNode | DurationNode;