Skip to content

Commit

Permalink
feat(v2): enable feeds by default in blog plugin (#3842)
Browse files Browse the repository at this point in the history
* 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
  • Loading branch information
cindygu4 committed Dec 10, 2020
1 parent dd8f325 commit 0b05806
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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', () => {
test('should accept 0 sidebar count', () => {
const userOptions = {blogSidebarCount: 0};
Expand Down
22 changes: 15 additions & 7 deletions packages/docusaurus-plugin-content-blog/src/pluginOptionSchema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import {
} from '@docusaurus/utils-validation';

export const DEFAULT_OPTIONS = {
feedOptions: {},
feedOptions: {type: ['rss', 'atom']},
beforeDefaultRehypePlugins: [],
beforeDefaultRemarkPlugins: [],
admonitions: {},
Expand Down Expand Up @@ -76,12 +76,20 @@ export const PluginOptionSchema = Joi.object({
DEFAULT_OPTIONS.beforeDefaultRehypePlugins,
),
feedOptions: Joi.object({
type: Joi.alternatives().conditional(
Joi.string().equal('all', 'rss', 'atom'),
{
then: Joi.custom((val) => (val === 'all' ? ['rss', 'atom'] : [val])),
},
),
type: Joi.alternatives()
.try(
Joi.array().items(Joi.string()),
Joi.alternatives().conditional(
Joi.string().equal('all', 'rss', 'atom'),
{
then: Joi.custom((val) =>
val === 'all' ? ['rss', 'atom'] : [val],
),
},
),
)
.allow(null)
.default(DEFAULT_OPTIONS.feedOptions.type),
title: Joi.string().allow(''),
description: Joi.string().allow(''),
copyright: Joi.string(),
Expand Down
2 changes: 1 addition & 1 deletion packages/docusaurus-plugin-content-blog/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ export interface PluginOptions {
truncateMarker: RegExp;
showReadingTime: boolean;
feedOptions: {
type: [FeedType];
type?: [FeedType] | null;
title?: string;
description?: string;
copyright: string;
Expand Down
4 changes: 2 additions & 2 deletions website/docs/blog.md
Original file line number Diff line number Diff line change
Expand Up @@ -89,11 +89,11 @@ Or this.

## 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
feedOptions?: {
type: 'rss' | 'atom' | 'all';
type?: 'rss' | 'atom' | 'all' | null;
title?: string;
description?: string;
copyright: string;
Expand Down

0 comments on commit 0b05806

Please sign in to comment.