import { IRNode } from "../types.js";
import type { BaseConverterContext, RefTypeName, RefTypeNamingConfig } from "./BaseConverter.js";
/** Pure helper: singularize a word, respecting uncountable allow-lists. */
export declare function singularize(word: string, extraUncountable?: string[]): string;
/** Default ref-type naming configuration shared by all language converters. */
export declare function defaultRefTypeNamingConfig(): RefTypeNamingConfig;
/**
* Returns the effective ref-type naming config for the given context: the
* default merged shallow with the language profile's `refTypeNamingConfig` overrides.
*/
export declare function getRefTypeNamingConfig(c: BaseConverterContext): RefTypeNamingConfig;
/**
* Computes a path-derived, collision-free ref type name for a (signature, nodePath) pair.
*
* Algorithm:
* 1. Parse the path into segments and pick the array-item / `*` / regular postfix list.
* 2. Try increasingly more parent segments combined with each postfix.
* 3. If a refType already exists for (signature, proposedName), reuse it.
* 4. If no name is free after exhausting postfixes, fall back to `` with a
* deterministic instance-scoped counter on `c.fallbackCounter`.
*/
export declare function getUniqueRefTypeName(c: BaseConverterContext, signature: string, nodePath: string): RefTypeName;
/** Default resolver for a ref-type name from an IR node and signature. */
export declare function defaultResolveRefTypeName(c: BaseConverterContext, ir: IRNode, signature: string): string;
/**
* Returns names of all extracted ref types in declaration order.
* Subclasses may filter further (e.g. to exclude the root type).
*/
export declare function computeExtractedTypeNames(c: BaseConverterContext): string[];