import { Prisma, PrismaClient } from "../types-prisma";
import { IncomingMessage } from "http";
import type { NextApiRequest } from "next";
import { AdminFormData, EditFieldsOptions, EditOptions, Field, Model, ModelAction, ModelName, ModelWithoutRelationships, NextAdminOptions, OutputModelAction, Schema, SchemaDefinitions, UploadedFile } from "../types";
export declare const getJsonSchema: () => Schema;
export declare const enumValueForEnumType: (definition: Schema["definitions"][ModelName], value: string) => string | false | undefined;
export declare const getEnableToExecuteActions: <M extends ModelName>(resource: M, prisma: PrismaClient, ids: string[] | number[], actions?: Omit<ModelAction<M>, "action">[]) => Promise<OutputModelAction | undefined>;
export declare const getModelIdProperty: (model: ModelName) => string;
export declare const modelHasIdField: (model: ModelName) => boolean;
export declare const getResources: (options?: NextAdminOptions) => Prisma.ModelName[];
export declare const getToStringForRelations: <M extends ModelName>(modelName: M, fieldName: Field<M>, modelNameRelation: ModelName, options?: NextAdminOptions) => any;
export declare const getToStringForModel: <M extends ModelName>(options: Required<NextAdminOptions>["model"][M]) => ((item: Model<M>) => string) | undefined;
/**
 * Fill fields with relations with the values of the related model, and inject them into the schema
 *
 * @param schema
 * @param prisma
 * @param requestOptions
 * @param options
 *
 * @returns schema
 */
export declare const fillRelationInSchema: (resource: ModelName, options?: NextAdminOptions) => (schema: Schema) => Promise<Schema>;
/**
 * This is used to transform the data from server to client
 */
export declare const transformData: <M extends ModelName>(data: any, resource: M, editOptions: EditOptions<M>, options?: NextAdminOptions) => any;
/**
 * Fill fields in data with the their values and url for the related model
 *
 * @param data
 * @param schema
 *
 * @returns data
 * */
export declare const findRelationInData: (data: any[], schema: SchemaDefinitions[ModelName]) => any[];
export declare const parseFormData: <M extends ModelName>(formData: AdminFormData<M>, schemaResource: SchemaDefinitions[ModelName], editFieldOptions?: EditFieldsOptions<M>) => Partial<ModelWithoutRelationships<M>>;
export declare const formatId: (resource: ModelName, id: string) => string | number;
/**
 * Convert the form data to the format expected by Prisma
 *
 * @param formData
 * @param schema
 * @param resource
 * @param resourceId
 * @param editOptions
 * @param prisma
 */
export declare const formattedFormData: <M extends ModelName>(formData: AdminFormData<M>, schema: Schema, resource: M, resourceId: string | number | undefined, editOptions: EditFieldsOptions<M> | undefined, prisma: PrismaClient) => Promise<{
    formattedData: any;
    complementaryFormattedData: any;
    errors: {
        field: string;
        message: string;
    }[];
}>;
/**
 * Convert the search fields to the format expected by Prisma
 *
 *
 * @param uri
 * @returns
 *
 * @example
 *
 * ```js
 * const uri = "search=foo&searchFields=bar&searchFields=baz";
 * const searchFields = formatSearchFields(uri);
 * console.log(searchFields);
 * // { search: 'foo', searchFields: [ 'bar', 'baz' ] }
 * ```
 *
 */
export declare const formatSearchFields: (uri: string) => {
    [k: string]: string;
};
/**
 *
 * Centralizes the transformation of the schema
 *
 * @param resource
 * @param edit
 * @param prisma
 * @param searchParams
 * @param options
 * @returns
 */
export declare const transformSchema: <M extends ModelName>(resource: M, edit: EditOptions<M>, options?: NextAdminOptions) => (x: Schema) => Promise<any>;
export declare const applyVisiblePropertiesInSchema: <M extends ModelName>(resource: M, edit: EditOptions<M>, data: any, schema: Schema) => Schema;
export declare const changeFormatInSchema: <M extends ModelName>(resource: M, editOptions: EditOptions<M>) => (schema: Schema) => Schema;
export declare const removeHiddenProperties: <M extends ModelName>(resource: M, editOptions: EditOptions<M>) => (schema: Schema) => Schema;
export declare const addCustomProperties: <M extends ModelName>(resource: M, editOptions: EditOptions<M>) => (schema: Schema) => Schema;
export declare const applyArrayMaxLength: <M extends ModelName>(resource: M, editOptions: EditOptions<M>) => (schema: Schema) => Schema;
export declare const getResourceFromParams: (params: string[], resources: Prisma.ModelName[]) => any;
/**
 * Convert the following urls to an array of params:
 *
 * - /admin/User -> ["User"]
 * - /admin/User/1 -> ["User", "1"]
 * - /_next/data/admin/User.json -> ["User"]
 * - /_next/data/admin/User/1.json -> ["User", "1"]
 * - /_next/data/development/admin/User.json -> ["User"]
 * - /_next/data/development/admin/User/1.json -> ["User", "1"]
 */
export declare const getParamsFromUrl: (url: string, basePath: string) => string[];
export declare const getResourceIdFromParam: (param: string, resource: ModelName) => string | number | undefined;
export declare const getFormDataValues: (req: IncomingMessage) => Promise<Record<string, string | (string | UploadedFile)[]>>;
export declare const getFormValuesFromFormData: <M extends ModelName>(formData: FormData, editFieldOptions?: EditFieldsOptions<M>) => Promise<Record<string, string | (string | UploadedFile)[] | null>>;
export declare const getJsonBody: (req: NextApiRequest) => Promise<any>;
export declare const getBody: (req: IncomingMessage) => Promise<string>;
//# sourceMappingURL=server.d.ts.map