import type { TSESLint } from "@typescript-eslint/utils";
import type { UnknownArray } from "type-fest";
type DeprecatedInfo = Exclude<TSESLint.RuleMetaData<string>["deprecated"], boolean | undefined>;
type ReplacedByInfo = NonNullable<DeprecatedInfo["replacedBy"]>[number];
type RuleDeprecationOptions = Readonly<{
    readonly message: string;
    readonly replacedBy?: readonly ReplacedByInfo[];
    readonly ruleId: string;
}>;
type RuleModule = TSESLint.RuleModule<string, Readonly<UnknownArray>>;
/**
 * Create a replacement descriptor for deprecation metadata.
 */
export declare const createReplacementRuleInfo: (replacement: Readonly<{
    readonly plugin?: Readonly<{
        readonly name: string;
        readonly url?: string;
    }>;
    readonly rule?: Readonly<{
        readonly name: string;
        readonly url?: string;
    }>;
}>) => ReplacedByInfo;
/**
 * Create standardized deprecation metadata for this plugin.
 */
export declare const createDeprecatedRuleInfo: ({ message, replacedBy, ruleId, }: RuleDeprecationOptions) => DeprecatedInfo;
/**
 * Apply deprecated+frozen lifecycle metadata to a rule module.
 */
export declare const withDeprecatedRuleLifecycle: <TRule extends RuleModule>(rule: TRule, options: RuleDeprecationOptions) => TRule;
export {};
//# sourceMappingURL=rule-deprecation.d.ts.map