import type { Request } from 'express';
import type { Adapter as AdapterInterface, AuthResponse, Method, User } from 'nephele';
import Resource from './Resource.js';
export type File = {
    name: string;
    properties: {
        creationdate: Date;
        getlastmodified: Date;
        owner?: string;
        [k: string]: any;
    };
    locks: {
        [token: string]: {
            username: string;
            date: number;
            timeout: number;
            scope: 'exclusive' | 'shared';
            depth: '0' | 'infinity';
            provisional: boolean;
            owner: any;
        };
    };
    content: Buffer;
};
export type Folder = Omit<File, 'content'> & {
    children: (Folder | File)[];
};
export type RootFolder = Omit<Folder, 'name'>;
export type AdapterConfig = {
    files: RootFolder;
};
export default class Adapter implements AdapterInterface {
    files: RootFolder;
    constructor({ files }: AdapterConfig);
    urlToRelativePath(url: URL, baseUrl: URL): string | null;
    basename(path: string): string;
    dirname(path: string): string;
    getComplianceClasses(_url: URL, _request: Request, _response: AuthResponse): Promise<string[]>;
    getAllowedMethods(_url: URL, _request: Request, _response: AuthResponse): Promise<never[]>;
    getOptionsResponseCacheControl(_url: URL, _request: Request, _response: AuthResponse): Promise<string>;
    isAuthorized(url: URL, method: string, baseUrl: URL, user: User): Promise<boolean>;
    getResource(url: URL, baseUrl: URL): Promise<Resource>;
    newResource(url: URL, baseUrl: URL): Promise<Resource>;
    newCollection(url: URL, baseUrl: URL): Promise<Resource>;
    getMethod(method: string): typeof Method;
}
