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.ts39
-rw-r--r--packages/markdown/remark/src/types.ts8
2 files changed, 31 insertions, 16 deletions
diff --git a/packages/markdown/remark/src/index.ts b/packages/markdown/remark/src/index.ts
index 5d442e830..7c59c4e6b 100644
--- a/packages/markdown/remark/src/index.ts
+++ b/packages/markdown/remark/src/index.ts
@@ -1,4 +1,9 @@
-import type { MarkdownRenderingOptions, MarkdownRenderingResult, MarkdownVFile } from './types';
+import type {
+ AstroMarkdownOptions,
+ MarkdownRenderingOptions,
+ MarkdownRenderingResult,
+ MarkdownVFile,
+} from './types';
import { toRemarkInitializeAstroData } from './frontmatter-injection.js';
import { loadPlugins } from './load-plugins.js';
@@ -20,14 +25,25 @@ import rehypeRaw from 'rehype-raw';
import rehypeStringify from 'rehype-stringify';
import markdown from 'remark-parse';
import markdownToHtml from 'remark-rehype';
+import remarkGfm from 'remark-gfm';
import { unified } from 'unified';
import { VFile } from 'vfile';
export { rehypeHeadingIds } from './rehype-collect-headings.js';
export * from './types.js';
-export const DEFAULT_REMARK_PLUGINS = ['remark-gfm', 'remark-smartypants'];
-export const DEFAULT_REHYPE_PLUGINS = [];
+export const markdownConfigDefaults: Omit<Required<AstroMarkdownOptions>, 'drafts'> = {
+ syntaxHighlight: 'shiki',
+ shikiConfig: {
+ langs: [],
+ theme: 'github-dark',
+ wrap: false,
+ },
+ remarkPlugins: [],
+ rehypePlugins: [],
+ remarkRehype: {},
+ gfm: true,
+};
/** Shared utility for rendering markdown */
export async function renderMarkdown(
@@ -36,12 +52,12 @@ export async function renderMarkdown(
): Promise<MarkdownRenderingResult> {
let {
fileURL,
- syntaxHighlight = 'shiki',
- shikiConfig = {},
- remarkPlugins = [],
- rehypePlugins = [],
- remarkRehype = {},
- extendDefaultPlugins = false,
+ syntaxHighlight = markdownConfigDefaults.syntaxHighlight,
+ shikiConfig = markdownConfigDefaults.shikiConfig,
+ remarkPlugins = markdownConfigDefaults.remarkPlugins,
+ rehypePlugins = markdownConfigDefaults.rehypePlugins,
+ remarkRehype = markdownConfigDefaults.remarkRehype,
+ gfm = markdownConfigDefaults.gfm,
isAstroFlavoredMd = false,
isExperimentalContentCollections = false,
contentDir,
@@ -55,9 +71,8 @@ export async function renderMarkdown(
.use(toRemarkInitializeAstroData({ userFrontmatter }))
.use(isAstroFlavoredMd ? [remarkMdxish, remarkMarkAndUnravel, remarkUnwrap, remarkEscape] : []);
- if (extendDefaultPlugins || (remarkPlugins.length === 0 && rehypePlugins.length === 0)) {
- remarkPlugins = [...DEFAULT_REMARK_PLUGINS, ...remarkPlugins];
- rehypePlugins = [...DEFAULT_REHYPE_PLUGINS, ...rehypePlugins];
+ if (gfm) {
+ parser.use(remarkGfm);
}
const loadedRemarkPlugins = await Promise.all(loadPlugins(remarkPlugins));
diff --git a/packages/markdown/remark/src/types.ts b/packages/markdown/remark/src/types.ts
index f52fd4bf5..ccab542e9 100644
--- a/packages/markdown/remark/src/types.ts
+++ b/packages/markdown/remark/src/types.ts
@@ -30,8 +30,9 @@ export type RehypePlugin<PluginParameters extends any[] = any[]> = unified.Plugi
export type RehypePlugins = (string | [string, any] | RehypePlugin | [RehypePlugin, any])[];
export type RemarkRehype = Omit<RemarkRehypeOptions, 'handlers' | 'unknownHandler'> & {
- handlers: typeof Handlers;
-} & { handler: typeof Handler };
+ handlers?: typeof Handlers;
+ handler?: typeof Handler;
+};
export interface ShikiConfig {
langs?: ILanguageRegistration[];
@@ -40,14 +41,13 @@ export interface ShikiConfig {
}
export interface AstroMarkdownOptions {
- mode?: 'md' | 'mdx';
drafts?: boolean;
syntaxHighlight?: 'shiki' | 'prism' | false;
shikiConfig?: ShikiConfig;
remarkPlugins?: RemarkPlugins;
rehypePlugins?: RehypePlugins;
remarkRehype?: RemarkRehype;
- extendDefaultPlugins?: boolean;
+ gfm?: boolean;
}
export interface MarkdownRenderingOptions extends AstroMarkdownOptions {