import type { EmptyObject } from 'type-fest';
import { ObjectModelBuilder } from './builders.js';
import { ArrayModel, EnumModel, type UnionModel } from './core.js';
import { type AnyObject, type Target, type Enum, type Extensions, Model, type References, type Value } from './model.js';
export * from './model.js';
export * from './core.js';
export type * from './builders.js';
declare const m: {
    attach<M extends Model>(model: M, target: Target<Value<M>>): M;
    extend<M extends Model<AnyObject>>(base: M): ObjectModelBuilder<Value<M>, Value<M>, Extensions<M>, {
        named: false;
        selfRefKeys: References<M>;
    }>;
    optional<M extends Model>(base: M): M;
    array<M extends Model>(itemModel: M): ArrayModel<M>;
    object<T extends AnyObject>(name: string): ObjectModelBuilder<T, EmptyObject, EmptyObject, {
        named: true;
        selfRefKeys: never;
    }>;
    enum<T extends typeof Enum>(obj: T, name: string): EnumModel<T>;
    union<MM extends Model[]>(...members: MM): UnionModel<MM>;
    items<V extends Model>(model: ArrayModel<V>): Generator<V, undefined, void>;
    value<T>(model: Model<T>): T;
};
export default m;
