import { Lazy } from '../../../../data/Lazy';
import { MichelinePrimitiveApplication, MichelineTypeNode } from '../../types/micheline/MichelineNode';
import { MichelsonGrammarType } from '../../types/michelson/grammar/MichelsonGrammarType';
import { MichelsonType } from './MichelsonType';
export declare enum MichelsonAnnotationPrefix {
    TYPE = ":",
    VARIABLE = "@",
    FIELD = "%"
}
export interface MichelsonTypeMetaCreateValueConfiguration {
    lazyEval?: boolean;
    beforeNext?: (meta: MichelsonTypeMeta, raw: unknown) => void;
    onNext?: (meta: MichelsonTypeMeta, raw: unknown, value: MichelsonType) => void;
}
export declare class MichelsonTypeMeta {
    readonly type: MichelsonGrammarType;
    readonly parent?: MichelsonGenericTypeMeta | undefined;
    readonly annots: string[];
    constructor(type: MichelsonGrammarType, parent?: MichelsonGenericTypeMeta | undefined, annots?: string[]);
    static fromMichelineNode(node: MichelineTypeNode): MichelsonTypeMeta | undefined;
    static fromMichelinePrimitiveApplication(primitiveApplication: MichelinePrimitiveApplication<any>, parent?: MichelsonGenericTypeMeta): MichelsonTypeMeta;
    static from(type: MichelsonGrammarType, annots: string[], args: MichelinePrimitiveApplication<any>[], parent?: MichelsonGenericTypeMeta): MichelsonTypeMeta;
    createValue(value: unknown, configuration?: MichelsonTypeMetaCreateValueConfiguration): MichelsonType;
    getAnnotation(...prefixes: MichelsonAnnotationPrefix[]): string | undefined;
    protected getRawValue(value: unknown): unknown;
}
export declare class MichelsonGenericTypeMeta extends MichelsonTypeMeta {
    readonly generics: Lazy<MichelsonTypeMeta>[];
    constructor(type: MichelsonGrammarType, genericTypes: MichelinePrimitiveApplication<any>[], parent?: MichelsonGenericTypeMeta, annots?: string[]);
    createValue(value: unknown, configuration: MichelsonTypeMetaCreateValueConfiguration): MichelsonType;
}
