From b6c5c4170634ef48ef9c08325f1f5eaa788a7e2b Mon Sep 17 00:00:00 2001 From: MapleLeaf <19603573+itsMapleLeaf@users.noreply.github.com> Date: Sat, 8 Jan 2022 14:55:53 -0600 Subject: [PATCH] transform markdown through asset transformer --- .../src/asset-builder/transform-markdown.ts | 24 +++++++++++++++++++ packages/docs/src/guides/guide-page.tsx | 15 ++++++++---- packages/docs/src/landing/landing.tsx | 18 +++++++------- packages/docs/src/main.tsx | 8 ++++--- 4 files changed, 48 insertions(+), 17 deletions(-) create mode 100644 packages/docs/src/asset-builder/transform-markdown.ts diff --git a/packages/docs/src/asset-builder/transform-markdown.ts b/packages/docs/src/asset-builder/transform-markdown.ts new file mode 100644 index 0000000..1877fbd --- /dev/null +++ b/packages/docs/src/asset-builder/transform-markdown.ts @@ -0,0 +1,24 @@ +import grayMatter from "gray-matter" +import MarkdownIt from "markdown-it" +import prism from "markdown-it-prism" +import { readFile } from "node:fs/promises" +import type { AssetTransformer } from "./asset-builder.js" + +const renderer = new MarkdownIt({ + html: true, + linkify: true, +}).use(prism) + +export const transformMarkdown: AssetTransformer = { + async transform(inputFile) { + if (!/\.md$/.test(inputFile)) return + + const { data, content } = grayMatter(await readFile(inputFile, "utf8")) + const html = renderer.render(content) + + return { + content: html, + type: "text/html", + } + }, +} diff --git a/packages/docs/src/guides/guide-page.tsx b/packages/docs/src/guides/guide-page.tsx index a58dcc2..482e066 100644 --- a/packages/docs/src/guides/guide-page.tsx +++ b/packages/docs/src/guides/guide-page.tsx @@ -1,11 +1,12 @@ import clsx from "clsx" import React from "react" +import { LocalFileAsset } from "../asset-builder/asset.js" import { AppLink } from "../navigation/app-link" import { guideLinks } from "../navigation/guide-links" import { MainNavigation } from "../navigation/main-navigation" import { docsProseClass, linkClass, maxWidthContainer } from "../ui/components" -export default function GuidePage({ html }: { html: string }) { +export function GuidePage({ url }: { url: string }) { return ( <>
@@ -24,10 +25,14 @@ export default function GuidePage({ html }: { html: string }) { ))} -
+ + {(asset) => ( +
+ )} + ) diff --git a/packages/docs/src/landing/landing.tsx b/packages/docs/src/landing/landing.tsx index a72fc4a..aed53c0 100644 --- a/packages/docs/src/landing/landing.tsx +++ b/packages/docs/src/landing/landing.tsx @@ -1,13 +1,9 @@ import packageJson from "reacord/package.json" import React from "react" -import { renderMarkdownFile } from "../helpers/markdown" +import { LocalFileAsset } from "../asset-builder/asset.js" import { MainNavigation } from "../navigation/main-navigation" import { maxWidthContainer } from "../ui/components" -const landingExample = await renderMarkdownFile( - new URL("landing-example.md", import.meta.url).pathname, -) - export function Landing() { return (
@@ -17,10 +13,14 @@ export function Landing() {