fix(validation): allow non-object params to remark/rehype plugins (#6977)

Remark and Rehype plugins allow having options as a non-object type,
such as a string.

For instance, the official MDX docs even have an example of this:
See https://mdxjs.com/docs/extending-mdx/#using-plugins

The official plugin `remarkjs/remark-frontmatter` allows passing
a string, e.g. `"toml"` as the options arg, instead of an object.
This commit is contained in:
Alois Klink 2022-03-24 01:19:06 +00:00 committed by GitHub
parent 4b3f568b78
commit 4d2ab826b8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 5 additions and 6 deletions

View file

@ -32,8 +32,6 @@ exports[`validation schemas rehypePluginsSchema: for value=[[]] 1`] = `"\\"[0]\\
exports[`validation schemas rehypePluginsSchema: for value=[[null,null]] 1`] = `"\\"[0]\\" does not match any of the allowed types"`;
exports[`validation schemas rehypePluginsSchema: for value=[[null,true]] 1`] = `"\\"[0]\\" does not match any of the allowed types"`;
exports[`validation schemas rehypePluginsSchema: for value=[3] 1`] = `"\\"[0]\\" does not match any of the allowed types"`;
exports[`validation schemas rehypePluginsSchema: for value=[false] 1`] = `"\\"[0]\\" does not match any of the allowed types"`;
@ -50,8 +48,6 @@ exports[`validation schemas remarkPluginsSchema: for value=[[]] 1`] = `"\\"[0]\\
exports[`validation schemas remarkPluginsSchema: for value=[[null,null]] 1`] = `"\\"[0]\\" does not match any of the allowed types"`;
exports[`validation schemas remarkPluginsSchema: for value=[[null,true]] 1`] = `"\\"[0]\\" does not match any of the allowed types"`;
exports[`validation schemas remarkPluginsSchema: for value=[3] 1`] = `"\\"[0]\\" does not match any of the allowed types"`;
exports[`validation schemas remarkPluginsSchema: for value=[false] 1`] = `"\\"[0]\\" does not match any of the allowed types"`;

View file

@ -46,6 +46,10 @@ function testMarkdownPluginSchemas(schema: Joi.Schema) {
testOK([() => {}]);
testOK([[() => {}, {attr: 'val'}]]);
testOK([[() => {}, {attr: 'val'}], () => {}, [() => {}, {attr: 'val'}]]);
// cSpell:ignore remarkjs
// official `remarkjs/remark-frontmatter` plugin accepts string options
testOK([[() => {}, 'string-option']]);
testOK([[() => {}, true]]);
testFail(null);
testFail(false);
@ -55,7 +59,6 @@ function testMarkdownPluginSchemas(schema: Joi.Schema) {
testFail([3]);
testFail([[]]);
testFail([[() => {}, undefined]]);
testFail([[() => {}, true]]);
}
describe('validation schemas', () => {

View file

@ -19,7 +19,7 @@ export const PluginIdSchema = Joi.string()
const MarkdownPluginsSchema = Joi.array()
.items(
Joi.array().ordered(Joi.function().required(), Joi.object().required()),
Joi.array().ordered(Joi.function().required(), Joi.any().required()),
Joi.function(),
Joi.object(),
)