/** @experimental */
export interface AssetGroup {
    installMode?: 'prefetch' | 'lazy';
    name: string;
    resources: {
        files?: Glob[];
        versionedFiles?: Glob[];
        urls?: Glob[];
    };
    updateMode?: 'prefetch' | 'lazy';
}

/** @experimental */
export interface Config {
    appData?: {};
    assetGroups?: AssetGroup[];
    dataGroups?: DataGroup[];
    index: string;
}

/** @experimental */
export interface DataGroup {
    cacheConfig: {
        maxSize: number;
        maxAge: Duration;
        timeout?: Duration;
        strategy?: 'freshness' | 'performance';
    };
    name: string;
    urls: Glob[];
    version?: number;
}

/** @experimental */
export declare type Duration = string;

/** @experimental */
export interface Filesystem {
    hash(file: string): Promise<string>;
    list(dir: string): Promise<string[]>;
    read(file: string): Promise<string>;
    write(file: string, contents: string): Promise<void>;
}

/** @experimental */
export declare class Generator {
    readonly fs: Filesystem;
    constructor(fs: Filesystem, baseHref: string);
    process(config: Config): Promise<Object>;
}

/** @experimental */
export declare type Glob = string;