import type { Rule } from 'eslint';
import type estree from 'estree';
export type AssertionPredicate = 'truthy' | 'falsy' | 'true' | 'false' | 'defined' | 'undefined' | 'null' | 'exists';
export type AssertionStyle = 'jest-like' | 'jasmine' | 'chai-bdd' | 'chai-assert' | 'cypress' | 'playwright' | 'node-assert';
/**
 * Cross-framework representation of a test assertion
 */
export type Assertion = PredicateAssertion | ComparisonAssertion;
type AssertionBase = {
    style: AssertionStyle;
    node: estree.Node;
    reportNode: estree.Node;
    negated: boolean;
};
/**
 * Covers predicate assertions:
 * Jest: `expect(value).toBeTruthy()`, `expect(value).toBeNull()`, ...
 * Node.js: `assert.ok(value)`, `assert.strictEqual(value, null)`, ...
 * chai: `assert.ok(value)`, `assert.isNull(value)`, ...
 */
type PredicateAssertion = AssertionBase & {
    kind: 'predicate';
    predicate: AssertionPredicate;
    actual: estree.Node;
};
/**
 * Covers comparision assertions:
 * Jest: `expect(value).toBe(value)`
 * Node.js: `assert.strictEqual(value, value)`
 * chai: `assert.strictEqual(value, value)`, `expect(value).toEqual(value)`, `value.should.equal(value)`, ...
 */
type ComparisonAssertion = AssertionBase & {
    kind: 'comparison';
    comparison: 'strict' | 'deep' | 'loose';
    actual: estree.Node;
    expected: estree.Node;
};
export declare function extractTestAssertion(context: Rule.RuleContext, node: estree.Node): Assertion | null;
export {};
