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; readonly children: ReadonlySet; readonly members: ReadonlySet; readonly forbiddenNameds: ReadonlySet; add(named: TName): TName; } export declare type NameStyle = (rawName: string) => string; export declare class Namer { readonly name: string; readonly nameStyle: NameStyle; 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 readonly dependencies: ReadonlyArray; isFixed(): this is FixedName; readonly 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); readonly dependencies: ReadonlyArray; addAssociate(_: AssociatedName): never; readonly fixedName: string; proposeUnstyledNames(_?: ReadonlyMap): ReadonlySet; } export declare class SimpleName extends Name { private readonly _unstyledNames; constructor(unstyledNames: Iterable, namingFunction: Namer, order: number); readonly dependencies: ReadonlyArray; 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); readonly dependencies: ReadonlyArray; 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); readonly dependencies: ReadonlyArray; proposeUnstyledNames(names: ReadonlyMap): ReadonlySet; } export declare function keywordNamespace(name: string, keywords: string[]): Namespace; export declare function assignNames(rootNamespaces: Iterable): ReadonlyMap;