import { CustomOptions } from '@sinclair/typebox';
import { ComponentId, IAppModel, IComponentModel, ITraitModel, IFieldModel, ModuleId, RefInfo, ASTNode } from './IAppModel';
import { JSONSchema7 } from 'json-schema';
export declare type FunctionNode = ASTNode & {
    params: ASTNode[];
};
export declare type DeclaratorNode = ASTNode & {
    id: ASTNode;
};
export declare type ObjectPatternNode = ASTNode & {
    properties: PropertyNode[];
};
export declare type ArrayPatternNode = ASTNode & {
    elements: ASTNode[];
};
export declare type PropertyNode = ASTNode & {
    value: ASTNode;
};
export declare type LiteralNode = ASTNode & {
    raw: string;
};
export declare type SequenceExpressionNode = ASTNode & {
    expressions: LiteralNode[];
};
export declare type ExpressionNode = ASTNode & {
    object: ExpressionNode;
    property: ExpressionNode | LiteralNode;
};
export declare class FieldModel implements IFieldModel {
    spec?: (JSONSchema7 & CustomOptions) | undefined;
    private appModel?;
    private componentModel?;
    private traitModel?;
    isDynamic: boolean;
    refComponentInfos: Record<ComponentId | ModuleId, RefInfo>;
    private astNodes;
    private value;
    constructor(value: unknown, spec?: (JSONSchema7 & CustomOptions) | undefined, appModel?: IAppModel | undefined, componentModel?: IComponentModel | undefined, traitModel?: ITraitModel | undefined);
    get rawValue(): unknown;
    private updateValue;
    update(value: unknown): void;
    getProperty(key: string | number): FieldModel | undefined;
    getPropertyByPath(path: string): FieldModel | undefined;
    getValue(): unknown;
    traverse(cb: (f: IFieldModel, key: string) => void): void;
    private parseReferences;
    private genPathFromMemberExpressionNode;
    private onReferenceIdChange;
}
