summaryrefslogtreecommitdiff
path: root/u/server/response.ts
diff options
context:
space:
mode:
authorElizabeth Hunt <me@liz.coffee>2025-06-29 17:31:30 -0700
committerElizabeth Hunt <me@liz.coffee>2025-06-29 17:31:30 -0700
commit58be1809c46cbe517a18d86d0af52179dcc5cbf6 (patch)
tree9ccc678b3fd48c1a52fe501600dd2c2051740a55 /u/server/response.ts
parentd4791f3d357634daf506fb8f91cc5332a794c421 (diff)
downloadci-58be1809c46cbe517a18d86d0af52179dcc5cbf6.tar.gz
ci-58be1809c46cbe517a18d86d0af52179dcc5cbf6.zip
Move to nodejs and also lots of significant refactoring that should've been broken up but idgaf
Diffstat (limited to 'u/server/response.ts')
-rw-r--r--u/server/response.ts83
1 files changed, 0 insertions, 83 deletions
diff --git a/u/server/response.ts b/u/server/response.ts
deleted file mode 100644
index 18d70b5..0000000
--- a/u/server/response.ts
+++ /dev/null
@@ -1,83 +0,0 @@
-import {
- type IEither,
- isEither,
- type ITraceable,
- Metric,
- type PenguenoRequest,
- type ServerTrace,
-} from '@emprespresso/pengueno';
-
-export type BodyInit =
- | ArrayBuffer
- | AsyncIterable<Uint8Array>
- | Blob
- | FormData
- | Iterable<Uint8Array>
- | NodeJS.ArrayBufferView
- | URLSearchParams
- | null
- | string;
-export type ResponseBody = object | string;
-export type TResponseInit = Omit<ResponseInit, 'headers'> & {
- status: number;
- headers?: Record<string, string>;
-};
-
-const getResponse = (req: PenguenoRequest, opts: TResponseInit): ResponseInit => {
- const baseHeaders = req.baseResponseHeaders();
- const optHeaders = opts.headers || {};
-
- return {
- ...opts,
- headers: {
- ...baseHeaders,
- ...optHeaders,
- 'Content-Type': (optHeaders['Content-Type'] ?? 'text/plain') + '; charset=utf-8',
- } as Record<string, string>,
- };
-};
-
-const ResponseCodeMetrics = [0, 1, 2, 3, 4, 5].map((x) => Metric.fromName(`response.${x}xx`));
-export const getResponseMetrics = (status: number) => {
- const index = Math.floor(status / 100);
- return ResponseCodeMetrics.map((metric, i) => metric.count.withValue(i === index ? 1.0 : 0.0));
-};
-
-export class PenguenoResponse extends Response {
- constructor(req: ITraceable<PenguenoRequest, ServerTrace>, msg: BodyInit, opts: TResponseInit) {
- const responseOpts = getResponse(req.get(), opts);
- for (const metric of getResponseMetrics(opts.status)) {
- req.trace.trace(metric);
- }
- super(msg, responseOpts);
- }
-}
-
-export class JsonResponse extends PenguenoResponse {
- constructor(
- req: ITraceable<PenguenoRequest, ServerTrace>,
- e: BodyInit | IEither<ResponseBody, ResponseBody>,
- opts: TResponseInit,
- ) {
- const optsWithJsonContentType: TResponseInit = {
- ...opts,
- headers: {
- ...opts.headers,
- 'Content-Type': 'application/json',
- },
- };
- if (isEither<ResponseBody, ResponseBody>(e)) {
- super(
- req,
- JSON.stringify(e.fold(({ isLeft, value }) => (isLeft ? { error: value } : { ok: value }))),
- optsWithJsonContentType,
- );
- return;
- }
- super(
- req,
- JSON.stringify(Math.floor(opts.status / 100) > 4 ? { error: e } : { ok: e }),
- optsWithJsonContentType,
- );
- }
-}