diff --git a/lib.ts b/lib.ts index 3b84672..3f5962d 100644 --- a/lib.ts +++ b/lib.ts @@ -15,16 +15,13 @@ export const thIgnore = [ "bpmkeytracker", ] -export function jsonToCsv(data: unknown|unknown[]) { +export function jsonToCsv(data: unknown | unknown[]) { const arr = Array.isArray(data) ? data : [data]; - const headers = [...new Set(arr.flatMap(o => Object.keys(o)))]; + const headers = [...new Set(arr.flatMap((o) => Object.keys(o)))]; - const escape = (v: string )=> - `"${String(v ?? "").replace(/"/g, '""')}"`; + const escape = (v: string) => `"${String(v ?? "").replace(/"/g, '""')}"`; - const rows = arr.map(o => - headers.map(h => escape(o[h])).join(",") - ); + const rows = arr.map((o) => headers.map((h) => escape(o[h])).join(",")); return [headers.join(","), ...rows].join("\n"); } @@ -32,9 +29,16 @@ export function jsonToCsv(data: unknown|unknown[]) { export enum TripleBool { MOSTLY = 2, YES = 1, - NO = 0 + NO = 0, +} +export interface Entry { + name: string; + url: string; + credit: string; + updated: TripleBool; + links_work: TripleBool; + best: boolean; } -export interface Entry { name: string, url: string, credit: string, updated: TripleBool, links_work: TripleBool, best: boolean }; export type Change = | { op: "delete"; name: string } @@ -51,19 +55,25 @@ export function tripleBoolToString(v: TripleBool): string { } export function tripleBool(bool: string): TripleBool { - if(bool.toLowerCase() == "mostly") { + if (bool.toLowerCase() == "mostly") { return TripleBool.MOSTLY; - } else if(bool.toLowerCase() == "yes") { - return TripleBool.YES - } else if(bool.toLowerCase() == "no") { - return TripleBool.NO + } else if (bool.toLowerCase() == "yes") { + return TripleBool.YES; + } else if (bool.toLowerCase() == "no") { + return TripleBool.NO; } - throw new Error("tripleBool conversion function errored, mysteriously! Passed in: " + bool) + console.error( + "tripleBool conversion function errored, mysteriously! Passed in: " + bool, + ); + + return TripleBool.NO; } export function prettyStringify(z: unknown) { - return JSON.stringify(z, null, 2).replace(/\n {2}"/g, ' "').replace(/\n}/, " }") + return JSON.stringify(z, null, 2) + .replace(/\n {2}"/g, ' "') + .replace(/\n}/, " }"); } export function requireBasicAuth(req: Request): Response | null { @@ -71,28 +81,28 @@ export function requireBasicAuth(req: Request): Response | null { if (!auth || !auth.startsWith("Basic ")) { return new Response("Auth required", { status: 401, - headers: { "WWW-Authenticate": 'Basic realm="acx-sheets"' } + headers: { "WWW-Authenticate": 'Basic realm="acx-sheets"' }, }); } const decoded = Buffer.from(auth.slice(6), "base64").toString("utf8"); const [user, pass] = decoded.split(":"); - if ( - user !== process.env.MERGE_USER || - pass !== process.env.MERGE_PASS - ) { + if (user !== process.env.MERGE_USER || pass !== process.env.MERGE_PASS) { return new Response("Forbidden", { status: 403 }); } return null; } export function ndjsonToJson(ndjson: string): unknown[] { - return ndjson.split("\n").map(z => { - try { - return JSON.parse(z) - } catch { - return undefined; - } - }).filter(Boolean); + return ndjson + .split("\n") + .map((z) => { + try { + return JSON.parse(z); + } catch { + return undefined; + } + }) + .filter(Boolean); }