import { ClassBuilder as _ClassBuilder, EnumBuilder as _EnumBuilder, ClassPropertyBuilder as _ClassPropertyBuilder, EnumValueBuilder, FieldType, TypeBuilder as _TypeBuilder, BamlRuntime } from './native'; type IsLiteral = string extends T ? false : true; type NameOf = IsLiteral extends true ? T : 'DynamicType'; type CheckNever = [T] extends [never] ? `Error: Attempt to add value '${Value}' which is already a part of '${NameOf}'.` : T; type ExcludeFrom = T extends U ? never : T; type RestrictNot = IsLiteral extends true ? CheckNever, Name, Value> : Value; export declare class TypeBuilder { private tb; protected classes: Set; protected enums: Set; protected runtime: BamlRuntime; constructor({ classes, enums, runtime }: { classes: Set; enums: Set; runtime: BamlRuntime; }); reset(): void; _tb(): _TypeBuilder; null(): FieldType; string(): FieldType; literalString(value: string): FieldType; literalInt(value: number): FieldType; literalBool(value: boolean): FieldType; int(): FieldType; float(): FieldType; bool(): FieldType; list(type: FieldType): FieldType; map(keyType: FieldType, valueType: FieldType): FieldType; union(types: FieldType[]): FieldType; classViewer(name: Name, properties: Properties[]): ClassViewer; classBuilder(name: Name, properties: Properties[]): ClassBuilder; enumViewer(name: Name, values: Values[]): EnumViewer; enumBuilder(name: Name, values: Values[]): EnumBuilder; addClass(name: Name): ClassBuilder; addEnum(name: Name): EnumBuilder; addBaml(baml: string): void; } export declare class ClassAst { protected properties: Set; protected bldr: _ClassBuilder; constructor(tb: _TypeBuilder, name: ClassName, properties?: Set); listProperties(): unknown[]; type(): FieldType; } export declare class ClassViewer extends ClassAst { constructor(tb: _TypeBuilder, name: ClassName, properties?: Set); listProperties(): Array<[string, ClassPropertyViewer]>; property(name: string): ClassPropertyViewer; } export declare class ClassBuilder extends ClassAst { constructor(tb: _TypeBuilder, name: ClassName, properties?: Set); addProperty(name: RestrictNot, type: FieldType): ClassPropertyBuilder; listProperties(): Array<[string, ClassPropertyBuilder]>; removeProperty(name: string): void; reset(): void; property(name: string): ClassPropertyBuilder; } declare class ClassPropertyViewer { constructor(); } declare class ClassPropertyBuilder { private bldr; constructor(bldr: _ClassPropertyBuilder); getType(): FieldType; setType(type: FieldType): ClassPropertyBuilder; alias(alias: string | null): ClassPropertyBuilder; description(description: string | null): ClassPropertyBuilder; } export declare class EnumAst { protected values: Set; protected bldr: _EnumBuilder; constructor(tb: _TypeBuilder, name: EnumName, values?: Set); type(): FieldType; } export declare class EnumViewer extends EnumAst { constructor(tb: _TypeBuilder, name: EnumName, values?: Set); listValues(): Array<[string, EnumValueViewer]>; value(name: string): EnumValueViewer; } export declare class EnumValueViewer { constructor(); } export declare class EnumBuilder extends EnumAst { constructor(tb: _TypeBuilder, name: EnumName, values?: Set); addValue(name: RestrictNot): EnumValueBuilder; listValues(): Array<[string, EnumValueBuilder]>; value(name: string): EnumValueBuilder; } export {}; //# sourceMappingURL=type_builder.d.ts.map