From 25093503bbb18778e454719816383d204ef29f0f Mon Sep 17 00:00:00 2001 From: je-contractor Date: Mon, 2 Feb 2026 12:58:45 -0800 Subject: [PATCH] feat(content-indexer): add description field to nav items Add description to PageNavItem and EndpointNavItem types so descriptions are available in the navigation tree without extra requests. Uses frontmatter description for pages and summary for OpenAPI/OpenRPC endpoints. --- src/content-indexer/types/navigation.ts | 2 ++ .../visitors/processors/process-openapi.ts | 3 ++- .../visitors/processors/process-openrpc.ts | 9 ++++++--- src/content-indexer/visitors/visit-page.ts | 10 ++++++---- 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/content-indexer/types/navigation.ts b/src/content-indexer/types/navigation.ts index 715487492..8246b3925 100644 --- a/src/content-indexer/types/navigation.ts +++ b/src/content-indexer/types/navigation.ts @@ -7,12 +7,14 @@ interface BaseNavItem { interface PageNavItem extends BaseNavItem { type: "page"; path: string; + description?: string; } interface EndpointNavItem extends BaseNavItem { type: "endpoint"; path: string; method: string; + description?: string; } interface SectionNavItem extends BaseNavItem { diff --git a/src/content-indexer/visitors/processors/process-openapi.ts b/src/content-indexer/visitors/processors/process-openapi.ts index 4bd63fa65..49db77d86 100644 --- a/src/content-indexer/visitors/processors/process-openapi.ts +++ b/src/content-indexer/visitors/processors/process-openapi.ts @@ -115,11 +115,11 @@ const buildOpenApiNavigation = ({ ); const title = getOperationTitle(operationObj, operation.operationId); + const summary = getOperationSummary(operationObj); // Build Algolia record if not hidden if (!isHidden) { const description = getOperationDescription(operationObj); - const summary = getOperationSummary(operationObj); const breadcrumbs = apiSectionBreadcrumb ? [...navigationAncestors, apiSectionBreadcrumb] @@ -141,6 +141,7 @@ const buildOpenApiNavigation = ({ path: `/${finalPath}`, method: operation.method, type: "endpoint" as const, + description: summary, }; }); diff --git a/src/content-indexer/visitors/processors/process-openrpc.ts b/src/content-indexer/visitors/processors/process-openrpc.ts index 21efc5a7c..cebd434e2 100644 --- a/src/content-indexer/visitors/processors/process-openrpc.ts +++ b/src/content-indexer/visitors/processors/process-openrpc.ts @@ -69,14 +69,16 @@ export const processOpenRpcSpec = ({ tab, }; + const summary = + method.summary || + (method.description ? removeMd(method.description) : undefined); + // Build Algolia record if not hidden if (!isHidden) { const description = method.description ? removeMd(method.description) : method.summary || ""; - const summary = - method.summary || - (method.description ? removeMd(method.description) : undefined); + const breadcrumbs = apiSectionBreadcrumb ? [...navigationAncestors, apiSectionBreadcrumb] : navigationAncestors; @@ -98,6 +100,7 @@ export const processOpenRpcSpec = ({ path: `/${finalPath}`, method: "POST", type: "endpoint", + description: summary, }); }); diff --git a/src/content-indexer/visitors/visit-page.ts b/src/content-indexer/visitors/visit-page.ts index 0853d8ee8..83e2f0d32 100644 --- a/src/content-indexer/visitors/visit-page.ts +++ b/src/content-indexer/visitors/visit-page.ts @@ -55,21 +55,23 @@ export const visitPage = ({ }; // Build nav item (skip if hidden) + const descriptionRaw = + cached?.frontmatter.description || cached?.frontmatter.subtitle; + const description = + typeof descriptionRaw === "string" ? descriptionRaw : undefined; + const navItem: NavItem | undefined = pageItem.hidden ? undefined : { title: pageItem.page, path: `/${finalPath}`, type: "page", + description, }; // Build Algolia record (if content available and not hidden) if (cached && navItem) { const title = cached.frontmatter.title || pageItem.page; - const descriptionRaw = - cached.frontmatter.description || cached.frontmatter.subtitle; - const description = - typeof descriptionRaw === "string" ? descriptionRaw : undefined; context.addAlgoliaRecord({ pageType: "Guide", path: finalPath,