From 60d189a91c12527ceecc17c2f7de65fd586ce0af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Lorber?= Date: Thu, 18 Mar 2021 19:27:51 +0100 Subject: [PATCH] fix(v2): Export Joi from validation-utils package (#4459) --- packages/docusaurus-plugin-client-redirects/package.json | 1 - .../src/normalizePluginOptions.ts | 3 +-- .../src/redirectValidation.ts | 3 +-- packages/docusaurus-plugin-content-blog/package.json | 1 - .../src/__tests__/index.test.ts | 2 +- .../docusaurus-plugin-content-blog/src/pluginOptionSchema.ts | 2 +- packages/docusaurus-plugin-content-docs/package.json | 1 - packages/docusaurus-plugin-content-docs/src/options.ts | 2 +- packages/docusaurus-plugin-content-pages/package.json | 1 - .../docusaurus-plugin-content-pages/src/pluginOptionSchema.ts | 2 +- packages/docusaurus-plugin-pwa/package.json | 2 +- packages/docusaurus-plugin-pwa/src/pluginOptionSchema.js | 2 +- packages/docusaurus-plugin-sitemap/package.json | 2 +- packages/docusaurus-plugin-sitemap/src/pluginOptionSchema.ts | 2 +- packages/docusaurus-theme-classic/package.json | 1 - packages/docusaurus-theme-classic/src/validateThemeConfig.js | 3 +-- packages/docusaurus-theme-live-codeblock/package.json | 2 +- .../src/validateThemeConfig.js | 2 +- packages/docusaurus-theme-search-algolia/package.json | 2 +- .../src/validateThemeConfig.js | 2 +- packages/docusaurus-utils-validation/package.json | 1 + .../src/__tests__/validationSchemas.test.ts | 2 +- packages/docusaurus-utils-validation/src/index.ts | 3 +++ packages/docusaurus/package.json | 1 - packages/docusaurus/src/server/configValidation.ts | 2 +- packages/docusaurus/src/server/translations/translations.ts | 2 +- website/docs/lifecycle-apis.md | 4 ++++ 27 files changed, 26 insertions(+), 27 deletions(-) diff --git a/packages/docusaurus-plugin-client-redirects/package.json b/packages/docusaurus-plugin-client-redirects/package.json index b66068fd1b..30a7af5204 100644 --- a/packages/docusaurus-plugin-client-redirects/package.json +++ b/packages/docusaurus-plugin-client-redirects/package.json @@ -25,7 +25,6 @@ "eta": "^1.11.0", "fs-extra": "^9.1.0", "globby": "^11.0.2", - "joi": "^17.4.0", "lodash": "^4.17.20", "tslib": "^2.1.0" }, diff --git a/packages/docusaurus-plugin-client-redirects/src/normalizePluginOptions.ts b/packages/docusaurus-plugin-client-redirects/src/normalizePluginOptions.ts index eb6150be48..c312019137 100644 --- a/packages/docusaurus-plugin-client-redirects/src/normalizePluginOptions.ts +++ b/packages/docusaurus-plugin-client-redirects/src/normalizePluginOptions.ts @@ -6,8 +6,7 @@ */ import {PluginOptions, RedirectOption, UserPluginOptions} from './types'; -import * as Joi from 'joi'; -import {PathnameSchema} from '@docusaurus/utils-validation'; +import {Joi, PathnameSchema} from '@docusaurus/utils-validation'; import {DEFAULT_PLUGIN_ID} from '@docusaurus/core/lib/constants'; export const DefaultPluginOptions: PluginOptions = { diff --git a/packages/docusaurus-plugin-client-redirects/src/redirectValidation.ts b/packages/docusaurus-plugin-client-redirects/src/redirectValidation.ts index 85dccfc865..4108051572 100644 --- a/packages/docusaurus-plugin-client-redirects/src/redirectValidation.ts +++ b/packages/docusaurus-plugin-client-redirects/src/redirectValidation.ts @@ -5,9 +5,8 @@ * LICENSE file in the root directory of this source tree. */ -import * as Joi from 'joi'; import {RedirectMetadata} from './types'; -import {PathnameSchema} from '@docusaurus/utils-validation'; +import {Joi, PathnameSchema} from '@docusaurus/utils-validation'; const RedirectSchema = Joi.object({ from: PathnameSchema.required(), diff --git a/packages/docusaurus-plugin-content-blog/package.json b/packages/docusaurus-plugin-content-blog/package.json index 757d536d01..2d4264d502 100644 --- a/packages/docusaurus-plugin-content-blog/package.json +++ b/packages/docusaurus-plugin-content-blog/package.json @@ -27,7 +27,6 @@ "feed": "^4.2.2", "fs-extra": "^9.1.0", "globby": "^11.0.2", - "joi": "^17.4.0", "loader-utils": "^1.2.3", "lodash": "^4.17.20", "reading-time": "^1.3.0", diff --git a/packages/docusaurus-plugin-content-blog/src/__tests__/index.test.ts b/packages/docusaurus-plugin-content-blog/src/__tests__/index.test.ts index e9fefc9317..077698f48e 100644 --- a/packages/docusaurus-plugin-content-blog/src/__tests__/index.test.ts +++ b/packages/docusaurus-plugin-content-blog/src/__tests__/index.test.ts @@ -13,7 +13,7 @@ import pluginContentBlog from '../index'; import {DocusaurusConfig, LoadContext, I18n} from '@docusaurus/types'; import {PluginOptionSchema} from '../pluginOptionSchema'; import {PluginOptions, EditUrlFunction} from '../types'; -import Joi from 'joi'; +import {Joi} from '@docusaurus/utils-validation'; function getI18n(locale: string): I18n { return { diff --git a/packages/docusaurus-plugin-content-blog/src/pluginOptionSchema.ts b/packages/docusaurus-plugin-content-blog/src/pluginOptionSchema.ts index 2e66c7d8cb..4a0073ed56 100644 --- a/packages/docusaurus-plugin-content-blog/src/pluginOptionSchema.ts +++ b/packages/docusaurus-plugin-content-blog/src/pluginOptionSchema.ts @@ -5,8 +5,8 @@ * LICENSE file in the root directory of this source tree. */ -import * as Joi from 'joi'; import { + Joi, RemarkPluginsSchema, RehypePluginsSchema, AdmonitionsSchema, diff --git a/packages/docusaurus-plugin-content-docs/package.json b/packages/docusaurus-plugin-content-docs/package.json index 461e2668c4..4956f93069 100644 --- a/packages/docusaurus-plugin-content-docs/package.json +++ b/packages/docusaurus-plugin-content-docs/package.json @@ -34,7 +34,6 @@ "fs-extra": "^9.1.0", "globby": "^11.0.2", "import-fresh": "^3.2.2", - "joi": "^17.4.0", "loader-utils": "^1.2.3", "lodash": "^4.17.20", "remark-admonitions": "^1.2.1", diff --git a/packages/docusaurus-plugin-content-docs/src/options.ts b/packages/docusaurus-plugin-content-docs/src/options.ts index 7e896d5919..e7f7bcb1c7 100644 --- a/packages/docusaurus-plugin-content-docs/src/options.ts +++ b/packages/docusaurus-plugin-content-docs/src/options.ts @@ -4,9 +4,9 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ -import * as Joi from 'joi'; import {PluginOptions} from './types'; import { + Joi, RemarkPluginsSchema, RehypePluginsSchema, AdmonitionsSchema, diff --git a/packages/docusaurus-plugin-content-pages/package.json b/packages/docusaurus-plugin-content-pages/package.json index 181be63301..f2e403285f 100644 --- a/packages/docusaurus-plugin-content-pages/package.json +++ b/packages/docusaurus-plugin-content-pages/package.json @@ -24,7 +24,6 @@ "@docusaurus/utils": "2.0.0-alpha.72", "@docusaurus/utils-validation": "2.0.0-alpha.72", "globby": "^11.0.2", - "joi": "^17.4.0", "loader-utils": "^1.2.3", "lodash": "^4.17.20", "minimatch": "^3.0.4", diff --git a/packages/docusaurus-plugin-content-pages/src/pluginOptionSchema.ts b/packages/docusaurus-plugin-content-pages/src/pluginOptionSchema.ts index d64b22d4a7..92307002e0 100644 --- a/packages/docusaurus-plugin-content-pages/src/pluginOptionSchema.ts +++ b/packages/docusaurus-plugin-content-pages/src/pluginOptionSchema.ts @@ -4,9 +4,9 @@ * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ -import * as Joi from 'joi'; import {PluginOptions} from './types'; import { + Joi, RemarkPluginsSchema, RehypePluginsSchema, AdmonitionsSchema, diff --git a/packages/docusaurus-plugin-pwa/package.json b/packages/docusaurus-plugin-pwa/package.json index acc9400fab..a454162de9 100644 --- a/packages/docusaurus-plugin-pwa/package.json +++ b/packages/docusaurus-plugin-pwa/package.json @@ -17,10 +17,10 @@ "@babel/plugin-proposal-optional-chaining": "^7.12.16", "@babel/preset-env": "^7.12.16", "@docusaurus/core": "2.0.0-alpha.72", + "@docusaurus/utils-validation": "2.0.0-alpha.72", "babel-loader": "^8.2.2", "clsx": "^1.1.1", "core-js": "^2.6.5", - "joi": "^17.4.0", "terser-webpack-plugin": "^4.1.0", "webpack": "^4.44.1", "webpack-merge": "^4.2.2", diff --git a/packages/docusaurus-plugin-pwa/src/pluginOptionSchema.js b/packages/docusaurus-plugin-pwa/src/pluginOptionSchema.js index ca00654835..8dad8e3af1 100644 --- a/packages/docusaurus-plugin-pwa/src/pluginOptionSchema.js +++ b/packages/docusaurus-plugin-pwa/src/pluginOptionSchema.js @@ -5,7 +5,7 @@ * LICENSE file in the root directory of this source tree. */ -const Joi = require('joi'); +const {Joi} = require('@docusaurus/utils-validation'); const path = require('path'); const DEFAULT_OPTIONS = { diff --git a/packages/docusaurus-plugin-sitemap/package.json b/packages/docusaurus-plugin-sitemap/package.json index 21fb3ba9a4..1918b76fab 100644 --- a/packages/docusaurus-plugin-sitemap/package.json +++ b/packages/docusaurus-plugin-sitemap/package.json @@ -20,8 +20,8 @@ "@docusaurus/core": "2.0.0-alpha.72", "@docusaurus/types": "2.0.0-alpha.72", "@docusaurus/utils": "2.0.0-alpha.72", + "@docusaurus/utils-validation": "2.0.0-alpha.72", "fs-extra": "^9.1.0", - "joi": "^17.4.0", "sitemap": "^6.3.6", "tslib": "^2.1.0" }, diff --git a/packages/docusaurus-plugin-sitemap/src/pluginOptionSchema.ts b/packages/docusaurus-plugin-sitemap/src/pluginOptionSchema.ts index b96918a7c6..5ba16df2a6 100644 --- a/packages/docusaurus-plugin-sitemap/src/pluginOptionSchema.ts +++ b/packages/docusaurus-plugin-sitemap/src/pluginOptionSchema.ts @@ -5,7 +5,7 @@ * LICENSE file in the root directory of this source tree. */ -import * as Joi from 'joi'; +import {Joi} from '@docusaurus/utils-validation'; import {EnumChangefreq} from 'sitemap'; import {PluginOptions} from './types'; diff --git a/packages/docusaurus-theme-classic/package.json b/packages/docusaurus-theme-classic/package.json index e701095b3a..72f4284502 100644 --- a/packages/docusaurus-theme-classic/package.json +++ b/packages/docusaurus-theme-classic/package.json @@ -40,7 +40,6 @@ "fs-extra": "^9.1.0", "globby": "^11.0.2", "infima": "0.2.0-alpha.21", - "joi": "^17.4.0", "lodash": "^4.17.20", "parse-numeric-range": "^1.2.0", "postcss": "^7.0.2", diff --git a/packages/docusaurus-theme-classic/src/validateThemeConfig.js b/packages/docusaurus-theme-classic/src/validateThemeConfig.js index 45e3448c26..b2bb46a82c 100644 --- a/packages/docusaurus-theme-classic/src/validateThemeConfig.js +++ b/packages/docusaurus-theme-classic/src/validateThemeConfig.js @@ -5,8 +5,7 @@ * LICENSE file in the root directory of this source tree. */ -const Joi = require('joi'); -const {URISchema} = require('@docusaurus/utils-validation'); +const {Joi, URISchema} = require('@docusaurus/utils-validation'); const DEFAULT_DOCS_CONFIG = { versionPersistence: 'localStorage', diff --git a/packages/docusaurus-theme-live-codeblock/package.json b/packages/docusaurus-theme-live-codeblock/package.json index 58156b72b3..a0fd00241f 100644 --- a/packages/docusaurus-theme-live-codeblock/package.json +++ b/packages/docusaurus-theme-live-codeblock/package.json @@ -14,9 +14,9 @@ "license": "MIT", "dependencies": { "@docusaurus/core": "2.0.0-alpha.72", + "@docusaurus/utils-validation": "2.0.0-alpha.72", "@philpl/buble": "^0.19.7", "clsx": "^1.1.1", - "joi": "^17.4.0", "parse-numeric-range": "^1.2.0", "prism-react-renderer": "^1.1.1", "react-live": "^2.2.3" diff --git a/packages/docusaurus-theme-live-codeblock/src/validateThemeConfig.js b/packages/docusaurus-theme-live-codeblock/src/validateThemeConfig.js index 7b294874d6..80e53582d8 100644 --- a/packages/docusaurus-theme-live-codeblock/src/validateThemeConfig.js +++ b/packages/docusaurus-theme-live-codeblock/src/validateThemeConfig.js @@ -5,7 +5,7 @@ * LICENSE file in the root directory of this source tree. */ -const Joi = require('joi'); +const {Joi} = require('@docusaurus/utils-validation'); const DEFAULT_CONFIG = { playgroundPosition: 'bottom', diff --git a/packages/docusaurus-theme-search-algolia/package.json b/packages/docusaurus-theme-search-algolia/package.json index d30bad456a..aae4e407ae 100644 --- a/packages/docusaurus-theme-search-algolia/package.json +++ b/packages/docusaurus-theme-search-algolia/package.json @@ -17,11 +17,11 @@ "@docusaurus/core": "2.0.0-alpha.72", "@docusaurus/theme-common": "2.0.0-alpha.72", "@docusaurus/utils": "2.0.0-alpha.72", + "@docusaurus/utils-validation": "2.0.0-alpha.72", "algoliasearch": "^4.8.4", "algoliasearch-helper": "^3.3.4", "clsx": "^1.1.1", "eta": "^1.12.1", - "joi": "^17.4.0", "lodash": "^4.17.20" }, "peerDependencies": { diff --git a/packages/docusaurus-theme-search-algolia/src/validateThemeConfig.js b/packages/docusaurus-theme-search-algolia/src/validateThemeConfig.js index 951f745853..1c514229b7 100644 --- a/packages/docusaurus-theme-search-algolia/src/validateThemeConfig.js +++ b/packages/docusaurus-theme-search-algolia/src/validateThemeConfig.js @@ -5,7 +5,7 @@ * LICENSE file in the root directory of this source tree. */ -const Joi = require('joi'); +const {Joi} = require('@docusaurus/utils-validation'); const DEFAULT_CONFIG = { contextualSearch: false, // future: maybe we want to enable this by default diff --git a/packages/docusaurus-utils-validation/package.json b/packages/docusaurus-utils-validation/package.json index 158e15d480..4e329b6f28 100644 --- a/packages/docusaurus-utils-validation/package.json +++ b/packages/docusaurus-utils-validation/package.json @@ -19,6 +19,7 @@ "license": "MIT", "dependencies": { "@docusaurus/utils": "2.0.0-alpha.72", + "@docusaurus/utils-validation": "2.0.0-alpha.72", "chalk": "^4.1.0", "joi": "^17.4.0", "tslib": "^2.1.0" diff --git a/packages/docusaurus-utils-validation/src/__tests__/validationSchemas.test.ts b/packages/docusaurus-utils-validation/src/__tests__/validationSchemas.test.ts index 0bff8248eb..c5160920aa 100644 --- a/packages/docusaurus-utils-validation/src/__tests__/validationSchemas.test.ts +++ b/packages/docusaurus-utils-validation/src/__tests__/validationSchemas.test.ts @@ -5,7 +5,7 @@ * LICENSE file in the root directory of this source tree. */ -import * as Joi from 'joi'; +import {Joi} from '@docusaurus/utils-validation'; import { AdmonitionsSchema, diff --git a/packages/docusaurus-utils-validation/src/index.ts b/packages/docusaurus-utils-validation/src/index.ts index f8e104bb38..c9760ffbbe 100644 --- a/packages/docusaurus-utils-validation/src/index.ts +++ b/packages/docusaurus-utils-validation/src/index.ts @@ -5,5 +5,8 @@ * LICENSE file in the root directory of this source tree. */ +// /!\ don't remove this export, as we recommend plugin authors to use it +export {default as Joi} from 'joi'; + export * from './validationUtils'; export * from './validationSchemas'; diff --git a/packages/docusaurus/package.json b/packages/docusaurus/package.json index 159b938505..94df9b80d8 100644 --- a/packages/docusaurus/package.json +++ b/packages/docusaurus/package.json @@ -81,7 +81,6 @@ "html-webpack-plugin": "^4.5.0", "import-fresh": "^3.3.0", "is-root": "^2.1.0", - "joi": "^17.4.0", "leven": "^3.1.0", "lodash": "^4.17.20", "mini-css-extract-plugin": "^0.8.0", diff --git a/packages/docusaurus/src/server/configValidation.ts b/packages/docusaurus/src/server/configValidation.ts index 137d7eaaaf..6e164b482d 100644 --- a/packages/docusaurus/src/server/configValidation.ts +++ b/packages/docusaurus/src/server/configValidation.ts @@ -7,8 +7,8 @@ import {DocusaurusConfig, I18nConfig} from '@docusaurus/types'; import {DEFAULT_CONFIG_FILE_NAME} from '../constants'; -import Joi from 'joi'; import { + Joi, logValidationBugReportHint, isValidationDisabledEscapeHatch, URISchema, diff --git a/packages/docusaurus/src/server/translations/translations.ts b/packages/docusaurus/src/server/translations/translations.ts index dff7e5d6e9..205632e0bc 100644 --- a/packages/docusaurus/src/server/translations/translations.ts +++ b/packages/docusaurus/src/server/translations/translations.ts @@ -14,7 +14,7 @@ import { TranslationMessage, } from '@docusaurus/types'; import {getPluginI18nPath, toMessageRelativeFilePath} from '@docusaurus/utils'; -import * as Joi from 'joi'; +import {Joi} from '@docusaurus/utils-validation'; import chalk from 'chalk'; export type WriteTranslationsOptions = { diff --git a/website/docs/lifecycle-apis.md b/website/docs/lifecycle-apis.md index c41b3ac914..b815500b7c 100644 --- a/website/docs/lifecycle-apis.md +++ b/website/docs/lifecycle-apis.md @@ -27,6 +27,8 @@ Return validated and normalized options for the plugin. This method is called be [Joi](https://www.npmjs.com/package/joi) is recommended for validation and normalization of options. +To avoid mixing Joi versions, use `const {Joi} = require("@docusaurus/utils-validation")` + ::: If you don't use **[Joi](https://www.npmjs.com/package/joi)** for validation you can throw an Error in case of invalid options and return options in case of success. @@ -77,6 +79,8 @@ Return validated and normalized configuration for the theme. [Joi](https://www.npmjs.com/package/joi) is recommended for validation and normalization of theme config. +To avoid mixing Joi versions, use `const {Joi} = require("@docusaurus/utils-validation")` + ::: If you don't use **[Joi](https://www.npmjs.com/package/joi)** for validation you can throw an Error in case of invalid options.