export interface ValuePartYearBase { value: number; isBce: boolean; isDual: boolean; } export interface ValuePartYearNormal extends ValuePartYearBase { isDual: false; } export interface ValuePartYearDual extends ValuePartYearBase { isDual: true; valueDual: number; } /** * Stores information about the year. * Note that the field {@link value} is always a positive integer; if the date is * BCE then it is indicated by {@link isBce}. The year can also be "dual": although uncommon * in practice, this means that there is an ambiguity between two years. In that case the second * year is expressed as a two-digit number and stored in {@link valueDual}. */ export declare type ValuePartYear = ValuePartYearNormal | ValuePartYearDual; export interface ValuePartCalendar { isGregorian: boolean; isJulian: boolean; isHebrew: boolean; isFrenchRepublican: boolean; isUnknown: boolean; } export interface ValuePartDateYear { calendar: ValuePartCalendar; year: ValuePartYear; } export interface ValuePartDateMonth extends ValuePartDateYear { month: number; } export interface ValuePartDateDay extends ValuePartDateMonth { day: number; } /** * Represents a known date or partially known date expressed in a certain calendar. * It is guaranteed that the fields {@link calendar} and {@link year} are defined. * Note that the year is not a value but an object, because it contains more information (see {@link ValuePartYear}). * If defined, both the month and the day start at value 1. */ export declare type ValuePartDate = ValuePartDateYear | ValuePartDateMonth | ValuePartDateDay; /** * The base type for all date values. */ export interface ValueDateBase { /** * Indicates an instance of {@link ValueDateDated}. */ hasDate: boolean; /** * Indicates an instance of {@link ValueDatePhrased}. */ hasPhrase: boolean; /** * Indicates an instance of {@link ValueDatePunctual}. Implies {@link hasDate}. */ isDatePunctual: boolean; /** * Indicates an instance of {@link ValueDatePeriod}. Implies {@link hasDate}. */ isDatePeriod: boolean; /** * Indicates an instance of {@link ValueDateRange}. Implies {@link hasDate}. */ isDateRange: boolean; /** * Indicates an instance of {@link ValueDateApproximated}. Implies {@link hasDate}. */ isDateApproximated: boolean; /** * Indicates an instance of {@link ValueDateInterpreted}. Implies {@link hasDate}. */ isDateInterpreted: boolean; } /** * An instance is indicated by {@link hasPhrase}. */ export interface ValueDatePhrased extends ValueDateBase { hasPhrase: true; phrase: string; isDatePeriod: false; isDateRange: false; isDateApproximated: false; } /** * An instance is indicated by the conjunction of {@link hasPhrase} and negated {@link hasDate} (or equivalently, {@link hasPhrase} and negated {@link isDateInterpreted}). */ export interface ValueDatePhraseOnly extends ValueDatePhrased { hasDate: false; isDatePunctual: false; isDateApproximated: false; isDateInterpreted: false; } /** * An instance is indicated by {@link hasDate}. */ export interface ValueDateDated extends ValueDateBase { hasDate: true; } /** * An instance is indicated by {@link isDatePunctual}. */ export interface ValueDatePunctual extends ValueDateDated { isDatePunctual: true; date: ValuePartDate; isDatePeriod: false; isDateRange: false; } /** * An instance is indicated by {@link isDateApproximated}. */ export interface ValueDateApproximated extends ValueDatePunctual { isDateApproximated: true; approximationKind: { isAbout: boolean; isCalculated: boolean; isEstimated: boolean; }; hasPhrase: false; isDateInterpreted: false; } /** * An instance is indicated by {@link isDateInterpreted} (or equivalently by the conjunction of {@link isDatePunctual} and {@link hasPhrase}). */ export interface ValueDateInterpreted extends ValueDatePunctual, ValueDatePhrased { hasDate: true; isDatePunctual: true; hasPhrase: true; isDateInterpreted: true; isDateApproximated: false; } /** * An instance is indicated by the conjunction of {@link isDatePunctual}, negated {@link isDateApproximated} and negated {@link isDateInterpreted}. */ export interface ValueDateNormal extends ValueDatePunctual { hasPhrase: false; isDateApproximated: false; isDateInterpreted: false; } /** * An instance is indicated by {@link isDateRange}. */ export interface ValueDateRange extends ValueDateDated { isDateRange: true; hasPhrase: false; isDatePunctual: false; isDatePeriod: false; isDateApproximated: false; isDateInterpreted: false; } /** * An instance is indicated by {@link isDateRange} and defined {@link dateAfter}. */ export interface ValueDateRangeAfter extends ValueDateRange { dateAfter: ValuePartDate; } /** * An instance is indicated by {@link isDateRange} and defined {@link dateBefore}. */ export interface ValueDateRangeBefore extends ValueDateRange { dateBefore: ValuePartDate; } /** * An instance is indicated by {@link isDateRange}, defined {@link dateAfter} and defined {@link dateBefore}. */ export interface ValueDateRangeFull extends ValueDateRangeAfter, ValueDateRangeBefore { } /** * An instance is indicated by {@link isDatePeriod}. */ export interface ValueDatePeriod extends ValueDateDated { isDatePeriod: true; hasPhrase: false; isDatePunctual: false; isDateRange: false; isDateApproximated: false; isDateInterpreted: false; } /** * An instance is indicated by {@link isDatePeriod} and defined {@link dateFrom}. */ export interface ValueDatePeriodFrom extends ValueDatePeriod { dateFrom: ValuePartDate; } /** * An instance is indicated by {@link isDatePeriod} and defined {@link dateTo}. */ export interface ValueDatePeriodTo extends ValueDatePeriod { dateTo: ValuePartDate; } /** * An instance is indicated by {@link isDatePeriod}, defined {@link dateFrom} and defined {@link dateTo}. */ export interface ValueDatePeriodFull extends ValueDatePeriodFrom, ValueDatePeriodTo { } /** * A valid Gedcom date. See {@link ValueDateBase}, the base type for all of them. */ export declare type ValueDate = ValueDateNormal | ValueDateApproximated | ValueDatePeriodFrom | ValueDatePeriodTo | ValueDatePeriodFull | ValueDateRangeAfter | ValueDateRangeBefore | ValueDateRangeFull | ValueDateInterpreted | ValueDatePhraseOnly;