{"version":3,"file":"koa.mjs","sources":["../../../src/services/server/koa.ts"],"sourcesContent":["import { isNil, camelCase } from 'lodash/fp';\nimport Koa from 'koa';\nimport createError from 'http-errors';\nimport delegate from 'delegates';\nimport statuses from 'statuses';\nimport { formatHttpError } from '../errors';\n\ndeclare module 'koa' {\n  interface BaseResponse {\n    send: (data: any, status?: number) => void;\n    created: (data: any) => void;\n    deleted: (data: any) => void;\n    _explicitStatus: boolean;\n    [key: string]: (message: string, details?: unknown) => void;\n  }\n}\n\nconst addCustomMethods = (app: Koa) => {\n  const delegator = delegate(app.context, 'response');\n\n  /* errors */\n  statuses.codes\n    .filter((code) => code >= 400 && code < 600)\n    .forEach((code) => {\n      const name = statuses(code);\n\n      const camelCasedName = camelCase(name);\n      app.response[camelCasedName] = function responseCode(message = name, details = {}) {\n        const httpError = createError(code, message, { details });\n        const { status, body } = formatHttpError(httpError);\n        this.status = status;\n        this.body = body;\n      };\n      delegator.method(camelCasedName);\n    });\n\n  /* send, created, deleted */\n  app.response.send = function send(data, status = 200) {\n    this.status = status;\n    this.body = data;\n  };\n\n  app.response.created = function created(data) {\n    this.status = 201;\n    this.body = data;\n  };\n\n  app.response.deleted = function deleted(data) {\n    if (isNil(data)) {\n      this.status = 204;\n    } else {\n      this.status = 200;\n      this.body = data;\n    }\n  };\n\n  delegator.method('send').method('created').method('deleted');\n\n  return app;\n};\n\nconst createKoaApp = ({ proxy, keys }: { proxy: boolean; keys: string[] }) => {\n  const app = new Koa({ proxy });\n  app.keys = keys;\n\n  addCustomMethods(app);\n\n  return app;\n};\n\nexport default createKoaApp;\n"],"names":[],"mappings":";;;;;;AAiBA,MAAM,mBAAmB,CAAC,QAAa;AACrC,QAAM,YAAY,SAAS,IAAI,SAAS,UAAU;AAGzC,WAAA,MACN,OAAO,CAAC,SAAS,QAAQ,OAAO,OAAO,GAAG,EAC1C,QAAQ,CAAC,SAAS;AACX,UAAA,OAAO,SAAS,IAAI;AAEpB,UAAA,iBAAiB,UAAU,IAAI;AACjC,QAAA,SAAS,cAAc,IAAI,SAAS,aAAa,UAAU,MAAM,UAAU,IAAI;AACjF,YAAM,YAAY,YAAY,MAAM,SAAS,EAAE,SAAS;AACxD,YAAM,EAAE,QAAQ,KAAK,IAAI,gBAAgB,SAAS;AAClD,WAAK,SAAS;AACd,WAAK,OAAO;AAAA,IAAA;AAEd,cAAU,OAAO,cAAc;AAAA,EAAA,CAChC;AAGH,MAAI,SAAS,OAAO,SAAS,KAAK,MAAM,SAAS,KAAK;AACpD,SAAK,SAAS;AACd,SAAK,OAAO;AAAA,EAAA;AAGd,MAAI,SAAS,UAAU,SAAS,QAAQ,MAAM;AAC5C,SAAK,SAAS;AACd,SAAK,OAAO;AAAA,EAAA;AAGd,MAAI,SAAS,UAAU,SAAS,QAAQ,MAAM;AACxC,QAAA,MAAM,IAAI,GAAG;AACf,WAAK,SAAS;AAAA,IAAA,OACT;AACL,WAAK,SAAS;AACd,WAAK,OAAO;AAAA,IACd;AAAA,EAAA;AAGF,YAAU,OAAO,MAAM,EAAE,OAAO,SAAS,EAAE,OAAO,SAAS;AAEpD,SAAA;AACT;AAEA,MAAM,eAAe,CAAC,EAAE,OAAO,WAA+C;AAC5E,QAAM,MAAM,IAAI,IAAI,EAAE,MAAO,CAAA;AAC7B,MAAI,OAAO;AAEX,mBAAiB,GAAG;AAEb,SAAA;AACT;"}