import type { JSONSchema7 as Schema, JSONSchema7Definition as SchemaDefinition } from "json-schema"; import type { Visitor } from "../traverser.js"; import { type AnySubSchemaKey, type SubSchemaKey, type SubSchemasArrayKey, type SubSchemasRecordKey } from "./index.js"; export type SchemaTraverserContextType = "array" | "record" | "sub" | "root"; export interface AbstractSchemaTraverserContext { type: T; path: SubSchemasArrayKey extends K ? Array : string[]; } export interface ArraySchemaTraverserContext extends AbstractSchemaTraverserContext<"array", K> { parent: Schema; key: SubSchemasArrayKey & K; index: number; } export interface RecordSchemaTraverserContext extends AbstractSchemaTraverserContext<"record", K> { parent: Schema; key: SubSchemasRecordKey & K; property: string; } export interface SubSchemaTraverserContext extends AbstractSchemaTraverserContext<"sub", K> { parent: Schema; key: SubSchemaKey & K; } export interface RootSchemaTraverserContext extends AbstractSchemaTraverserContext<"root", K> { } export type SchemaTraverserContext = ArraySchemaTraverserContext | RecordSchemaTraverserContext | SubSchemaTraverserContext | RootSchemaTraverserContext; export type SchemaDefinitionVisitor = Visitor, R>; export declare function makeSchemaDefinitionTraverser(keys: ReadonlyArray, visitor: SchemaDefinitionVisitor): (schema: SchemaDefinition, ctx?: SchemaTraverserContext) => Generator;