SurfSense/surfsense_web/lib/source.ts
yeranyang 942077c773 perf(docs): replace full lucide barrel import with explicit icon whitelist
Fixes #1241

The docs bundle was importing `{ icons }` from lucide-react, which pulls
the entire Lucide icon library (~1 400 SVGs, ~500 kB of JS) into the Next.js
docs bundle even though only nine icons are used in docs frontmatter and
meta.json files.

Replace with a hand-maintained DOCS_ICONS whitelist that imports only the
icons that are actually referenced (BookOpen, ClipboardCheck, Compass,
Container, Download, FlaskConical, Heart, Unplug, Wrench).

To add a new docs icon: import it from lucide-react and add it to the
DOCS_ICONS record. The icon() callback remains the same for callers.
2026-04-29 12:34:13 +08:00

39 lines
881 B
TypeScript

import { loader } from "fumadocs-core/source";
import {
BookOpen,
ClipboardCheck,
Compass,
Container,
Download,
FlaskConical,
Heart,
Unplug,
Wrench,
} from "lucide-react";
import { createElement } from "react";
import { docs } from "@/.source/server";
/** Explicit whitelist of Lucide icons used in docs frontmatter / meta.json.
* Importing the full `icons` barrel would pull every Lucide icon (~1 400 SVGs)
* into the docs bundle even though only a handful are referenced. Add new icons
* here as docs pages are added.
*/
const DOCS_ICONS: Record<string, React.ComponentType> = {
BookOpen,
ClipboardCheck,
Compass,
Container,
Download,
FlaskConical,
Heart,
Unplug,
Wrench,
};
export const source = loader({
baseUrl: "/docs",
source: docs.toFumadocsSource(),
icon(icon) {
if (icon && icon in DOCS_ICONS) return createElement(DOCS_ICONS[icon]);
},
});