/// <reference types="node" resolution-mode="require"/>
/// <reference types="node" resolution-mode="require"/>
import * as plugins from './smartbucket.plugins.js';
import { Directory } from './smartbucket.classes.directory.js';
export interface IFileMetaData {
    name: string;
    fileType: string;
    size: string;
}
/**
 * represents a file in a directory
 */
export declare class File {
    /**
     * creates a file in draft mode
     * you need to call .save() to store it in s3
     * @param optionsArg
     */
    static create(optionsArg: {
        directory: Directory;
        name: string;
        contents: Buffer | string | plugins.stream.Readable;
        /**
         * if contents are of type string, you can specify the encoding here
         */
        encoding?: 'utf8' | 'binary';
    }): Promise<File>;
    parentDirectoryRef: Directory;
    name: string;
    path: string;
    metaData: IFileMetaData;
    constructor(optionsArg: {
        directoryRefArg: Directory;
        fileName: string;
    });
    getContentAsString(): Promise<string>;
    getContentAsBuffer(): Promise<Buffer>;
    readStreaming(): Promise<void>;
    /**
     * removes this file
     */
    remove(): Promise<void>;
    /**
     * deletes the file
     */
    delete(): Promise<void>;
    /**
     * allows locking the file
     * @param optionsArg
     */
    lock(optionsArg?: {
        timeoutMillis?: number;
    }): Promise<void>;
    /**
     * actively unlocks a file
     *
     */
    unlock(optionsArg?: {
        /**
         * unlock the file even if not locked from this instance
         */
        force?: boolean;
    }): Promise<void>;
    updateWithContents(optionsArg: {
        contents: Buffer | string | plugins.stream.Readable;
        encoding?: 'utf8' | 'binary';
    }): Promise<void>;
    /**
     * allows updating the metadata of a file
     * @param updatedMetadata
     */
    updateMetaData(updatedMetadata: any): Promise<void>;
}
