export declare abstract class BaseNode { abstract solve(): any; } export declare class NullNode extends BaseNode { solve(): void; } export declare class NumberNode extends BaseNode { value: number; constructor(value: number); solve(): number; } export declare class StringNode extends BaseNode { value: string; constructor(value: string); solve(): string; } export declare class TimestampNode extends NumberNode { constructor(value: number); } export declare class RelativeTokenNode extends BaseNode { quantity: number; token: string; constructor(token: string, quantity: number); solve(): [number, string]; } export declare class RelativeExpressionNode extends BaseNode { anchor: TimestampNode; relative?: RelativeTokenNode; constructor(anchor: TimestampNode, relative?: RelativeTokenNode); solve(): number; calculateTimestamp(): TimestampNode; /** * If adding 'period' time periods caused us to land on a date that does not exist (ex: Feb 30) moment will inconsitantly * shift us one way or anouther to a real date. We want to maintain a consistant behavoir, so we always enforce * that we shift conservatively (back when moving forwards, forward when moving backwards) * * This method detects if such a shift has occurred and returns a new moment that is correctly shifted * * @param ref The reference time before the translation * @param rel The computed time after the translation * @param period The translation period * @return The time after the translation, adjusted for any month shift */ private correctMonthShift; } export declare abstract class FunctionNode extends BaseNode { } export declare class RangeNode extends FunctionNode { Start: RelativeExpressionNode; End: RelativeExpressionNode; constructor(start: RelativeExpressionNode, end: RelativeExpressionNode); solve(): number[]; } export declare class TrailNode extends FunctionNode { End: RelativeExpressionNode; Period: RelativeExpressionNode | RelativeTokenNode; constructor(end: RelativeExpressionNode, period: RelativeExpressionNode | RelativeTokenNode); solve(): number[]; } export declare class PeriodNode extends FunctionNode { Start: RelativeExpressionNode; Period: RelativeExpressionNode | RelativeTokenNode; Ref: RelativeExpressionNode; constructor(start: RelativeExpressionNode, period: RelativeExpressionNode | RelativeTokenNode, ref: RelativeExpressionNode); solve(): number[]; private getPeriodBounds; private shiftToCorrectPeriod; private relShiftToCorrectPeriod; }