diff options
author | 2023-01-03 17:12:47 -0500 | |
---|---|---|
committer | 2023-01-03 17:12:47 -0500 | |
commit | a9c2920264e36cc5dc05f4adc1912187979edb0d (patch) | |
tree | 0a1987beb45f2c9a3670ee6122483bea81839139 /packages/markdown/remark/src | |
parent | 163a9a9d0ef8b08a71033e719ba06ff63cd2df60 (diff) | |
download | astro-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.ts | 39 | ||||
-rw-r--r-- | packages/markdown/remark/src/types.ts | 8 |
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 { |