{"version":3,"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":"AAAA,SAAS,uBAAuB;AA6ChC,MAAM,kBAAkB,CACtB,WAEA,WAAW,gBAAgB,UAC3B,WAAW,gBAAgB,eAC3B,WAAW,gBAAgB,gBAC3B,WAAW,gBAAgB,qCAC3B,WAAW,gBAAgB,kBAC3B,WAAW,gBAAgB,qBAC3B,WAAW,gBAAgB,uBAC3B,WAAW,gBAAgB,oBAC3B,WAAW,gBAAgB,wBAC3B,WAAW,gBAAgB;AAYtB,SAAS,eAAkB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS,gBAAgB;AAC3B,GAAgE;AAC9D,QAAM,UAAU,gBAAgB,MAAM;AAEtC,SAAO;AAAA,IACL;AAAA,IACA,SAAS,WAAW;AAAA,IACpB,aAAa,eAAe;AAAA,IAC5B,MAAM,QAAQ;AAAA,IACd,OAAO,SAAS;AAAA,IAChB;AAAA,EACF;AACF;AAmDO,SAAS,wBAA2B;AAAA,EACzC,SAAS,gBAAgB;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAEsD;AACpD,QAAM,UAAU,gBAAgB,MAAM;AAEtC,SAAO;AAAA,IACL;AAAA,IACA,SAAS,WAAW;AAAA,IACpB,aAAa,eAAe;AAAA,IAC5B,MAAM,QAAQ;AAAA,IACd,OAAO,SAAS;AAAA,IAChB;AAAA,IACA,MAAM,QAAQ;AAAA,IACd,WAAW,YAAY;AAAA,IACvB,aAAa,cAAc;AAAA,IAC3B,aAAa,cAAc;AAAA,EAC7B;AACF;","names":[]}