import { SourcePosition } from "@re-do/node"; import { Func, IsAnyOrUnknown } from "@re-do/utils"; import { AssertionConfig } from "../assert.js"; import { TypeAssertions } from "../type/context.js"; export declare type ChainableValueAssertion & (IsReturn extends true ? NextAssertions : {})> = ((...args: Args) => Args extends [] ? ImmediateAssertions : NextAssertions) & ImmediateAssertions; export declare type ChainableAssertionOptions = { isReturn?: boolean; allowRegex?: boolean; }; export declare const chainableAssertion: (position: SourcePosition, valueThunk: () => unknown, config: AssertionConfig, { isReturn, allowRegex }?: ChainableAssertionOptions) => (expected: unknown) => TypeAssertions | ({ returns: ChainableValueAssertion<[value: unknown], Required, unknown, true, any & { args: (...args: unknown[]) => any; } & { is: (value: unknown) => {}; snap: ((value?: string | undefined) => undefined) & { toFile: () => undefined; }; equals: (value: unknown) => {}; }>; throws: ChainableValueAssertion<[message: string | RegExp], Required, string, false, { is: (value: string) => {}; snap: ((value?: string | undefined) => undefined) & { toFile: () => undefined; }; equals: (value: string) => {}; }>; } & { args: (...args: unknown[]) => any; } & { is: (value: unknown) => {}; snap: ((value?: string | undefined) => undefined) & { toFile: () => undefined; }; equals: (value: unknown) => {}; }) | undefined; export declare type ComparableValueAssertion = { is: (value: T) => NextAssertions; snap: ((value?: string) => undefined) & { toFile: () => undefined; }; equals: (value: T) => NextAssertions; } & (Config["allowTypeAssertions"] extends true ? { typedValue: (expected: unknown) => undefined; } : {}); export declare type CallableFunctionAssertion = { returns: ChainableValueAssertion<[value: Return], Config, Return, true>; throws: ChainableValueAssertion<[message: string | RegExp], Config, string>; } & (Config["allowTypeAssertions"] extends true ? { throwsAndHasTypeError: (message: string | RegExp) => undefined; } : {}); export declare type FunctionalValueAssertion = FunctionAssertionWithArgsIfNeeded>; export declare type FunctionAssertionWithArgsIfNeeded = ([] extends Args ? AssertionsOnceCallable : {}) & (Args extends [] ? {} : { args: (...args: Args) => AssertionsOnceCallable; }); export declare type NextAssertions = Config["allowTypeAssertions"] extends true ? TypeAssertions : {}; export declare type ValueAssertion = IsAnyOrUnknown extends true ? FunctionalValueAssertion & ComparableValueAssertion : T extends Func ? FunctionalValueAssertion : ComparableValueAssertion; export declare const getNextAssertions: (position: SourcePosition, config: AssertionConfig) => TypeAssertions | undefined; export declare const valueAssertions: >(position: SourcePosition, value: T, config: Config) => ValueAssertion;