import type { Integer } from "../../common/CustomTypes/Integer";
import type { NonEmptyString } from "../../common/CustomTypes/NonEmptyString";
import type { ResourceBase } from "./Common";
/**
 * @deprecated Only for Backward compatibility
 */
export declare type SimpleTableType = 'resource.table.simple';
/**
 * @deprecated Only for Backward compatibility
 */
export interface SimpleTable extends ResourceBase {
    type: SimpleTableType;
    tableName: string;
    key: string;
    throughput?: TableThroughput;
}
export declare type TableType = 'resource.table';
export interface Table extends ResourceBase {
    type: TableType;
    deletionPolicy?: 'Delete' | 'Retain';
    tableName: string;
    key: TableKey;
    primaryIndexes?: TableIndex[];
    secondaryIndexes?: TableIndex[];
    stream?: TableStream;
    TTL?: TTLSpecification;
    aws: AwsTableSpecific;
    isPointInTimeRecoveryEnabled?: boolean;
}
export interface TTLSpecification {
    attributeName: NonEmptyString;
    disabled?: boolean;
}
export interface TableStream {
    streamViewType: StreamViewType;
}
export declare type StreamViewType = 'KEYS_ONLY' | 'NEW_AND_OLD_IMAGES' | 'NEW_IMAGE' | 'OLD_IMAGE';
export interface AwsTablePayPerRequestSpecific {
    billingModel: 'PAY_PER_REQUEST';
    throughput?: undefined;
}
export interface AwsTableProvisionedSpecific {
    billingModel: 'PROVISIONED';
    throughput: TableThroughput;
}
export declare type AwsTableSpecific = AwsTablePayPerRequestSpecific | AwsTableProvisionedSpecific;
export declare type TableKeyType = 'BINARY' | 'NUMBER' | 'STRING';
export interface TableKey {
    hash: TableKeyPart;
    range?: TableKeyPart;
}
export interface TableKeyPart {
    name: string;
    type: TableKeyType;
}
export interface TableIndex {
    name: string;
    key: TableKey;
    projection: TableIndexProjection;
    throughput?: TableThroughput;
}
export declare type TableIndexProjection = TableIndexIncludeProjection | {
    type: 'table.index.projection.all';
} | {
    type: 'table.index.projection.keys';
};
export interface TableIndexIncludeProjection {
    type: 'table.index.projection.include';
    attributes: string[];
}
export interface TableThroughput {
    readUnits: Integer;
    writeUnits: Integer;
}
export declare type TableResourceType = SimpleTableType | TableType;
export declare type TableResource = SimpleTable | Table;
export declare type TableResourceByType = {
    [K in SimpleTableType]: SimpleTable;
} & {
    [K in TableType]: Table;
};
export declare const isTableThroughput: import("@altostra/type-validations").ObjectOfTypeValidation<TableThroughput>;
export declare const isSimpleTable: import("@altostra/type-validations").ObjectOfTypeValidation<SimpleTable>;
export declare const isTableKeyPart: import("@altostra/type-validations").ObjectOfTypeValidation<TableKeyPart>;
export declare const isTableKey: import("@altostra/type-validations").ObjectOfTypeValidation<TableKey>;
export declare const isTableIndexProjection: import("@altostra/type-validations").TypeValidation<TableIndexProjection>;
export declare const isTableIndex: import("@altostra/type-validations").ObjectOfTypeValidation<TableIndex>;
export declare const isAwsTablePayPerRequestSpecific: import("@altostra/type-validations").ObjectOfTypeValidation<AwsTablePayPerRequestSpecific>;
export declare const isAwsTableProvisionedSpecific: import("@altostra/type-validations").ObjectOfTypeValidation<AwsTableProvisionedSpecific>;
export declare const isAwsTableSpecific: import("@altostra/type-validations").TypeValidation<AwsTablePayPerRequestSpecific | AwsTableProvisionedSpecific>;
export declare const isTable: import("@altostra/type-validations").ObjectOfTypeValidation<Table>;
