From e09cdcfa40b6f2dc586de32c8be3b38369d9f0cd Mon Sep 17 00:00:00 2001 From: Alexander Carls Date: Sat, 2 Jan 2021 23:52:49 +0100 Subject: [PATCH 1/7] Add MDX Support, Rework ToC, Add Tabs --- website/gatsby-browser.js | 7 + website/gatsby-config.js | 84 +- website/gatsby-node.js | 4 +- website/mdx.types.ts | 34 + website/package.json | 10 +- .../src/blog/2019-01-24-schema-stitching.md | 4 +- .../components/articles/article-elements.tsx | 21 - .../components/articles/article-sections.tsx | 214 +++-- .../blog-article/blog-article-metadata.tsx | 2 +- .../blog-article/blog-article-sharebar.tsx | 6 +- .../blog-article/blog-article-tags.tsx | 2 +- .../components/blog-article/blog-article.tsx | 17 +- website/src/components/doc-page/doc-page.tsx | 13 +- .../components/mdx/auto-linked-heading.tsx | 59 ++ website/src/components/mdx/code-block.tsx | 184 ++++ website/src/components/mdx/copy.tsx | 95 ++ website/src/components/mdx/example-tabs.tsx | 39 + website/src/components/mdx/tabs/index.tsx | 1 + website/src/components/mdx/tabs/list.tsx | 7 + website/src/components/mdx/tabs/panel.tsx | 17 + website/src/components/mdx/tabs/tab.tsx | 42 + website/src/components/mdx/tabs/tabs.tsx | 63 ++ website/src/components/misc/global-style.tsx | 228 +---- website/src/components/structure/layout.tsx | 17 +- .../src/components/widgets/blog-articles.tsx | 6 +- website/src/docs/greendonut/index.md | 2 - website/src/docs/greendonut/v10/api.md | 6 +- .../api-reference/coding-approaches.md | 2 - .../api-reference/extending-filtering.md | 4 +- .../hotchocolate/api-reference/filtering.md | 22 +- .../docs/hotchocolate/api-reference/index.md | 2 - .../hotchocolate/api-reference/object-type.md | 14 +- .../hotchocolate/api-reference/visitors.md | 8 +- .../hotchocolate/defining-a-schema/index.md | 43 +- .../unions-and-interfaces.md | 44 +- .../defining-a-schema/versioning.md | 17 +- .../hotchocolate/fetching-data/dataloader.md | 2 - .../fetching-data/fetching-from-databases.md | 2 - .../fetching-data/fetching-from-rest.md | 2 - .../hotchocolate/fetching-data/filtering.md | 2 +- .../docs/hotchocolate/fetching-data/index.md | 14 +- .../hotchocolate/fetching-data/pagination.md | 2 - .../hotchocolate/fetching-data/sorting.md | 2 +- .../docs/hotchocolate/integrations/index.md | 1 - .../hotchocolate/integrations/spatial-data.md | 2 +- .../performance/persisted-queries.md | 2 - .../v10/schema/code-first-object-type.md | 2 +- website/src/pages/index.tsx | 4 +- website/src/state/common/index.ts | 2 +- website/src/state/index.ts | 3 +- .../src/templates/blog-article-template.tsx | 6 +- .../src/templates/blog-articles-template.tsx | 6 +- website/src/templates/blog-tag-template.tsx | 6 +- website/src/templates/doc-page-template.tsx | 2 +- website/tsconfig.json | 7 +- website/yarn.lock | 896 ++++++++++++------ 56 files changed, 1477 insertions(+), 828 deletions(-) create mode 100644 website/mdx.types.ts create mode 100644 website/src/components/mdx/auto-linked-heading.tsx create mode 100644 website/src/components/mdx/code-block.tsx create mode 100644 website/src/components/mdx/copy.tsx create mode 100644 website/src/components/mdx/example-tabs.tsx create mode 100644 website/src/components/mdx/tabs/index.tsx create mode 100644 website/src/components/mdx/tabs/list.tsx create mode 100644 website/src/components/mdx/tabs/panel.tsx create mode 100644 website/src/components/mdx/tabs/tab.tsx create mode 100644 website/src/components/mdx/tabs/tabs.tsx diff --git a/website/gatsby-browser.js b/website/gatsby-browser.js index aeb631bda50..9fb5199c9fd 100644 --- a/website/gatsby-browser.js +++ b/website/gatsby-browser.js @@ -1 +1,8 @@ +// https://github.com/FormidableLabs/prism-react-renderer/issues/53#issuecomment-546653848 +import Prism from "prismjs"; import "prismjs/themes/prism-tomorrow.css"; + +(typeof global !== "undefined" ? global : window).Prism = Prism; +require("prismjs/components/prism-csharp"); +require("prismjs/components/prism-graphql"); +require("prismjs/components/prism-json"); diff --git a/website/gatsby-config.js b/website/gatsby-config.js index 5dd092e779b..af11f5615bf 100644 --- a/website/gatsby-config.js +++ b/website/gatsby-config.js @@ -38,6 +38,30 @@ module.exports = { `gatsby-plugin-ts`, `gatsby-plugin-styled-components`, `gatsby-plugin-react-helmet`, + `gatsby-remark-reading-time`, + { + resolve: `gatsby-plugin-mdx`, + options: { + extensions: [`.mdx`, `.md`], + gatsbyRemarkPlugins: [ + { + resolve: `gatsby-remark-mermaid`, + options: { + mermaidOptions: { + fontFamily: "sans-serif", + }, + }, + }, + { + resolve: `gatsby-remark-images`, + options: { + maxWidth: 800, + quality: 90, + }, + }, + ] + }, + }, { resolve: `gatsby-plugin-react-redux`, options: { @@ -80,58 +104,6 @@ module.exports = { }, }, `gatsby-transformer-json`, - { - resolve: `gatsby-transformer-remark`, - options: { - plugins: [ - { - resolve: `gatsby-remark-autolink-headers`, - options: { - offsetY: 60, - icon: ``, - }, - }, - `gatsby-remark-reading-time`, - { - resolve: `gatsby-remark-mermaid`, - options: { - mermaidOptions: { - fontFamily: "sans-serif", - }, - }, - }, - { - resolve: `gatsby-remark-code-buttons`, - options: { - tooltipText: `Copy`, - toasterText: "Copied code example", - }, - }, - { - resolve: `gatsby-remark-prismjs`, - options: { - showLineNumbers: false, - inlineCodeMarker: `±`, - languageExtensions: [ - { - language: "sdl", - extend: "graphql", - definition: {}, - insertBefore: {}, - }, - ], - }, - }, - { - resolve: `gatsby-remark-images`, - options: { - maxWidth: 800, - quality: 90, - }, - }, - ], - }, - }, `gatsby-transformer-sharp`, `gatsby-plugin-sharp`, { @@ -215,7 +187,7 @@ module.exports = { feeds: [ { query: `{ - allMarkdownRemark( + allMdx( limit: 100 filter: { frontmatter: { path: { regex: "//blog(/.*)?/" } } } sort: { order: DESC, fields: [frontmatter___date] }, @@ -244,14 +216,14 @@ module.exports = { }`, serialize: ({ query: { - allMarkdownRemark, + allMdx, site: { pathPrefix, siteMetadata: { siteUrl }, }, }, }) => - allMarkdownRemark.edges.map(({ node }) => { + allMdx.edges.map(({ node }) => { const date = new Date(Date.parse(node.frontmatter.date)); const imgSrcPattern = new RegExp( `(${pathPrefix})?/static/`, @@ -260,7 +232,7 @@ module.exports = { const link = siteUrl + pathPrefix + node.frontmatter.path; let image = node.frontmatter.featuredImage ? siteUrl + - node.frontmatter.featuredImage.childImageSharp.fluid.src + node.frontmatter.featuredImage.childImageSharp.fluid.src : null; return { diff --git a/website/gatsby-node.js b/website/gatsby-node.js index 639ed5dad60..578ac8f7d04 100644 --- a/website/gatsby-node.js +++ b/website/gatsby-node.js @@ -8,7 +8,7 @@ exports.createPages = async ({ actions, graphql, reporter }) => { ); const result = await graphql(` { - blog: allMarkdownRemark( + blog: allMdx( limit: 1000 filter: { frontmatter: { path: { regex: "//blog(/.*)?/" } } } sort: { order: DESC, fields: [frontmatter___date] } @@ -124,7 +124,7 @@ exports.createPages = async ({ actions, graphql, reporter }) => { exports.onCreateNode = ({ node, actions, getNode }) => { const { createNodeField } = actions; - if (node.internal.type === `MarkdownRemark`) { + if (node.internal.type === `Mdx`) { const value = createFilePath({ node, getNode }); createNodeField({ name: `slug`, diff --git a/website/mdx.types.ts b/website/mdx.types.ts new file mode 100644 index 00000000000..d4720e93b21 --- /dev/null +++ b/website/mdx.types.ts @@ -0,0 +1,34 @@ +declare module '@mdx-js/react' { + import * as React from 'react' + type ComponentType = + | 'a' + | 'blockquote' + | 'code' + | 'del' + | 'em' + | 'h1' + | 'h2' + | 'h3' + | 'h4' + | 'h5' + | 'h6' + | 'hr' + | 'img' + | 'inlineCode' + | 'li' + | 'ol' + | 'p' + | 'pre' + | 'strong' + | 'sup' + | 'table' + | 'td' + | 'thematicBreak' + | 'tr' + | 'ul' + export interface MDXProviderProps { + children: React.ReactNode + components: Record> + } + export class MDXProvider extends React.Component { } +} \ No newline at end of file diff --git a/website/package.json b/website/package.json index a52659e5e8e..7e7a7bc7a9a 100644 --- a/website/package.json +++ b/website/package.json @@ -23,12 +23,16 @@ }, "dependencies": { "@darth-knoppix/gatsby-plugin-feed": "^2.0.2", + "@mdx-js/mdx": "^1.6.22", + "@mdx-js/react": "^1.6.22", + "@types/prismjs": "^1.16.2", "algoliasearch": "^4.8.3", "gatsby": "^2.30.1", "gatsby-image": "^2.9.0", "gatsby-plugin-disqus": "^1.2.2", "gatsby-plugin-google-analytics": "^2.9.0", "gatsby-plugin-manifest": "^2.10.0", + "gatsby-plugin-mdx": "^1.7.1", "gatsby-plugin-offline": "^3.8.0", "gatsby-plugin-react-helmet": "^3.8.0", "gatsby-plugin-react-redux": "^1.1.0-0", @@ -38,16 +42,14 @@ "gatsby-plugin-styled-components": "^3.8.0", "gatsby-plugin-ts": "^2.2.3", "gatsby-plugin-web-font-loader": "^1.0.4", - "gatsby-remark-autolink-headers": "^2.9.0", - "gatsby-remark-code-buttons": "^2.0.4", "gatsby-remark-images": "^3.9.0", "gatsby-remark-mermaid": "^2.1.0", - "gatsby-remark-prismjs": "^3.11.0", "gatsby-remark-reading-time": "^1.1.0", "gatsby-source-filesystem": "^2.9.0", "gatsby-transformer-json": "^2.9.0", - "gatsby-transformer-remark": "^2.14.0", "gatsby-transformer-sharp": "^2.10.0", + "github-slugger": "^1.3.0", + "prism-react-renderer": "^1.1.1", "prismjs": "^1.23.0", "puppeteer": "^5.5.0", "react": "^17.0.1", diff --git a/website/src/blog/2019-01-24-schema-stitching.md b/website/src/blog/2019-01-24-schema-stitching.md index 723c4bcd023..9a6662fe297 100644 --- a/website/src/blog/2019-01-24-schema-stitching.md +++ b/website/src/blog/2019-01-24-schema-stitching.md @@ -171,7 +171,7 @@ foo(id:123) { Since, we did not want to cram a query like this into one string we allow this to be done with a flat path. -``` +```sdl foo(id:$arguments:arg1).bar.baz(top:1) ``` @@ -307,7 +307,7 @@ HTTP directives let you decorate a schema SDL and thus let you map REST services Moreover, we will introduce a cast feature to our delegation path. This will basically allow you to use fragments without having to write the code. -``` +```sdl foo.bar(a:1).qux(b:1) ``` diff --git a/website/src/components/articles/article-elements.tsx b/website/src/components/articles/article-elements.tsx index 95bbe7fb1e4..b2eede39a20 100644 --- a/website/src/components/articles/article-elements.tsx +++ b/website/src/components/articles/article-elements.tsx @@ -60,23 +60,6 @@ export const ArticleContent = styled.div` } } - > .gatsby-code-button-container { - padding: 0; - } - - > .gatsby-highlight { - padding-right: 0; - padding-left: 0; - - > pre[class*="language-"] { - padding: 30px 20px; - - ::before { - left: 20px; - } - } - } - @media only screen and (min-width: 820px) { > * { padding-right: 50px; @@ -108,10 +91,6 @@ export const ArticleContent = styled.div` } } - > .gatsby-code-button-container { - padding: 0; - } - > .gatsby-highlight { > pre[class*="language-"] { padding-right: 50px; diff --git a/website/src/components/articles/article-sections.tsx b/website/src/components/articles/article-sections.tsx index f65643e23be..4ed2d44d530 100644 --- a/website/src/components/articles/article-sections.tsx +++ b/website/src/components/articles/article-sections.tsx @@ -1,8 +1,9 @@ -import { graphql } from "gatsby"; -import React, { FunctionComponent, useCallback, useEffect } from "react"; -import { useDispatch } from "react-redux"; +import { graphql, Link } from "gatsby"; +import React, { Fragment, FunctionComponent, useCallback, useEffect, useState } from "react"; +import { useDispatch, useSelector } from "react-redux"; import styled from "styled-components"; import { ArticleSectionsFragment } from "../../../graphql-types"; +import { State } from "../../state"; import { closeAside } from "../../state/common"; import { MostProminentSection } from "../doc-page/doc-page-elements"; @@ -14,86 +15,92 @@ export const ArticleSections: FunctionComponent = ({ data, }) => { const dispatch = useDispatch(); + const [activeHeadingId, setActiveHeadingId] = useState(); + const [headings, setHeadings] = useState([]) + const yScrollPosition = useSelector((state) => + state.common.yScrollPosition + ); const handleCloseClick = useCallback(() => { dispatch(closeAside()); }, []); useEffect(() => { - const ids = data - .tableOfContents!.split(/"|\//) - .filter((item) => item.indexOf("#") === 0) - .map((item) => { - const id = item.substring(1); - - return { - id: `toc-${id}`, - position: document.getElementById(id)!.offsetTop - 80, - }; - }) + const result = ((data.tableOfContents.items as TableOfContentItem[]) ?? []) + .flatMap(item => ([item, ...item.items ?? []])) + .map(item => ({ + id: item.url, + position: document.getElementById(item.url.substring(1))! + .offsetTop - 80 + })) .reverse(); - let currentActiveId: string | undefined; - - const handler = () => { - const currentScrollPosition = - document.body.scrollTop || document.documentElement.scrollTop; - let newActiveId: string | undefined; - - for (let i = 0; i < ids.length; i++) { - if (currentScrollPosition >= ids[i].position) { - newActiveId = ids[i].id; - break; - } - } - - if (currentActiveId !== newActiveId) { - if (currentActiveId) { - document.getElementById(currentActiveId)!.parentElement!.className = - ""; - } - - currentActiveId = newActiveId; - - if (currentActiveId) { - document.getElementById(currentActiveId)!.parentElement!.className = - "active"; - } - } - }; - - if (ids.length > 0) { - document.addEventListener("scroll", handler); - } - - return () => { - if (ids.length > 0) { - document.removeEventListener("scroll", handler); - } - }; + + setHeadings(result); }, [data]); - return data.tableOfContents!.length > 0 ? ( + useEffect(() => { + setActiveHeadingId( + headings.find(id => yScrollPosition >= id.position)?.id + ); + }, [headings, yScrollPosition]); + + const tocItems: TableOfContentItem[] = data.tableOfContents.items ?? []; + + return tocItems.length > 0 ? ( In this article - +
+ +
- ) : ( - <> - ); + ) : null; }; +interface Heading { + id: string; + position: number; +} + +interface TableOfContentProps { + items: TableOfContentItem[]; + activeHeadingId: string | undefined; +} + +const TableOfContent: FunctionComponent = ( + { items, activeHeadingId } +) => { + return ( + + {items.map(item => ( + + + {item.title} + + {item.items && + + } + + ))} + + ) +} + +interface TableOfContentItem { + title: string; + url: string; + items?: TableOfContentItem[]; +} + export const ArticleSectionsGraphQLFragment = graphql` - fragment ArticleSections on MarkdownRemark { + fragment ArticleSections on Mdx { tableOfContents(maxDepth: 2) } `; @@ -111,47 +118,38 @@ const Title = styled.h6` } `; -const Content = styled.div` - ul { - display: flex; - flex-direction: column; - margin: 0; - padding: 0 25px 10px; - list-style-type: none; - - li { - flex: 0 0 auto; - margin: 5px 0; - padding: 0; - line-height: initial; - - > p { - margin: 0; - padding: 0; - } - - > ul { - padding-right: 0; - } - - &.active > a, - > p.active > a { - font-weight: bold; - } - - > a, - > p > a { - font-size: 0.833em; - color: #666; - - :hover { - color: #000; - } - } - } - - @media only screen and (min-width: 1320px) { - padding: 0 20px 10px; - } +const TocItemContainer = styled.ul` + display: flex; + flex-direction: column; + margin: 0; + padding: 0 25px 10px; + list-style-type: none; + + @media only screen and (min-width: 1320px) { + padding: 0 20px 10px; + } +`; + +const TocLink = styled(props => )` + font-size: 0.833em; + color: #666; + + :hover { + color: #000; + } +`; + +const TocListItem = styled.li` + flex: 0 0 auto; + margin: 5px 0; + padding: 0; + line-height: initial; + + > ${TocItemContainer} { + padding-right: 0; + } + + &.active > ${TocLink} { + font-weight: bold; } `; diff --git a/website/src/components/blog-article/blog-article-metadata.tsx b/website/src/components/blog-article/blog-article-metadata.tsx index afc3b55f34d..5f2e74b7f99 100644 --- a/website/src/components/blog-article/blog-article-metadata.tsx +++ b/website/src/components/blog-article/blog-article-metadata.tsx @@ -23,7 +23,7 @@ export const BlogArticleMetadata: FunctionComponent = ({ - data: { markdownRemark, site }, + data: { mdx, site }, tags, }) => { - const { frontmatter } = markdownRemark!; + const { frontmatter } = mdx!; const articelUrl = site!.siteMetadata!.siteUrl! + frontmatter!.path!; const title = frontmatter!.title!; @@ -39,7 +39,7 @@ export const BlogArticleSharebar: FunctionComponent = ({ }; export const BlogArticleTagsGraphQLFragment = graphql` - fragment BlogArticleTags on MarkdownRemarkFrontmatter { + fragment BlogArticleTags on MdxFrontmatter { tags } `; diff --git a/website/src/components/blog-article/blog-article.tsx b/website/src/components/blog-article/blog-article.tsx index 80f6da1b79b..7e3d3326cde 100644 --- a/website/src/components/blog-article/blog-article.tsx +++ b/website/src/components/blog-article/blog-article.tsx @@ -1,5 +1,6 @@ import { graphql } from "gatsby"; import Img, { FluidObject } from "gatsby-image"; +import { MDXRenderer } from "gatsby-plugin-mdx"; import React, { FunctionComponent } from "react"; import styled from "styled-components"; import { BlogArticleFragment } from "../../../graphql-types"; @@ -22,8 +23,8 @@ interface BlogArticleProperties { export const BlogArticle: FunctionComponent = ({ data, }) => { - const { markdownRemark } = data; - const { frontmatter, html } = markdownRemark!; + const { mdx } = data; + const { frontmatter, body } = mdx!; const path = frontmatter!.path!; const title = frontmatter!.title!; const existingTags: string[] = frontmatter!.tags! @@ -40,10 +41,14 @@ export const BlogArticle: FunctionComponent = ({ {featuredImage && } {title} - + - + + + {body} + + @@ -53,7 +58,7 @@ export const BlogArticle: FunctionComponent = ({ export const BlogArticleGraphQLFragment = graphql` fragment BlogArticle on Query { - markdownRemark(frontmatter: { path: { eq: $path } }) { + mdx(frontmatter: { path: { eq: $path } }) { excerpt frontmatter { featuredImage { @@ -67,7 +72,7 @@ export const BlogArticleGraphQLFragment = graphql` title ...BlogArticleTags } - html + body ...BlogArticleMetadata } ...ArticleComments diff --git a/website/src/components/doc-page/doc-page.tsx b/website/src/components/doc-page/doc-page.tsx index c92deb02510..a7379687299 100644 --- a/website/src/components/doc-page/doc-page.tsx +++ b/website/src/components/doc-page/doc-page.tsx @@ -31,6 +31,7 @@ import { ArticleWrapperElement, } from "./doc-page-article-wrapper"; import { State } from "../../state"; +import { MDXRenderer } from "gatsby-plugin-mdx"; interface DocPageProperties { data: DocPageFragment; @@ -42,7 +43,7 @@ export const DocPage: FunctionComponent = ({ originPath, }) => { const dispatch = useDispatch(); - const { fields, frontmatter, html } = data.file!.childMarkdownRemark!; + const { fields, frontmatter, body } = data.file!.childMdx!; const slug = fields!.slug!.substring(1); const path = `/docs/${slug}`; const productAndVersionPattern = /^([\w-]*?)\/(v\d+)?/g; @@ -91,14 +92,16 @@ export const DocPage: FunctionComponent = ({ {title} - + + {body} + {false && } - + ); @@ -110,14 +113,14 @@ export const DocPageGraphQLFragment = graphql` sourceInstanceName: { eq: "docs" } relativePath: { eq: $originPath } ) { - childMarkdownRemark { + childMdx { fields { slug } frontmatter { title } - html + body ...ArticleSections } } diff --git a/website/src/components/mdx/auto-linked-heading.tsx b/website/src/components/mdx/auto-linked-heading.tsx new file mode 100644 index 00000000000..7091d206b03 --- /dev/null +++ b/website/src/components/mdx/auto-linked-heading.tsx @@ -0,0 +1,59 @@ +import { Link } from "gatsby"; +import React, { FC } from "react"; +import styled from "styled-components"; +import { IsSmallDesktop, IsPhablet } from "../doc-page/shared-style"; +const slugger = require('github-slugger').slug + +interface AutoLinkedHeadingProps { + size: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' +} + +export const AutoLinkedHeading: FC = ({ children, size }) => { + const slug = slugger(children); + + return ( + + + + + + + {children} + + ) +} + +const RelativeAnchor = styled.span` + position: relative; +`; + + +const AutoLink = styled(Link)` + position: absolute; + top: 0; + left: -20px; + + scroll-margin-top: 26px; + + ${IsSmallDesktop(` + scroll-margin-top: 58px; + `)} + + ${IsPhablet(` + scroll-margin-top: 64px; + `)} +`; + + +const H = styled.h1` + + ${AutoLink} { + visibility: hidden; + } + + :hover { + ${AutoLink} { + visibility: visible; + } + } +`; \ No newline at end of file diff --git a/website/src/components/mdx/code-block.tsx b/website/src/components/mdx/code-block.tsx new file mode 100644 index 00000000000..04f7b9fed94 --- /dev/null +++ b/website/src/components/mdx/code-block.tsx @@ -0,0 +1,184 @@ +import React, { FC } from "react"; +import styled from "styled-components"; +import Highlight, { Language } from "prism-react-renderer"; +import Prism from "prismjs" +import { Copy } from "./copy"; + +interface CodeBlockProps { + children: any; +} + +export const CodeBlock: FC = ({ + children +}) => { + const language = children.props.className.replace(/language-/, '') as Language; + const meta = children.props.metastring; + const shouldHighlightLine = calculateLinesToHighlight(meta); + const code = children.props.children; + + return ( + + + {({ className, style, tokens, getLineProps, getTokenProps }) => ( +
+            
+              
+            
+            {tokens.map((line, i) => (
+              
+                
+                  {line.map((token, key) => (
+                    
+                  ))}
+                
+              
+            ))}
+          
+ )} +
+
+ ); +}; + +const RE = /{([\d,-]+)}/ + +const calculateLinesToHighlight = (meta: string): (index: number) => boolean => { + if (!RE.test(meta)) { + return () => false; + } + + const lineNumbers = RE.exec(meta)![1] + .split(',') + .map((v) => v.split('-').map((v) => parseInt(v, 10))); + + return (index) => { + const lineNumber = index + 1 + const inRange = lineNumbers.some(([start, end]) => + end ? lineNumber >= start && lineNumber <= end : lineNumber === start + ) + return inRange + } +} + +const Pre = styled.pre` + position: relative; + overflow: scroll; + + & .token-line { + line-height: 1.3em; + height: 1.3em; + } +`; + +interface LineProps { + highlight: boolean; +} + +const Line = styled.div` + display: table-row; + + ${({ highlight }) => highlight && ` + display: block; + background-color: #444; + margin: 0 -50px; + padding: 0 50px; + `}; +`; + +const LineContent = styled.span` + display: table-cell; +`; + + +const Container = styled.div` + position: relative; + margin: 20px 0; + overflow: initial; + font-size: 0.833em !important; + padding-right: 0 !important; + padding-left: 0 !important; + + * { + font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace; + line-height: 1.5em !important; + } + + > pre[class*="language-"] { + margin: 0; + padding: 30px 20px; + + ::before { + position: absolute; + top: 0; + left: 50px; + border-radius: 0px 0px 4px 4px; + padding: 6px 8px; + font-size: 0.800em; + font-weight: bold; + letter-spacing: 0.075em; + line-height: 1em; + text-transform: uppercase; + } + } + + > pre[class="code-bash"]::before { + content: "Bash"; + color: #333; + background: #0fd; + } + + > pre[class*="code-csharp"]::before { + content: "C#"; + color: #4f3903; + background: #ffb806; + } + + > pre[class*="code-graphql"]::before { + content: "GraphQL"; + color: #fff; + background: #e535ab; + } + + > pre[class*="code-http"]::before { + content: "HTTP"; + color: #efeaff; + background: #8b76cc; + } + + > pre[class*="code-json"]::before { + content: "JSON"; + color: #fff; + background: #1da0f2; + } + + > pre[class*="code-sdl"]::before { + content: "SDL"; + color: #fff; + background: #e535ab; + } + + > pre[class*="code-sql"]::before { + content: "SQL"; + color: #fff; + background: #80f; + } + + > pre[class*="code-xml"]::before { + content: "XML"; + color: #fff; + background: #999; + } +`; + +const CopyPosition = styled.div` + position: absolute; + top: 0; + right: 0; +`; \ No newline at end of file diff --git a/website/src/components/mdx/copy.tsx b/website/src/components/mdx/copy.tsx new file mode 100644 index 00000000000..0770ffc38a0 --- /dev/null +++ b/website/src/components/mdx/copy.tsx @@ -0,0 +1,95 @@ +import React, { FC, useState } from "react" +import styled from "styled-components" + +const copyToClipboard = (content: string) => { + const el = document.createElement(`textarea`) + el.value = content + el.setAttribute(`readonly`, ``) + el.style.position = `absolute` + el.style.left = `-9999px` + document.body.appendChild(el) + el.select() + document.execCommand(`copy`) + document.body.removeChild(el) +} + +interface CoopyProps { + content: string; +} + +export const Copy: FC = ({ content }) => { + const [showToast, setShowToast] = useState(false); + + return ( + <> + { + copyToClipboard(content); + + setShowToast(true); + setTimeout(() => { + setShowToast(false); + }, 3000) + }}> + + + {showToast && } + + ) +} + +const CopySuccessToast: FC = () => { + return ( + + Copied code example + + ) +} + +const ToastText = styled.div` + font-size: 1.25rem; + font-family: sans-serif; + font-weight: bold; + color: #fff; +`; + +const ToastContainer = styled.div` + position: fixed; + left: 50%; + bottom: 30px; + transform: translateX(-50%); + z-index: 9999; + + background-color: #f40010; + box-shadow: 0px 3px 6px 0px #828282; + padding: 20px; + border-radius: 4px; + opacity: 0; + animation: animation 3s cubic-bezier(0.98, 0.01, 0.53, 0.47); + + @keyframes animation { + 0%, + 50% { + opacity: 1; + } + + 50%, + 100% { + opacity: 0; + } + } +`; + +const CopyIconButton = styled.button` + display: flex; + align-items: center; + justify-content: center; + border-radius: 0 0 0 4px; + padding: 8px 8px; + background-color: #aaa; + + > svg { + width: 18px; + height: 18px; + fill: #2d2d2d; + } +`; diff --git a/website/src/components/mdx/example-tabs.tsx b/website/src/components/mdx/example-tabs.tsx new file mode 100644 index 00000000000..e0c10fd8e75 --- /dev/null +++ b/website/src/components/mdx/example-tabs.tsx @@ -0,0 +1,39 @@ +import React, { FC } from 'react'; +import { Tabs } from './tabs'; + +export interface ExampleTabsComposition { + Annotation: FC; + Code: FC; + Schema: FC; +} + +export const ExampleTabs: FC & ExampleTabsComposition = ({ + children +}) => { + return ( + + + Annotation-based + Code-first + Schema-first + + {children} + + ) +}; + +const Annotation: FC = ( + { children } +) => {children} + +const Code: FC = ( + { children } +) => {children} + +const Schema: FC = ( + { children } +) => {children} + +ExampleTabs.Annotation = Annotation; +ExampleTabs.Code = Code; +ExampleTabs.Schema = Schema; diff --git a/website/src/components/mdx/tabs/index.tsx b/website/src/components/mdx/tabs/index.tsx new file mode 100644 index 00000000000..ce0654dd1c6 --- /dev/null +++ b/website/src/components/mdx/tabs/index.tsx @@ -0,0 +1 @@ +export { Tabs } from './tabs' \ No newline at end of file diff --git a/website/src/components/mdx/tabs/list.tsx b/website/src/components/mdx/tabs/list.tsx new file mode 100644 index 00000000000..c780555bcb4 --- /dev/null +++ b/website/src/components/mdx/tabs/list.tsx @@ -0,0 +1,7 @@ +import styled from "styled-components"; + +export const List = styled.div` + display: flex; + gap: 2rem; + border-bottom: 1px solid #666677; +`; \ No newline at end of file diff --git a/website/src/components/mdx/tabs/panel.tsx b/website/src/components/mdx/tabs/panel.tsx new file mode 100644 index 00000000000..971d560a9ff --- /dev/null +++ b/website/src/components/mdx/tabs/panel.tsx @@ -0,0 +1,17 @@ +import React, { FC } from "react"; +import styled from "styled-components"; +import { useTabs } from "./tabs"; + +export interface PanelProps { + value: string; +} + +export const Panel: FC = props => { + const { activeTab } = useTabs(); + + return activeTab === props.value ? {props.children} : null; +}; + +const Container = styled.div` + margin-top: 0.5rem; +`; \ No newline at end of file diff --git a/website/src/components/mdx/tabs/tab.tsx b/website/src/components/mdx/tabs/tab.tsx new file mode 100644 index 00000000000..daa398293e6 --- /dev/null +++ b/website/src/components/mdx/tabs/tab.tsx @@ -0,0 +1,42 @@ +import React, { FC } from "react"; +import styled from "styled-components"; +import { useTabs } from "./tabs"; + +export interface TabProps { + value: string; +} + +export const Tab: FC = ({ value, children }) => { + const { activeTab, setActiveTab } = useTabs(); + + return ( + setActiveTab(value)} + > + {children} + + ); +}; + +const TabButton = styled.button` + padding: 1rem .25rem; + font-size: 0.95rem; + line-height: 1.2; + color: #666677; + border-bottom: 2px solid transparent; + + :hover { + color: #2d2d35; + border-color: #42424d; + } + + &.active { + color: #f40010; + border-color: #f40010; + } + + @media only screen and (min-width: 820px) { + font-size: 1rem; + } +`; diff --git a/website/src/components/mdx/tabs/tabs.tsx b/website/src/components/mdx/tabs/tabs.tsx new file mode 100644 index 00000000000..bdb6c2afa8d --- /dev/null +++ b/website/src/components/mdx/tabs/tabs.tsx @@ -0,0 +1,63 @@ +import React, { createContext, FC, useContext, useMemo, useState } from 'react'; +import { Tab, TabProps } from './tab'; +import { Panel, PanelProps } from './panel'; +import { List } from './list'; +import styled from 'styled-components'; + +interface TabsContext { + activeTab: string; + setActiveTab: (value: string) => void; +} + +export interface TabsComposition { + Tab: FC; + Panel: FC; + List: FC; +} + +const TabsContext = createContext(undefined); + +export interface TabsProps { + defaultValue: string; +} + +export const Tabs: FC & TabsComposition = ({ + defaultValue, children +}) => { + const [activeTab, setActiveTab] = useState(defaultValue); + + const memoizedContextValue = useMemo( + () => ({ + activeTab, + setActiveTab, + }), + [activeTab, setActiveTab], + ); + + return ( + +
+ + {children} + +
+
+ ); +}; + +const Container = styled.div` + border-bottom: 1px solid #666677; + margin-bottom: 1rem; +`; + +export const useTabs = (): TabsContext => { + const context = useContext(TabsContext); + if (!context) { + throw new Error('This component must be used within a component.'); + } + return context; +}; + +Tabs.Tab = Tab; +Tabs.Panel = Panel; +Tabs.List = List; diff --git a/website/src/components/misc/global-style.tsx b/website/src/components/misc/global-style.tsx index e0f2830856a..611b93d8b81 100644 --- a/website/src/components/misc/global-style.tsx +++ b/website/src/components/misc/global-style.tsx @@ -44,7 +44,6 @@ export const GlobalStyle = createGlobalStyle` * { margin: 0; padding: 0; - /*user-select: none;*/ font-family: sans-serif; font-size: 1em; line-height: 1em; @@ -88,8 +87,9 @@ export const GlobalStyle = createGlobalStyle` margin-bottom: 20px; line-height: 1.667em; - code[class*="language-"] { + code { padding: 2px 5px; + font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace; font-size: 0.833em; } } @@ -219,165 +219,6 @@ export const GlobalStyle = createGlobalStyle` padding-right: 0; } - .gatsby-code-button-container { - position: relative; - top: 54px; - z-index: 1; - display: flex; - margin: -34px 0 0; - - > .gatsby-code-button { - position: relative; - display: flex; - align-items: center; - justify-content: center; - border-radius: 0 0 0 4px; - padding: 8px 8px; - background-color: #aaa; - transition: all 0.4s ease-in; - - &:after { - visibility: hidden; - position: initial; - display: none; - } - - &:hover { - &:after { - visibility: hidden; - display: none; - } - - > svg { - fill: #2d2d2d; - } - } - - &:focus:after { - visibility: hidden; - display: none; - } - - > svg { - width: 18px; - height: 18px; - fill: #2d2d2d; - } - } - } - - .gatsby-code-button-toaster { - top: initial; - right: 0; - bottom: 30px; - left: 0; - display: flex; - justify-content: center; - width: 100%; - height: initial; - - > .gatsby-code-button-toaster-text { - flex: 0 0 60%; - border-radius: 4px; - font-family: sans-serif; - font-size: 1em; - font-weight: bold; - line-height: 1em; - background-color: #aaa; - color: #667; - } - - @media only screen and (min-width: 400px) { - > .gatsby-code-button-toaster-text { - max-width: 300px; - } - } - } - - .gatsby-highlight { - position: relative; - margin: 20px 0; - overflow: initial; - font-size: 0.833em !important; - - * { - font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace; - line-height: 1.5em !important; - } - - > pre[class*="language-"] { - margin: 0; - - ::before { - position: absolute; - top: 0; - left: 50px; - border-radius: 0px 0px 4px 4px; - padding: 6px 8px; - font-size: 0.800em; - font-weight: bold; - letter-spacing: 0.075em; - line-height: 1em; - text-transform: uppercase; - } - } - - > pre[class="language-bash"]::before { - content: "Bash"; - color: #333; - background: #0fd; - } - - > pre[class="language-csharp"]::before { - content: "C#"; - color: #4f3903; - background: #ffb806; - } - - > pre[class="language-graphql"]::before { - content: "GraphQL"; - color: #fff; - background: #e535ab; - } - - > pre[class="language-http"]::before { - content: "HTTP"; - color: #efeaff; - background: #8b76cc; - } - - > pre[class="language-json"]::before { - content: "JSON"; - color: #fff; - background: #1da0f2; - } - - > pre[class="language-sdl"]::before { - content: "SDL"; - color: #fff; - background: #e535ab; - } - - > pre[class="language-sql"]::before { - content: "SQL"; - color: #fff; - background: #80f; - } - - > pre[class="language-xml"]::before { - content: "XML"; - color: #fff; - background: #999; - } - } - - .gatsby-highlight-code-line { - background-color: #444; - display: block; - margin: 0 -50px; - padding: 0 50px; - } - .mermaid { display: flex; justify-content: center; @@ -386,71 +227,10 @@ export const GlobalStyle = createGlobalStyle` } /* Inline code style */ - :not(pre) > code[class*="language-"] { + :not(pre) > code { border: 1px solid #aaa; + border-radius: .3em; background-color: initial; color: #666; - - .token.comment, - .token.block-comment, - .token.prolog, - .token.doctype, - .token.cdata { - color: #999; - } - - .token.punctuation { - color: #666; - } - - .token.tag, - .token.attr-name, - .token.namespace, - .token.deleted { - color: #e2777a; - } - - .token.function-name { - color: #6196cc; - } - - .token.boolean, - .token.number, - .token.function { - color: #f08d49; - } - - .token.property, - .token.class-name, - .token.constant, - .token.symbol { - color: #f8c555; - } - - .token.selector, - .token.important, - .token.atrule, - .token.keyword, - .token.builtin { - color: #cc99cd; - } - - .token.string, - .token.char, - .token.attr-value, - .token.regex, - .token.variable { - color: #7ec699; - } - - .token.operator, - .token.entity, - .token.url { - color: #67cdcc; - } - - .token.inserted { - color: green; - } } `; diff --git a/website/src/components/structure/layout.tsx b/website/src/components/structure/layout.tsx index ca29f90af79..8f90b1b2a53 100644 --- a/website/src/components/structure/layout.tsx +++ b/website/src/components/structure/layout.tsx @@ -3,6 +3,9 @@ import { GlobalStyle } from "../misc/global-style"; import { Header } from "./header"; import { CookieConsent } from "../misc/cookie-consent"; import { MainContentContainer } from "./main-content-container/main-content-container"; +import { MDXProvider } from "@mdx-js/react"; +import { CodeBlock } from "../mdx/code-block"; +import { AutoLinkedHeading } from "../mdx/auto-linked-heading"; export const Layout: FunctionComponent = ({ children }) => { useEffect(() => { @@ -20,11 +23,23 @@ export const Layout: FunctionComponent = ({ children }) => { } }); + const components = { + pre: CodeBlock, + h1: (props: any) => , + h2: (props: any) => , + h3: (props: any) => , + h4: (props: any) => , + h5: (props: any) => , + h6: (props: any) => , + } + return ( <>
- {children} + + {children} + ); diff --git a/website/src/components/widgets/blog-articles.tsx b/website/src/components/widgets/blog-articles.tsx index 58742b05394..504693c77b0 100644 --- a/website/src/components/widgets/blog-articles.tsx +++ b/website/src/components/widgets/blog-articles.tsx @@ -26,8 +26,8 @@ export const BlogArticles: FunctionComponent = ({ {edges.map(({ node }) => { const existingTags: string[] = node?.frontmatter?.tags ? (node.frontmatter.tags.filter( - (tag) => tag && tag.length > 0 - ) as string[]) + (tag) => tag && tag.length > 0 + ) as string[]) : []; const featuredImage = node?.frontmatter!.featuredImage ?.childImageSharp?.fluid as FluidObject; @@ -56,7 +56,7 @@ export const BlogArticles: FunctionComponent = ({ }; export const BlogArticlesGraphQLFragment = graphql` - fragment BlogArticles on MarkdownRemarkConnection { + fragment BlogArticles on MdxConnection { edges { node { id diff --git a/website/src/docs/greendonut/index.md b/website/src/docs/greendonut/index.md index da4aaf895b0..430da743bbe 100644 --- a/website/src/docs/greendonut/index.md +++ b/website/src/docs/greendonut/index.md @@ -11,5 +11,3 @@ In case you might need help, check out our [Slack channel](https://join.slack.co Sorry for any inconvenience, and thank you for being patient! The ChilliCream Team - -


diff --git a/website/src/docs/greendonut/v10/api.md b/website/src/docs/greendonut/v10/api.md index 41aec213d60..acbceb892e9 100644 --- a/website/src/docs/greendonut/v10/api.md +++ b/website/src/docs/greendonut/v10/api.md @@ -1,5 +1,5 @@ --- -title: IDataLoader +title: IDataLoader --- **Description:** Represents a minimal set of _DataLoader_ functionality. @@ -78,7 +78,7 @@ values and enqueues requests which were not cached for batching if enabled. --- -## LoadAsync(IReadOnlyCollection keys) +## LoadAsync(IReadOnlyCollection keys) **Description:** Loads multiple values by keys. This call may return cached values and enqueues requests which were not cached for batching if enabled. @@ -103,7 +103,7 @@ values and enqueues requests which were not cached for batching if enabled. --- -## Set(TKey key, Task value) +## Set(TKey key, Task value) **Description:** Adds a new entry to the cache if not already exists. diff --git a/website/src/docs/hotchocolate/api-reference/coding-approaches.md b/website/src/docs/hotchocolate/api-reference/coding-approaches.md index 6d1af590367..0f272921eb7 100644 --- a/website/src/docs/hotchocolate/api-reference/coding-approaches.md +++ b/website/src/docs/hotchocolate/api-reference/coding-approaches.md @@ -11,5 +11,3 @@ In case you might need help, check out our [Slack channel](https://join.slack.co Sorry for any inconvenience, and thank you for being patient! The ChilliCream Team - -


diff --git a/website/src/docs/hotchocolate/api-reference/extending-filtering.md b/website/src/docs/hotchocolate/api-reference/extending-filtering.md index 7bb50b148ba..54b2e47aea4 100644 --- a/website/src/docs/hotchocolate/api-reference/extending-filtering.md +++ b/website/src/docs/hotchocolate/api-reference/extending-filtering.md @@ -19,7 +19,7 @@ Usually, it makes sense to divide the structure into two parts. The _field_ and The query below returns all movies where the franchise is equal to "Star Wars". The _field_ `franchise` where the filter is applied to and the _operation_ equals (`eq`) that should operate on this field. -``` +```graphql { movies( where: { @@ -35,7 +35,7 @@ is applied to and the _operation_ equals (`eq`) that should operate on this fiel Fields can also form paths. In the query below there are two _fields_ `genre` and `totalMovieCount` and one operation equals `eq` -``` +```graphql { movies( where: { diff --git a/website/src/docs/hotchocolate/api-reference/filtering.md b/website/src/docs/hotchocolate/api-reference/filtering.md index fecc4570d5b..8f84f3aaa8d 100644 --- a/website/src/docs/hotchocolate/api-reference/filtering.md +++ b/website/src/docs/hotchocolate/api-reference/filtering.md @@ -46,7 +46,7 @@ Getting started with filters is very easy, especially if you do not want to expl Hot Chocolate will infer the filters directly from your .Net Model and then use a Middleware to apply filters to `IQueryable` or `IEnumerable` on execution. -> ⚠️ **Note:** If you use more than middleware, keep in mind that **ORDER MATTERS** _Why order matters_ <> +> ⚠️ **Note:** If you use more than middleware, keep in mind that **ORDER MATTERS**. > ⚠️ **Note:** Be sure to install the `HotChocolate.Types.Filters` NuGet package. @@ -711,7 +711,7 @@ public class UserFilterType : FilterInputType # Naming Conventions -\_Hot Chocolate already provides two naming schemes for filters. If you would like to define your own naming scheme or extend existing ones have a look at the documentation of <> +\_Hot Chocolate already provides two naming schemes for filters. If you would like to define your own naming scheme or extend existing ones have a look at the documentation of TODO:Link-Filtering ## Snake Case @@ -942,7 +942,7 @@ input UserFilter { To add or customize a filter you must use `Filter(x => x.Foo)` for scalars `List(x => x.Bar)` for lists and `Object(x => x.Baz)` for nested objects. These methods will return fluent interfaces to configure the filter for the selected field. -A field has different filter operations that you can configure. You will find more about filter types and filter operations here <> +A field has different filter operations that you can configure. You will find more about filter types and filter operations here TODO:Link When fields are bound implicitly, meaning filters are added for all properties, you may want to hide a few fields. You can do this with `Ignore(x => Bar)`. Operations on fields can again be bound implicitly or explicitly. By default, Hot Chocolate generates operations for all fields of the type. If you do want to specify the operations by yourself you can change this behavior with `BindFilters`, `BindFiltersExplicitly` or `BindFiltersImplicitly`. @@ -1030,14 +1030,12 @@ SchemaBuilder.New().AddConvention(new FilterConvention(x => /* Config */)); In this section, we will take a look at the basic features of the filter convention. The documentation will reference often to `descriptor`. Imagine this `descriptor` as the parameter of the Configure method of the filter convention in the following context: -```csharp +```csharp {5} public class CustomConvention : FilterConvention { protected override void Configure( - /**highlight-start**/ IFilterConventionDescriptor descriptor - /**highlight-end**/ ) { } } @@ -1202,7 +1200,7 @@ You can drill up with `And()`. ### Configuration of the type system -In this section, we will focus on the generation of the schema. If you are interested in changing how filters translate to the database, you have to look here <> +In this section, we will focus on the generation of the schema. If you are interested in changing how filters translate to the database, you have to look here TODO:Link #### Configure Filter Operations @@ -1265,7 +1263,7 @@ public delegate NameString CreateFieldName( **Configuration** -```csharp{1, 6} +```csharp {1, 6} // (A) // specifies that all not equals operations should be extended with _nada descriptor @@ -1282,7 +1280,7 @@ public delegate NameString CreateFieldName( **result** -```graphql{8,18} +```graphql {8,18} input UserFilter { loggingCount: Int loggingCount_gt: Int @@ -1333,7 +1331,7 @@ You can either set the description for all operations of this kind or only for a **result** -```graphql{2-4,11-14, 20-22,27-29} +```graphql {2-4,11-14, 20-22,27-29} input UserFilter { """ has to be equal @@ -1396,7 +1394,7 @@ There are multiple ways to ignore an operation: **result** -```graphql{2,4, 8,14,18} +```graphql {2,4, 8,14,18} input UserFilter { ↵ loggingCount_gt: Int @@ -1969,7 +1967,7 @@ This delegate might seem intimidating first, but it is not bad as it looks. If t Operations handlers can be configured like the following: -```csharp{10,13} +```csharp {10,13} public class CustomConvention : FilterConvention { protected override void Configure( diff --git a/website/src/docs/hotchocolate/api-reference/index.md b/website/src/docs/hotchocolate/api-reference/index.md index a8d7018834a..b666f99adb9 100644 --- a/website/src/docs/hotchocolate/api-reference/index.md +++ b/website/src/docs/hotchocolate/api-reference/index.md @@ -11,5 +11,3 @@ In case you might need help, check out our [Slack channel](https://join.slack.co Sorry for any inconvenience, and thank you for being patient! The ChilliCream Team - -


diff --git a/website/src/docs/hotchocolate/api-reference/object-type.md b/website/src/docs/hotchocolate/api-reference/object-type.md index 1d79c57fa7b..693d51b6c2b 100644 --- a/website/src/docs/hotchocolate/api-reference/object-type.md +++ b/website/src/docs/hotchocolate/api-reference/object-type.md @@ -2,6 +2,8 @@ title: Object Type --- +import { ExampleTabs } from "../../../components/mdx/example-tabs" + The object type is the most important output type in GraphQL and represents the data we can fetch from our GraphQL server. The GraphQL SDL representation of an object looks like the following: ```sdl @@ -17,7 +19,8 @@ represent raw data that is passed into a field. > **Note:** Every single code example will be shown in three different approaches, annotation-based (previously known as pure code-first), code-first, and schema-first. However, they will always result in the same outcome on a GraphQL schema perspective and internally in Hot Chocolate. All three approaches have their pros and cons and can be combined when needed with each other. If you would like to learn more about the three approaches in Hot Chocolate, click on [Coding Approaches](/docs/hotchocolate/api-reference/coding-approaches). -**Annotation-based approach** + + ```csharp // Query.cs @@ -49,7 +52,8 @@ public class Startup } ``` -**Code-first approach** + + ```csharp // Query.cs @@ -108,7 +112,8 @@ public class Startup } ``` -**Schema-first approach** + + ```csharp // Query.cs @@ -142,6 +147,9 @@ public class Startup } ``` + + + # Extension The GraphQL SDL supports extending object types, this means that we can add fields to an existing object type without changing the code of our initial type definition. diff --git a/website/src/docs/hotchocolate/api-reference/visitors.md b/website/src/docs/hotchocolate/api-reference/visitors.md index 8eec9ee5bdd..84501df8032 100644 --- a/website/src/docs/hotchocolate/api-reference/visitors.md +++ b/website/src/docs/hotchocolate/api-reference/visitors.md @@ -82,7 +82,7 @@ If `Continue` is returned from the `Enter` or `Leave` method visitation on the c In the following example `Continue` is returned from the onEnter method. The visitor calls `VisitChildren` and continues to by _entering_ the selection set. -```graphql{4} +```graphql {4} query { foo { bar @@ -100,7 +100,7 @@ If `Skip` is returned from the `Enter` or `Leave` method, further visitation on In the following example `Skip` is returned from the onEnter method. The visitor skips the field _baz_. It continues visitation by _entering_ the field _qux_. -```graphql{4} +```graphql {4} query { foo { bar @@ -118,7 +118,7 @@ If `SkipAndLeave` is returned from the Enter method, further visitation on this In the following example `SkipAndLeave` is returned from the onEnter method. The visitor skips the field _baz_. Before it continues visitation with the field _qux_ it calls the _leaves_ the field _baz_ by calling `Leave` -```graphql{4} +```graphql {4} query { foo { bar @@ -136,7 +136,7 @@ If `Break` is returned from the `Enter` or `Leave` method, further visitation on In the following example `Break` is returned from the onEnter method. The visitor immediately starts walking back up. The visitor calls the `Leave` on `foo` instead of visiting the selections set of _baz_ it skips _baz_ and _qux_. -```graphql{4} +```graphql {4} query { foo { bar diff --git a/website/src/docs/hotchocolate/defining-a-schema/index.md b/website/src/docs/hotchocolate/defining-a-schema/index.md index 9b55ee17508..75eb455cda5 100644 --- a/website/src/docs/hotchocolate/defining-a-schema/index.md +++ b/website/src/docs/hotchocolate/defining-a-schema/index.md @@ -2,13 +2,15 @@ title: "Schema basics" --- +import { ExampleTabs } from "../../../components/mdx/example-tabs" + The schema in GraphQL represents the type system and exposes your business model in a strong and rich way. The schema fully describes the shape of your data and how you can interact with it. # Object Type The most important type in a GraphQL schema is the object type which lets you consume data. Every object type has to have at least one field which holds the data of an object. Fields can return simple scalars like String, Int, or again object types. -```SDL +```sdl type Book { title: String author: String @@ -19,7 +21,7 @@ type Book { In GraphQL, we have three root types from which only the Query type has to be defined. Root types provide the entry points that let you fetch data, mutate data, or subscribe to events. Root types themself are object types. -```SDL +```sdl schema { query: Query } @@ -38,7 +40,8 @@ In Hot Chocolate, there are three ways to define an object type. > **Note:** Every single code example will be shown in three different approaches, annotation-based (previously known as pure code-first), code-first, and schema-first. However, they will always result in the same outcome on a GraphQL schema perspective and internally in Hot Chocolate. All three approaches have their pros and cons and can be combined when needed with each other. If you would like to learn more about the three approaches in Hot Chocolate, click on [Coding Approaches](/docs/hotchocolate/api-reference/coding-approaches). -**Annotation-based approach** + + ```csharp // Query.cs @@ -70,7 +73,8 @@ public class Startup } ``` -**Code-first approach** + + ```csharp // Query.cs @@ -129,7 +133,8 @@ public class Startup } ``` -**Schema-first approach** + + ```csharp // Query.cs @@ -163,6 +168,9 @@ public class Startup } ``` + + + ## Fields Fields of object types can be compared to methods in C# and allow us to pass in arguments. @@ -186,7 +194,8 @@ type Book { } ``` -**Annotation-based approach** + + ```csharp // Query.cs @@ -221,7 +230,8 @@ public class Startup } ``` -**Code-first approach** + + ```csharp // Query.cs @@ -282,8 +292,8 @@ public class Startup // Omitted code for brevity } ``` - -**Schema-first approach** + + ```csharp // Query.cs @@ -320,6 +330,9 @@ public class Startup } ``` + + + > Further reading: > > - [Object Types](/docs/hotchocolate/api-reference/object-type). @@ -338,7 +351,8 @@ input BookInput { If we wanted for instance to create a new book with a mutation we could do that like the following. -**Annotation-based approach** + + ```csharp // Query.cs @@ -379,7 +393,8 @@ public class Startup } ``` -**Code-first approach** + + ```csharp // Query.cs @@ -441,7 +456,8 @@ public class Startup } ``` -**Schema-first approach** + + ```csharp // Query.cs @@ -478,6 +494,9 @@ public class Startup } ``` + + + # Lists # Nullability diff --git a/website/src/docs/hotchocolate/defining-a-schema/unions-and-interfaces.md b/website/src/docs/hotchocolate/defining-a-schema/unions-and-interfaces.md index 5cbea1c25dc..6e67b2f76e2 100644 --- a/website/src/docs/hotchocolate/defining-a-schema/unions-and-interfaces.md +++ b/website/src/docs/hotchocolate/defining-a-schema/unions-and-interfaces.md @@ -2,6 +2,8 @@ title: "Unions and Interfaces" --- +import { ExampleTabs } from "../../../components/mdx/example-tabs" + Similar to most type systems, GraphQL knows abstract types. There are two kinds of abstract types: [Interfaces](https://graphql.org/learn/schema/#interfaces) and [Unions](https://graphql.org/learn/schema/#unions) @@ -41,7 +43,7 @@ type VideoMessage implements MediaMessage { A type can also implement multiple interfaces. -``` +```sdl type VideoMessage implements Message & HasMediaType { sendBy: User! createdAt: DateTime! @@ -105,7 +107,9 @@ HotChocolate tries to infer interfaces from the .Net types. When a resolver returns an interface, you just have to register the implementation on the schema builder. HotChocolate will register the types as implementations of the interface. -### Annotation Based + + + In the annotation based approach, you most likely do not need to worry about interfaces at all. ```csharp @@ -134,6 +138,7 @@ public class TextMessage : IMessage ``` _Configure Services_ + ```csharp public void ConfigureServices(IServiceCollection services) { @@ -161,8 +166,9 @@ public abstract class Message } ``` + + -**Code First** HotChocolate provides a fluent configuration API for interfaces that is very similar to the `ObjectType` interface. ```csharp @@ -190,6 +196,7 @@ public class MediaMessageType : InterfaceType ``` In a `ObjectType` you can declare what interface this object type implements. + ```csharp public class VideoMessageType : ObjectType { @@ -200,8 +207,11 @@ public class VideoMessageType : ObjectType } ``` -**Schema First** + + + In schema first interfaces can be declared directly in SDL: + ```csharp public void ConfigureServices(IServiceCollection services) { @@ -251,7 +261,11 @@ public void ConfigureServices(IServiceCollection services) } ``` + + + # Unions + Unions are very similar to interfaces. The difference is that members of an unions do not have fields in common. Unions are useful if you have completely disjunct structured types. @@ -286,6 +300,7 @@ You have to use [Inline Fragments 📄](https://spec.graphql.org/June2018/#sec-I } } ``` + ```json { "accessControl": [ @@ -305,9 +320,12 @@ You have to use [Inline Fragments 📄](https://spec.graphql.org/June2018/#sec-I } ``` -## Interface Definition +## Union Definition + + + + -### Annotation Based In the annotation based approach, HotChocolate tries to infer union types from the .Net types. You can manage the membership of union types with a marker interface. @@ -337,6 +355,7 @@ public class Query ``` _Configure Services_ + ```csharp public void ConfigureServices(IServiceCollection services) { @@ -352,7 +371,9 @@ _Configure Services_ } ``` -**Code First** + + + HotChocolate provides a fluent configuration API for union types that is very similar to the `ObjectType` interface. ```csharp @@ -371,8 +392,11 @@ public class GroupMemberType : UnionType } ``` -**Schema First** + + + In schema first unions can be declared directly in SDL: + ```csharp public void ConfigureServices(IServiceCollection services) { @@ -400,3 +424,7 @@ public void ConfigureServices(IServiceCollection services) "accessControl", (context, token) => context.Service().GetItems()); } +``` + + + \ No newline at end of file diff --git a/website/src/docs/hotchocolate/defining-a-schema/versioning.md b/website/src/docs/hotchocolate/defining-a-schema/versioning.md index c8d9a7a7ce4..3bb928dbe78 100644 --- a/website/src/docs/hotchocolate/defining-a-schema/versioning.md +++ b/website/src/docs/hotchocolate/defining-a-schema/versioning.md @@ -2,6 +2,8 @@ title: "Versioning" --- +import { ExampleTabs } from "../../../components/mdx/example-tabs" + GraphQL versioning works differently as the versioning you know from REST. While nothing stops you from versioning a GraphQL API like a REST API, it is not best practice to do so and most often is not needed. @@ -12,7 +14,9 @@ If you remove fields or change the nullability of a field, the contract with exi In GraphQL it is possible to deprecate fields. You can mark a field as deprecated to signal API consumers that a field is obsolete and will be removed in the future. -**Annotation Based** + + + ```csharp public class Query { @@ -23,7 +27,9 @@ public class Query } ``` -**Code First** + + + ```csharp public class Query : QueryType { @@ -34,10 +40,15 @@ public class Query : QueryType } ``` -**Schema First** + + + ```sdl type Query { users: [Users] @deprecated("Use `persons` field instead") persons: [Users] } ``` + + + \ No newline at end of file diff --git a/website/src/docs/hotchocolate/fetching-data/dataloader.md b/website/src/docs/hotchocolate/fetching-data/dataloader.md index 0d59f10821c..b978f6217cf 100644 --- a/website/src/docs/hotchocolate/fetching-data/dataloader.md +++ b/website/src/docs/hotchocolate/fetching-data/dataloader.md @@ -11,5 +11,3 @@ In case you might need help, check out our [Slack channel](https://join.slack.co Sorry for any inconvenience, and thank you for being patient! The ChilliCream Team - -


diff --git a/website/src/docs/hotchocolate/fetching-data/fetching-from-databases.md b/website/src/docs/hotchocolate/fetching-data/fetching-from-databases.md index 2189319901d..4d73dd4a58a 100644 --- a/website/src/docs/hotchocolate/fetching-data/fetching-from-databases.md +++ b/website/src/docs/hotchocolate/fetching-data/fetching-from-databases.md @@ -11,5 +11,3 @@ In case you might need help, check out our [Slack channel](https://join.slack.co Sorry for any inconvenience, and thank you for being patient! The ChilliCream Team - -


diff --git a/website/src/docs/hotchocolate/fetching-data/fetching-from-rest.md b/website/src/docs/hotchocolate/fetching-data/fetching-from-rest.md index d3846730ca6..5639a208741 100644 --- a/website/src/docs/hotchocolate/fetching-data/fetching-from-rest.md +++ b/website/src/docs/hotchocolate/fetching-data/fetching-from-rest.md @@ -11,5 +11,3 @@ In case you might need help, check out our [Slack channel](https://join.slack.co Sorry for any inconvenience, and thank you for being patient! The ChilliCream Team - -


diff --git a/website/src/docs/hotchocolate/fetching-data/filtering.md b/website/src/docs/hotchocolate/fetching-data/filtering.md index f143bf582e6..1eb59aa2176 100644 --- a/website/src/docs/hotchocolate/fetching-data/filtering.md +++ b/website/src/docs/hotchocolate/fetching-data/filtering.md @@ -120,7 +120,7 @@ public class PersonFilterType If you want to limit the operations on a field, you need to declare you own operation type. Given you want to only allow `eq` and `neq` on a string field, this could look like this -```csharp{7} +```csharp {7} public class PersonFilterType : FilterInputType { diff --git a/website/src/docs/hotchocolate/fetching-data/index.md b/website/src/docs/hotchocolate/fetching-data/index.md index ffbd66e03dc..258f0297823 100644 --- a/website/src/docs/hotchocolate/fetching-data/index.md +++ b/website/src/docs/hotchocolate/fetching-data/index.md @@ -2,6 +2,8 @@ title: "Resolver" --- +import { ExampleTabs } from "../../../components/mdx/example-tabs" + Here we will learn what resolvers are, how they are defined, and what else we could do with them in Hot Chocolate. # Introduction @@ -88,7 +90,8 @@ A resolver is a function that takes zero or many arguments and returns one value ## Basic resolver example -**Annotation-based approach** + + ```csharp // Query.cs @@ -112,7 +115,8 @@ public class Startup } ``` -**Code-first approach** + + ```csharp // Query.cs @@ -149,7 +153,8 @@ public class Startup } ``` -**Schema-first approach** + + ```csharp // Query.cs @@ -178,6 +183,9 @@ public class Startup } ``` + + + When comparing all three approaches side-by-side, we can see very quickly that they all look nearly the same. They all have the `Query` type in common, which is identical in all three approaches. Regardless, the `Query` type contains a method named `Say`, which is our resolver, in fact, the most significant bit here. The `Say` method will be translated into the `say` field on the schema side as soon as Hot Chocolate is initialized. As a small side note here, all three approaches will result in the same `SDL`. ```sdl diff --git a/website/src/docs/hotchocolate/fetching-data/pagination.md b/website/src/docs/hotchocolate/fetching-data/pagination.md index 8f97fab82ef..de384ef9c04 100644 --- a/website/src/docs/hotchocolate/fetching-data/pagination.md +++ b/website/src/docs/hotchocolate/fetching-data/pagination.md @@ -11,5 +11,3 @@ In case you might need help, check out our [Slack channel](https://join.slack.co Sorry for any inconvenience, and thank you for being patient! The ChilliCream Team - -


diff --git a/website/src/docs/hotchocolate/fetching-data/sorting.md b/website/src/docs/hotchocolate/fetching-data/sorting.md index fa4092f3ddc..d8a01914f8b 100644 --- a/website/src/docs/hotchocolate/fetching-data/sorting.md +++ b/website/src/docs/hotchocolate/fetching-data/sorting.md @@ -130,7 +130,7 @@ public class UserSortType If you want to change the sorting operations on a field, you need to declare you own operation enum type. -```csharp{7} +```csharp {7} public class UserSortType : SortInputType { diff --git a/website/src/docs/hotchocolate/integrations/index.md b/website/src/docs/hotchocolate/integrations/index.md index a8d7018834a..5fd84573331 100644 --- a/website/src/docs/hotchocolate/integrations/index.md +++ b/website/src/docs/hotchocolate/integrations/index.md @@ -12,4 +12,3 @@ Sorry for any inconvenience, and thank you for being patient! The ChilliCream Team -


diff --git a/website/src/docs/hotchocolate/integrations/spatial-data.md b/website/src/docs/hotchocolate/integrations/spatial-data.md index bf7d079fe9f..b8285948fce 100644 --- a/website/src/docs/hotchocolate/integrations/spatial-data.md +++ b/website/src/docs/hotchocolate/integrations/spatial-data.md @@ -247,7 +247,7 @@ public IQueryable GetPubs([ScopedService] SomeDbContext someDbContext) } ``` -```sdl{10} +```sdl {10} type Query { pubs(where: PubFilterInput): [Pub!]! } diff --git a/website/src/docs/hotchocolate/performance/persisted-queries.md b/website/src/docs/hotchocolate/performance/persisted-queries.md index 89b34ecb2e1..d30c8cc3958 100644 --- a/website/src/docs/hotchocolate/performance/persisted-queries.md +++ b/website/src/docs/hotchocolate/performance/persisted-queries.md @@ -11,5 +11,3 @@ In case you might need help, check out our [Slack channel](https://join.slack.co Sorry for any inconvenience, and thank you for being patient! The ChilliCream Team - -


diff --git a/website/src/docs/hotchocolate/v10/schema/code-first-object-type.md b/website/src/docs/hotchocolate/v10/schema/code-first-object-type.md index 8798e767bc4..404bf00c3d6 100644 --- a/website/src/docs/hotchocolate/v10/schema/code-first-object-type.md +++ b/website/src/docs/hotchocolate/v10/schema/code-first-object-type.md @@ -4,7 +4,7 @@ title: Object Type The object type is the most prominent type in GraphQL. There are currently two ways to describe an object type with the code-first approach. -# ObjectType +# ObjectType The first approach is by using the generic object type class which lets you specify an entity type that shall represent your schema type in .NET. The object type descriptor will then try to automatically infer the GraphQL schema type from your .NET type. diff --git a/website/src/pages/index.tsx b/website/src/pages/index.tsx index 46e2c7bd2f4..55236543f1a 100644 --- a/website/src/pages/index.tsx +++ b/website/src/pages/index.tsx @@ -60,7 +60,7 @@ const IndexPage: FunctionComponent = () => { } } } - allMarkdownRemark( + allMdx( limit: 3 filter: { frontmatter: { path: { glob: "/blog/**/*" } } } sort: { fields: [frontmatter___date], order: DESC } @@ -91,7 +91,7 @@ const IndexPage: FunctionComponent = () => { } `); const { - allMarkdownRemark: { edges }, + allMdx: { edges }, } = data; return ( diff --git a/website/src/state/common/index.ts b/website/src/state/common/index.ts index a4faea251c2..28a878d956f 100644 --- a/website/src/state/common/index.ts +++ b/website/src/state/common/index.ts @@ -1,3 +1,3 @@ export * from "./common.actions"; export { commonReducer } from "./common.reducer"; -export { CommonState } from "./common.state"; +export type { CommonState } from "./common.state"; diff --git a/website/src/state/index.ts b/website/src/state/index.ts index d212e62a4dc..cbe1e298a95 100644 --- a/website/src/state/index.ts +++ b/website/src/state/index.ts @@ -1 +1,2 @@ -export { default, State } from "./state"; +export { default } from "./state"; +export type { State } from "./state"; diff --git a/website/src/templates/blog-article-template.tsx b/website/src/templates/blog-article-template.tsx index 6022a6d4e65..edca5e21223 100644 --- a/website/src/templates/blog-article-template.tsx +++ b/website/src/templates/blog-article-template.tsx @@ -15,13 +15,13 @@ const BlogArticleTemplate: FunctionComponent = ({ return ( diff --git a/website/src/templates/blog-articles-template.tsx b/website/src/templates/blog-articles-template.tsx index 0f26284f8b2..60bca35b3e6 100644 --- a/website/src/templates/blog-articles-template.tsx +++ b/website/src/templates/blog-articles-template.tsx @@ -12,14 +12,14 @@ interface BlogArticlesTemplateProperties { const BlogArticlesTemplate: FunctionComponent = ({ pageContext: { currentPage, numPages }, - data: { allMarkdownRemark }, + data: { allMdx }, }) => { return ( @@ -30,7 +30,7 @@ export default BlogArticlesTemplate; export const pageQuery = graphql` query getBlogArticles($skip: Int!, $limit: Int!) { - allMarkdownRemark( + allMdx( limit: $limit skip: $skip filter: { frontmatter: { path: { glob: "/blog/**/*" } } } diff --git a/website/src/templates/blog-tag-template.tsx b/website/src/templates/blog-tag-template.tsx index e501cf20239..5f6cb55c613 100644 --- a/website/src/templates/blog-tag-template.tsx +++ b/website/src/templates/blog-tag-template.tsx @@ -14,12 +14,12 @@ interface BlogTagTemplateProperties { const BlogTagTemplate: FunctionComponent = ({ pageContext: { tag }, - data: { allMarkdownRemark }, + data: { allMdx }, }) => { return ( - + ); }; @@ -28,7 +28,7 @@ export default BlogTagTemplate; export const pageQuery = graphql` query getBlogArticlesByTag($tag: String) { - allMarkdownRemark( + allMdx( limit: 100 filter: { frontmatter: { tags: { in: [$tag] } } } sort: { fields: [frontmatter___date], order: DESC } diff --git a/website/src/templates/doc-page-template.tsx b/website/src/templates/doc-page-template.tsx index e43b81ebebd..39b187f04dd 100644 --- a/website/src/templates/doc-page-template.tsx +++ b/website/src/templates/doc-page-template.tsx @@ -16,7 +16,7 @@ const DocPageTemplate: FunctionComponent = ({ }) => { return ( - + ); diff --git a/website/tsconfig.json b/website/tsconfig.json index 197c33cad4d..69a22d37030 100644 --- a/website/tsconfig.json +++ b/website/tsconfig.json @@ -2,7 +2,10 @@ "compilerOptions": { "target": "ESNext", "module": "ESNext", - "lib": ["dom"], + "lib": [ + "dom", + "es2019.array" + ], "jsx": "preserve", "moduleResolution": "node", "allowJs": true, @@ -18,4 +21,4 @@ } ] } -} +} \ No newline at end of file diff --git a/website/yarn.lock b/website/yarn.lock index edd3442848d..c544b87f5db 100644 --- a/website/yarn.lock +++ b/website/yarn.lock @@ -152,19 +152,19 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.0.0": - version "7.12.3" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.3.tgz#1b436884e1e3bff6fb1328dc02b208759de92ad8" - integrity sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g== +"@babel/core@7.12.9", "@babel/core@^7.12.3": + version "7.12.9" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8" + integrity sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ== dependencies: "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.12.1" + "@babel/generator" "^7.12.5" "@babel/helper-module-transforms" "^7.12.1" - "@babel/helpers" "^7.12.1" - "@babel/parser" "^7.12.3" - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.12.1" - "@babel/types" "^7.12.1" + "@babel/helpers" "^7.12.5" + "@babel/parser" "^7.12.7" + "@babel/template" "^7.12.7" + "@babel/traverse" "^7.12.9" + "@babel/types" "^7.12.7" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.1" @@ -174,19 +174,19 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.12.3": - version "7.12.9" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8" - integrity sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ== +"@babel/core@^7.0.0": + version "7.12.3" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.3.tgz#1b436884e1e3bff6fb1328dc02b208759de92ad8" + integrity sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g== dependencies: "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.12.5" + "@babel/generator" "^7.12.1" "@babel/helper-module-transforms" "^7.12.1" - "@babel/helpers" "^7.12.5" - "@babel/parser" "^7.12.7" - "@babel/template" "^7.12.7" - "@babel/traverse" "^7.12.9" - "@babel/types" "^7.12.7" + "@babel/helpers" "^7.12.1" + "@babel/parser" "^7.12.3" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.1" + "@babel/types" "^7.12.1" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.1" @@ -521,7 +521,7 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.0" "@babel/plugin-transform-parameters" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.0.0", "@babel/plugin-proposal-object-rest-spread@^7.12.1": +"@babel/plugin-proposal-object-rest-spread@7.12.1", "@babel/plugin-proposal-object-rest-spread@^7.0.0", "@babel/plugin-proposal-object-rest-spread@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz#def9bd03cea0f9b72283dac0ec22d289c7691069" integrity sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA== @@ -621,7 +621,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.12.1": +"@babel/plugin-syntax-jsx@7.12.1", "@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz#9d9d357cc818aa7ae7935917c1257f67677a0926" integrity sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg== @@ -649,7 +649,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.8.0": +"@babel/plugin-syntax-object-rest-spread@7.8.3", "@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.8.0": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== @@ -1901,6 +1901,41 @@ "@babel/runtime" "^7.7.2" regenerator-runtime "^0.13.3" +"@mdx-js/mdx@^1.6.22": + 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== + dependencies: + "@babel/core" "7.12.9" + "@babel/plugin-syntax-jsx" "7.12.1" + "@babel/plugin-syntax-object-rest-spread" "7.8.3" + "@mdx-js/util" "1.6.22" + babel-plugin-apply-mdx-type-prop "1.6.22" + babel-plugin-extract-import-names "1.6.22" + camelcase-css "2.0.1" + detab "2.0.4" + hast-util-raw "6.0.1" + lodash.uniq "4.5.0" + mdast-util-to-hast "10.0.1" + remark-footnotes "2.0.0" + remark-mdx "1.6.22" + remark-parse "8.0.3" + remark-squeeze-paragraphs "4.0.0" + style-to-object "0.3.0" + unified "9.2.0" + unist-builder "2.0.3" + unist-util-visit "2.0.3" + +"@mdx-js/react@^1.6.22": + version "1.6.22" + resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-1.6.22.tgz#ae09b4744fddc74714ee9f9d6f17a66e77c43573" + integrity sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg== + +"@mdx-js/util@1.6.22": + version "1.6.22" + resolved "https://registry.yarnpkg.com/@mdx-js/util/-/util-1.6.22.tgz#219dfd89ae5b97a8801f015323ffa4b62f45718b" + integrity sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA== + "@mdx-js/util@^2.0.0-next.8": version "2.0.0-next.8" resolved "https://registry.yarnpkg.com/@mdx-js/util/-/util-2.0.0-next.8.tgz#66ecc27b78e07a3ea2eb1a8fc5a99dfa0ba96690" @@ -2122,6 +2157,13 @@ "@types/minimatch" "*" "@types/node" "*" +"@types/hast@^2.0.0": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.1.tgz#b16872f2a6144c7025f296fb9636a667ebb79cd9" + integrity sha512-viwwrB+6xGzw+G1eWpF9geV3fnsDgXqHG+cqgiHrvQfDUW5hzhCyV7Sy3UJxhfRFBsgky2SSW33qi/YrIkjX5Q== + dependencies: + "@types/unist" "*" + "@types/history@*": version "4.7.8" resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.8.tgz#49348387983075705fe8f4e02fb67f7daaec4934" @@ -2189,7 +2231,7 @@ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.164.tgz#52348bcf909ac7b4c1bcbeda5c23135176e5dfa0" integrity sha512-fXCEmONnrtbYUc5014avwBeMdhHHO8YJCkOBflUL9EoJBSKZ1dei+VO74fA7JkTHZ1GvZack2TyIw5U+1lT8jg== -"@types/mdast@^3.0.3": +"@types/mdast@^3.0.0": version "3.0.3" resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.3.tgz#2d7d671b1cd1ea3deb306ea75036c2a0407d2deb" integrity sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw== @@ -2231,6 +2273,16 @@ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== +"@types/parse5@^5.0.0": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-5.0.3.tgz#e7b5aebbac150f8b5fdd4a46e7f0bd8e65e19109" + integrity sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw== + +"@types/prismjs@^1.16.2": + version "1.16.2" + resolved "https://registry.yarnpkg.com/@types/prismjs/-/prismjs-1.16.2.tgz#c130c977191c988cb35e97585da5d580948cc2d2" + integrity sha512-1M/j21xgTde7RPtpJVQebW5rzrquj7S+wnqt4x9uWrIPpr0Ya/uXypcqC2aUQL5gtLXFCKSH7GnjfAijMdfbuA== + "@types/prop-types@*": version "15.7.3" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" @@ -3213,6 +3265,14 @@ babel-plugin-add-module-exports@^0.3.3: optionalDependencies: chokidar "^2.0.4" +babel-plugin-apply-mdx-type-prop@1.6.22: + version "1.6.22" + resolved "https://registry.yarnpkg.com/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz#d216e8fd0de91de3f1478ef3231e05446bc8705b" + integrity sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ== + dependencies: + "@babel/helper-plugin-utils" "7.10.4" + "@mdx-js/util" "1.6.22" + babel-plugin-dynamic-import-node@^2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" @@ -3220,6 +3280,13 @@ babel-plugin-dynamic-import-node@^2.3.3: dependencies: object.assign "^4.1.0" +babel-plugin-extract-import-names@1.6.22: + version "1.6.22" + resolved "https://registry.yarnpkg.com/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz#de5f9a28eb12f3eb2578bf74472204e66d1a13dc" + integrity sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ== + dependencies: + "@babel/helper-plugin-utils" "7.10.4" + babel-plugin-lodash@3.3.4: version "3.3.4" resolved "https://registry.yarnpkg.com/babel-plugin-lodash/-/babel-plugin-lodash-3.3.4.tgz#4f6844358a1340baed182adbeffa8df9967bc196" @@ -3544,7 +3611,7 @@ blob@0.0.5: resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683" integrity sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig== -bluebird@^3.5.5, bluebird@^3.7.2: +bluebird@^3.0.5, bluebird@^3.5.5, bluebird@^3.7.2: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== @@ -3992,6 +4059,11 @@ camel-case@^3.0.0: no-case "^2.2.0" upper-case "^1.1.1" +camelcase-css@2.0.1, camelcase-css@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" + integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== + camelcase-keys@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" @@ -4050,7 +4122,7 @@ caw@^2.0.0, caw@^2.0.1: tunnel-agent "^0.6.0" url-to-options "^1.0.1" -ccount@^1.0.0, ccount@^1.0.3: +ccount@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043" integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg== @@ -4091,6 +4163,30 @@ chalk@^4.0.0, chalk@^4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +change-case@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/change-case/-/change-case-3.1.0.tgz#0e611b7edc9952df2e8513b27b42de72647dd17e" + integrity sha512-2AZp7uJZbYEzRPsFoa+ijKdvp9zsrnnt6+yFokfwEpeJm0xuJDVoxiRCAaTzyJND8GJkofo2IcKWaUZ/OECVzw== + dependencies: + camel-case "^3.0.0" + constant-case "^2.0.0" + dot-case "^2.1.0" + header-case "^1.0.0" + is-lower-case "^1.1.0" + is-upper-case "^1.1.0" + lower-case "^1.1.1" + lower-case-first "^1.0.0" + no-case "^2.3.2" + param-case "^2.1.0" + pascal-case "^2.0.0" + path-case "^2.1.0" + sentence-case "^2.1.0" + snake-case "^2.1.0" + swap-case "^1.1.0" + title-case "^2.1.0" + upper-case "^1.1.1" + upper-case-first "^1.1.0" + character-entities-html4@^1.0.0: version "1.1.4" resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.4.tgz#0e64b0a3753ddbf1fdc044c5fd01d0199a02e125" @@ -4121,6 +4217,28 @@ chardet@^0.7.0: resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== +cheerio@^0.22.0: + version "0.22.0" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e" + integrity sha1-qbqoYKP5tZWmuBsahocxIe06Jp4= + dependencies: + css-select "~1.2.0" + dom-serializer "~0.1.0" + entities "~1.1.1" + htmlparser2 "^3.9.1" + lodash.assignin "^4.0.9" + lodash.bind "^4.1.4" + lodash.defaults "^4.0.1" + lodash.filter "^4.4.0" + lodash.flatten "^4.2.0" + lodash.foreach "^4.3.0" + lodash.map "^4.4.0" + lodash.merge "^4.4.0" + lodash.pick "^4.2.1" + lodash.reduce "^4.4.0" + lodash.reject "^4.4.0" + lodash.some "^4.4.0" + cheerio@^1.0.0-rc.3: version "1.0.0-rc.3" resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.3.tgz#094636d425b2e9c0f4eb91a46c05630c9a1a8bf6" @@ -4315,7 +4433,7 @@ code-point-at@^1.0.0: resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= -collapse-white-space@^1.0.0, collapse-white-space@^1.0.2: +collapse-white-space@^1.0.2: version "1.0.6" resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287" integrity sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ== @@ -4385,7 +4503,7 @@ combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -comma-separated-tokens@^1.0.0, comma-separated-tokens@^1.0.1: +comma-separated-tokens@^1.0.0: version "1.0.8" resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea" integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== @@ -4524,6 +4642,14 @@ constant-case@3.0.3: tslib "^1.10.0" upper-case "^2.0.1" +constant-case@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/constant-case/-/constant-case-2.0.0.tgz#4175764d389d3fa9c8ecd29186ed6005243b6a46" + integrity sha1-QXV2TTidP6nI7NKRhu1gBSQ7akY= + dependencies: + snake-case "^2.1.0" + upper-case "^1.1.1" + constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" @@ -5329,6 +5455,11 @@ dataloader@2.0.0: resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-2.0.0.tgz#41eaf123db115987e21ca93c005cd7753c55fe6f" integrity sha512-YzhyDAwA4TaQIhM5go+vCLmU0UikghC/t9DTQYZR2M/UvZ1MdOhPezSDZcjj9uqQJOMqjLcpWtyW2iNINdlatQ== +dataloader@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-1.4.0.tgz#bca11d867f5d3f1b9ed9f737bd15970c65dff5c8" + integrity sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw== + date-fns@^2.14.0: version "2.16.1" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.16.1.tgz#05775792c3f3331da812af253e1a935851d3834b" @@ -5609,7 +5740,7 @@ destroy@~1.0.4: resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= -detab@^2.0.0: +detab@2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/detab/-/detab-2.0.4.tgz#b927892069aff405fbb9a186fe97a44a92a94b43" integrity sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g== @@ -5766,16 +5897,7 @@ dom-serializer@0: domelementtype "^2.0.1" entities "^2.0.0" -dom-serializer@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.1.0.tgz#5f7c828f1bfc44887dc2a315ab5c45691d544b58" - integrity sha512-ox7bvGXt2n+uLWtCRLybYx60IrOlWL/aCebWJk1T0d4m3y2tzf4U3ij9wBMUb6YJZpz06HCCYuyCDveE2xXmzQ== - dependencies: - domelementtype "^2.0.1" - domhandler "^3.0.0" - entities "^2.0.0" - -dom-serializer@~0.1.1: +dom-serializer@~0.1.0, dom-serializer@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== @@ -5810,13 +5932,6 @@ domhandler@^2.3.0: dependencies: domelementtype "1" -domhandler@^3.0.0, domhandler@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.3.0.tgz#6db7ea46e4617eb15cf875df68b2b8524ce0037a" - integrity sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA== - dependencies: - domelementtype "^2.0.1" - domutils@1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" @@ -5833,14 +5948,12 @@ domutils@^1.5.1, domutils@^1.7.0: dom-serializer "0" domelementtype "1" -domutils@^2.0.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.4.2.tgz#7ee5be261944e1ad487d9aa0616720010123922b" - integrity sha512-NKbgaM8ZJOecTZsIzW5gSuplsX2IWW2mIK7xVr8hTQF2v1CJWTmLZ1HOCh5sH+IzVPAGE5IucooOkvwBRAdowA== +dot-case@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-2.1.1.tgz#34dcf37f50a8e93c2b3bca8bb7fb9155c7da3bee" + integrity sha1-NNzzf1Co6TwrO8qLt/uRVcfaO+4= dependencies: - dom-serializer "^1.0.1" - domelementtype "^2.0.1" - domhandler "^3.3.0" + no-case "^2.2.0" dot-case@^3.0.3: version "3.0.3" @@ -6439,6 +6552,13 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= +eval@^0.1.0, eval@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/eval/-/eval-0.1.4.tgz#e05dbe0dab4b9330215cbb7bf4886eb24bd58700" + integrity sha512-npGsebJejyjMRnLdFu+T/97dnigqIU0Ov3IGrZ8ygd1v7RL1vGkEKtvyWZobqUH1AQgKlg0Yqqe2BtMA9/QZLw== + dependencies: + require-like ">= 0.1.1" + event-source-polyfill@^1.0.15: version "1.0.21" resolved "https://registry.yarnpkg.com/event-source-polyfill/-/event-source-polyfill-1.0.21.tgz#6b11b1299517a48e04540748b7c23f5a7620155b" @@ -6449,7 +6569,7 @@ eventemitter3@^3.1.0: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== -eventemitter3@^4.0.0: +eventemitter3@^4.0.0, eventemitter3@^4.0.4: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== @@ -6663,7 +6783,7 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" -extend@^3.0.0, extend@^3.0.2, extend@~3.0.2: +extend@^3.0.0, extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== @@ -7409,6 +7529,48 @@ gatsby-plugin-manifest@^2.10.0: semver "^7.3.2" sharp "^0.27.0" +gatsby-plugin-mdx@^1.7.1: + version "1.8.0" + resolved "https://registry.yarnpkg.com/gatsby-plugin-mdx/-/gatsby-plugin-mdx-1.8.0.tgz#bb4c4fde5406c742bf4eff602b982e69c2f3e861" + integrity sha512-ic33apQvN9o+FU327ZDueisVPvOE8h/83nhGRjR+Xdkk9kqZOasGL6I9X6iGg6B7KAAh/xrrDmjIagfZMux9QA== + dependencies: + "@babel/core" "^7.12.3" + "@babel/generator" "^7.12.5" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-proposal-object-rest-spread" "^7.12.1" + "@babel/preset-env" "^7.12.1" + "@babel/preset-react" "^7.12.5" + "@babel/types" "^7.12.6" + camelcase-css "^2.0.1" + change-case "^3.1.0" + core-js "^3.6.5" + dataloader "^1.4.0" + debug "^4.1.1" + escape-string-regexp "^1.0.5" + eval "^0.1.4" + fs-extra "^8.1.0" + gatsby-core-utils "^1.8.0" + gray-matter "^4.0.2" + json5 "^2.1.3" + loader-utils "^1.4.0" + lodash "^4.17.20" + mdast-util-to-string "^1.1.0" + mdast-util-toc "^3.1.0" + mime "^2.4.6" + p-queue "^6.6.2" + pretty-bytes "^5.3.0" + remark "^10.0.1" + remark-retext "^3.1.3" + retext-english "^3.0.4" + slugify "^1.4.4" + static-site-generator-webpack-plugin "^3.4.2" + style-to-object "^0.3.0" + underscore.string "^3.3.5" + unified "^8.4.2" + unist-util-map "^1.0.5" + unist-util-remove "^1.0.3" + unist-util-visit "^1.4.1" + gatsby-plugin-offline@^3.8.0: version "3.8.0" resolved "https://registry.yarnpkg.com/gatsby-plugin-offline/-/gatsby-plugin-offline-3.8.0.tgz#4cc1e4b24921aedc456248b4b425e073e4e866eb" @@ -7609,25 +7771,6 @@ gatsby-recipes@^0.7.0: xstate "^4.9.1" yoga-layout-prebuilt "^1.9.6" -gatsby-remark-autolink-headers@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/gatsby-remark-autolink-headers/-/gatsby-remark-autolink-headers-2.9.0.tgz#737e8520b43b0d509a1fc22e5464f6ba499fed07" - integrity sha512-68Pb+BfUVj1OXwO0Llln5IN4oGbWoTBxK3CZYzzhxI43rskBGnfrocPHsyIf1ltKXJKbeIzTuJnXSAaLm50oPQ== - dependencies: - "@babel/runtime" "^7.12.5" - github-slugger "^1.3.0" - lodash "^4.17.20" - mdast-util-to-string "^1.1.0" - unist-util-visit "^1.4.1" - -gatsby-remark-code-buttons@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/gatsby-remark-code-buttons/-/gatsby-remark-code-buttons-2.0.4.tgz#1fc02fd8beacab6a4c07e7b335095f0a7ff6bf55" - integrity sha512-VPwYnXEAC3rNffhc43E6KfFfV/xYrIzdlsNvcFarAukIvArB2AlXHC3BFfbYTjw93fio8UIfLZjQJweNwDQSoQ== - dependencies: - query-string "^6.5.0" - unist-util-visit "^1.4.0" - gatsby-remark-images@^3.9.0: version "3.9.0" resolved "https://registry.yarnpkg.com/gatsby-remark-images/-/gatsby-remark-images-3.9.0.tgz#f9b37a538be22ab5dd011550c11acee11f281766" @@ -7653,15 +7796,6 @@ gatsby-remark-mermaid@^2.1.0: mermaid "^8.7.0" unist-util-visit "^1.4.0" -gatsby-remark-prismjs@^3.11.0: - version "3.11.0" - resolved "https://registry.yarnpkg.com/gatsby-remark-prismjs/-/gatsby-remark-prismjs-3.11.0.tgz#68305976b2331e368f90f736e36aa9531102195f" - integrity sha512-aMiky/kEKfnJfByMwkPq53h9k7GUvJkPMCecu4HwCYmvM8KqCXhpqH070h7QlTuk6yAjTnxa3Ck4y3aMpkOOIw== - dependencies: - "@babel/runtime" "^7.12.5" - parse-numeric-range "^0.0.2" - unist-util-visit "^1.4.1" - gatsby-remark-reading-time@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/gatsby-remark-reading-time/-/gatsby-remark-reading-time-1.1.0.tgz#f23590ae34233c3625e656e0368ad0e0e84761a1" @@ -7716,33 +7850,6 @@ gatsby-transformer-json@^2.9.0: "@babel/runtime" "^7.12.5" bluebird "^3.7.2" -gatsby-transformer-remark@^2.14.0: - version "2.14.0" - resolved "https://registry.yarnpkg.com/gatsby-transformer-remark/-/gatsby-transformer-remark-2.14.0.tgz#d7fd3d8cdbea4993180f94b720abe8eb1ca637db" - integrity sha512-GYtJjDRVdXbvp3BqQ4wObiSu+1We05aV5B+ifOVX1sxNXLKOUOw14tkEb6Uij6pJ3mNe3azHTkChqTe0LboYPA== - dependencies: - "@babel/runtime" "^7.12.5" - bluebird "^3.7.2" - gatsby-core-utils "^1.8.0" - gray-matter "^4.0.2" - hast-util-raw "^4.0.0" - hast-util-to-html "^4.0.1" - lodash "^4.17.20" - mdast-util-to-hast "^3.0.4" - mdast-util-to-string "^1.1.0" - mdast-util-toc "^5.0" - remark "^10.0.1" - remark-parse "^6.0.3" - remark-retext "^3.1.3" - remark-stringify "6.0.4" - retext-english "^3.0.4" - sanitize-html "^1.27.5" - underscore.string "^3.3.5" - unified "^6.2.0" - unist-util-remove-position "^1.1.4" - unist-util-select "^1.5.0" - unist-util-visit "^1.4.1" - gatsby-transformer-sharp@^2.10.0: version "2.10.0" resolved "https://registry.yarnpkg.com/gatsby-transformer-sharp/-/gatsby-transformer-sharp-2.10.0.tgz#19740e3afe2fc574a7568619c3106e1f82d9ce4c" @@ -8521,93 +8628,72 @@ hasha@^5.2.0: is-stream "^2.0.0" type-fest "^0.8.0" -hast-to-hyperscript@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/hast-to-hyperscript/-/hast-to-hyperscript-5.0.0.tgz#5106cbba78edb7c95e2e8a49079371eb196c1ced" - integrity sha512-DLl3eYTz8uwwzEubDUdCChsR5t5b2ne+yvHrA2h58Suq/JnN3+Gsb9Tc4iZoCCsykmFUc6UUpwxTmQXs0akSeg== +hast-to-hyperscript@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz#9b67fd188e4c81e8ad66f803855334173920218d" + integrity sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA== dependencies: + "@types/unist" "^2.0.3" comma-separated-tokens "^1.0.0" - property-information "^4.0.0" + property-information "^5.3.0" space-separated-tokens "^1.0.0" - style-to-object "^0.2.1" - unist-util-is "^2.0.0" - web-namespaces "^1.1.2" + style-to-object "^0.3.0" + unist-util-is "^4.0.0" + web-namespaces "^1.0.0" -hast-util-from-parse5@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-4.0.2.tgz#b7164a7ffc88da4f751dc7c2f801ff8d7c143bab" - integrity sha512-I6dtjsGtDqz4fmGSiFClFyiXdKhj5bPceS6intta7k/VDuiKz9P61C6hO6WMiNNmEm1b/EtBH8f+juvz4o0uwQ== +hast-util-from-parse5@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz#554e34abdeea25ac76f5bd950a1f0180e0b3bc2a" + integrity sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA== dependencies: - ccount "^1.0.3" - hastscript "^4.0.0" - property-information "^4.0.0" - web-namespaces "^1.1.2" - xtend "^4.0.1" - -hast-util-is-element@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/hast-util-is-element/-/hast-util-is-element-1.1.0.tgz#3b3ed5159a2707c6137b48637fbfe068e175a425" - integrity sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ== + "@types/parse5" "^5.0.0" + hastscript "^6.0.0" + property-information "^5.0.0" + vfile "^4.0.0" + vfile-location "^3.2.0" + web-namespaces "^1.0.0" -hast-util-parse-selector@^2.2.0: +hast-util-parse-selector@^2.0.0: version "2.2.5" resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz#d57c23f4da16ae3c63b3b6ca4616683313499c3a" integrity sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ== -hast-util-raw@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-4.0.0.tgz#2dc10c9facd9b810ea6ac51df251e6f87c2ed5b5" - integrity sha512-5xYHyEJMCf8lX/NT4iA5z6N43yoFsrJqXJ5GWwAbLn815URbIz+UNNFEgid33F9paZuDlqVKvB+K3Aqu5+DdSw== +hast-util-raw@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-6.0.1.tgz#973b15930b7529a7b66984c98148b46526885977" + integrity sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig== dependencies: - hast-util-from-parse5 "^4.0.2" - hast-util-to-parse5 "^4.0.1" - html-void-elements "^1.0.1" - parse5 "^5.0.0" + "@types/hast" "^2.0.0" + hast-util-from-parse5 "^6.0.0" + hast-util-to-parse5 "^6.0.0" + html-void-elements "^1.0.0" + parse5 "^6.0.0" unist-util-position "^3.0.0" + vfile "^4.0.0" web-namespaces "^1.0.0" - xtend "^4.0.1" + xtend "^4.0.0" zwitch "^1.0.0" -hast-util-to-html@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/hast-util-to-html/-/hast-util-to-html-4.0.1.tgz#3666b05afb62bd69f8f5e6c94db04dea19438e2a" - integrity sha512-2emzwyf0xEsc4TBIPmDJmBttIw8R4SXAJiJZoiRR/s47ODYWgOqNoDbf2SJAbMbfNdFWMiCSOrI3OVnX6Qq2Mg== - dependencies: - ccount "^1.0.0" - comma-separated-tokens "^1.0.1" - hast-util-is-element "^1.0.0" - hast-util-whitespace "^1.0.0" - html-void-elements "^1.0.0" - property-information "^4.0.0" - space-separated-tokens "^1.0.0" - stringify-entities "^1.0.1" - unist-util-is "^2.0.0" - xtend "^4.0.1" - -hast-util-to-parse5@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-4.0.1.tgz#e52534b4bf40dc4e7d0428fcaf6d32bc75c62ee5" - integrity sha512-U/61W+fsNfBpCyJBB5Pt3l5ypIfgXqEyW9pyrtxF7XrqDJHzcFrYpnC94d0JDYjvobLpYCzcU9srhMRPEO1YXw== +hast-util-to-parse5@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz#1ec44650b631d72952066cea9b1445df699f8479" + integrity sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ== dependencies: - hast-to-hyperscript "^5.0.0" - property-information "^4.0.0" + hast-to-hyperscript "^9.0.0" + property-information "^5.0.0" web-namespaces "^1.0.0" - xtend "^4.0.1" + xtend "^4.0.0" zwitch "^1.0.0" -hast-util-whitespace@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-1.0.4.tgz#e4fe77c4a9ae1cb2e6c25e02df0043d0164f6e41" - integrity sha512-I5GTdSfhYfAPNztx2xJRQpG8cuDSNt599/7YUn7Gx/WxNMsG+a835k97TDkFgk123cwjfwINaZknkKkphx/f2A== - -hastscript@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-4.1.0.tgz#ea5593fa6f6709101fc790ced818393ddaa045ce" - integrity sha512-bOTn9hEfzewvHyXdbYGKqOr/LOz+2zYhKbC17U2YAjd16mnjqB1BQ0nooM/RdMy/htVyli0NAznXiBtwDi1cmQ== +hastscript@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-6.0.0.tgz#e8768d7eac56c3fdeac8a92830d58e811e5bf640" + integrity sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w== dependencies: + "@types/hast" "^2.0.0" comma-separated-tokens "^1.0.0" - hast-util-parse-selector "^2.2.0" - property-information "^4.0.0" + hast-util-parse-selector "^2.0.0" + property-information "^5.0.0" space-separated-tokens "^1.0.0" he@^1.1.0, he@^1.1.1, he@^1.2.0: @@ -8615,6 +8701,14 @@ he@^1.1.0, he@^1.1.1, he@^1.2.0: resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== +header-case@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/header-case/-/header-case-1.0.1.tgz#9535973197c144b09613cd65d317ef19963bd02d" + integrity sha1-lTWXMZfBRLCWE81l0xfvGZY70C0= + dependencies: + no-case "^2.2.0" + upper-case "^1.1.3" + hex-color-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" @@ -8711,7 +8805,7 @@ html-minifier@^4.0.0: relateurl "^0.2.7" uglify-js "^3.5.1" -html-void-elements@^1.0.0, html-void-elements@^1.0.1: +html-void-elements@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-1.0.5.tgz#ce9159494e86d95e45795b166c2021c2cfca4483" integrity sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w== @@ -8728,16 +8822,6 @@ htmlparser2@^3.3.0, htmlparser2@^3.9.1: inherits "^2.0.1" readable-stream "^3.1.1" -htmlparser2@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-4.1.0.tgz#9a4ef161f2e4625ebf7dfbe6c0a2f52d18a59e78" - integrity sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q== - dependencies: - domelementtype "^2.0.1" - domhandler "^3.0.0" - domutils "^2.0.0" - entities "^2.0.0" - http-cache-semantics@3.8.1: version "3.8.1" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" @@ -9203,7 +9287,7 @@ is-accessor-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" -is-alphabetical@^1.0.0: +is-alphabetical@1.0.4, is-alphabetical@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== @@ -9250,7 +9334,7 @@ is-binary-path@^2.1.0, is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" -is-buffer@^1.1.4, is-buffer@^1.1.5: +is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== @@ -9445,6 +9529,13 @@ is-jpg@^2.0.0: resolved "https://registry.yarnpkg.com/is-jpg/-/is-jpg-2.0.0.tgz#2e1997fa6e9166eaac0242daae443403e4ef1d97" integrity sha1-LhmX+m6RZuqsAkLarkQ0A+TvHZc= +is-lower-case@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-lower-case/-/is-lower-case-1.1.3.tgz#7e147be4768dc466db3bfb21cc60b31e6ad69393" + integrity sha1-fhR75HaNxGbbO/shzGCzHmrWk5M= + dependencies: + lower-case "^1.1.0" + is-natural-number@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-natural-number/-/is-natural-number-4.0.1.tgz#ab9d76e1db4ced51e35de0c72ebecf09f734cde8" @@ -9627,6 +9718,13 @@ is-unc-path@^1.0.0: dependencies: unc-path-regex "^0.1.2" +is-upper-case@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-upper-case/-/is-upper-case-1.1.2.tgz#8d0b1fa7e7933a1e58483600ec7d9661cbaf756f" + integrity sha1-jQsfp+eTOh5YSDYA7H2WYcuvdW8= + dependencies: + upper-case "^1.1.0" + is-url@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" @@ -9887,7 +9985,7 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" -json5@^2.1.2: +json5@^2.1.2, json5@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== @@ -10161,6 +10259,16 @@ lodash._reinterpolate@^3.0.0: resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= +lodash.assignin@^4.0.9: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2" + integrity sha1-uo31+4QesKPoBEIysOJjqNxqKKI= + +lodash.bind@^4.1.4: + version "4.2.1" + resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35" + integrity sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU= + lodash.clonedeep@4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" @@ -10176,12 +10284,22 @@ lodash.deburr@^4.1.0: resolved "https://registry.yarnpkg.com/lodash.deburr/-/lodash.deburr-4.1.0.tgz#ddb1bbb3ef07458c0177ba07de14422cb033ff9b" integrity sha1-3bG7s+8HRYwBd7oH3hRCLLAz/5s= +lodash.defaults@^4.0.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= + lodash.every@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.every/-/lodash.every-4.6.0.tgz#eb89984bebc4364279bb3aefbbd1ca19bfa6c6a7" integrity sha1-64mYS+vENkJ5uzrvu9HKGb+mxqc= -lodash.flatten@^4.4.0: +lodash.filter@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" + integrity sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4= + +lodash.flatten@^4.2.0, lodash.flatten@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= @@ -10191,12 +10309,12 @@ lodash.flattendeep@^4.4.0: resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" integrity sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI= -lodash.foreach@^4.5.0: +lodash.foreach@^4.3.0, lodash.foreach@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" integrity sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM= -lodash.map@^4.6.0: +lodash.map@^4.4.0, lodash.map@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" integrity sha1-dx7Hg540c9nEzeKLGTlMNWL09tM= @@ -10211,6 +10329,31 @@ lodash.memoize@^4.1.2: resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= +lodash.merge@^4.4.0: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.pick@^4.2.1: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" + integrity sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM= + +lodash.reduce@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b" + integrity sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs= + +lodash.reject@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.reject/-/lodash.reject-4.6.0.tgz#80d6492dc1470864bbf583533b651f42a9f52415" + integrity sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU= + +lodash.some@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" + integrity sha1-G7nzFO9ri63tE7VJFpsqlF62jk0= + lodash.template@^4.4.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" @@ -10231,7 +10374,7 @@ lodash.toarray@^4.4.0: resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" integrity sha1-JMS/zWsvuji/0FlNsRedjptlZWE= -lodash.uniq@^4.5.0: +lodash.uniq@4.5.0, lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= @@ -10297,6 +10440,13 @@ loud-rejection@^2.2.0: currently-unhandled "^0.4.1" signal-exit "^3.0.2" +lower-case-first@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/lower-case-first/-/lower-case-first-1.0.2.tgz#e5da7c26f29a7073be02d52bac9980e5922adfa1" + integrity sha1-5dp8JvKacHO+AtUrrJmA5ZIq36E= + dependencies: + lower-case "^1.1.2" + lower-case@2.0.1, lower-case@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.1.tgz#39eeb36e396115cc05e29422eaea9e692c9408c7" @@ -10304,7 +10454,7 @@ lower-case@2.0.1, lower-case@^2.0.1: dependencies: tslib "^1.10.0" -lower-case@^1.1.1: +lower-case@^1.1.0, lower-case@^1.1.1, lower-case@^1.1.2: version "1.1.4" resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw= @@ -10434,6 +10584,13 @@ md5.js@^1.3.4: inherits "^2.0.1" safe-buffer "^5.1.2" +mdast-squeeze-paragraphs@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz#7c4c114679c3bee27ef10b58e2e015be79f1ef97" + integrity sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ== + dependencies: + unist-util-remove "^2.0.0" + mdast-util-compact@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/mdast-util-compact/-/mdast-util-compact-1.0.4.tgz#d531bb7667b5123abf20859be086c4d06c894593" @@ -10448,29 +10605,33 @@ mdast-util-compact@^2.0.0: dependencies: unist-util-visit "^2.0.0" -mdast-util-definitions@^1.2.0, mdast-util-definitions@^1.2.5: +mdast-util-definitions@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-1.2.5.tgz#3fe622a4171c774ebd06f11e9f8af7ec53ea5c74" integrity sha512-CJXEdoLfiISCDc2JB6QLb79pYfI6+GcIH+W2ox9nMc7od0Pz+bovcHsiq29xAQY6ayqe/9CsK2VzkSJdg1pFYA== dependencies: unist-util-visit "^1.0.0" -mdast-util-to-hast@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-3.0.4.tgz#132001b266031192348d3366a6b011f28e54dc40" - integrity sha512-/eIbly2YmyVgpJNo+bFLLMCI1XgolO/Ffowhf+pHDq3X4/V6FntC9sGQCDLM147eTS+uSXv5dRzJyFn+o0tazA== +mdast-util-definitions@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz#c5c1a84db799173b4dcf7643cda999e440c24db2" + integrity sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ== dependencies: - collapse-white-space "^1.0.0" - detab "^2.0.0" - mdast-util-definitions "^1.2.0" - mdurl "^1.0.1" - trim "0.0.1" - trim-lines "^1.0.0" - unist-builder "^1.0.1" - unist-util-generated "^1.1.0" + unist-util-visit "^2.0.0" + +mdast-util-to-hast@10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz#0cfc82089494c52d46eb0e3edb7a4eb2aea021eb" + integrity sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA== + dependencies: + "@types/mdast" "^3.0.0" + "@types/unist" "^2.0.0" + mdast-util-definitions "^4.0.0" + mdurl "^1.0.0" + unist-builder "^2.0.0" + unist-util-generated "^1.0.0" unist-util-position "^3.0.0" - unist-util-visit "^1.1.0" - xtend "^4.0.1" + unist-util-visit "^2.0.0" mdast-util-to-nlcst@^3.2.0: version "3.2.3" @@ -10487,18 +10648,15 @@ mdast-util-to-string@^1.0.5, mdast-util-to-string@^1.1.0: resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz#27055500103f51637bd07d01da01eb1967a43527" integrity sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A== -mdast-util-toc@^5.0: - version "5.0.4" - resolved "https://registry.yarnpkg.com/mdast-util-toc/-/mdast-util-toc-5.0.4.tgz#5c7bc8ff64914546384d81ea155478ba34802c12" - integrity sha512-JjLlJfcnsQlAJKWCY8CfTp9gA5A2Mk5PeDmPmCLLvq+2SjlJKyGUQTiDdSO5WvPRzpwnghO3ByyJc4OngadB3w== +mdast-util-toc@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mdast-util-toc/-/mdast-util-toc-3.1.0.tgz#395eeb877f067f9d2165d990d77c7eea6f740934" + integrity sha512-Za0hqL1PqWrvxGtA/3NH9D5nhGAUS9grMM4obEAz5+zsk1RIw/vWUchkaoDLNdrwk05A0CSC5eEXng36/1qE5w== dependencies: - "@types/mdast" "^3.0.3" - "@types/unist" "^2.0.3" - extend "^3.0.2" github-slugger "^1.2.1" mdast-util-to-string "^1.0.5" - unist-util-is "^4.0.0" - unist-util-visit "^2.0.0" + unist-util-is "^2.1.2" + unist-util-visit "^1.1.0" mdn-data@2.0.12: version "2.0.12" @@ -10510,7 +10668,7 @@ mdn-data@2.0.4: resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== -mdurl@^1.0.1: +mdurl@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= @@ -10994,7 +11152,7 @@ nlcst-to-string@^2.0.0: resolved "https://registry.yarnpkg.com/nlcst-to-string/-/nlcst-to-string-2.0.4.tgz#9315dfab80882bbfd86ddf1b706f53622dc400cc" integrity sha512-3x3jwTd6UPG7vi5k4GEzvxJ5rDA7hVUIRNHPblKuMVP9Z3xmlsd9cgLcpAMkc5uPOBna82EeshROFhsPkbnTZg== -no-case@^2.2.0: +no-case@^2.2.0, no-case@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ== @@ -11626,6 +11784,14 @@ p-pipe@^3.0.0: resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-3.1.0.tgz#48b57c922aa2e1af6a6404cb7c6bf0eb9cc8e60e" integrity sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw== +p-queue@^6.6.2: + version "6.6.2" + resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-6.6.2.tgz#2068a9dcf8e67dd0ec3e7a2bcb76810faa85e426" + integrity sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ== + dependencies: + eventemitter3 "^4.0.4" + p-timeout "^3.2.0" + p-reduce@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" @@ -11652,7 +11818,7 @@ p-timeout@^2.0.1: dependencies: p-finally "^1.0.0" -p-timeout@^3.1.0: +p-timeout@^3.1.0, p-timeout@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-3.2.0.tgz#c7e17abc971d2a7962ef83626b35d635acf23dfe" integrity sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg== @@ -11701,7 +11867,7 @@ param-case@3.0.3: dot-case "^3.0.3" tslib "^1.10.0" -param-case@^2.1.1: +param-case@^2.1.0, param-case@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" integrity sha1-35T9jPZTHs915r75oIWPvHK+Ikc= @@ -11826,11 +11992,6 @@ parse-latin@^4.0.0: unist-util-modify-children "^2.0.0" unist-util-visit-children "^1.0.0" -parse-numeric-range@^0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/parse-numeric-range/-/parse-numeric-range-0.0.2.tgz#b4f09d413c7adbcd987f6e9233c7b4b210c938e4" - integrity sha1-tPCdQTx6282Yf26SM8e0shDJOOQ= - parse-passwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" @@ -11844,11 +12005,6 @@ parse-path@^4.0.0: is-ssh "^1.3.0" protocols "^1.4.0" -parse-srcset@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/parse-srcset/-/parse-srcset-1.0.2.tgz#f2bd221f6cc970a938d88556abc589caaaa2bde1" - integrity sha1-8r0iH2zJcKk42IVWq8WJyqqiveE= - parse-url@^5.0.0: version "5.0.2" resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-5.0.2.tgz#856a3be1fcdf78dc93fc8b3791f169072d898b59" @@ -11866,10 +12022,10 @@ parse5@^3.0.1: dependencies: "@types/node" "*" -parse5@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" - integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== +parse5@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== parseqs@0.0.5: version "0.0.5" @@ -11908,6 +12064,14 @@ pascal-case@3.1.1, pascal-case@^3.1.1: no-case "^3.0.3" tslib "^1.10.0" +pascal-case@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-2.0.1.tgz#2d578d3455f660da65eca18ef95b4e0de912761e" + integrity sha1-LVeNNFX2YNpl7KGO+VtODekSdh4= + dependencies: + camel-case "^3.0.0" + upper-case-first "^1.1.0" + pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" @@ -11926,6 +12090,13 @@ path-browserify@0.0.1: resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== +path-case@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/path-case/-/path-case-2.1.1.tgz#94b8037c372d3fe2906e465bb45e25d226e8eea5" + integrity sha1-lLgDfDctP+KQbkZbtF4l0ibo7qU= + dependencies: + no-case "^2.2.0" + path-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" @@ -12572,6 +12743,11 @@ pretty-bytes@^5.1.0, pretty-bytes@^5.4.1: resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.4.1.tgz#cd89f79bbcef21e3d21eb0da68ffe93f803e884b" integrity sha512-s1Iam6Gwz3JI5Hweaz4GoCD1WUNUIyzePFy5+Js2hjwGVt2Z79wNN+ZKOZ2vB6C+Xs6njyB84Z1IthQg8d9LxA== +pretty-bytes@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.5.0.tgz#0cecda50a74a941589498011cf23275aa82b339e" + integrity sha512-p+T744ZyjjiaFlMUZZv6YPC5JrkNj8maRmPaQCWFJFplUAzpIUTRaTcS+7wmZtUoFXHtESJb23ISliaWyz3SHA== + pretty-error@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.2.tgz#be89f82d81b1c86ec8fdfbc385045882727f93b6" @@ -12602,6 +12778,11 @@ pretty-quick@^3.0.2: mri "^1.1.5" multimatch "^4.0.0" +prism-react-renderer@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-1.1.1.tgz#1c1be61b1eb9446a146ca7a50b7bcf36f2a70a44" + integrity sha512-MgMhSdHuHymNRqD6KM3eGS0PNqgK9q4QF5P0yoQQvpB6jNjeSAi3jcSAz0Sua/t9fa4xDOMar9HJbLa08gl9ug== + prismjs@^1.23.0: version "1.23.0" resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.23.0.tgz#d3b3967f7d72440690497652a9d40ff046067f33" @@ -12678,12 +12859,12 @@ proper-lockfile@^4.1.1: retry "^0.12.0" signal-exit "^3.0.2" -property-information@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/property-information/-/property-information-4.2.0.tgz#f0e66e07cbd6fed31d96844d958d153ad3eb486e" - integrity sha512-TlgDPagHh+eBKOnH2VYvk8qbwsCG/TAJdmTL7f1PROUcSO8qt/KSmShEQ/OKvock8X9tFjtqjCScyOkkkvIKVQ== +property-information@^5.0.0, property-information@^5.3.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.6.0.tgz#61675545fb23002f245c6540ec46077d4da3ed69" + integrity sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA== dependencies: - xtend "^4.0.1" + xtend "^4.0.0" proto-list@~1.2.1: version "1.2.4" @@ -12837,7 +13018,7 @@ query-string@^5.0.1: object-assign "^4.1.0" strict-uri-encode "^1.0.0" -query-string@^6.13.1, query-string@^6.13.3, query-string@^6.5.0: +query-string@^6.13.1, query-string@^6.13.3: version "6.13.6" resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.13.6.tgz#e5ac7c74f2a5da43fbca0b883b4f0bafba439966" integrity sha512-/WWZ7d9na6s2wMEGdVCVgKWE9Rt7nYyNIf7k8xmHXcesPMlEzicWo3lbYwHyA4wBktI2KrXxxZeACLbE84hvSQ== @@ -13340,6 +13521,25 @@ relay-runtime@10.0.1: "@babel/runtime" "^7.0.0" fbjs "^1.0.0" +remark-footnotes@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/remark-footnotes/-/remark-footnotes-2.0.0.tgz#9001c4c2ffebba55695d2dd80ffb8b82f7e6303f" + integrity sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ== + +remark-mdx@1.6.22: + version "1.6.22" + resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-1.6.22.tgz#06a8dab07dcfdd57f3373af7f86bd0e992108bbd" + integrity sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ== + dependencies: + "@babel/core" "7.12.9" + "@babel/helper-plugin-utils" "7.10.4" + "@babel/plugin-proposal-object-rest-spread" "7.12.1" + "@babel/plugin-syntax-jsx" "7.12.1" + "@mdx-js/util" "1.6.22" + is-alphabetical "1.0.4" + remark-parse "8.0.3" + unified "9.2.0" + remark-mdx@^2.0.0-next.4: version "2.0.0-next.8" resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-2.0.0-next.8.tgz#db1c3cbc606ea0d01526242199bb134d99020363" @@ -13362,6 +13562,28 @@ remark-mdxjs@^2.0.0-next.4: "@babel/plugin-syntax-jsx" "7.10.4" "@mdx-js/util" "^2.0.0-next.8" +remark-parse@8.0.3: + version "8.0.3" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-8.0.3.tgz#9c62aa3b35b79a486454c690472906075f40c7e1" + integrity sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q== + dependencies: + ccount "^1.0.0" + collapse-white-space "^1.0.2" + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + is-whitespace-character "^1.0.0" + is-word-character "^1.0.0" + markdown-escapes "^1.0.0" + parse-entities "^2.0.0" + repeat-string "^1.5.4" + state-toggle "^1.0.0" + trim "0.0.1" + trim-trailing-lines "^1.0.0" + unherit "^1.0.4" + unist-util-remove-position "^2.0.0" + vfile-location "^3.0.0" + xtend "^4.0.1" + remark-parse@^6.0.0, remark-parse@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-6.0.3.tgz#c99131052809da482108413f87b0ee7f52180a3a" @@ -13390,7 +13612,14 @@ remark-retext@^3.1.3: dependencies: mdast-util-to-nlcst "^3.2.0" -remark-stringify@6.0.4, remark-stringify@^6.0.0: +remark-squeeze-paragraphs@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz#76eb0e085295131c84748c8e43810159c5653ead" + integrity sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw== + dependencies: + mdast-squeeze-paragraphs "^4.0.0" + +remark-stringify@^6.0.0: version "6.0.4" resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-6.0.4.tgz#16ac229d4d1593249018663c7bddf28aafc4e088" integrity sha512-eRWGdEPMVudijE/psbIDNcnJLRVx3xhfuEsTDGgH4GsFF91dVhw5nhmnBppafJ7+NWINW6C7ZwWbi30ImJzqWg== @@ -13513,6 +13742,11 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= +"require-like@>= 0.1.1": + version "0.1.2" + resolved "https://registry.yarnpkg.com/require-like/-/require-like-0.1.2.tgz#ad6f30c13becd797010c468afa775c0c0a6b47fa" + integrity sha1-rW8wwTvs15cBDEaK+ndcDAprR/o= + require-main-filename@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" @@ -13738,16 +13972,6 @@ safe-regex@^1.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sanitize-html@^1.27.5: - version "1.27.5" - resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-1.27.5.tgz#6c8149462adb23e360e1bb71cc0bae7f08c823c7" - integrity sha512-M4M5iXDAUEcZKLXkmk90zSYWEtk5NH3JmojQxKxV371fnMh+x9t1rqdmXaGoyEHw3z/X/8vnFhKjGL5xFGOJ3A== - dependencies: - htmlparser2 "^4.1.0" - lodash "^4.17.15" - parse-srcset "^1.0.2" - postcss "^7.0.27" - sax@>=0.6.0, sax@^1.2.4, sax@~1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" @@ -13894,6 +14118,14 @@ send@0.17.1: range-parser "~1.2.1" statuses "~1.5.0" +sentence-case@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/sentence-case/-/sentence-case-2.1.1.tgz#1f6e2dda39c168bf92d13f86d4a918933f667ed4" + integrity sha1-H24t2jnBaL+S0T+G1KkYkz9mftQ= + dependencies: + no-case "^2.2.0" + upper-case-first "^1.1.2" + serialize-javascript@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" @@ -14121,6 +14353,13 @@ slugify@^1.4.4: resolved "https://registry.yarnpkg.com/slugify/-/slugify-1.4.6.tgz#ef288d920a47fb01c2be56b3487b6722f5e34ace" integrity sha512-ZdJIgv9gdrYwhXqxsH9pv7nXxjUEyQ6nqhngRxoAAOlmMGA28FDq5O4/5US4G2/Nod7d1ovNcgURQJ7kHq50KQ== +snake-case@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-2.1.0.tgz#41bdb1b73f30ec66a04d4e2cad1b76387d4d6d9f" + integrity sha1-Qb2xtz8w7GagTU4srRt2OH1NbZ8= + dependencies: + no-case "^2.2.0" + snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -14260,6 +14499,11 @@ sort-keys@^2.0.0: dependencies: is-plain-obj "^1.0.0" +source-list-map@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-1.1.2.tgz#9889019d1024cce55cdc069498337ef6186a11a1" + integrity sha1-mIkBnRAkzOVc3AaUmDN+9hhqEaE= + source-list-map@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" @@ -14294,7 +14538,7 @@ source-map@0.7.3, source-map@^0.7.3: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== -source-map@^0.5.0, source-map@^0.5.6: +source-map@^0.5.0, source-map@^0.5.6, source-map@~0.5.3: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= @@ -14460,6 +14704,17 @@ static-extend@^0.1.1: define-property "^0.2.5" object-copy "^0.1.0" +static-site-generator-webpack-plugin@^3.4.2: + version "3.4.2" + resolved "https://registry.yarnpkg.com/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-3.4.2.tgz#ad9fd0a4fb8b6f439a7a66018320b459bdb6d916" + integrity sha512-39Kn+fZDVjolLYuX5y1rDvksJIW0QEUaEC/AVO/UewNXxGzoSQI1UYnRsL+ocAcN5Yti6d6rJgEL0qZ5tNXfdw== + dependencies: + bluebird "^3.0.5" + cheerio "^0.22.0" + eval "^0.1.0" + url "^0.11.0" + webpack-sources "^0.2.0" + "statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" @@ -14768,14 +15023,7 @@ style-loader@^0.23.1: loader-utils "^1.1.0" schema-utils "^1.0.0" -style-to-object@^0.2.1: - version "0.2.3" - resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.2.3.tgz#afcf42bc03846b1e311880c55632a26ad2780bcb" - integrity sha512-1d/k4EY2N7jVLOqf2j04dTc37TPOv/hHxZmvpg8Pdh8UYydxeu/C1W1U4vD8alzf5V2Gt7rLsmkr4dxAlDm9ng== - dependencies: - inline-style-parser "0.1.1" - -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== @@ -14893,6 +15141,14 @@ svgo@1.3.2, svgo@^1.0.0: unquote "~1.1.1" util.promisify "~1.0.0" +swap-case@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/swap-case/-/swap-case-1.1.2.tgz#c39203a4587385fad3c850a0bd1bcafa081974e3" + integrity sha1-w5IDpFhzhfrTyFCgvRvK+ggZdOM= + dependencies: + lower-case "^1.1.1" + upper-case "^1.1.1" + symbol-observable@^1.0.4, symbol-observable@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" @@ -15077,6 +15333,14 @@ tinycolor2@^1.4.1: resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.2.tgz#3f6a4d1071ad07676d7fa472e1fac40a719d8803" integrity sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA== +title-case@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/title-case/-/title-case-2.1.1.tgz#3e127216da58d2bc5becf137ab91dae3a7cd8faa" + integrity sha1-PhJyFtpY0rxb7PE3q5Ha46fNj6o= + dependencies: + no-case "^2.2.0" + upper-case "^1.0.3" + tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -15179,11 +15443,6 @@ traverse@0.6.6: resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" integrity sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc= -trim-lines@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-1.1.3.tgz#839514be82428fd9e7ec89e35081afe8f6f93115" - integrity sha512-E0ZosSWYK2mkSu+KEtQ9/KqarVjA9HztOSX+9FDdNacRAq29RRV6ZQNgob3iuW8Htar9vAfEa6yyt5qBAHZDBA== - trim-newlines@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" @@ -15447,17 +15706,17 @@ unicode-property-aliases-ecmascript@^1.0.4: resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== -unified@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/unified/-/unified-6.2.0.tgz#7fbd630f719126d67d40c644b7e3f617035f6dba" - integrity sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA== +unified@9.2.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.0.tgz#67a62c627c40589edebbf60f53edfd4d822027f8" + integrity sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg== dependencies: bail "^1.0.0" extend "^3.0.0" - is-plain-obj "^1.1.0" + is-buffer "^2.0.0" + is-plain-obj "^2.0.0" trough "^1.0.0" - vfile "^2.0.0" - x-is-string "^0.1.0" + vfile "^4.0.0" unified@^7.0.0: version "7.1.0" @@ -15525,19 +15784,17 @@ unique-string@^2.0.0: dependencies: crypto-random-string "^2.0.0" -unist-builder@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-1.0.4.tgz#e1808aed30bd72adc3607f25afecebef4dd59e17" - integrity sha512-v6xbUPP7ILrT15fHGrNyHc1Xda8H3xVhP7/HAIotHOhVPjH5dCXA097C3Rry1Q2O+HbOLCao4hfPB+EYEjHgVg== - dependencies: - object-assign "^4.1.0" +unist-builder@2.0.3, unist-builder@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-2.0.3.tgz#77648711b5d86af0942f334397a33c5e91516436" + integrity sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw== -unist-util-generated@^1.1.0: +unist-util-generated@^1.0.0: version "1.1.6" resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-1.1.6.tgz#5ab51f689e2992a472beb1b35f2ce7ff2f324d4b" integrity sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg== -unist-util-is@^2.0.0: +unist-util-is@^2.1.2: version "2.1.3" resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-2.1.3.tgz#459182db31f4742fceaea88d429693cbf0043d20" integrity sha512-4WbQX2iwfr/+PfM4U3zd2VNXY+dWtZsN1fLnWEi2QQXA4qyDYAZcDMfXUX0Cu6XZUHHAO9q4nyxxLT4Awk1qUA== @@ -15552,6 +15809,13 @@ unist-util-is@^4.0.0: resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.0.3.tgz#e8b44db55fc20c43752b3346c116344d45d7c91d" integrity sha512-bTofCFVx0iQM8Jqb1TBDVRIQW03YkD3p66JOd/aCWuqzlLyUtx1ZAGw/u+Zw+SttKvSVcvTiKYbfrtLoLefykw== +unist-util-map@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/unist-util-map/-/unist-util-map-1.0.5.tgz#701069b72e1d1cc02db265502a5e82b77c2eb8b7" + integrity sha512-dFil/AN6vqhnQWNCZk0GF/G3+Q5YwsB+PqjnzvpO2wzdRtUJ1E8PN+XRE/PRr/G3FzKjRTJU0haqE0Ekl+O3Ag== + dependencies: + object-assign "^4.0.1" + unist-util-modify-children@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unist-util-modify-children/-/unist-util-modify-children-2.0.0.tgz#9c9c30d4e32502aabb3fde10d7872a17c86801e2" @@ -15564,13 +15828,27 @@ unist-util-position@^3.0.0: resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-3.1.0.tgz#1c42ee6301f8d52f47d14f62bbdb796571fa2d47" integrity sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA== -unist-util-remove-position@^1.0.0, unist-util-remove-position@^1.1.4: +unist-util-remove-position@^1.0.0: version "1.1.4" resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz#ec037348b6102c897703eee6d0294ca4755a2020" integrity sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A== dependencies: unist-util-visit "^1.1.0" +unist-util-remove-position@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz#5d19ca79fdba712301999b2b73553ca8f3b352cc" + integrity sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA== + dependencies: + unist-util-visit "^2.0.0" + +unist-util-remove@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/unist-util-remove/-/unist-util-remove-1.0.3.tgz#58ec193dfa84b52d5a055ffbc58e5444eb8031a3" + integrity sha512-mB6nCHCQK0pQffUAcCVmKgIWzG/AXs/V8qpS8K72tMPtOSCMSjDeMc5yN+Ye8rB0FhcE+JvW++o1xRNc0R+++g== + dependencies: + unist-util-is "^3.0.0" + unist-util-remove@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/unist-util-remove/-/unist-util-remove-2.0.1.tgz#fa13c424ff8e964f3aa20d1098b9a690c6bfaa39" @@ -15619,14 +15897,7 @@ unist-util-visit-parents@^3.0.0: "@types/unist" "^2.0.0" unist-util-is "^4.0.0" -unist-util-visit@^1.0.0, unist-util-visit@^1.1.0, unist-util-visit@^1.4.0, unist-util-visit@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.1.tgz#4724aaa8486e6ee6e26d7ff3c8685960d560b1e3" - integrity sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw== - dependencies: - unist-util-visit-parents "^2.0.0" - -unist-util-visit@^2.0.0, unist-util-visit@^2.0.2: +unist-util-visit@2.0.3, unist-util-visit@^2.0.0, unist-util-visit@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.3.tgz#c3703893146df47203bb8a9795af47d7b971208c" integrity sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q== @@ -15635,6 +15906,13 @@ unist-util-visit@^2.0.0, unist-util-visit@^2.0.2: unist-util-is "^4.0.0" unist-util-visit-parents "^3.0.0" +unist-util-visit@^1.0.0, unist-util-visit@^1.1.0, unist-util-visit@^1.4.0, unist-util-visit@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.1.tgz#4724aaa8486e6ee6e26d7ff3c8685960d560b1e3" + integrity sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw== + dependencies: + unist-util-visit-parents "^2.0.0" + universal-cookie@^4.0.0: version "4.0.4" resolved "https://registry.yarnpkg.com/universal-cookie/-/universal-cookie-4.0.4.tgz#06e8b3625bf9af049569ef97109b4bb226ad798d" @@ -15713,6 +15991,13 @@ update-notifier@^5.0.1: semver-diff "^3.1.1" xdg-basedir "^4.0.0" +upper-case-first@^1.1.0, upper-case-first@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/upper-case-first/-/upper-case-first-1.1.2.tgz#5d79bedcff14419518fd2edb0a0507c9b6859115" + integrity sha1-XXm+3P8UQZUY/S7bCgUHybaFkRU= + dependencies: + upper-case "^1.1.1" + upper-case@2.0.1, upper-case@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-2.0.1.tgz#6214d05e235dc817822464ccbae85822b3d8665f" @@ -15720,7 +16005,7 @@ upper-case@2.0.1, upper-case@^2.0.1: dependencies: tslib "^1.10.0" -upper-case@^1.1.1: +upper-case@^1.0.3, upper-case@^1.1.0, upper-case@^1.1.1, upper-case@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg= @@ -15901,6 +16186,11 @@ vfile-location@^2.0.0: resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.6.tgz#8a274f39411b8719ea5728802e10d9e0dff1519e" integrity sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA== +vfile-location@^3.0.0, vfile-location@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-3.2.0.tgz#d8e41fbcbd406063669ebf6c33d56ae8721d0f3c" + integrity sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA== + vfile-message@*, vfile-message@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a" @@ -15916,16 +16206,6 @@ vfile-message@^1.0.0: dependencies: unist-util-stringify-position "^1.1.1" -vfile@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/vfile/-/vfile-2.3.0.tgz#e62d8e72b20e83c324bc6c67278ee272488bf84a" - integrity sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w== - dependencies: - is-buffer "^1.1.4" - replace-ext "1.0.0" - unist-util-stringify-position "^1.0.0" - vfile-message "^1.0.0" - vfile@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/vfile/-/vfile-3.0.1.tgz#47331d2abe3282424f4a4bb6acd20a44c4121803" @@ -16036,7 +16316,7 @@ wbuf@^1.1.0, wbuf@^1.7.3: dependencies: minimalistic-assert "^1.0.0" -web-namespaces@^1.0.0, web-namespaces@^1.1.2: +web-namespaces@^1.0.0: version "1.1.4" resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.4.tgz#bc98a3de60dadd7faefc403d1076d529f5e030ec" integrity sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw== @@ -16121,6 +16401,14 @@ webpack-merge@^4.2.2: dependencies: lodash "^4.17.15" +webpack-sources@^0.2.0: + version "0.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.2.3.tgz#17c62bfaf13c707f9d02c479e0dcdde8380697fb" + integrity sha1-F8Yr+vE8cH+dAsR54Nzd6DgGl/s= + dependencies: + source-list-map "^1.1.1" + source-map "~0.5.3" + webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" From 877abd7170e172ff8a1b30f58216479e16873a0a Mon Sep 17 00:00:00 2001 From: Alexander Carls Date: Wed, 20 Jan 2021 22:02:14 +0100 Subject: [PATCH 2/7] Make the Tab component full-width, add missing languages --- website/gatsby-browser.js | 2 ++ website/src/components/mdx/tabs/panel.tsx | 8 ++++---- website/src/components/mdx/tabs/tabs.tsx | 11 ++++------- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/website/gatsby-browser.js b/website/gatsby-browser.js index 9fb5199c9fd..47e290d1f2b 100644 --- a/website/gatsby-browser.js +++ b/website/gatsby-browser.js @@ -6,3 +6,5 @@ import "prismjs/themes/prism-tomorrow.css"; require("prismjs/components/prism-csharp"); require("prismjs/components/prism-graphql"); require("prismjs/components/prism-json"); +require("prismjs/components/prism-bash"); +require("prismjs/components/prism-sql"); \ No newline at end of file diff --git a/website/src/components/mdx/tabs/panel.tsx b/website/src/components/mdx/tabs/panel.tsx index 971d560a9ff..5a2f625091d 100644 --- a/website/src/components/mdx/tabs/panel.tsx +++ b/website/src/components/mdx/tabs/panel.tsx @@ -3,15 +3,15 @@ import styled from "styled-components"; import { useTabs } from "./tabs"; export interface PanelProps { - value: string; + value: string; } export const Panel: FC = props => { - const { activeTab } = useTabs(); + const { activeTab } = useTabs(); - return activeTab === props.value ? {props.children} : null; + return activeTab === props.value ? <>{props.children} : null; }; -const Container = styled.div` +const Spacer = styled.div` margin-top: 0.5rem; `; \ No newline at end of file diff --git a/website/src/components/mdx/tabs/tabs.tsx b/website/src/components/mdx/tabs/tabs.tsx index bdb6c2afa8d..5ad90d43ea7 100644 --- a/website/src/components/mdx/tabs/tabs.tsx +++ b/website/src/components/mdx/tabs/tabs.tsx @@ -36,17 +36,14 @@ export const Tabs: FC & TabsComposition = ({ return ( -
- - {children} - -
+ {children} +
); }; -const Container = styled.div` - border-bottom: 1px solid #666677; +const ClosingBorder = styled.div` + border-bottom: 1px solid #cacada; margin-bottom: 1rem; `; From 89e7ec32e40a516005a9a9360e41fb9e9917b631 Mon Sep 17 00:00:00 2001 From: Alexander Carls Date: Fri, 22 Jan 2021 23:17:12 +0100 Subject: [PATCH 3/7] Redesign Tabs --- website/src/components/mdx/tabs/list.tsx | 6 +++++- website/src/components/mdx/tabs/panel.tsx | 9 ++------- website/src/components/mdx/tabs/tab.tsx | 10 ++++------ website/src/components/mdx/tabs/tabs.tsx | 7 ------- 4 files changed, 11 insertions(+), 21 deletions(-) diff --git a/website/src/components/mdx/tabs/list.tsx b/website/src/components/mdx/tabs/list.tsx index c780555bcb4..7219a31a7b7 100644 --- a/website/src/components/mdx/tabs/list.tsx +++ b/website/src/components/mdx/tabs/list.tsx @@ -3,5 +3,9 @@ import styled from "styled-components"; export const List = styled.div` display: flex; gap: 2rem; - border-bottom: 1px solid #666677; + background-color: #e7e9eb; + + ~ .gatsby-highlight { + margin-top: 0; + } `; \ No newline at end of file diff --git a/website/src/components/mdx/tabs/panel.tsx b/website/src/components/mdx/tabs/panel.tsx index 5a2f625091d..ae7b8c00305 100644 --- a/website/src/components/mdx/tabs/panel.tsx +++ b/website/src/components/mdx/tabs/panel.tsx @@ -1,5 +1,4 @@ import React, { FC } from "react"; -import styled from "styled-components"; import { useTabs } from "./tabs"; export interface PanelProps { @@ -9,9 +8,5 @@ export interface PanelProps { export const Panel: FC = props => { const { activeTab } = useTabs(); - return activeTab === props.value ? <>{props.children} : null; -}; - -const Spacer = styled.div` - margin-top: 0.5rem; -`; \ No newline at end of file + return activeTab === props.value ? <>{props.children} : null; +}; \ No newline at end of file diff --git a/website/src/components/mdx/tabs/tab.tsx b/website/src/components/mdx/tabs/tab.tsx index daa398293e6..494031fae6b 100644 --- a/website/src/components/mdx/tabs/tab.tsx +++ b/website/src/components/mdx/tabs/tab.tsx @@ -24,19 +24,17 @@ const TabButton = styled.button` font-size: 0.95rem; line-height: 1.2; color: #666677; - border-bottom: 2px solid transparent; :hover { color: #2d2d35; - border-color: #42424d; } &.active { - color: #f40010; - border-color: #f40010; + color: #000; + font-weight: 700; } @media only screen and (min-width: 820px) { - font-size: 1rem; - } + font-size: 18px; + } `; diff --git a/website/src/components/mdx/tabs/tabs.tsx b/website/src/components/mdx/tabs/tabs.tsx index 5ad90d43ea7..347bed565e1 100644 --- a/website/src/components/mdx/tabs/tabs.tsx +++ b/website/src/components/mdx/tabs/tabs.tsx @@ -2,7 +2,6 @@ import React, { createContext, FC, useContext, useMemo, useState } from 'react'; import { Tab, TabProps } from './tab'; import { Panel, PanelProps } from './panel'; import { List } from './list'; -import styled from 'styled-components'; interface TabsContext { activeTab: string; @@ -37,16 +36,10 @@ export const Tabs: FC & TabsComposition = ({ return ( {children} - ); }; -const ClosingBorder = styled.div` - border-bottom: 1px solid #cacada; - margin-bottom: 1rem; -`; - export const useTabs = (): TabsContext => { const context = useContext(TabsContext); if (!context) { From 48565c13ac19aa9e16bbaf68f3a2a60acc81d8af Mon Sep 17 00:00:00 2001 From: Alexander Carls Date: Fri, 22 Jan 2021 23:26:37 +0100 Subject: [PATCH 4/7] Fix ToC Active Heading scroll --- .../components/mdx/auto-linked-heading.tsx | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/website/src/components/mdx/auto-linked-heading.tsx b/website/src/components/mdx/auto-linked-heading.tsx index 7091d206b03..e25b087f2c8 100644 --- a/website/src/components/mdx/auto-linked-heading.tsx +++ b/website/src/components/mdx/auto-linked-heading.tsx @@ -5,22 +5,22 @@ import { IsSmallDesktop, IsPhablet } from "../doc-page/shared-style"; const slugger = require('github-slugger').slug interface AutoLinkedHeadingProps { - size: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' + size: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' } export const AutoLinkedHeading: FC = ({ children, size }) => { - const slug = slugger(children); - - return ( - - - - - - - {children} - - ) + const slug = slugger(children); + + return ( + + + + + + + {children} + + ) } const RelativeAnchor = styled.span` From 7b770ceaabc22fa5e681c6a57be9e1e404fd6609 Mon Sep 17 00:00:00 2001 From: Alexander Carls Date: Sun, 24 Jan 2021 15:54:58 +0100 Subject: [PATCH 5/7] Fixed pre horizontal scrolling, add spacing when a tab begins with text --- website/src/components/mdx/code-block.tsx | 145 ++++++++++++---------- website/src/components/mdx/tabs/list.tsx | 4 + 2 files changed, 82 insertions(+), 67 deletions(-) diff --git a/website/src/components/mdx/code-block.tsx b/website/src/components/mdx/code-block.tsx index 04f7b9fed94..07e7f5816ff 100644 --- a/website/src/components/mdx/code-block.tsx +++ b/website/src/components/mdx/code-block.tsx @@ -17,17 +17,18 @@ export const CodeBlock: FC = ({ const code = children.props.children; return ( - + + + + + {({ className, style, tokens, getLineProps, getTokenProps }) => ( -
-            
-              
-            
+          
             {tokens.map((line, i) => (
                = ({
   );
 };
 
+interface CodeIndicatorProps { language: string; } const CodeIndicator: FC = ({ language }) => {
+  const codeLanguage = codeLanguages[language];
+
+  return (
+    codeLanguage
+      ? {codeLanguage.content}
+      : null
+  )
+}
+
+const codeLanguages: Record = {
+  csharp: {
+    content: 'C#',
+    color: '#4f3903',
+    background: '#ffb806'
+  },
+  bash: {
+    content: 'Bash',
+    color: '#333',
+    background: '#0fd',
+  },
+  graphql: {
+    content: 'GraphQL',
+    color: '#fff',
+    background: '#e535ab',
+  },
+  http: {
+    content: 'HTTP',
+    color: '#efeaff',
+    background: '#8b76cc',
+  },
+  json: {
+    content: 'JSON',
+    color: '#fff',
+    background: '#1da0f2',
+  },
+  sdl: {
+    content: 'SDL',
+
+    color: '#fff',
+    background: '#e535ab',
+  },
+  sql: {
+    content: 'SQL',
+    color: '#fff',
+    background: '#80f',
+  },
+  xml: {
+    content: 'XML',
+    color: '#fff',
+    background: '#999',
+  }
+}
+
+const IndicatorContent = styled.div`
+    position: absolute;
+    z-index: 1;
+    top: 0;
+    left: 50px;
+    border-radius: 0px 0px 4px 4px;
+    padding: 2px 8px;
+    font-size: 0.8em;
+    font-weight: bold;
+    letter-spacing: 0.075em;
+    line-height: 1em;
+    text-transform: uppercase;
+`;
+
 const RE = /{([\d,-]+)}/
 
 const calculateLinesToHighlight = (meta: string): (index: number) => boolean => {
@@ -96,7 +168,6 @@ const LineContent = styled.span`
   display: table-cell;
 `;
 
-
 const Container = styled.div`
     position: relative;
     margin: 20px 0;
@@ -113,72 +184,12 @@ const Container = styled.div`
     > pre[class*="language-"] {
       margin: 0;
       padding: 30px 20px;
-
-      ::before {
-        position: absolute;
-        top: 0;
-        left: 50px;
-        border-radius: 0px 0px 4px 4px;
-        padding: 6px 8px;
-        font-size: 0.800em;
-        font-weight: bold;
-        letter-spacing: 0.075em;
-        line-height: 1em;
-        text-transform: uppercase;
-      }
-    }
-
-    > pre[class="code-bash"]::before {
-      content: "Bash";
-      color: #333;
-      background: #0fd;
-    }
-
-    > pre[class*="code-csharp"]::before {
-      content: "C#";
-      color: #4f3903;
-      background: #ffb806;
-    }
-
-    > pre[class*="code-graphql"]::before {
-      content: "GraphQL";
-      color: #fff;
-      background: #e535ab;
-    }
-
-    > pre[class*="code-http"]::before {
-      content: "HTTP";
-      color: #efeaff;
-      background: #8b76cc;
-    }
-
-    > pre[class*="code-json"]::before {
-      content: "JSON";
-      color: #fff;
-      background: #1da0f2;
-    }
-
-    > pre[class*="code-sdl"]::before {
-      content: "SDL";
-      color: #fff;
-      background: #e535ab;
-    }
-
-    > pre[class*="code-sql"]::before {
-      content: "SQL";
-      color: #fff;
-      background: #80f;
-    }
-
-    > pre[class*="code-xml"]::before {
-      content: "XML";
-      color: #fff;
-      background: #999;
     }
 `;
 
 const CopyPosition = styled.div`
   position: absolute;
+  z-index: 1;
   top: 0;
   right: 0;
 `;
\ No newline at end of file
diff --git a/website/src/components/mdx/tabs/list.tsx b/website/src/components/mdx/tabs/list.tsx
index 7219a31a7b7..f0c962cf953 100644
--- a/website/src/components/mdx/tabs/list.tsx
+++ b/website/src/components/mdx/tabs/list.tsx
@@ -8,4 +8,8 @@ export const List = styled.div`
     ~ .gatsby-highlight {
         margin-top: 0;
     }
+
+    ~ p {
+        margin-top: 14px;
+    }
 `;
\ No newline at end of file

From 3d109db230cdf900e08968b08087d33425fdb742 Mon Sep 17 00:00:00 2001
From: Alexander Carls 
Date: Mon, 25 Jan 2021 10:32:01 +0100
Subject: [PATCH 6/7] Review fixes

---
 website/package.json                             |  4 ++--
 website/src/blog/2019-01-24-schema-stitching.md  |  4 ++--
 .../src/components/mdx/auto-linked-heading.tsx   | 10 +++++-----
 website/src/components/mdx/code-block.tsx        | 16 ++++++++++------
 website/src/components/mdx/copy.tsx              |  8 ++++----
 website/src/components/mdx/example-tabs.tsx      | 16 ++++++++--------
 website/src/components/mdx/tabs/panel.tsx        |  4 ++--
 website/src/components/mdx/tabs/tab.tsx          |  4 ++--
 website/src/components/mdx/tabs/tabs.tsx         | 10 +++++-----
 9 files changed, 40 insertions(+), 36 deletions(-)

diff --git a/website/package.json b/website/package.json
index 7e7a7bc7a9a..e9afd63cb8c 100644
--- a/website/package.json
+++ b/website/package.json
@@ -25,7 +25,6 @@
     "@darth-knoppix/gatsby-plugin-feed": "^2.0.2",
     "@mdx-js/mdx": "^1.6.22",
     "@mdx-js/react": "^1.6.22",
-    "@types/prismjs": "^1.16.2",
     "algoliasearch": "^4.8.3",
     "gatsby": "^2.30.1",
     "gatsby-image": "^2.9.0",
@@ -64,6 +63,7 @@
   },
   "devDependencies": {
     "@types/algoliasearch": "^3.34.10",
+    "@types/prismjs": "^1.16.2",
     "@types/react": "^17.0.0",
     "@types/react-dom": "^17.0.0",
     "@types/react-helmet": "^6.1.0",
@@ -83,4 +83,4 @@
       "pre-commit": "pretty-quick --pattern \"./**/*\" --staged"
     }
   }
-}
+}
\ No newline at end of file
diff --git a/website/src/blog/2019-01-24-schema-stitching.md b/website/src/blog/2019-01-24-schema-stitching.md
index 9a6662fe297..20c152ff48a 100644
--- a/website/src/blog/2019-01-24-schema-stitching.md
+++ b/website/src/blog/2019-01-24-schema-stitching.md
@@ -171,7 +171,7 @@ foo(id:123) {
 
 Since, we did not want to cram a query like this into one string we allow this to be done with a flat path.
 
-```sdl
+```text
 foo(id:$arguments:arg1).bar.baz(top:1)
 ```
 
@@ -307,7 +307,7 @@ HTTP directives let you decorate a schema SDL and thus let you map REST services
 
 Moreover, we will introduce a cast feature to our delegation path. This will basically allow you to use fragments without having to write the code.
 
-```sdl
+```text
 foo.bar(a:1).qux(b:1)
 ```
 
diff --git a/website/src/components/mdx/auto-linked-heading.tsx b/website/src/components/mdx/auto-linked-heading.tsx
index e25b087f2c8..a5d8642a9e5 100644
--- a/website/src/components/mdx/auto-linked-heading.tsx
+++ b/website/src/components/mdx/auto-linked-heading.tsx
@@ -1,5 +1,5 @@
 import { Link } from "gatsby";
-import React, { FC } from "react";
+import React, { FunctionComponent } from "react";
 import styled from "styled-components";
 import { IsSmallDesktop, IsPhablet } from "../doc-page/shared-style";
 const slugger = require('github-slugger').slug
@@ -8,18 +8,18 @@ interface AutoLinkedHeadingProps {
   size: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'
 }
 
-export const AutoLinkedHeading: FC = ({ children, size }) => {
+export const AutoLinkedHeading: FunctionComponent = ({ children, size }) => {
   const slug = slugger(children);
 
   return (
-    
+    
       
         
           
         
       
       {children}
-    
+    
   )
 }
 
@@ -45,7 +45,7 @@ const AutoLink = styled(Link)`
 `;
 
 
-const H = styled.h1`
+const Heading = styled.h1`
 
   ${AutoLink} {
       visibility: hidden;
diff --git a/website/src/components/mdx/code-block.tsx b/website/src/components/mdx/code-block.tsx
index 07e7f5816ff..1a641b5aef9 100644
--- a/website/src/components/mdx/code-block.tsx
+++ b/website/src/components/mdx/code-block.tsx
@@ -1,4 +1,4 @@
-import React, { FC } from "react";
+import React, { FunctionComponent } from "react";
 import styled from "styled-components";
 import Highlight, { Language } from "prism-react-renderer";
 import Prism from "prismjs"
@@ -8,7 +8,7 @@ interface CodeBlockProps {
   children: any;
 }
 
-export const CodeBlock: FC = ({
+export const CodeBlock: FunctionComponent = ({
   children
 }) => {
   const language = children.props.className.replace(/language-/, '') as Language;
@@ -48,7 +48,11 @@ export const CodeBlock: FC = ({
   );
 };
 
-interface CodeIndicatorProps { language: string; } const CodeIndicator: FC = ({ language }) => {
+interface CodeIndicatorProps {
+  language: string;
+}
+
+const CodeIndicator: FunctionComponent = ({ language }) => {
   const codeLanguage = codeLanguages[language];
 
   return (
@@ -119,14 +123,14 @@ const IndicatorContent = styled.div`
     text-transform: uppercase;
 `;
 
-const RE = /{([\d,-]+)}/
+const matchHighlights = /{([\d,-]+)}/
 
 const calculateLinesToHighlight = (meta: string): (index: number) => boolean => {
-  if (!RE.test(meta)) {
+  if (!matchHighlights.test(meta)) {
     return () => false;
   }
 
-  const lineNumbers = RE.exec(meta)![1]
+  const lineNumbers = matchHighlights.exec(meta)![1]
     .split(',')
     .map((v) => v.split('-').map((v) => parseInt(v, 10)));
 
diff --git a/website/src/components/mdx/copy.tsx b/website/src/components/mdx/copy.tsx
index 0770ffc38a0..f8a5bcec441 100644
--- a/website/src/components/mdx/copy.tsx
+++ b/website/src/components/mdx/copy.tsx
@@ -1,7 +1,7 @@
-import React, { FC, useState } from "react"
+import React, { FunctionComponent, useState } from "react"
 import styled from "styled-components"
 
-const copyToClipboard = (content: string) => {
+function copyToClipboard(content: string): void {
     const el = document.createElement(`textarea`)
     el.value = content
     el.setAttribute(`readonly`, ``)
@@ -17,7 +17,7 @@ interface CoopyProps {
     content: string;
 }
 
-export const Copy: FC = ({ content }) => {
+export const Copy: FunctionComponent = ({ content }) => {
     const [showToast, setShowToast] = useState(false);
 
     return (
@@ -37,7 +37,7 @@ export const Copy: FC = ({ content }) => {
     )
 }
 
-const CopySuccessToast: FC = () => {
+const CopySuccessToast: FunctionComponent = () => {
     return (
         
             Copied code example
diff --git a/website/src/components/mdx/example-tabs.tsx b/website/src/components/mdx/example-tabs.tsx
index e0c10fd8e75..d841019ae71 100644
--- a/website/src/components/mdx/example-tabs.tsx
+++ b/website/src/components/mdx/example-tabs.tsx
@@ -1,13 +1,13 @@
-import React, { FC } from 'react';
+import React, { FunctionComponent } from 'react';
 import { Tabs } from './tabs';
 
 export interface ExampleTabsComposition {
-    Annotation: FC;
-    Code: FC;
-    Schema: FC;
+    Annotation: FunctionComponent;
+    Code: FunctionComponent;
+    Schema: FunctionComponent;
 }
 
-export const ExampleTabs: FC & ExampleTabsComposition = ({
+export const ExampleTabs: FunctionComponent & ExampleTabsComposition = ({
     children
 }) => {
     return (
@@ -22,15 +22,15 @@ export const ExampleTabs: FC & ExampleTabsComposition = ({
     )
 };
 
-const Annotation: FC = (
+const Annotation: FunctionComponent = (
     { children }
 ) => {children}
 
-const Code: FC = (
+const Code: FunctionComponent = (
     { children }
 ) => {children}
 
-const Schema: FC = (
+const Schema: FunctionComponent = (
     { children }
 ) => {children}
 
diff --git a/website/src/components/mdx/tabs/panel.tsx b/website/src/components/mdx/tabs/panel.tsx
index ae7b8c00305..c65c73152d3 100644
--- a/website/src/components/mdx/tabs/panel.tsx
+++ b/website/src/components/mdx/tabs/panel.tsx
@@ -1,11 +1,11 @@
-import React, { FC } from "react";
+import React, { FunctionComponent } from "react";
 import { useTabs } from "./tabs";
 
 export interface PanelProps {
   value: string;
 }
 
-export const Panel: FC = props => {
+export const Panel: FunctionComponent = props => {
   const { activeTab } = useTabs();
 
   return activeTab === props.value ? <>{props.children} : null;
diff --git a/website/src/components/mdx/tabs/tab.tsx b/website/src/components/mdx/tabs/tab.tsx
index 494031fae6b..a43cf6eb884 100644
--- a/website/src/components/mdx/tabs/tab.tsx
+++ b/website/src/components/mdx/tabs/tab.tsx
@@ -1,4 +1,4 @@
-import React, { FC } from "react";
+import React, { FunctionComponent } from "react";
 import styled from "styled-components";
 import { useTabs } from "./tabs";
 
@@ -6,7 +6,7 @@ export interface TabProps {
     value: string;
 }
 
-export const Tab: FC = ({ value, children }) => {
+export const Tab: FunctionComponent = ({ value, children }) => {
     const { activeTab, setActiveTab } = useTabs();
 
     return (
diff --git a/website/src/components/mdx/tabs/tabs.tsx b/website/src/components/mdx/tabs/tabs.tsx
index 347bed565e1..f3210d436c3 100644
--- a/website/src/components/mdx/tabs/tabs.tsx
+++ b/website/src/components/mdx/tabs/tabs.tsx
@@ -1,4 +1,4 @@
-import React, { createContext, FC, useContext, useMemo, useState } from 'react';
+import React, { createContext, FunctionComponent, useContext, useMemo, useState } from 'react';
 import { Tab, TabProps } from './tab';
 import { Panel, PanelProps } from './panel';
 import { List } from './list';
@@ -9,9 +9,9 @@ interface TabsContext {
 }
 
 export interface TabsComposition {
-    Tab: FC;
-    Panel: FC;
-    List: FC;
+    Tab: FunctionComponent;
+    Panel: FunctionComponent;
+    List: FunctionComponent;
 }
 
 const TabsContext = createContext(undefined);
@@ -20,7 +20,7 @@ export interface TabsProps {
     defaultValue: string;
 }
 
-export const Tabs: FC & TabsComposition = ({
+export const Tabs: FunctionComponent & TabsComposition = ({
     defaultValue, children
 }) => {
     const [activeTab, setActiveTab] = useState(defaultValue);

From fc52077303d06eb491558a2fa92139b703c23ae4 Mon Sep 17 00:00:00 2001
From: Alexander Carls 
Date: Mon, 25 Jan 2021 22:38:43 +0100
Subject: [PATCH 7/7] Run yarn format

---
 website/gatsby-browser.js                     |   2 +-
 website/gatsby-config.js                      |   4 +-
 website/mdx.types.ts                          |  68 +++----
 .../components/articles/article-sections.tsx  |  48 ++---
 .../components/blog-article/blog-article.tsx  |   6 +-
 .../components/mdx/auto-linked-heading.tsx    |  29 +--
 website/src/components/mdx/code-block.tsx     | 169 ++++++++++--------
 website/src/components/mdx/copy.tsx           | 148 ++++++++-------
 website/src/components/mdx/example-tabs.tsx   |  50 +++---
 website/src/components/mdx/tabs/index.tsx     |   2 +-
 website/src/components/mdx/tabs/list.tsx      |  20 +--
 website/src/components/mdx/tabs/panel.tsx     |   4 +-
 website/src/components/mdx/tabs/tab.tsx       |  48 ++---
 website/src/components/mdx/tabs/tabs.tsx      |  69 +++----
 website/src/components/structure/layout.tsx   |  14 +-
 .../src/components/widgets/blog-articles.tsx  |   4 +-
 .../api-reference/extending-filtering.md      |  27 +--
 .../api-reference/migrate-from-10-to-11.md    |   1 +
 .../hotchocolate/defining-a-schema/index.md   |   1 +
 .../hotchocolate/defining-a-schema/scalars.md |  28 +--
 .../unions-and-interfaces.md                  |  77 ++++----
 .../defining-a-schema/versioning.md           |  14 +-
 .../hotchocolate/fetching-data/filtering.md   |   9 +-
 .../docs/hotchocolate/integrations/index.md   |   1 -
 .../src/templates/blog-article-template.tsx   |   3 +-
 website/tsconfig.json                         |   7 +-
 26 files changed, 441 insertions(+), 412 deletions(-)

diff --git a/website/gatsby-browser.js b/website/gatsby-browser.js
index 47e290d1f2b..a04965d5213 100644
--- a/website/gatsby-browser.js
+++ b/website/gatsby-browser.js
@@ -7,4 +7,4 @@ require("prismjs/components/prism-csharp");
 require("prismjs/components/prism-graphql");
 require("prismjs/components/prism-json");
 require("prismjs/components/prism-bash");
-require("prismjs/components/prism-sql");
\ No newline at end of file
+require("prismjs/components/prism-sql");
diff --git a/website/gatsby-config.js b/website/gatsby-config.js
index af11f5615bf..491cd3de901 100644
--- a/website/gatsby-config.js
+++ b/website/gatsby-config.js
@@ -59,7 +59,7 @@ module.exports = {
               quality: 90,
             },
           },
-        ]
+        ],
       },
     },
     {
@@ -232,7 +232,7 @@ module.exports = {
                 const link = siteUrl + pathPrefix + node.frontmatter.path;
                 let image = node.frontmatter.featuredImage
                   ? siteUrl +
-                  node.frontmatter.featuredImage.childImageSharp.fluid.src
+                    node.frontmatter.featuredImage.childImageSharp.fluid.src
                   : null;
 
                 return {
diff --git a/website/mdx.types.ts b/website/mdx.types.ts
index d4720e93b21..540f929b0eb 100644
--- a/website/mdx.types.ts
+++ b/website/mdx.types.ts
@@ -1,34 +1,34 @@
-declare module '@mdx-js/react' {
-    import * as React from 'react'
-    type ComponentType =
-        | 'a'
-        | 'blockquote'
-        | 'code'
-        | 'del'
-        | 'em'
-        | 'h1'
-        | 'h2'
-        | 'h3'
-        | 'h4'
-        | 'h5'
-        | 'h6'
-        | 'hr'
-        | 'img'
-        | 'inlineCode'
-        | 'li'
-        | 'ol'
-        | 'p'
-        | 'pre'
-        | 'strong'
-        | 'sup'
-        | 'table'
-        | 'td'
-        | 'thematicBreak'
-        | 'tr'
-        | 'ul'
-    export interface MDXProviderProps {
-        children: React.ReactNode
-        components: Record>
-    }
-    export class MDXProvider extends React.Component { }
-}
\ No newline at end of file
+declare module "@mdx-js/react" {
+  import * as React from "react";
+  type ComponentType =
+    | "a"
+    | "blockquote"
+    | "code"
+    | "del"
+    | "em"
+    | "h1"
+    | "h2"
+    | "h3"
+    | "h4"
+    | "h5"
+    | "h6"
+    | "hr"
+    | "img"
+    | "inlineCode"
+    | "li"
+    | "ol"
+    | "p"
+    | "pre"
+    | "strong"
+    | "sup"
+    | "table"
+    | "td"
+    | "thematicBreak"
+    | "tr"
+    | "ul";
+  export interface MDXProviderProps {
+    children: React.ReactNode;
+    components: Record>;
+  }
+  export class MDXProvider extends React.Component {}
+}
diff --git a/website/src/components/articles/article-sections.tsx b/website/src/components/articles/article-sections.tsx
index 4ed2d44d530..31592b8715f 100644
--- a/website/src/components/articles/article-sections.tsx
+++ b/website/src/components/articles/article-sections.tsx
@@ -1,5 +1,11 @@
 import { graphql, Link } from "gatsby";
-import React, { Fragment, FunctionComponent, useCallback, useEffect, useState } from "react";
+import React, {
+  Fragment,
+  FunctionComponent,
+  useCallback,
+  useEffect,
+  useState,
+} from "react";
 import { useDispatch, useSelector } from "react-redux";
 import styled from "styled-components";
 import { ArticleSectionsFragment } from "../../../graphql-types";
@@ -16,9 +22,9 @@ export const ArticleSections: FunctionComponent = ({
 }) => {
   const dispatch = useDispatch();
   const [activeHeadingId, setActiveHeadingId] = useState();
-  const [headings, setHeadings] = useState([])
-  const yScrollPosition = useSelector((state) =>
-    state.common.yScrollPosition
+  const [headings, setHeadings] = useState([]);
+  const yScrollPosition = useSelector(
+    (state) => state.common.yScrollPosition
   );
 
   const handleCloseClick = useCallback(() => {
@@ -27,11 +33,11 @@ export const ArticleSections: FunctionComponent = ({
 
   useEffect(() => {
     const result = ((data.tableOfContents.items as TableOfContentItem[]) ?? [])
-      .flatMap(item => ([item, ...item.items ?? []]))
-      .map(item => ({
+      .flatMap((item) => [item, ...(item.items ?? [])])
+      .map((item) => ({
         id: item.url,
-        position: document.getElementById(item.url.substring(1))!
-          .offsetTop - 80
+        position:
+          document.getElementById(item.url.substring(1))!.offsetTop - 80,
       }))
       .reverse();
 
@@ -40,7 +46,7 @@ export const ArticleSections: FunctionComponent = ({
 
   useEffect(() => {
     setActiveHeadingId(
-      headings.find(id => yScrollPosition >= id.position)?.id
+      headings.find((id) => yScrollPosition >= id.position)?.id
     );
   }, [headings, yScrollPosition]);
 
@@ -68,30 +74,30 @@ interface TableOfContentProps {
   activeHeadingId: string | undefined;
 }
 
-const TableOfContent: FunctionComponent = (
-  { items, activeHeadingId }
-) => {
+const TableOfContent: FunctionComponent = ({
+  items,
+  activeHeadingId,
+}) => {
   return (
     
-      {items.map(item => (
+      {items.map((item) => (
         
-          
             {item.title}
           
-          {item.items &&
+          {item.items && (
             
-          }
+          )}
         
       ))}
     
-  )
-}
+  );
+};
 
 interface TableOfContentItem {
   title: string;
@@ -130,7 +136,7 @@ const TocItemContainer = styled.ul`
   }
 `;
 
-const TocLink = styled(props => )`
+const TocLink = styled((props) => )`
   font-size: 0.833em;
   color: #666;
 
diff --git a/website/src/components/blog-article/blog-article.tsx b/website/src/components/blog-article/blog-article.tsx
index 7e3d3326cde..656350002a4 100644
--- a/website/src/components/blog-article/blog-article.tsx
+++ b/website/src/components/blog-article/blog-article.tsx
@@ -45,9 +45,7 @@ export const BlogArticle: FunctionComponent = ({
             
           
           
-            
-              {body}
-            
+            {body}
           
         
         
@@ -58,7 +56,7 @@ export const BlogArticle: FunctionComponent = ({
 
 export const BlogArticleGraphQLFragment = graphql`
   fragment BlogArticle on Query {
-    mdx(frontmatter: { path: { eq: $path } }) { 
+    mdx(frontmatter: { path: { eq: $path } }) {
       excerpt
       frontmatter {
         featuredImage {
diff --git a/website/src/components/mdx/auto-linked-heading.tsx b/website/src/components/mdx/auto-linked-heading.tsx
index a5d8642a9e5..807da26649b 100644
--- a/website/src/components/mdx/auto-linked-heading.tsx
+++ b/website/src/components/mdx/auto-linked-heading.tsx
@@ -2,32 +2,41 @@ import { Link } from "gatsby";
 import React, { FunctionComponent } from "react";
 import styled from "styled-components";
 import { IsSmallDesktop, IsPhablet } from "../doc-page/shared-style";
-const slugger = require('github-slugger').slug
+const slugger = require("github-slugger").slug;
 
 interface AutoLinkedHeadingProps {
-  size: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'
+  size: "h1" | "h2" | "h3" | "h4" | "h5" | "h6";
 }
 
-export const AutoLinkedHeading: FunctionComponent = ({ children, size }) => {
+export const AutoLinkedHeading: FunctionComponent = ({
+  children,
+  size,
+}) => {
   const slug = slugger(children);
 
   return (
     
       
         
-          
+          
+            
+          
         
       
       {children}
     
-  )
-}
+  );
+};
 
 const RelativeAnchor = styled.span`
   position: relative;
 `;
 
-
 const AutoLink = styled(Link)`
   position: absolute;
   top: 0;
@@ -44,11 +53,9 @@ const AutoLink = styled(Link)`
   `)}
 `;
 
-
 const Heading = styled.h1`
-
   ${AutoLink} {
-      visibility: hidden;
+    visibility: hidden;
   }
 
   :hover {
@@ -56,4 +63,4 @@ const Heading = styled.h1`
       visibility: visible;
     }
   }
-`;
\ No newline at end of file
+`;
diff --git a/website/src/components/mdx/code-block.tsx b/website/src/components/mdx/code-block.tsx
index 1a641b5aef9..d18f338bc42 100644
--- a/website/src/components/mdx/code-block.tsx
+++ b/website/src/components/mdx/code-block.tsx
@@ -1,17 +1,18 @@
 import React, { FunctionComponent } from "react";
 import styled from "styled-components";
 import Highlight, { Language } from "prism-react-renderer";
-import Prism from "prismjs"
+import Prism from "prismjs";
 import { Copy } from "./copy";
 
 interface CodeBlockProps {
   children: any;
 }
 
-export const CodeBlock: FunctionComponent = ({
-  children
-}) => {
-  const language = children.props.className.replace(/language-/, '') as Language;
+export const CodeBlock: FunctionComponent = ({ children }) => {
+  const language = children.props.className.replace(
+    /language-/,
+    ""
+  ) as Language;
   const meta = children.props.metastring;
   const shouldHighlightLine = calculateLinesToHighlight(meta);
   const code = children.props.children;
@@ -25,7 +26,7 @@ export const CodeBlock: FunctionComponent = ({
       
         {({ className, style, tokens, getLineProps, getTokenProps }) => (
           
@@ -55,93 +56,101 @@ interface CodeIndicatorProps {
 const CodeIndicator: FunctionComponent = ({ language }) => {
   const codeLanguage = codeLanguages[language];
 
-  return (
-    codeLanguage
-      ? {codeLanguage.content}
-      : null
-  )
-}
+      }}
+    >
+      {codeLanguage.content}
+    
+  ) : null;
+};
 
-const codeLanguages: Record = {
+const codeLanguages: Record<
+  string,
+  { content: string; color: string; background: string }
+> = {
   csharp: {
-    content: 'C#',
-    color: '#4f3903',
-    background: '#ffb806'
+    content: "C#",
+    color: "#4f3903",
+    background: "#ffb806",
   },
   bash: {
-    content: 'Bash',
-    color: '#333',
-    background: '#0fd',
+    content: "Bash",
+    color: "#333",
+    background: "#0fd",
   },
   graphql: {
-    content: 'GraphQL',
-    color: '#fff',
-    background: '#e535ab',
+    content: "GraphQL",
+    color: "#fff",
+    background: "#e535ab",
   },
   http: {
-    content: 'HTTP',
-    color: '#efeaff',
-    background: '#8b76cc',
+    content: "HTTP",
+    color: "#efeaff",
+    background: "#8b76cc",
   },
   json: {
-    content: 'JSON',
-    color: '#fff',
-    background: '#1da0f2',
+    content: "JSON",
+    color: "#fff",
+    background: "#1da0f2",
   },
   sdl: {
-    content: 'SDL',
+    content: "SDL",
 
-    color: '#fff',
-    background: '#e535ab',
+    color: "#fff",
+    background: "#e535ab",
   },
   sql: {
-    content: 'SQL',
-    color: '#fff',
-    background: '#80f',
+    content: "SQL",
+    color: "#fff",
+    background: "#80f",
   },
   xml: {
-    content: 'XML',
-    color: '#fff',
-    background: '#999',
-  }
-}
+    content: "XML",
+    color: "#fff",
+    background: "#999",
+  },
+};
 
 const IndicatorContent = styled.div`
-    position: absolute;
-    z-index: 1;
-    top: 0;
-    left: 50px;
-    border-radius: 0px 0px 4px 4px;
-    padding: 2px 8px;
-    font-size: 0.8em;
-    font-weight: bold;
-    letter-spacing: 0.075em;
-    line-height: 1em;
-    text-transform: uppercase;
+  position: absolute;
+  z-index: 1;
+  top: 0;
+  left: 50px;
+  border-radius: 0px 0px 4px 4px;
+  padding: 2px 8px;
+  font-size: 0.8em;
+  font-weight: bold;
+  letter-spacing: 0.075em;
+  line-height: 1em;
+  text-transform: uppercase;
 `;
 
-const matchHighlights = /{([\d,-]+)}/
+const matchHighlights = /{([\d,-]+)}/;
 
-const calculateLinesToHighlight = (meta: string): (index: number) => boolean => {
+const calculateLinesToHighlight = (
+  meta: string
+): ((index: number) => boolean) => {
   if (!matchHighlights.test(meta)) {
     return () => false;
   }
 
-  const lineNumbers = matchHighlights.exec(meta)![1]
-    .split(',')
-    .map((v) => v.split('-').map((v) => parseInt(v, 10)));
+  const lineNumbers = matchHighlights
+    .exec(meta)![1]
+    .split(",")
+    .map((v) => v.split("-").map((v) => parseInt(v, 10)));
 
   return (index) => {
-    const lineNumber = index + 1
+    const lineNumber = index + 1;
     const inRange = lineNumbers.some(([start, end]) =>
       end ? lineNumber >= start && lineNumber <= end : lineNumber === start
-    )
-    return inRange
-  }
-}
+    );
+    return inRange;
+  };
+};
 
 const Pre = styled.pre`
   position: relative;
@@ -160,7 +169,9 @@ interface LineProps {
 const Line = styled.div`
   display: table-row;
 
-  ${({ highlight }) => highlight && `
+  ${({ highlight }) =>
+    highlight &&
+    `
     display: block;
     background-color: #444;
     margin: 0 -50px;
@@ -173,22 +184,22 @@ const LineContent = styled.span`
 `;
 
 const Container = styled.div`
-    position: relative;
-    margin: 20px 0;
-    overflow: initial;
-    font-size: 0.833em !important;
-    padding-right: 0 !important;
-    padding-left: 0 !important;
-
-    * {
-      font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace;
-      line-height: 1.5em !important;
-    }
-
-    > pre[class*="language-"] {
-      margin: 0;
-      padding: 30px 20px;
-    }
+  position: relative;
+  margin: 20px 0;
+  overflow: initial;
+  font-size: 0.833em !important;
+  padding-right: 0 !important;
+  padding-left: 0 !important;
+
+  * {
+    font-family: Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace;
+    line-height: 1.5em !important;
+  }
+
+  > pre[class*="language-"] {
+    margin: 0;
+    padding: 30px 20px;
+  }
 `;
 
 const CopyPosition = styled.div`
@@ -196,4 +207,4 @@ const CopyPosition = styled.div`
   z-index: 1;
   top: 0;
   right: 0;
-`;
\ No newline at end of file
+`;
diff --git a/website/src/components/mdx/copy.tsx b/website/src/components/mdx/copy.tsx
index f8a5bcec441..d3c981d09a4 100644
--- a/website/src/components/mdx/copy.tsx
+++ b/website/src/components/mdx/copy.tsx
@@ -1,95 +1,105 @@
-import React, { FunctionComponent, useState } from "react"
-import styled from "styled-components"
+import React, { FunctionComponent, useState } from "react";
+import styled from "styled-components";
 
 function copyToClipboard(content: string): void {
-    const el = document.createElement(`textarea`)
-    el.value = content
-    el.setAttribute(`readonly`, ``)
-    el.style.position = `absolute`
-    el.style.left = `-9999px`
-    document.body.appendChild(el)
-    el.select()
-    document.execCommand(`copy`)
-    document.body.removeChild(el)
+  const el = document.createElement(`textarea`);
+  el.value = content;
+  el.setAttribute(`readonly`, ``);
+  el.style.position = `absolute`;
+  el.style.left = `-9999px`;
+  document.body.appendChild(el);
+  el.select();
+  document.execCommand(`copy`);
+  document.body.removeChild(el);
 }
 
 interface CoopyProps {
-    content: string;
+  content: string;
 }
 
 export const Copy: FunctionComponent = ({ content }) => {
-    const [showToast, setShowToast] = useState(false);
+  const [showToast, setShowToast] = useState(false);
 
-    return (
-        <>
-             {
-                copyToClipboard(content);
+  return (
+    <>
+       {
+          copyToClipboard(content);
 
-                setShowToast(true);
-                setTimeout(() => {
-                    setShowToast(false);
-                }, 3000)
-            }}>
-                
-            
-            {showToast && }
-        
-    )
-}
+          setShowToast(true);
+          setTimeout(() => {
+            setShowToast(false);
+          }, 3000);
+        }}
+      >
+        
+          
+          
+        
+      
+      {showToast && }
+    
+  );
+};
 
 const CopySuccessToast: FunctionComponent = () => {
-    return (
-        
-            Copied code example
-        
-    )
-}
+  return (
+    
+      Copied code example
+    
+  );
+};
 
 const ToastText = styled.div`
-    font-size: 1.25rem;
-    font-family: sans-serif;
-    font-weight: bold;
-    color: #fff;
+  font-size: 1.25rem;
+  font-family: sans-serif;
+  font-weight: bold;
+  color: #fff;
 `;
 
 const ToastContainer = styled.div`
-    position: fixed;
-    left: 50%;
-    bottom: 30px;
-    transform: translateX(-50%);
-    z-index: 9999;
+  position: fixed;
+  left: 50%;
+  bottom: 30px;
+  transform: translateX(-50%);
+  z-index: 9999;
 
-    background-color: #f40010;
-    box-shadow: 0px 3px 6px 0px #828282;
-    padding: 20px;
-    border-radius: 4px;
-    opacity: 0;
-    animation: animation 3s cubic-bezier(0.98, 0.01, 0.53, 0.47);
+  background-color: #f40010;
+  box-shadow: 0px 3px 6px 0px #828282;
+  padding: 20px;
+  border-radius: 4px;
+  opacity: 0;
+  animation: animation 3s cubic-bezier(0.98, 0.01, 0.53, 0.47);
 
-    @keyframes animation {
-        0%,
-        50% {
-            opacity: 1;
-        }
+  @keyframes animation {
+    0%,
+    50% {
+      opacity: 1;
+    }
 
-        50%,
-        100% {
-            opacity: 0;
-        }
+    50%,
+    100% {
+      opacity: 0;
     }
+  }
 `;
 
 const CopyIconButton = styled.button`
-    display: flex;
-    align-items: center;
-    justify-content: center;
-    border-radius: 0 0 0 4px;
-    padding: 8px 8px;
-    background-color: #aaa;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  border-radius: 0 0 0 4px;
+  padding: 8px 8px;
+  background-color: #aaa;
 
-    > svg {
-        width: 18px;
-        height: 18px;
-        fill:	#2d2d2d;
-    }
+  > svg {
+    width: 18px;
+    height: 18px;
+    fill: #2d2d2d;
+  }
 `;
diff --git a/website/src/components/mdx/example-tabs.tsx b/website/src/components/mdx/example-tabs.tsx
index d841019ae71..26a0b865254 100644
--- a/website/src/components/mdx/example-tabs.tsx
+++ b/website/src/components/mdx/example-tabs.tsx
@@ -1,38 +1,38 @@
-import React, { FunctionComponent } from 'react';
-import { Tabs } from './tabs';
+import React, { FunctionComponent } from "react";
+import { Tabs } from "./tabs";
 
 export interface ExampleTabsComposition {
-    Annotation: FunctionComponent;
-    Code: FunctionComponent;
-    Schema: FunctionComponent;
+  Annotation: FunctionComponent;
+  Code: FunctionComponent;
+  Schema: FunctionComponent;
 }
 
 export const ExampleTabs: FunctionComponent & ExampleTabsComposition = ({
-    children
+  children,
 }) => {
-    return (
-        
-            
-                Annotation-based
-                Code-first
-                Schema-first
-            
-            {children}
-        
-    )
+  return (
+    
+      
+        Annotation-based
+        Code-first
+        Schema-first
+      
+      {children}
+    
+  );
 };
 
-const Annotation: FunctionComponent = (
-    { children }
-) => {children}
+const Annotation: FunctionComponent = ({ children }) => (
+  {children}
+);
 
-const Code: FunctionComponent = (
-    { children }
-) => {children}
+const Code: FunctionComponent = ({ children }) => (
+  {children}
+);
 
-const Schema: FunctionComponent = (
-    { children }
-) => {children}
+const Schema: FunctionComponent = ({ children }) => (
+  {children}
+);
 
 ExampleTabs.Annotation = Annotation;
 ExampleTabs.Code = Code;
diff --git a/website/src/components/mdx/tabs/index.tsx b/website/src/components/mdx/tabs/index.tsx
index ce0654dd1c6..aee022070b6 100644
--- a/website/src/components/mdx/tabs/index.tsx
+++ b/website/src/components/mdx/tabs/index.tsx
@@ -1 +1 @@
-export { Tabs } from './tabs'
\ No newline at end of file
+export { Tabs } from "./tabs";
diff --git a/website/src/components/mdx/tabs/list.tsx b/website/src/components/mdx/tabs/list.tsx
index f0c962cf953..cc1dad02e10 100644
--- a/website/src/components/mdx/tabs/list.tsx
+++ b/website/src/components/mdx/tabs/list.tsx
@@ -1,15 +1,15 @@
 import styled from "styled-components";
 
 export const List = styled.div`
-    display: flex;
-    gap: 2rem;
-    background-color: #e7e9eb;
+  display: flex;
+  gap: 2rem;
+  background-color: #e7e9eb;
 
-    ~ .gatsby-highlight {
-        margin-top: 0;
-    }
+  ~ .gatsby-highlight {
+    margin-top: 0;
+  }
 
-    ~ p {
-        margin-top: 14px;
-    }
-`;
\ No newline at end of file
+  ~ p {
+    margin-top: 14px;
+  }
+`;
diff --git a/website/src/components/mdx/tabs/panel.tsx b/website/src/components/mdx/tabs/panel.tsx
index c65c73152d3..9ee6cce501f 100644
--- a/website/src/components/mdx/tabs/panel.tsx
+++ b/website/src/components/mdx/tabs/panel.tsx
@@ -5,8 +5,8 @@ export interface PanelProps {
   value: string;
 }
 
-export const Panel: FunctionComponent = props => {
+export const Panel: FunctionComponent = (props) => {
   const { activeTab } = useTabs();
 
   return activeTab === props.value ? <>{props.children} : null;
-};
\ No newline at end of file
+};
diff --git a/website/src/components/mdx/tabs/tab.tsx b/website/src/components/mdx/tabs/tab.tsx
index a43cf6eb884..ee6082c68b3 100644
--- a/website/src/components/mdx/tabs/tab.tsx
+++ b/website/src/components/mdx/tabs/tab.tsx
@@ -3,38 +3,38 @@ import styled from "styled-components";
 import { useTabs } from "./tabs";
 
 export interface TabProps {
-    value: string;
+  value: string;
 }
 
 export const Tab: FunctionComponent = ({ value, children }) => {
-    const { activeTab, setActiveTab } = useTabs();
+  const { activeTab, setActiveTab } = useTabs();
 
-    return (
-         setActiveTab(value)}
-        >
-            {children}
-        
-    );
+  return (
+     setActiveTab(value)}
+    >
+      {children}
+    
+  );
 };
 
 const TabButton = styled.button`
-    padding: 1rem .25rem;
-    font-size: 0.95rem;
-    line-height: 1.2;
-    color: #666677;
+  padding: 1rem 0.25rem;
+  font-size: 0.95rem;
+  line-height: 1.2;
+  color: #666677;
 
-    :hover {
-        color: #2d2d35;
-    }
+  :hover {
+    color: #2d2d35;
+  }
 
-    &.active {
-        color: #000;
-        font-weight: 700;
-    }
+  &.active {
+    color: #000;
+    font-weight: 700;
+  }
 
-    @media only screen and (min-width: 820px) {
-      font-size: 18px;
-    }
+  @media only screen and (min-width: 820px) {
+    font-size: 18px;
+  }
 `;
diff --git a/website/src/components/mdx/tabs/tabs.tsx b/website/src/components/mdx/tabs/tabs.tsx
index f3210d436c3..04dbd4cbe66 100644
--- a/website/src/components/mdx/tabs/tabs.tsx
+++ b/website/src/components/mdx/tabs/tabs.tsx
@@ -1,51 +1,58 @@
-import React, { createContext, FunctionComponent, useContext, useMemo, useState } from 'react';
-import { Tab, TabProps } from './tab';
-import { Panel, PanelProps } from './panel';
-import { List } from './list';
+import React, {
+  createContext,
+  FunctionComponent,
+  useContext,
+  useMemo,
+  useState,
+} from "react";
+import { Tab, TabProps } from "./tab";
+import { Panel, PanelProps } from "./panel";
+import { List } from "./list";
 
 interface TabsContext {
-    activeTab: string;
-    setActiveTab: (value: string) => void;
+  activeTab: string;
+  setActiveTab: (value: string) => void;
 }
 
 export interface TabsComposition {
-    Tab: FunctionComponent;
-    Panel: FunctionComponent;
-    List: FunctionComponent;
+  Tab: FunctionComponent;
+  Panel: FunctionComponent;
+  List: FunctionComponent;
 }
 
 const TabsContext = createContext(undefined);
 
 export interface TabsProps {
-    defaultValue: string;
+  defaultValue: string;
 }
 
 export const Tabs: FunctionComponent & TabsComposition = ({
-    defaultValue, children
+  defaultValue,
+  children,
 }) => {
-    const [activeTab, setActiveTab] = useState(defaultValue);
-
-    const memoizedContextValue = useMemo(
-        () => ({
-            activeTab,
-            setActiveTab,
-        }),
-        [activeTab, setActiveTab],
-    );
-
-    return (
-        
-            {children}
-        
-    );
+  const [activeTab, setActiveTab] = useState(defaultValue);
+
+  const memoizedContextValue = useMemo(
+    () => ({
+      activeTab,
+      setActiveTab,
+    }),
+    [activeTab, setActiveTab]
+  );
+
+  return (
+    
+      {children}
+    
+  );
 };
 
 export const useTabs = (): TabsContext => {
-    const context = useContext(TabsContext);
-    if (!context) {
-        throw new Error('This component must be used within a  component.');
-    }
-    return context;
+  const context = useContext(TabsContext);
+  if (!context) {
+    throw new Error("This component must be used within a  component.");
+  }
+  return context;
 };
 
 Tabs.Tab = Tab;
diff --git a/website/src/components/structure/layout.tsx b/website/src/components/structure/layout.tsx
index 8f90b1b2a53..76f6d41ef5e 100644
--- a/website/src/components/structure/layout.tsx
+++ b/website/src/components/structure/layout.tsx
@@ -25,13 +25,13 @@ export const Layout: FunctionComponent = ({ children }) => {
 
   const components = {
     pre: CodeBlock,
-    h1: (props: any) => ,
-    h2: (props: any) => ,
-    h3: (props: any) => ,
-    h4: (props: any) => ,
-    h5: (props: any) => ,
-    h6: (props: any) => ,
-  }
+    h1: (props: any) => ,
+    h2: (props: any) => ,
+    h3: (props: any) => ,
+    h4: (props: any) => ,
+    h5: (props: any) => ,
+    h6: (props: any) => ,
+  };
 
   return (
     <>
diff --git a/website/src/components/widgets/blog-articles.tsx b/website/src/components/widgets/blog-articles.tsx
index 504693c77b0..ef14bf7e52f 100644
--- a/website/src/components/widgets/blog-articles.tsx
+++ b/website/src/components/widgets/blog-articles.tsx
@@ -26,8 +26,8 @@ export const BlogArticles: FunctionComponent = ({
         {edges.map(({ node }) => {
           const existingTags: string[] = node?.frontmatter?.tags
             ? (node.frontmatter.tags.filter(
-              (tag) => tag && tag.length > 0
-            ) as string[])
+                (tag) => tag && tag.length > 0
+              ) as string[])
             : [];
           const featuredImage = node?.frontmatter!.featuredImage
             ?.childImageSharp?.fluid as FluidObject;
diff --git a/website/src/docs/hotchocolate/api-reference/extending-filtering.md b/website/src/docs/hotchocolate/api-reference/extending-filtering.md
index 54b2e47aea4..90c5a0c7835 100644
--- a/website/src/docs/hotchocolate/api-reference/extending-filtering.md
+++ b/website/src/docs/hotchocolate/api-reference/extending-filtering.md
@@ -21,14 +21,9 @@ is applied to and the _operation_ equals (`eq`) that should operate on this fiel
 
 ```graphql
 {
-    movies(
-        where: {
-            franchise: {
-                eq: "Star Wars"
-            }
-        }) {
-        name
-    }
+  movies(where: { franchise: { eq: "Star Wars" } }) {
+    name
+  }
 }
 ```
 
@@ -37,16 +32,9 @@ Fields can also form paths. In the query below there are two _fields_ `genre` an
 
 ```graphql
 {
-    movies(
-        where: {
-            genre: {
-                totalMovieCount: {
-                    eq: 100
-                }
-            }
-        }) {
-        name
-    }
+  movies(where: { genre: { totalMovieCount: { eq: 100 } } }) {
+    name
+  }
 }
 ```
 
@@ -296,8 +284,7 @@ A little simplified this is what happens during visitation:
 ```graphql
 {
   users(
-    where: # Create SCOPE 1 with parameter x of type User
-    # instance[0] = x
+    where: # instance[0] = x # Create SCOPE 1 with parameter x of type User
     # level[0] = []
     {
       # Push property User.Company onto the scope
diff --git a/website/src/docs/hotchocolate/api-reference/migrate-from-10-to-11.md b/website/src/docs/hotchocolate/api-reference/migrate-from-10-to-11.md
index 70fe926b3f2..8c490ef4f92 100644
--- a/website/src/docs/hotchocolate/api-reference/migrate-from-10-to-11.md
+++ b/website/src/docs/hotchocolate/api-reference/migrate-from-10-to-11.md
@@ -666,6 +666,7 @@ downstream schemas.
 ```
 
 ## Batch responses
+
 In v10, responses to batched operations were returned as a JsonArray. In v11 the default is to return MultiPartChunked responses. To switch back to JsonArray, configure the HttpResult serializer as follows:
 
 ```csharp
diff --git a/website/src/docs/hotchocolate/defining-a-schema/index.md b/website/src/docs/hotchocolate/defining-a-schema/index.md
index 75eb455cda5..bbc0f573e91 100644
--- a/website/src/docs/hotchocolate/defining-a-schema/index.md
+++ b/website/src/docs/hotchocolate/defining-a-schema/index.md
@@ -292,6 +292,7 @@ public class Startup
     // Omitted code for brevity
 }
 ```
+
 
 
 
diff --git a/website/src/docs/hotchocolate/defining-a-schema/scalars.md b/website/src/docs/hotchocolate/defining-a-schema/scalars.md
index b7a1fc8000e..1d2d882d9aa 100644
--- a/website/src/docs/hotchocolate/defining-a-schema/scalars.md
+++ b/website/src/docs/hotchocolate/defining-a-schema/scalars.md
@@ -2,15 +2,15 @@
 title: "Scalars"
 ---
 
-A GraphQL schema should be built as expressive as possible. 
-Just from looking at the schema, a developer should know how to use the API. 
+A GraphQL schema should be built as expressive as possible.
+Just from looking at the schema, a developer should know how to use the API.
 In GraphQL you are not limited to only describing the structure of a type, you can even describe value types.
 Scalar types represent types that can hold data of a specific kind.
 Scalars are leaf types, meaning you cannot use e.g. `{ fieldname }` to further drill down into the type.
 
-A scalar must only know how to serialize and deserialize the value of the field. 
-GraphQL gives you the freedom to define custom scalar types. 
-This makes them the perfect tool for expressive value types. 
+A scalar must only know how to serialize and deserialize the value of the field.
+GraphQL gives you the freedom to define custom scalar types.
+This makes them the perfect tool for expressive value types.
 You could create a scalar for `CreditCardNumber` or `NonEmptyString`.
 
 The GraphQL specification defines the following scalars
@@ -39,9 +39,10 @@ In addition to the scalars defined by the specification, HotChocolate also suppo
 | `Any`       | This type can be anything, string, int, list or object etc. |
 
 # Using Scalars
+
 HotChocolate will automatically detect which scalars are in use and will only expose those in the introspection. This keeps the schema definition small, simple and clean.
 
-The schema discovers .NET types and binds the matching scalar to the type. 
+The schema discovers .NET types and binds the matching scalar to the type.
 HotChocolate, for example, automatically binds the `StringType` on a member of the type `System.String`.
 You can override these mappings by explicitly specifying type bindings on the request executor builder.
 
@@ -71,7 +72,7 @@ public void ConfigureServices(IServiceCollection services)
 
 # Any Type
 
-The `Any` scalar is a special type that can be compared to `object` in C#. 
+The `Any` scalar is a special type that can be compared to `object` in C#.
 `Any` allows us to specify any literal or return any output type.
 
 Consider the following type:
@@ -131,13 +132,14 @@ If you want to access an object dynamically without serializing it to a strongly
 Lists can be accessed generically by getting them as `IReadOnlyList` or as `ListValueNode`.
 
 # Custom Converter
+
 HotChocolate converts .Net types to match the types supported by the scalar of the field.
-By default, all standard .Net types have converters registered. 
+By default, all standard .Net types have converters registered.
 You can register converters and reuse the built-in scalar types.
 In case you use a non-standard library, e.g. [NodeTime](https://nodatime.org/), you can register a converter and use the standard `DateTimeType`.
 
 ```csharp
-public class Query 
+public class Query
 {
     public OffsetDateTime GetDateTime(OffsetDateTime offsetDateTime)
     {
@@ -145,7 +147,9 @@ public class Query
     }
 }
 ```
-*Startup*
+
+_Startup_
+
 ```csharp
 public void ConfigureServices(IServiceCollection services)
 {
@@ -160,8 +164,8 @@ public void ConfigureServices(IServiceCollection services)
 }
 ```
 
-
 # Custom Scalars
+
 All scalars in HotChocolate are defined though a `ScalarType`
 The easiest way to create a custom scalar is to extend `ScalarType`.
 This base class already includes basic serialization and parsing logic.
@@ -223,7 +227,7 @@ public sealed class CreditCardNumberType
 }
 ```
 
-By extending `ScalarType` you have full control over serialization and parsing. 
+By extending `ScalarType` you have full control over serialization and parsing.
 
 ```csharp
     public sealed class CreditCardNumberType
diff --git a/website/src/docs/hotchocolate/defining-a-schema/unions-and-interfaces.md b/website/src/docs/hotchocolate/defining-a-schema/unions-and-interfaces.md
index 6e67b2f76e2..8a89401f8d4 100644
--- a/website/src/docs/hotchocolate/defining-a-schema/unions-and-interfaces.md
+++ b/website/src/docs/hotchocolate/defining-a-schema/unions-and-interfaces.md
@@ -113,20 +113,20 @@ HotChocolate will register the types as implementations of the interface.
 In the annotation based approach, you most likely do not need to worry about interfaces at all.
 
 ```csharp
-public class Query 
+public class Query
 {
   public IMessage[] GetMessages([Service]IMessageRepo repo) => repo.GetMessages();
 }
 
 [GraphQLName("Message")]
-public interface IMessage 
+public interface IMessage
 {
   User SendBy { get; }
 
   DateTime CreatedAt { get; }
 }
 
-public class TextMessage : IMessage 
+public class TextMessage : IMessage
 {
   public User SendBy { get; set; }
 
@@ -153,12 +153,12 @@ _Configure Services_
   }
 ```
 
-You can also use classes as definitions for interfaces. 
+You can also use classes as definitions for interfaces.
 To mark a base class as an interface definition you can use `[InterfaceType]`.
 
 ```csharp
 [InterfaceType]
-public abstract class Message 
+public abstract class Message
 {
   public User SendBy { get; set; }
 
@@ -255,8 +255,8 @@ public void ConfigureServices(IServiceCollection services)
         }
         ")
         .AddResolver(
-            "Query", 
-            "messages", 
+            "Query",
+            "messages",
             (context, token) => context.Service().GetMessages());
 }
 ```
@@ -284,45 +284,44 @@ union GroupMember = User | Group
 
 ## Querying Unions
 
-Union types do not have fields in common.   
+Union types do not have fields in common.  
 You have to use [Inline Fragments 📄](https://spec.graphql.org/June2018/#sec-Inline-Fragments) to query for fields of a specific implementation.
 
 ```graphql
 {
-    accessControl {
-        __typename
-        ... on Group {
-          id
-        }
-        ... on User {
-          userName 
-        }
-    } 
+  accessControl {
+    __typename
+    ... on Group {
+      id
+    }
+    ... on User {
+      userName
+    }
+  }
 }
 ```
 
 ```json
 {
-    "accessControl": [
-        {
-          "__typename": "Group",
-          "id": "R3JvdXA6MQ=="
-        },
-        {
-          "__typename": "User",
-          "userName": "SpicyChicken404"
-        },
-        {
-          "__typename": "User",
-          "userName": "CookingMaster86"
-        }
-    ]
+  "accessControl": [
+    {
+      "__typename": "Group",
+      "id": "R3JvdXA6MQ=="
+    },
+    {
+      "__typename": "User",
+      "userName": "SpicyChicken404"
+    },
+    {
+      "__typename": "User",
+      "userName": "CookingMaster86"
+    }
+  ]
 }
 ```
 
 ## Union Definition
 
-
 
 
 
@@ -331,7 +330,7 @@ You can manage the membership of union types with a marker interface.
 
 ```csharp
 [UnionType("GroupMember")]
-public interface IGroupMember 
+public interface IGroupMember
 {
 }
 
@@ -343,12 +342,12 @@ public class Group : IGroupMember
   public IGroupMember[] Members { get; set; }
 }
 
-public class User : IGroupMember 
+public class User : IGroupMember
 {
   public string UserName { get; set; }
 }
 
-public class Query 
+public class Query
 {
   public IGroupMember[] GetAccessControl([Service]IAccessRepo repo) => repo.GetItems();
 }
@@ -364,7 +363,7 @@ _Configure Services_
           .AddGraphQLServer()
           // HotChocolate will pick up IGroupMember as a UnionType
           .AddQueryType()
-          // HotChocolate knows that User and Group implement IGroupMember and will add it to the 
+          // HotChocolate knows that User and Group implement IGroupMember and will add it to the
           // list of possible types of the UnionType
           .AddType()
           .AddType()
@@ -420,11 +419,11 @@ public void ConfigureServices(IServiceCollection services)
         union GroupMember = User | Group
         ")
         .AddResolver(
-            "Query", 
-            "accessControl", 
+            "Query",
+            "accessControl",
             (context, token) => context.Service().GetItems());
 }
 ```
 
 
-
\ No newline at end of file
+
diff --git a/website/src/docs/hotchocolate/defining-a-schema/versioning.md b/website/src/docs/hotchocolate/defining-a-schema/versioning.md
index 3bb928dbe78..b92a6e137f2 100644
--- a/website/src/docs/hotchocolate/defining-a-schema/versioning.md
+++ b/website/src/docs/hotchocolate/defining-a-schema/versioning.md
@@ -7,23 +7,23 @@ import { ExampleTabs } from "../../../components/mdx/example-tabs"
 GraphQL versioning works differently as the versioning you know from REST.
 While nothing stops you from versioning a GraphQL API like a REST API, it is not best practice to do so and most often is not needed.
 
-A GraphQL API can evolve. Many changes to a GraphQL Schema are non-breaking changes. 
+A GraphQL API can evolve. Many changes to a GraphQL Schema are non-breaking changes.
 You are free to add fields to a type for example. This does not break existing queries.
 
 If you remove fields or change the nullability of a field, the contract with existing queries is broken.
-In GraphQL it is possible to deprecate fields. 
+In GraphQL it is possible to deprecate fields.
 You can mark a field as deprecated to signal API consumers that a field is obsolete and will be removed in the future.
 
 
 
 
 ```csharp
-public class Query 
+public class Query
 {
     [Deprecated("Use `persons` field instead")]
-    public User[] GetUsers() { ... } 
+    public User[] GetUsers() { ... }
 
-    public User[] GetPersons() { ... } 
+    public User[] GetPersons() { ... }
 }
 ```
 
@@ -46,9 +46,9 @@ public class Query : QueryType
 ```sdl
 type Query {
     users: [Users] @deprecated("Use `persons` field instead")
-    persons: [Users] 
+    persons: [Users]
 }
 ```
 
 
-
\ No newline at end of file
+
diff --git a/website/src/docs/hotchocolate/fetching-data/filtering.md b/website/src/docs/hotchocolate/fetching-data/filtering.md
index 1eb59aa2176..a40e51c6f8c 100644
--- a/website/src/docs/hotchocolate/fetching-data/filtering.md
+++ b/website/src/docs/hotchocolate/fetching-data/filtering.md
@@ -199,7 +199,9 @@ Example:
 query {
   posts(
     first: 5
-    where: { OR: [{ title: {contains: "Doe" }}, { title: {contains: "John" }}] }
+    where: {
+      OR: [{ title: { contains: "Doe" } }, { title: { contains: "John" } }]
+    }
   ) {
     edges {
       node {
@@ -217,7 +219,7 @@ query {
 query {
   posts(
     first: 5
-    where: { title: {contains: "John", OR: { title: {contains: "Doe" }}} }
+    where: { title: { contains: "John", OR: { title: { contains: "Doe" } } } }
   ) {
     edges {
       node {
@@ -231,7 +233,8 @@ query {
 
 In this case the filters are applied like `title.Contains("John") && title.Contains("Doe")` rather than `title.Contains("John") || title.Contains("Doe")` how you probably intended it.
 
-## Removing AND / OR 
+## Removing AND / OR
+
 If you do not want to expose `AND` and `OR` you can remove these fields with the descriptor API:
 
 ```csharp
diff --git a/website/src/docs/hotchocolate/integrations/index.md b/website/src/docs/hotchocolate/integrations/index.md
index 5fd84573331..b666f99adb9 100644
--- a/website/src/docs/hotchocolate/integrations/index.md
+++ b/website/src/docs/hotchocolate/integrations/index.md
@@ -11,4 +11,3 @@ In case you might need help, check out our [Slack channel](https://join.slack.co
 Sorry for any inconvenience, and thank you for being patient!
 
 The ChilliCream Team
-
diff --git a/website/src/templates/blog-article-template.tsx b/website/src/templates/blog-article-template.tsx
index edca5e21223..f63b0ba3f34 100644
--- a/website/src/templates/blog-article-template.tsx
+++ b/website/src/templates/blog-article-template.tsx
@@ -17,8 +17,7 @@ const BlogArticleTemplate: FunctionComponent = ({