summaryrefslogtreecommitdiff
path: root/packages/markdown/remark/src
diff options
context:
space:
mode:
Diffstat (limited to 'packages/markdown/remark/src')
-rw-r--r--packages/markdown/remark/src/index.ts12
-rw-r--r--packages/markdown/remark/src/remark-initialize-astro-data.ts9
-rw-r--r--packages/markdown/remark/src/types.ts2
3 files changed, 18 insertions, 5 deletions
diff --git a/packages/markdown/remark/src/index.ts b/packages/markdown/remark/src/index.ts
index 4dfd7240f..0bb827c30 100644
--- a/packages/markdown/remark/src/index.ts
+++ b/packages/markdown/remark/src/index.ts
@@ -13,6 +13,7 @@ import remarkPrism from './remark-prism.js';
import scopedStyles from './remark-scoped-styles.js';
import remarkShiki from './remark-shiki.js';
import remarkUnwrap from './remark-unwrap.js';
+import { remarkInitializeAstroData } from './remark-initialize-astro-data.js';
import rehypeRaw from 'rehype-raw';
import rehypeStringify from 'rehype-stringify';
@@ -45,6 +46,7 @@ export async function renderMarkdown(
let parser = unified()
.use(markdown)
+ .use(remarkInitializeAstroData)
.use(isAstroFlavoredMd ? [remarkMdxish, remarkMarkAndUnravel, remarkUnwrap, remarkEscape] : []);
if (remarkPlugins.length === 0 && rehypePlugins.length === 0) {
@@ -99,10 +101,9 @@ export async function renderMarkdown(
)
.use(rehypeStringify, { allowDangerousHtml: true });
- let result: string;
+ let vfile: VFile;
try {
- const vfile = await parser.process(input);
- result = vfile.toString();
+ vfile = await parser.process(input);
} catch (err) {
// Ensure that the error message contains the input filename
// to make it easier for the user to fix the issue
@@ -113,8 +114,9 @@ export async function renderMarkdown(
}
return {
- metadata: { headings, source: content, html: result.toString() },
- code: result.toString(),
+ metadata: { headings, source: content, html: String(vfile.value) },
+ code: String(vfile.value),
+ vfile,
};
}
diff --git a/packages/markdown/remark/src/remark-initialize-astro-data.ts b/packages/markdown/remark/src/remark-initialize-astro-data.ts
new file mode 100644
index 000000000..37af8aeaf
--- /dev/null
+++ b/packages/markdown/remark/src/remark-initialize-astro-data.ts
@@ -0,0 +1,9 @@
+import type { VFile } from 'vfile';
+
+export function remarkInitializeAstroData() {
+ return function (tree: any, vfile: VFile) {
+ if (!vfile.data.astro) {
+ vfile.data.astro = { frontmatter: {} };
+ }
+ };
+}
diff --git a/packages/markdown/remark/src/types.ts b/packages/markdown/remark/src/types.ts
index 9d09ef294..3569e8d04 100644
--- a/packages/markdown/remark/src/types.ts
+++ b/packages/markdown/remark/src/types.ts
@@ -2,6 +2,7 @@ import type * as hast from 'hast';
import type * as mdast from 'mdast';
import type { ILanguageRegistration, IThemeRegistration, Theme } from 'shiki';
import type * as unified from 'unified';
+import type { VFile } from 'vfile';
export type { Node } from 'unist';
@@ -58,5 +59,6 @@ export interface MarkdownMetadata {
export interface MarkdownRenderingResult {
metadata: MarkdownMetadata;
+ vfile: VFile;
code: string;
}