import type { RawEntity, RawEntityReader, RawSection } from '../domain/raw-entity-reader.js';
import type { EntitySerializer, JsonSchema, SerializeResult, ViewKind } from './types.js';
export interface CatalogEntry {
    version: string;
    views: string[];
    schemas: Record<string, JsonSchema>;
}
export interface CatalogResult {
    types: Record<string, CatalogEntry>;
}
declare class SerializerRegistry {
    private serializers;
    register<T>(serializer: EntitySerializer<T>): void;
    has(type: string): boolean;
    get(type: string): EntitySerializer<unknown> | undefined;
    listTypes(): string[];
    getVersion(type: string): string | null;
    serializeEntity(type: string, view: ViewKind, entity: RawEntity, reader: RawEntityReader, depth?: number): SerializeResult;
    serializeSection(view: ViewKind, section: RawSection, reader: RawEntityReader): SerializeResult;
    private invoke;
    getSchema(type: string, view: ViewKind, db?: import('better-sqlite3').Database): JsonSchema;
    catalog(reader: RawEntityReader, db: import('better-sqlite3').Database): CatalogResult;
}
export declare const serializerRegistry: SerializerRegistry;
export declare function registerSerializer<T>(serializer: EntitySerializer<T>): void;
export {};
