import { RouterSchemaDescriptor } from 'farrow-http/dist/router'; import { MarkReadOnlyDeep } from 'farrow-http/dist/types'; import { TypeOfFieldDescriptor, TypeOfFieldDescriptors, FieldDescriptor, FieldDescriptors, } from 'farrow-schema'; export type RequestBaseSchema = { params?: RouterSchemaDescriptor; query?: RouterSchemaDescriptor; headers?: RouterSchemaDescriptor; cookies?: RouterSchemaDescriptor; }; export type RequestDataSchema = { data?: RouterSchemaDescriptor; }; export type RequestBodyType = { body?: string; }; export type PureRequestFormDataType = { formData?: Record; }; export type RequestFormDataType = { formData?: FormData; }; export type RequestFormUrlencodedType = { // eslint-disable-next-line node/prefer-global/url-search-params,node/no-unsupported-features/node-builtins formUrlencoded?: URLSearchParams | Record | string; }; export type PureRequestFormUrlencodedType = { formUrlencoded?: Record; }; export type RequestExtraType = RequestBodyType & RequestFormDataType & RequestFormUrlencodedType; export type PureRequestExtraType = RequestBodyType & PureRequestFormDataType & PureRequestFormUrlencodedType; export type RequestSchema = RequestBaseSchema & RequestDataSchema; export type TypeOfRequestField = T extends string ? string : T extends FormData ? FormData : T extends FieldDescriptor ? TypeOfFieldDescriptor : T extends FieldDescriptors ? TypeOfFieldDescriptors : never; export type TypeOfRequestDataSchema = MarkReadOnlyDeep< T extends { data: any } ? Pick< { [key in keyof T]: TypeOfRequestField; }, 'data' > : RequestExtraType >; export type TypeOfRequestSchema = MarkReadOnlyDeep< Omit< { [key in keyof T]: TypeOfRequestField; }, 'data' > & TypeOfRequestDataSchema >; export type PureTypeOfRequestDataSchema = MarkReadOnlyDeep< T extends { data: any } ? Pick< { [key in keyof T]: TypeOfRequestField; }, 'data' > : PureRequestExtraType >; export type PureTypeOfRequestSchema = MarkReadOnlyDeep< Omit< { [key in keyof T]: TypeOfRequestField; }, 'data' > & PureTypeOfRequestDataSchema >; export type InputType = TypeOfRequestSchema;