export declare abstract class DynamoDBRecordSchemaSourceBase<TRecord extends {}> {
    abstract getSchema(): ReadonlyMap<string, DynamoDBAttributeSchema>;
}
export interface DynamoDBRecordSchemaBuilder<TRecord> {
    forMember<TMember>(memberAccessor: (record: TRecord) => TMember, map: (attribute: DynamoDBMemberSchemaBuilder<TMember>) => void): DynamoDBRecordSchemaBuilder<TRecord>;
    getRecordSchema(): ReadonlyMap<string, DynamoDBAttributeSchema>;
}
export interface DynamoDBMemberSchemaBuilder<TMember> {
    asObject(attributeName: string, map: (attribute: DynamoDBRecordSchemaBuilder<TMember>) => DynamoDBRecordSchemaBuilder<TMember>): void;
    asNumber(attributeName: string): void;
    asString(attributeName: string): void;
    asStringsList(attributeName: string): void;
    asNumbersList(attributeName: string): void;
    asObjectsList(attributeName: string): void;
    asBool(attributeName: string): void;
    getMemberSchema(): ReadonlyMap<string, DynamoDBAttributeSchema>;
}
export declare class DefaultSchemaSource extends DynamoDBRecordSchemaSourceBase<any> {
    private readonly _schema;
    constructor(schema: ReadonlyMap<string, DynamoDBAttributeSchema>);
    getSchema(): ReadonlyMap<string, DynamoDBAttributeSchema>;
}
export declare type DynamoDBSchemaProvider = {
    getReadingSchema(recordTypeId: string): ReadonlyMap<string, DynamoDBAttributeSchema>;
    getWritingSchema(recordTypeId: string): ReadonlyMap<string, DynamoDBAttributeSchema>;
};
export declare class DefaultSchemaProvider implements DynamoDBSchemaProvider {
    private readonly _readingSchemaSources;
    private readonly _writingSchemaSources;
    constructor(readingSchemaSources: ReadonlyMap<string, DynamoDBRecordSchemaSourceBase<any>>, writingSchemaSources: ReadonlyMap<string, DynamoDBRecordSchemaSourceBase<any>>);
    getReadingSchema(recordTypeId: string): ReadonlyMap<string, DynamoDBAttributeSchema>;
    getWritingSchema(recordTypeId: string): ReadonlyMap<string, DynamoDBAttributeSchema>;
}
export declare type MappingBuilder = {
    use<TRecord extends {}>(typeId: string, schemaSource: DynamoDBRecordSchemaSourceBase<TRecord>): void;
    createReaderFor<TRecord extends {}>(typeId: string): DynamoDBRecordSchemaBuilder<TRecord>;
    createWriterFor<TRecord extends {}>(typeId: string): DynamoDBRecordSchemaBuilder<TRecord>;
};
export declare type DynamoDBMappingProfile = {
    register(builder: MappingBuilder): void;
};
export declare type DYNAMODB_ATTRIBUTE_TYPE = "S" | "N" | "B" | "SS" | "NS" | "BS" | "M" | "L" | "NULL" | "BOOL";
export declare type DynamoDBAttributeSchema = {
    attributeName: string;
    attributeType: DYNAMODB_ATTRIBUTE_TYPE;
    lastChildAttributeType: DYNAMODB_ATTRIBUTE_TYPE;
    nested?: DynamoDBAttributeSchema;
};
export declare class DynamoDBMappingBuilder implements MappingBuilder {
    private readonly _fromAttributeReaders;
    private readonly _toAttributeWriters;
    private readonly _readingSchemaSources;
    private readonly _writingSchemaSources;
    constructor();
    createReaderFor<TRecord extends {}>(typeId: string): DynamoDBRecordSchemaBuilder<TRecord>;
    createWriterFor<TRecord extends {}>(typeId: string): DynamoDBRecordSchemaBuilder<TRecord>;
    use<TRecord extends {}>(typeId: string, schemaSource: DynamoDBRecordSchemaSourceBase<TRecord>): void;
    buildSchemaProvider(): DynamoDBSchemaProvider;
}
export declare class DynamoDBMemberBuilder<TMember> implements DynamoDBMemberSchemaBuilder<TMember> {
    private readonly _memberName;
    private readonly _attributeSchema;
    constructor(memberName: string);
    asBool(attributeName: string): void;
    asNumber(attributeName: string): void;
    asNumbersList(attributeName: string): void;
    asObject(attributeName: string, map: (attribute: DynamoDBRecordSchemaBuilder<TMember>) => DynamoDBRecordSchemaBuilder<TMember>): void;
    asObjectsList(attributeName: string): void;
    asString(attributeName: string): void;
    asStringsList(attributeName: string): void;
    getMemberSchema(): ReadonlyMap<string, DynamoDBAttributeSchema>;
    private _asTopLevel;
    private _asLastType;
}
export declare class AttributeSchemaBuilder<TRecord extends {}> implements DynamoDBRecordSchemaBuilder<TRecord> {
    private static readonly _ReadMemberHandler;
    private readonly _proxyRecord;
    private readonly _membersSchema;
    constructor();
    forMember<TMember>(memberAccessor: (record: TRecord) => TMember, map: (attribute: DynamoDBMemberSchemaBuilder<TMember>) => void): DynamoDBRecordSchemaBuilder<TRecord>;
    getRecordSchema(): ReadonlyMap<string, DynamoDBAttributeSchema>;
}
