mirror of
https://github.com/facebook/docusaurus.git
synced 2025-05-18 11:36:53 +02:00
fix(v2): fix theme validation for prism field and add tests (#3210)
* fix(v2): fix theme validation for prism field * chore(v2): minor changes * chore(v2): remove unused dependencies
This commit is contained in:
parent
0d7314a6f7
commit
8f0c00f3d4
4 changed files with 131 additions and 63 deletions
|
@ -27,7 +27,85 @@ function testValidateThemeConfig(themeConfig) {
|
|||
return validateThemeConfig({themeConfig, validate});
|
||||
}
|
||||
|
||||
describe('color mode config', () => {
|
||||
describe('themeConfig', () => {
|
||||
test('should accept valid theme config', () => {
|
||||
const userConfig = {
|
||||
prism: {
|
||||
theme: require('prism-react-renderer/themes/github'),
|
||||
darkTheme: require('prism-react-renderer/themes/dracula'),
|
||||
defaultLanguage: 'javascript',
|
||||
additionalLanguages: ['kotlin', 'java'],
|
||||
},
|
||||
announcementBar: {
|
||||
id: 'supportus',
|
||||
content: 'pls support',
|
||||
backgroundColor: '#fff',
|
||||
textColor: '#000',
|
||||
},
|
||||
image: 'img/docusaurus-soc.png',
|
||||
navbar: {
|
||||
hideOnScroll: true,
|
||||
title: 'Docusaurus',
|
||||
logo: {
|
||||
alt: 'Docusaurus Logo',
|
||||
src: 'img/docusaurus.svg',
|
||||
srcDark: 'img/docusaurus_keytar.svg',
|
||||
},
|
||||
items: [
|
||||
{
|
||||
type: 'docsVersionDropdown',
|
||||
position: 'left',
|
||||
nextVersionLabel: '2.0.0-next',
|
||||
},
|
||||
{
|
||||
to: 'docs/next/support',
|
||||
label: 'Community',
|
||||
position: 'left',
|
||||
activeBaseRegex: `docs/next/(support|team|resources)`,
|
||||
'aria-label': 'Community',
|
||||
},
|
||||
],
|
||||
},
|
||||
footer: {
|
||||
style: 'dark',
|
||||
links: [
|
||||
{
|
||||
title: 'Learn',
|
||||
items: [
|
||||
{
|
||||
label: 'Introduction',
|
||||
to: 'docs',
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
logo: {
|
||||
alt: 'Facebook Open Source Logo',
|
||||
src: 'img/oss_logo.png',
|
||||
href: 'https://opensource.facebook.com',
|
||||
},
|
||||
copyright: `Copyright © ${new Date().getFullYear()} Facebook, Inc. Built with Docusaurus.`,
|
||||
},
|
||||
};
|
||||
expect(testValidateThemeConfig(userConfig)).toEqual({
|
||||
colorMode: DEFAULT_COLOR_MODE_CONFIG,
|
||||
...userConfig,
|
||||
});
|
||||
});
|
||||
|
||||
test('should accept valid prism config', () => {
|
||||
const prismConfig = {
|
||||
prism: {
|
||||
additionalLanguages: ['kotlin', 'java'],
|
||||
},
|
||||
};
|
||||
expect(testValidateThemeConfig(prismConfig)).toEqual({
|
||||
colorMode: DEFAULT_COLOR_MODE_CONFIG,
|
||||
...prismConfig,
|
||||
});
|
||||
});
|
||||
|
||||
describe('color mode config', () => {
|
||||
test('minimal config', () => {
|
||||
const colorMode = {
|
||||
switchConfig: {
|
||||
|
@ -83,4 +161,5 @@ describe('color mode config', () => {
|
|||
colorMode: mergeDefault(colorMode),
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -203,6 +203,18 @@ const ThemeConfigSchema = Joi.object({
|
|||
}),
|
||||
),
|
||||
}),
|
||||
prism: Joi.object({
|
||||
theme: Joi.object({
|
||||
plain: Joi.alternatives().try(Joi.array(), Joi.object()).required(),
|
||||
styles: Joi.alternatives().try(Joi.array(), Joi.object()).required(),
|
||||
}),
|
||||
darkTheme: Joi.object({
|
||||
plain: Joi.alternatives().try(Joi.array(), Joi.object()).required(),
|
||||
styles: Joi.alternatives().try(Joi.array(), Joi.object()).required(),
|
||||
}),
|
||||
defaultLanguage: Joi.string(),
|
||||
additionalLanguages: Joi.array().items(Joi.string()),
|
||||
}).unknown(),
|
||||
});
|
||||
|
||||
exports.validateThemeConfig = ({validate, themeConfig}) => {
|
||||
|
|
|
@ -8,7 +8,6 @@
|
|||
},
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@hapi/joi": "^17.1.1",
|
||||
"@philpl/buble": "^0.19.7",
|
||||
"clsx": "^1.1.1",
|
||||
"parse-numeric-range": "^0.0.2",
|
||||
|
@ -22,8 +21,5 @@
|
|||
},
|
||||
"engines": {
|
||||
"node": ">=10.15.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/hapi__joi": "^17.1.2"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,7 +6,6 @@
|
|||
*/
|
||||
|
||||
const path = require('path');
|
||||
const Joi = require('@hapi/joi');
|
||||
|
||||
module.exports = function () {
|
||||
return {
|
||||
|
@ -30,21 +29,3 @@ module.exports = function () {
|
|||
},
|
||||
};
|
||||
};
|
||||
|
||||
const ThemeConfigSchema = Joi.object({
|
||||
prism: Joi.object({
|
||||
theme: Joi.object({
|
||||
plain: Joi.alternatives().try(Joi.array(), Joi.object()).required(),
|
||||
styles: Joi.alternatives().try(Joi.array(), Joi.object()).required(),
|
||||
}),
|
||||
darkTheme: Joi.object({
|
||||
plain: Joi.alternatives().try(Joi.array(), Joi.object()).required(),
|
||||
styles: Joi.alternatives().try(Joi.array(), Joi.object()).required(),
|
||||
}),
|
||||
defaultLanguage: Joi.string(),
|
||||
}),
|
||||
});
|
||||
|
||||
module.exports.validateThemeConfig = ({validate, themeConfig}) => {
|
||||
return validate(ThemeConfigSchema, themeConfig);
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue