export interface ArrayExpressionNode { type: 'ArrayExpression'; elements: StartPrecedence[]; } export interface LiteralNode { type: 'Literal'; value: string | number; isString?: boolean; } export interface IdentifierNode { type: 'Identifier'; name: string; } export declare type ConstantNode = LiteralNode; export interface PropertyNode { type: 'Property'; kind: 'init'; key: ConstantNode | IdentifierNode | StartPrecedence; computed: boolean; value: ConstantNode | IdentifierNode | StartPrecedence; } export interface ObjectExpressionNode { type: 'ObjectExpression'; properties: PropertyNode[]; } export interface ThisExpressionNode { type: 'ThisExpression'; } export interface LocalsExpressionNode { type: 'LocalsExpression'; } export declare type SelfReferentialNode = ThisExpressionNode | LocalsExpressionNode; export interface CallExpressionNode { type: 'CallExpression'; callee: BasePrimaryType | FilterChainPrecedence; arguments: FilterChainPrecedence[]; filter: boolean; } export interface MemberExpressionExpressionNode { type: 'MemberExpression'; object: BasePrimaryType | FilterChainPrecedence; property: StartPrecedence; computed: true; } export interface MemberExpressionIdentifierNode { type: 'MemberExpression'; object: BasePrimaryType | StartPrecedence; property: IdentifierNode; computed: false; } export declare type MemberExpressionNode = MemberExpressionExpressionNode | MemberExpressionIdentifierNode; export declare type BasePrimaryType = ArrayExpressionNode | ObjectExpressionNode | SelfReferentialNode | LiteralNode | IdentifierNode | ConstantNode; export declare type PrimaryNode = BasePrimaryType | CallExpressionNode | MemberExpressionNode; export declare type FilterNode = CallExpressionNode; export interface UnaryExpressionNode { type: 'UnaryExpression'; operator: '+' | '-' | '!'; prefix: true; argument: StartPrecedence; } export interface BinaryExpressionMultiplicativeNode { type: 'BinaryExpression'; operator: '*' | '/' | '%'; left: StartPrecedence; right: StartPrecedence; } export interface BinaryExpressionAdditiveNode { type: 'BinaryExpression'; operator: '+' | '-'; left: StartPrecedence; right: StartPrecedence; } export interface BinaryExpressionRelationalNode { type: 'BinaryExpression'; operator: '<' | '>' | '<=' | '>='; left: StartPrecedence; right: StartPrecedence; } export interface BinaryExpressionEqualityNode { type: 'BinaryExpression'; operator: '==' | '!=' | '===' | '!=='; left: StartPrecedence; right: StartPrecedence; } export declare type BinaryExpressionNode = BinaryExpressionMultiplicativeNode | BinaryExpressionAdditiveNode | BinaryExpressionRelationalNode | BinaryExpressionEqualityNode; export interface LogicalExpressionAndNode { type: 'LogicalExpression'; operator: '&&'; left: StartPrecedence; right: StartPrecedence; } export interface LogicalExpressionOrNode { type: 'LogicalExpression'; operator: '||'; left: StartPrecedence; right: StartPrecedence; } export declare type LogcalExpressionNode = LogicalExpressionAndNode | LogicalExpressionOrNode; export interface ConditionalExpressionNode { type: 'ConditionalExpression'; test: StartPrecedence; alternate: StartPrecedence; consequent: StartPrecedence; } export interface AssignmentExpressionNode { type: 'AssignmentExpression'; left: StartPrecedence; right: StartPrecedence; operator: '='; } export interface ExpressionStatementNode { type: 'ExpressionStatement'; expression: FilterChainPrecedence; } export interface ProgramNode { type: 'Program'; body: ExpressionStatementNode[]; } export declare type StartPrecedence = TNode | FilterChainPrecedence; export declare type FilterChainPrecedence = FilterNode | ExpressionPrecedence; export declare type ExpressionPrecedence = AssignmentPrecedence; export declare type AssignmentPrecedence = AssignmentExpressionNode | TernaryPrecedence; export declare type TernaryPrecedence = ConditionalExpressionNode | LogicalOrPrecedence; export declare type LogicalOrPrecedence = LogicalExpressionOrNode | LogicalAndPrecedence; export declare type LogicalAndPrecedence = LogicalExpressionAndNode | EqualityPrecedence; export declare type EqualityPrecedence = BinaryExpressionEqualityNode | RelationalPrecedence; export declare type RelationalPrecedence = BinaryExpressionRelationalNode | AdditivePrecedence; export declare type AdditivePrecedence = BinaryExpressionAdditiveNode | MultiplicativePrecedence; export declare type MultiplicativePrecedence = BinaryExpressionMultiplicativeNode | UnaryPrecedence; export declare type UnaryPrecedence = UnaryExpressionNode | PrimaryNode; export declare type AngularJsAstNode = PropertyNode | SelfReferentialNode | PrimaryNode | UnaryExpressionNode | BinaryExpressionMultiplicativeNode | BinaryExpressionAdditiveNode | BinaryExpressionRelationalNode | BinaryExpressionEqualityNode | LogicalExpressionAndNode | LogicalExpressionOrNode | CallExpressionNode | ConditionalExpressionNode | AssignmentExpressionNode | ExpressionStatementNode | ProgramNode;