export declare type PrimitiveValueTypes = number | bigint | string | boolean | null | undefined;
export declare type PrimitiveValueTypeNames = 'number' | 'integer' | 'bigint' | 'string' | 'boolean' | 'null' | 'undefined';
export declare type OptionalPrimitiveValueTypeNames = 'number?' | 'integer?' | 'bigint?' | 'string?' | 'boolean?' | 'null?' | 'undefined?';
export declare type PlaceholderTypeNames = 'never' | 'any' | 'unknown';
export declare type OptionalPlaceholderTypeNames = 'never?' | 'any?' | 'unknown?';
export declare enum ErrorTypes {
    InvalidDefinition = 1,
    Required = 2,
    TypeUnmatched = 3,
    AdditionalPropUnmatched = 4,
    RepeatQtyUnmatched = 5,
    SequenceUnmatched = 6,
    ValueRangeUnmatched = 7,
    ValuePatternUnmatched = 8,
    ValueLengthUnmatched = 9,
    ValueUnmatched = 10
}
export declare type ErrorMessages = Partial<{
    invalidDefinition: string;
    required: string;
    typeUnmatched: string;
    additionalPropUnmatched: string;
    repeatQtyUnmatched: string;
    sequenceUnmatched: string;
    valueRangeUnmatched: string;
    valuePatternUnmatched: string;
    valueLengthUnmatched: string;
    valueUnmatched: string;
}>;
export interface TypeAssertionBase {
    messageId?: string;
    message?: string;
    messages?: ErrorMessages;
    name?: string;
    typeName?: string;
    originalTypeName?: string;
    stereotype?: string;
    customConstraints?: string[];
    customConstraintsArgs?: {
        [constraintName: string]: any;
    };
    forceCast?: boolean;
    isRecordTypeField?: boolean;
    meta?: any;
    docComment?: string;
    passThruCodeBlock?: string;
    noOutput?: boolean;
}
export interface NeverTypeAssertion extends TypeAssertionBase {
    kind: 'never';
}
export interface AnyTypeAssertion extends TypeAssertionBase {
    kind: 'any';
}
export interface UnknownTypeAssertion extends TypeAssertionBase {
    kind: 'unknown';
}
export interface PrimitiveTypeAssertionConstraints {
    minValue?: number | string | null;
    maxValue?: number | string | null;
    greaterThanValue?: number | string | null;
    lessThanValue?: number | string | null;
    minLength?: number | null;
    maxLength?: number | null;
    pattern?: RegExp | null;
}
export interface PrimitiveTypeAssertion extends TypeAssertionBase, PrimitiveTypeAssertionConstraints {
    kind: 'primitive';
    primitiveName: PrimitiveValueTypeNames;
}
export interface PrimitiveValueTypeAssertion extends TypeAssertionBase {
    kind: 'primitive-value';
    value: PrimitiveValueTypes;
    primitiveName?: 'bigint';
}
export interface RepeatedAssertionConstraints {
    min: number | null;
    max: number | null;
}
export interface RepeatedAssertion extends TypeAssertionBase, RepeatedAssertionConstraints {
    kind: 'repeated';
    repeated: TypeAssertion;
}
export interface SpreadAssertion extends TypeAssertionBase, RepeatedAssertionConstraints {
    kind: 'spread';
    spread: TypeAssertion;
}
export interface SequenceAssertion extends TypeAssertionBase {
    kind: 'sequence';
    sequence: TypeAssertion[];
}
export interface OneOfAssertion extends TypeAssertionBase {
    kind: 'one-of';
    oneOf: TypeAssertion[];
}
export interface OptionalAssertion extends TypeAssertionBase {
    kind: 'optional';
    optional: TypeAssertion;
}
export interface EnumAssertion extends TypeAssertionBase {
    kind: 'enum';
    values: Array<[
        string,
        // enum key
        number | string,
        string?
    ]>;
    isConst?: boolean;
}
export declare type ObjectAssertionMember = [
    string,
    TypeAssertion
] | [
    string,
    TypeAssertion,
    boolean
] | [
    string,
    TypeAssertion,
    boolean,
    string
];
export declare type AdditionalPropsKey = Array<'string' | 'number' | RegExp>;
export declare type AdditionalPropsMember = [
    AdditionalPropsKey,
    TypeAssertion
] | [
    AdditionalPropsKey,
    TypeAssertion,
    boolean
] | [
    AdditionalPropsKey,
    TypeAssertion,
    boolean,
    string
];
export interface ObjectAssertion extends TypeAssertionBase {
    kind: 'object';
    members: ObjectAssertionMember[];
    additionalProps?: AdditionalPropsMember[];
    baseTypes?: Array<ObjectAssertion | AssertionSymlink>;
}
export interface AssertionSymlink extends TypeAssertionBase {
    kind: 'symlink';
    symlinkTargetName: string;
    memberTree?: string[];
}
export interface AssertionOperator extends TypeAssertionBase {
    kind: 'operator';
    operator: string;
    operands: Array<TypeAssertion | string>;
}
export declare type TypeAssertion = NeverTypeAssertion | AnyTypeAssertion | UnknownTypeAssertion | PrimitiveTypeAssertion | PrimitiveValueTypeAssertion | RepeatedAssertion | SpreadAssertion | SequenceAssertion | OneOfAssertion | OptionalAssertion | EnumAssertion | ObjectAssertion | AssertionSymlink | AssertionOperator;
export interface SerializedSchemaInfo {
    version: string;
    ns: {
        [namespaceName: string]: {
            [typeName: string]: TypeAssertion;
        };
    };
}
