From a7cfa4e058c06725788429e420d6dbd540d683a4 Mon Sep 17 00:00:00 2001 From: william duan <38791932+duanwilliam@users.noreply.github.com> Date: Mon, 23 May 2022 22:21:32 -0700 Subject: [PATCH] feat: back to jsx markdown we go --- website/package.json | 23 +- website/src/components/Sidebar/Desktop.tsx | 2 +- website/src/components/Sidebar/Mobile.tsx | 2 +- website/src/components/Toc/Desktop.tsx | 2 +- .../src/layout/components/MDX/Provider.tsx | 35 + website/src/layout/components/MDX/useMDX.tsx | 24 + .../layout/components/Markdown/useMarkdown.ts | 56 -- .../components/MarkdownWrapper/index.tsx | 2 +- website/src/layout/pages/DocPage/index.tsx | 6 +- website/src/lib/bundle.ts | 77 +++ ...ption.ts => extractTitleAndDescription.ts} | 27 +- website/src/lib/helpers/fs-tree.ts | 17 +- website/src/lib/helpers/toc/index.ts | 2 +- website/src/lib/unified/ast-debug/index.ts | 44 +- website/src/lib/unified/processor.ts | 15 +- .../index.ts | 0 .../utils.ts | 0 .../lib/unified/remark-html-to-jsx/index.ts | 51 ++ .../lib/unified/remark-html-to-jsx/utils.ts | 19 + .../{markdown => mdx}/CodeBlock/Container.tsx | 0 .../CodeBlock/CopyButton.tsx | 0 .../{markdown => mdx}/CodeBlock/Element.tsx | 0 .../src/{markdown => mdx}/CodeBlock/Line.tsx | 0 .../{markdown => mdx}/CodeBlock/String.tsx | 0 .../CodeBlock/_exports.module.scss | 0 .../CodeBlock/_exports.module.scss.d.ts | 0 .../{markdown => mdx}/CodeBlock/_vars.scss | 0 .../src/{markdown => mdx}/CodeBlock/index.tsx | 0 .../CodeBlock/styles.module.scss | 0 .../CodeBlock/styles.module.scss.d.ts | 0 .../src/{markdown => mdx}/CodeBlock/theme.ts | 0 .../src/{markdown => mdx}/CodeBlock/utils.ts | 0 .../Heading/_exports.module.scss | 0 .../Heading/_exports.module.scss.d.ts | 0 .../src/{markdown => mdx}/Heading/index.tsx | 0 .../Heading/styles.module.scss | 0 .../Heading/styles.module.scss.d.ts | 0 website/src/{markdown => mdx}/components.tsx | 8 +- .../{markdown => mdx}/markdown.module.scss | 0 .../markdown.module.scss.d.ts | 0 website/src/pages/_app.tsx | 2 +- website/src/pages/workshops/[...slug].tsx | 55 +- website/yarn.lock | 599 ++++++++++++++++-- 43 files changed, 895 insertions(+), 173 deletions(-) create mode 100644 website/src/layout/components/MDX/Provider.tsx create mode 100644 website/src/layout/components/MDX/useMDX.tsx delete mode 100644 website/src/layout/components/Markdown/useMarkdown.ts create mode 100644 website/src/lib/bundle.ts rename website/src/lib/helpers/{extractMdTitleDescription.ts => extractTitleAndDescription.ts} (67%) rename website/src/lib/unified/{heading-ids => remark-heading-ids}/index.ts (100%) rename website/src/lib/unified/{heading-ids => remark-heading-ids}/utils.ts (100%) create mode 100644 website/src/lib/unified/remark-html-to-jsx/index.ts create mode 100644 website/src/lib/unified/remark-html-to-jsx/utils.ts rename website/src/{markdown => mdx}/CodeBlock/Container.tsx (100%) rename website/src/{markdown => mdx}/CodeBlock/CopyButton.tsx (100%) rename website/src/{markdown => mdx}/CodeBlock/Element.tsx (100%) rename website/src/{markdown => mdx}/CodeBlock/Line.tsx (100%) rename website/src/{markdown => mdx}/CodeBlock/String.tsx (100%) rename website/src/{markdown => mdx}/CodeBlock/_exports.module.scss (100%) rename website/src/{markdown => mdx}/CodeBlock/_exports.module.scss.d.ts (100%) rename website/src/{markdown => mdx}/CodeBlock/_vars.scss (100%) rename website/src/{markdown => mdx}/CodeBlock/index.tsx (100%) rename website/src/{markdown => mdx}/CodeBlock/styles.module.scss (100%) rename website/src/{markdown => mdx}/CodeBlock/styles.module.scss.d.ts (100%) rename website/src/{markdown => mdx}/CodeBlock/theme.ts (100%) rename website/src/{markdown => mdx}/CodeBlock/utils.ts (100%) rename website/src/{markdown => mdx}/Heading/_exports.module.scss (100%) rename website/src/{markdown => mdx}/Heading/_exports.module.scss.d.ts (100%) rename website/src/{markdown => mdx}/Heading/index.tsx (100%) rename website/src/{markdown => mdx}/Heading/styles.module.scss (100%) rename website/src/{markdown => mdx}/Heading/styles.module.scss.d.ts (100%) rename website/src/{markdown => mdx}/components.tsx (87%) rename website/src/{markdown => mdx}/markdown.module.scss (100%) rename website/src/{markdown => mdx}/markdown.module.scss.d.ts (100%) diff --git a/website/package.json b/website/package.json index a863ee6..1bd3257 100644 --- a/website/package.json +++ b/website/package.json @@ -9,22 +9,16 @@ "lint": "next lint" }, "dependencies": { + "@mdx-js/mdx": "^2.1.1", "clsx": "^1.1.1", "copy-text-to-clipboard": "^3.0.1", "esbuild": "^0.14.36", + "mdx-bundler": "^9.0.1", "next": "12.1.5", "prism-react-renderer": "^1.3.1", "react": "17.0.2", "react-dom": "17.0.2", - "rehype-katex": "^6.0.2", - "rehype-raw": "^6.1.1", - "rehype-react": "^7.1.1", - "remark-gfm": "^3.0.1", - "remark-math": "^5.1.1", - "remark-parse": "^10.0.1", - "remark-rehype": "^10.1.0", - "sass": "^1.50.1", - "unified": "^10.1.2" + "sass": "^1.50.1" }, "devDependencies": { "@babel/parser": "^7.17.9", @@ -36,10 +30,12 @@ "@types/glob": "^7.1.4", "@types/react": "17.0.27", "@types/unist": "^2.0.6", + "acorn": "^8.7.1", "escape-html": "^1.0.3", "eslint": "7.32.0", "eslint-config-next": "11.1.2", "glob": "^8.0.1", + "html-react-parser": "^1.4.12", "mdast": "^3.0.0", "mdast-util-from-markdown": "^1.2.0", "mdast-util-gfm": "^2.0.1", @@ -49,10 +45,17 @@ "mdast-util-to-string": "^3.1.0", "micromark-extension-gfm": "^2.0.1", "micromark-extension-math": "^2.0.2", - "micromark-extension-mdxjs-esm": "^1.0.2", + "micromark-extension-mdxjs-esm": "^1.0.3", + "rehype-katex": "^6.0.2", + "rehype-react": "^7.1.1", "rehype-stringify": "^9.0.3", + "remark-gfm": "^3.0.1", + "remark-math": "^5.1.1", + "remark-parse": "^10.0.1", + "remark-rehype": "^10.1.0", "remark-stringify": "^10.0.2", "typescript": "^4.6.3", + "unified": "^10.1.2", "unist-util-visit": "^4.1.0" } } diff --git a/website/src/components/Sidebar/Desktop.tsx b/website/src/components/Sidebar/Desktop.tsx index 66198de..e63b69b 100644 --- a/website/src/components/Sidebar/Desktop.tsx +++ b/website/src/components/Sidebar/Desktop.tsx @@ -9,7 +9,7 @@ import c from "clsx"; import SidebarItems from "./SidebarItems"; -import { markdown } from "@/markdown/markdown.module.scss"; +import { markdown } from "@/mdx/markdown.module.scss"; import s from "./styles.module.scss"; import type { SidebarProps } from "."; diff --git a/website/src/components/Sidebar/Mobile.tsx b/website/src/components/Sidebar/Mobile.tsx index 0ec13e6..96ea4fc 100644 --- a/website/src/components/Sidebar/Mobile.tsx +++ b/website/src/components/Sidebar/Mobile.tsx @@ -9,7 +9,7 @@ import SidebarItems from "./SidebarItems"; - import { markdown } from "@/markdown/markdown.module.scss"; + import { markdown } from "@/mdx/markdown.module.scss"; import s from "./styles.module.scss"; import type { SidebarProps } from "."; diff --git a/website/src/components/Toc/Desktop.tsx b/website/src/components/Toc/Desktop.tsx index d48c750..2277236 100644 --- a/website/src/components/Toc/Desktop.tsx +++ b/website/src/components/Toc/Desktop.tsx @@ -9,7 +9,7 @@ import c from "clsx" import Toc from "." -import { markdown } from "@/markdown/markdown.module.scss" +import { markdown } from "@/mdx/markdown.module.scss" import s from "./styles.module.scss" import type { TocProps } from "../Toc" diff --git a/website/src/layout/components/MDX/Provider.tsx b/website/src/layout/components/MDX/Provider.tsx new file mode 100644 index 0000000..de29e0c --- /dev/null +++ b/website/src/layout/components/MDX/Provider.tsx @@ -0,0 +1,35 @@ +import { createContext, useContext } from "react"; + +import { useMDX } from "./useMDX"; + +import type { FC, ReactNode } from "react"; +import type { MDXComponentProps } from "./useMDX"; + +type MDXData = { + MDXComponent: FC +} + +const MDXContext = createContext(undefined); + +export const useMDXContext = () => { + const context = useContext(MDXContext) + if (context === undefined) { + throw new Error('useMDXContext must be used in a MDXProvider') + } + return context +} + +interface MDXProviderProps { + source: string + children: ReactNode +} + +export default function MDXProvider ({ children, ...props }: MDXProviderProps) { + const { MDXComponent } = useMDX(props) + + return ( + + {children} + + ) +} \ No newline at end of file diff --git a/website/src/layout/components/MDX/useMDX.tsx b/website/src/layout/components/MDX/useMDX.tsx new file mode 100644 index 0000000..fd2e8b5 --- /dev/null +++ b/website/src/layout/components/MDX/useMDX.tsx @@ -0,0 +1,24 @@ +import { useMemo, useCallback } from "react"; +import { ComponentMap, getMDXExport } from "mdx-bundler/client"; + +import defaultComponents from "@/mdx/components"; + +import type { FC } from "react"; + +interface UseMDXProps { + source: string +} + +export interface MDXComponentProps { + components?: ComponentMap +} + +export function useMDX ({ source }: UseMDXProps) { + const { default: BaseComponent } = useMemo(() => getMDXExport(source), [source]) + + const MDXComponent: FC = useCallback(({ components, ...props}) => ( + + ), [BaseComponent]) + + return { MDXComponent } +} \ No newline at end of file diff --git a/website/src/layout/components/Markdown/useMarkdown.ts b/website/src/layout/components/Markdown/useMarkdown.ts deleted file mode 100644 index 20f931c..0000000 --- a/website/src/layout/components/Markdown/useMarkdown.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { useCallback, createElement, Fragment, useState, useEffect } from "react" - -import defaultComponents from "@/markdown/components"; - -import { unified } from "unified"; -import remarkParse from "remark-parse/lib"; -import remarkGfm from "remark-gfm"; -import remarkMath from "remark-math"; -import remarkRehype from "remark-rehype"; -import rehypeRaw from "rehype-raw"; -import rehypeKatex from "rehype-katex"; -import rehypeReact from "rehype-react"; -import remarkHeadingIds from "@/lib/unified/heading-ids"; - -import type { FC, ReactElement, ReactNode } from "react"; -import astDebug from "@/lib/unified/ast-debug"; - -interface MarkdownComponentProps { - fallback?: ReactNode -} - -export const useMarkdown = (source: string) => { - const [markdownReactElement, setMarkdownReactElement] = useState(null) - - // @ts-ignore TODO: dunno what's going on here with typescript - const MarkdownComponent: FC = useCallback(({ fallback = null }) => markdownReactElement ?? fallback, [markdownReactElement]) - - const setSource = useCallback((source: string) => { - unified() - .use(remarkParse) - .use(remarkHeadingIds) - .use(remarkGfm) - .use(remarkMath) - .use(remarkRehype, { allowDangerousHtml: true }) - .use(rehypeRaw) - .use(rehypeKatex) - .use(rehypeReact, { createElement, Fragment, components: defaultComponents }) - .process(source) - .then((vfile) => setMarkdownReactElement(vfile.result as ReactElement)) - .catch(console.error) - }, []) - - // in this case, we know our source never changes, so we can just directly return the generated component - // in practice, would return both the component and a function to set the source (i.e. the above return statement) and not have the below effect here - // if we were building e.g. a WYSIWYG editor: we don't always want the component to directly update (e.g. someone is in the middle of typing), - // and in that case being able to decide when to actually update the "source" is useful - useEffect(() => { - setSource(source) - }, [source]) - - return { - setSource, - markdownReactElement, - MarkdownComponent, - } -} diff --git a/website/src/layout/components/MarkdownWrapper/index.tsx b/website/src/layout/components/MarkdownWrapper/index.tsx index cf64b75..825e3ce 100644 --- a/website/src/layout/components/MarkdownWrapper/index.tsx +++ b/website/src/layout/components/MarkdownWrapper/index.tsx @@ -1,6 +1,6 @@ import c from "clsx"; -import { markdown, content } from "@/markdown/markdown.module.scss"; +import { markdown, content } from "@/mdx/markdown.module.scss"; import type { ReactNode } from "react"; diff --git a/website/src/layout/pages/DocPage/index.tsx b/website/src/layout/pages/DocPage/index.tsx index 066c16a..801a58f 100644 --- a/website/src/layout/pages/DocPage/index.tsx +++ b/website/src/layout/pages/DocPage/index.tsx @@ -11,15 +11,15 @@ import TocContainer from "@/layout/components/TocContainer"; import BeforeMarkdown from "@/layout/components/BeforeMarkdown"; import OpenInColab from "@/layout/components/OpenInColab"; import MarkdownWrapper from "@/layout/components/MarkdownWrapper"; -import { useMarkdown } from "@/layout/components/Markdown/useMarkdown"; import PageProvider from "@/layout/context/Page"; import type { DocPageProps } from "@/layout/pages/types"; +import { useMDX } from "@/layout/components/MDX/useMDX"; export default function DocPage ({ source, slug, fsPath, sidebar, toc }: DocPageProps) { const { asPath } = useRouter(); - const { markdownReactElement, MarkdownComponent } = useMarkdown(source) + const { MDXComponent } = useMDX({ source }) return ( @@ -34,7 +34,7 @@ export default function DocPage ({ source, slug, fsPath, sidebar, toc }: DocPage - Loading...} /> + diff --git a/website/src/lib/bundle.ts b/website/src/lib/bundle.ts new file mode 100644 index 0000000..99d788e --- /dev/null +++ b/website/src/lib/bundle.ts @@ -0,0 +1,77 @@ +import path from "path"; +import { bundleMDX } from "mdx-bundler"; + +import remarkHeadingIds from "@/lib/unified/remark-heading-ids"; +import remarkGfm from "remark-gfm"; +import remarkMath from "remark-math"; +import rehypeKatex from "rehype-katex"; + +import astDebug from "./unified/ast-debug"; + +// kinda hacky +import type { BundleMDX } from "mdx-bundler/dist/types"; + +// https://www.alaycock.co.uk/2021/03/mdx-bundler#esbuild-executable +const fixEsbuildPath = () => { + if (process.platform === 'win32') { + process.env.ESBUILD_BINARY_PATH = path.join( + process.cwd(), + 'node_modules', + 'esbuild-windows-64', + 'esbuild.exe', + ) + } else { + process.env.ESBUILD_BINARY_PATH = path.join( + process.cwd(), + 'node_modules', + 'esbuild', + 'bin', + 'esbuild', + ) + } +} + +type Options = Required, 'source' | 'cwd'>> & { + baseUrl: `/${string}` + slug: string[] +} +export const bundle = async ({ source, cwd, baseUrl, slug }: Options) => { + fixEsbuildPath(); + const res = await bundleMDX({ + source, + cwd, + mdxOptions: (options) => { + options.remarkPlugins = [ + ...(options.remarkPlugins ?? []), + remarkHeadingIds, + remarkGfm, + remarkMath, + ] + options.rehypePlugins = [ + ...(options.rehypePlugins ?? []), + rehypeKatex, + ] + + return options + }, + esbuildOptions: (options) => { + options.loader = { + ...(options.loader ?? {}), + ".png": 'file', + ".jpg": 'file', + ".gif": 'file', + } + // write assets locally to `~/public/static/content/[...slug]`, + // and they will correspondingly be served at /static/content/[...slug] + options.outdir = slug ? path.join(process.cwd(), 'public', 'static', 'content', ...slug) : undefined + options.publicPath = slug ? `/static/content${baseUrl}/${slug.join('/')}` : undefined + options.write = true + + return options + }, + }); + + if (res.errors.length > 0) { console.error(res.errors.map(({ detail }) => detail)); } + + return res; +} \ No newline at end of file diff --git a/website/src/lib/helpers/extractMdTitleDescription.ts b/website/src/lib/helpers/extractTitleAndDescription.ts similarity index 67% rename from website/src/lib/helpers/extractMdTitleDescription.ts rename to website/src/lib/helpers/extractTitleAndDescription.ts index 2fa4207..26ea95d 100644 --- a/website/src/lib/helpers/extractMdTitleDescription.ts +++ b/website/src/lib/helpers/extractTitleAndDescription.ts @@ -4,14 +4,10 @@ import { gfm } from "micromark-extension-gfm"; import { mathFromMarkdown } from "mdast-util-math"; import { gfmFromMarkdown } from "mdast-util-gfm"; import { toValue } from "@/lib/helpers/toc/utils"; +import { fromNotebook } from "../unified/nbast-util-from-notebook"; +import type { Root } from "mdast"; -export const extractTitleDescriptionFromMdString = async (md: string) => { - - // expect the first two children to be an h1 heading (the title), and a paragraph (the description) - const mdast = fromMarkdown(md, 'utf-8', { - extensions: [math(), gfm()], - mdastExtensions: [mathFromMarkdown(), gfmFromMarkdown()], - }); +export const extractTitleAndDescriptionFromMdast = async (mdast: Root) => { const { children } = mdast; const titleNode = children?.[0] const descriptionNode = children?.[1]; @@ -31,4 +27,21 @@ export const extractTitleDescriptionFromMdString = async (md: string) => { ; return { title, description } +} + +export const extractTitleAndDescriptionFromMdString = async (md: string) => { + + // expect the first two children to be an h1 heading (the title), and a paragraph (the description) + const mdast = fromMarkdown(md, 'utf-8', { + extensions: [math(), gfm()], + mdastExtensions: [mathFromMarkdown(), gfmFromMarkdown()], + }); + + return extractTitleAndDescriptionFromMdast(mdast); +} + +export const extractTitleAndDescriptionFromNotebook = async (notebook: string) => { + const mdast = fromNotebook(notebook) as Root + + return extractTitleAndDescriptionFromMdast(mdast); } \ No newline at end of file diff --git a/website/src/lib/helpers/fs-tree.ts b/website/src/lib/helpers/fs-tree.ts index 93d963d..b9d113b 100644 --- a/website/src/lib/helpers/fs-tree.ts +++ b/website/src/lib/helpers/fs-tree.ts @@ -4,18 +4,18 @@ import { promisify } from 'util'; import globCb from 'glob'; import { slugify } from '@/utils/slugify'; -import { extractTitleDescriptionFromMdString } from "./extractMdTitleDescription"; +import { extractTitleAndDescriptionFromMdString, extractTitleAndDescriptionFromNotebook } from "./extractTitleAndDescription"; const glob = promisify(globCb); interface VEntryCommon { slug: string[]; fsPath: string[]; + title: string; + description: string; } export interface VFile extends VEntryCommon { type: 'file'; - title: string; - description: string; md: string; } export interface VDir extends VEntryCommon { @@ -56,8 +56,8 @@ export const getFsTree = async ({ basePath, globMatch = '**/*.(md|mdx)', toMd = async (contents: string) => contents, - getTitleAndDescription = async ({ md, filepath }) => { - const { title, description } = await extractTitleDescriptionFromMdString(md); + getTitleAndDescription = async ({ contents, md, filepath }) => { + const { title, description } = await extractTitleAndDescriptionFromNotebook(contents); return { title: title ?? path.parse(filepath[filepath.length - 1]).name, description: description ?? '', @@ -69,12 +69,14 @@ export const getFsTree = async ({ return trees.get(basePath) as VDir; } - const root: VDir = { type: 'directory', items: {}, slug: [], fsPath: [], numLeaves: 0 }; + const root: VDir = { type: 'directory', items: {}, slug: [], fsPath: [], title: '', description: '', numLeaves: 0 }; const createVDir = (fsPath: string[], slug: string[]): VDir => ({ type: 'directory', fsPath, slug, + title: fsPath[fsPath.length - 1], + description: '', items: {}, numLeaves: 0, }); @@ -126,6 +128,9 @@ export const getFsTree = async ({ m.items[slug] = createVDir([...fsPath], [...slugPath]); } ++(m.items[slug] as VDir).numLeaves; + m.items[slug].description = (m.items[slug] as VDir).numLeaves === 1 + ? `${(m.items[slug] as VDir).numLeaves} item` + : `${(m.items[slug] as VDir).numLeaves} items` m = m.items[slug] as VDir; } } diff --git a/website/src/lib/helpers/toc/index.ts b/website/src/lib/helpers/toc/index.ts index edcf8fb..d025b27 100644 --- a/website/src/lib/helpers/toc/index.ts +++ b/website/src/lib/helpers/toc/index.ts @@ -1,7 +1,7 @@ import remarkGfm from "remark-gfm" import remarkMath from "remark-math" import { unified } from "unified" -import remarkHeadingIds from "@/lib/unified/heading-ids" +import remarkHeadingIds from "@/lib/unified/remark-heading-ids" import remarkParse from "remark-parse/lib" import remarkStringify from "remark-stringify" import search from "./search" diff --git a/website/src/lib/unified/ast-debug/index.ts b/website/src/lib/unified/ast-debug/index.ts index e471f57..ccf50a8 100644 --- a/website/src/lib/unified/ast-debug/index.ts +++ b/website/src/lib/unified/ast-debug/index.ts @@ -1,14 +1,54 @@ import type { Plugin, Transformer } from "unified" +import { Node } from "unist" +import { Parent, visit } from "unist-util-visit" + +type Options = { + name?: string + stringify?: boolean + ignorePositionData?: boolean + visitOnly?: string | null +} /** * a unified plugin that exists purely for the utility of printing out the AST in its current state. */ -const astDebug: Plugin = ({ name = 'ast' }: { name?: string } = {}) => { +const astDebug: Plugin = ({ + name = 'ast', + stringify = false, + ignorePositionData = true, + visitOnly = null, +}: Options = {}) => { const transformer: Transformer = (ast) => { - console.log(name, ast) + if (!visitOnly) { + const cleaned = ignorePositionData ? purgePositionData(ast) : ast + const output = stringify ? JSON.stringify(cleaned, null, 2) : cleaned + console.log(name, output) + } else { + visit(ast, visitOnly, (node) => { + const childless = purgeChildren(node) + const cleaned = ignorePositionData ? purgePositionData(childless) : childless + const output = stringify ? JSON.stringify(cleaned, null, 2) : cleaned + console.log(name, output) + }) + } } return transformer } +function purgePositionData(ast: Node) { + const { position, ...node } = ast + const children = (node as Parent)?.children ?? [] + if (children.length > 0) { + (node as Parent).children = (node as Parent).children.map(purgePositionData) + } + return node +} + +function purgeChildren(ast: Node) { + // @ts-ignore + const { children, ...node } = ast + return node +} + export default astDebug \ No newline at end of file diff --git a/website/src/lib/unified/processor.ts b/website/src/lib/unified/processor.ts index 7f47162..83046d2 100644 --- a/website/src/lib/unified/processor.ts +++ b/website/src/lib/unified/processor.ts @@ -1,9 +1,11 @@ import { unified } from "unified"; +import { nbParse } from "./nbParse"; import remarkGfm from "remark-gfm"; import remarkMath from "remark-math"; +import remarkHtmlToJsx from "./remark-html-to-jsx"; import remarkStringify from "remark-stringify/lib"; -import { nbParse } from "./nbParse"; +import astDebug from "./ast-debug"; /** * converts a jupyter notebook string into a markdown string @@ -12,10 +14,13 @@ import { nbParse } from "./nbParse"; */ export const notebookToMd = async (contents: string) => { const md = await unified() - .use(nbParse) // parse notebook as md - .use(remarkGfm) // recognize strikethroughs and stuff - .use(remarkMath) // recognize math - .use(remarkStringify) // stringify to markdown string + .use(nbParse) // parse notebook as md + .use(remarkGfm) // recognize strikethroughs and stuff + .use(remarkMath) // recognize math + .use(remarkHtmlToJsx) // reformat html to JSX html + .use(remarkStringify, { // stringify to markdown string + resourceLink: true, // use resource links `[https://google.com](https://google.com)` vs autolinked literals `` + }) .process(contents); return md; } \ No newline at end of file diff --git a/website/src/lib/unified/heading-ids/index.ts b/website/src/lib/unified/remark-heading-ids/index.ts similarity index 100% rename from website/src/lib/unified/heading-ids/index.ts rename to website/src/lib/unified/remark-heading-ids/index.ts diff --git a/website/src/lib/unified/heading-ids/utils.ts b/website/src/lib/unified/remark-heading-ids/utils.ts similarity index 100% rename from website/src/lib/unified/heading-ids/utils.ts rename to website/src/lib/unified/remark-heading-ids/utils.ts diff --git a/website/src/lib/unified/remark-html-to-jsx/index.ts b/website/src/lib/unified/remark-html-to-jsx/index.ts new file mode 100644 index 0000000..b91a4ce --- /dev/null +++ b/website/src/lib/unified/remark-html-to-jsx/index.ts @@ -0,0 +1,51 @@ +import { visit } from "unist-util-visit" +import parse from "html-react-parser" + +import { parseOpeningTag, isClosingTag, isOpeningTag, parseClosingTag, isChildlessTag } from "./utils" + +import type { Plugin, Transformer } from "unified" +import type { HTML, Parent } from "mdast" + +/** + * rehype plugin for transforming html attributes + * to conform to JSX style as opposed to "standard" html + */ +const remarkHtmlToJsx: Plugin = () => { + const transformer: Transformer = (mdast) => { + + const visitor = (node: HTML, i: number, parent: Parent) => { + const html = node.value + + if (isOpeningTag(html)) { + const { tag } = parseOpeningTag(html) ?? {} + + const isChildless = isChildlessTag(html) + const validHtmlString = isChildless ? html : `${html}<${tag}/>` + const el = parse(validHtmlString) as unknown as JSX.Element + + let outputHtml = `<${tag}` + for (const k in el.props) { + if (k === 'children') { continue } + const v = el.props[k] + if (v instanceof Function) { continue } // not gonna bother + outputHtml += ` ${k}={${JSON.stringify(v)}}` + } + + outputHtml += isChildless ? `/>` : `>` + + const newNode = { type: 'html', tag, value: outputHtml } as HTML + parent.children.splice(i, 1, newNode) + } else if (isClosingTag(html)) { + const tag = parseClosingTag(html) + const newNode = { type: 'html', tag, value: html } as HTML + parent.children.splice(i, 1, newNode) + } + } + + visit(mdast, 'html', visitor) + } + + return transformer +} + +export default remarkHtmlToJsx \ No newline at end of file diff --git a/website/src/lib/unified/remark-html-to-jsx/utils.ts b/website/src/lib/unified/remark-html-to-jsx/utils.ts new file mode 100644 index 0000000..5a8d9fe --- /dev/null +++ b/website/src/lib/unified/remark-html-to-jsx/utils.ts @@ -0,0 +1,19 @@ +const openingTagRegex = /^<[a-zA-Z].*>$/ // because seriously what tag starts with anything else +export const isOpeningTag = (html: string) => openingTagRegex.test(html) + +const childlessTagRegex = /^<\S+.*\/>$/ +export const isChildlessTag = (html: string) => childlessTagRegex.test(html) + +const closingTagRegex = /^<\/.*>$/ +export const isClosingTag = (html: string) => closingTagRegex.test(html) + +const extractAttributesRegex = /^<(?[\S]*)(\s+(?.*)\s*)?\/?>$/ +export const parseOpeningTag = (html: string) => { + const match = html.match(extractAttributesRegex) + if (!match) { return null } + const { tag, attrs } = match.groups ?? {} + return { tag: tag.trim(), attrs: attrs?.trim?.() ?? '' } +} + +const extractClosingTagRegex = /^<(?[\S]+)\/>$/ +export const parseClosingTag = (html: string) => html.match(extractClosingTagRegex)?.groups?.tag \ No newline at end of file diff --git a/website/src/markdown/CodeBlock/Container.tsx b/website/src/mdx/CodeBlock/Container.tsx similarity index 100% rename from website/src/markdown/CodeBlock/Container.tsx rename to website/src/mdx/CodeBlock/Container.tsx diff --git a/website/src/markdown/CodeBlock/CopyButton.tsx b/website/src/mdx/CodeBlock/CopyButton.tsx similarity index 100% rename from website/src/markdown/CodeBlock/CopyButton.tsx rename to website/src/mdx/CodeBlock/CopyButton.tsx diff --git a/website/src/markdown/CodeBlock/Element.tsx b/website/src/mdx/CodeBlock/Element.tsx similarity index 100% rename from website/src/markdown/CodeBlock/Element.tsx rename to website/src/mdx/CodeBlock/Element.tsx diff --git a/website/src/markdown/CodeBlock/Line.tsx b/website/src/mdx/CodeBlock/Line.tsx similarity index 100% rename from website/src/markdown/CodeBlock/Line.tsx rename to website/src/mdx/CodeBlock/Line.tsx diff --git a/website/src/markdown/CodeBlock/String.tsx b/website/src/mdx/CodeBlock/String.tsx similarity index 100% rename from website/src/markdown/CodeBlock/String.tsx rename to website/src/mdx/CodeBlock/String.tsx diff --git a/website/src/markdown/CodeBlock/_exports.module.scss b/website/src/mdx/CodeBlock/_exports.module.scss similarity index 100% rename from website/src/markdown/CodeBlock/_exports.module.scss rename to website/src/mdx/CodeBlock/_exports.module.scss diff --git a/website/src/markdown/CodeBlock/_exports.module.scss.d.ts b/website/src/mdx/CodeBlock/_exports.module.scss.d.ts similarity index 100% rename from website/src/markdown/CodeBlock/_exports.module.scss.d.ts rename to website/src/mdx/CodeBlock/_exports.module.scss.d.ts diff --git a/website/src/markdown/CodeBlock/_vars.scss b/website/src/mdx/CodeBlock/_vars.scss similarity index 100% rename from website/src/markdown/CodeBlock/_vars.scss rename to website/src/mdx/CodeBlock/_vars.scss diff --git a/website/src/markdown/CodeBlock/index.tsx b/website/src/mdx/CodeBlock/index.tsx similarity index 100% rename from website/src/markdown/CodeBlock/index.tsx rename to website/src/mdx/CodeBlock/index.tsx diff --git a/website/src/markdown/CodeBlock/styles.module.scss b/website/src/mdx/CodeBlock/styles.module.scss similarity index 100% rename from website/src/markdown/CodeBlock/styles.module.scss rename to website/src/mdx/CodeBlock/styles.module.scss diff --git a/website/src/markdown/CodeBlock/styles.module.scss.d.ts b/website/src/mdx/CodeBlock/styles.module.scss.d.ts similarity index 100% rename from website/src/markdown/CodeBlock/styles.module.scss.d.ts rename to website/src/mdx/CodeBlock/styles.module.scss.d.ts diff --git a/website/src/markdown/CodeBlock/theme.ts b/website/src/mdx/CodeBlock/theme.ts similarity index 100% rename from website/src/markdown/CodeBlock/theme.ts rename to website/src/mdx/CodeBlock/theme.ts diff --git a/website/src/markdown/CodeBlock/utils.ts b/website/src/mdx/CodeBlock/utils.ts similarity index 100% rename from website/src/markdown/CodeBlock/utils.ts rename to website/src/mdx/CodeBlock/utils.ts diff --git a/website/src/markdown/Heading/_exports.module.scss b/website/src/mdx/Heading/_exports.module.scss similarity index 100% rename from website/src/markdown/Heading/_exports.module.scss rename to website/src/mdx/Heading/_exports.module.scss diff --git a/website/src/markdown/Heading/_exports.module.scss.d.ts b/website/src/mdx/Heading/_exports.module.scss.d.ts similarity index 100% rename from website/src/markdown/Heading/_exports.module.scss.d.ts rename to website/src/mdx/Heading/_exports.module.scss.d.ts diff --git a/website/src/markdown/Heading/index.tsx b/website/src/mdx/Heading/index.tsx similarity index 100% rename from website/src/markdown/Heading/index.tsx rename to website/src/mdx/Heading/index.tsx diff --git a/website/src/markdown/Heading/styles.module.scss b/website/src/mdx/Heading/styles.module.scss similarity index 100% rename from website/src/markdown/Heading/styles.module.scss rename to website/src/mdx/Heading/styles.module.scss diff --git a/website/src/markdown/Heading/styles.module.scss.d.ts b/website/src/mdx/Heading/styles.module.scss.d.ts similarity index 100% rename from website/src/markdown/Heading/styles.module.scss.d.ts rename to website/src/mdx/Heading/styles.module.scss.d.ts diff --git a/website/src/markdown/components.tsx b/website/src/mdx/components.tsx similarity index 87% rename from website/src/markdown/components.tsx rename to website/src/mdx/components.tsx index df457ac..35c1b91 100644 --- a/website/src/markdown/components.tsx +++ b/website/src/mdx/components.tsx @@ -5,15 +5,15 @@ * LICENSE-docusaurus file in the root directory of the website source tree. */ -import { isValidElement } from "react"; +import React, { isValidElement } from 'react'; import Link from 'next/link'; import CodeBlock from './CodeBlock'; -import { getHeading } from './Heading'; -import type { ReactNode } from "react"; +import type { ComponentMap } from "mdx-bundler/client"; +import Heading, { getHeading } from './Heading'; -const MDXComponents: Record = { +const MDXComponents: ComponentMap = { code: (props: any) => { const { children } = props; diff --git a/website/src/markdown/markdown.module.scss b/website/src/mdx/markdown.module.scss similarity index 100% rename from website/src/markdown/markdown.module.scss rename to website/src/mdx/markdown.module.scss diff --git a/website/src/markdown/markdown.module.scss.d.ts b/website/src/mdx/markdown.module.scss.d.ts similarity index 100% rename from website/src/markdown/markdown.module.scss.d.ts rename to website/src/mdx/markdown.module.scss.d.ts diff --git a/website/src/pages/_app.tsx b/website/src/pages/_app.tsx index ac8ac39..118285d 100644 --- a/website/src/pages/_app.tsx +++ b/website/src/pages/_app.tsx @@ -1,6 +1,6 @@ import Head from "next/head"; -import '@/styles/index.scss' +import '@/styles/index.scss'; import type { AppProps } from 'next/app' diff --git a/website/src/pages/workshops/[...slug].tsx b/website/src/pages/workshops/[...slug].tsx index 3eb0f12..46b3193 100644 --- a/website/src/pages/workshops/[...slug].tsx +++ b/website/src/pages/workshops/[...slug].tsx @@ -1,7 +1,9 @@ +import { join } from "path"; import { extractToc } from "@/lib/helpers/toc"; import { createPipeline } from "@/lib/pipeline"; import { workshopsConfig } from "@/lib/pipeline/workshops"; import { slugToHref } from "@/utils/slugToHref"; +import { bundle } from "@/lib/bundle"; import CategoryPage from "@/layout/pages/CategoryPage"; import DocPage from "@/layout/pages/DocPage"; @@ -30,35 +32,24 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { case 'directory': const flattenedItems = Object.values(entry.items) .map((entry) => { - const { type, title, description, fsPath } = (() => { - switch (entry.type) { - case 'file': - return { - type: 'doc', - title: entry.title, - description: entry.description, - fsPath: entry.fsPath - } as Doc - case 'directory': - const numItems = entry.numLeaves; - return { - type: 'category', - title: entry.fsPath[entry.fsPath.length - 1], - description: numItems === 1 - ? `${numItems} item` - : `${numItems} items`, - fsPath: entry.fsPath, - } as Category - } - })(); const href = slugToHref(entry.slug, workshopsConfig.baseUrl); - - return { - type, - title, - description, - href, - fsPath, + switch (entry.type) { + case 'file': + return { + type: 'doc', + title: entry.title, + description: entry.description, + fsPath: entry.fsPath, + href, + } + case 'directory': + return { + type: 'category', + title: entry.title, + description: entry.description, + fsPath: entry.fsPath, + href, + } } }) ; @@ -69,10 +60,16 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { case 'file': const toc = await extractToc(entry.md) + const { code } = await bundle({ + source: entry.md, + cwd: join(workshopsConfig.root_filepath, ...entry.fsPath), + baseUrl: workshopsConfig.baseUrl ?? '/', + slug: entry.slug, + }) return { type: 'doc', title: entry.title, - source: entry.md, + source: code, toc, fsPath: entry.fsPath, } as Omit diff --git a/website/yarn.lock b/website/yarn.lock index 4964ffb..0b0c0d7 100644 --- a/website/yarn.lock +++ b/website/yarn.lock @@ -121,6 +121,16 @@ "@babel/helper-validator-identifier" "^7.16.7" to-fast-properties "^2.0.0" +"@esbuild-plugins/node-resolve@^0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@esbuild-plugins/node-resolve/-/node-resolve-0.1.4.tgz#2257ef3b233c9cb3acd2ebde7d5a3d6874046d38" + integrity sha512-haFQ0qhxEpqtWWY0kx1Y5oE3sMyO1PcoSiWEPrAw6tm/ZOOLXjSs6Q+v1v9eyuVF0nNt50YEvrcrvENmyoMv5g== + dependencies: + "@types/resolve" "^1.17.1" + debug "^4.3.1" + escape-string-regexp "^4.0.0" + resolve "^1.19.0" + "@eslint/eslintrc@^0.4.3": version "0.4.3" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" @@ -136,6 +146,11 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" +"@fal-works/esbuild-plugin-global-externals@^2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@fal-works/esbuild-plugin-global-externals/-/esbuild-plugin-global-externals-2.1.2.tgz#c05ed35ad82df8e6ac616c68b92c2282bd083ba4" + integrity sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ== + "@humanwhocodes/config-array@^0.5.0": version "0.5.0" resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" @@ -157,6 +172,38 @@ dependencies: unist-util-visit "^1.4.1" +"@mdx-js/esbuild@^2.0.0": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@mdx-js/esbuild/-/esbuild-2.1.1.tgz#1e7102fabf1f5f64c2aa5f42147533ff4bb76af0" + integrity sha512-iwcbh7eZZh55r1/lqyrPpkIsuczmlUclulfrtc983mJncdhhhqv0g01loK2r3L0LeIzORhb8h1xUsAWneG0c6w== + dependencies: + "@mdx-js/mdx" "^2.0.0" + node-fetch "^3.0.0" + vfile "^5.0.0" + +"@mdx-js/mdx@^2.0.0", "@mdx-js/mdx@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-2.1.1.tgz#6d8b9b75456d7685a52c3812b1c3e4830c7458fb" + integrity sha512-SXC18cChut3F2zkVXwsb2no0fzTQ1z6swjK13XwFbF5QU/SFQM0orAItPypSdL3GvqYyzVJtz8UofzJhPEQtMw== + dependencies: + "@types/estree-jsx" "^0.0.1" + "@types/mdx" "^2.0.0" + astring "^1.6.0" + estree-util-build-jsx "^2.0.0" + estree-util-is-identifier-name "^2.0.0" + estree-walker "^3.0.0" + hast-util-to-estree "^2.0.0" + markdown-extensions "^1.0.0" + periscopic "^3.0.0" + remark-mdx "^2.0.0" + remark-parse "^10.0.0" + remark-rehype "^10.0.0" + unified "^10.0.0" + unist-util-position-from-estree "^1.0.0" + unist-util-stringify-position "^3.0.0" + unist-util-visit "^4.0.0" + vfile "^5.0.0" + "@next/env@12.1.5": version "12.1.5" resolved "https://registry.yarnpkg.com/@next/env/-/env-12.1.5.tgz#a21ba6708022d630402ca2b340316e69a0296dfc" @@ -304,6 +351,11 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== +"@types/estree@^0.0.46": + version "0.0.46" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.46.tgz#0fb6bfbbeabd7a30880504993369c4bf1deab1fe" + integrity sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg== + "@types/glob@^7.1.4": version "7.2.0" resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" @@ -346,6 +398,11 @@ resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-1.0.2.tgz#e2ce9d83a613bacf284c7be7d491945e39e1f8e9" integrity sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA== +"@types/mdx@^2.0.0": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@types/mdx/-/mdx-2.0.2.tgz#64be19baddba4323ae7893e077e98759316fe279" + integrity sha512-mJGfgj4aWpiKb8C0nnJJchs1sHBHn0HugkVfqqyQi7Wn6mBRksLeQsPOFvih/Pu8L1vlDzfe/LidhVHBeUk3aQ== + "@types/minimatch@*": version "3.0.5" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" @@ -380,6 +437,11 @@ "@types/scheduler" "*" csstype "^3.0.2" +"@types/resolve@^1.17.1": + version "1.20.2" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.20.2.tgz#97d26e00cd4a0423b4af620abecf3e6f442b7975" + integrity sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q== + "@types/scheduler@*": version "0.16.2" resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" @@ -434,7 +496,7 @@ "@typescript-eslint/types" "4.33.0" eslint-visitor-keys "^2.0.0" -acorn-jsx@^5.3.1: +acorn-jsx@^5.0.0, acorn-jsx@^5.3.1: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== @@ -444,6 +506,11 @@ acorn@^7.4.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== +acorn@^8.0.0, acorn@^8.7.1: + version "8.7.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30" + integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== + ajv-keywords@^3.5.2: version "3.5.2" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" @@ -508,6 +575,11 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + aria-query@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" @@ -562,6 +634,11 @@ astral-regex@^2.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== +astring@^1.6.0: + version "1.8.3" + resolved "https://registry.yarnpkg.com/astring/-/astring-1.8.3.tgz#1a0ae738c7cc558f8e5ddc8e3120636f5cebcb85" + integrity sha512-sRpyiNrx2dEYIMmUXprS8nlpRg2Drs8m9ElX9vVEXaCB4XEAJhKfs7IcX0IwShjuOAjLR6wzIrgoptz1n19i1A== + axe-core@^4.3.5: version "4.4.1" resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.4.1.tgz#7dbdc25989298f9ad006645cd396782443757413" @@ -674,6 +751,11 @@ character-entities@^2.0.0: resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-2.0.1.tgz#98724833e1e27990dee0bd0f2b8a859c3476aac7" integrity sha512-OzmutCf2Kmc+6DrFrrPS8/tDh2+DpnrfzdICHWhcVC9eOd0N1PXmQEE1a8iM4IziIAG+8tmTq3K+oo0ubH6RRQ== +character-reference-invalid@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz#85c66b041e43b47210faf401278abf808ac45cb9" + integrity sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw== + "chokidar@>=3.0.0 <4.0.0": version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" @@ -762,6 +844,11 @@ damerau-levenshtein@^1.0.7: resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== +data-uri-to-buffer@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz#b5db46aea50f6176428ac05b73be39a57701a64b" + integrity sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA== + debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -834,6 +921,36 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" +dom-serializer@^1.0.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" + integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.0" + entities "^2.0.0" + +domelementtype@^2.0.1, domelementtype@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domhandler@4.3.1, domhandler@^4.2.0, domhandler@^4.2.2: + version "4.3.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" + integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== + dependencies: + domelementtype "^2.2.0" + +domutils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -856,6 +973,16 @@ enquirer@^2.3.5: dependencies: ansi-colors "^4.1.1" +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + +entities@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-3.0.1.tgz#2b887ca62585e96db3903482d336c1006c3001d4" + integrity sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q== + es-abstract@^1.19.1, es-abstract@^1.19.2: version "1.19.5" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.5.tgz#a2cb01eb87f724e815b278b0dd0d00f36ca9a7f1" @@ -1257,6 +1384,39 @@ estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== +estree-util-attach-comments@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/estree-util-attach-comments/-/estree-util-attach-comments-2.0.0.tgz#2c06d484dfcf841b5946bcb84d5412cbcd544e22" + integrity sha512-kT9YVRvlt2ewPp9BazfIIgXMGsXOEpOm57bK8aa4F3eOEndMml2JAETjWaG3SZYHmC6axSNIzHGY718dYwIuVg== + dependencies: + "@types/estree" "^0.0.46" + +estree-util-build-jsx@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/estree-util-build-jsx/-/estree-util-build-jsx-2.1.0.tgz#629aa81fbb1b16ed628c7a9334d37bc8a2a3726f" + integrity sha512-gsBGfsY6LOJUIDwmMkTOcgCX+3r/LUjRBccgHMSW55PHjhZsV13RmPl/iwpAvW8KcQqoN9P0FEFWTSS2Zc5bGA== + dependencies: + "@types/estree-jsx" "^0.0.1" + estree-util-is-identifier-name "^2.0.0" + estree-walker "^3.0.0" + +estree-util-is-identifier-name@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/estree-util-is-identifier-name/-/estree-util-is-identifier-name-1.1.0.tgz#2e3488ea06d9ea2face116058864f6370b37456d" + integrity sha512-OVJZ3fGGt9By77Ix9NhaRbzfbDV/2rx9EP7YIDJTmsZSEc5kYn2vWcNccYyahJL2uAQZK2a5Or2i0wtIKTPoRQ== + +estree-util-is-identifier-name@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/estree-util-is-identifier-name/-/estree-util-is-identifier-name-2.0.0.tgz#e2d3d2ae3032c017b2112832bfc5d8ba938c8010" + integrity sha512-aXXZFVMnBBDRP81vS4YtAYJ0hUkgEsXea7lNKWCOeaAquGb1Jm2rcONPB5fpzwgbNxulTvrWuKnp9UElUGAKeQ== + +estree-util-value-to-estree@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/estree-util-value-to-estree/-/estree-util-value-to-estree-1.3.0.tgz#1d3125594b4d6680f666644491e7ac1745a3df49" + integrity sha512-Y+ughcF9jSUJvncXwqRageavjrNPAI+1M/L3BI3PyLp1nmgYTGUXU6t5z1Y7OWuThoDdhPME07bQU+d5LxdJqw== + dependencies: + is-plain-obj "^3.0.0" + estree-util-visit@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/estree-util-visit/-/estree-util-visit-1.1.0.tgz#c0ea7942c40ac7889a77b57a11e92f987744bc6f" @@ -1265,11 +1425,23 @@ estree-util-visit@^1.0.0: "@types/estree-jsx" "^0.0.1" "@types/unist" "^2.0.0" +estree-walker@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.1.tgz#c2a9fb4a30232f5039b7c030b37ead691932debd" + integrity sha512-woY0RUD87WzMBUiZLx8NsYr23N5BKsOMZHhu2hoNRVh6NXGfoiT1KOL8G3UHlJAnEDGmfa5ubNA/AacfG+Kb0g== + esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + extend@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" @@ -1308,6 +1480,21 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" +fault@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fault/-/fault-2.0.1.tgz#d47ca9f37ca26e4bd38374a7c500b5a384755b6c" + integrity sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ== + dependencies: + format "^0.2.0" + +fetch-blob@^3.1.2, fetch-blob@^3.1.4: + version "3.1.5" + resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.1.5.tgz#0077bf5f3fcdbd9d75a0b5362f77dbb743489863" + integrity sha512-N64ZpKqoLejlrwkIAnb9iLSA3Vx/kjgzpcDhygcqJ2KKjky8nCgUQ+dzXtbrLaWZGZNmNfQTsiQ0weZ1svglHg== + dependencies: + node-domexception "^1.0.0" + web-streams-polyfill "^3.0.3" + file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -1342,6 +1529,18 @@ flatted@^3.1.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3" integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg== +format@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b" + integrity sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs= + +formdata-polyfill@^4.0.10: + version "4.0.10" + resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" + integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== + dependencies: + fetch-blob "^3.1.2" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -1451,6 +1650,16 @@ globby@^11.0.3: merge2 "^1.4.1" slash "^3.0.0" +gray-matter@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.3.tgz#e893c064825de73ea1f5f7d88c7a9f7274288798" + integrity sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q== + dependencies: + js-yaml "^3.13.1" + kind-of "^6.0.2" + section-matter "^1.0.0" + strip-bom-string "^1.0.0" + has-bigints@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" @@ -1534,21 +1743,24 @@ hast-util-parse-selector@^3.0.0: dependencies: "@types/hast" "^2.0.0" -hast-util-raw@^7.2.0: - version "7.2.1" - resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-7.2.1.tgz#6e964cee098dbdd93d1b77cf180b5827d48048ab" - integrity sha512-wgtppqXVdXzkDXDFclLLdAyVUJSKMYYi6LWIAbA8oFqEdwksYIcPGM3RkKV1Dfn5GElvxhaOCs0jmCOMayxd3A== +hast-util-to-estree@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hast-util-to-estree/-/hast-util-to-estree-2.0.2.tgz#79c5bf588915610b3f0d47ca83a74dc0269c7dc2" + integrity sha512-UQrZVeBj6A9od0lpFvqHKNSH9zvDrNoyWKbveu1a2oSCXEDUI+3bnd6BoiQLPnLrcXXn/jzJ6y9hmJTTlvf8lQ== dependencies: + "@types/estree-jsx" "^0.0.1" "@types/hast" "^2.0.0" - "@types/parse5" "^6.0.0" - hast-util-from-parse5 "^7.0.0" - hast-util-to-parse5 "^7.0.0" - html-void-elements "^2.0.0" - parse5 "^6.0.0" + "@types/unist" "^2.0.0" + comma-separated-tokens "^2.0.0" + estree-util-attach-comments "^2.0.0" + estree-util-is-identifier-name "^2.0.0" + hast-util-whitespace "^2.0.0" + mdast-util-mdx-expression "^1.0.0" + mdast-util-mdxjs-esm "^1.0.0" + property-information "^6.0.0" + space-separated-tokens "^2.0.0" + style-to-object "^0.3.0" unist-util-position "^4.0.0" - unist-util-visit "^4.0.0" - vfile "^5.0.0" - web-namespaces "^2.0.0" zwitch "^2.0.0" hast-util-to-html@^8.0.0: @@ -1567,18 +1779,6 @@ hast-util-to-html@^8.0.0: stringify-entities "^4.0.2" unist-util-is "^5.0.0" -hast-util-to-parse5@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-7.0.0.tgz#a39808e69005d10afeed1866029a1fb137df3f7c" - integrity sha512-YHiS6aTaZ3N0Q3nxaY/Tj98D6kM8QX5Q8xqgg8G45zR7PvWnPGPP0vcKCgb/moIydEJ/QWczVrX0JODCVeoV7A== - dependencies: - "@types/hast" "^2.0.0" - "@types/parse5" "^6.0.0" - hast-to-hyperscript "^10.0.0" - property-information "^6.0.0" - web-namespaces "^2.0.0" - zwitch "^2.0.0" - hast-util-to-text@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/hast-util-to-text/-/hast-util-to-text-3.1.1.tgz#b7699a75f7a61af6e0befb67660cd78460d96dc6" @@ -1604,11 +1804,39 @@ hastscript@^7.0.0: property-information "^6.0.0" space-separated-tokens "^2.0.0" +html-dom-parser@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/html-dom-parser/-/html-dom-parser-1.2.0.tgz#8f689b835982ffbf245eda99730e92b8462c111e" + integrity sha512-2HIpFMvvffsXHFUFjso0M9LqM+1Lm22BF+Df2ba+7QHJXjk63pWChEnI6YG27eaWqUdfnh5/Vy+OXrNTtepRsg== + dependencies: + domhandler "4.3.1" + htmlparser2 "7.2.0" + +html-react-parser@^1.4.12: + version "1.4.12" + resolved "https://registry.yarnpkg.com/html-react-parser/-/html-react-parser-1.4.12.tgz#5d4336e3853a75e4ac678c9815c15c58581bb30e" + integrity sha512-nqYQzr4uXh67G9ejAG7djupTHmQvSTgjY83zbXLRfKHJ0F06751jXx6WKSFARDdXxCngo2/7H4Rwtfeowql4gQ== + dependencies: + domhandler "4.3.1" + html-dom-parser "1.2.0" + react-property "2.0.0" + style-to-js "1.1.0" + html-void-elements@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-2.0.1.tgz#29459b8b05c200b6c5ee98743c41b979d577549f" integrity sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A== +htmlparser2@7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-7.2.0.tgz#8817cdea38bbc324392a90b1990908e81a65f5a5" + integrity sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.2" + domutils "^2.8.0" + entities "^3.0.1" + ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" @@ -1664,6 +1892,19 @@ internal-slot@^1.0.3: has "^1.0.3" side-channel "^1.0.4" +is-alphabetical@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-2.0.1.tgz#01072053ea7c1036df3c7d19a6daaec7f19e789b" + integrity sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ== + +is-alphanumerical@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz#7c03fbe96e3e931113e57f964b0a368cc2dfd875" + integrity sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw== + dependencies: + is-alphabetical "^2.0.0" + is-decimal "^2.0.0" + is-bigint@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" @@ -1710,6 +1951,16 @@ is-date-object@^1.0.1: dependencies: has-tostringtag "^1.0.0" +is-decimal@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-2.0.1.tgz#9469d2dc190d0214fd87d78b78caecc0cc14eef7" + integrity sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A== + +is-extendable@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -1727,6 +1978,11 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" +is-hexadecimal@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz#86b5bf668fca307498d319dfc03289d781a90027" + integrity sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg== + is-negative-zero@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" @@ -1744,11 +2000,23 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +is-plain-obj@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" + integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== + is-plain-obj@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.0.0.tgz#06c0999fd7574edf5a906ba5644ad0feb3a84d22" integrity sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw== +is-reference@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-3.0.0.tgz#b1380c03d96ddf7089709781e3208fceb0c92cd6" + integrity sha512-Eo1W3wUoHWoCoVM4GVl/a+K0IgiqE5aIo4kJABFyMum1ZORlPkC+UC357sSQUL5w5QCE5kCC9upl75b7+7CY/Q== + dependencies: + "@types/estree" "*" + is-regex@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" @@ -1803,6 +2071,13 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -1852,6 +2127,11 @@ katex@^0.15.0: dependencies: commander "^8.0.0" +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + kleur@^4.0.3: version "4.1.4" resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.4.tgz#8c202987d7e577766d039a8cd461934c01cda04d" @@ -1923,6 +2203,11 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" +markdown-extensions@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/markdown-extensions/-/markdown-extensions-1.1.1.tgz#fea03b539faeaee9b4ef02a3769b455b189f7fc3" + integrity sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q== + markdown-table@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-3.0.2.tgz#9b59eb2c1b22fe71954a65ff512887065a7bb57c" @@ -1964,6 +2249,13 @@ mdast-util-from-markdown@^1.0.0, mdast-util-from-markdown@^1.2.0: unist-util-stringify-position "^3.0.0" uvu "^0.5.0" +mdast-util-frontmatter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-frontmatter/-/mdast-util-frontmatter-1.0.0.tgz#ef12469379782e4a0fd995fed60cc3b871e6c819" + integrity sha512-7itKvp0arEVNpCktOET/eLFAYaZ+0cNjVtFtIPxgQ5tV+3i+D4SDDTjTzPWl44LT59PC+xdx+glNTawBdF98Mw== + dependencies: + micromark-extension-frontmatter "^1.0.0" + mdast-util-gfm-autolink-literal@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.2.tgz#4032dcbaddaef7d4f2f3768ed830475bb22d3970" @@ -2030,7 +2322,43 @@ mdast-util-math@^2.0.0, mdast-util-math@^2.0.1: longest-streak "^3.0.0" mdast-util-to-markdown "^1.3.0" -mdast-util-mdxjs-esm@^1.2.0: +mdast-util-mdx-expression@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mdast-util-mdx-expression/-/mdast-util-mdx-expression-1.2.0.tgz#3e927afe27943956dc5d1c64cb949652062f71ff" + integrity sha512-wb36oi09XxqO9RVqgfD+xo8a7xaNgS+01+k3v0GKW0X0bYbeBmUZz22Z/IJ8SuphVlG+DNgNo9VoEaUJ3PKfJQ== + dependencies: + "@types/estree-jsx" "^0.0.1" + "@types/hast" "^2.0.0" + "@types/mdast" "^3.0.0" + mdast-util-from-markdown "^1.0.0" + mdast-util-to-markdown "^1.0.0" + +mdast-util-mdx-jsx@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-2.0.1.tgz#03d003c8b0b4bd94ab092d876c0f92d2b0c83b0b" + integrity sha512-oPC7/smPBf7vxnvIYH5y3fPo2lw1rdrswFfSb4i0GTAXRUQv7JUU/t/hbp07dgGdUFTSDOHm5DNamhNg/s2Hrg== + dependencies: + "@types/estree-jsx" "^0.0.1" + "@types/hast" "^2.0.0" + "@types/mdast" "^3.0.0" + ccount "^2.0.0" + mdast-util-to-markdown "^1.3.0" + parse-entities "^4.0.0" + stringify-entities "^4.0.0" + unist-util-remove-position "^4.0.0" + unist-util-stringify-position "^3.0.0" + vfile-message "^3.0.0" + +mdast-util-mdx@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-mdx/-/mdast-util-mdx-2.0.0.tgz#dd4f6c993cf27da32725e50a04874f595b7b63fb" + integrity sha512-M09lW0CcBT1VrJUaF/PYxemxxHa7SLDHdSn94Q9FhxjCQfuW7nMAWKWimTmA3OyDMSTH981NN1csW1X+HPSluw== + dependencies: + mdast-util-mdx-expression "^1.0.0" + mdast-util-mdx-jsx "^2.0.0" + mdast-util-mdxjs-esm "^1.0.0" + +mdast-util-mdxjs-esm@^1.0.0, mdast-util-mdxjs-esm@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-1.2.0.tgz#eca8b985f091c2d65a72c19d2740cefbc209aa63" integrity sha512-IPpX9GBzAIbIRCjbyeLDpMhACFb0wxTIujuR3YElB8LWbducUdMgRJuqs/Vg8xQ1bIAMm7lw8L+YNtua0xKXRw== @@ -2085,6 +2413,20 @@ mdurl@^1.0.0: resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= +mdx-bundler@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/mdx-bundler/-/mdx-bundler-9.0.1.tgz#0ccb8ba0aaa1c4a22fbb64225b2d7f7e9c483552" + integrity sha512-/ktO4WTwrZszPOISh9qU0Ud/WXlTZHqA9grErUZGc7WGd7mooJiCCxejkkzHy7TQf1PS83jGECLrTeSVUkqEkQ== + dependencies: + "@babel/runtime" "^7.16.3" + "@esbuild-plugins/node-resolve" "^0.1.4" + "@fal-works/esbuild-plugin-global-externals" "^2.1.2" + "@mdx-js/esbuild" "^2.0.0" + gray-matter "^4.0.3" + remark-frontmatter "^4.0.1" + remark-mdx-frontmatter "^1.1.1" + uuid "^8.3.2" + merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" @@ -2112,6 +2454,15 @@ micromark-core-commonmark@^1.0.0, micromark-core-commonmark@^1.0.1: micromark-util-types "^1.0.1" uvu "^0.5.0" +micromark-extension-frontmatter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-extension-frontmatter/-/micromark-extension-frontmatter-1.0.0.tgz#612498e6dad87c132c95e25f0918e7cc0cd535f6" + integrity sha512-EXjmRnupoX6yYuUJSQhrQ9ggK0iQtQlpi6xeJzVD5xscyAI+giqco5fdymayZhJMbIFecjnE2yz85S9NzIgQpg== + dependencies: + fault "^2.0.0" + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-extension-gfm-autolink-literal@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.3.tgz#dc589f9c37eaff31a175bab49f12290edcf96058" @@ -2205,10 +2556,45 @@ micromark-extension-math@^2.0.0, micromark-extension-math@^2.0.2: micromark-util-types "^1.0.0" uvu "^0.5.0" -micromark-extension-mdxjs-esm@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-1.0.2.tgz#df0c48743a0b1988119489c68314160b7942ffa6" - integrity sha512-bIaxblNIM+CCaJvp3L/V+168l79iuNmxEiTU6i3vB0YuDW+rumV64BFMxvhfRDxaJxQE1zD5vTPdyLBbW4efGA== +micromark-extension-mdx-expression@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-1.0.3.tgz#cd3843573921bf55afcfff4ae0cd2e857a16dcfa" + integrity sha512-TjYtjEMszWze51NJCZmhv7MEBcgYRgb3tJeMAJ+HQCAaZHHRBaDCccqQzGizR/H4ODefP44wRTgOn2vE5I6nZA== + dependencies: + micromark-factory-mdx-expression "^1.0.0" + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-events-to-acorn "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + +micromark-extension-mdx-jsx@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-1.0.3.tgz#9f196be5f65eb09d2a49b237a7b3398bba2999be" + integrity sha512-VfA369RdqUISF0qGgv2FfV7gGjHDfn9+Qfiv5hEwpyr1xscRj/CiVRkU7rywGFCO7JwJ5L0e7CJz60lY52+qOA== + dependencies: + "@types/acorn" "^4.0.0" + estree-util-is-identifier-name "^2.0.0" + micromark-factory-mdx-expression "^1.0.0" + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + vfile-message "^3.0.0" + +micromark-extension-mdx-md@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-extension-mdx-md/-/micromark-extension-mdx-md-1.0.0.tgz#382f5df9ee3706dd120b51782a211f31f4760d22" + integrity sha512-xaRAMoSkKdqZXDAoSgp20Azm0aRQKGOl0RrS81yGu8Hr/JhMsBmfs4wR7m9kgVUIO36cMUQjNyiyDKPrsv8gOw== + dependencies: + micromark-util-types "^1.0.0" + +micromark-extension-mdxjs-esm@^1.0.0, micromark-extension-mdxjs-esm@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-1.0.3.tgz#630d9dc9db2c2fd470cac8c1e7a824851267404d" + integrity sha512-2N13ol4KMoxb85rdDwTAC6uzs8lMX0zeqpcyx7FhS7PxXomOnLactu8WI8iBNXW8AVyea3KIJd/1CKnUmwrK9A== dependencies: micromark-core-commonmark "^1.0.0" micromark-util-character "^1.0.0" @@ -2219,6 +2605,20 @@ micromark-extension-mdxjs-esm@^1.0.2: uvu "^0.5.0" vfile-message "^3.0.0" +micromark-extension-mdxjs@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/micromark-extension-mdxjs/-/micromark-extension-mdxjs-1.0.0.tgz#772644e12fc8299a33e50f59c5aa15727f6689dd" + integrity sha512-TZZRZgeHvtgm+IhtgC2+uDMR7h8eTKF0QUX9YsgoL9+bADBpBY6SiLvWqnBlLbCEevITmTqmEuY3FoxMKVs1rQ== + dependencies: + acorn "^8.0.0" + acorn-jsx "^5.0.0" + micromark-extension-mdx-expression "^1.0.0" + micromark-extension-mdx-jsx "^1.0.0" + micromark-extension-mdx-md "^1.0.0" + micromark-extension-mdxjs-esm "^1.0.0" + micromark-util-combine-extensions "^1.0.0" + micromark-util-types "^1.0.0" + micromark-factory-destination@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz#fef1cb59ad4997c496f887b6977aa3034a5a277e" @@ -2238,6 +2638,20 @@ micromark-factory-label@^1.0.0: micromark-util-types "^1.0.0" uvu "^0.5.0" +micromark-factory-mdx-expression@^1.0.0: + version "1.0.6" + resolved "https://registry.yarnpkg.com/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-1.0.6.tgz#917e17d16e6e9c2551f3a862e6a9ebdd22056476" + integrity sha512-WRQIc78FV7KrCfjsEf/sETopbYjElh3xAmNpLkd1ODPqxEngP42eVRGbiPEQWpRV27LzqW+XVTvQAMIIRLPnNA== + dependencies: + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-events-to-acorn "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + unist-util-position-from-estree "^1.0.0" + uvu "^0.5.0" + vfile-message "^3.0.0" + micromark-factory-space@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz#cebff49968f2b9616c0fcb239e96685cb9497633" @@ -2485,6 +2899,20 @@ next@12.1.5: "@next/swc-win32-ia32-msvc" "12.1.5" "@next/swc-win32-x64-msvc" "12.1.5" +node-domexception@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" + integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== + +node-fetch@^3.0.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.2.4.tgz#3fbca2d8838111048232de54cb532bd3cf134947" + integrity sha512-WvYJRN7mMyOLurFR2YpysQGuwYrJN+qrrpHjJDuKMcSPdfFccRUla/kng2mz6HWSBxJcqPbvatS6Gb4RhOzCJw== + dependencies: + data-uri-to-buffer "^4.0.0" + fetch-blob "^3.1.4" + formdata-polyfill "^4.0.10" + normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -2595,6 +3023,20 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" +parse-entities@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-4.0.0.tgz#f67c856d4e3fe19b1a445c3fabe78dcdc1053eeb" + integrity sha512-5nk9Fn03x3rEhGaX1FU6IDwG/k+GxLXlFAkgrbM1asuAFl3BhdQWvASaIsmwWypRNcZKHPYnIuOSfIWEyEQnPQ== + dependencies: + "@types/unist" "^2.0.0" + character-entities "^2.0.0" + character-entities-legacy "^3.0.0" + character-reference-invalid "^2.0.0" + decode-named-character-reference "^1.0.0" + is-alphanumerical "^2.0.0" + is-decimal "^2.0.0" + is-hexadecimal "^2.0.0" + parse5@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" @@ -2625,6 +3067,14 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== +periscopic@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/periscopic/-/periscopic-3.0.4.tgz#b3fbed0d1bc844976b977173ca2cd4a0ef4fa8d1" + integrity sha512-SFx68DxCv0Iyo6APZuw/AKewkkThGwssmU0QWtTlvov3VAtPX+QJ4CadwSaz8nrT5jPIuxdvJWB4PnD2KNDxQg== + dependencies: + estree-walker "^3.0.0" + is-reference "^3.0.0" + picocolors@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" @@ -2702,6 +3152,11 @@ react-is@^16.13.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== +react-property@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/react-property/-/react-property-2.0.0.tgz#2156ba9d85fa4741faf1918b38efc1eae3c6a136" + integrity sha512-kzmNjIgU32mO4mmH5+iUyrqlpFQhF8K2k7eZ4fdLSOPFrD1XgEuSBv9LDEgxRXTMBqMd8ppT0x6TIzqE5pdGdw== + react@17.0.2: version "17.0.2" resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" @@ -2760,15 +3215,6 @@ rehype-parse@^8.0.0: parse5 "^6.0.0" unified "^10.0.0" -rehype-raw@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/rehype-raw/-/rehype-raw-6.1.1.tgz#81bbef3793bd7abacc6bf8335879d1b6c868c9d4" - integrity sha512-d6AKtisSRtDRX4aSPsJGTfnzrX2ZkHQLE5kiUuGOeEoLpbEulFF4hj0mLPbsa+7vmguDKOVVEQdHKDSwoaIDsQ== - dependencies: - "@types/hast" "^2.0.0" - hast-util-raw "^7.2.0" - unified "^10.0.0" - rehype-react@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/rehype-react/-/rehype-react-7.1.1.tgz#e0403019f6dc8c434751c3dd51edf4a08fa75920" @@ -2789,6 +3235,16 @@ rehype-stringify@^9.0.3: hast-util-to-html "^8.0.0" unified "^10.0.0" +remark-frontmatter@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/remark-frontmatter/-/remark-frontmatter-4.0.1.tgz#84560f7ccef114ef076d3d3735be6d69f8922309" + integrity sha512-38fJrB0KnmD3E33a5jZC/5+gGAC2WKNiPw1/fdXJvijBlhA7RCsvJklrYJakS0HedninvaCYW8lQGf9C918GfA== + dependencies: + "@types/mdast" "^3.0.0" + mdast-util-frontmatter "^1.0.0" + micromark-extension-frontmatter "^1.0.0" + unified "^10.0.0" + remark-gfm@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/remark-gfm/-/remark-gfm-3.0.1.tgz#0b180f095e3036545e9dddac0e8df3fa5cfee54f" @@ -2809,7 +3265,25 @@ remark-math@^5.1.1: micromark-extension-math "^2.0.0" unified "^10.0.0" -remark-parse@^10.0.1: +remark-mdx-frontmatter@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/remark-mdx-frontmatter/-/remark-mdx-frontmatter-1.1.1.tgz#54cfb3821fbb9cb6057673e0570ae2d645f6fe32" + integrity sha512-7teX9DW4tI2WZkXS4DBxneYSY7NHiXl4AKdWDO9LXVweULlCT8OPWsOjLEnMIXViN1j+QcY8mfbq3k0EK6x3uA== + dependencies: + estree-util-is-identifier-name "^1.0.0" + estree-util-value-to-estree "^1.0.0" + js-yaml "^4.0.0" + toml "^3.0.0" + +remark-mdx@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-2.1.1.tgz#14021be9ecbc9ad0310f4240980221328aa7ed55" + integrity sha512-0wXdEITnFyjLquN3VvACNLzbGzWM5ujzTvfgOkONBZgSFJ7ezLLDaTWqf6H9eUgVITEP8asp6LJ0W/X090dXBg== + dependencies: + mdast-util-mdx "^2.0.0" + micromark-extension-mdxjs "^1.0.0" + +remark-parse@^10.0.0, remark-parse@^10.0.1: version "10.0.1" resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-10.0.1.tgz#6f60ae53edbf0cf38ea223fe643db64d112e0775" integrity sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw== @@ -2818,7 +3292,7 @@ remark-parse@^10.0.1: mdast-util-from-markdown "^1.0.0" unified "^10.0.0" -remark-rehype@^10.1.0: +remark-rehype@^10.0.0, remark-rehype@^10.1.0: version "10.1.0" resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-10.1.0.tgz#32dc99d2034c27ecaf2e0150d22a6dcccd9a6279" integrity sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw== @@ -2847,7 +3321,7 @@ resolve-from@^4.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -resolve@^1.20.0, resolve@^1.22.0: +resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.0: version "1.22.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== @@ -2916,6 +3390,14 @@ schema-utils@^2.0.1: ajv "^6.12.4" ajv-keywords "^3.5.2" +section-matter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167" + integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA== + dependencies: + extend-shallow "^2.0.1" + kind-of "^6.0.0" + semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" @@ -3022,7 +3504,7 @@ string.prototype.trimstart@^1.0.4: call-bind "^1.0.2" define-properties "^1.1.3" -stringify-entities@^4.0.2: +stringify-entities@^4.0.0, stringify-entities@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-4.0.2.tgz#13d113dc7449dc8ae4cb22c28883ee3fff8753e3" integrity sha512-MTxTVcEkorNtBbNpoFJPEh0kKdM6+QbMjLbaxmvaPMmayOXdr/AIVIIJX7FReUVweRBFJfZepK4A4AKgwuFpMQ== @@ -3037,6 +3519,11 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" +strip-bom-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" + integrity sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI= + strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" @@ -3047,7 +3534,14 @@ strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -style-to-object@^0.3.0: +style-to-js@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/style-to-js/-/style-to-js-1.1.0.tgz#631cbb20fce204019b3aa1fcb5b69d951ceac4ac" + integrity sha512-1OqefPDxGrlMwcbfpsTVRyzwdhr4W0uxYQzeA2F1CBc8WG04udg2+ybRnvh3XYL4TdHQrCahLtax2jc8xaE6rA== + dependencies: + style-to-object "0.3.0" + +style-to-object@0.3.0, style-to-object@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.3.0.tgz#b1b790d205991cc783801967214979ee19a76e46" integrity sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA== @@ -3106,6 +3600,11 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" +toml@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/toml/-/toml-3.0.0.tgz#342160f1af1904ec9d204d03a5d61222d762c5ee" + integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w== + trough@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/trough/-/trough-2.1.0.tgz#0f7b511a4fde65a46f18477ab38849b22c554876" @@ -3203,7 +3702,7 @@ unist-util-is@^5.0.0: resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-5.1.1.tgz#e8aece0b102fa9bc097b0fef8f870c496d4a6236" integrity sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ== -unist-util-position-from-estree@^1.1.0: +unist-util-position-from-estree@^1.0.0, unist-util-position-from-estree@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/unist-util-position-from-estree/-/unist-util-position-from-estree-1.1.1.tgz#96f4d543dfb0428edc01ebb928570b602d280c4c" integrity sha512-xtoY50b5+7IH8tFbkw64gisG9tMSpxDjhX9TmaJJae/XuxQ9R/Kc8Nv1eOsf43Gt4KV/LkriMy9mptDr7XLcaw== @@ -3287,6 +3786,11 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + uvu@^0.5.0: version "0.5.3" resolved "https://registry.yarnpkg.com/uvu/-/uvu-0.5.3.tgz#3d83c5bc1230f153451877bfc7f4aea2392219ae" @@ -3333,6 +3837,11 @@ web-namespaces@^2.0.0: resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-2.0.1.tgz#1010ff7c650eccb2592cebeeaf9a1b253fd40692" integrity sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ== +web-streams-polyfill@^3.0.3: + version "3.2.1" + resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6" + integrity sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q== + which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"