import { type HasSql } from './Internal.js';
import type { Runtime } from './MetaData.js';
import { type Param } from './Param.js';
import { Sql } from './Sql.js';
import type { FieldData } from './expr/Field.js';
import type { JsonPath } from './expr/Json.js';
export declare abstract class Emitter {
#private;
sql: string;
protected params: Array;
abstract emitIdentifier(value: string): void;
abstract emitValue(value: unknown): void;
abstract emitInline(value: unknown): void;
abstract emitJsonPath(path: JsonPath): void;
abstract emitPlaceholder(value: string): void;
constructor(runtime: Runtime);
get hasParams(): boolean;
bind(inputs?: Record): Array;
processValue(value: unknown): unknown;
emitIdentifierOrSelf(value: string): void;
emitUnsafe(value: string): void;
emitSelf(inner: Sql, name: string): void;
inlineFields(inner: Sql, withTableName: boolean): void;
inlineValues(inner: Sql): void;
emitField({ targetName, fieldName }: FieldData): void;
emitValueOrInline(value: unknown): void;
emitUniversal(runtimes: Partial>): void;
}