/*!
 * Copyright (C) Microsoft Corporation. All rights reserved.
 */
interface BooleanManagedProperty {
    CanBeChanged: boolean;
    ManagedPropertyLogicalName: string;
    Value: boolean;
}
declare const entityClusterModeEnum: {
    readonly 0: "Partitioned";
    readonly 1: "Replicated";
    readonly 2: "Local";
};
type EntityClusterMode = keyof typeof entityClusterModeEnum;
export declare function getEntityClusterModeName(value: EntityClusterMode): "Partitioned" | "Replicated" | "Local";
declare const ownershipTypeEnum: {
    readonly 0: "None";
    readonly 1: "UserOwned";
    readonly 2: "TeamOwned";
    readonly 4: "BusinessOwned";
    readonly 8: "OrganizationOwned";
    readonly 16: "BusinessParented";
    readonly 32: "Filtered";
};
type OwnershipType = keyof typeof ownershipTypeEnum;
export declare function getOwnershipTypeName(value: OwnershipType): "None" | "UserOwned" | "TeamOwned" | "BusinessOwned" | "OrganizationOwned" | "BusinessParented" | "Filtered";
interface LocalizedLabel {
    HasChanged: boolean;
    IsManaged: boolean;
    Label: string;
    LanguageCode: number;
    MetadataId: string;
}
interface Label {
    LocalizedLabels: LocalizedLabel[];
    UserLocalizedLabel: LocalizedLabel;
}
declare const privilegeTypeEnum: {
    readonly 0: "None";
    readonly 1: "Create";
    readonly 2: "Read";
    readonly 3: "Write";
    readonly 4: "Delete";
    readonly 5: "Assign";
    readonly 6: "Share";
    readonly 7: "Append";
    readonly 8: "AppendTo";
};
type PrivilegeType = keyof typeof privilegeTypeEnum;
export declare function getPrivilegeTypeName(value: PrivilegeType): "None" | "Create" | "Read" | "Write" | "Delete" | "Assign" | "Share" | "Append" | "AppendTo";
interface SecurityPrivilegeMetadata {
    CanBeBasic: boolean;
    CanBeDeep: boolean;
    CanBeEntityReference: boolean;
    CanBeGlobal: boolean;
    CanBeLocal: boolean;
    CanBeParentEntityReference: boolean;
    CanBeRecordFilter: boolean;
    Name: string;
    PrivilegeId: string;
    PrivilegeType: PrivilegeType;
}
interface EntitySetting {
    ChildSettings: EntitySetting[];
    Name: string;
}
export interface EntityMetadataSelects {
    ActivityTypeMask: number;
    AutoCreateAccessTeams: boolean;
    AutoReplicateClusterRecords: boolean;
    AutoRouteToOwnerQueue: boolean;
    CanBeInCustomEntityAssociation: BooleanManagedProperty;
    CanBeInManyToMany: BooleanManagedProperty;
    CanBePrimaryEntityInRelationship: BooleanManagedProperty;
    CanBeRelatedEntityInRelationship: BooleanManagedProperty;
    CanChangeClusterMode: boolean;
    CanChangeHierarchicalRelationship: BooleanManagedProperty;
    CanChangeTrackingBeEnabled: BooleanManagedProperty;
    CanCreateAttributes: BooleanManagedProperty;
    CanCreateCharts: BooleanManagedProperty;
    CanCreateForms: BooleanManagedProperty;
    CanCreateViews: BooleanManagedProperty;
    CanEnableSyncToExternalSearchIndex: BooleanManagedProperty;
    CanModifyAdditionalSettings: BooleanManagedProperty;
    CanTriggerWorkflow: boolean;
    ChangeTrackingEnabled: boolean;
    ClusterMode: EntityClusterMode;
    CollectionSchemaName: string;
    CreatedOn: number;
    DataProviderId: string;
    DataSourceId: string;
    DaysSinceRecordLastModified: number;
    Description: Label;
    DisplayCollectionName: Label;
    DisplayName: Label;
    EnforceStateTransitions: boolean;
    EntityColor: string;
    EntityHelpUrl: string;
    EntityHelpUrlEnabled: boolean;
    EntitySetName: string;
    ExternalCollectionName: string;
    ExternalName: string;
    HasActivities: boolean;
    HasChanged: boolean;
    HasEmailAddresses: boolean;
    HasFeedback: boolean;
    HasNotes: boolean;
    IconLargeName: string;
    IconMediumName: string;
    IconSmallName: string;
    IconVectorName: string;
    IntroducedVersion: string;
    IsActivity: boolean;
    IsActivityParty: boolean;
    IsAIRUpdated: boolean;
    IsArchivalEnabled: boolean;
    IsAuditEnabled: BooleanManagedProperty;
    IsAvailableOffline: boolean;
    IsBPFEntity: boolean;
    IsBusinessProcessEnabled: boolean;
    IsChildEntity: boolean;
    IsConnectionsEnabled: BooleanManagedProperty;
    IsCustomEntity: boolean;
    IsCustomizable: BooleanManagedProperty;
    IsDocumentManagementEnabled: boolean;
    IsDocumentRecommendationsEnabled: boolean;
    IsDuplicateDetectionEnabled: BooleanManagedProperty;
    IsEnabledForCharts: boolean;
    IsEnabledForExternalChannels: boolean;
    IsEnabledForTrace: boolean;
    IsImportable: boolean;
    IsInteractionCentricEnabled: boolean;
    IsIntersect: boolean;
    IsKnowledgeManagementEnabled: boolean;
    IsLogicalEntity: boolean;
    IsMailMergeEnabled: BooleanManagedProperty;
    IsManaged: boolean;
    IsMappable: BooleanManagedProperty;
    IsMSTeamsIntegrationEnabled: boolean;
    IsOfflineInMobileClient: BooleanManagedProperty;
    IsOneNoteIntegrationEnabled: boolean;
    IsOptimisticConcurrencyEnabled: boolean;
    IsPrivate: boolean;
    IsQuickCreateEnabled: boolean;
    IsReadingPaneEnabled: boolean;
    IsReadOnlyInMobileClient: BooleanManagedProperty;
    IsRenameable: BooleanManagedProperty;
    IsRetentionEnabled: boolean;
    IsRetrieveAuditEnabled: boolean;
    IsRetrieveMultipleAuditEnabled: boolean;
    IsSLAEnabled: boolean;
    IsSolutionAware: boolean;
    IsStateModelAware: boolean;
    IsValidForAdvancedFind: boolean;
    IsValidForQueue: BooleanManagedProperty;
    IsVisibleInMobile: BooleanManagedProperty;
    IsVisibleInMobileClient: BooleanManagedProperty;
    LogicalCollectionName: string;
    LogicalName: string;
    MetadataId: string;
    MobileOfflineFilters: string;
    ModifiedOn: number;
    ObjectTypeCode: number;
    OwnerId: string;
    OwnerIdType: number;
    OwnershipType: OwnershipType;
    OwningBusinessUnit: string;
    PrimaryIdAttribute: string;
    PrimaryImageAttribute: string;
    PrimaryKey: string[];
    PrimaryNameAttribute: string;
    Privileges: SecurityPrivilegeMetadata[];
    RecurrenceBaseEntityLogicalName: string;
    ReportViewName: string;
    SchemaName: string;
    SettingOf: string;
    Settings: EntitySetting[];
    SyncToExternalSearchIndex: boolean;
    TableType: string;
    UsesBusinessDataLabelTable: boolean;
}
declare const attributeTypeCodeEnum: {
    readonly 0: "Boolean";
    readonly 1: "Customer";
    readonly 2: "DateTime";
    readonly 3: "Decimal";
    readonly 4: "Double";
    readonly 5: "Integer";
    readonly 6: "Lookup";
    readonly 7: "Memo";
    readonly 8: "Money";
    readonly 9: "Owner";
    readonly 10: "PartyList";
    readonly 11: "Picklist";
    readonly 12: "State";
    readonly 13: "Status";
    readonly 14: "String";
    readonly 15: "Uniqueidentifier";
    readonly 16: "CalendarRules";
    readonly 17: "Virtual";
    readonly 18: "BigInt";
    readonly 19: "ManagedProperty";
    readonly 20: "EntityName";
};
type AttributeTypeCode = keyof typeof attributeTypeCodeEnum;
type AttributeTypeCodeName = (typeof attributeTypeCodeEnum)[AttributeTypeCode];
export declare function getAttributeTypeCodeName(value: AttributeTypeCode): "String" | "Boolean" | "BigInt" | "Customer" | "DateTime" | "Decimal" | "Double" | "Integer" | "Lookup" | "Memo" | "Money" | "Owner" | "PartyList" | "Picklist" | "State" | "Status" | "Uniqueidentifier" | "CalendarRules" | "Virtual" | "ManagedProperty" | "EntityName";
interface AttributeTypeDisplayName {
    Value: `${AttributeTypeCodeName}Type`;
}
declare const attributeRequiredLevelEnum: {
    readonly 0: "None";
    readonly 1: "SystemRequired";
    readonly 2: "ApplicationRequired";
    readonly 3: "Recommended";
};
type AttributeRequiredLevel = keyof typeof attributeRequiredLevelEnum;
export declare function getAttributeRequiredLevelName(value: AttributeRequiredLevel): "None" | "SystemRequired" | "ApplicationRequired" | "Recommended";
interface AttributeRequiredLevelManagedProperty {
    CanBeChanged: boolean;
    ManagedPropertyLogicalName: string;
    Value: AttributeRequiredLevel;
}
interface AttributeMetadata {
    AttributeOf: string;
    AttributeType: AttributeTypeCode;
    AttributeTypeName: AttributeTypeDisplayName;
    AutoNumberFormat: string;
    CanBeSecuredForCreate: boolean;
    CanBeSecuredForRead: boolean;
    CanBeSecuredForUpdate: boolean;
    CanModifyAdditionalSettings: BooleanManagedProperty;
    ColumnNumber: number;
    CreatedOn: number;
    DeprecatedVersion: string;
    Description: Label;
    DisplayName: Label;
    EntityLogicalName: string;
    ExternalName: string;
    HasChanged: boolean;
    InheritsFrom: string;
    IntroducedVersion: string;
    IsAuditEnabled: BooleanManagedProperty;
    IsCustomAttribute: boolean;
    IsCustomizable: BooleanManagedProperty;
    IsDataSourceSecret: boolean;
    IsFilterable: boolean;
    IsGlobalFilterEnabled: BooleanManagedProperty;
    IsLogical: boolean;
    IsManaged: boolean;
    IsPrimaryId: boolean;
    IsPrimaryName: boolean;
    IsRenameable: BooleanManagedProperty;
    IsRequiredForForm: boolean;
    IsRetrievable: boolean;
    IsSearchable: boolean;
    IsSecured: boolean;
    IsSortableEnabled: BooleanManagedProperty;
    IsValidForAdvancedFind: BooleanManagedProperty;
    IsValidForCreate: boolean;
    IsValidForForm: boolean;
    IsValidForGrid: boolean;
    IsValidForRead: boolean;
    IsValidForUpdate: boolean;
    IsValidODataAttribute: boolean;
    LinkedAttributeId: string;
    LogicalName: string;
    MetadataId: string;
    ModifiedOn: number;
    RequiredLevel: AttributeRequiredLevelManagedProperty;
    SchemaName: string;
    Settings: EntitySetting[];
    SourceType: number;
}
interface MetadataBase {
    HasChanged: boolean;
    MetadataId: string;
}
declare const relationshipTypeEnum: {
    readonly 0: "OneToManyRelationship";
    readonly 1: "ManyToManyRelationship";
};
type RelationshipType = keyof typeof relationshipTypeEnum;
export declare function getRelationshipTypeName(value: RelationshipType): "OneToManyRelationship" | "ManyToManyRelationship";
declare const securityTypesEnum: {
    readonly 0: "None";
    readonly 1: "Append";
    readonly 2: "ParentChild";
    readonly 8: "Pointer";
    readonly 16: "Inheritance";
};
type SecurityTypes = keyof typeof securityTypesEnum;
export declare function getSecurityTypesName(value: SecurityTypes): "None" | "Append" | "ParentChild" | "Pointer" | "Inheritance";
interface RelationshipMetadataBase extends MetadataBase {
    IntroducedVersion: string;
    IsCustomizable: BooleanManagedProperty;
    IsCustomRelationship: boolean;
    IsManaged: boolean;
    IsValidForAdvancedFind: boolean;
    RelationshipType: RelationshipType;
    SchemaName: string;
    SecurityTypes: SecurityTypes;
}
declare const associatedMenuBehaviorEnum: {
    readonly 0: "UseCollectionName";
    readonly 1: "UseLabel";
    readonly 2: "DoNotDisplay";
};
type AssociatedMenuBehavior = keyof typeof associatedMenuBehaviorEnum;
export declare function getAssociatedMenuBehaviorName(value: AssociatedMenuBehavior): "UseCollectionName" | "UseLabel" | "DoNotDisplay";
declare const associatedMenuGroupEnum: {
    readonly 0: "Details";
    readonly 1: "Sales";
    readonly 2: "Service";
    readonly 3: "Marketing";
};
type AssociatedMenuGroup = keyof typeof associatedMenuGroupEnum;
export declare function getAssociatedMenuGroupName(value: AssociatedMenuGroup): "Details" | "Sales" | "Service" | "Marketing";
interface AssociatedMenuConfiguration {
    AvailableOffline: boolean;
    QueryApi: string;
    Behavior: AssociatedMenuBehavior;
    Group: AssociatedMenuGroup;
    Icon: string;
    IsCustomizable: boolean;
    Label: Label;
    MenuId: string;
    Order: number;
    ViewId: string;
}
declare const cascadeTypeEnum: {
    readonly 0: "NoCascade";
    readonly 1: "Cascade";
    readonly 2: "Active";
    readonly 3: "UserOwned";
    readonly 4: "RemoveLink";
    readonly 5: "Restrict";
};
type CascadeType = keyof typeof cascadeTypeEnum;
export declare function getCascadeTypeName(value: CascadeType): "UserOwned" | "NoCascade" | "Cascade" | "Active" | "RemoveLink" | "Restrict";
interface CascadeConfiguration {
    Archive: CascadeType;
    Assign: CascadeType;
    Delete: CascadeType;
    Merge: CascadeType;
    Reparent: CascadeType;
    RollupView: CascadeType;
    Share: CascadeType;
    Unshare: CascadeType;
}
interface RelationshipAttribute {
    ReferencedAttributeName: string;
    ReferencingAttributeName: string;
}
interface OneToManyRelationshipMetadata extends RelationshipMetadataBase {
    AssociatedMenuConfiguration: AssociatedMenuConfiguration;
    CascadeConfiguration: CascadeConfiguration;
    DenormalizedAttributeName: string;
    EntityKey: string;
    IsDenormalizedLookup: boolean;
    IsHierarchical: boolean;
    IsRelationshipAttributeDenormalized: boolean;
    ReferencedAttribute: string;
    ReferencedEntity: string;
    ReferencedEntityNavigationPropertyName: string;
    ReferencingAttribute: string;
    ReferencingEntity: string;
    ReferencingEntityNavigationPropertyName: string;
    RelationshipAttributes: RelationshipAttribute[];
    RelationshipBehavior: number;
}
interface ManyToManyRelationshipMetadata extends RelationshipMetadataBase {
    Entity1AssociatedMenuConfiguration: AssociatedMenuConfiguration;
    Entity1IntersectAttribute: string;
    Entity1LogicalName: string;
    Entity1NavigationPropertyName: string;
    Entity2AssociatedMenuConfiguration: AssociatedMenuConfiguration;
    Entity2IntersectAttribute: string;
    Entity2LogicalName: string;
    Entity2NavigationPropertyName: string;
    IntersectEntityName: string;
}
export interface EntityMetadataExpands {
    Attributes: AttributeMetadata[];
    ManyToOneRelationships: OneToManyRelationshipMetadata[];
    OneToManyRelationships: OneToManyRelationshipMetadata[];
    ManyToManyRelationships: ManyToManyRelationshipMetadata[];
}
export type EntityMetadata = EntityMetadataSelects & EntityMetadataExpands;
type StringKeys<Model> = Extract<keyof Model, string>;
export interface GetEntityMetadataOptions<Model extends object = object> {
    metadata?: ReadonlyArray<keyof EntityMetadataSelects>;
    schema?: {
        columns?: 'all' | ReadonlyArray<StringKeys<Model>>;
        oneToMany?: boolean;
        manyToOne?: boolean;
        manyToMany?: boolean;
    };
}
/** @private */
export type DataverseMetadataRequest = {
    action: 'getEntityMetadata';
    parameters: {
        tableName: string;
        options?: GetEntityMetadataOptions;
    };
};
export {};
//# sourceMappingURL=dataverseMetadata.d.ts.map