import { z } from "zod"; import { type IPackage } from "../package/package.js"; import { type IPackageJsonProvider } from "../providers/provider.js"; import { type IFormatter } from "../utils/formatter.js"; import { type PackageVersion } from "../visitors/visitor.js"; import { type DependencyTypes } from "./Validation.js"; import type { AttachmentData, Attachments } from "../attachments/Attachments.js"; export interface IReportConfig { pkg: PackageVersion; type?: DependencyTypes; depth?: number; attachments?: TAttachments; } export type ReportConfigs = IReportConfig | IReportConfig[]; type PackageFromConfig = T extends IReportConfig ? IPackage> : never; type PackagesFromConfigs = T extends readonly IReportConfig[] ? { [K in keyof T]: PackageFromConfig; } : T extends IReportConfig ? [PackageFromConfig] : never; export interface IReportContext { stdoutFormatter: IFormatter; stderrFormatter: IFormatter; } export interface IReport { readonly params: TParams; readonly name: string; readonly configs: TReportConfigs; readonly provider?: IPackageJsonProvider; exitCode: number; report(packages: PackagesFromConfigs, context: IReportContext): Promise; validate?(): TZodValidateObject; } export type GenericReport = IReport; type ReportMethodSignature = IReport["report"]; export type SingleReportMethodSignature = ReportMethodSignature; export declare function isReportConfigArray(x: ReportConfigs): x is IReportConfig[]; export declare abstract class AbstractReport implements IReport { abstract name: string; readonly params: TParams; abstract configs: TReportConfigs; provider: IPackageJsonProvider | undefined; exitCode: number; constructor(params: TParams); abstract report(packages: PackagesFromConfigs, context: IReportContext): Promise; validate?(): TZodValidateObject; } export {};