import { CancellationToken, Thenable, Uri } from "@velcro/common";
import { AbstractResolverStrategyWithRoot, ResolverContext, ResolverStrategy, ResolverStrategyWithRoot } from "@velcro/resolver";
declare const version = "__VERSION__";
interface AbstractCdn {
    name: string;
    isValidUrl(url: Uri): boolean;
    normalizePackageListing(result: unknown): CdnStrategy.Directory;
    parseUrl(url: Uri | string): CdnStrategy.Spec;
    urlForPackageFile(spec: string, pathname: string): Uri;
    urlForPackageList(spec: string): Uri;
}
declare namespace CdnStrategy {
    type Spec = {
        spec: string;
        name: string;
        version: string;
        pathname: string;
    };
    type Directory = {
        type: ResolverStrategy.EntryKind.Directory;
        path: string;
        files?: ReadonlyArray<Entry>;
    };
    type File = {
        type: ResolverStrategy.EntryKind.File;
        path: string;
    };
    type Entry = Directory | File;
    type UrlContentFetcher = (href: string, token: CancellationToken) => Thenable<ArrayBuffer | null>;
}
declare class CdnStrategy extends AbstractResolverStrategyWithRoot implements ResolverStrategyWithRoot {
    readonly cdn: AbstractCdn;
    private readonly contentCache;
    private readonly locks;
    private readonly packageEntriesCache;
    private readonly packageJsonCache;
    private readonly readUrlFn;
    constructor(readUrlFn: CdnStrategy.UrlContentFetcher, cdn: AbstractCdn);
    private _withRootUriCheck;
    getUrlForBareModule(ctx: ResolverContext, name: string, spec: string, path: string): Promise<ResolverStrategy.BareModuleResult>;
    getCanonicalUrl(ctx: ResolverContext, uri: Uri): Promise<ResolverStrategy.CanonicalizeResult>;
    getResolveRoot(ctx: ResolverContext, uri: Uri): Promise<ResolverStrategy.ResolveRootResult>;
    getRootUrl(): {
        uri: Uri;
    };
    listEntries(ctx: ResolverContext, uri: Uri): Promise<ResolverStrategy.ListEntriesResult>;
    readFileContent(ctx: ResolverContext, uri: Uri): {
        content: ArrayBuffer;
    } | Thenable<{
        content: ArrayBuffer;
    }>;
    private _readPackageEntriesWithCache;
    private _readPackageEntries;
    private _readPackageJsonWithCache;
    private _readPackageJson;
    private _withLock;
    static forJsDelivr(readUrlFn: CdnStrategy.UrlContentFetcher): CdnStrategy;
    static forUnpkg(readUrlFn: CdnStrategy.UrlContentFetcher): CdnStrategy;
}
export { version, CdnStrategy };
//# sourceMappingURL=index.d.ts.map