import ts from 'typescript';
import type { BucketAccelerateStatus, BucketVersioningStatus, ServerSideEncryptionConfiguration } from '@aws-sdk/client-s3';
export type Permission = 'read' | 'write' | 'create' | 'delete';
export interface StorageTriggers {
    readonly onUpload?: string;
    readonly onDelete?: string;
}
export interface FunctionAccess {
    readonly functionName: string;
    readonly permissions: readonly Permission[];
}
export interface AccessPatterns {
    readonly auth?: readonly Permission[];
    readonly guest?: readonly Permission[];
    readonly groups?: Readonly<Record<string, readonly Permission[]>>;
    readonly functions?: readonly FunctionAccess[];
}
export interface S3RenderOptions {
    readonly name: string;
    readonly access?: AccessPatterns;
    readonly triggers?: StorageTriggers;
    readonly bucketName: string;
    readonly accelerateStatus?: BucketAccelerateStatus;
    readonly versioningStatus?: BucketVersioningStatus;
    readonly encryption?: ServerSideEncryptionConfiguration;
}
export declare class S3Renderer {
    render(opts: S3RenderOptions): ts.NodeArray<ts.Node>;
    private renderImportStatements;
    private renderBackendTypeImport;
    private renderDefineStorageExport;
    private renderPostRefactor;
    private renderApplyEscapeHatches;
    private renderEncryption;
    private createCfnBucketDeclaration;
    private renderName;
    private renderAccessPatterns;
    private renderTriggers;
    private buildAccessProperty;
    private createAllowPattern;
    private createResourcePattern;
}
//# sourceMappingURL=s3.renderer.d.ts.map