import { Markup } from "./builtin/drops/markup"; import { RenderContext } from "./context"; import { Float, Integer } from "./number"; import { Range } from "./range"; export interface Expression { evaluate(context: RenderContext): Promise; evaluateSync(context: RenderContext): unknown; equals(other: unknown): boolean; toString(): string; children?: () => Expression[]; } export declare class Nil implements Expression { evaluate(): Promise; evaluateSync(): null; equals(other: unknown): boolean; toString(): string; children(): Expression[]; } export declare const NIL: Nil; export declare class Empty implements Expression { evaluate(): Promise; evaluateSync(): Empty; equals(other: unknown): boolean; toString(): string; children(): Expression[]; } export declare const EMPTY: Empty; export declare class Blank implements Expression { evaluate(): Promise; evaluateSync(): Blank; equals(other: unknown): boolean; toString(): string; children(): Expression[]; } export declare const BLANK: Blank; export declare class Continue implements Expression { evaluate(): Promise; evaluateSync(): Continue; equals(other: unknown): boolean; toString(): string; children(): Expression[]; } export declare const CONTINUE: Continue; export declare abstract class Literal implements Expression { readonly value: T; constructor(value: T); evaluate(context: RenderContext): Promise; evaluateSync(context: RenderContext): T; equals(other: unknown): boolean; toString(): string; children(): Expression[]; } export declare class BooleanLiteral extends Literal { equals(other: unknown): boolean; } export declare const TRUE: BooleanLiteral; export declare const FALSE: BooleanLiteral; export declare class StringLiteral extends Literal { evaluate(context: RenderContext): Promise; evaluateSync(context: RenderContext): string | Markup; equals(other: unknown): boolean; } export declare class IntegerLiteral extends Literal { equals(other: unknown): boolean; toString(): string; } export declare class FloatLiteral extends Literal { equals(other: unknown): boolean; toString(): string; } export declare class RangeLiteral implements Expression { readonly start: Expression; readonly stop: Expression; constructor(start: Expression, stop: Expression); evaluate(context: RenderContext): Promise; evaluateSync(context: RenderContext): Range; equals(other: unknown): boolean; toString(): string; children(): Expression[]; } export declare class IdentifierPathElement extends Literal { equals(other: unknown): boolean; } export type IdentifierPath = Array; export declare class Identifier implements Expression { readonly root: string | null; readonly path: IdentifierPath; constructor(root: string | null, path: IdentifierPath); equals(other: unknown): boolean; toString(): string; evaluate(context: RenderContext): Promise; evaluateSync(context: RenderContext): unknown; children(): Expression[]; } export declare class ExpressionFilter { readonly name: string; readonly args: Expression[]; readonly kwargs: Map; constructor(name: string, args?: Expression[], kwargs?: Map); toString(): string; evalArgs(context: RenderContext): Promise; evalKeywordArgs(context: RenderContext): Promise<{ [index: string]: unknown; }>; evalArgsSync(context: RenderContext): unknown[]; evalKeywordArgsSync(context: RenderContext): { [index: string]: unknown; }; } export declare class FilteredExpression implements Expression { readonly expression: Expression; readonly filters: ExpressionFilter[]; constructor(expression: Expression, filters?: ExpressionFilter[]); equals(other: unknown): boolean; toString(): string; protected applyFilters(left: unknown, filters: ExpressionFilter[], context: RenderContext): Promise; protected applyFiltersSync(left: unknown, filters: ExpressionFilter[], context: RenderContext): unknown; evaluate(context: RenderContext): Promise; evaluateSync(context: RenderContext): unknown; children(): Expression[]; } export declare class ConditionalExpression extends FilteredExpression { readonly expression: Expression; readonly filters: ExpressionFilter[]; readonly condition: Expression; readonly alternative: Expression; constructor(expression: Expression, filters?: ExpressionFilter[], condition?: Expression, alternative?: Expression); equals(other: unknown): boolean; toString(): string; evaluate(context: RenderContext): Promise; evaluateSync(context: RenderContext): unknown; children(): Expression[]; } export declare class PrefixExpression implements Expression { readonly operator: string; readonly right: Expression; constructor(operator: string, right: Expression); equals(other: unknown): boolean; toString(): string; evaluate(context: RenderContext): Promise; evaluateSync(context: RenderContext): boolean; children(): Expression[]; } export declare class InfixExpression implements Expression { readonly left: Expression; readonly operator: string; readonly right: Expression; constructor(left: Expression, operator: string, right: Expression); equals(other: unknown): boolean; toString(): string; evaluate(context: RenderContext): Promise; evaluateSync(context: RenderContext): boolean; children(): Expression[]; } export declare class BooleanExpression implements Expression { readonly expression: Expression; constructor(expression: Expression); equals(other: unknown): boolean; toString(): string; evaluate(context: RenderContext): Promise; evaluateSync(context: RenderContext): boolean; children(): Expression[]; } export type LoopArgument = IntegerLiteral | FloatLiteral | Identifier | Continue; export declare const For: unique symbol; export declare class LoopExpression implements Expression { readonly name: string; readonly iterable: RangeLiteral | Identifier | StringLiteral; readonly limit?: LoopArgument | undefined; readonly offset?: LoopArgument | undefined; readonly cols?: LoopArgument | undefined; readonly reversed: boolean; constructor(name: string, iterable: RangeLiteral | Identifier | StringLiteral, limit?: LoopArgument | undefined, offset?: LoopArgument | undefined, cols?: LoopArgument | undefined, reversed?: boolean); equals(other: unknown): boolean; toString(): string; protected toIter(obj: unknown): [Iterable, number]; protected drop(it: Iterator, n: number): Generator; protected take(it: Iterator, n: number): Generator; protected limitAndOffset(context: RenderContext, it: Iterable, length: number, limit: unknown, offset: unknown): [Iterator, number]; evaluate(context: RenderContext): Promise<[Iterator, number]>; evaluateSync(context: RenderContext): [Iterator, number]; children(): Expression[]; } /** * Check a value for Liquid truthiness. * @param value - Any value * @returns `true` if the value is Liquid truthy, `false` otherwise. */ export declare function isLiquidTruthy(value: unknown): boolean;