import { Readable } from 'node:stream';
import type { Resource as ResourceInterface, User } from 'nephele';
import { Resource as NymphResource, ResourceData as NymphResourceData } from './entities/Resource.js';
import type Adapter from './Adapter.js';
import Properties from './Properties.js';
import Lock from './Lock.js';
export default class Resource implements ResourceInterface {
    adapter: Adapter;
    baseUrl: URL;
    path: string;
    nymphResource: NymphResource & NymphResourceData;
    rootResource: NymphResource & NymphResourceData;
    constructor({ adapter, baseUrl, path, nymphResource, rootResource, }: {
        adapter: Adapter;
        baseUrl: URL;
        path: string;
        nymphResource: NymphResource & NymphResourceData;
        rootResource?: NymphResource & NymphResourceData;
    });
    getLocks(): Promise<Lock[]>;
    getLocksByUser(user: User): Promise<Lock[]>;
    createLockForUser(user: User): Promise<Lock>;
    getProperties(): Promise<Properties>;
    private getBlobDirname;
    private deleteBlobIfOrphaned;
    getStream(range?: {
        start: number;
        end: number;
    }): Promise<Readable | import("fs").ReadStream>;
    setStream(input: Readable, _user: User, mediaType?: string): Promise<void>;
    create(_user: User): Promise<void>;
    delete(_user: User): Promise<void>;
    copy(destination: URL, baseUrl: URL, user: User): Promise<void>;
    move(destination: URL, baseUrl: URL, user: User): Promise<void>;
    getLength(): Promise<number>;
    getEtag(): Promise<string>;
    getMediaType(): Promise<string | null>;
    getCanonicalName(): Promise<string>;
    getCanonicalPath(): Promise<string>;
    getCanonicalUrl(): Promise<URL>;
    isCollection(): Promise<boolean>;
    getInternalMembers(_user: User): Promise<Resource[]>;
    exists(): Promise<boolean>;
    getFreeSpace(): Promise<number>;
    getTotalSpace(): Promise<number>;
}
