import { Defined, Simplify, UnionToIntersection } from "../util.mjs"; import { Transaction } from "@mysten/sui/transactions"; //#region src/transaction-analyzer/analyzer.d.ts /** * Declare a dependency on `analyzer` that does NOT short-circuit the parent when * it fails: the parent always runs and receives the dependency's full * {@link AnalyzerResult} (so it can inspect `status`/`issues`) rather than the * unwrapped result. Sugar for `{ analyzer, required: false, transform: (r) => r }` * — see {@link Dependency} for the general (required + custom `transform`) form. */ declare function optional>(analyzer: Analyzer): Dependency, Options, Analysis>; declare function createAnalyzer = {}, Options = object>({ cacheKey, dependencies, analyze }: { cacheKey?: unknown; dependencies?: Deps; analyze: (options: Options, transaction: Transaction) => (analysis: { [k in keyof Deps]: DependencyResult }) => Promise> | AnalyzerOutput; }): Analyzer }[keyof Deps]>>, { [k in keyof Deps]: DependencyResult }>; type OptionsFromAnalyzers>> = Simplify<{ [K in keyof T]: T[K] extends Analyzer ? O : never }[keyof T] & { transaction: string | Uint8Array; }>; declare function analyze>>(analyzers: T, { transaction, ...options }: OptionsFromAnalyzers): Promise<{ [k in keyof T]: T[k] extends Analyzer ? AnalyzerResult : never } & { issues: TransactionAnalysisIssue[]; status: AnalyzeStatus; }>; /** * A dependency edge. A bare {@link Analyzer} is sugar for a required edge whose * value is the unwrapped result. The explicit object form lets you declare an * edge `required: false` (the parent never short-circuits on it) and/or map the * dependency's full {@link AnalyzerResult} to a custom value via `transform`. * An optional edge without a `transform` receives the full {@link AnalyzerResult}. */ interface Dependency = {}> { analyzer: Analyzer; /** Whether a failed/skipped dependency short-circuits the parent. Default: `true`. */ required?: boolean; /** * Maps the dependency's full result to the value the parent sees. Default: * `(r) => r.result` for required edges and `(r) => r` for optional edges. */ transform?: (result: AnalyzerResult) => V; } type AnalyzerDependency = Analyzer | Dependency; type DependencyResult = T extends { transform: (result: AnalyzerResult) => infer V; } ? V : T extends { analyzer: Analyzer; required: false; transform?: undefined; } ? AnalyzerResult : T extends Dependency ? V : T extends Analyzer ? R : never; type DependencyOptions = T extends Dependency ? O : T extends Analyzer ? O : never; type AnalyzerStatus = 'success' | 'partial' | 'failed' | 'skipped'; type AnalyzeStatus = 'complete' | 'partial' | 'failed'; type Analyzer = {}> = { cacheKey?: unknown; dependencies: AnalyzerDependencies; analyze: (options: Options, transaction: Transaction) => (analysis: Analysis) => AnalyzerOutput | Promise>; }; type IsAny = 0 extends 1 & T ? true : false; type AnalyzerDependencies> = IsAny extends true ? Record : { [K in keyof Analysis]: AnalyzerDependency } & Record; type AnalyzerOutput = { result: T; issues?: TransactionAnalysisIssue[]; } | { issues: TransactionAnalysisIssue[]; result?: never; }; type AnalyzerResult = { status: 'success'; result: T; issues?: never; ownIssues?: never; } | { status: 'partial'; result: T; issues: TransactionAnalysisIssue[]; ownIssues: TransactionAnalysisIssue[]; } | { status: 'failed'; result?: never; issues: TransactionAnalysisIssue[]; ownIssues: TransactionAnalysisIssue[]; } | { status: 'skipped'; result?: never; issues: TransactionAnalysisIssue[]; ownIssues: []; }; interface TransactionAnalysisIssue { message: string; error?: Error; } //#endregion export { AnalyzeStatus, Analyzer, AnalyzerDependency, AnalyzerOutput, AnalyzerResult, AnalyzerStatus, Dependency, TransactionAnalysisIssue, analyze, createAnalyzer, optional }; //# sourceMappingURL=analyzer.d.mts.map