mirror of
https://github.com/facebook/docusaurus.git
synced 2025-06-15 17:22:35 +02:00
feat(v2): option and config validation life cycle method for official plugins (#2943)
* add validation for blog plugin * fix wrong default component * fix test and add yup to package.json * remove console.log * add validation for classic theme and code block theme * add yup to packages * remove console.log * fix build * fix logo required * replaced yup with joi * fix test * remove hapi from docusuars core * replace joi with @hapi/joi * fix eslint * fix remark plugin type * change remark plugin validation to match documentation * move schema to it's own file * allow unknown only on outer theme object * fix type for schema type * fix yarn.lock * support both commonjs and ES modules * add docs for new lifecycle method
This commit is contained in:
parent
ce10646606
commit
81d855355e
18 changed files with 490 additions and 63 deletions
80
packages/docusaurus-plugin-content-blog/src/validation.ts
Normal file
80
packages/docusaurus-plugin-content-blog/src/validation.ts
Normal file
|
@ -0,0 +1,80 @@
|
|||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* 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 '@hapi/joi';
|
||||
|
||||
export const DefaultOptions = {
|
||||
feedOptions: {},
|
||||
beforeDefaultRehypePlugins: [],
|
||||
beforeDefaultRemarkPlugins: [],
|
||||
admonitions: {},
|
||||
truncateMarker: /<!--\s*(truncate)\s*-->/,
|
||||
rehypePlugins: [],
|
||||
remarkPlugins: [],
|
||||
showReadingTime: true,
|
||||
blogTagsPostsComponent: '@theme/BlogTagsPostsPage',
|
||||
blogTagsListComponent: '@theme/BlogTagsListPage',
|
||||
blogPostComponent: '@theme/BlogPostPage',
|
||||
blogListComponent: '@theme/BlogListPage',
|
||||
postsPerPage: 10,
|
||||
include: ['*.md', '*.mdx'],
|
||||
routeBasePath: 'blog',
|
||||
path: 'blog',
|
||||
};
|
||||
|
||||
export const PluginOptionSchema = Joi.object({
|
||||
path: Joi.string().default(DefaultOptions.path),
|
||||
routeBasePath: Joi.string().default(DefaultOptions.routeBasePath),
|
||||
include: Joi.array().items(Joi.string()).default(DefaultOptions.include),
|
||||
postsPerPage: Joi.number()
|
||||
.integer()
|
||||
.min(1)
|
||||
.default(DefaultOptions.postsPerPage),
|
||||
blogListComponent: Joi.string().default(DefaultOptions.blogListComponent),
|
||||
blogPostComponent: Joi.string().default(DefaultOptions.blogPostComponent),
|
||||
blogTagsListComponent: Joi.string().default(
|
||||
DefaultOptions.blogTagsListComponent,
|
||||
),
|
||||
blogTagsPostsComponent: Joi.string().default(
|
||||
DefaultOptions.blogTagsPostsComponent,
|
||||
),
|
||||
showReadingTime: Joi.bool().default(DefaultOptions.showReadingTime),
|
||||
remarkPlugins: Joi.array()
|
||||
.items(
|
||||
Joi.alternatives().try(
|
||||
Joi.function(),
|
||||
Joi.array()
|
||||
.items(Joi.function().required(), Joi.object().required())
|
||||
.length(2),
|
||||
),
|
||||
)
|
||||
.default(DefaultOptions.remarkPlugins),
|
||||
rehypePlugins: Joi.array()
|
||||
.items(Joi.string())
|
||||
.default(DefaultOptions.rehypePlugins),
|
||||
editUrl: Joi.string().uri(),
|
||||
truncateMarker: Joi.object().default(DefaultOptions.truncateMarker),
|
||||
admonitions: Joi.object().default(DefaultOptions.admonitions),
|
||||
beforeDefaultRemarkPlugins: Joi.array()
|
||||
.items(Joi.object())
|
||||
.default(DefaultOptions.beforeDefaultRemarkPlugins),
|
||||
beforeDefaultRehypePlugins: Joi.array()
|
||||
.items(Joi.object())
|
||||
.default(DefaultOptions.beforeDefaultRehypePlugins),
|
||||
feedOptions: Joi.object({
|
||||
type: Joi.alternatives().conditional(
|
||||
Joi.string().equal('all', 'rss', 'atom'),
|
||||
{
|
||||
then: Joi.custom((val) => (val === 'all' ? ['rss', 'atom'] : [val])),
|
||||
},
|
||||
),
|
||||
title: Joi.string(),
|
||||
description: Joi.string(),
|
||||
copyright: Joi.string(),
|
||||
language: Joi.string(),
|
||||
}).default(DefaultOptions.feedOptions),
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue