UNPKG

chrono-40k

Version:

A consistent dating system for 'Warhammer 40,000'

121 lines (113 loc) 4.01 kB
type Millenium = number; type TerranDate = Date; type Check = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9; type YearFraction = number; type Year = number; interface ClassicDate { check: Check; fraction: YearFraction; year: Year; millenium: Millenium; } interface ClassicImperialDate extends ClassicDate { toString: (format?: string) => string; toDate: () => TerranDate; } type ImperialDate = ClassicDate | IndomitusEraDate; interface DateSegment<T extends ImperialDate> { symbol: string; expression: string; format: (date: T) => string; parse: (date: T, value: string) => void; } declare enum Formats { CLASSIC_DEFAULT_FORMAT = "c fff yyy.m", CLASSIC_SHORT_FORMAT = "yyy.m", INDOMITUS_ERA_DEFAULT_FORMAT = "y.f gg d.m", INDOMITUS_ERA_SHORT_FORMAT = "y.fg d.m" } type Chronosegments = number; type AnnualDesignator = number; type Designator = string; interface IndomitusEraDate { chronosegments: Chronosegments; annualDesignator: AnnualDesignator; millenium: Millenium; designator: Designator; isPostGreatRift: boolean; } interface IndomitusEraImperialDate extends IndomitusEraDate { toString: (format?: string) => string; toDate: () => TerranDate; } declare class ClassicImperialCalendar { static readonly GREAT_RIFT_OPENING: ClassicImperialDate; parse(date: TerranDate): ClassicImperialDate; parse(date: ClassicDate): ClassicImperialDate; parse(date: IndomitusEraDate): ClassicImperialDate; parse(date: string, format?: string): ClassicImperialDate; format(date: string, format?: string): string; format(date: TerranDate, format?: string): string; format(date: ClassicDate, format?: string): string; isValid(date: ClassicDate): boolean; getTerranDate(date: ClassicDate): TerranDate; getTerranDate(date: string, format?: string): TerranDate; private internalParse; private fromString; private fromTerranDate; private fromClassicImperialDate; private fromIndomitusEraDate; } declare class IndomitusEraImperialCalendar { parse(date: TerranDate): IndomitusEraImperialDate; parse(date: IndomitusEraDate): IndomitusEraImperialDate; parse(date: ClassicDate): IndomitusEraImperialDate; parse(date: string, format?: string): IndomitusEraImperialDate; format(date: string, format?: string): string; format(date: TerranDate, format?: string): string; format(date: IndomitusEraDate, format?: string): string; format(date: ClassicDate, format?: string): string; isValid(date: IndomitusEraDate): boolean; getTerranDate(date: IndomitusEraDate): TerranDate; getTerranDate(date: string, format?: string): TerranDate; private internalParse; private fromString; private fromTerranDate; private fromIndomitusEraImperialDate; private fromClassicImperialDate; } declare class Chrono { /** * Calendar for handling dates in the old style (pre-great rift) of the imperial dating system * * E. g.: * - "0 000 999.M41" * - "005.M30" */ static classic: ClassicImperialCalendar; /** * Calendar for handling dates in the old style (post-great rift) of the imperial dating system * * E. g.: * - 0.1 previo VCM.M41 * - 1.1+ TCM.M41 */ static indomitus: IndomitusEraImperialCalendar; static parse: { (date: TerranDate): ClassicImperialDate; (date: ClassicDate): ClassicImperialDate; (date: IndomitusEraDate): ClassicImperialDate; (date: string, format?: string): ClassicImperialDate; }; static format: { (date: string, format?: string): string; (date: TerranDate, format?: string): string; (date: ClassicDate, format?: string): string; }; static valid: (date: ClassicDate) => boolean; static getTerranDate: { (date: ClassicDate): TerranDate; (date: string, format?: string): TerranDate; }; } export { Chrono, type DateSegment, Formats, type ImperialDate };