summaryrefslogtreecommitdiff
path: root/u/server/response/json_pengueno.ts
blob: d0b74a895cc75afa2ff41f279e2140958f0f98f0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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);
    }
}