From 6ed698976dfc740c00545e76c6b4188c1d2ef90f Mon Sep 17 00:00:00 2001
From: moonrailgun
Date: Fri, 8 Oct 2021 18:59:02 +0800
Subject: [PATCH] feat(content-blog): add full blog post html into RSS/Atom
feeds (#4330)
Co-authored-by: slorber
---
.../__fixtures__/component/Typography.tsx | 6 +
.../website/blog/mdx-blog-post.mdx | 36 +++++
.../generateBlogFeed.test.ts.snap | 34 ++++-
.../src/__tests__/index.test.ts | 23 ++-
.../src/blogUtils.ts | 3 +
.../src/index.ts | 8 +-
.../src/types.ts | 1 +
packages/docusaurus-utils/package.json | 8 ++
.../src/__tests__/mdxUtils.test.ts | 133 ++++++++++++++++++
.../docusaurus-utils/src/dependencies.d.ts | 12 ++
packages/docusaurus-utils/src/index.ts | 1 +
packages/docusaurus-utils/src/mdxUtils.ts | 32 +++++
.../2021-10-07-blog-post-mdx-feed-tests.mdx | 48 +++++++
website/_dogfooding/dogfooding.config.js | 1 +
yarn.lock | 49 ++++++-
15 files changed, 377 insertions(+), 18 deletions(-)
create mode 100644 packages/docusaurus-plugin-content-blog/src/__tests__/__fixtures__/component/Typography.tsx
create mode 100644 packages/docusaurus-plugin-content-blog/src/__tests__/__fixtures__/website/blog/mdx-blog-post.mdx
create mode 100644 packages/docusaurus-utils/src/__tests__/mdxUtils.test.ts
create mode 100644 packages/docusaurus-utils/src/dependencies.d.ts
create mode 100644 packages/docusaurus-utils/src/mdxUtils.ts
create mode 100644 website/_dogfooding/_blog tests/2021-10-07-blog-post-mdx-feed-tests.mdx
diff --git a/packages/docusaurus-plugin-content-blog/src/__tests__/__fixtures__/component/Typography.tsx b/packages/docusaurus-plugin-content-blog/src/__tests__/__fixtures__/component/Typography.tsx
new file mode 100644
index 000000000000..0f51f881aa5c
--- /dev/null
+++ b/packages/docusaurus-plugin-content-blog/src/__tests__/__fixtures__/component/Typography.tsx
@@ -0,0 +1,6 @@
+import React from 'react';
+
+export const Typography: React.FC = (props) => {
+ return {props.children}
+}
+Typography.displayName = 'Typography'
diff --git a/packages/docusaurus-plugin-content-blog/src/__tests__/__fixtures__/website/blog/mdx-blog-post.mdx b/packages/docusaurus-plugin-content-blog/src/__tests__/__fixtures__/website/blog/mdx-blog-post.mdx
new file mode 100644
index 000000000000..966e8cbce018
--- /dev/null
+++ b/packages/docusaurus-plugin-content-blog/src/__tests__/__fixtures__/website/blog/mdx-blog-post.mdx
@@ -0,0 +1,36 @@
+---
+title: Full Blog Sample
+date: 2021-03-05
+---
+
+HTML Heading 1
+HTML Heading 2
+HTML Paragraph
+
+import Typography from '../../component/Typography'
+
+Import DOM
+
+# Heading 1
+
+## Heading 2
+
+### Heading 3
+
+#### Heading 4
+
+##### Heading 5
+
+- list1
+- list2
+- list3
+
+
+* list1
+* list2
+* list3
+
+Normal Text *Italics Text* **Bold Text**
+
+[link](https://v2.docusaurus.io/)
+![image](https://v2.docusaurus.io/)
diff --git a/packages/docusaurus-plugin-content-blog/src/__tests__/__snapshots__/generateBlogFeed.test.ts.snap b/packages/docusaurus-plugin-content-blog/src/__tests__/__snapshots__/generateBlogFeed.test.ts.snap
index 2d3b7db474d2..8914514cebaa 100644
--- a/packages/docusaurus-plugin-content-blog/src/__tests__/__snapshots__/generateBlogFeed.test.ts.snap
+++ b/packages/docusaurus-plugin-content-blog/src/__tests__/__snapshots__/generateBlogFeed.test.ts.snap
@@ -7,18 +7,28 @@ exports[`blogFeed atom shows feed item for each post 1`] = `
https://docusaurus.io/myBaseUrl/blog
Hello Blog
- 2020-08-16T00:00:00.000Z
+ 2021-03-05T00:00:00.000Z
https://github.com/jpmonette/feed
Hello Blog
https://docusaurus.io/myBaseUrl/image/favicon.ico
Copyright
+
+
+ Full Blog Sample
+
+ 2021-03-05T00:00:00.000Z
+
+ HTML Heading 1HTML Heading 2 HTML Paragraph
Import DOM
Heading 1 Heading 2 Heading 3 Heading 4 Heading 5 Normal Text Italics Text Bold Text
link
+
]]>
+
/hey/my super path/héllô
2020-08-16T00:00:00.000Z
+ complex url slug
]]>
@@ -26,6 +36,7 @@ exports[`blogFeed atom shows feed item for each post 1`] = `
2020-08-15T00:00:00.000Z
+ simple url slug]]>
Sébastien Lorber
https://sebastienlorber.com
@@ -37,6 +48,7 @@ exports[`blogFeed atom shows feed item for each post 1`] = `
2020-02-27T00:00:00.000Z
+ this post should not be published yet]]>
@@ -50,6 +62,7 @@ exports[`blogFeed atom shows feed item for each post 1`] = `
2019-01-01T00:00:00.000Z
+ date inside front matter]]>
@@ -57,6 +70,7 @@ exports[`blogFeed atom shows feed item for each post 1`] = `
2018-12-14T00:00:00.000Z
+ Happy birthday! (translated)]]>
Yangshun Tay (translated)
@@ -71,21 +85,31 @@ exports[`blogFeed rss should not show feed without posts 1`] = `null`;
exports[`blogFeed rss shows feed item for each post 1`] = `
"
-
+
Hello Blog
https://docusaurus.io/myBaseUrl/blog
Hello Blog
- Sun, 16 Aug 2020 00:00:00 GMT
+ Fri, 05 Mar 2021 00:00:00 GMT
https://validator.w3.org/feed/docs/rss2.html
https://github.com/jpmonette/feed
Copyright
+ -
+
+ https://docusaurus.io/myBaseUrl/blog/mdx-blog-post
+ Full Blog Sample
+ Fri, 05 Mar 2021 00:00:00 GMT
+
+ HTML Heading 1HTML Heading 2 HTML Paragraph
Import DOM
Heading 1 Heading 2 Heading 3 Heading 4 Heading 5 Normal Text Italics Text Bold Text
link
+
]]>
+
-
https://docusaurus.io/myBaseUrl/blog/hey/my super path/héllô
/hey/my super path/héllô
Sun, 16 Aug 2020 00:00:00 GMT
+ complex url slug]]>
-
@@ -93,6 +117,7 @@ exports[`blogFeed rss shows feed item for each post 1`] = `
/simple/slug
Sat, 15 Aug 2020 00:00:00 GMT
+ simple url slug]]>
-
@@ -100,6 +125,7 @@ exports[`blogFeed rss shows feed item for each post 1`] = `
draft
Thu, 27 Feb 2020 00:00:00 GMT
+ this post should not be published yet]]>
-
@@ -113,6 +139,7 @@ exports[`blogFeed rss shows feed item for each post 1`] = `
date-matter
Tue, 01 Jan 2019 00:00:00 GMT
+ date inside front matter]]>
-
@@ -120,6 +147,7 @@ exports[`blogFeed rss shows feed item for each post 1`] = `
Happy 1st Birthday Slash! (translated)
Fri, 14 Dec 2018 00:00:00 GMT
+ Happy birthday! (translated)]]>
"
diff --git a/packages/docusaurus-plugin-content-blog/src/__tests__/index.test.ts b/packages/docusaurus-plugin-content-blog/src/__tests__/index.test.ts
index ef628a2d2dcb..238b4f04fef7 100644
--- a/packages/docusaurus-plugin-content-blog/src/__tests__/index.test.ts
+++ b/packages/docusaurus-plugin-content-blog/src/__tests__/index.test.ts
@@ -246,23 +246,26 @@ describe('loadBlog', () => {
test('simple website blog dates localized', async () => {
const siteDir = path.join(__dirname, '__fixtures__', 'website');
const blogPostsFrench = await getBlogPosts(siteDir, {}, getI18n('fr'));
- expect(blogPostsFrench).toHaveLength(6);
+ expect(blogPostsFrench).toHaveLength(7);
expect(blogPostsFrench[0].metadata.formattedDate).toMatchInlineSnapshot(
- `"16 août 2020"`,
+ `"5 mars 2021"`,
);
expect(blogPostsFrench[1].metadata.formattedDate).toMatchInlineSnapshot(
- `"15 août 2020"`,
+ `"16 août 2020"`,
);
expect(blogPostsFrench[2].metadata.formattedDate).toMatchInlineSnapshot(
- `"27 février 2020"`,
+ `"15 août 2020"`,
);
expect(blogPostsFrench[3].metadata.formattedDate).toMatchInlineSnapshot(
- `"2 janvier 2019"`,
+ `"27 février 2020"`,
);
expect(blogPostsFrench[4].metadata.formattedDate).toMatchInlineSnapshot(
- `"1 janvier 2019"`,
+ `"2 janvier 2019"`,
);
expect(blogPostsFrench[5].metadata.formattedDate).toMatchInlineSnapshot(
+ `"1 janvier 2019"`,
+ );
+ expect(blogPostsFrench[6].metadata.formattedDate).toMatchInlineSnapshot(
`"14 décembre 2018"`,
);
});
@@ -292,7 +295,7 @@ describe('loadBlog', () => {
expect(blogPost.metadata.editUrl).toEqual(hardcodedEditUrl);
});
- expect(editUrlFunction).toHaveBeenCalledTimes(6);
+ expect(editUrlFunction).toHaveBeenCalledTimes(7);
expect(editUrlFunction).toHaveBeenCalledWith({
blogDirPath: 'blog',
blogPath: 'date-matter.md',
@@ -305,6 +308,12 @@ describe('loadBlog', () => {
permalink: '/blog/draft',
locale: 'en',
});
+ expect(editUrlFunction).toHaveBeenCalledWith({
+ blogDirPath: 'blog',
+ blogPath: 'mdx-blog-post.mdx',
+ permalink: '/blog/mdx-blog-post',
+ locale: 'en',
+ });
expect(editUrlFunction).toHaveBeenCalledWith({
blogDirPath: 'blog',
blogPath: 'complex-slug.md',
diff --git a/packages/docusaurus-plugin-content-blog/src/blogUtils.ts b/packages/docusaurus-plugin-content-blog/src/blogUtils.ts
index ff75431f7cff..9465103030a3 100644
--- a/packages/docusaurus-plugin-content-blog/src/blogUtils.ts
+++ b/packages/docusaurus-plugin-content-blog/src/blogUtils.ts
@@ -26,6 +26,7 @@ import {
getEditUrl,
getFolderContainingFile,
posixPath,
+ mdxToHtml,
replaceMarkdownLinks,
Globby,
normalizeFrontMatterTags,
@@ -155,6 +156,7 @@ export async function generateBlogFeed(
link: normalizeUrl([siteUrl, permalink]),
date,
description,
+ content: mdxToHtml(post.content),
author: authors.map(toFeedAuthor),
});
});
@@ -292,6 +294,7 @@ async function processBlogSourceFile(
truncated: truncateMarker?.test(content) || false,
authors,
},
+ content,
};
}
diff --git a/packages/docusaurus-plugin-content-blog/src/index.ts b/packages/docusaurus-plugin-content-blog/src/index.ts
index 4c2f5729304f..3cb75b946a6f 100644
--- a/packages/docusaurus-plugin-content-blog/src/index.ts
+++ b/packages/docusaurus-plugin-content-blog/src/index.ts
@@ -554,19 +554,17 @@ export default function pluginContentBlog(
}
const feedTypes = options.feedOptions.type;
- const {
- siteConfig: {title},
- } = context;
+ const feedTitle = options.feedOptions.title ?? context.siteConfig.title;
const feedsConfig = {
rss: {
type: 'application/rss+xml',
path: 'rss.xml',
- title: `${title} Blog RSS Feed`,
+ title: `${feedTitle} RSS Feed`,
},
atom: {
type: 'application/atom+xml',
path: 'atom.xml',
- title: `${title} Blog Atom Feed`,
+ title: `${feedTitle} Atom Feed`,
},
};
const headTags: HtmlTags = [];
diff --git a/packages/docusaurus-plugin-content-blog/src/types.ts b/packages/docusaurus-plugin-content-blog/src/types.ts
index 755858c78162..3d40724e5b0a 100644
--- a/packages/docusaurus-plugin-content-blog/src/types.ts
+++ b/packages/docusaurus-plugin-content-blog/src/types.ts
@@ -97,6 +97,7 @@ export interface BlogTag {
export interface BlogPost {
id: string;
metadata: MetaData;
+ content: string;
}
export interface BlogPaginatedMetadata {
diff --git a/packages/docusaurus-utils/package.json b/packages/docusaurus-utils/package.json
index 4e9fa54c3f0d..59a2e2c1b853 100644
--- a/packages/docusaurus-utils/package.json
+++ b/packages/docusaurus-utils/package.json
@@ -19,6 +19,7 @@
"license": "MIT",
"dependencies": {
"@docusaurus/types": "2.0.0-beta.6",
+ "@mdx-js/runtime": "^1.6.22",
"@types/github-slugger": "^1.3.0",
"chalk": "^4.1.2",
"escape-string-regexp": "^4.0.0",
@@ -27,6 +28,8 @@
"gray-matter": "^4.0.3",
"lodash": "^4.17.20",
"micromatch": "^4.0.4",
+ "remark-mdx-remove-imports": "^1.6.22",
+ "remark-mdx-remove-exports": "^1.6.22",
"resolve-pathname": "^3.0.0",
"tslib": "^2.3.1"
},
@@ -36,6 +39,11 @@
"devDependencies": {
"@types/dedent": "^0.7.0",
"@types/micromatch": "^4.0.2",
+ "@types/react-dom": "^17.0.1",
"dedent": "^0.7.0"
+ },
+ "peerDependencies": {
+ "react": "*",
+ "react-dom": "*"
}
}
diff --git a/packages/docusaurus-utils/src/__tests__/mdxUtils.test.ts b/packages/docusaurus-utils/src/__tests__/mdxUtils.test.ts
new file mode 100644
index 000000000000..15e63d13226b
--- /dev/null
+++ b/packages/docusaurus-utils/src/__tests__/mdxUtils.test.ts
@@ -0,0 +1,133 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+import {mdxToHtml} from '../mdxUtils';
+
+describe('mdxToHtml', () => {
+ test('work with simple markdown', () => {
+ const mdxString = `
+# title
+
+title text **bold**
+
+## subtitle
+
+subtitle text *italic*
+
+> Quote
+
+ `;
+
+ expect(mdxToHtml(mdxString)).toMatchInlineSnapshot(
+ `"title title text bold
subtitle subtitle text italic
Quote
"`,
+ );
+ });
+
+ test('work with MDX imports', () => {
+ const mdxString = `
+# title
+
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+
+text
+
+ `;
+
+ expect(mdxToHtml(mdxString)).toMatchInlineSnapshot(
+ `"title text
"`,
+ );
+ });
+
+ test('work with MDX exports', () => {
+ const mdxString = `
+# title
+
+export const someExport = 42
+
+export const MyLocalComponent = () => "result"
+
+export const toc = [
+ {id: "title",label: "title"}
+]
+
+text
+
+
+ `;
+
+ expect(mdxToHtml(mdxString)).toMatchInlineSnapshot(
+ `"title text
"`,
+ );
+ });
+
+ test('work with MDX Tabs', () => {
+ const mdxString = `
+# title
+
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+
+
+
+ This is an apple 🍎
+
+
+ This is an orange 🍊
+
+
+
+text
+
+
+ `;
+
+ // TODO this is not an ideal behavior!
+ // There is a warning "Component TabItem was not imported, exported, or provided by MDXProvider as global scope"
+ // Theme + MDX config should provide a list of React components to put in MDX scope
+ expect(mdxToHtml(mdxString)).toMatchInlineSnapshot(
+ `"title This is an apple 🍎
This is an orange 🍊
text
"`,
+ );
+ });
+
+ test('work with MDX Tabs with ```mdx-code-block', () => {
+ const mdxString = `
+# title
+
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+
+\`\`\`mdx-code-block
+
+
+ This is an apple 🍎
+
+
+ This is an orange 🍊
+
+
+\`\`\`
+
+text
+
+ `;
+
+ // TODO bad behavior!
+ // ```mdx-code-block should be unwrapped and inner MDX content should be evaluated
+ expect(mdxToHtml(mdxString)).toMatchInlineSnapshot(`
+ "title <Tabs>
+ <TabItem value="apple" label="Apple">
+ This is an apple 🍎
+ </TabItem>
+ <TabItem value="orange" label="Orange">
+ This is an orange 🍊
+ </TabItem>
+ </Tabs>
+
text
"
+ `);
+ });
+});
diff --git a/packages/docusaurus-utils/src/dependencies.d.ts b/packages/docusaurus-utils/src/dependencies.d.ts
new file mode 100644
index 000000000000..05f37c5549f1
--- /dev/null
+++ b/packages/docusaurus-utils/src/dependencies.d.ts
@@ -0,0 +1,12 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+// Dependencies with missing typedefs
+
+declare module '@mdx-js/runtime';
+declare module 'remark-mdx-remove-imports';
+declare module 'remark-mdx-remove-exports';
diff --git a/packages/docusaurus-utils/src/index.ts b/packages/docusaurus-utils/src/index.ts
index 55606a9ad8fc..cbba730789b1 100644
--- a/packages/docusaurus-utils/src/index.ts
+++ b/packages/docusaurus-utils/src/index.ts
@@ -25,6 +25,7 @@ import {posixPath as posixPathImport} from './posixPath';
import {simpleHash, docuHash} from './hashUtils';
import {normalizeUrl} from './normalizeUrl';
+export * from './mdxUtils';
export * from './normalizeUrl';
export * from './tags';
diff --git a/packages/docusaurus-utils/src/mdxUtils.ts b/packages/docusaurus-utils/src/mdxUtils.ts
new file mode 100644
index 000000000000..a8028896fc02
--- /dev/null
+++ b/packages/docusaurus-utils/src/mdxUtils.ts
@@ -0,0 +1,32 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+import React from 'react';
+import ReactDOMServer from 'react-dom/server';
+import MDX from '@mdx-js/runtime';
+import removeImports from 'remark-mdx-remove-imports';
+import removeExports from 'remark-mdx-remove-exports';
+
+/**
+ * Transform mdx text to plain html text
+ * Initially created to convert MDX blog posts to HTML for the RSS feed
+ * without import/export nodes
+ *
+ * TODO not ideal implementation, won't work well with MDX elements!
+ * TODO theme+global site config should be able to declare MDX comps in scope for rendering the RSS feeds
+ * see also https://github.com/facebook/docusaurus/issues/4625
+ */
+export function mdxToHtml(
+ mdxStr: string,
+ // TODO allow providing components/scope here, see https://github.com/mdx-js/mdx/tree/v1.6.13/packages/runtime
+): string {
+ return ReactDOMServer.renderToString(
+ React.createElement(MDX, {remarkPlugins: [removeImports, removeExports]}, [
+ mdxStr,
+ ]),
+ );
+}
diff --git a/website/_dogfooding/_blog tests/2021-10-07-blog-post-mdx-feed-tests.mdx b/website/_dogfooding/_blog tests/2021-10-07-blog-post-mdx-feed-tests.mdx
new file mode 100644
index 000000000000..3c2511a7ebc0
--- /dev/null
+++ b/website/_dogfooding/_blog tests/2021-10-07-blog-post-mdx-feed-tests.mdx
@@ -0,0 +1,48 @@
+---
+title: Blog post MDX Feed tests
+authors:
+ - slorber
+---
+
+Some MDX tests, mostly to test how the RSS feed render those
+
+
+
+## Imports
+
+Here are some imports:
+
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+
+## Exports
+
+Here are some exports:
+
+export const someExport = 42;
+
+## Tabs test
+
+Here are some tabs:
+
+
+
+ This is an apple 🍎
+
+
+ This is an orange 🍊
+
+
+
+Here are some tabs, inside `mdx-code-block`:
+
+```mdx-code-block
+
+
+ This is an apple 🍎
+
+
+ This is an orange 🍊
+
+
+```
diff --git a/website/_dogfooding/dogfooding.config.js b/website/_dogfooding/dogfooding.config.js
index f3ce28b47736..ab350802069a 100644
--- a/website/_dogfooding/dogfooding.config.js
+++ b/website/_dogfooding/dogfooding.config.js
@@ -28,6 +28,7 @@ const dogfoodingPluginInstances = [
postsPerPage: 3,
feedOptions: {
type: 'all',
+ title: 'Docusaurus Tests Blog',
copyright: `Copyright © ${new Date().getFullYear()} Facebook, Inc.`,
},
}),
diff --git a/yarn.lock b/yarn.lock
index 6cdff9086888..d4d50847873c 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2518,7 +2518,7 @@
stringify-entities "^3.0.1"
stringify-object "^3.3.0"
-"@mdx-js/mdx@^1.6.21":
+"@mdx-js/mdx@1.6.22", "@mdx-js/mdx@^1.6.21":
version "1.6.22"
resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-1.6.22.tgz#8a723157bf90e78f17dc0f27995398e6c731f1ba"
integrity sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==
@@ -2543,11 +2543,20 @@
unist-builder "2.0.3"
unist-util-visit "2.0.3"
-"@mdx-js/react@^1.6.21":
+"@mdx-js/react@1.6.22", "@mdx-js/react@^1.6.21":
version "1.6.22"
resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-1.6.22.tgz#ae09b4744fddc74714ee9f9d6f17a66e77c43573"
integrity sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==
+"@mdx-js/runtime@^1.6.22":
+ version "1.6.22"
+ resolved "https://registry.yarnpkg.com/@mdx-js/runtime/-/runtime-1.6.22.tgz#3edd388bf68a519ffa1aaf9c446b548165102345"
+ integrity sha512-p17spaO2+55VLCuxXA3LVHC4phRx60NR2XMdZ+qgVU1lKvEX4y88dmFNOzGDCPLJ03IZyKrJ/rPWWRiBrd9JrQ==
+ dependencies:
+ "@mdx-js/mdx" "1.6.22"
+ "@mdx-js/react" "1.6.22"
+ buble-jsx-only "^0.19.8"
+
"@mdx-js/util@1.6.22":
version "1.6.22"
resolved "https://registry.yarnpkg.com/@mdx-js/util/-/util-1.6.22.tgz#219dfd89ae5b97a8801f015323ffa4b62f45718b"
@@ -4408,7 +4417,7 @@
"@types/webpack" "^4"
"@types/webpack-dev-server" "^3"
-"@types/react-dom@^17.0.9":
+"@types/react-dom@^17.0.1", "@types/react-dom@^17.0.9":
version "17.0.9"
resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-17.0.9.tgz#441a981da9d7be117042e1a6fd3dac4b30f55add"
integrity sha512-wIvGxLfgpVDSAMH5utdL9Ngm5Owu0VsGmldro3ORLXV8CShrL8awVj06NuEXFQ5xyaYfdca7Sgbk/50Ri1GdPg==
@@ -5997,6 +6006,19 @@ btoa-lite@^1.0.0:
resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337"
integrity sha1-M3dm2hWAEhD92VbCLpxokaudAzc=
+buble-jsx-only@^0.19.8:
+ version "0.19.8"
+ resolved "https://registry.yarnpkg.com/buble-jsx-only/-/buble-jsx-only-0.19.8.tgz#6e3524aa0f1c523de32496ac9aceb9cc2b493867"
+ integrity sha512-7AW19pf7PrKFnGTEDzs6u9+JZqQwM1VnLS19OlqYDhXomtFFknnoQJAPHeg84RMFWAvOhYrG7harizJNwUKJsA==
+ dependencies:
+ acorn "^6.1.1"
+ acorn-dynamic-import "^4.0.0"
+ acorn-jsx "^5.0.1"
+ chalk "^2.4.2"
+ magic-string "^0.25.3"
+ minimist "^1.2.0"
+ regexpu-core "^4.5.4"
+
buble@0.19.6:
version "0.19.6"
resolved "https://registry.yarnpkg.com/buble/-/buble-0.19.6.tgz#915909b6bd5b11ee03b1c885ec914a8b974d34d3"
@@ -17215,6 +17237,20 @@ remark-math@^3.0.1:
resolved "https://registry.yarnpkg.com/remark-math/-/remark-math-3.0.1.tgz#85a02a15b15cad34b89a27244d4887b3a95185bb"
integrity sha512-epT77R/HK0x7NqrWHdSV75uNLwn8g9qTyMqCRCDujL0vj/6T6+yhdrR7mjELWtkse+Fw02kijAaBuVcHBor1+Q==
+remark-mdx-remove-exports@^1.6.22:
+ version "1.6.22"
+ resolved "https://registry.yarnpkg.com/remark-mdx-remove-exports/-/remark-mdx-remove-exports-1.6.22.tgz#9e34f3d02c9c54b02ca0a1fde946449338d06ecb"
+ integrity sha512-7g2uiTmTGfz5QyVb+toeX25frbk1Y6yd03RXGPtqx0+DVh86Gb7MkNYbk7H2X27zdZ3CQv1W/JqlFO0Oo8IxVA==
+ dependencies:
+ unist-util-remove "2.0.0"
+
+remark-mdx-remove-imports@^1.6.22:
+ version "1.6.22"
+ resolved "https://registry.yarnpkg.com/remark-mdx-remove-imports/-/remark-mdx-remove-imports-1.6.22.tgz#79f711c95359cff437a120d1fbdc1326ec455826"
+ integrity sha512-lmjAXD8Ltw0TsvBzb45S+Dxx7LTJAtDaMneMAv8LAUIPEyYoKkmGbmVsiF0/pY6mhM1Q16swCmu1TN+ie/vn/A==
+ dependencies:
+ unist-util-remove "2.0.0"
+
remark-mdx@1.6.22, remark-mdx@^1.6.21:
version "1.6.22"
resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-1.6.22.tgz#06a8dab07dcfdd57f3373af7f86bd0e992108bbd"
@@ -19790,6 +19826,13 @@ unist-util-remove-position@^3.0.0:
dependencies:
unist-util-visit "^2.0.0"
+unist-util-remove@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/unist-util-remove/-/unist-util-remove-2.0.0.tgz#32c2ad5578802f2ca62ab808173d505b2c898488"
+ integrity sha512-HwwWyNHKkeg/eXRnE11IpzY8JT55JNM1YCwwU9YNCnfzk6s8GhPXrVBBZWiwLeATJbI7euvoGSzcy9M29UeW3g==
+ dependencies:
+ unist-util-is "^4.0.0"
+
unist-util-remove@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/unist-util-remove/-/unist-util-remove-2.1.0.tgz#b0b4738aa7ee445c402fda9328d604a02d010588"