import { FutureInstance } from 'fluture';
import { z, ZodSchema } from 'zod';
type ErrMsg = string | ((value: unknown, previous?: unknown) => string);
interface CreateSchemaParams {
    rawSchema: ZodSchema;
    internalSchema?: ZodSchema;
    transformer?: (value: unknown) => unknown;
    isStringLike?: boolean;
}
interface CreateTypeParams extends CreateSchemaParams {
    parseErrMsg: ErrMsg;
    unknownErrMsg: ErrMsg;
}
export type Flatten<T> = {
    [k in keyof T]: T[k];
};
export declare const createSchema: <I>(params: CreateSchemaParams) => {
    rawSchema: z.ZodType<any, z.ZodTypeDef, any>;
    internalSchema: z.ZodType<any, z.ZodTypeDef, any>;
    schema: z.ZodEffects<z.ZodType<any, z.ZodTypeDef, any>, I & {
        readonly __type: "generated" & z.infer<z.ZodType<any, z.ZodTypeDef, any>>;
    }, any>;
};
export declare const createType: <R, I>(params: CreateTypeParams) => {
    schemas: {
        rawSchema: z.ZodType<any, z.ZodTypeDef, any>;
        internalSchema: z.ZodType<any, z.ZodTypeDef, any>;
        schema: z.ZodEffects<z.ZodType<any, z.ZodTypeDef, any>, I & {
            readonly __type: "generated" & z.infer<z.ZodType<any, z.ZodTypeDef, any>>;
        }, any>;
    };
    factory: {
        make: (input: I) => FutureInstance<import("@taqueria/protocol/TaqError").TaqError, I & {
            readonly __type: "generated" & z.infer<z.ZodType<any, z.ZodTypeDef, any>>;
        }>;
        of: (input: unknown) => FutureInstance<import("@taqueria/protocol/TaqError").TaqError, I & {
            readonly __type: "generated" & z.infer<z.ZodType<any, z.ZodTypeDef, any>>;
        }>;
        create: (input: R | I) => I & {
            readonly __type: "generated" & z.infer<z.ZodType<any, z.ZodTypeDef, any>>;
        };
        from: (input: unknown) => I & {
            readonly __type: "generated" & z.infer<z.ZodType<any, z.ZodTypeDef, any>>;
        };
    };
};
export default createType;
//# sourceMappingURL=Base.d.ts.map