import { snapshot, type Constructor, type ErrorType, type isDisjoint } from "@ark/util"; import { type } from "arktype"; import type { Completions } from "../cache/writeAssertionCache.ts"; import type { AssertionContext } from "./attest.ts"; export type ChainableAssertionOptions = { allowRegex?: boolean; defaultExpected?: unknown; }; type AssertionRecord = Record, unknown>; export type UnwrapOptions = { versionable?: boolean; serialize?: boolean; }; export declare class ChainableAssertions implements AssertionRecord { private ctx; constructor(ctx: AssertionContext); private get unversionedActual(); private get versionableActual(); private get serializedActual(); unwrap(opts?: UnwrapOptions): unknown; private snapRequiresUpdate; get unknown(): this; is(expected: unknown): this; equals(expected: unknown): this; satisfies(def: unknown): this; instanceOf(expected: Constructor): this; get snap(): snapProperty; private immediateOrChained; get throws(): unknown; throwsAndHasTypeError(matchValue: string | RegExp): void; get completions(): any; get jsdoc(): any; get type(): any; } export type AssertionKind = "value" | "type"; export type rootAssertions = valueAssertions & TypeAssertionsRoot; export type valueAssertions = comparableValueAssertion & ([t] extends [() => unknown] ? functionAssertions : {}); export type nextAssertions = "type" extends kind ? TypeAssertionsRoot : {}; export type inferredAssertions = rootAssertions & ((...args: Args) => nextAssertions); export type ChainContext = { allowRegex?: boolean; defaultExpected?: unknown; }; export type functionAssertions = { throws: inferredAssertions<[message: string | RegExp], kind, string>; } & ("type" extends kind ? { throwsAndHasTypeError: (message: string | RegExp) => undefined; } : {}); export type valueFromTypeAssertion = inferredAssertions<[expected: expected], "value", chained>; type snapProperty = { (expected?: snapshot): nextAssertions; toFile: (id: string, options?: ExternalSnapshotOptions) => nextAssertions; unwrap: Unwrapper; }; export type Unwrapper = (opts?: UnwrapOptions) => expected; export declare const nonOverlappingSatisfiesMessage = "This type has no overlap with your satisfies constraint"; export type nonOverlappingSatisfiesMessage = typeof nonOverlappingSatisfiesMessage; type validateExpectedOverlaps = isDisjoint extends true ? ErrorType : unknown; export type comparableValueAssertion = { snap: snapProperty; equals: (value: expected) => nextAssertions; instanceOf: (constructor: Constructor) => nextAssertions; is: (value: expected) => nextAssertions; completions: CompletionsSnap; jsdoc: comparableValueAssertion; satisfies: (def: type.validate & validateExpectedOverlaps>) => nextAssertions; unknown: Omit, "unknown">; unwrap: Unwrapper; }; export interface CompletionsSnap { (value?: Completions): void; unwrap: Unwrapper; } export type TypeAssertionsRoot = { type: TypeAssertionProps; }; export type TypeAssertionProps = { toString: valueFromTypeAssertion; errors: valueFromTypeAssertion; completions: CompletionsSnap; }; export type ExternalSnapshotOptions = { path?: string; }; export {};