diff --git a/src/components/Navbar.astro b/src/components/Navbar.astro index 3f7f8b51..dacbeaa5 100644 --- a/src/components/Navbar.astro +++ b/src/components/Navbar.astro @@ -6,19 +6,22 @@ import DrawerToggler from "./DrawerToggler.astro"; import HorizontalContainer from "./HorizontalContainer.astro"; import ThemeSwitcher from "./ThemeSwitcher.astro"; import Dropdown from "./Dropdown.astro"; -import { getCollection } from "astro:content"; +import { + getConceptPagesAlphabetical, + getStartPagesByOrderParam, +} from "../content/collections"; import { conceptPagePath, startPagePath } from "../lib/utils"; import Drawer from "./Drawer.astro"; const { title, githubUrl, navbarLinks } = site; -const startPages = (await getCollection("start")).map( +const startPages = (await getStartPagesByOrderParam()).map( ({ slug, data: { title } }) => { return { title, href: startPagePath(slug) }; }, ); -const conceptPages = (await getCollection("concepts")).map( +const conceptPages = (await getConceptPagesAlphabetical()).map( ({ slug, data: { title } }) => { return { title, href: conceptPagePath(slug) }; }, diff --git a/src/components/Pagination.astro b/src/components/Pagination.astro index ea0e0ade..5106655e 100644 --- a/src/components/Pagination.astro +++ b/src/components/Pagination.astro @@ -1,7 +1,7 @@ --- import Link from "./Link.astro"; -import { getCollection } from "astro:content"; import { startPagePath } from "../lib/utils"; +import { getStartPagesByOrderParam } from "../content/collections"; type Props = { order: number; @@ -9,7 +9,8 @@ type Props = { const { order } = Astro.props; -const startPages = await getCollection("start"); +const startPages = await getStartPagesByOrderParam(); + const previousPage = startPages.find( ({ data: { order: pageOrder } }) => pageOrder === order - 1, ); diff --git a/src/components/mdx/Languages.astro b/src/components/mdx/Languages.astro index 1531c545..ad7e386f 100644 --- a/src/components/mdx/Languages.astro +++ b/src/components/mdx/Languages.astro @@ -17,7 +17,7 @@ const { languages } = site; diff --git a/src/content/collections.ts b/src/content/collections.ts new file mode 100644 index 00000000..c145d75c --- /dev/null +++ b/src/content/collections.ts @@ -0,0 +1,12 @@ +import { getCollection } from "astro:content"; + +export const getStartPagesByOrderParam = async () => { + return (await getCollection("start")).sort( + ({ data: { order: orderA } }, { data: { order: orderB } }) => + orderA - orderB, + ); +}; + +export const getConceptPagesAlphabetical = () => { + return getCollection("concepts"); +}; diff --git a/src/pages/concepts/[slug].astro b/src/pages/concepts/[slug].astro index 642c618c..fd4fdf85 100644 --- a/src/pages/concepts/[slug].astro +++ b/src/pages/concepts/[slug].astro @@ -1,6 +1,5 @@ --- import type { GetStaticPaths } from "astro"; -import { getCollection } from "astro:content"; import Admonition from "../../components/mdx/Admonition.astro"; import NixStorePath from "../../components/mdx/NixStorePath.astro"; import Layout from "../../layouts/Layout.astro"; @@ -16,11 +15,10 @@ import A from "../../components/mdx/A.astro"; import H2 from "../../components/mdx/H2.astro"; import H3 from "../../components/mdx/H3.astro"; import H4 from "../../components/mdx/H4.astro"; +import { getConceptPagesAlphabetical } from "../../content/collections"; export const getStaticPaths = (async () => { - const conceptPages = await getCollection("concepts"); - - return conceptPages.map((page) => ({ + return (await getConceptPagesAlphabetical()).map((page) => ({ params: { slug: page.slug }, props: { page }, })); @@ -33,7 +31,7 @@ const { const { Content } = await page.render(); const relatedConceptPages: { title: string; href: string }[] = ( - await getCollection("concepts") + await getConceptPagesAlphabetical() ) .filter(({ slug }) => related.includes(slug)) .map(({ slug, data: { title } }) => { diff --git a/src/pages/concepts/index.astro b/src/pages/concepts/index.astro index 08d34005..d537be1d 100644 --- a/src/pages/concepts/index.astro +++ b/src/pages/concepts/index.astro @@ -1,5 +1,4 @@ --- -import { getCollection } from "astro:content"; import Layout from "../../layouts/Layout.astro"; import HorizontalContainer from "../../components/HorizontalContainer.astro"; import Hero from "../../components/Hero.astro"; @@ -7,12 +6,13 @@ import QuickStart from "../../components/QuickStart.astro"; import Grid3 from "../../components/Grid3.astro"; import HoverableLink from "../../components/HoverableLink.astro"; import { conceptPagePath } from "../../lib/utils"; +import { getConceptPagesAlphabetical } from "../../content/collections"; const title = "Concepts"; const heroTitle = "Nix concepts"; const description = "The whys and the hows of Nix"; -const conceptPages = await getCollection("concepts"); +const conceptPages = await getConceptPagesAlphabetical(); --- diff --git a/src/pages/llms-full.txt.ts b/src/pages/llms-full.txt.ts index 68dfb1c5..ef549c81 100644 --- a/src/pages/llms-full.txt.ts +++ b/src/pages/llms-full.txt.ts @@ -1,8 +1,11 @@ +import { + getConceptPagesAlphabetical, + getStartPagesByOrderParam, +} from "../content/collections"; import { conceptPagePath, startPagePath } from "../lib/utils"; import { site } from "../site"; import { FORMATS } from "./llms.txt"; import type { APIRoute } from "astro"; -import { getCollection } from "astro:content"; import Handlebars from "handlebars"; import fs from "node:fs"; import path from "node:path"; @@ -17,8 +20,8 @@ const templateFile = fs.readFileSync( const template = Handlebars.compile(templateFile); export const GET: APIRoute = async () => { - const startPages = await getCollection("start"); - const conceptPages = await getCollection("concepts"); + const startPages = await getStartPagesByOrderParam(); + const conceptPages = await getConceptPagesAlphabetical(); const content = template({ root, diff --git a/src/pages/llms-small.txt.ts b/src/pages/llms-small.txt.ts index 6b1eb955..52195f6b 100644 --- a/src/pages/llms-small.txt.ts +++ b/src/pages/llms-small.txt.ts @@ -1,7 +1,10 @@ +import { + getConceptPagesAlphabetical, + getStartPagesByOrderParam, +} from "../content/collections"; import { site } from "../site"; import { FORMATS } from "./llms.txt"; import type { APIRoute } from "astro"; -import { getCollection } from "astro:content"; import Handlebars from "handlebars"; import fs from "node:fs"; import path from "node:path"; @@ -16,8 +19,8 @@ const templateFile = fs.readFileSync( const template = Handlebars.compile(templateFile); export const GET: APIRoute = async () => { - const startPages = await getCollection("start"); - const conceptPages = await getCollection("concepts"); + const startPages = await getStartPagesByOrderParam(); + const conceptPages = await getConceptPagesAlphabetical(); const content = template({ root, diff --git a/src/pages/llms.txt.ts b/src/pages/llms.txt.ts index 8cdf7d7d..514bbfe2 100644 --- a/src/pages/llms.txt.ts +++ b/src/pages/llms.txt.ts @@ -1,7 +1,10 @@ +import { + getConceptPagesAlphabetical, + getStartPagesByOrderParam, +} from "../content/collections"; import { conceptPagePath, startPagePath } from "../lib/utils"; import { site } from "../site"; import type { APIRoute } from "astro"; -import { getCollection } from "astro:content"; import Handlebars from "handlebars"; import fs from "node:fs"; import path from "node:path"; @@ -37,8 +40,8 @@ const templateFile = fs.readFileSync( const template = Handlebars.compile(templateFile); export const GET: APIRoute = async () => { - const startPages = await getCollection("start"); - const conceptPages = await getCollection("concepts"); + const startPages = await getStartPagesByOrderParam(); + const conceptPages = await getConceptPagesAlphabetical(); const content = template({ root, diff --git a/src/pages/start/[slug].astro b/src/pages/start/[slug].astro index 55378fb1..53aff937 100644 --- a/src/pages/start/[slug].astro +++ b/src/pages/start/[slug].astro @@ -1,6 +1,5 @@ --- import type { GetStaticPaths } from "astro"; -import { getCollection } from "astro:content"; import Admonition from "../../components/mdx/Admonition.astro"; import ExternalSources from "../../components/ExternalSources.astro"; import Language from "../../components/mdx/Language.astro"; @@ -17,11 +16,10 @@ import H4 from "../../components/mdx/H4.astro"; import Pagination from "../../components/Pagination.astro"; import Separator from "../../components/Separator.astro"; import FeedbackBar from "../../components/FeedbackBar.astro"; +import { getStartPagesByOrderParam } from "../../content/collections"; export const getStaticPaths = (async () => { - const startPages = await getCollection("start"); - - return startPages.map((page) => ({ + return (await getStartPagesByOrderParam()).map((page) => ({ params: { slug: page.slug.substring(1) }, props: { page }, })); @@ -33,7 +31,7 @@ const { } = page; const { Content } = await page.render(); -const numQuickStartPages = (await getCollection("start")).length; +const numQuickStartPages = (await getStartPagesByOrderParam()).length; --- diff --git a/src/pages/start/index.astro b/src/pages/start/index.astro index bda79907..8d66fb30 100644 --- a/src/pages/start/index.astro +++ b/src/pages/start/index.astro @@ -1,18 +1,18 @@ --- -import { getCollection } from "astro:content"; import Layout from "../../layouts/Layout.astro"; import Hero from "../../components/Hero.astro"; import HorizontalContainer from "../../components/HorizontalContainer.astro"; import Grid2 from "../../components/Grid2.astro"; import HoverableLink from "../../components/HoverableLink.astro"; import { startPagePath } from "../../lib/utils"; +import { getStartPagesByOrderParam } from "../../content/collections"; const title = "Start"; const heroTitle = "Quick start"; const description = "Get a taste of Nix's power and learn key concepts along the way"; -const startPages = await getCollection("start"); +const startPages = await getStartPagesByOrderParam(); ---