import type { StandardSchemaV1 } from '@standard-schema/spec';
import type { JSONSchema } from './json-schema';
import { type ModelLabels } from './labels';
export interface ModelValidationOptions {
    strict?: boolean;
}
export interface ModelSchemaOptions {
    includePrivateFields?: boolean;
}
export declare function getDefaultModelSchemaOptions(): ModelSchemaOptions;
export declare abstract class Model<TName extends Readonly<string>, TSchema extends StandardSchemaV1> implements StandardSchemaV1<StandardSchemaV1.InferInput<TSchema>, StandardSchemaV1.InferOutput<TSchema>> {
    readonly name: TName;
    /**
     * @warning You may not need to use this property directly.
     * Use the `validate` method instead to ensure proper validation and error handling.
     * Use the `toJSONSchema` method to get the JSON Schema representation for introspection or documentation.
     */
    readonly schema: TSchema;
    constructor(name: TName, schema: TSchema);
    stripExcludedFields(value: StandardSchemaV1.InferInput<TSchema>): StandardSchemaV1.InferInput<TSchema>;
    validate(value: StandardSchemaV1.InferInput<TSchema>, options?: ModelValidationOptions): Promise<StandardSchemaV1.Result<StandardSchemaV1.InferOutput<TSchema>>>;
    get labels(): ModelLabels;
    abstract toJSONSchema(options?: ModelSchemaOptions): JSONSchema;
    get version(): number;
    get '~standard'(): StandardSchemaV1['~standard'];
}
export type UnwrapModelSchema<T extends Model<any, any>> = T extends Model<any, infer S> ? S : never;
export type InferModelOutput<T extends Model<any, any>> = StandardSchemaV1.InferOutput<UnwrapModelSchema<T>>;
export type InferModelInput<T extends Model<any, any>> = StandardSchemaV1.InferInput<UnwrapModelSchema<T>>;
export type IAnyModel = Model<Readonly<string>, StandardSchemaV1>;
export interface IModelHelper<TNameRecommendation extends Readonly<string>> {
    name: TNameRecommendation;
}
export type ModelFactory<TName extends Readonly<string>> = (helper: IModelHelper<TName>) => IAnyModel;
//# sourceMappingURL=model.d.ts.map