site: rename nav link type

This commit is contained in:
Glen Huang
2025-10-08 12:35:48 +08:00
committed by Johannes Kirschbauer
parent bf46ea1ebb
commit 7f0e6d74e6
3 changed files with 21 additions and 25 deletions

View File

@@ -1,9 +1,9 @@
<script lang="ts">
import type { NormalizedNavLink } from "./utils";
import type { NavLink } from "./utils";
let { children, data } = $props();
</script>
{#snippet navLinkSnippet(navLink: NormalizedNavLink)}
{#snippet navLinkSnippet(navLink: NavLink)}
{#if "items" in navLink}
<li>
<details open={!navLink.collapsed}>

View File

@@ -1,6 +1,6 @@
import type { NavLink } from "./utils";
import type { RawNavLink } from "./utils";
export const navLinks: NavLink[] = [
export const navLinks: RawNavLink[] = [
{
label: "Getting Started",
items: ["getting-started/add-machines"],

View File

@@ -8,61 +8,59 @@ export const articles = Object.fromEntries(
).map(([key, fn]) => [key.slice("./".length, -".md".length), fn]),
);
export type NavLink =
export type RawNavLink =
| string
| {
label: string;
items: NavLink[];
items: RawNavLink[];
collapsed?: boolean;
badge?: Badge;
badge?: RawBadge;
}
| {
label: string;
autogenerate: { directory: string };
collapsed?: boolean;
badge?: Badge;
badge?: RawBadge;
}
| {
label?: string;
slug: string;
badge?: Badge;
badge?: RawBadge;
}
| {
label: string;
link: string;
badge?: Badge;
badge?: RawBadge;
};
export type NormalizedNavLink =
export type NavLink =
| {
label: string;
items: NormalizedNavLink[];
items: NavLink[];
collapsed: boolean;
badge?: NormalizedBadge;
badge?: Badge;
}
| {
label: string;
link: string;
badge?: NormalizedBadge;
badge?: Badge;
external: boolean;
};
export type Badge = string | NormalizedBadge;
export type RawBadge = string | Badge;
export type NormalizedBadge = {
export type Badge = {
text: string;
variant: "caution" | "normal";
};
export async function normalizeNavLinks(
navLinks: NavLink[],
): Promise<NormalizedNavLink[]> {
navLinks: RawNavLink[],
): Promise<NavLink[]> {
return await Promise.all(navLinks.map(normalizeNavLink));
}
export async function normalizeNavLink(
navLink: NavLink,
): Promise<NormalizedNavLink> {
export async function normalizeNavLink(navLink: RawNavLink): Promise<NavLink> {
if (typeof navLink === "string") {
const article = articles[navLink];
if (!article) {
@@ -122,7 +120,7 @@ export async function normalizeNavLink(
}
if (titleMissing) throw new Error("Aborting due to errors.");
const items: NormalizedNavLink[] = await Promise.all(
const items: NavLink[] = await Promise.all(
frontmatters
.sort((a, b) => {
const orderA = a.frontmatter.order;
@@ -162,9 +160,7 @@ export async function normalizeNavLink(
};
}
export function normalizeBadge(
badge: Badge | undefined,
): NormalizedBadge | undefined {
export function normalizeBadge(badge: RawBadge | undefined): Badge | undefined {
if (!badge) {
return undefined;
}