{"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":["addCustomMethods","app","delegator","delegate","context","statuses","codes","filter","code","forEach","name","camelCasedName","camelCase","response","responseCode","message","details","httpError","createError","status","body","formatHttpError","method","send","data","created","deleted","isNil","createKoaApp","proxy","keys","Koa"],"mappings":";;;;;;;AAiBA,MAAMA,mBAAmB,CAACC,GAAAA,GAAAA;AACxB,IAAA,MAAMC,SAAYC,GAAAA,QAAAA,CAASF,GAAIG,CAAAA,OAAO,EAAE,UAAA,CAAA;AAExC,iBACAC,QAAAA,CAASC,KAAK,CACXC,MAAM,CAAC,CAACC,IAASA,GAAAA,IAAAA,IAAQ,GAAOA,IAAAA,IAAAA,GAAO,GACvCC,CAAAA,CAAAA,OAAO,CAAC,CAACD,IAAAA,GAAAA;AACR,QAAA,MAAME,OAAOL,QAASG,CAAAA,IAAAA,CAAAA;AAEtB,QAAA,MAAMG,iBAAiBC,SAAUF,CAAAA,IAAAA,CAAAA;QACjCT,GAAIY,CAAAA,QAAQ,CAACF,cAAAA,CAAe,GAAG,SAASG,YAAaC,CAAAA,OAAAA,GAAUL,IAAI,EAAEM,OAAU,GAAA,EAAE,EAAA;YAC/E,MAAMC,SAAAA,GAAYC,WAAYV,CAAAA,IAAAA,EAAMO,OAAS,EAAA;AAAEC,gBAAAA;AAAQ,aAAA,CAAA;AACvD,YAAA,MAAM,EAAEG,MAAM,EAAEC,IAAI,EAAE,GAAGC,eAAgBJ,CAAAA,SAAAA,CAAAA;YACzC,IAAI,CAACE,MAAM,GAAGA,MAAAA;YACd,IAAI,CAACC,IAAI,GAAGA,IAAAA;AACd,SAAA;AACAlB,QAAAA,SAAAA,CAAUoB,MAAM,CAACX,cAAAA,CAAAA;AACnB,KAAA,CAAA;iCAGFV,GAAIY,CAAAA,QAAQ,CAACU,IAAI,GAAG,SAASA,IAAKC,CAAAA,IAAI,EAAEL,MAAAA,GAAS,GAAG,EAAA;QAClD,IAAI,CAACA,MAAM,GAAGA,MAAAA;QACd,IAAI,CAACC,IAAI,GAAGI,IAAAA;AACd,KAAA;AAEAvB,IAAAA,GAAAA,CAAIY,QAAQ,CAACY,OAAO,GAAG,SAASA,QAAQD,IAAI,EAAA;QAC1C,IAAI,CAACL,MAAM,GAAG,GAAA;QACd,IAAI,CAACC,IAAI,GAAGI,IAAAA;AACd,KAAA;AAEAvB,IAAAA,GAAAA,CAAIY,QAAQ,CAACa,OAAO,GAAG,SAASA,QAAQF,IAAI,EAAA;AAC1C,QAAA,IAAIG,MAAMH,IAAO,CAAA,EAAA;YACf,IAAI,CAACL,MAAM,GAAG,GAAA;SACT,MAAA;YACL,IAAI,CAACA,MAAM,GAAG,GAAA;YACd,IAAI,CAACC,IAAI,GAAGI,IAAAA;AACd;AACF,KAAA;AAEAtB,IAAAA,SAAAA,CAAUoB,MAAM,CAAC,MAAA,CAAA,CAAQA,MAAM,CAAC,SAAA,CAAA,CAAWA,MAAM,CAAC,SAAA,CAAA;IAElD,OAAOrB,GAAAA;AACT,CAAA;AAEA,MAAM2B,eAAe,CAAC,EAAEC,KAAK,EAAEC,IAAI,EAAsC,GAAA;IACvE,MAAM7B,GAAAA,GAAM,IAAI8B,GAAI,CAAA;AAAEF,QAAAA;AAAM,KAAA,CAAA;AAC5B5B,IAAAA,GAAAA,CAAI6B,IAAI,GAAGA,IAAAA;IAEX9B,gBAAiBC,CAAAA,GAAAA,CAAAA;IAEjB,OAAOA,GAAAA;AACT;;;;"}