import * as yup from 'yup'; import { NullishCoalesce } from './utils/types.mjs'; type AccessType = "client" | "server" | "admin"; type CrudOperation = "create" | "read" | "update" | "delete"; type CrudlOperation = "create" | "read" | "update" | "delete" | "list"; type AccessTypeXCrudOperation = `${AccessType}${Capitalize}`; type AccessTypeXCrudlOperation = `${AccessType}${Capitalize}`; declare module 'yup' { interface CustomSchemaMetadata { openapiField?: { description?: string; exampleValue?: any; hidden?: boolean; onlyShowInOperations?: Capitalize[]; }; } } type ShownEndpointDocumentation = { summary: string; description: string; tags?: string[]; crudOperation?: Capitalize; }; type EndpointDocumentation = ({ hidden: true; } & Partial) | ({ hidden?: boolean; } & ShownEndpointDocumentation); type InnerCrudSchema = { createSchema: CreateSchema; createDocs: EndpointDocumentation | undefined; readSchema: ReadSchema; readDocs: EndpointDocumentation | undefined; listDocs: EndpointDocumentation | undefined; updateSchema: UpdateSchema; updateDocs: EndpointDocumentation | undefined; deleteSchema: DeleteSchema; deleteDocs: EndpointDocumentation | undefined; }; type CrudSchema = { client: ClientSchema; server: ServerSchema; admin: AdminSchema; hasCreate: boolean; hasRead: boolean; hasUpdate: boolean; hasDelete: boolean; }; type CrudSchemaCreationOptions = { [K in AccessTypeXCrudOperation as `${K}Schema`]?: yup.AnySchema; }; type FillInOptionalsPrepareStep = { [K in keyof Required]: K extends keyof O ? O[K] : undefined; }; type FillInOptionalsStep> = { clientCreateSchema: NullishCoalesce; clientReadSchema: NullishCoalesce; clientUpdateSchema: NullishCoalesce; clientDeleteSchema: NullishCoalesce; serverCreateSchema: NullishCoalesce; serverReadSchema: NullishCoalesce; serverUpdateSchema: NullishCoalesce; serverDeleteSchema: NullishCoalesce; adminCreateSchema: NullishCoalesce; adminReadSchema: NullishCoalesce; adminUpdateSchema: NullishCoalesce; adminDeleteSchema: NullishCoalesce; }; type FillInOptionals = FillInOptionalsStep>>>; type CrudSchemaFromOptionsInner> = CrudSchema, InnerCrudSchema, InnerCrudSchema>; type CrudSchemaFromOptions = CrudSchemaFromOptionsInner>; type InnerCrudTypeOf = (S['createSchema'] extends {} ? { Create: yup.InferType; } : {}) & (S['readSchema'] extends {} ? { Read: yup.InferType; } : {}) & (S['updateSchema'] extends {} ? { Update: yup.InferType; } : {}) & (S['deleteSchema'] extends {} ? { Delete: yup.InferType; } : {}) & (S['readSchema'] extends {} ? { List: { items: yup.InferType[]; is_paginated: boolean; pagination?: { next_cursor: string | null; }; }; } : {}); type CrudTypeOf = { Client: InnerCrudTypeOf; Server: InnerCrudTypeOf; Admin: InnerCrudTypeOf; }; type CrudDocsCreationOptions = { [X in AccessTypeXCrudlOperation]?: EndpointDocumentation; }; declare function createCrud(options: SO & { docs?: CrudDocsCreationOptions; }): CrudSchemaFromOptions; export { type AccessType, type AccessTypeXCrudOperation, type AccessTypeXCrudlOperation, type CrudOperation, type CrudSchema, type CrudSchemaCreationOptions, type CrudSchemaFromOptions, type CrudTypeOf, type CrudlOperation, type EndpointDocumentation, createCrud };