From 89001f53dab87a183312353e06b6ce490fcfb04d Mon Sep 17 00:00:00 2001 From: "D. Rimron-Soutter" Date: Wed, 17 Dec 2025 20:10:00 +0000 Subject: [PATCH] No explicit any --- AGENTS.md | 6 + src/app/zxdb/ZxdbExplorer.tsx | 8 +- src/app/zxdb/entries/EntriesExplorer.tsx | 8 +- src/app/zxdb/entries/[id]/page.tsx | 2 +- src/app/zxdb/entries/page.tsx | 10 +- src/app/zxdb/genres/[id]/page.tsx | 2 +- src/app/zxdb/genres/page.tsx | 2 +- src/app/zxdb/labels/[id]/page.tsx | 2 +- src/app/zxdb/labels/page.tsx | 2 +- src/app/zxdb/languages/[id]/page.tsx | 2 +- src/app/zxdb/languages/page.tsx | 2 +- src/app/zxdb/machinetypes/[id]/page.tsx | 2 +- src/app/zxdb/machinetypes/page.tsx | 2 +- src/app/zxdb/releases/ReleasesExplorer.tsx | 2 +- src/app/zxdb/releases/page.tsx | 4 +- src/env.ts | 3 +- src/server/repo/zxdb.ts | 395 ++++++++++++--------- src/utils/register_parsers/reg_default.ts | 8 +- 18 files changed, 257 insertions(+), 205 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 5678266..eaeffce 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -100,6 +100,12 @@ Comment what the code does, not what the agent has done. The documentation's pur - Optional source lines and external links (e.g. wiki URLs). - Delegate special-case parsing to functions in `src/utils/register_parsers/` (e.g. `reg_default.ts`, `reg_f0.ts`) when needed. +### TypeScript Patterns + - No explicity any types. + - Use `const` for constants. + - Use `type` for interfaces. + - No `enum`. + ### React / Next.js Patterns - **Server Components**: diff --git a/src/app/zxdb/ZxdbExplorer.tsx b/src/app/zxdb/ZxdbExplorer.tsx index d877c0e..9a8bfc5 100644 --- a/src/app/zxdb/ZxdbExplorer.tsx +++ b/src/app/zxdb/ZxdbExplorer.tsx @@ -139,7 +139,7 @@ export default function ZxdbExplorer({
- setGenreId(e.target.value === "" ? "" : Number(e.target.value))}> {genres.map((g) => ( @@ -147,7 +147,7 @@ export default function ZxdbExplorer({
- setLanguageId(e.target.value)}> {languages.map((l) => ( @@ -155,7 +155,7 @@ export default function ZxdbExplorer({
- setMachinetypeId(e.target.value === "" ? "" : Number(e.target.value))}> {machines.map((m) => ( @@ -163,7 +163,7 @@ export default function ZxdbExplorer({
- setSort(e.target.value as "title" | "id_desc")}> diff --git a/src/app/zxdb/entries/EntriesExplorer.tsx b/src/app/zxdb/entries/EntriesExplorer.tsx index 29f8869..1eba2c7 100644 --- a/src/app/zxdb/entries/EntriesExplorer.tsx +++ b/src/app/zxdb/entries/EntriesExplorer.tsx @@ -194,7 +194,7 @@ export default function EntriesExplorer({
- { setGenreId(e.target.value === "" ? "" : Number(e.target.value)); setPage(1); }}> {genres.map((g) => ( @@ -202,7 +202,7 @@ export default function EntriesExplorer({
- { setLanguageId(e.target.value); setPage(1); }}> {languages.map((l) => ( @@ -210,7 +210,7 @@ export default function EntriesExplorer({
- { setMachinetypeId(e.target.value === "" ? "" : Number(e.target.value)); setPage(1); }}> {machines.map((m) => ( @@ -218,7 +218,7 @@ export default function EntriesExplorer({
- { setSort(e.target.value as "title" | "id_desc"); setPage(1); }}> diff --git a/src/app/zxdb/entries/[id]/page.tsx b/src/app/zxdb/entries/[id]/page.tsx index 926cdea..b05e51b 100644 --- a/src/app/zxdb/entries/[id]/page.tsx +++ b/src/app/zxdb/entries/[id]/page.tsx @@ -12,5 +12,5 @@ export default async function Page({ params }: { params: Promise<{ id: string }> const numericId = Number(id); const data = await getEntryById(numericId); // For simplicity, let the client render a Not Found state if null - return ; + return ; } diff --git a/src/app/zxdb/entries/page.tsx b/src/app/zxdb/entries/page.tsx index cbc89bb..64b9fd3 100644 --- a/src/app/zxdb/entries/page.tsx +++ b/src/app/zxdb/entries/page.tsx @@ -13,7 +13,7 @@ export default async function Page({ searchParams }: { searchParams: Promise<{ [ const genreId = (Array.isArray(sp.genreId) ? sp.genreId[0] : sp.genreId) ?? ""; const languageId = (Array.isArray(sp.languageId) ? sp.languageId[0] : sp.languageId) ?? ""; const machinetypeId = (Array.isArray(sp.machinetypeId) ? sp.machinetypeId[0] : sp.machinetypeId) ?? ""; - const sort = ((Array.isArray(sp.sort) ? sp.sort[0] : sp.sort) as any) ?? "id_desc"; + const sort = ((Array.isArray(sp.sort) ? sp.sort[0] : sp.sort) ?? "id_desc") as "title" | "id_desc"; const q = (Array.isArray(sp.q) ? sp.q[0] : sp.q) ?? ""; const [initial, genres, langs, machines] = await Promise.all([ @@ -33,10 +33,10 @@ export default async function Page({ searchParams }: { searchParams: Promise<{ [ return ( ); diff --git a/src/app/zxdb/genres/[id]/page.tsx b/src/app/zxdb/genres/[id]/page.tsx index 0b071a4..f9c83f1 100644 --- a/src/app/zxdb/genres/[id]/page.tsx +++ b/src/app/zxdb/genres/[id]/page.tsx @@ -12,5 +12,5 @@ export default async function Page({ params, searchParams }: { params: Promise<{ const page = Math.max(1, Number(Array.isArray(sp.page) ? sp.page[0] : sp.page) || 1); const q = (Array.isArray(sp.q) ? sp.q[0] : sp.q) ?? ""; const initial = await entriesByGenre(numericId, page, 20, q || undefined); - return ; + return ; } diff --git a/src/app/zxdb/genres/page.tsx b/src/app/zxdb/genres/page.tsx index c328127..880272d 100644 --- a/src/app/zxdb/genres/page.tsx +++ b/src/app/zxdb/genres/page.tsx @@ -10,5 +10,5 @@ export default async function Page({ searchParams }: { searchParams: Promise<{ [ const q = (Array.isArray(sp.q) ? sp.q[0] : sp.q) ?? ""; const page = Math.max(1, Number(Array.isArray(sp.page) ? sp.page[0] : sp.page) || 1); const initial = await searchGenres({ q, page, pageSize: 20 }); - return ; + return ; } diff --git a/src/app/zxdb/labels/[id]/page.tsx b/src/app/zxdb/labels/[id]/page.tsx index 7401f8a..168cfca 100644 --- a/src/app/zxdb/labels/[id]/page.tsx +++ b/src/app/zxdb/labels/[id]/page.tsx @@ -20,5 +20,5 @@ export default async function Page({ params, searchParams }: { params: Promise<{ ]); // Let the client component handle the "not found" simple state - return ; + return ; } diff --git a/src/app/zxdb/labels/page.tsx b/src/app/zxdb/labels/page.tsx index c64a444..6dc18fd 100644 --- a/src/app/zxdb/labels/page.tsx +++ b/src/app/zxdb/labels/page.tsx @@ -11,5 +11,5 @@ export default async function Page({ searchParams }: { searchParams: Promise<{ [ const q = (Array.isArray(sp.q) ? sp.q[0] : sp.q) ?? ""; const page = Math.max(1, Number(Array.isArray(sp.page) ? sp.page[0] : sp.page) || 1); const initial = await searchLabels({ q, page, pageSize: 20 }); - return ; + return ; } diff --git a/src/app/zxdb/languages/[id]/page.tsx b/src/app/zxdb/languages/[id]/page.tsx index e880b6b..93585f9 100644 --- a/src/app/zxdb/languages/[id]/page.tsx +++ b/src/app/zxdb/languages/[id]/page.tsx @@ -11,5 +11,5 @@ export default async function Page({ params, searchParams }: { params: Promise<{ const page = Math.max(1, Number(Array.isArray(sp.page) ? sp.page[0] : sp.page) || 1); const q = (Array.isArray(sp.q) ? sp.q[0] : sp.q) ?? ""; const initial = await entriesByLanguage(id, page, 20, q || undefined); - return ; + return ; } diff --git a/src/app/zxdb/languages/page.tsx b/src/app/zxdb/languages/page.tsx index 8afb3d5..432e3a2 100644 --- a/src/app/zxdb/languages/page.tsx +++ b/src/app/zxdb/languages/page.tsx @@ -11,5 +11,5 @@ export default async function Page({ searchParams }: { searchParams: Promise<{ [ const q = (Array.isArray(sp.q) ? sp.q[0] : sp.q) ?? ""; const page = Math.max(1, Number(Array.isArray(sp.page) ? sp.page[0] : sp.page) || 1); const initial = await searchLanguages({ q, page, pageSize: 20 }); - return ; + return ; } diff --git a/src/app/zxdb/machinetypes/[id]/page.tsx b/src/app/zxdb/machinetypes/[id]/page.tsx index f3e36f9..449d3fc 100644 --- a/src/app/zxdb/machinetypes/[id]/page.tsx +++ b/src/app/zxdb/machinetypes/[id]/page.tsx @@ -11,5 +11,5 @@ export default async function Page({ params, searchParams }: { params: Promise<{ const page = Math.max(1, Number(Array.isArray(sp.page) ? sp.page[0] : sp.page) || 1); const q = (Array.isArray(sp.q) ? sp.q[0] : sp.q) ?? ""; const initial = await entriesByMachinetype(numericId, page, 20, q || undefined); - return ; + return ; } diff --git a/src/app/zxdb/machinetypes/page.tsx b/src/app/zxdb/machinetypes/page.tsx index f38057b..d2348a5 100644 --- a/src/app/zxdb/machinetypes/page.tsx +++ b/src/app/zxdb/machinetypes/page.tsx @@ -10,5 +10,5 @@ export default async function Page({ searchParams }: { searchParams: Promise<{ [ const q = (Array.isArray(sp.q) ? sp.q[0] : sp.q) ?? ""; const page = Math.max(1, Number(Array.isArray(sp.page) ? sp.page[0] : sp.page) || 1); const initial = await searchMachinetypes({ q, page, pageSize: 20 }); - return ; + return ; } diff --git a/src/app/zxdb/releases/ReleasesExplorer.tsx b/src/app/zxdb/releases/ReleasesExplorer.tsx index 69674f4..b730adc 100644 --- a/src/app/zxdb/releases/ReleasesExplorer.tsx +++ b/src/app/zxdb/releases/ReleasesExplorer.tsx @@ -286,7 +286,7 @@ export default function ReleasesExplorer({
- { setSort(e.target.value); setPage(1); }}> diff --git a/src/app/zxdb/releases/page.tsx b/src/app/zxdb/releases/page.tsx index da9fed3..a4f195d 100644 --- a/src/app/zxdb/releases/page.tsx +++ b/src/app/zxdb/releases/page.tsx @@ -13,7 +13,7 @@ export default async function Page({ searchParams }: { searchParams: Promise<{ [ const q = (Array.isArray(sp.q) ? sp.q[0] : sp.q) ?? ""; const yearStr = (Array.isArray(sp.year) ? sp.year[0] : sp.year) ?? ""; const year = yearStr ? Number(yearStr) : undefined; - const sort = ((Array.isArray(sp.sort) ? sp.sort[0] : sp.sort) as any) ?? "year_desc"; + const sort = ((Array.isArray(sp.sort) ? sp.sort[0] : sp.sort) ?? "year_desc") as "year_desc" | "year_asc" | "title" | "entry_id_desc"; const dLanguageId = (Array.isArray(sp.dLanguageId) ? sp.dLanguageId[0] : sp.dLanguageId) ?? ""; const dMachinetypeIdStr = (Array.isArray(sp.dMachinetypeId) ? sp.dMachinetypeId[0] : sp.dMachinetypeId) ?? ""; const dMachinetypeId = dMachinetypeIdStr ? Number(dMachinetypeIdStr) : undefined; @@ -34,7 +34,7 @@ export default async function Page({ searchParams }: { searchParams: Promise<{ [ return ( ); diff --git a/src/env.ts b/src/env.ts index 71acfd8..1a515a3 100644 --- a/src/env.ts +++ b/src/env.ts @@ -15,7 +15,8 @@ function formatErrors(errors: z.ZodFormattedError, string>) return Object.entries(errors) .map(([name, value]) => { if (value && "_errors" in value) { - return `${name}: ${(value as any)._errors.join(", ")}`; + const errs = (value as z.ZodFormattedError)._errors; + return `${name}: ${errs.join(", ")}`; } return `${name}: invalid`; }) diff --git a/src/server/repo/zxdb.ts b/src/server/repo/zxdb.ts index 6338d49..b45027d 100644 --- a/src/server/repo/zxdb.ts +++ b/src/server/repo/zxdb.ts @@ -73,39 +73,47 @@ export async function searchEntries(params: SearchParams): Promise> = []; + if (typeof params.genreId === "number") { + whereClauses.push(eq(entries.genretypeId, params.genreId)); + } + if (typeof params.languageId === "string") { + whereClauses.push(eq(entries.languageId, params.languageId)); + } + if (typeof params.machinetypeId === "number") { + whereClauses.push(eq(entries.machinetypeId, params.machinetypeId)); + } const whereExpr = whereClauses.length ? and(...whereClauses) : undefined; const [items, countRows] = await Promise.all([ - db - .select({ - id: entries.id, - title: entries.title, - isXrated: entries.isXrated, - machinetypeId: entries.machinetypeId, - machinetypeName: machinetypes.name, - languageId: entries.languageId, - languageName: languages.name, - }) - .from(entries) - .leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId as any)) - .leftJoin(languages, eq(languages.id, entries.languageId as any)) - .where(whereExpr as any) - .orderBy(sort === "id_desc" ? desc(entries.id) : entries.title) - .limit(pageSize) - .offset(offset), + (async () => { + let q1 = db + .select({ + id: entries.id, + title: entries.title, + isXrated: entries.isXrated, + machinetypeId: entries.machinetypeId, + machinetypeName: machinetypes.name, + languageId: entries.languageId, + languageName: languages.name, + }) + .from(entries) + .leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId)) + .leftJoin(languages, eq(languages.id, entries.languageId)); + if (whereExpr) q1 = q1.where(whereExpr); + return q1 + .orderBy(sort === "id_desc" ? desc(entries.id) : entries.title) + .limit(pageSize) + .offset(offset); + })(), db .select({ total: sql`count(*)` }) .from(entries) - .where(whereExpr as any) as unknown as Promise<{ total: number }[]>, + .where(whereExpr ?? sql`true`), ]); const total = Number(countRows?.[0]?.total ?? 0); - return { items: items as any, page, pageSize, total }; + return { items, page, pageSize, total }; } const pattern = `%${q.toLowerCase().replace(/[^a-z0-9]+/g, "")}%`; @@ -131,15 +139,15 @@ export async function searchEntries(params: SearchParams): Promise { issueId: entries.issueId, }) .from(entries) - .leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId as any)) - .leftJoin(languages, eq(languages.id, entries.languageId as any)) - .leftJoin(genretypes, eq(genretypes.id, entries.genretypeId as any)) + .leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId)) + .leftJoin(languages, eq(languages.id, entries.languageId)) + .leftJoin(genretypes, eq(genretypes.id, entries.genretypeId)) .where(eq(entries.id, id)), db .select({ id: labels.id, name: labels.name, labeltypeId: labels.labeltypeId }) @@ -279,13 +287,36 @@ export async function getEntryById(id: number): Promise { typeName: filetypes.name, }) .from(files) - .innerJoin(filetypes, eq(filetypes.id, files.filetypeId as any)) - .where(eq(files.issueId as any, base.issueId as any))) as any; + .innerJoin(filetypes, eq(filetypes.id, files.filetypeId)) + .where(eq(files.issueId, base.issueId))); } - let releaseRows: any[] = []; - let downloadRows: any[] = []; - let downloadFlatRows: any[] = []; + type ReleaseRow = { releaseSeq: number | string; year: number | string | null }; + type DownloadRow = { + id: number | string; + releaseSeq: number | string; + link: string; + size: number | string | null; + md5: string | null; + comments: string | null; + isDemo: number | boolean | null; + filetypeId: number | string; + filetypeName: string; + dlLangId: string | null; + dlLangName: string | null; + dlMachineId: number | string | null; + dlMachineName: string | null; + schemeId: string | null; + schemeName: string | null; + sourceId: string | null; + sourceName: string | null; + caseId: string | null; + caseName: string | null; + year: number | string | null; + }; + let releaseRows: ReleaseRow[] = []; + let downloadRows: DownloadRow[] = []; + let downloadFlatRows: DownloadRow[] = []; // Fetch releases for this entry (optional; ignore if table missing) try { @@ -295,7 +326,7 @@ export async function getEntryById(id: number): Promise { year: releases.releaseYear, }) .from(releases) - .where(eq(releases.entryId as any, id as any))) as any; + .where(eq(releases.entryId, id))); } catch { releaseRows = []; } @@ -326,13 +357,13 @@ export async function getEntryById(id: number): Promise { year: downloads.releaseYear, }) .from(downloads) - .innerJoin(filetypes, eq(filetypes.id as any, downloads.filetypeId as any)) - .leftJoin(languages, eq(languages.id as any, downloads.languageId as any)) - .leftJoin(machinetypes, eq(machinetypes.id as any, downloads.machinetypeId as any)) - .leftJoin(schemetypes, eq(schemetypes.id as any, downloads.schemetypeId as any)) - .leftJoin(sourcetypes, eq(sourcetypes.id as any, downloads.sourcetypeId as any)) - .leftJoin(casetypes, eq(casetypes.id as any, downloads.casetypeId as any)) - .where(eq(downloads.entryId as any, id as any))) as any; + .innerJoin(filetypes, eq(filetypes.id, downloads.filetypeId)) + .leftJoin(languages, eq(languages.id, downloads.languageId)) + .leftJoin(machinetypes, eq(machinetypes.id, downloads.machinetypeId)) + .leftJoin(schemetypes, eq(schemetypes.id, downloads.schemetypeId)) + .leftJoin(sourcetypes, eq(sourcetypes.id, downloads.sourcetypeId)) + .leftJoin(casetypes, eq(casetypes.id, downloads.casetypeId)) + .where(eq(downloads.entryId, id))); } catch { downloadRows = []; } @@ -340,7 +371,7 @@ export async function getEntryById(id: number): Promise { // Flat list: same rows mapped, independent of releases downloadFlatRows = downloadRows; - const downloadsBySeq = new Map(); + const downloadsBySeq = new Map(); for (const row of downloadRows) { const arr = downloadsBySeq.get(row.releaseSeq) ?? []; arr.push(row); @@ -350,14 +381,14 @@ export async function getEntryById(id: number): Promise { // Build a map of downloads grouped by release_seq // Then ensure we create "synthetic" release groups for any release_seq // that appears in downloads but has no corresponding releases row. - const releasesData = releaseRows.map((r: any) => ({ + const releasesData = releaseRows.map((r) => ({ releaseSeq: Number(r.releaseSeq), type: { id: null, name: null }, language: { id: null, name: null }, machinetype: { id: null, name: null }, - year: (r.year as any) ?? null, + year: (r.year) ?? null, comments: null, - downloads: (downloadsBySeq.get(Number(r.releaseSeq)) ?? []).map((d: any) => ({ + downloads: (downloadsBySeq.get(Number(r.releaseSeq)) ?? []).map((d) => ({ id: d.id, link: d.link, size: d.size ?? null, @@ -365,12 +396,12 @@ export async function getEntryById(id: number): Promise { comments: d.comments ?? null, isDemo: !!d.isDemo, type: { id: d.filetypeId, name: d.filetypeName }, - language: { id: (d.dlLangId as any) ?? null, name: (d.dlLangName as any) ?? null }, - machinetype: { id: (d.dlMachineId as any) ?? null, name: (d.dlMachineName as any) ?? null }, - scheme: { id: (d.schemeId as any) ?? null, name: (d.schemeName as any) ?? null }, - source: { id: (d.sourceId as any) ?? null, name: (d.sourceName as any) ?? null }, - case: { id: (d.caseId as any) ?? null, name: (d.caseName as any) ?? null }, - year: (d.year as any) ?? null, + language: { id: (d.dlLangId) ?? null, name: (d.dlLangName) ?? null }, + machinetype: { id: (d.dlMachineId) ?? null, name: (d.dlMachineName) ?? null }, + scheme: { id: (d.schemeId) ?? null, name: (d.schemeName) ?? null }, + source: { id: (d.sourceId) ?? null, name: (d.sourceName) ?? null }, + case: { id: (d.caseId) ?? null, name: (d.caseName) ?? null }, + year: (d.year) ?? null, })), })); @@ -382,17 +413,17 @@ export async function getEntryById(id: number): Promise { return { id: base.id, title: base.title, - isXrated: base.isXrated as any, - machinetype: { id: (base.machinetypeId as any) ?? null, name: (base.machinetypeName as any) ?? null }, - language: { id: (base.languageId as any) ?? null, name: (base.languageName as any) ?? null }, - genre: { id: (base.genreId as any) ?? null, name: (base.genreName as any) ?? null }, - authors: authorRows as any, - publishers: publisherRows as any, - maxPlayers: (base.maxPlayers as any) ?? undefined, - availabletypeId: (base.availabletypeId as any) ?? undefined, - withoutLoadScreen: (base.withoutLoadScreen as any) ?? undefined, - withoutInlay: (base.withoutInlay as any) ?? undefined, - issueId: (base.issueId as any) ?? undefined, + isXrated: base.isXrated, + machinetype: { id: (base.machinetypeId) ?? null, name: (base.machinetypeName) ?? null }, + language: { id: (base.languageId) ?? null, name: (base.languageName) ?? null }, + genre: { id: (base.genreId) ?? null, name: (base.genreName) ?? null }, + authors: authorRows, + publishers: publisherRows, + maxPlayers: (base.maxPlayers) ?? undefined, + availabletypeId: (base.availabletypeId) ?? undefined, + withoutLoadScreen: (base.withoutLoadScreen) ?? undefined, + withoutInlay: (base.withoutInlay) ?? undefined, + issueId: (base.issueId) ?? undefined, files: fileRows.length > 0 ? fileRows.map((f) => ({ @@ -405,7 +436,7 @@ export async function getEntryById(id: number): Promise { })) : [], releases: releasesData, - downloadsFlat: downloadFlatRows.map((d: any) => ({ + downloadsFlat: downloadFlatRows.map((d) => ({ id: d.id, link: d.link, size: d.size ?? null, @@ -413,12 +444,12 @@ export async function getEntryById(id: number): Promise { comments: d.comments ?? null, isDemo: !!d.isDemo, type: { id: d.filetypeId, name: d.filetypeName }, - language: { id: (d.dlLangId as any) ?? null, name: (d.dlLangName as any) ?? null }, - machinetype: { id: (d.dlMachineId as any) ?? null, name: (d.dlMachineName as any) ?? null }, - scheme: { id: (d.schemeId as any) ?? null, name: (d.schemeName as any) ?? null }, - source: { id: (d.sourceId as any) ?? null, name: (d.sourceName as any) ?? null }, - case: { id: (d.caseId as any) ?? null, name: (d.caseName as any) ?? null }, - year: (d.year as any) ?? null, + language: { id: (d.dlLangId) ?? null, name: (d.dlLangName) ?? null }, + machinetype: { id: (d.dlMachineId) ?? null, name: (d.dlMachineName) ?? null }, + scheme: { id: (d.schemeId) ?? null, name: (d.schemeName) ?? null }, + source: { id: (d.sourceId) ?? null, name: (d.sourceName) ?? null }, + case: { id: (d.caseId) ?? null, name: (d.caseName) ?? null }, + year: (d.year) ?? null, releaseSeq: Number(d.releaseSeq), })), }; @@ -448,33 +479,33 @@ export async function searchLabels(params: LabelSearchParams): Promise, ]); const total = Number(countRows?.[0]?.total ?? 0); - return { items: items as any, page, pageSize, total }; + return { items: items, page, pageSize, total }; } // Using helper search_by_names for efficiency const pattern = `%${q}%`; const countRows = await db .select({ total: sql`count(distinct ${sql.identifier("label_id")})` }) - .from(sql`search_by_names` as any) - .where(like(sql.identifier("label_name") as any, pattern)); + .from(sql`search_by_names`) + .where(like(sql.identifier("label_name"), pattern)); const total = Number(countRows[0]?.total ?? 0); const items = await db .select({ id: labels.id, name: labels.name, labeltypeId: labels.labeltypeId }) - .from(sql`search_by_names` as any) - .innerJoin(labels, eq(labels.id as any, sql.identifier("label_id") as any)) - .where(like(sql.identifier("label_name") as any, pattern)) + .from(sql`search_by_names`) + .innerJoin(labels, eq(labels.id, sql.identifier("label_id"))) + .where(like(sql.identifier("label_name"), pattern)) .groupBy(labels.id) .orderBy(labels.name) .limit(pageSize) .offset(offset); - return { items: items as any, page, pageSize, total }; + return { items: items, page, pageSize, total }; } export async function getLabelById(id: number): Promise { const rows = await db.select().from(labels).where(eq(labels.id, id)).limit(1); - return (rows[0] as any) ?? null; + return (rows[0]) ?? null; } export interface LabelContribsParams { @@ -508,15 +539,15 @@ export async function getLabelAuthoredEntries(labelId: number, params: LabelCont }) .from(authors) .innerJoin(entries, eq(entries.id, authors.entryId)) - .leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId as any)) - .leftJoin(languages, eq(languages.id, entries.languageId as any)) + .leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId)) + .leftJoin(languages, eq(languages.id, entries.languageId)) .where(eq(authors.labelId, labelId)) .groupBy(entries.id) .orderBy(entries.title) .limit(pageSize) .offset(offset); - return { items: items as any, page, pageSize, total }; + return { items: items, page, pageSize, total }; } const pattern = `%${params.q!.toLowerCase().replace(/[^a-z0-9]+/g, "")}%`; @@ -524,8 +555,8 @@ export async function getLabelAuthoredEntries(labelId: number, params: LabelCont .select({ total: sql`count(distinct ${entries.id})` }) .from(authors) .innerJoin(entries, eq(entries.id, authors.entryId)) - .where(and(eq(authors.labelId, labelId), sql`${entries.id} in (select entry_id from ${searchByTitles} where ${searchByTitles.entryTitle} like ${pattern})`) as any); - const total = Number((countRows as any)[0]?.total ?? 0); + .where(and(eq(authors.labelId, labelId), sql`${entries.id} in (select entry_id from ${searchByTitles} where ${searchByTitles.entryTitle} like ${pattern})`)); + const total = Number((countRows)[0]?.total ?? 0); const items = await db .select({ id: entries.id, @@ -538,15 +569,15 @@ export async function getLabelAuthoredEntries(labelId: number, params: LabelCont }) .from(authors) .innerJoin(entries, eq(entries.id, authors.entryId)) - .leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId as any)) - .leftJoin(languages, eq(languages.id, entries.languageId as any)) - .where(and(eq(authors.labelId, labelId), sql`${entries.id} in (select entry_id from ${searchByTitles} where ${searchByTitles.entryTitle} like ${pattern})`) as any) + .leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId)) + .leftJoin(languages, eq(languages.id, entries.languageId)) + .where(and(eq(authors.labelId, labelId), sql`${entries.id} in (select entry_id from ${searchByTitles} where ${searchByTitles.entryTitle} like ${pattern})`)) .groupBy(entries.id) .orderBy(entries.title) .limit(pageSize) .offset(offset); - return { items: items as any, page, pageSize, total }; + return { items: items, page, pageSize, total }; } export async function getLabelPublishedEntries(labelId: number, params: LabelContribsParams): Promise> { @@ -574,15 +605,15 @@ export async function getLabelPublishedEntries(labelId: number, params: LabelCon }) .from(publishers) .innerJoin(entries, eq(entries.id, publishers.entryId)) - .leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId as any)) - .leftJoin(languages, eq(languages.id, entries.languageId as any)) + .leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId)) + .leftJoin(languages, eq(languages.id, entries.languageId)) .where(eq(publishers.labelId, labelId)) .groupBy(entries.id) .orderBy(entries.title) .limit(pageSize) .offset(offset); - return { items: items as any, page, pageSize, total }; + return { items: items, page, pageSize, total }; } const pattern = `%${params.q!.toLowerCase().replace(/[^a-z0-9]+/g, "")}%`; @@ -590,8 +621,8 @@ export async function getLabelPublishedEntries(labelId: number, params: LabelCon .select({ total: sql`count(distinct ${entries.id})` }) .from(publishers) .innerJoin(entries, eq(entries.id, publishers.entryId)) - .where(and(eq(publishers.labelId, labelId), sql`${entries.id} in (select entry_id from ${searchByTitles} where ${searchByTitles.entryTitle} like ${pattern})`) as any); - const total = Number((countRows as any)[0]?.total ?? 0); + .where(and(eq(publishers.labelId, labelId), sql`${entries.id} in (select entry_id from ${searchByTitles} where ${searchByTitles.entryTitle} like ${pattern})`)); + const total = Number((countRows)[0]?.total ?? 0); const items = await db .select({ id: entries.id, @@ -604,15 +635,15 @@ export async function getLabelPublishedEntries(labelId: number, params: LabelCon }) .from(publishers) .innerJoin(entries, eq(entries.id, publishers.entryId)) - .leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId as any)) - .leftJoin(languages, eq(languages.id, entries.languageId as any)) - .where(and(eq(publishers.labelId, labelId), sql`${entries.id} in (select entry_id from ${searchByTitles} where ${searchByTitles.entryTitle} like ${pattern})`) as any) + .leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId)) + .leftJoin(languages, eq(languages.id, entries.languageId)) + .where(and(eq(publishers.labelId, labelId), sql`${entries.id} in (select entry_id from ${searchByTitles} where ${searchByTitles.entryTitle} like ${pattern})`)) .groupBy(entries.id) .orderBy(entries.title) .limit(pageSize) .offset(offset); - return { items: items as any, page, pageSize, total }; + return { items: items, page, pageSize, total }; } // ----- Lookups lists and category browsing ----- @@ -646,10 +677,10 @@ export async function searchLanguages(params: SimpleSearchParams) { if (!q) { const [items, countRows] = await Promise.all([ db.select().from(languages).orderBy(languages.name).limit(pageSize).offset(offset), - db.select({ total: sql`count(*)` }).from(languages) as unknown as Promise<{ total: number }[]>, + db.select({ total: sql`count(*)` }).from(languages), ]); const total = Number(countRows?.[0]?.total ?? 0); - return { items: items as any, page, pageSize, total }; + return { items, page, pageSize, total }; } const pattern = `%${q}%`; @@ -657,14 +688,14 @@ export async function searchLanguages(params: SimpleSearchParams) { db .select() .from(languages) - .where(like(languages.name as any, pattern)) + .where(like(languages.name, pattern)) .orderBy(languages.name) .limit(pageSize) .offset(offset), - db.select({ total: sql`count(*)` }).from(languages).where(like(languages.name as any, pattern)) as unknown as Promise<{ total: number }[]>, + db.select({ total: sql`count(*)` }).from(languages).where(like(languages.name, pattern)), ]); const total = Number(countRows?.[0]?.total ?? 0); - return { items: items as any, page, pageSize, total }; + return { items, page, pageSize, total }; } export async function searchGenres(params: SimpleSearchParams) { @@ -676,10 +707,10 @@ export async function searchGenres(params: SimpleSearchParams) { if (!q) { const [items, countRows] = await Promise.all([ db.select().from(genretypes).orderBy(genretypes.name).limit(pageSize).offset(offset), - db.select({ total: sql`count(*)` }).from(genretypes) as unknown as Promise<{ total: number }[]>, + db.select({ total: sql`count(*)` }).from(genretypes), ]); const total = Number(countRows?.[0]?.total ?? 0); - return { items: items as any, page, pageSize, total }; + return { items, page, pageSize, total }; } const pattern = `%${q}%`; @@ -687,14 +718,14 @@ export async function searchGenres(params: SimpleSearchParams) { db .select() .from(genretypes) - .where(like(genretypes.name as any, pattern)) + .where(like(genretypes.name, pattern)) .orderBy(genretypes.name) .limit(pageSize) .offset(offset), - db.select({ total: sql`count(*)` }).from(genretypes).where(like(genretypes.name as any, pattern)) as unknown as Promise<{ total: number }[]>, + db.select({ total: sql`count(*)` }).from(genretypes).where(like(genretypes.name, pattern)), ]); const total = Number(countRows?.[0]?.total ?? 0); - return { items: items as any, page, pageSize, total }; + return { items, page, pageSize, total }; } export async function searchMachinetypes(params: SimpleSearchParams) { @@ -706,10 +737,10 @@ export async function searchMachinetypes(params: SimpleSearchParams) { if (!q) { const [items, countRows] = await Promise.all([ db.select().from(machinetypes).orderBy(machinetypes.name).limit(pageSize).offset(offset), - db.select({ total: sql`count(*)` }).from(machinetypes) as unknown as Promise<{ total: number }[]>, + db.select({ total: sql`count(*)` }).from(machinetypes), ]); const total = Number(countRows?.[0]?.total ?? 0); - return { items: items as any, page, pageSize, total }; + return { items, page, pageSize, total }; } const pattern = `%${q}%`; @@ -717,14 +748,14 @@ export async function searchMachinetypes(params: SimpleSearchParams) { db .select() .from(machinetypes) - .where(like(machinetypes.name as any, pattern)) + .where(like(machinetypes.name, pattern)) .orderBy(machinetypes.name) .limit(pageSize) .offset(offset), - db.select({ total: sql`count(*)` }).from(machinetypes).where(like(machinetypes.name as any, pattern)) as unknown as Promise<{ total: number }[]>, + db.select({ total: sql`count(*)` }).from(machinetypes).where(like(machinetypes.name, pattern)), ]); - const total = Number(countRows?.[0]?.total ?? 0); - return { items: items as any, page, pageSize, total }; + const total = Number((countRows as { total: number }[])[0]?.total ?? 0); + return { items, page, pageSize, total }; } export async function entriesByGenre( @@ -737,10 +768,10 @@ export async function entriesByGenre( const hasQ = !!(q && q.trim()); if (!hasQ) { - const countRows = (await db + const countRows = await db .select({ total: sql`count(*)` }) .from(entries) - .where(eq(entries.genretypeId, genreId as any))) as unknown as { total: number }[]; + .where(eq(entries.genretypeId, genreId)); const items = await db .select({ id: entries.id, @@ -752,21 +783,21 @@ export async function entriesByGenre( languageName: languages.name, }) .from(entries) - .leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId as any)) - .leftJoin(languages, eq(languages.id, entries.languageId as any)) - .where(eq(entries.genretypeId, genreId as any)) + .leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId)) + .leftJoin(languages, eq(languages.id, entries.languageId)) + .where(eq(entries.genretypeId, genreId)) .orderBy(entries.title) .limit(pageSize) .offset(offset); - return { items: items as any, page, pageSize, total: Number(countRows?.[0]?.total ?? 0) }; + return { items, page, pageSize, total: Number(countRows?.[0]?.total ?? 0) }; } const pattern = `%${q!.toLowerCase().replace(/[^a-z0-9]+/g, "")}%`; const countRows = await db .select({ total: sql`count(distinct ${entries.id})` }) .from(entries) - .where(and(eq(entries.genretypeId, genreId as any), sql`id in (select entry_id from ${searchByTitles} where ${searchByTitles.entryTitle} like ${pattern})`) as any); - const total = Number((countRows as any)[0]?.total ?? 0); + .where(and(eq(entries.genretypeId, genreId), sql`id in (select entry_id from ${searchByTitles} where ${searchByTitles.entryTitle} like ${pattern})`)); + const total = Number(countRows[0]?.total ?? 0); const items = await db .select({ id: entries.id, @@ -778,14 +809,14 @@ export async function entriesByGenre( languageName: languages.name, }) .from(entries) - .leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId as any)) - .leftJoin(languages, eq(languages.id, entries.languageId as any)) - .where(and(eq(entries.genretypeId, genreId as any), sql`id in (select entry_id from ${searchByTitles} where ${searchByTitles.entryTitle} like ${pattern})`) as any) + .leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId)) + .leftJoin(languages, eq(languages.id, entries.languageId)) + .where(and(eq(entries.genretypeId, genreId), sql`id in (select entry_id from ${searchByTitles} where ${searchByTitles.entryTitle} like ${pattern})`)) .groupBy(entries.id) .orderBy(entries.title) .limit(pageSize) .offset(offset); - return { items: items as any, page, pageSize, total }; + return { items, page, pageSize, total }; } export async function entriesByLanguage( @@ -798,10 +829,10 @@ export async function entriesByLanguage( const hasQ = !!(q && q.trim()); if (!hasQ) { - const countRows = (await db + const countRows = await db .select({ total: sql`count(*)` }) .from(entries) - .where(eq(entries.languageId, langId as any))) as unknown as { total: number }[]; + .where(eq(entries.languageId, langId)); const items = await db .select({ id: entries.id, @@ -813,21 +844,21 @@ export async function entriesByLanguage( languageName: languages.name, }) .from(entries) - .leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId as any)) - .leftJoin(languages, eq(languages.id, entries.languageId as any)) - .where(eq(entries.languageId, langId as any)) + .leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId)) + .leftJoin(languages, eq(languages.id, entries.languageId)) + .where(eq(entries.languageId, langId)) .orderBy(entries.title) .limit(pageSize) .offset(offset); - return { items: items as any, page, pageSize, total: Number(countRows?.[0]?.total ?? 0) }; + return { items, page, pageSize, total: Number(countRows?.[0]?.total ?? 0) }; } const pattern = `%${q!.toLowerCase().replace(/[^a-z0-9]+/g, "")}%`; const countRows = await db .select({ total: sql`count(distinct ${entries.id})` }) .from(entries) - .where(and(eq(entries.languageId, langId as any), sql`id in (select entry_id from ${searchByTitles} where ${searchByTitles.entryTitle} like ${pattern})`) as any); - const total = Number((countRows as any)[0]?.total ?? 0); + .where(and(eq(entries.languageId, langId), sql`id in (select entry_id from ${searchByTitles} where ${searchByTitles.entryTitle} like ${pattern})`)); + const total = Number(countRows[0]?.total ?? 0); const items = await db .select({ id: entries.id, @@ -839,14 +870,14 @@ export async function entriesByLanguage( languageName: languages.name, }) .from(entries) - .leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId as any)) - .leftJoin(languages, eq(languages.id, entries.languageId as any)) - .where(and(eq(entries.languageId, langId as any), sql`id in (select entry_id from ${searchByTitles} where ${searchByTitles.entryTitle} like ${pattern})`) as any) + .leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId)) + .leftJoin(languages, eq(languages.id, entries.languageId)) + .where(and(eq(entries.languageId, langId), sql`id in (select entry_id from ${searchByTitles} where ${searchByTitles.entryTitle} like ${pattern})`)) .groupBy(entries.id) .orderBy(entries.title) .limit(pageSize) .offset(offset); - return { items: items as any, page, pageSize, total }; + return { items, page, pageSize, total }; } export async function entriesByMachinetype( @@ -859,10 +890,10 @@ export async function entriesByMachinetype( const hasQ = !!(q && q.trim()); if (!hasQ) { - const countRows = (await db + const countRows = await db .select({ total: sql`count(*)` }) .from(entries) - .where(eq(entries.machinetypeId, mtId as any))) as unknown as { total: number }[]; + .where(eq(entries.machinetypeId, mtId)); const items = await db .select({ id: entries.id, @@ -874,21 +905,21 @@ export async function entriesByMachinetype( languageName: languages.name, }) .from(entries) - .leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId as any)) - .leftJoin(languages, eq(languages.id, entries.languageId as any)) - .where(eq(entries.machinetypeId, mtId as any)) + .leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId)) + .leftJoin(languages, eq(languages.id, entries.languageId)) + .where(eq(entries.machinetypeId, mtId)) .orderBy(entries.title) .limit(pageSize) .offset(offset); - return { items: items as any, page, pageSize, total: Number(countRows?.[0]?.total ?? 0) }; + return { items, page, pageSize, total: Number(countRows?.[0]?.total ?? 0) }; } const pattern = `%${q!.toLowerCase().replace(/[^a-z0-9]+/g, "")}%`; const countRows = await db .select({ total: sql`count(distinct ${entries.id})` }) .from(entries) - .where(and(eq(entries.machinetypeId, mtId as any), sql`id in (select entry_id from ${searchByTitles} where ${searchByTitles.entryTitle} like ${pattern})`) as any); - const total = Number((countRows as any)[0]?.total ?? 0); + .where(and(eq(entries.machinetypeId, mtId), sql`id in (select entry_id from ${searchByTitles} where ${searchByTitles.entryTitle} like ${pattern})`)); + const total = Number(countRows[0]?.total ?? 0); const items = await db .select({ id: entries.id, @@ -900,14 +931,14 @@ export async function entriesByMachinetype( languageName: languages.name, }) .from(entries) - .leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId as any)) - .leftJoin(languages, eq(languages.id, entries.languageId as any)) - .where(and(eq(entries.machinetypeId, mtId as any), sql`id in (select entry_id from ${searchByTitles} where ${searchByTitles.entryTitle} like ${pattern})`) as any) + .leftJoin(machinetypes, eq(machinetypes.id, entries.machinetypeId)) + .leftJoin(languages, eq(languages.id, entries.languageId)) + .where(and(eq(entries.machinetypeId, mtId), sql`id in (select entry_id from ${searchByTitles} where ${searchByTitles.entryTitle} like ${pattern})`)) .groupBy(entries.id) .orderBy(entries.title) .limit(pageSize) .offset(offset); - return { items: items as any, page, pageSize, total }; + return { items, page, pageSize, total }; } // ----- Facets for search ----- @@ -917,7 +948,7 @@ export async function getEntryFacets(params: SearchParams): Promise const pattern = q ? `%${q.toLowerCase().replace(/[^a-z0-9]+/g, "")}%` : null; // Build base WHERE SQL snippet considering q + filters - const whereParts: any[] = []; + const whereParts: Array> = []; if (pattern) { whereParts.push(sql`id in (select entry_id from ${searchByTitles} where ${searchByTitles.entryTitle} like ${pattern})`); } @@ -925,7 +956,7 @@ export async function getEntryFacets(params: SearchParams): Promise if (params.languageId) whereParts.push(sql`${entries.languageId} = ${params.languageId}`); if (params.machinetypeId) whereParts.push(sql`${entries.machinetypeId} = ${params.machinetypeId}`); - const whereSql = whereParts.length ? sql.join([sql`where `, sql.join(whereParts as any, sql` and `)], sql``) : sql``; + const whereSql = whereParts.length ? sql.join([sql`where `, sql.join(whereParts, sql` and `)], sql``) : sql``; // Genres facet const genresRows = await db.execute(sql` @@ -935,7 +966,7 @@ export async function getEntryFacets(params: SearchParams): Promise ${whereSql} group by e.genretype_id, gt.text order by count desc, name asc - `) as any; + `); // Languages facet const langRows = await db.execute(sql` @@ -945,7 +976,7 @@ export async function getEntryFacets(params: SearchParams): Promise ${whereSql} group by e.language_id, l.text order by count desc, name asc - `) as any; + `); // Machinetypes facet const mtRows = await db.execute(sql` @@ -955,12 +986,19 @@ export async function getEntryFacets(params: SearchParams): Promise ${whereSql} group by e.machinetype_id, m.text order by count desc, name asc - `) as any; + `); + type FacetRow = { id: number | string | null; name: string | null; count: number | string }; return { - genres: (genresRows as any[]).map((r: any) => ({ id: Number(r.id), name: r.name ?? "(none)", count: Number(r.count) })).filter((r) => !!r.id), - languages: (langRows as any[]).map((r: any) => ({ id: String(r.id), name: r.name ?? "(none)", count: Number(r.count) })).filter((r) => !!r.id), - machinetypes: (mtRows as any[]).map((r: any) => ({ id: Number(r.id), name: r.name ?? "(none)", count: Number(r.count) })).filter((r) => !!r.id), + genres: (genresRows as unknown as FacetRow[]) + .map((r) => ({ id: Number(r.id), name: r.name ?? "(none)", count: Number(r.count) })) + .filter((r) => !!r.id), + languages: (langRows as unknown as FacetRow[]) + .map((r) => ({ id: String(r.id), name: r.name ?? "(none)", count: Number(r.count) })) + .filter((r) => !!r.id), + machinetypes: (mtRows as unknown as FacetRow[]) + .map((r) => ({ id: Number(r.id), name: r.name ?? "(none)", count: Number(r.count) })) + .filter((r) => !!r.id), }; } @@ -996,20 +1034,20 @@ export async function searchReleases(params: ReleaseSearchParams): Promise> = []; if (q) { const pattern = `%${q.toLowerCase().replace(/[^a-z0-9]+/g, "")}%`; wherePartsQB.push(sql`${releases.entryId} in (select ${searchByTitles.entryId} from ${searchByTitles} where ${searchByTitles.entryTitle} like ${pattern})`); } if (params.year != null) { - wherePartsQB.push(eq(releases.releaseYear as any, params.year as any)); + wherePartsQB.push(eq(releases.releaseYear, params.year)); } // Optional filters via downloads table: use EXISTS for performance and correctness // IMPORTANT: when hand-writing SQL with an aliased table, we must render // "from downloads as d" explicitly; using only the alias identifier ("d") // would produce "from `d`" which MySQL interprets as a literal table. - const dlConds: any[] = []; + const dlConds: Array> = []; if (params.dLanguageId) dlConds.push(sql`d.language_id = ${params.dLanguageId}`); if (params.dMachinetypeId != null) dlConds.push(sql`d.machinetype_id = ${params.dMachinetypeId}`); if (params.filetypeId != null) dlConds.push(sql`d.filetype_id = ${params.filetypeId}`); @@ -1024,34 +1062,41 @@ export async function searchReleases(params: ReleaseSearchParams): Promise`count(*)` }) .from(releases) - .where(whereExpr as any)) as unknown as { total: number }[]; + .where(whereExpr ?? sql`true`); const total = Number(countRows?.[0]?.total ?? 0); // Rows via Drizzle QB to avoid tuple/field leakage - const orderByParts: any[] = []; + let orderBy1; + let orderBy2; + let orderBy3; switch (params.sort) { case "year_asc": - orderByParts.push(asc(releases.releaseYear as any), asc(releases.entryId as any), asc(releases.releaseSeq as any)); + orderBy1 = asc(releases.releaseYear); + orderBy2 = asc(releases.entryId); + orderBy3 = asc(releases.releaseSeq); break; case "title": - orderByParts.push(asc(entries.title as any), desc(releases.releaseYear as any), asc(releases.releaseSeq as any)); + orderBy1 = asc(entries.title); + orderBy2 = desc(releases.releaseYear); + orderBy3 = asc(releases.releaseSeq); break; case "entry_id_desc": - orderByParts.push(desc(releases.entryId as any), desc(releases.releaseSeq as any)); + orderBy1 = desc(releases.entryId); + orderBy2 = desc(releases.releaseSeq); break; case "year_desc": default: - orderByParts.push(desc(releases.releaseYear as any), desc(releases.entryId as any), desc(releases.releaseSeq as any)); + orderBy1 = desc(releases.releaseYear); + orderBy2 = desc(releases.entryId); + orderBy3 = desc(releases.releaseSeq); break; } @@ -1063,14 +1108,14 @@ export async function searchReleases(params: ReleaseSearchParams): Promise ({ + const items: ReleaseListItem[] = rowsQB.map((r) => ({ entryId: Number(r.entryId), releaseSeq: Number(r.releaseSeq), entryTitle: r.entryTitle ?? "", diff --git a/src/utils/register_parsers/reg_default.ts b/src/utils/register_parsers/reg_default.ts index ea37f6d..453df22 100644 --- a/src/utils/register_parsers/reg_default.ts +++ b/src/utils/register_parsers/reg_default.ts @@ -10,13 +10,13 @@ export const parseDescriptionDefault = (reg: Register, description: string) => { // Footnote multiline state let inFootnote = false; let footnoteBaseIndent = 0; - let footnoteTarget: 'global' | 'access' | null = null; + // let footnoteTarget: 'global' | 'access' | null = null; let currentFootnote: Note | null = null; const endFootnoteIfActive = () => { inFootnote = false; footnoteBaseIndent = 0; - footnoteTarget = null; + // footnoteTarget = null; currentFootnote = null; }; @@ -89,10 +89,10 @@ export const parseDescriptionDefault = (reg: Register, description: string) => { const note: Note = { ref: noteMatch[1], text: noteMatch[2] }; if (currentAccess) { accessData.notes.push(note); - footnoteTarget = 'access'; + // footnoteTarget = 'access'; } else { reg.notes.push(note); - footnoteTarget = 'global'; + // footnoteTarget = 'global'; } currentFootnote = note; inFootnote = true;