summaryrefslogtreecommitdiff
path: root/packages/markdown/remark/src
diff options
context:
space:
mode:
authorGravatar Ben Holmes <hey@bholmes.dev> 2023-01-03 17:12:47 -0500
committerGravatar GitHub <noreply@github.com> 2023-01-03 17:12:47 -0500
commita9c2920264e36cc5dc05f4adc1912187979edb0d (patch)
tree0a1987beb45f2c9a3670ee6122483bea81839139 /packages/markdown/remark/src
parent163a9a9d0ef8b08a71033e719ba06ff63cd2df60 (diff)
downloadastro-a9c2920264e36cc5dc05f4adc1912187979edb0d.tar.gz
astro-a9c2920264e36cc5dc05f4adc1912187979edb0d.tar.zst
astro-a9c2920264e36cc5dc05f4adc1912187979edb0d.zip
Markdown and MDX configuration rework (#5684)
* feat: change extendDefaults -> gfm * deps: remove smartypants from md/remark * tests: update markdown plugin tests * fix: borked lockfile * feat: allow all Markdown options in MDX config, with extend * deps: remove smartypants from MDX * chore: remove unused `mode` property * chore: remark rehype types * chore: dead code * fix: order of default config properties * refactor: move md defaults to remark * fix: RemarkRehype type * fix: apply defaults based on MD defaults * chore: update plugin tests * chore: add syntaxHighlight test * refactor: remove drafts from config defaults * docs: new MDX config options * chore: add changeset * edit: test both extends for syntax highlight * refactor: remove MDX config deep merge * docs: update README and changeset * edit: avoid -> disable Co-authored-by: Sarah Rainsberger <sarah@rainsberger.ca> * edit: `drafts` clarification Co-authored-by: Sarah Rainsberger <sarah@rainsberger.ca> * edit: remove "scare quotes" Co-authored-by: Sarah Rainsberger <sarah@rainsberger.ca> * docs: MDX config options redraft * docs: add migration * chore: changeset heading levels * refactor: githubFlavoredMarkdown -> gfm * chore: remove unused imports Co-authored-by: Sarah Rainsberger <sarah@rainsberger.ca>
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 {