From e13aa463115b1b462e377a60d8dbe2e968e47737 Mon Sep 17 00:00:00 2001 From: MapleLeaf <19603573+itsMapleLeaf@users.noreply.github.com> Date: Sun, 2 Jan 2022 20:10:22 -0600 Subject: [PATCH] generate guide links at build time --- .../src/components/guide-page-layout.tsx | 2 +- .../src/components/main-navigation.tsx | 2 +- .../docs-new/src/data/guide-links.preval.tsx | 34 +++++++++++++++++++ packages/docs-new/src/data/guide-links.tsx | 3 -- 4 files changed, 36 insertions(+), 5 deletions(-) create mode 100644 packages/docs-new/src/data/guide-links.preval.tsx delete mode 100644 packages/docs-new/src/data/guide-links.tsx diff --git a/packages/docs-new/src/components/guide-page-layout.tsx b/packages/docs-new/src/components/guide-page-layout.tsx index d9c5cf4..129a49c 100644 --- a/packages/docs-new/src/components/guide-page-layout.tsx +++ b/packages/docs-new/src/components/guide-page-layout.tsx @@ -1,5 +1,5 @@ import clsx from "clsx" -import { guideLinks } from "../data/guide-links" +import { guideLinks } from "../data/guide-links.preval" import { useScrolled } from "../hooks/dom/use-scrolled" import { docsProseClass, diff --git a/packages/docs-new/src/components/main-navigation.tsx b/packages/docs-new/src/components/main-navigation.tsx index 790c5b0..1c0d14e 100644 --- a/packages/docs-new/src/components/main-navigation.tsx +++ b/packages/docs-new/src/components/main-navigation.tsx @@ -1,5 +1,5 @@ import { AppLink } from "../components/app-link" -import { guideLinks } from "../data/guide-links" +import { guideLinks } from "../data/guide-links.preval" import { mainLinks } from "../data/main-links" import { linkClass } from "../styles/components" import { PopoverMenu } from "./popover-menu" diff --git a/packages/docs-new/src/data/guide-links.preval.tsx b/packages/docs-new/src/data/guide-links.preval.tsx new file mode 100644 index 0000000..7c4188e --- /dev/null +++ b/packages/docs-new/src/data/guide-links.preval.tsx @@ -0,0 +1,34 @@ +import glob from "fast-glob" +import grayMatter from "gray-matter" +import { readFile } from "node:fs/promises" +import { join } from "node:path" +import type { AppLinkProps } from "../components/app-link" + +const docsFolderPath = new URL("../docs", import.meta.url).pathname +const guideFiles = await glob("**/*.md", { cwd: docsFolderPath }) + +const entries = await Promise.all( + guideFiles.map(async (file) => { + const content = await readFile(join(docsFolderPath, file), "utf-8") + const { data } = grayMatter(content) + + let order = Number(data.order) + if (!Number.isFinite(order)) { + order = Number.POSITIVE_INFINITY + } + + return { + route: `/docs/${file.replace(/\.mdx?$/, "")}`, + title: String(data.title || ""), + order, + } + }), +) + +export const guideLinks: AppLinkProps[] = entries + .sort((a, b) => a.order - b.order) + .map((item) => ({ + type: "internal", + label: item.title, + to: item.route, + })) diff --git a/packages/docs-new/src/data/guide-links.tsx b/packages/docs-new/src/data/guide-links.tsx deleted file mode 100644 index c1c20a3..0000000 --- a/packages/docs-new/src/data/guide-links.tsx +++ /dev/null @@ -1,3 +0,0 @@ -import type { AppLinkProps } from "../components/app-link" - -export const guideLinks: AppLinkProps[] = []