feat(v2): enable feeds by default in blog plugin (#3842)

* feat: enables feeds by default in blog

* feat(v2): enable feeds by default

committing a failed attempt for review

* feat(v2): enable feeds by default in blog plugin

- allow validation to work with arrays syntax
- using DEFAULT_OPTIONS.feedOptions.type instead

* feat(v2): enable feeds by default in blog plugin

- added documentation for feedOptions

* feat(v2): enable feeds by default in blog plugin

- modified implementation to allow feeds to be disable without error
- added unit test to ensure type: null leads to type: null after
  validation
- added documentation to explain how to disable feed generation
This commit is contained in:
Cindy Gu 2020-12-10 12:35:19 -05:00 committed by GitHub
parent dd8f3257a8
commit 0b05806593
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 46 additions and 10 deletions

View file

@ -82,6 +82,34 @@ test('should convert all feed type to array with other feed type', () => {
}); });
}); });
test('should accept null type and return same', () => {
const {value, error} = PluginOptionSchema.validate({
feedOptions: {type: null},
});
expect(value).toEqual({
...DEFAULT_OPTIONS,
feedOptions: {type: null},
});
expect(error).toBe(undefined);
});
test('should contain array with rss + atom for missing feed type', () => {
const {value} = PluginOptionSchema.validate({
feedOptions: {},
});
expect(value).toEqual(DEFAULT_OPTIONS);
});
test('should have array with rss + atom, title for missing feed type', () => {
const {value} = PluginOptionSchema.validate({
feedOptions: {title: 'title'},
});
expect(value).toEqual({
...DEFAULT_OPTIONS,
feedOptions: {type: ['rss', 'atom'], title: 'title'},
});
});
describe('blog sidebar', () => { describe('blog sidebar', () => {
test('should accept 0 sidebar count', () => { test('should accept 0 sidebar count', () => {
const userOptions = {blogSidebarCount: 0}; const userOptions = {blogSidebarCount: 0};

View file

@ -14,7 +14,7 @@ import {
} from '@docusaurus/utils-validation'; } from '@docusaurus/utils-validation';
export const DEFAULT_OPTIONS = { export const DEFAULT_OPTIONS = {
feedOptions: {}, feedOptions: {type: ['rss', 'atom']},
beforeDefaultRehypePlugins: [], beforeDefaultRehypePlugins: [],
beforeDefaultRemarkPlugins: [], beforeDefaultRemarkPlugins: [],
admonitions: {}, admonitions: {},
@ -76,12 +76,20 @@ export const PluginOptionSchema = Joi.object({
DEFAULT_OPTIONS.beforeDefaultRehypePlugins, DEFAULT_OPTIONS.beforeDefaultRehypePlugins,
), ),
feedOptions: Joi.object({ feedOptions: Joi.object({
type: Joi.alternatives().conditional( type: Joi.alternatives()
.try(
Joi.array().items(Joi.string()),
Joi.alternatives().conditional(
Joi.string().equal('all', 'rss', 'atom'), Joi.string().equal('all', 'rss', 'atom'),
{ {
then: Joi.custom((val) => (val === 'all' ? ['rss', 'atom'] : [val])), then: Joi.custom((val) =>
val === 'all' ? ['rss', 'atom'] : [val],
),
}, },
), ),
)
.allow(null)
.default(DEFAULT_OPTIONS.feedOptions.type),
title: Joi.string().allow(''), title: Joi.string().allow(''),
description: Joi.string().allow(''), description: Joi.string().allow(''),
copyright: Joi.string(), copyright: Joi.string(),

View file

@ -51,7 +51,7 @@ export interface PluginOptions {
truncateMarker: RegExp; truncateMarker: RegExp;
showReadingTime: boolean; showReadingTime: boolean;
feedOptions: { feedOptions: {
type: [FeedType]; type?: [FeedType] | null;
title?: string; title?: string;
description?: string; description?: string;
copyright: string; copyright: string;

View file

@ -89,11 +89,11 @@ Or this.
## Feed ## Feed
You can generate RSS/ Atom feed by passing feedOptions. You can generate RSS/Atom feed by passing feedOptions. By default, RSS and Atom feeds are generated. To disable feed generation, set `feedOptions.type` to `null`.
```ts ```ts
feedOptions?: { feedOptions?: {
type: 'rss' | 'atom' | 'all'; type?: 'rss' | 'atom' | 'all' | null;
title?: string; title?: string;
description?: string; description?: string;
copyright: string; copyright: string;