Skip to main content
Module

x/aleph/plugins/mdx.ts

The Full-stack Framework in Deno.
Very Popular
Go to Latest
File
import { compile, type CompileOptions } from "https://esm.sh/v113/@mdx-js/mdx@2.3.0";import type { ModuleLoader, ModuleLoaderEnv, ModuleLoaderOutput, Plugin } from "../server/types.ts";
export class MDXLoader implements ModuleLoader { #options: CompileOptions;
constructor(options?: CompileOptions) { this.#options = options ?? {}; }
test(path: string): boolean { const exts = this.#options?.mdxExtensions ?? ["mdx"]; return exts.some((ext) => path.endsWith(`.${ext}`)); }
async load(specifier: string, content: string, env: ModuleLoaderEnv): Promise<ModuleLoaderOutput> { const ret = await compile( { path: specifier, value: content }, { jsxImportSource: this.#options.jsxImportSource ?? env.jsxConfig?.jsxImportSource, ...this.#options, providerImportSource: this.#options.providerImportSource ? env.importMap?.imports[this.#options.providerImportSource] ?? this.#options.providerImportSource : undefined, development: env.isDev, }, ); return { code: ret.toString(), lang: "js", }; }}
export default function MdxPlugin(options?: CompileOptions): Plugin { return { name: "mdx", setup(aleph) { const exts = options?.mdxExtensions ?? ["mdx"]; aleph.loaders = [new MDXLoader(options), ...aleph.loaders ?? []]; aleph.router = { ...aleph.router, exts: [...exts, ...(aleph.router?.exts ?? [])] }; }, };}