import { type TSchema } from '../../types/schema.mjs'; import { type TArray } from '../../types/array.mjs'; import { type TConstructor } from '../../types/constructor.mjs'; import { type TFunction } from '../../types/function.mjs'; import { type TIntersect } from '../../types/intersect.mjs'; import { type TObject } from '../../types/object.mjs'; import { type TProperties, type TPropertyValues } from '../../types/properties.mjs'; import { type TRecord } from '../../types/record.mjs'; import { type TTuple } from '../../types/tuple.mjs'; import { type TUnion } from '../../types/union.mjs'; import { type TRef } from '../../types/ref.mjs'; import { type TInterfaceDeferred } from '../../action/interface.mjs'; type TFromRef = Ref extends Stack[number] ? true : TFromType<[...Stack, Ref], Context, Context[Ref]>; type TFromProperties> = TFromTypes; type TFromTypes = Types extends [infer Left extends TSchema, ...infer Right extends TSchema[]] ? TFromType extends true ? true : TFromTypes : false; type TFromType = (Type extends TRef ? TFromRef : Type extends TArray ? TFromType : Type extends TConstructor ? TFromTypes : Type extends TFunction ? TFromTypes : Type extends TInterfaceDeferred ? TFromProperties : Type extends TIntersect ? TFromTypes : Type extends TObject ? TFromProperties : Type extends TUnion ? TFromTypes : Type extends TTuple ? TFromTypes : Type extends TRecord ? TFromType : false); /** Performs a cyclic check on the given type. Initial key stack can be empty, but faster if specified */ export type TCyclicCheck> = Result; /** Performs a cyclic check on the given type. Initial key stack can be empty, but faster if specified */ export declare function CyclicCheck(stack: [...Stack], context: Context, type: Type): TCyclicCheck; export {};