docs updates

This commit is contained in:
Raj Nandan Sharma
2026-02-22 15:55:49 +05:30
parent 1c6bed1297
commit cbc48d2ddc
63 changed files with 2713 additions and 8563 deletions
+64 -6
View File
@@ -28,9 +28,16 @@ const CONTENT_DIR = path.join(__dirname, "../src/routes/(docs)/docs/content");
const REDIS_DOCS_KEY = "kener-docs:search:documents";
interface DocsPage {
title: string;
content?: string;
slug?: string;
pages?: DocsPageSource[];
}
interface DocsPageSource {
title: string;
slug: string;
pages?: DocsPage[];
pages?: DocsPageSource[];
}
interface DocsSidebarGroup {
@@ -38,10 +45,26 @@ interface DocsSidebarGroup {
pages: DocsPage[];
}
interface DocsConfig {
interface DocsNavTab {
name: string;
sidebar: DocsSidebarGroup[];
}
interface DocsVersion {
name: string;
slug: string;
latest?: boolean;
content: {
navigation?: {
tabs?: DocsNavTab[];
};
};
}
interface DocsRootConfig {
versions: DocsVersion[];
}
interface DocsSearchDocument {
id: string;
title: string;
@@ -86,7 +109,11 @@ function getMarkdownContent(slug: string): string | null {
/**
* Recursively collect all pages from sidebar groups (including nested pages)
*/
function collectPages(pages: DocsPage[], group: string, result: Array<{ page: DocsPage; group: string }>): void {
function collectPages(
pages: DocsPageSource[],
group: string,
result: Array<{ page: DocsPageSource; group: string }>,
): void {
for (const page of pages) {
result.push({ page, group });
if (page.pages && page.pages.length > 0) {
@@ -95,6 +122,27 @@ function collectPages(pages: DocsPage[], group: string, result: Array<{ page: Do
}
}
function normalizePage(page: DocsPage): DocsPageSource {
const resolvedPath = page.content ?? page.slug;
if (!resolvedPath) {
throw new Error(`[index-docs] Page \"${page.title}\" must define content or slug`);
}
return {
title: page.title,
slug: resolvedPath,
pages: page.pages?.map(normalizePage),
};
}
function normalizeSidebar(sidebar: DocsSidebarGroup[]): Array<{ group: string; pages: DocsPageSource[] }> {
return sidebar.map((group) => ({
group: group.group,
pages: group.pages.map(normalizePage),
}));
}
async function main(): Promise<void> {
// Validate Redis URL
if (!process.env.REDIS_URL) {
@@ -108,15 +156,25 @@ async function main(): Promise<void> {
process.exit(1);
}
const config: DocsConfig = JSON.parse(fs.readFileSync(DOCS_JSON_PATH, "utf-8"));
const config: DocsRootConfig = JSON.parse(fs.readFileSync(DOCS_JSON_PATH, "utf-8"));
const latestVersion = config.versions.find((version) => version.latest) ?? config.versions[0];
if (!latestVersion) {
console.error("[index-docs] No versions found in docs.json");
process.exit(1);
}
const primaryTabSidebar = latestVersion.content.navigation?.tabs?.[0]?.sidebar ?? [];
const sidebar = normalizeSidebar(primaryTabSidebar);
const documents: DocsSearchDocument[] = [];
// Collect all pages from sidebar
const allPages: Array<{ page: DocsPage; group: string }> = [];
for (const sidebarGroup of config.sidebar) {
const allPages: Array<{ page: DocsPageSource; group: string }> = [];
for (const sidebarGroup of sidebar) {
collectPages(sidebarGroup.pages, sidebarGroup.group, allPages);
}
console.log(`[index-docs] Indexing version ${latestVersion.slug}`);
console.log(`[index-docs] Found ${allPages.length} pages to index`);
for (const { page, group } of allPages) {