mirror of
https://github.com/facebook/docusaurus.git
synced 2025-05-18 19:46:57 +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,6 +27,84 @@ function testValidateThemeConfig(themeConfig) {
|
||||||
return validateThemeConfig({themeConfig, validate});
|
return validateThemeConfig({themeConfig, validate});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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', () => {
|
describe('color mode config', () => {
|
||||||
test('minimal config', () => {
|
test('minimal config', () => {
|
||||||
const colorMode = {
|
const colorMode = {
|
||||||
|
@ -84,3 +162,4 @@ describe('color mode config', () => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
});
|
||||||
|
|
|
@ -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}) => {
|
exports.validateThemeConfig = ({validate, themeConfig}) => {
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
},
|
},
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@hapi/joi": "^17.1.1",
|
|
||||||
"@philpl/buble": "^0.19.7",
|
"@philpl/buble": "^0.19.7",
|
||||||
"clsx": "^1.1.1",
|
"clsx": "^1.1.1",
|
||||||
"parse-numeric-range": "^0.0.2",
|
"parse-numeric-range": "^0.0.2",
|
||||||
|
@ -22,8 +21,5 @@
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=10.15.1"
|
"node": ">=10.15.1"
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"@types/hapi__joi": "^17.1.2"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,6 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const Joi = require('@hapi/joi');
|
|
||||||
|
|
||||||
module.exports = function () {
|
module.exports = function () {
|
||||||
return {
|
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