refactor: unify how MDX content types are represented (#7145)

* refactor: unify how MDX content types are represented

* fix

* fix again
This commit is contained in:
Joshua Chen 2022-04-10 19:19:44 +08:00 committed by GitHub
parent b50def3ac0
commit 7a61eed3dd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 25 additions and 33 deletions

View file

@ -6,6 +6,7 @@
*/ */
import type {Plugin} from 'unified'; import type {Plugin} from 'unified';
import type {TOCItem} from '@docusaurus/types';
export type MDXPlugin = export type MDXPlugin =
// eslint-disable-next-line @typescript-eslint/no-explicit-any // eslint-disable-next-line @typescript-eslint/no-explicit-any
@ -16,3 +17,21 @@ export type MDXOptions = {
beforeDefaultRemarkPlugins: MDXPlugin[]; beforeDefaultRemarkPlugins: MDXPlugin[];
beforeDefaultRehypePlugins: MDXPlugin[]; beforeDefaultRehypePlugins: MDXPlugin[];
}; };
export type LoadedMDXContent<FrontMatter, Metadata, Assets = undefined> = {
/** As verbatim declared in the MDX document. */
readonly frontMatter: FrontMatter;
/** As provided by the content plugin. */
readonly metadata: Metadata;
/** A list of TOC items (headings). */
readonly toc: readonly TOCItem[];
/** First h1 title before any content. */
readonly contentTitle: string | undefined;
/**
* Usually image assets that may be collocated like `./img/thumbnail.png`.
* The loader would also bundle these assets and the client should use these
* in priority.
*/
readonly assets: Assets;
(): JSX.Element;
};

View file

@ -414,7 +414,7 @@ declare module '@docusaurus/plugin-content-blog' {
} }
declare module '@theme/BlogPostPage' { declare module '@theme/BlogPostPage' {
import type {TOCItem} from '@docusaurus/types'; import type {LoadedMDXContent} from '@docusaurus/mdx-loader';
import type { import type {
BlogPostFrontMatter, BlogPostFrontMatter,
BlogPostMetadata, BlogPostMetadata,
@ -433,22 +433,7 @@ declare module '@theme/BlogPostPage' {
} }
>; >;
export type Content = { export type Content = LoadedMDXContent<FrontMatter, Metadata, Assets>;
/** Same as `metadata.frontMatter` */
readonly frontMatter: FrontMatter;
/**
* Usually image assets that may be collocated like `./img/thumbnail.png`.
* The loader would also bundle these assets and the client should use these
* in priority.
*/
readonly assets: Assets;
/** Metadata of the post. */
readonly metadata: Metadata;
/** A list of TOC items (headings). */
readonly toc: readonly TOCItem[];
/** Renders the actual MDX content. */
(): JSX.Element;
};
export interface Props { export interface Props {
/** Blog sidebar. */ /** Blog sidebar. */

View file

@ -496,7 +496,7 @@ declare module '@docusaurus/plugin-content-docs' {
} }
declare module '@theme/DocItem' { declare module '@theme/DocItem' {
import type {TOCItem} from '@docusaurus/types'; import type {LoadedMDXContent} from '@docusaurus/mdx-loader';
import type { import type {
PropVersionMetadata, PropVersionMetadata,
Assets, Assets,
@ -514,14 +514,7 @@ declare module '@theme/DocItem' {
export interface Props { export interface Props {
readonly route: DocumentRoute; readonly route: DocumentRoute;
readonly versionMetadata: PropVersionMetadata; readonly versionMetadata: PropVersionMetadata;
readonly content: { readonly content: LoadedMDXContent<DocFrontMatter, DocMetadata, Assets>;
readonly frontMatter: DocFrontMatter;
readonly metadata: DocMetadata;
readonly toc: readonly TOCItem[];
readonly contentTitle: string | undefined;
readonly assets: Assets;
(): JSX.Element;
};
} }
export default function DocItem(props: Props): JSX.Element; export default function DocItem(props: Props): JSX.Element;

View file

@ -48,19 +48,14 @@ declare module '@docusaurus/plugin-content-pages' {
} }
declare module '@theme/MDXPage' { declare module '@theme/MDXPage' {
import type {TOCItem} from '@docusaurus/types'; import type {LoadedMDXContent} from '@docusaurus/mdx-loader';
import type { import type {
MDXPageMetadata, MDXPageMetadata,
FrontMatter, FrontMatter,
} from '@docusaurus/plugin-content-pages'; } from '@docusaurus/plugin-content-pages';
export interface Props { export interface Props {
readonly content: { readonly content: LoadedMDXContent<FrontMatter, MDXPageMetadata>;
readonly frontMatter: FrontMatter;
readonly metadata: MDXPageMetadata;
readonly toc: readonly TOCItem[];
(): JSX.Element;
};
} }
export default function MDXPage(props: Props): JSX.Element; export default function MDXPage(props: Props): JSX.Element;