From 34ba2810f493d354ce34b417fa5475f1a76cf8c6 Mon Sep 17 00:00:00 2001 From: Josh-Cena Date: Sat, 30 Oct 2021 11:33:50 +0800 Subject: [PATCH] feat(preset-classic): guard against unknown keys in options --- .../docusaurus-preset-classic/src/index.ts | 34 ++++++++++--------- website/docs/presets.md | 18 +++++----- .../version-2.0.0-beta.7/presets.md | 18 +++++----- .../version-2.0.0-beta.8/presets.md | 18 +++++----- 4 files changed, 45 insertions(+), 43 deletions(-) diff --git a/packages/docusaurus-preset-classic/src/index.ts b/packages/docusaurus-preset-classic/src/index.ts index bf28039c9f69..0b9976015533 100644 --- a/packages/docusaurus-preset-classic/src/index.ts +++ b/packages/docusaurus-preset-classic/src/index.ts @@ -31,40 +31,42 @@ export default function preset( const {themeConfig} = siteConfig; const {algolia, googleAnalytics, gtag} = themeConfig as Partial; const isProd = process.env.NODE_ENV === 'production'; + const {debug, docs, blog, pages, sitemap, theme, ...rest} = opts; const themes: PluginConfig[] = []; - themes.push(makePluginConfig('@docusaurus/theme-classic', opts.theme)); + themes.push(makePluginConfig('@docusaurus/theme-classic', theme)); if (algolia) { themes.push(require.resolve('@docusaurus/theme-search-algolia')); } const plugins: PluginConfig[] = []; - if (opts.docs !== false) { - plugins.push( - makePluginConfig('@docusaurus/plugin-content-docs', opts.docs), - ); + if (docs !== false) { + plugins.push(makePluginConfig('@docusaurus/plugin-content-docs', docs)); } - if (opts.blog !== false) { - plugins.push( - makePluginConfig('@docusaurus/plugin-content-blog', opts.blog), - ); + if (blog !== false) { + plugins.push(makePluginConfig('@docusaurus/plugin-content-blog', blog)); } - if (opts.pages !== false) { - plugins.push( - makePluginConfig('@docusaurus/plugin-content-pages', opts.pages), - ); + if (pages !== false) { + plugins.push(makePluginConfig('@docusaurus/plugin-content-pages', pages)); } if (isProd && googleAnalytics) { plugins.push(require.resolve('@docusaurus/plugin-google-analytics')); } - if (opts.debug || (typeof opts.debug === 'undefined' && !isProd)) { + if (debug || (debug === undefined && !isProd)) { plugins.push(require.resolve('@docusaurus/plugin-debug')); } if (isProd && gtag) { plugins.push(require.resolve('@docusaurus/plugin-google-gtag')); } - if (isProd && opts.sitemap !== false) { - plugins.push(makePluginConfig('@docusaurus/plugin-sitemap', opts.sitemap)); + if (isProd && sitemap !== false) { + plugins.push(makePluginConfig('@docusaurus/plugin-sitemap', sitemap)); + } + if (Object.keys(rest).length > 0) { + throw new Error( + `Unrecognized keys ${Object.keys(rest).join( + ', ', + )} found in preset-classic configuration. The allowed keys are debug, docs, blog, pages, sitemap, theme. Check the documentation: https://docusaurus.io/docs/presets#docusauruspreset-classic for more information on how to configure individual plugins.`, + ); } return {themes, plugins}; diff --git a/website/docs/presets.md b/website/docs/presets.md index 7d3eddb070e0..bfde28292374 100644 --- a/website/docs/presets.md +++ b/website/docs/presets.md @@ -74,15 +74,15 @@ This is especially useful when some plugins and themes are intended to be used t The classic preset that is usually shipped by default to new Docusaurus website. It is a set of plugins and themes. -| Themes | Plugins | -| ---------------------------------- | ------------------------------------- | -| `@docusaurus/theme-classic` | `@docusaurus/plugin-content-docs` | -| `@docusaurus/theme-search-algolia` | `@docusaurus/plugin-content-blog` | -| | `@docusaurus/plugin-content-pages` | -| | `@docusaurus/plugin-debug` | -| | `@docusaurus/plugin-google-analytics` | -| | `@docusaurus/plugin-google-gtag` | -| | `@docusaurus/plugin-sitemap` | +| Themes | Plugins | +| --- | --- | +| [`@docusaurus/theme-classic`](./api/themes/theme-configuration.md) | [`@docusaurus/plugin-content-docs`](./api/plugins/plugin-content-docs.md) | +| [`@docusaurus/theme-search-algolia`](./api/themes/theme-search-algolia.md) | [`@docusaurus/plugin-content-blog`](./api/plugins/plugin-content-blog.md) | +| | [`@docusaurus/plugin-content-pages`](./api/plugins/plugin-content-pages.md) | +| | [`@docusaurus/plugin-debug`](./api/plugins/plugin-debug.md) | +| | [`@docusaurus/plugin-google-analytics`](./api/plugins/plugin-google-analytics.md) | +| | [`@docusaurus/plugin-google-gtag`](./api/plugins/plugin-google-gtag.md) | +| | [`@docusaurus/plugin-sitemap`](./api/plugins/plugin-sitemap.md) | To specify plugin options individually, you can provide the necessary fields to certain plugins, i.e. `customCss` for `@docusaurus/theme-classic`, pass them in the preset field, like this: diff --git a/website/versioned_docs/version-2.0.0-beta.7/presets.md b/website/versioned_docs/version-2.0.0-beta.7/presets.md index 7d3eddb070e0..bfde28292374 100644 --- a/website/versioned_docs/version-2.0.0-beta.7/presets.md +++ b/website/versioned_docs/version-2.0.0-beta.7/presets.md @@ -74,15 +74,15 @@ This is especially useful when some plugins and themes are intended to be used t The classic preset that is usually shipped by default to new Docusaurus website. It is a set of plugins and themes. -| Themes | Plugins | -| ---------------------------------- | ------------------------------------- | -| `@docusaurus/theme-classic` | `@docusaurus/plugin-content-docs` | -| `@docusaurus/theme-search-algolia` | `@docusaurus/plugin-content-blog` | -| | `@docusaurus/plugin-content-pages` | -| | `@docusaurus/plugin-debug` | -| | `@docusaurus/plugin-google-analytics` | -| | `@docusaurus/plugin-google-gtag` | -| | `@docusaurus/plugin-sitemap` | +| Themes | Plugins | +| --- | --- | +| [`@docusaurus/theme-classic`](./api/themes/theme-configuration.md) | [`@docusaurus/plugin-content-docs`](./api/plugins/plugin-content-docs.md) | +| [`@docusaurus/theme-search-algolia`](./api/themes/theme-search-algolia.md) | [`@docusaurus/plugin-content-blog`](./api/plugins/plugin-content-blog.md) | +| | [`@docusaurus/plugin-content-pages`](./api/plugins/plugin-content-pages.md) | +| | [`@docusaurus/plugin-debug`](./api/plugins/plugin-debug.md) | +| | [`@docusaurus/plugin-google-analytics`](./api/plugins/plugin-google-analytics.md) | +| | [`@docusaurus/plugin-google-gtag`](./api/plugins/plugin-google-gtag.md) | +| | [`@docusaurus/plugin-sitemap`](./api/plugins/plugin-sitemap.md) | To specify plugin options individually, you can provide the necessary fields to certain plugins, i.e. `customCss` for `@docusaurus/theme-classic`, pass them in the preset field, like this: diff --git a/website/versioned_docs/version-2.0.0-beta.8/presets.md b/website/versioned_docs/version-2.0.0-beta.8/presets.md index 7d3eddb070e0..bfde28292374 100644 --- a/website/versioned_docs/version-2.0.0-beta.8/presets.md +++ b/website/versioned_docs/version-2.0.0-beta.8/presets.md @@ -74,15 +74,15 @@ This is especially useful when some plugins and themes are intended to be used t The classic preset that is usually shipped by default to new Docusaurus website. It is a set of plugins and themes. -| Themes | Plugins | -| ---------------------------------- | ------------------------------------- | -| `@docusaurus/theme-classic` | `@docusaurus/plugin-content-docs` | -| `@docusaurus/theme-search-algolia` | `@docusaurus/plugin-content-blog` | -| | `@docusaurus/plugin-content-pages` | -| | `@docusaurus/plugin-debug` | -| | `@docusaurus/plugin-google-analytics` | -| | `@docusaurus/plugin-google-gtag` | -| | `@docusaurus/plugin-sitemap` | +| Themes | Plugins | +| --- | --- | +| [`@docusaurus/theme-classic`](./api/themes/theme-configuration.md) | [`@docusaurus/plugin-content-docs`](./api/plugins/plugin-content-docs.md) | +| [`@docusaurus/theme-search-algolia`](./api/themes/theme-search-algolia.md) | [`@docusaurus/plugin-content-blog`](./api/plugins/plugin-content-blog.md) | +| | [`@docusaurus/plugin-content-pages`](./api/plugins/plugin-content-pages.md) | +| | [`@docusaurus/plugin-debug`](./api/plugins/plugin-debug.md) | +| | [`@docusaurus/plugin-google-analytics`](./api/plugins/plugin-google-analytics.md) | +| | [`@docusaurus/plugin-google-gtag`](./api/plugins/plugin-google-gtag.md) | +| | [`@docusaurus/plugin-sitemap`](./api/plugins/plugin-sitemap.md) | To specify plugin options individually, you can provide the necessary fields to certain plugins, i.e. `customCss` for `@docusaurus/theme-classic`, pass them in the preset field, like this: