Files
2026-02-13 11:01:44 +01:00

73 lines
1.9 KiB
TypeScript

import { source } from "@/app/source";
import { findNeighbour } from "fumadocs-core/page-tree";
import { patchPageTree } from "@/lib/patch-pagetree";
import { NextResponse } from "next/server";
export async function GET() {
const allPages = source.getPages();
const patchedTree = patchPageTree(source.pageTree);
const pagesWithNoNeighbors: Array<{
url: string;
title: string;
slugs: string[];
}> = [];
const pagesWithOneNeighbor: Array<{
url: string;
title: string;
slugs: string[];
hasPrev: boolean;
hasNext: boolean;
prevUrl?: string;
nextUrl?: string;
}> = [];
// Check each page for neighbors
for (const page of allPages) {
const { previous, next } = findNeighbour(patchedTree, page.url);
const hasPrev = !!previous;
const hasNext = !!next;
if (!hasPrev && !hasNext) {
pagesWithNoNeighbors.push({
url: page.url,
title: page.data.title || "Untitled",
slugs: Array.isArray(page.slugs) ? page.slugs : [],
});
} else if ((hasPrev && !hasNext) || (!hasPrev && hasNext)) {
pagesWithOneNeighbor.push({
url: page.url,
title: page.data.title || "Untitled",
slugs: Array.isArray(page.slugs) ? page.slugs : [],
hasPrev,
hasNext,
prevUrl: previous?.url,
nextUrl: next?.url,
});
}
}
return NextResponse.json(
{
summary: {
totalPages: allPages.length,
pagesWithNoNeighbors: pagesWithNoNeighbors.length,
pagesWithOneNeighbor: pagesWithOneNeighbor.length,
pagesWithBothNeighbors:
allPages.length -
pagesWithNoNeighbors.length -
pagesWithOneNeighbor.length,
},
pagesWithNoNeighbors,
pagesWithOneNeighbor: pagesWithOneNeighbor.slice(0, 20), // Limit to first 20 for readability
},
{
headers: {
"Content-Type": "application/json",
},
},
);
}