docs: add clean markdown version of all documentation pages (#11308)
* added route to book * added to resources * added route to ui * added to user guide
This commit is contained in:
@@ -205,40 +205,40 @@ You can now build your plugin's customizations. The following guide explains how
|
||||
<CardList
|
||||
items={[
|
||||
{
|
||||
text: "Create a module",
|
||||
link: "/learn/fundamentals/modules",
|
||||
title: "Create a module",
|
||||
href: "/learn/fundamentals/modules",
|
||||
},
|
||||
{
|
||||
text: "Create a module link",
|
||||
link: "/learn/fundamentals/module-links",
|
||||
title: "Create a module link",
|
||||
href: "/learn/fundamentals/module-links",
|
||||
},
|
||||
{
|
||||
text: "Create a workflow",
|
||||
link: "/learn/fundamentals/workflows",
|
||||
title: "Create a workflow",
|
||||
href: "/learn/fundamentals/workflows",
|
||||
},
|
||||
{
|
||||
text: "Add a workflow hook",
|
||||
link: "/learn/fundamentals/workflows/add-workflow-hook",
|
||||
title: "Add a workflow hook",
|
||||
href: "/learn/fundamentals/workflows/add-workflow-hook",
|
||||
},
|
||||
{
|
||||
text: "Create an API route",
|
||||
link: "/learn/fundamentals/api-routes",
|
||||
title: "Create an API route",
|
||||
href: "/learn/fundamentals/api-routes",
|
||||
},
|
||||
{
|
||||
text: "Add a subscriber",
|
||||
link: "/learn/fundamentals/events-and-subscribers",
|
||||
title: "Add a subscriber",
|
||||
href: "/learn/fundamentals/events-and-subscribers",
|
||||
},
|
||||
{
|
||||
text: "Add a scheduled job",
|
||||
link: "/learn/fundamentals/scheduled-jobs",
|
||||
title: "Add a scheduled job",
|
||||
href: "/learn/fundamentals/scheduled-jobs",
|
||||
},
|
||||
{
|
||||
text: "Add an admin widget",
|
||||
link: "/learn/fundamentals/admin/widgets",
|
||||
title: "Add an admin widget",
|
||||
href: "/learn/fundamentals/admin/widgets",
|
||||
},
|
||||
{
|
||||
text: "Add an admin UI route",
|
||||
link: "/learn/fundamentals/admin/ui-routes",
|
||||
title: "Add an admin UI route",
|
||||
href: "/learn/fundamentals/admin/ui-routes",
|
||||
}
|
||||
]}
|
||||
className="mb-1.5"
|
||||
|
||||
@@ -72,7 +72,7 @@ Below are some stories from companies that use Medusa:
|
||||
|
||||
This documentation introduces you to Medusa's concepts and how they help you build your business use case. The documentation is structured to gradually introduce Medusa's concepts, with easy-to-follow examples along the way.
|
||||
|
||||
By following this documentation, you’ll be able to create custom commerce experiences that would otherwise take large engineering teams months to build.
|
||||
By following this documentation, you'll be able to create custom commerce experiences that would otherwise take large engineering teams months to build.
|
||||
|
||||
### How to use the documentation
|
||||
|
||||
|
||||
@@ -13,11 +13,11 @@ You can build your storefront from scratch with your preferred tech stack, or st
|
||||
<CardList
|
||||
items={[
|
||||
{
|
||||
text: "Install Next.js Starter Storefront",
|
||||
title: "Install Next.js Starter Storefront",
|
||||
href: "!resources!/nextjs-starter"
|
||||
},
|
||||
{
|
||||
text: "Build Custom Storefront",
|
||||
title: "Build Custom Storefront",
|
||||
href: "!resources!/storefront-development"
|
||||
}
|
||||
]}
|
||||
|
||||
@@ -0,0 +1,75 @@
|
||||
import { getCleanMd } from "docs-utils"
|
||||
import { existsSync } from "fs"
|
||||
import { unstable_cache } from "next/cache"
|
||||
import { notFound } from "next/navigation"
|
||||
import { NextRequest, NextResponse } from "next/server"
|
||||
import path from "path"
|
||||
import {
|
||||
addUrlToRelativeLink,
|
||||
crossProjectLinksPlugin,
|
||||
localLinksRehypePlugin,
|
||||
} from "remark-rehype-plugins"
|
||||
import type { Plugin } from "unified"
|
||||
|
||||
type Params = {
|
||||
params: Promise<{ slug: string[] }>
|
||||
}
|
||||
|
||||
export async function GET(req: NextRequest, { params }: Params) {
|
||||
const { slug } = await params
|
||||
|
||||
// keep this so that Vercel keeps the files in deployment
|
||||
const basePath = path.join(process.cwd(), "app")
|
||||
const filePath = path.join(basePath, ...slug, "page.mdx")
|
||||
|
||||
if (!existsSync(filePath)) {
|
||||
return notFound()
|
||||
}
|
||||
|
||||
const cleanMdContent = await getCleanMd_(filePath, {
|
||||
before: [
|
||||
[
|
||||
crossProjectLinksPlugin,
|
||||
{
|
||||
baseUrl: process.env.NEXT_PUBLIC_BASE_URL,
|
||||
projectUrls: {
|
||||
resources: {
|
||||
url: process.env.NEXT_PUBLIC_RESOURCES_URL,
|
||||
},
|
||||
"user-guide": {
|
||||
url: process.env.NEXT_PUBLIC_RESOURCES_URL,
|
||||
},
|
||||
ui: {
|
||||
url: process.env.NEXT_PUBLIC_RESOURCES_URL,
|
||||
},
|
||||
api: {
|
||||
url: process.env.NEXT_PUBLIC_RESOURCES_URL,
|
||||
},
|
||||
},
|
||||
useBaseUrl:
|
||||
process.env.NODE_ENV === "production" ||
|
||||
process.env.VERCEL_ENV === "production",
|
||||
},
|
||||
],
|
||||
[localLinksRehypePlugin],
|
||||
] as unknown as Plugin[],
|
||||
after: [
|
||||
[addUrlToRelativeLink, { url: process.env.NEXT_PUBLIC_BASE_URL }],
|
||||
] as unknown as Plugin[],
|
||||
})
|
||||
|
||||
return new NextResponse(cleanMdContent, {
|
||||
headers: {
|
||||
"Content-Type": "text/markdown",
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
const getCleanMd_ = unstable_cache(
|
||||
async (filePath: string, plugins?: { before?: Plugin[]; after?: Plugin[] }) =>
|
||||
getCleanMd({ filePath, plugins }),
|
||||
["clean-md"],
|
||||
{
|
||||
revalidate: 3600,
|
||||
}
|
||||
)
|
||||
Reference in New Issue
Block a user