Skip to content

Latest commit

 

History

History
90 lines (88 loc) · 2.77 KB

tools-and-libraries.mdx

File metadata and controls

90 lines (88 loc) · 2.77 KB

import fg from "fast-glob" import path from "path" import { compileMdx } from "nextra/compile" import { readFile } from "fs/promises" import slugMap from "../../code/slug-map.json" import { NextAdapter } from "next-query-params" import { QueryParamProvider } from "use-query-params" import { CodePage } from "../../components/tools-and-libraries" import { getGitHubStats } from "../../../scripts/sort-libraries/get-github-stats" import githubInfo from "@/github-stats.json"

{<CodePage {...props} />}

export const getStaticProps = async () => { const filePaths = await fg("./src/code/**/*.md") const results = [] const allTags = Object.create(null) // for (const filePath of filePaths) { let segments = path.relative("./src/code", filePath).split("/").slice(0, -1) // Do not add language-support as tag if (segments[0] === "language-support") segments = segments.slice(1) // Do not add all folders as tags under tools folder if (segments[0] === "tools") segments.splice(1, 1) const rawMdx = await readFile(filePath, "utf8") let hasDescription = false const { result: compiledSource, frontMatter } = await compileMdx(rawMdx, { mdxOptions: { format: "md", remarkPlugins: [ () => tree => { hasDescription = tree.children.length > 1 && tree.children.some(node => node.type !== "yaml") }, ], }, }) // for (const tag of segments) { if (tag.includes("_")) { throw new Error( Tag ${tag} contains an underscore, which is not allowed., ) } allTags[tag] ??= 0 allTags[tag] += 1 } if ( frontMatter.url && frontMatter.github && frontMatter.url .toLowerCase() .replace(//$/, "") .endsWith(frontMatter.github.toLowerCase()) ) { throw new Error( Remove frontmatter.url since URL "${frontMatter.url}" ends with the same slug as the GitHub repo "${frontMatter.github}"., ) } const stars = githubInfo[frontMatter.github] results.push({ filePath, tags: segments, frontMatter, ...(stars && { stars: stars.stars, formattedStars: stars.formattedStars, lastRelease: stars.formattedLastRelease, license: stars.license, }), ...(hasDescription && { compiledSource }), }) } // const allTagsList = Object.entries(allTags) .map(([tag, count]) => ({ tag, count, name: slugMap[tag] ?? tag, })) .sort((a, b) => b.count - a.count || a.tag.localeCompare(b.tag)) // return { props: { data: results.sort((a, b) => (b.stars ?? 0) - (a.stars ?? 0)), allTags: allTagsList, }, } }