just returns no

This commit is contained in:
Soph :3 2026-01-05 02:16:29 +02:00
parent 9151402408
commit 6b6e4638d8

58
lib.ts
View file

@ -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 => {
return ndjson
.split("\n")
.map((z) => {
try {
return JSON.parse(z)
return JSON.parse(z);
} catch {
return undefined;
}
}).filter(Boolean);
})
.filter(Boolean);
}