import type { LinePosition } from "@ark/fs"; import ts from "typescript"; import { type StringifiableType } from "./ts.ts"; export type AssertionsByFile = Record; export declare const analyzeProjectAssertions: () => AssertionsByFile; export declare const getAssertionsInFile: (file: ts.SourceFile, diagnosticsByFile: DiagnosticsByFile, attestAliases: string[]) => TypeAssertionData[]; export declare const analyzeAssertCall: (assertCall: ts.CallExpression, diagnosticsByFile: DiagnosticsByFile) => TypeAssertionData; export type Completions = Record | string; export type DiagnosticData = { start: number; end: number; message: string; }; export type DiagnosticsByFile = Record; export declare const getDiagnosticsByFile: () => DiagnosticsByFile; export type ArgAssertionData = { type: string; relationships: { args: TypeRelationship[]; typeArgs: TypeRelationship[]; }; }; export type TypeRelationshipAssertionData = { location: LinePositionRange; args: ArgAssertionData[]; typeArgs: ArgAssertionData[]; errors: string[]; completions: Completions; /** JSDoc comment for the first argument, if any */ jsdoc?: string; }; export type TypeBenchmarkingAssertionData = { location: LinePositionRange; count: number; }; export type TypeAssertionKind = "bench" | "type"; export type TypeAssertionData = kind extends "bench" ? TypeBenchmarkingAssertionData : TypeRelationshipAssertionData; export type LinePositionRange = { start: LinePosition; end: LinePosition; }; export type TypeRelationship = "subtype" | "supertype" | "equality" | "none"; export declare const compareTsTypes: (l: StringifiableType, r: StringifiableType) => TypeRelationship; export declare const checkDiagnosticMessages: (attestCall: ts.CallExpression, diagnosticsByFile: DiagnosticsByFile) => string[];