/// <reference types="node" />
/// <reference types="node" />
import { Readable } from "stream";
import { Elf } from "../go-parser/types";
import { AutoDetectedUserInstructions, PluginOptions } from "../types";
export declare type ExtractCallback = (dataStream: Readable, streamSize?: number) => Promise<string | Buffer>;
export declare type FileContent = string | Buffer | Elf;
export declare type FileNameAndContent = Record<string, FileContent>;
export interface Extractor {
    extractArchive(fileSystemPath: string, extractActions: ExtractAction[], options: Partial<PluginOptions>): ExtractedLayersAndManifest;
    getImageIdFromManifest(manifest: DockerArchiveManifest | OciArchiveManifest): string;
    getManifestLayers(manifest: DockerArchiveManifest | OciArchiveManifest): string[];
}
export interface ExtractionResult {
    imageId: string;
    manifestLayers: string[];
    extractedLayers: ExtractedLayers;
    rootFsLayers?: string[];
    autoDetectedUserInstructions?: AutoDetectedUserInstructions;
    platform?: string;
    imageLabels?: {
        [key: string]: string;
    };
    imageCreationTime?: string;
}
export interface ExtractedLayers {
    [layerName: string]: FileNameAndContent;
}
export interface ExtractedLayersAndManifest {
    layers: ExtractedLayers[];
    manifest: DockerArchiveManifest | OciArchiveManifest;
    imageConfig: ImageConfig;
}
export interface DockerArchiveManifest {
    Config: string;
    RepoTags: string[];
    Layers: string[];
}
export interface ImageConfig {
    architecture: string;
    os: string;
    rootfs: {
        diff_ids: string[];
    };
    config: {
        Labels: {
            [key: string]: string;
        };
    };
    created: string;
}
export interface OciArchiveLayer {
    digest: string;
}
export interface OciArchiveManifest {
    schemaVersion: string;
    config: {
        digest: string;
    };
    layers: OciArchiveLayer[];
}
export interface OciManifestInfo {
    digest: string;
    mediaType: string;
    platform?: OciPlatformInfo;
}
export interface OciPlatformInfo {
    os?: string;
    architecture?: string;
    variant?: string;
}
export interface OciImageIndex {
    manifests: OciManifestInfo[];
}
export interface KanikoArchiveManifest {
    Config: string;
    RepoTags: string[];
    Layers: string[];
}
export interface KanikoExtractionResult {
    imageId: string;
    manifestLayers: string[];
    extractedLayers: KanikoExtractedLayers;
    rootFsLayers?: string[];
    autoDetectedUserInstructions?: AutoDetectedUserInstructions;
    platform?: string;
    imageLabels?: {
        [key: string]: string;
    };
    imageCreationTime?: string;
}
export interface KanikoExtractedLayers {
    [layerName: string]: FileNameAndContent;
}
export interface KanikoExtractedLayersAndManifest {
    layers: KanikoExtractedLayers[];
    manifest: KanikoArchiveManifest;
    imageConfig: ImageConfig;
}
export interface ExtractAction {
    actionName: string;
    filePathMatches: (filePath: string) => boolean;
    callback?: ExtractCallback;
}
export interface DetectedImageLayers {
    packages: any;
    layers: any;
}
