fumadocs-core
Version:
The library for building a documentation website in any React.js framework
85 lines (83 loc) • 2.12 kB
JavaScript
import {
getTableOfContents
} from "../chunk-CX7IQ5Z6.js";
import "../chunk-QMATWJ5F.js";
import {
findNeighbour,
findPath,
flattenTree,
getPageTreePeers,
getPageTreeRoots
} from "../chunk-2IYQ7QMS.js";
import {
getGithubLastEdit
} from "../chunk-HSBNG7QC.js";
import "../chunk-JSBRDJBE.js";
// src/server/metadata.ts
function createMetadataImage(options) {
const { filename = "image.png", imageRoute = "/docs-og" } = options;
function getImageMeta(slugs) {
return {
alt: "Banner",
url: `/${[...imageRoute.split("/"), ...slugs, filename].filter((v) => v.length > 0).join("/")}`,
width: 1200,
height: 630
};
}
return {
getImageMeta,
withImage(slugs, data) {
const imageData = getImageMeta(slugs);
return {
...data,
openGraph: {
images: imageData,
...data?.openGraph
},
twitter: {
images: imageData,
card: "summary_large_image",
...data?.twitter
}
};
},
generateParams() {
return options.source.generateParams().map((params) => ({
...params,
slug: [...params.slug, filename]
}));
},
createAPI(handler) {
return async (req, args) => {
const params = await args.params;
if (!params || !("slug" in params) || params.slug === void 0)
throw new Error(`Invalid params: ${JSON.stringify(params)}`);
const lang = "lang" in params && typeof params.lang === "string" ? params.lang : void 0;
const input = {
slug: Array.isArray(params.slug) ? params.slug : [params.slug],
lang
};
const page = options.source.getPage(
input.slug.slice(0, -1),
//remove filename
lang
);
if (!page)
return new Response(null, {
status: 404
});
return handler(page, req, { params: input });
};
}
};
}
export {
createMetadataImage,
findNeighbour,
findPath,
flattenTree,
getGithubLastEdit,
getPageTreePeers,
getPageTreeRoots,
getTableOfContents
};