{"version":3,"file":"index.cjs","sources":["../../../src/api/rest-api-response-zod.ts"],"sourcesContent":["import { z } from 'zod';\n\n// Zod schemas for API response structures\nexport const errorDetailBodySchema = z.object({\n  message: z.string(),\n  code: z.string().optional(),\n  field: z.string().optional(),\n  path: z.string().optional(),\n});\n\nconst errorBodySchema = z.object({\n  message: z.string(),\n  code: z.string(),\n  details: z.array(errorDetailBodySchema).optional(),\n});\n\nexport const apiErrorResponseBodyZodSchema = z.object({\n  meta: z.object({\n    status: z.number().min(400).max(599),\n  }),\n  errors: z.array(errorBodySchema),\n});\n\n/**\n * Standard response schema\n * @description A standard response schema for all API responses\n * @example\n * {\n *   \"data\": { ... },\n *   \"meta\": { ... }\n * }\n */\nexport const apiSuccessResponseBodyZodSchema = z.object({\n  data: z.unknown(),\n  meta: z.object({\n    status: z.number().min(200).max(399),\n    cache: z\n      .object({\n        hit: z.boolean(),\n        source: z.string().optional(),\n        ttl: z.number().optional(),\n        expireAt: z.number().optional(),\n      })\n      .optional(),\n  }),\n});\n\nexport type ErrorDetailBodyZodSchemaType = z.infer<typeof errorDetailBodySchema>;\nexport type ErrorBodyZodSchemaType = z.infer<typeof errorBodySchema>;\nexport type ApiErrorResponseBodyZodSchemaType = z.infer<typeof apiErrorResponseBodyZodSchema>;\nexport type ApiSuccessResponseBodyZodSchemaType<DataType = unknown> = Exclude<\n  z.infer<typeof apiSuccessResponseBodyZodSchema>,\n  'data'\n> & {\n  data: DataType;\n};\n\nexport const apiPaginationZodSchema = z.object({\n  items: z.array(z.unknown()),\n  totalItems: z.number(),\n  limit: z.number().int().positive(),\n  page: z.number().int().positive(),\n  totalPages: z.number().int().positive(),\n  hasNextPage: z.boolean(),\n  hasPrevPage: z.boolean(),\n  pagingCounter: z.number().int().positive(),\n  prevPage: z.number().int().positive(),\n  nextPage: z.number().int().positive(),\n});\n\nexport type ApiPaginationZodSchemaType<ItemsType = unknown> = Omit<z.infer<typeof apiPaginationZodSchema>, 'items'> & {\n  items: ItemsType[];\n};\n\n/**\n * Custom labels for the api paginated response body\n */\nexport const mongoosePaginateCustomLabels = {\n  docs: 'items',\n  totalDocs: 'totalItems',\n  limit: 'limit',\n  page: 'page',\n} as const;\n\n/**\n * The body of a paginated response from the api\n */\nexport type ApiPaginatedResponseBodyZodSchemaType<ItemsType = unknown> = ApiSuccessResponseBodyZodSchemaType<\n  ApiPaginationZodSchemaType<ItemsType>\n>;\n\n/**\n * Method to create a success response body\n * @param meta\n * @param data\n * @returns\n */\nexport function createApiSuccessResponseBody<T>(meta: ApiSuccessResponseBodyZodSchemaType['meta'], data: T) {\n  return apiSuccessResponseBodyZodSchema.parse({\n    data,\n    meta,\n  }) as ApiSuccessResponseBodyZodSchemaType<T>;\n}\n\n/**\n * Creates an error response with a single error\n */\nexport function createApiErrorResponseBody(\n  meta: ApiErrorResponseBodyZodSchemaType['meta'],\n  errors: ApiErrorResponseBodyZodSchemaType['errors'],\n): ApiErrorResponseBodyZodSchemaType {\n  const response: ApiErrorResponseBodyZodSchemaType = {\n    meta,\n    errors,\n  };\n\n  return apiErrorResponseBodyZodSchema.parse(response);\n}\n"],"names":["z"],"mappings":"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"}