fix(acadenice): filter undefined pageIds before sql.lit() in graph — Patch 030

loadPageMeta logged 'invalid immediate value undefined' on every graph
request. Cause: when an edge row has a null source/target_page_id (rare,
but happens during partial backlink reindex), the resulting finalPageIds
set carries undefined entries, and sql.lit(undefined) rejects.

Filter cleanIds to string-only and return early if empty. The catch
block stays as a safety net for unrelated SQL errors.

Verified via curl: GET /api/acadenice/graph now returns 200 with no
ERROR log line.

Patch 030.
This commit is contained in:
Corentin JOGUET 2026-05-08 14:08:34 +02:00
parent 243168a3f8
commit 3af579498b

View file

@ -424,10 +424,17 @@ export class GraphService {
pageIds: string[],
spaceId: string | undefined,
): Promise<PageMetaRow[]> {
if (pageIds.length === 0) return [];
// Filter out undefined / null / empty entries before binding — sql.lit
// throws "invalid immediate value undefined" otherwise. Edges with a
// missing source/target page id would surface here when finalPageIds is
// assembled from raw rows.
const cleanIds = pageIds.filter(
(id): id is string => typeof id === 'string' && id.length > 0,
);
if (cleanIds.length === 0) return [];
try {
const idList = sql.join(pageIds.map((id) => sql.lit(id)));
const idList = sql.join(cleanIds.map((id) => sql.lit(id)));
const spaceFilter = spaceId ? sql`AND sp.id = ${spaceId}` : sql``;
const rows = await sql<PageMetaRow>`