export declare class Namespace { readonly forbiddenNamespaces: ReadonlySet; readonly additionalForbidden: ReadonlySet; private readonly _children; private readonly _members; constructor(_name: string, parent: Namespace | undefined, forbiddenNamespaces: Iterable, additionalForbidden: Iterable); private addChild; get children(): ReadonlySet; get members(): ReadonlySet; get forbiddenNameds(): ReadonlySet; add(named: TName): TName; } export type NameStyle = (rawName: string) => string; export declare class Namer { readonly name: string; readonly nameStyle: NameStyle; prefixes: string[]; private readonly _prefixes; constructor(name: string, nameStyle: NameStyle, prefixes: string[]); assignNames(names: ReadonlyMap, forbiddenNamesIterable: Iterable, namesToAssignIterable: Iterable): ReadonlyMap; } export declare function funPrefixNamer(name: string, nameStyle: NameStyle): Namer; export declare abstract class Name { private readonly _namingFunction; readonly order: number; private readonly _associates; constructor(_namingFunction: Namer | undefined, order: number); addAssociate(associate: AssociatedName): void; abstract get dependencies(): readonly Name[]; isFixed(): this is FixedName; get namingFunction(): Namer; abstract proposeUnstyledNames(names: ReadonlyMap): ReadonlySet; firstProposedName(names: ReadonlyMap): string; nameAssignments(forbiddenNames: ReadonlySet, assignedName: string): ReadonlyMap | null; } export declare class FixedName extends Name { private readonly _fixedName; constructor(_fixedName: string); get dependencies(): readonly Name[]; addAssociate(_: AssociatedName): never; get fixedName(): string; proposeUnstyledNames(_?: ReadonlyMap): ReadonlySet; } export declare class SimpleName extends Name { private readonly _unstyledNames; constructor(unstyledNames: Iterable, namingFunction: Namer, order: number); get dependencies(): readonly Name[]; proposeUnstyledNames(_?: ReadonlyMap): ReadonlySet; } export declare class AssociatedName extends Name { private readonly _sponsor; readonly getName: (sponsorName: string) => string; constructor(_sponsor: Name, order: number, getName: (sponsorName: string) => string); get dependencies(): readonly Name[]; proposeUnstyledNames(_?: ReadonlyMap): never; } export declare class DependencyName extends Name { private readonly _proposeUnstyledName; private readonly _dependencies; constructor(namingFunction: Namer | undefined, order: number, _proposeUnstyledName: (lookup: (n: Name) => string) => string); get dependencies(): readonly Name[]; proposeUnstyledNames(names: ReadonlyMap): ReadonlySet; } export declare function keywordNamespace(name: string, keywords: readonly string[]): Namespace; export declare function assignNames(rootNamespaces: Iterable): ReadonlyMap;