Effect.gen(function* (_) {
const textDecoder = new TextDecoder()
yield* _(HttpApp.appendPreResponseHandler((_req, res) => Effect.gen(function* (_) {
let body: Record<string, any> = {}
switch (res.body._tag) {
case "Uint8Array": {
// No need to handle errors, Anything returned by the body is already valid JSON
body = JSON.parse(textDecoder.decode(res.body.body));
break;
}
default: {
return res
}
}
const cookiesRecord = res.cookies.cookies
const cookies = Object.keys(cookiesRecord).flatMap((key) => {
const cookie = cookiesRecord[key]!
return [
cookie.name,
cookie.value,
cookie.options
]
})
let response;
if (res.status >= 400) {
response = yield* HttpServerResponse.unsafeJson({
success: false,
status: res.status,
error: body.error,
message: body.message,
...omitKeys(body, ['error', 'message', 'status', '_tag'])
})
} else {
response = yield* _(HttpServerResponse.unsafeJson({
success: true,
status: res.status,
...omitKeys(body, ['error', 'message', 'status', '_tag'])
}))
}
return response.pipe(
HttpServerResponse.unsafeSetCookies(res.cookies),
HttpServerResponse.setStatus(res.status)
)
})))
Effect.gen(function* (_) {
const textDecoder = new TextDecoder()
yield* _(HttpApp.appendPreResponseHandler((_req, res) => Effect.gen(function* (_) {
let body: Record<string, any> = {}
switch (res.body._tag) {
case "Uint8Array": {
// No need to handle errors, Anything returned by the body is already valid JSON
body = JSON.parse(textDecoder.decode(res.body.body));
break;
}
default: {
return res
}
}
const cookiesRecord = res.cookies.cookies
const cookies = Object.keys(cookiesRecord).flatMap((key) => {
const cookie = cookiesRecord[key]!
return [
cookie.name,
cookie.value,
cookie.options
]
})
let response;
if (res.status >= 400) {
response = yield* HttpServerResponse.unsafeJson({
success: false,
status: res.status,
error: body.error,
message: body.message,
...omitKeys(body, ['error', 'message', 'status', '_tag'])
})
} else {
response = yield* _(HttpServerResponse.unsafeJson({
success: true,
status: res.status,
...omitKeys(body, ['error', 'message', 'status', '_tag'])
}))
}
return response.pipe(
HttpServerResponse.unsafeSetCookies(res.cookies),
HttpServerResponse.setStatus(res.status)
)
})))