{"version":3,"file":"response.cjs","sources":["../../src/response.ts"],"sourcesContent":["import { isNumber } from 'radash'\nimport * as t from './types'\n\n/**\n * There is a 1 in 1,000,000,000 chance that someone may\n * return an object with _type equal to '@response'\n * and this will break. Nobody do that...\n */\nexport const isResponse = (res: any): res is t.Response => {\n  return (res as t.Response)?.type === '@response'\n}\n\nexport const defaultResponse: t.Response = {\n  type: '@response',\n  status: 200,\n  headers: {},\n  body: {},\n  error: null\n}\n\nexport const responseFromResult = (result: any): t.Response => {\n  if (isResponse(result)) return result\n  // If nothing was returned then return the default\n  // success response\n  if (!result) return defaultResponse\n  // Else, the function returned something that should be\n  // returned as the json body response\n  return {\n    ...defaultResponse,\n    body: result\n  }\n}\n\nexport const responseFromError = (error: any): t.Response => {\n  if (isResponse(error)) return error\n  // Else its an error we're not equipped to handle\n  // return an unknown to the user.\n  return {\n    ...defaultResponse,\n    status: 500,\n    error,\n    body: {\n      status: 500,\n      message: 'Unknown Error'\n    }\n  }\n}\n\nexport const response = (error: any, result: any) => {\n  return error ? responseFromError(error) : responseFromResult(result)\n}\n\n/**\n * Generate a response object\n *\n * @example\n * ```ts\n * const { res } from '@exobase/core'\n *\n * const handler = async () => {\n *   return res(401, {\n *     message: 'Not Authorized'\n *   })\n * }\n *\n * compose(useNext(), handler)\n * ```\n */\nexport function res(): t.Response\nexport function res(body: t.SerializableJson): t.Response\nexport function res(status: number): t.Response\nexport function res(status: number, body: t.SerializableJson): t.Response\nexport function res(\n  statusOrBody?: number | t.SerializableJson,\n  body?: t.SerializableJson\n): t.Response {\n  if (!statusOrBody && !body) return defaultResponse\n  return {\n    ...defaultResponse,\n    status: isNumber(statusOrBody) ? statusOrBody : 200,\n    body: !!body ? body : isNumber(statusOrBody) ? {} : statusOrBody\n  }\n}\n"],"names":["res","isNumber"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAQa,MAAA,UAAA,GAAa,CAACA,IAAgC,KAAA;AACzD,EAAQA,OAAAA,CAAAA,IAAAA,IAAA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,IAAAA,CAAoB,IAAS,MAAA,WAAA,CAAA;AACvC,EAAA;AAEO,MAAM,eAA8B,GAAA;AAAA,EACzC,IAAM,EAAA,WAAA;AAAA,EACN,MAAQ,EAAA,GAAA;AAAA,EACR,SAAS,EAAC;AAAA,EACV,MAAM,EAAC;AAAA,EACP,KAAO,EAAA,IAAA;AACT,EAAA;AAEa,MAAA,kBAAA,GAAqB,CAAC,MAA4B,KAAA;AAC7D,EAAA,IAAI,WAAW,MAAM,CAAA;AAAG,IAAO,OAAA,MAAA,CAAA;AAG/B,EAAA,IAAI,CAAC,MAAA;AAAQ,IAAO,OAAA,eAAA,CAAA;AAGpB,EAAA,OAAO,iCACF,eADE,CAAA,EAAA;AAAA,IAEL,IAAM,EAAA,MAAA;AAAA,GACR,CAAA,CAAA;AACF,EAAA;AAEa,MAAA,iBAAA,GAAoB,CAAC,KAA2B,KAAA;AAC3D,EAAA,IAAI,WAAW,KAAK,CAAA;AAAG,IAAO,OAAA,KAAA,CAAA;AAG9B,EAAA,OAAO,iCACF,eADE,CAAA,EAAA;AAAA,IAEL,MAAQ,EAAA,GAAA;AAAA,IACR,KAAA;AAAA,IACA,IAAM,EAAA;AAAA,MACJ,MAAQ,EAAA,GAAA;AAAA,MACR,OAAS,EAAA,eAAA;AAAA,KACX;AAAA,GACF,CAAA,CAAA;AACF,EAAA;AAEa,MAAA,QAAA,GAAW,CAAC,KAAA,EAAY,MAAgB,KAAA;AACnD,EAAA,OAAO,KAAQ,GAAA,iBAAA,CAAkB,KAAK,CAAA,GAAI,mBAAmB,MAAM,CAAA,CAAA;AACrE,EAAA;AAsBgB,SAAA,GAAA,CACd,cACA,IACY,EAAA;AACZ,EAAI,IAAA,CAAC,gBAAgB,CAAC,IAAA;AAAM,IAAO,OAAA,eAAA,CAAA;AACnC,EAAA,OAAO,iCACF,eADE,CAAA,EAAA;AAAA,IAEL,MAAQ,EAAAC,eAAA,CAAS,YAAY,CAAA,GAAI,YAAe,GAAA,GAAA;AAAA,IAChD,IAAA,EAAM,CAAC,CAAC,IAAA,GAAO,OAAOA,eAAS,CAAA,YAAY,CAAI,GAAA,EAAK,GAAA,YAAA;AAAA,GACtD,CAAA,CAAA;AACF;;;;;;;;;"}