import { KumoriAstType } from "../../language/generated/ast.js"; import { TypeSystemContext } from "../../language/kumori-types.js"; import { KumoriServices } from "../../language/kumori.js"; import { ValidationAcceptor } from "langium"; export type ValidationContext = { readonly svcs: KumoriServices; readonly ctx: () => TypeSystemContext; }; export type KumoriAstNode = KumoriAstType[keyof KumoriAstType]; export type KumoriAstNodeType = KumoriAstNode["$type"]; export type Validator = (node: T, accept: ValidationAcceptor) => void; export type ValidatorConstructor = (ctx: ValidationContext) => Validator; export declare const Merge: (validators: readonly Validator[]) => Validator; export type IsValidator, R extends readonly string[]> = RegistrationCheck extends never ? T : never; type RegistrationCheck, R extends readonly string[]> = // Ensures that that R contains every AstNodeType declared by T as a parameter (T extends ValidatorConstructor ? Exclude : undefined) | Exclude ? S["$type"] : undefined>; export {};