diff options
Diffstat (limited to 'u/server/response/json_pengueno.ts')
-rw-r--r-- | u/server/response/json_pengueno.ts | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/u/server/response/json_pengueno.ts b/u/server/response/json_pengueno.ts new file mode 100644 index 0000000..d0b74a8 --- /dev/null +++ b/u/server/response/json_pengueno.ts @@ -0,0 +1,29 @@ +import { + isEither, + ITraceable, + PenguenoRequest, + PenguenoResponse, + ResponseOpts, + ServerTrace, +} from '@emprespresso/pengueno'; + +type Jsonable = any; +export class JsonResponse extends PenguenoResponse { + constructor(req: ITraceable<PenguenoRequest, ServerTrace>, e: Jsonable, _opts: ResponseOpts) { + const opts = { ..._opts, headers: { ..._opts.headers, 'Content-Type': 'application/json' } }; + if (isEither<Jsonable, Jsonable>(e)) { + super( + req, + JSON.stringify( + e.fold( + (error) => ({ error, ok: undefined }), + (ok) => ({ ok }), + ), + ), + opts, + ); + return; + } + super(req, JSON.stringify(Math.floor(opts.status / 100) > 4 ? { error: e } : { ok: e }), opts); + } +} |