{"version":3,"file":"responseData.mjs","names":[],"sources":["../../src/utils/responseData.ts"],"sourcesContent":["import { HttpStatusCodes } from './httpStatusCodes';\n\ntype ErrorData = {\n  code: string;\n  title: string;\n  message: string;\n} & object;\n\nexport type ResponseData<T = null> = {\n  message?: string;\n  description?: string;\n  success: boolean;\n  status: HttpStatusCodes;\n  data: T | null;\n  error?: ErrorData | ErrorData[];\n};\n\ntype ValidResponseStatus =\n  | HttpStatusCodes.OK_200\n  | HttpStatusCodes.CREATED_201\n  | HttpStatusCodes.ACCEPTED_202\n  | HttpStatusCodes.NON_AUTHORITATIVE_INFORMATION_203\n  | HttpStatusCodes.NO_CONTENT_204\n  | HttpStatusCodes.RESET_CONTENT_205\n  | HttpStatusCodes.PARTIAL_CONTENT_206\n  | HttpStatusCodes.MULTI_STATUS_207\n  | HttpStatusCodes.ALREADY_REPORTED_208\n  | HttpStatusCodes.IM_USED_226;\n\ntype SuccessResponseArgs<T = undefined> = {\n  message?: string;\n  description?: string;\n  data: T;\n  status?: ValidResponseStatus;\n  error?: null;\n};\n\ntype ErrorResponseArgs = {\n  error: ErrorData | ErrorData[];\n  status: HttpStatusCodes;\n  data?: null;\n  message?: null;\n  description?: null;\n};\n\nconst isSuccessStatus = (\n  status: HttpStatusCodes\n): status is HttpStatusCodes.OK_200 =>\n  status === HttpStatusCodes.OK_200 ||\n  status === HttpStatusCodes.CREATED_201 ||\n  status === HttpStatusCodes.ACCEPTED_202 ||\n  status === HttpStatusCodes.NON_AUTHORITATIVE_INFORMATION_203 ||\n  status === HttpStatusCodes.NO_CONTENT_204 ||\n  status === HttpStatusCodes.RESET_CONTENT_205 ||\n  status === HttpStatusCodes.PARTIAL_CONTENT_206 ||\n  status === HttpStatusCodes.MULTI_STATUS_207 ||\n  status === HttpStatusCodes.ALREADY_REPORTED_208 ||\n  status === HttpStatusCodes.IM_USED_226;\n\nexport function formatResponse<T>({\n  message,\n  description,\n  data,\n  status,\n}: SuccessResponseArgs<T>): ResponseData<T>;\nexport function formatResponse<T>({\n  error,\n  status,\n}: ErrorResponseArgs): ResponseData<T>;\nexport function formatResponse<T>({\n  message,\n  description,\n  data,\n  error,\n  status = HttpStatusCodes.OK_200,\n}: SuccessResponseArgs<T> | ErrorResponseArgs): ResponseData<T> {\n  const success = isSuccessStatus(status);\n\n  return {\n    success,\n    message: message ?? undefined,\n    description: description ?? undefined,\n    data: data ?? null,\n    error: error ?? undefined,\n    status,\n  };\n}\n\nexport type PaginatedResponse<T = undefined> = Omit<ResponseData<T>, 'data'> & {\n  data: T[] | null;\n  page: number | null;\n  page_size: number | null;\n  total_pages: number | null;\n  total_items: number | null;\n};\n\ntype SuccessPaginatedResponseArgs<T = undefined> = {\n  message?: string;\n  description?: string;\n  data: T[];\n  status?: ValidResponseStatus;\n  page: number;\n  pageSize: number;\n  totalPages: number;\n  totalItems: number;\n\n  error?: null;\n};\n\ntype ErrorPaginatedResponseArgs = {\n  error: ErrorData | ErrorData[];\n  status: HttpStatusCodes;\n\n  message?: null;\n  description?: null;\n  data?: null;\n\n  page?: null;\n  pageSize?: null;\n  totalPages?: null;\n  totalItems?: null;\n};\n\nexport function formatPaginatedResponse<T>({\n  message,\n  description,\n  data,\n  status,\n  page,\n  pageSize,\n  totalPages,\n  totalItems,\n}: SuccessPaginatedResponseArgs<T>): PaginatedResponse<T>;\nexport function formatPaginatedResponse<T>({\n  error,\n  status,\n}: ErrorPaginatedResponseArgs): PaginatedResponse<T>;\nexport function formatPaginatedResponse<T>({\n  status = HttpStatusCodes.OK_200,\n  message,\n  description,\n  data,\n  error,\n  page,\n  pageSize,\n  totalPages,\n  totalItems,\n}:\n  | SuccessPaginatedResponseArgs<T>\n  | ErrorPaginatedResponseArgs): PaginatedResponse<T> {\n  const success = isSuccessStatus(status);\n\n  return {\n    success,\n    message: message ?? undefined,\n    description: description ?? undefined,\n    data: data ?? null,\n    error: error ?? undefined,\n    status,\n    page: page ?? null,\n    page_size: pageSize ?? null,\n    total_pages: totalPages ?? null,\n    total_items: totalItems ?? null,\n  };\n}\n"],"mappings":";;;AA6CA,MAAM,mBACJ,WAEA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA,kBACA;AAYF,SAAgB,eAAkB,EAChC,SACA,aACA,MACA,OACA,gBAC8D;CAG9D,OAAO;EACL,SAHc,gBAAgB,MAGxB;EACN,SAAS,WAAW;EACpB,aAAa,eAAe;EAC5B,MAAM,QAAQ;EACd,OAAO,SAAS;EAChB;CACF;AACF;AAmDA,SAAgB,wBAA2B,EACzC,cACA,SACA,aACA,MACA,OACA,MACA,UACA,YACA,cAGoD;CAGpD,OAAO;EACL,SAHc,gBAAgB,MAGxB;EACN,SAAS,WAAW;EACpB,aAAa,eAAe;EAC5B,MAAM,QAAQ;EACd,OAAO,SAAS;EAChB;EACA,MAAM,QAAQ;EACd,WAAW,YAAY;EACvB,aAAa,cAAc;EAC3B,aAAa,cAAc;CAC7B;AACF"}