/**
 *  Bitloops Language
 *  Copyright (C) 2022 Bitloops S.A.
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <https://www.gnu.org/licenses/>.
 *
 *  For further information you can contact legal(at)bitloops.com.
 */
import { TClassTypesValues } from './helpers/mappings.js';
export type TClassName = string;
export type TContextData = {
    boundedContext: string;
    module: string;
};
export declare const fieldsKey = "fields";
export declare const evaluationFieldsKey = "fields";
export type TVariables = {
    [fieldsKey]: TVariable[];
};
export declare const identifierKey = "identifier";
export type TIdentifier = string;
export declare const optionalKey = "optional";
export type TOptional = boolean;
export declare const fieldKey = "field";
export type TVariable = {
    [fieldKey]: {
        [optionalKey]?: TOptional;
        [identifierKey]: TIdentifier;
    } & TBitloopsPrimaryType;
};
/**
 * Props
 */
export type TPropsIdentifier = string;
export declare const PropsIdentifierKey = "propsIdentifier";
export declare const PropsKey = "Props";
export type TPropsValues = {
    [PropsIdentifierKey]: TPropsIdentifier;
} & TVariables;
export type TProps = {
    [PropsKey]: TPropsValues;
};
/**
 * Read Model
 */
export type TReadModelIdentifier = string;
export declare const ReadModelIdentifierKey = "readModelIdentifier";
export declare const ReadModelKey = "ReadModel";
export type TReadModel = {
    [ReadModelKey]: {
        [ReadModelIdentifierKey]: TReadModelIdentifier;
    } & TVariables;
};
export type TParameterType = TBitloopsPrimaryType;
export type TParameterIdentifier = string;
export type TParameter = {
    parameter: {
        value: TParameterIdentifier;
    } & Partial<TParameterType>;
};
export type TParameterList = {
    parameters: TParameter[];
};
export type TArgument = {
    argument: TExpression;
};
export type TArgumentList = {
    argumentList: TArgument[];
};
export declare const bitloopsPrimitives: readonly ["double", "float", "int32", "int64", "uint32", "uint64", "sint32", "sint64", "fixed32", "fixed64", "sfixed32", "sfixed64", "bool", "string", "backTickString", "bytes", "enum", "Timestamp", "Any", "Struct", "Map", "NullValue", "Duration", "regex", "void"];
export declare const bitloopsPrimitivesObj: {
    string: "string" | "double" | "float" | "int32" | "int64" | "uint32" | "uint64" | "sint32" | "sint64" | "fixed32" | "fixed64" | "sfixed32" | "sfixed64" | "bool" | "backTickString" | "bytes" | "enum" | "Timestamp" | "Any" | "Struct" | "Map" | "NullValue" | "Duration" | "regex" | "void";
    double: "string" | "double" | "float" | "int32" | "int64" | "uint32" | "uint64" | "sint32" | "sint64" | "fixed32" | "fixed64" | "sfixed32" | "sfixed64" | "bool" | "backTickString" | "bytes" | "enum" | "Timestamp" | "Any" | "Struct" | "Map" | "NullValue" | "Duration" | "regex" | "void";
    float: "string" | "double" | "float" | "int32" | "int64" | "uint32" | "uint64" | "sint32" | "sint64" | "fixed32" | "fixed64" | "sfixed32" | "sfixed64" | "bool" | "backTickString" | "bytes" | "enum" | "Timestamp" | "Any" | "Struct" | "Map" | "NullValue" | "Duration" | "regex" | "void";
    int32: "string" | "double" | "float" | "int32" | "int64" | "uint32" | "uint64" | "sint32" | "sint64" | "fixed32" | "fixed64" | "sfixed32" | "sfixed64" | "bool" | "backTickString" | "bytes" | "enum" | "Timestamp" | "Any" | "Struct" | "Map" | "NullValue" | "Duration" | "regex" | "void";
    int64: "string" | "double" | "float" | "int32" | "int64" | "uint32" | "uint64" | "sint32" | "sint64" | "fixed32" | "fixed64" | "sfixed32" | "sfixed64" | "bool" | "backTickString" | "bytes" | "enum" | "Timestamp" | "Any" | "Struct" | "Map" | "NullValue" | "Duration" | "regex" | "void";
    uint32: "string" | "double" | "float" | "int32" | "int64" | "uint32" | "uint64" | "sint32" | "sint64" | "fixed32" | "fixed64" | "sfixed32" | "sfixed64" | "bool" | "backTickString" | "bytes" | "enum" | "Timestamp" | "Any" | "Struct" | "Map" | "NullValue" | "Duration" | "regex" | "void";
    uint64: "string" | "double" | "float" | "int32" | "int64" | "uint32" | "uint64" | "sint32" | "sint64" | "fixed32" | "fixed64" | "sfixed32" | "sfixed64" | "bool" | "backTickString" | "bytes" | "enum" | "Timestamp" | "Any" | "Struct" | "Map" | "NullValue" | "Duration" | "regex" | "void";
    sint32: "string" | "double" | "float" | "int32" | "int64" | "uint32" | "uint64" | "sint32" | "sint64" | "fixed32" | "fixed64" | "sfixed32" | "sfixed64" | "bool" | "backTickString" | "bytes" | "enum" | "Timestamp" | "Any" | "Struct" | "Map" | "NullValue" | "Duration" | "regex" | "void";
    sint64: "string" | "double" | "float" | "int32" | "int64" | "uint32" | "uint64" | "sint32" | "sint64" | "fixed32" | "fixed64" | "sfixed32" | "sfixed64" | "bool" | "backTickString" | "bytes" | "enum" | "Timestamp" | "Any" | "Struct" | "Map" | "NullValue" | "Duration" | "regex" | "void";
    fixed32: "string" | "double" | "float" | "int32" | "int64" | "uint32" | "uint64" | "sint32" | "sint64" | "fixed32" | "fixed64" | "sfixed32" | "sfixed64" | "bool" | "backTickString" | "bytes" | "enum" | "Timestamp" | "Any" | "Struct" | "Map" | "NullValue" | "Duration" | "regex" | "void";
    fixed64: "string" | "double" | "float" | "int32" | "int64" | "uint32" | "uint64" | "sint32" | "sint64" | "fixed32" | "fixed64" | "sfixed32" | "sfixed64" | "bool" | "backTickString" | "bytes" | "enum" | "Timestamp" | "Any" | "Struct" | "Map" | "NullValue" | "Duration" | "regex" | "void";
    sfixed32: "string" | "double" | "float" | "int32" | "int64" | "uint32" | "uint64" | "sint32" | "sint64" | "fixed32" | "fixed64" | "sfixed32" | "sfixed64" | "bool" | "backTickString" | "bytes" | "enum" | "Timestamp" | "Any" | "Struct" | "Map" | "NullValue" | "Duration" | "regex" | "void";
    sfixed64: "string" | "double" | "float" | "int32" | "int64" | "uint32" | "uint64" | "sint32" | "sint64" | "fixed32" | "fixed64" | "sfixed32" | "sfixed64" | "bool" | "backTickString" | "bytes" | "enum" | "Timestamp" | "Any" | "Struct" | "Map" | "NullValue" | "Duration" | "regex" | "void";
    bool: "string" | "double" | "float" | "int32" | "int64" | "uint32" | "uint64" | "sint32" | "sint64" | "fixed32" | "fixed64" | "sfixed32" | "sfixed64" | "bool" | "backTickString" | "bytes" | "enum" | "Timestamp" | "Any" | "Struct" | "Map" | "NullValue" | "Duration" | "regex" | "void";
    backTickString: "string" | "double" | "float" | "int32" | "int64" | "uint32" | "uint64" | "sint32" | "sint64" | "fixed32" | "fixed64" | "sfixed32" | "sfixed64" | "bool" | "backTickString" | "bytes" | "enum" | "Timestamp" | "Any" | "Struct" | "Map" | "NullValue" | "Duration" | "regex" | "void";
    bytes: "string" | "double" | "float" | "int32" | "int64" | "uint32" | "uint64" | "sint32" | "sint64" | "fixed32" | "fixed64" | "sfixed32" | "sfixed64" | "bool" | "backTickString" | "bytes" | "enum" | "Timestamp" | "Any" | "Struct" | "Map" | "NullValue" | "Duration" | "regex" | "void";
    enum: "string" | "double" | "float" | "int32" | "int64" | "uint32" | "uint64" | "sint32" | "sint64" | "fixed32" | "fixed64" | "sfixed32" | "sfixed64" | "bool" | "backTickString" | "bytes" | "enum" | "Timestamp" | "Any" | "Struct" | "Map" | "NullValue" | "Duration" | "regex" | "void";
    Timestamp: "string" | "double" | "float" | "int32" | "int64" | "uint32" | "uint64" | "sint32" | "sint64" | "fixed32" | "fixed64" | "sfixed32" | "sfixed64" | "bool" | "backTickString" | "bytes" | "enum" | "Timestamp" | "Any" | "Struct" | "Map" | "NullValue" | "Duration" | "regex" | "void";
    Any: "string" | "double" | "float" | "int32" | "int64" | "uint32" | "uint64" | "sint32" | "sint64" | "fixed32" | "fixed64" | "sfixed32" | "sfixed64" | "bool" | "backTickString" | "bytes" | "enum" | "Timestamp" | "Any" | "Struct" | "Map" | "NullValue" | "Duration" | "regex" | "void";
    Struct: "string" | "double" | "float" | "int32" | "int64" | "uint32" | "uint64" | "sint32" | "sint64" | "fixed32" | "fixed64" | "sfixed32" | "sfixed64" | "bool" | "backTickString" | "bytes" | "enum" | "Timestamp" | "Any" | "Struct" | "Map" | "NullValue" | "Duration" | "regex" | "void";
    Map: "string" | "double" | "float" | "int32" | "int64" | "uint32" | "uint64" | "sint32" | "sint64" | "fixed32" | "fixed64" | "sfixed32" | "sfixed64" | "bool" | "backTickString" | "bytes" | "enum" | "Timestamp" | "Any" | "Struct" | "Map" | "NullValue" | "Duration" | "regex" | "void";
    NullValue: "string" | "double" | "float" | "int32" | "int64" | "uint32" | "uint64" | "sint32" | "sint64" | "fixed32" | "fixed64" | "sfixed32" | "sfixed64" | "bool" | "backTickString" | "bytes" | "enum" | "Timestamp" | "Any" | "Struct" | "Map" | "NullValue" | "Duration" | "regex" | "void";
    Duration: "string" | "double" | "float" | "int32" | "int64" | "uint32" | "uint64" | "sint32" | "sint64" | "fixed32" | "fixed64" | "sfixed32" | "sfixed64" | "bool" | "backTickString" | "bytes" | "enum" | "Timestamp" | "Any" | "Struct" | "Map" | "NullValue" | "Duration" | "regex" | "void";
    regex: "string" | "double" | "float" | "int32" | "int64" | "uint32" | "uint64" | "sint32" | "sint64" | "fixed32" | "fixed64" | "sfixed32" | "sfixed64" | "bool" | "backTickString" | "bytes" | "enum" | "Timestamp" | "Any" | "Struct" | "Map" | "NullValue" | "Duration" | "regex" | "void";
    void: "string" | "double" | "float" | "int32" | "int64" | "uint32" | "uint64" | "sint32" | "sint64" | "fixed32" | "fixed64" | "sfixed32" | "sfixed64" | "bool" | "backTickString" | "bytes" | "enum" | "Timestamp" | "Any" | "Struct" | "Map" | "NullValue" | "Duration" | "regex" | "void";
};
export type TBitloopsPrimitives = (typeof bitloopsPrimitives)[number];
export declare const BitloopsBuiltInClassNames: {
    readonly UUIDv4: "UUIDv4";
};
export declare const bitloopsBuiltInClasses: readonly ["UUIDv4"];
export type TBitloopsBuiltInClasses = (typeof bitloopsBuiltInClasses)[number];
export type TBitloopsIdentifier = string;
export type TParam = 'variable' | 'method' | TBitloopsPrimitives | TBitloopsIdentifier;
export declare const primitivesTypeKey = "primitiveType";
export type TBitloopsPrimitivesObject = {
    [primitivesTypeKey]: TBitloopsPrimitives;
};
export declare const builtInClassTypeKey = "builtInClassType";
export type TBitloopsBuiltInClassesObject = {
    [builtInClassTypeKey]: TBitloopsBuiltInClasses;
};
export type TStandardValueType = {
    standardValueType: StandardVOType;
};
export type TStandardValueTypeValues = StandardVOType;
export declare const standardVOTypeKey = "standardVOType";
export type TStandardVO = string;
export type StandardVOType = {
    [standardVOTypeKey]: TStandardVO;
};
export declare const bitloopsIdentifiersTypeKey = "bitloopsIdentifierType";
export type TBitloopsIdentifierObject = {
    [bitloopsIdentifiersTypeKey]: TBitloopsIdentifier;
};
export declare const arrayPrimaryTypeKey = "arrayPrimaryType";
export type ArrayBitloopsPrimTypeObject = {
    [arrayPrimaryTypeKey]: TBitloopsPrimaryTypeValues;
};
export declare const bitloopsPrimaryTypeKey = "type";
export type TBitloopsPrimaryTypeValues = TBitloopsPrimitivesObject | TBitloopsBuiltInClassesObject | TBitloopsIdentifierObject | ArrayBitloopsPrimTypeObject | TStandardValueType;
export type TBitloopsPrimaryType = {
    [bitloopsPrimaryTypeKey]: TBitloopsPrimaryTypeValues;
};
export type TDomainRule = {
    DomainRule: {
        domainRuleIdentifier: string;
        error: string;
        statements: TStatements;
        isBrokenIfCondition: TCondition & Partial<TArgumentList>;
    } & Partial<TParameterList>;
};
/**
 * This type exists because not all expressions work as a condition, only the ones that evaluate to boolean.
 * (at least in most languages)
 */
export type TCondition = {
    condition: TExpression;
};
export declare const DomainErrorKey = "DomainError";
export declare const DomainErrorIdentifier = "identifier";
export type TErrorMessage = {
    message: TExpression;
};
export type TErrorId = {
    errorId: TExpression;
};
export type TDomainError = {
    [DomainErrorKey]: TDomainErrorValue;
};
export type TDomainErrorValue = {
    [DomainErrorIdentifier]: TIdentifier;
} & TErrorMessage & TErrorId & Partial<TParameterList>;
export declare const ApplicationErrorKey = "ApplicationError";
export declare const ApplicationErrorIdentifier = "identifier";
export type TApplicationError = {
    [ApplicationErrorKey]: TApplicationErrorValue;
};
export type TApplicationErrorValue = {
    [ApplicationErrorIdentifier]: TIdentifier;
} & TErrorMessage & TErrorId & Partial<TParameterList>;
export type TInstanceOf = {
    isInstanceOf: TExpression & {
        class: TBitloopsPrimaryType;
    };
};
export type TPropsEvaluation = {
    props: {
        [PropsIdentifierKey]: string;
    } & TEvaluationFields;
};
export type TGetClass = {
    getClass: TExpression;
};
export type TBuiltInClassEvaluation = {
    builtInClass: {
        className: string;
    } & TArgumentList;
};
export type TPortToken = {
    portIdentifier: string;
};
export type TDomainServiceEvaluation = {
    domainService: {
        identifier: string;
    } & TArgumentList;
};
export type TEvaluationValues = TStructEvaluation | TDTOEvaluation | TValueObjectEvaluation | TPropsEvaluation | TEntityEvaluation | TIntegrationEventEvaluation | TEntityConstructorEvaluation | TValueObjectConstructorEvaluation | TErrorEvaluation | TBuiltInClassEvaluation | TBuiltInFunctionValues | TCommandEvaluation | TQueryEvaluation | TDomainEventEvaluation | TStandardVOEvaluation | TDomainServiceEvaluation | TReadModelEvaluation | TPackageEvaluation;
export type TMethodCallExpression = {
    methodCallExpression: TExpression & TArgumentList;
};
export type TEvaluation = {
    evaluation: TEvaluationValues;
};
export type TIfStatement = {
    ifStatement: {
        condition: TExpression;
        thenStatements: {
            statements: TStatements;
        };
        elseStatements?: {
            statements: TStatements;
        };
    };
};
export type TForOfStatement = {
    forOfStatement: {
        expression: TExpressionValues;
        statements: TStatements;
        identifier: TIdentifier;
    };
};
export type TEvaluationField = {
    evaluationField: {
        identifier: string;
    } & TExpression;
};
export type TEvaluationFields = {
    [evaluationFieldsKey]: TEvaluationField[];
};
export type TStructEvaluation = {
    struct: {
        [structIdentifierKey]: string;
    } & TEvaluationFields;
};
export type TDTOEvaluation = {
    dto: {
        [DTOIdentifierKey]: TDTOIdentifier;
    } & TEvaluationFields;
};
export type TCommandEvaluation = {
    command: {
        [identifierKey]: TIdentifier;
    } & Partial<TEvaluationFields>;
};
export type TQueryEvaluation = {
    query: {
        [identifierKey]: TIdentifier;
    } & Partial<TEvaluationFields>;
};
export type TDomainEventEvaluation = {
    domainEvent: {
        [DomainEventIdentifierKey]: TIdentifier;
    } & Partial<TEvaluationFields>;
};
export type TStandardVOEvaluation = {
    standardVO: {
        [identifierKey]: TIdentifier;
    } & TEvaluationFields;
};
export type TValueObjectEvaluation = {
    valueObject: TDomainEvaluation;
};
export type TEntityEvaluation = {
    entity: TDomainEvaluation;
};
export type TEntityConstructorEvaluation = {
    entityConstructor: TDomainEvaluation;
};
export type TValueObjectConstructorEvaluation = {
    valueObjectConstructor: TDomainEvaluation;
};
export type TIntegrationEventEvaluation = {
    integrationEvent: {
        props: TDomainEvaluationExpression;
        integrationEventIdentifier: TIntegrationEventIdentifier;
    };
};
export type TDomainEvaluation = {
    domainEvaluation: {
        props: TDomainEvaluationExpression;
    } & TDomainEvaluationName;
};
type TDomainEvaluationName = {
    entityIdentifier: TEntityIdentifier;
} | {
    valueObjectIdentifier: TValueObjectIdentifier;
} | {
    readModelIdentifier: TReadModelIdentifier;
};
export type TReadModelEvaluation = {
    readModelEvaluation: TDomainEvaluation;
};
export type TPackageEvaluation = {
    packageEvaluation: {
        identifier: string;
        methodName: string;
    } & TArgumentList;
};
export type TDomainEvaluationExpression = TEvaluationFields | TExpression;
export declare const expressionKey = "expression";
export type TExpression = {
    [expressionKey]: TExpressionValues;
};
export type TExpressionValues = TEvaluation | TLogicalExpression | TMultiplicativeExpression | TAdditiveExpression | TRelationalExpression | TEqualityExpression | TParenthesizedExpression | TArrayLiteralExpression | TToStringExpression | TLiteral | TIdentifierExpression | TMethodCallExpression | TThisExpression | TMemberDotExpression | TStaticMemberDotExpression | TAssignmentExpression | TInstanceOf | TGetClass | TEnvironmentVariableExpression | TObjectLiteral | TIfErrorExpression | TAnonymousFunction;
export type TIfErrorExpression = {
    ifErrorExpression: TExpression & Partial<TAnonymousFunction>;
};
export type TStatementsObj = {
    statements: TStatements;
};
export type TAnonymousFunction = {
    anonymousFunction: {
        arrowFunctionBody: TReturnStatement | TStatementsObj;
    } & TParameterList;
};
export type TAssignmentExpression = {
    assignmentExpression: {
        left: TExpression;
    } & TExpression;
};
export type TMemberDotExpression = {
    memberDotExpression: TExpression & {
        identifier: string;
    };
};
export type TStaticMemberDotExpression = {
    staticMemberDotExpression: {
        identifier: string;
        className: string;
    };
};
export type TIdentifierExpression = {
    identifier: string;
};
export type TToStringExpression = {
    toStringMethod: TExpression;
};
export type TLiteral = {
    literal: TLiteralValues;
};
export type TLiteralValues = StringLiteral | BooleanLiteral | TNumericLiteral | NullLiteral | TemplateStringLiteral | TRegexLiteral;
export type StringLiteral = {
    stringLiteral: string;
};
export type TRegexLiteral = {
    regexLiteral: string;
};
export type TemplateStringLiteral = {
    templateStringLiteral: string;
};
export type BooleanLiteral = {
    booleanLiteral: string;
};
export type NullLiteral = {
    nullLiteral: string;
};
export type TNumericLiteral = {
    numericLiteral: TNumericLiteralValues;
};
export type TNumericLiteralValues = IntegerLiteral | DecimalLiteral;
export type TIntegerLiteralType = 'int32' | 'int64';
export type IntegerLiteral = {
    integerLiteral: {
        value: string;
        type: TIntegerLiteralType;
    };
};
export type DecimalLiteral = {
    decimalLiteral: {
        value: string;
        type: 'float' | 'double';
    };
};
export type TThisExpression = {
    thisExpression: 'this';
};
export type TArrayLiteralExpression = {
    arrayLiteral: TExpression[];
};
export type TReturnStatement = {
    return: TExpression | null;
};
export declare const returnOKKey = "returnOK";
export type TReturnOKStatement = {
    [returnOKKey]: TExpression | null;
};
export declare const returnErrorKey = "returnError";
export type TReturnErrorStatement = {
    [returnErrorKey]: TExpression;
};
export type TConstDeclarationValue = {
    identifier: string;
} & Partial<TBitloopsPrimaryType> & TExpression;
export declare const constDeclarationKey = "constDeclaration";
export type TConstDeclaration = {
    [constDeclarationKey]: TConstDeclarationValue;
};
export declare const variableDeclarationKey = "variableDeclaration";
export type TVariableDeclaration = {
    [variableDeclarationKey]: {
        identifier: string;
    } & TBitloopsPrimaryType & Partial<TExpression>;
};
export type TBreakStatement = {
    breakStatement: 'break';
};
export type TAppliedRule = {
    appliedRule: {
        domainRuleIdentifier: string;
    } & TArgumentList;
};
export type TApplyRules = {
    applyRules: TAppliedRule[];
};
export type TThisIdentifier = string;
export type TAddDomainEvent = {
    addDomainEvent: {
        identifier?: TIdentifier;
        thisIdentifier?: TThisIdentifier;
    } & TExpression;
};
export type TBuiltInFunction = {
    builtInFunction: TBuiltInFunctionValues;
};
export type TBuiltInFunctionValues = TApplyRules | TAddDomainEvent;
export type TStatement = TBreakStatement | TIfStatement | TSwitchStatement | TReturnStatement | TReturnOKStatement | TReturnErrorStatement | TConstDeclaration | TVariableDeclaration | TBuiltInFunction | TExpression | TForOfStatement;
export type TStatements = TStatement[];
export type TConstantVariable = {
    type: string;
    value: string;
    name: string;
};
export type TPrivateMethods = TPrivateMethod[];
type TStatic = {
    static: boolean;
};
export type TPrivateMethodValues = {
    identifier: TIdentifier;
    statements: TStatements;
} & TParameterList & TStatic;
export type TPrivateMethodValuesPrimaryReturnType = TBitloopsPrimaryType & TPrivateMethodValues;
export type TPrivateMethodValuesOkErrorReturnType = TPrivateMethodValues & TOkErrorReturnType;
export type TPrivateMethod = {
    privateMethod: TPrivateMethodValuesPrimaryReturnType | TPrivateMethodValuesOkErrorReturnType;
};
export type TPublicMethods = TPublicMethod[];
export type TPublicMethod = {
    publicMethod: {
        identifier: TIdentifier;
        statements: TStatements;
    } & TOkErrorReturnType & TParameterList & TStatic;
};
export type TReturnOkType = {
    ok: TBitloopsPrimaryType;
};
export type TErrorIdentifier = {
    error: string;
};
export type TErrorIdentifiers = TErrorIdentifier[];
export type TOkErrorReturnType = {
    returnType: {
        errors: TErrorIdentifiers;
    } & TReturnOkType;
};
export type TDomainCreateMethod = {
    create: {
        statements: TStatements;
    } & TOkErrorReturnType & TParameter;
};
export type TValueObjectCreate = TDomainCreateMethod;
export type TValueObjectIdentifier = string;
export type TValueObject = {
    ValueObject: {
        valueObjectIdentifier: TValueObjectIdentifier;
        constants?: TConstDeclaration[];
        privateMethods?: TPrivateMethods;
    } & TValueObjectCreate;
};
export type TEntityIdentifier = string;
export type TEntity = {
    Entity: {
        entityIdentifier: TEntityIdentifier;
        entityValues: TEntityValues;
    };
};
export type TEntityValues = {
    constants?: TConstDeclaration[];
    publicMethods?: TPublicMethods;
    privateMethods?: TPrivateMethods;
} & TEntityCreate;
export type TEntityCreate = TDomainCreateMethod;
export declare const RootEntityKey = "RootEntity";
export type TRootEntity = {
    [RootEntityKey]: {
        entityIdentifier: TEntityIdentifier;
        entityValues: TEntityValues;
    };
};
export declare const StructKey = "Struct";
export type TStructIdentifier = string;
export declare const structIdentifierKey = "StructIdentifier";
export type TStructDeclaration = {
    [StructKey]: {
        [structIdentifierKey]: TStructIdentifier;
    } & TVariables;
};
export type TExecute = {
    statements: TStatements;
} & TOkErrorReturnType & Partial<TParameter>;
export type TDTOIdentifier = string;
export declare const DTOIdentifierKey = "DTOIdentifier";
export declare const DTOKey = "DTO";
export type TDTO = {
    [DTOKey]: {
        [DTOIdentifierKey]: TDTOIdentifier;
    } & TVariables;
};
export type TStruct = Record<string, TStructDeclaration>;
export declare const languageKey = "language";
export type TLanguage = 'TypeScript-Nest' | 'TypeScript';
export declare const configInvocationKey = "configInvocation";
export type TConfigInvocation = {
    [configInvocationKey]: {
        [languageKey]: TLanguage;
    };
};
export type TDefaultCase = {
    statements: TStatements;
};
export type TRegularCase = {
    regularCase: {
        statements: TStatements;
    } & TExpression;
};
export type TSwitchStatement = {
    switchStatement: {
        cases: TRegularCase[];
        defaultCase: TDefaultCase;
    } & TExpression;
};
export type TEvaluatePrimitive = {
    value: string;
    type: TBitloopsPrimitives;
};
export type TBoundedContextModule = {
    boundedContextModule: {
        boundedContextName: TBoundedContextName;
        moduleName: TModuleName;
    };
};
export type TBoundedContextName = TWordsWithSpaces;
export type TModuleName = TWordsWithSpaces;
export type TWordsWithSpaces = {
    wordsWithSpaces: string;
};
export declare const methodDefinitionListKey = "methodDefinitionList";
export type TDefinitionMethods = {
    [methodDefinitionListKey]: TDefinitionMethodInfo[];
};
export declare const PackagePortIdentifierKey = "PackagePortIdentifier";
export type TPackagePortIdentifier = string;
export declare const PackagePortKey = "PackagePort";
export type TPackagePort = {
    [PackagePortKey]: {
        [PackagePortIdentifierKey]: TPackagePortIdentifier;
    } & TDefinitionMethods;
};
export type TDefinitionMethodValues = {
    identifier: TIdentifier;
} & TParameterList;
export type TDefinitionMethodPrimaryReturnType = TDefinitionMethodValues & TBitloopsPrimaryType;
export type TDefinitionMethodOkErrorReturnType = TDefinitionMethodValues & TOkErrorReturnType;
export type TDefinitionMethodInfo = {
    methodDefinition: TDefinitionMethodPrimaryReturnType | TDefinitionMethodOkErrorReturnType;
};
export declare const ServicePortIdentifierKey = "ServicePortIdentifier";
export type TServicePortIdentifier = string;
export type TServicePort = {
    ServicePort: {
        [ServicePortIdentifierKey]: TServicePortIdentifier;
    } & TDefinitionMethods;
};
export declare const repoPortKey = "RepoPort";
export type TExtendsRepoPorts = {
    [identifierKey]: TIdentifier;
}[];
export type TRepoPortIdentifier = string;
export declare const repoPortIdentifierKey = "repoPortIdentifier";
export type TAggregateRepoPort = {
    [repoPortKey]: {
        [repoPortIdentifierKey]: TRepoPortIdentifier;
        entityIdentifier: string;
        extendsRepoPorts: TExtendsRepoPorts;
        methodDefinitionList?: TDefinitionMethodInfo[];
    };
};
export type TReadModelRepoPort = {
    [repoPortKey]: {
        [repoPortIdentifierKey]: TRepoPortIdentifier;
        readModelIdentifier: string;
        extendsRepoPorts: TExtendsRepoPorts;
        methodDefinitionList?: TDefinitionMethodInfo[];
    };
};
export type TRepoPort = TAggregateRepoPort | TReadModelRepoPort;
export type TObjectLiteral = {
    objectLiteral: {
        name: string;
        expression: TExpression;
    }[];
};
export type TEnvironmentVariableExpression = {
    environmentVariable: {
        identifier: string;
        defaultValue?: TLiteralValues;
    };
};
export type TErrorEvaluation = {
    errorEvaluation: {
        error: string;
    } & Partial<TArgumentList>;
};
export type TLogicalExpression = {
    logicalExpression: TNotExpression | TAndExpression | TOrExpression | TXorExpression;
};
export type TNotExpression = {
    notExpression: TExpression;
};
export type TAndExpression = {
    andExpression: {
        left: TExpression;
        right: TExpression;
    };
};
export type TOrExpression = {
    orExpression: {
        left: TExpression;
        right: TExpression;
    };
};
export type TXorExpression = {
    xorExpression: {
        left: TExpression;
        right: TExpression;
    };
};
export type TMultiplicativeExpression = {
    multiplicativeExpression: {
        left: TExpression;
        operator: TMultiplicativeOperator;
        right: TExpression;
    };
};
export type TMultiplicativeOperator = '*' | '/' | '%';
export type TAdditiveExpression = {
    additiveExpression: {
        left: TExpression;
        operator: TAdditiveOperator;
        right: TExpression;
    };
};
export type TAdditiveOperator = '+' | '-';
export type TRelationalExpression = {
    relationalExpression: {
        left: TExpression;
        operator: TRelationalOperator;
        right: TExpression;
    };
};
export type TRelationalOperator = '<' | '<=' | '>' | '>=';
export type TEqualityExpression = {
    equalityExpression: {
        left: TExpression;
        operator: TEqualityOperator;
        right: TExpression;
    };
};
export type TEqualityOperator = '==' | '!=';
export type TParenthesizedExpression = {
    parenthesizedExpression: TExpression;
};
type TDependencyTypescript = {
    type: 'absolute' | 'relative';
    default: boolean;
    value: string;
    from?: string;
};
export type TDependencyChildTypescript = TDependencyTypescript & {
    classType?: TClassTypesValues;
    className?: string;
    contextInfo?: TContextData;
};
export type TDependencyParentTypescript = TDependencyTypescript & {
    from: string;
};
export type TDependenciesTypeScript = (TDependencyChildTypescript | TDependencyParentTypescript)[];
export type TTargetDependenciesTypeScript = {
    output: string;
    dependencies: TDependenciesTypeScript;
};
export type TCommandIdentifier = TIdentifier;
export type TCommandTopicIdentifier = TIdentifier;
export declare const commandKey = "command";
export type TCommand = {
    [commandKey]: {
        [identifierKey]: TCommandIdentifier;
    } & TVariables;
};
export declare const queryKey = "query";
export type TQueryIdentifier = TIdentifier;
export type TQuery = {
    [queryKey]: {
        [identifierKey]: TQueryIdentifier;
    } & Partial<TVariables>;
};
export declare const commandHandlerKey = "commandHandler";
export type TCommandHandlerIdentifier = TIdentifier;
export type TCommandHandler = {
    [commandHandlerKey]: {
        [identifierKey]: TCommandHandlerIdentifier;
        execute: TExecute;
    } & TParameterList;
};
export declare const queryHandlerKey = "queryHandler";
export type TQueryHandlerIdentifier = TIdentifier;
export type TQueryHandler = {
    [queryHandlerKey]: {
        [identifierKey]: TQueryHandlerIdentifier;
        execute: TExecute;
    } & TParameterList;
};
export type TEventHandlerBusDependencies = {
    eventHandlerBusDependencies: {
        commandBus: boolean;
        queryBus: boolean;
        integrationEventBus: boolean;
        pubSubIntegrationEventBus: boolean;
    };
};
export type TIntegrationVersionMappers = {
    integrationVersionMappers: TIntegrationVersionMapper[];
};
export type TIntegrationVersionMapper = {
    integrationVersionMapper: {
        statements: TStatements;
        [structIdentifierKey]: TStructIdentifier;
    } & StringLiteral;
};
export type TIntegrationEventIdentifier = string;
export type TIntegrationEvent = {
    IntegrationEvent: {
        integrationEventIdentifier: TIntegrationEventIdentifier;
    } & TIntegrationVersionMappers & TParameter;
};
export declare const DomainEventIdentifierKey = "DomainEventIdentifier";
export type TDomainEventIdentifier = string;
export type TDomainEvent = {
    domainEvent: {
        [DomainEventIdentifierKey]: TDomainEventIdentifier;
        entityIdentifier: TEntityIdentifier;
    } & Partial<TVariables>;
};
type TDomainEventHandlerIdentifier = string;
export type TDomainEventHandler = {
    domainEventHandler: {
        domainEventHandlerIdentifier: TDomainEventHandlerIdentifier;
        handle: THandle;
    } & TParameterList & TEventHandlerBusDependencies;
};
export type THandle = TExecute;
export type TIntegrationEventHandlerHandleMethod = {
    integrationEventHandlerHandleMethod: {
        statements: TStatements;
    } & TOkErrorReturnType & TIntegrationEventParameter;
};
export type TIntegrationEventParameter = {
    integrationEventParameter: {
        value: TParameterIdentifier;
        integrationEventIdentifier: TIntegrationEventIdentifier;
    } & TBoundedContextModule;
};
type TIntegrationEventHandlerIdentifier = string;
export type TIntegrationEventHandler = {
    integrationEventHandler: {
        integrationEventHandlerIdentifier: TIntegrationEventHandlerIdentifier;
    } & TParameterList & TEventHandlerBusDependencies & TEvaluationField & TIntegrationEventHandlerHandleMethod;
};
export declare enum IntegrationEventHandlerOptions {
    eventVersion = "eventVersion"
}
export declare const domainServiceKey = "domainService";
export type TDomainService = {
    [domainServiceKey]: {
        identifier: TIdentifier;
        constants?: TConstDeclaration[];
        publicMethods: TPublicMethods;
        privateMethods?: TPrivateMethods;
    } & TParameterList;
};
export {};
//# sourceMappingURL=types.d.ts.map