From d3a01458a3002ab94fb131eec34cfdc116b36526 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Doreau?= <32459935+ayshiff@users.noreply.github.com> Date: Tue, 29 Sep 2020 14:48:34 +0200 Subject: [PATCH] feat(v2): add beforeDefaultRemarkPlugins/beforeDefaultRehypePlugins options to all md content plugins (#3467) * fix(plugin-content-docs): add beforeDefaultRemarkPlugins + beforeDefaultRehypePlugins options * fix(plugin-content-blog): add beforeDefaultRemarkPlugins + beforeDefaultRehypePlugins options * fix(plugin-content-pages): add beforeDefaultRemarkPlugins + beforeDefaultRehypePlugins options * feat(website-docs): overriding remark-rehype plugins * fix(plugin-content): update beforeDefaultRehypePlugins/beforeDefaultRemarkPlugins types * fix(plugin-content-docs): fix tests --- packages/docusaurus-plugin-content-blog/src/index.ts | 10 +++++++++- packages/docusaurus-plugin-content-blog/src/types.ts | 2 ++ .../src/__tests__/options.test.ts | 4 ++++ packages/docusaurus-plugin-content-docs/src/index.ts | 9 ++++++++- packages/docusaurus-plugin-content-docs/src/options.ts | 8 ++++++++ packages/docusaurus-plugin-content-docs/src/types.ts | 2 ++ packages/docusaurus-plugin-content-pages/src/index.ts | 9 ++++++++- .../src/pluginOptionSchema.ts | 8 ++++++++ packages/docusaurus-plugin-content-pages/src/types.ts | 2 ++ website/docs/using-plugins.md | 6 ++++++ 10 files changed, 57 insertions(+), 3 deletions(-) diff --git a/packages/docusaurus-plugin-content-blog/src/index.ts b/packages/docusaurus-plugin-content-blog/src/index.ts index 8a4573f596c6..7d58150cb28f 100644 --- a/packages/docusaurus-plugin-content-blog/src/index.ts +++ b/packages/docusaurus-plugin-content-blog/src/index.ts @@ -343,7 +343,13 @@ export default function pluginContentBlog( isServer: boolean, {getBabelLoader, getCacheLoader}: ConfigureWebpackUtils, ) { - const {rehypePlugins, remarkPlugins, truncateMarker} = options; + const { + rehypePlugins, + remarkPlugins, + truncateMarker, + beforeDefaultRemarkPlugins, + beforeDefaultRehypePlugins, + } = options; return { resolve: { alias: { @@ -363,6 +369,8 @@ export default function pluginContentBlog( options: { remarkPlugins, rehypePlugins, + beforeDefaultRemarkPlugins, + beforeDefaultRehypePlugins, staticDir: path.join(siteDir, STATIC_DIR_NAME), // Note that metadataPath must be the same/in-sync as // the path from createData for each MDX. diff --git a/packages/docusaurus-plugin-content-blog/src/types.ts b/packages/docusaurus-plugin-content-blog/src/types.ts index 5e57fe1e49e6..99b3e6dea02c 100644 --- a/packages/docusaurus-plugin-content-blog/src/types.ts +++ b/packages/docusaurus-plugin-content-blog/src/types.ts @@ -31,6 +31,8 @@ export interface PluginOptions { blogTagsPostsComponent: string; blogDescription: string; remarkPlugins: ([Function, object] | Function)[]; + beforeDefaultRehypePlugins: ([Function, object] | Function)[]; + beforeDefaultRemarkPlugins: ([Function, object] | Function)[]; rehypePlugins: string[]; truncateMarker: RegExp; showReadingTime: boolean; diff --git a/packages/docusaurus-plugin-content-docs/src/__tests__/options.test.ts b/packages/docusaurus-plugin-content-docs/src/__tests__/options.test.ts index 9b0052df75c2..ef1cb969b25b 100644 --- a/packages/docusaurus-plugin-content-docs/src/__tests__/options.test.ts +++ b/packages/docusaurus-plugin-content-docs/src/__tests__/options.test.ts @@ -30,6 +30,8 @@ describe('normalizeDocsPluginOptions', () => { docItemComponent: '@theme/DocItem', remarkPlugins: [markdownPluginsObjectStub], rehypePlugins: [markdownPluginsFunctionStub], + beforeDefaultRehypePlugins: [], + beforeDefaultRemarkPlugins: [], showLastUpdateTime: true, showLastUpdateAuthor: true, admonitions: {}, @@ -55,6 +57,8 @@ describe('normalizeDocsPluginOptions', () => { test('should accept correctly defined remark and rehype plugin options', async () => { const userOptions = { ...DEFAULT_OPTIONS, + beforeDefaultRemarkPlugins: [], + beforeDefaultRehypePlugins: [markdownPluginsFunctionStub], remarkPlugins: [[markdownPluginsFunctionStub, {option1: '42'}]], rehypePlugins: [ markdownPluginsObjectStub, diff --git a/packages/docusaurus-plugin-content-docs/src/index.ts b/packages/docusaurus-plugin-content-docs/src/index.ts index 011091015c02..08b95a73ee2a 100644 --- a/packages/docusaurus-plugin-content-docs/src/index.ts +++ b/packages/docusaurus-plugin-content-docs/src/index.ts @@ -295,7 +295,12 @@ export default function pluginContentDocs( configureWebpack(_config, isServer, utils) { const {getBabelLoader, getCacheLoader} = utils; - const {rehypePlugins, remarkPlugins} = options; + const { + rehypePlugins, + remarkPlugins, + beforeDefaultRehypePlugins, + beforeDefaultRemarkPlugins, + } = options; const docsMarkdownOptions: DocsMarkdownOption = { siteDir, @@ -323,6 +328,8 @@ export default function pluginContentDocs( options: { remarkPlugins, rehypePlugins, + beforeDefaultRehypePlugins, + beforeDefaultRemarkPlugins, staticDir: path.join(siteDir, STATIC_DIR_NAME), metadataPath: (mdxPath: string) => { // Note that metadataPath must be the same/in-sync as diff --git a/packages/docusaurus-plugin-content-docs/src/options.ts b/packages/docusaurus-plugin-content-docs/src/options.ts index 9b8b2d135133..b097aaf164cf 100644 --- a/packages/docusaurus-plugin-content-docs/src/options.ts +++ b/packages/docusaurus-plugin-content-docs/src/options.ts @@ -27,6 +27,8 @@ export const DEFAULT_OPTIONS: Omit = { docItemComponent: '@theme/DocItem', remarkPlugins: [], rehypePlugins: [], + beforeDefaultRemarkPlugins: [], + beforeDefaultRehypePlugins: [], showLastUpdateTime: false, showLastUpdateAuthor: false, admonitions: {}, @@ -60,6 +62,12 @@ export const OptionsSchema = Joi.object({ docItemComponent: Joi.string().default(DEFAULT_OPTIONS.docItemComponent), remarkPlugins: RemarkPluginsSchema.default(DEFAULT_OPTIONS.remarkPlugins), rehypePlugins: RehypePluginsSchema.default(DEFAULT_OPTIONS.rehypePlugins), + beforeDefaultRemarkPlugins: RemarkPluginsSchema.default( + DEFAULT_OPTIONS.beforeDefaultRemarkPlugins, + ), + beforeDefaultRehypePlugins: RehypePluginsSchema.default( + DEFAULT_OPTIONS.beforeDefaultRehypePlugins, + ), admonitions: AdmonitionsSchema.default(DEFAULT_OPTIONS.admonitions), showLastUpdateTime: Joi.bool().default(DEFAULT_OPTIONS.showLastUpdateTime), showLastUpdateAuthor: Joi.bool().default( diff --git a/packages/docusaurus-plugin-content-docs/src/types.ts b/packages/docusaurus-plugin-content-docs/src/types.ts index 674eaf0053eb..0555102f83b9 100644 --- a/packages/docusaurus-plugin-content-docs/src/types.ts +++ b/packages/docusaurus-plugin-content-docs/src/types.ts @@ -59,6 +59,8 @@ export type PluginOptions = MetadataOptions & docItemComponent: string; remarkPlugins: ([Function, object] | Function)[]; rehypePlugins: string[]; + beforeDefaultRemarkPlugins: ([Function, object] | Function)[]; + beforeDefaultRehypePlugins: ([Function, object] | Function)[]; admonitions: any; disableVersioning: boolean; excludeNextVersionDocs?: boolean; diff --git a/packages/docusaurus-plugin-content-pages/src/index.ts b/packages/docusaurus-plugin-content-pages/src/index.ts index b7f46ee36836..f4578ef005d3 100644 --- a/packages/docusaurus-plugin-content-pages/src/index.ts +++ b/packages/docusaurus-plugin-content-pages/src/index.ts @@ -161,7 +161,12 @@ export default function pluginContentPages( isServer: boolean, {getBabelLoader, getCacheLoader}: ConfigureWebpackUtils, ) { - const {rehypePlugins, remarkPlugins} = options; + const { + rehypePlugins, + remarkPlugins, + beforeDefaultRehypePlugins, + beforeDefaultRemarkPlugins, + } = options; return { resolve: { alias: { @@ -181,6 +186,8 @@ export default function pluginContentPages( options: { remarkPlugins, rehypePlugins, + beforeDefaultRehypePlugins, + beforeDefaultRemarkPlugins, staticDir: path.join(siteDir, STATIC_DIR_NAME), // Note that metadataPath must be the same/in-sync as // the path from createData for each MDX. diff --git a/packages/docusaurus-plugin-content-pages/src/pluginOptionSchema.ts b/packages/docusaurus-plugin-content-pages/src/pluginOptionSchema.ts index 9766d73c2aca..a812fcd9a860 100644 --- a/packages/docusaurus-plugin-content-pages/src/pluginOptionSchema.ts +++ b/packages/docusaurus-plugin-content-pages/src/pluginOptionSchema.ts @@ -19,6 +19,8 @@ export const DEFAULT_OPTIONS: PluginOptions = { mdxPageComponent: '@theme/MDXPage', remarkPlugins: [], rehypePlugins: [], + beforeDefaultRehypePlugins: [], + beforeDefaultRemarkPlugins: [], admonitions: {}, exclude: [ '**/_*.{js,jsx,ts,tsx,md,mdx}', @@ -35,5 +37,11 @@ export const PluginOptionSchema = Joi.object({ mdxPageComponent: Joi.string().default(DEFAULT_OPTIONS.mdxPageComponent), remarkPlugins: RemarkPluginsSchema.default(DEFAULT_OPTIONS.remarkPlugins), rehypePlugins: RehypePluginsSchema.default(DEFAULT_OPTIONS.rehypePlugins), + beforeDefaultRehypePlugins: RehypePluginsSchema.default( + DEFAULT_OPTIONS.beforeDefaultRehypePlugins, + ), + beforeDefaultRemarkPlugins: RemarkPluginsSchema.default( + DEFAULT_OPTIONS.beforeDefaultRemarkPlugins, + ), admonitions: AdmonitionsSchema.default(DEFAULT_OPTIONS.admonitions), }); diff --git a/packages/docusaurus-plugin-content-pages/src/types.ts b/packages/docusaurus-plugin-content-pages/src/types.ts index 32b820715c14..b56e84f7b468 100644 --- a/packages/docusaurus-plugin-content-pages/src/types.ts +++ b/packages/docusaurus-plugin-content-pages/src/types.ts @@ -14,6 +14,8 @@ export interface PluginOptions { mdxPageComponent: string; remarkPlugins: ([Function, object] | Function)[]; rehypePlugins: string[]; + beforeDefaultRemarkPlugins: ([Function, object] | Function)[]; + beforeDefaultRehypePlugins: ([Function, object] | Function)[]; admonitions: any; } diff --git a/website/docs/using-plugins.md b/website/docs/using-plugins.md index b6cdb858ece0..c673bc5eeaf7 100644 --- a/website/docs/using-plugins.md +++ b/website/docs/using-plugins.md @@ -424,6 +424,12 @@ module.exports = { */ remarkPlugins: [], rehypePlugins: [], + /** + * Custom Remark and Rehype plugins passed to MDX before + * the default Docusaurus Remark and Rehype plugins. + */ + beforeDefaultRemarkPlugins: [], + beforeDefaultRehypePlugins: [], }, ], ],