diff --git a/config.js b/config.js index 4292dbf08c..082896d79c 100644 --- a/config.js +++ b/config.js @@ -34,7 +34,7 @@ const config = { twitter: { site: '@prisma', creator: '@prisma', - image: '/social/docs-social.png' + image: '/social/docs-social.png', }, og: { site_name: 'Prisma', @@ -102,6 +102,6 @@ const config = { gitLink: 'https://github.com/prisma', }, }, -}; +} -module.exports = config; +module.exports = config diff --git a/content/01-getting-started/01-quickstart.mdx b/content/01-getting-started/01-quickstart.mdx index 8646aadd0f..f1a6e79723 100644 --- a/content/01-getting-started/01-quickstart.mdx +++ b/content/01-getting-started/01-quickstart.mdx @@ -4,6 +4,14 @@ metaTitle: 'Quickstart (5 min)' metaDescription: 'Get started with Prisma in 5 minutes. You will learn how to send queries to a SQLite database in a plain Node.js or TypeScript script using Prisma Client.' duration: '5 min' langSwitcher: ['typescript', 'node'] +techMetaTitles: [ + {name: 'node', value: 'Quickstart-NODE'}, + {name: 'typescript', value: 'Quickstart-TYPESCRIPT'} +] +techMetaDescriptions: [ + {name: 'node', value: 'Get started with Prisma in 5 minutes. You will learn how to send queries to a SQLite database in a plain Node.js script using Prisma Client.'}, + {name: 'typescript', value: 'Get started with Prisma in 5 minutes. You will learn how to send queries to a SQLite database in a plain TypeScript script using Prisma Client.'} +] --- ## Overview diff --git a/content/01-getting-started/02-setup-prisma/01-add-to-existing-project.mdx b/content/01-getting-started/02-setup-prisma/01-add-to-existing-project.mdx index 8edd5ef3b0..9c7c72eb8e 100644 --- a/content/01-getting-started/02-setup-prisma/01-add-to-existing-project.mdx +++ b/content/01-getting-started/02-setup-prisma/01-add-to-existing-project.mdx @@ -4,6 +4,12 @@ metaTitle: 'Add Prisma to an existing project (15 min)' metaDescription: 'Learn how to add Prisma to an existing Node.js or TypeScript project by connecting it to your database and generating Prisma Client for database access.' langSwitcher: ['typescript', 'node'] dbSwitcher: ['postgres', 'mysql'] +techMetaTitles: [ + {name: 'node-postgres', value: 'Add to existing project-NODE-POSTGRES'}, + {name: 'typescript-postgres', value: 'Add to existing project-TYPESCRIPT-POSTGRES'}, + {name: 'node-mysql', value: 'Add to existing project-NODE-MYSQL'}, + {name: 'typescript-mysql', value: 'Add to existing project-TYPESCRIPT-MYSQL'} +] --- ## Overview diff --git a/content/01-getting-started/02-setup-prisma/02-start-from-scratch-sql.mdx b/content/01-getting-started/02-setup-prisma/02-start-from-scratch-sql.mdx index f87fe0effd..62062c9468 100644 --- a/content/01-getting-started/02-setup-prisma/02-start-from-scratch-sql.mdx +++ b/content/01-getting-started/02-setup-prisma/02-start-from-scratch-sql.mdx @@ -4,6 +4,12 @@ metaTitle: 'Set up a new project with Prisma from scratch (SQL)' metaDescription: 'Learn how to create a new Node.js or TypeScript project from scratch by connecting Prisma to your database and generating Prisma Client for database access.' langSwitcher: ['typescript', 'node'] dbSwitcher: ['postgres', 'mysql'] +techMetaTitles: [ + {name: 'node-postgres', value: 'Start from scratch-NODE-POSTGRES'}, + {name: 'typescript-postgres', value: 'Start from scratch-TYPESCRIPT-POSTGRES'}, + {name: 'node-mysql', value: 'Start from scratch-NODE-MYSQL'}, + {name: 'typescript-mysql', value: 'Start from scratch-TYPESCRIPT-MYSQL'} +] --- ## Overview diff --git a/content/01-getting-started/02-setup-prisma/03-start-from-scratch-prisma-migrate.mdx b/content/01-getting-started/02-setup-prisma/03-start-from-scratch-prisma-migrate.mdx index 98bc19c967..ab5c485752 100644 --- a/content/01-getting-started/02-setup-prisma/03-start-from-scratch-prisma-migrate.mdx +++ b/content/01-getting-started/02-setup-prisma/03-start-from-scratch-prisma-migrate.mdx @@ -4,6 +4,12 @@ metaTitle: 'Set up a new project with Prisma from scratch (Prisma Migrate)' metaDescription: 'Learn how to create a new Node.js or TypeScript project from scratch by connecting Prisma to your database and generating Prisma Client for database access.' langSwitcher: ['typescript', 'node'] dbSwitcher: ['postgres', 'mysql'] +techMetaTitles: [ + {name: 'node-postgres', value: 'Start from scratch (Prisma Migrate)-NODE-POSTGRES'}, + {name: 'typescript-postgres', value: 'Start from scratch (Prisma Migrate)-TYPESCRIPT-POSTGRES'}, + {name: 'node-mysql', value: 'Start from scratch (Prisma Migrate)-NODE-MYSQL'}, + {name: 'typescript-mysql', value: 'Start from scratch (Prisma Migrate)-TYPESCRIPT-MYSQL'} +] --- ## Overview diff --git a/content/01-getting-started/04-example.mdx b/content/01-getting-started/04-example.mdx index c26cd3b9b2..5182cb59c2 100644 --- a/content/01-getting-started/04-example.mdx +++ b/content/01-getting-started/04-example.mdx @@ -1,9 +1,17 @@ --- title: 'Example' -metaTitle: '' -metaDescription: '' +metaTitle: 'Example metaTitle' +metaDescription: 'Example meta desc' langSwitcher: ['node', 'typescript'] dbSwitcher: ["postgres", "mysql"] +techMetaTitles: [ + {name: 'node-mysql', value: 'Example-Node-MySQL'}, + {name: 'typescript-mysql', value: 'Example-typescript-MySQL'} +] +techMetaDescriptions: [ + {name: 'node-mysql', value: 'Example-Node-MySQL desc'}, + {name: 'typescript-mysql', value: 'Example-typescript-MySQL desc'} +] --- ## Overview diff --git a/gatsby-config.js b/gatsby-config.js index 5eb04ca96e..c51d713602 100644 --- a/gatsby-config.js +++ b/gatsby-config.js @@ -1,5 +1,5 @@ -const config = require('./config'); -require('dotenv').config(); +const config = require('./config') +require('dotenv').config() const gatsbyRemarkPlugins = [ 'gatsby-remark-sectionize', @@ -7,10 +7,10 @@ const gatsbyRemarkPlugins = [ resolve: `gatsby-remark-autolink-headers`, options: { icon: ` - - - - + + + + `, className: `title-link`, }, @@ -18,10 +18,10 @@ const gatsbyRemarkPlugins = [ { resolve: `gatsby-remark-images`, }, -]; +] if (process.env.NODE_ENV === 'development') { - gatsbyRemarkPlugins.push('gatsby-remark-check-links'); + gatsbyRemarkPlugins.push('gatsby-remark-check-links') } module.exports = { @@ -43,7 +43,7 @@ module.exports = { resolve: `gatsby-plugin-google-analytics`, options: { trackingId: 'UA-74131346-14', - anonymize: true + anonymize: true, }, }, 'gatsby-plugin-react-helmet', @@ -105,4 +105,4 @@ module.exports = { }, 'gatsby-plugin-remove-trailing-slashes', ], -}; +} diff --git a/gatsby-node.js b/gatsby-node.js index df60d1997d..e301f3af20 100644 --- a/gatsby-node.js +++ b/gatsby-node.js @@ -1,53 +1,55 @@ -const path = require(`path`); -// const urlGenerator = require(`./src/utils/urlGenerator`) -// const { createFilePath } = require(`gatsby-source-filesystem`); +const path = require(`path`) exports.onCreateNode = ({ node, getNode, actions }) => { - const { createNodeField } = actions; + const { createNodeField } = actions if (node.internal.type === `Mdx`) { - const parent = getNode(node.parent); - - let value = parent.relativePath.replace(parent.ext, ''); - + const parent = getNode(node.parent) + let value = parent.relativePath.replace(parent.ext, '') if (value === 'index') { - value = ''; + value = '' } createNodeField({ - name: `slug`, node, + name: `slug`, value: `/${value}`, - }); + }) createNodeField({ - name: 'id', node, + name: 'id', value: node.id, - }); - createNodeField({ - name: 'title', - node, - value: node.frontmatter.title || parent.name, - }); - createNodeField({ - name: 'staticLink', - node, - value: node.frontmatter.staticLink || false, - }); - createNodeField({ - name: 'duration', - node, - value: node.frontmatter.duration || '', - }); - createNodeField({ - name: 'experimental', - node, - value: node.frontmatter.experimental || false, - }); + }) } -}; +} exports.createPages = ({ graphql, actions }) => { - const { createPage } = actions; + const { createPage } = actions + + const getTitle = (frontmatter, lang, db) => { + let pageSeoTitle = frontmatter.metaTitle || frontmatter.title + if (lang || db) { + const queryParam = `${lang ? `${lang}${db ? '-' : ''}` : ''}${db ? `${db}` : ''}` + const titleEntry = frontmatter.techMetaTitles + ? frontmatter.techMetaTitles.find(item => item.name === queryParam) + : null + pageSeoTitle = titleEntry ? titleEntry.value : pageSeoTitle + } + return pageSeoTitle + } + + const getDesc = (frontmatter, lang, db) => { + let pageSeoDesc= frontmatter.metaDescription || frontmatter.title + if (lang || db) { + const queryParam = `${lang ? `${lang}${db ? '-' : ''}` : ''}${db ? `${db}` : ''}` + const descEntry = frontmatter.techMetaDescriptions + ? frontmatter.techMetaDescriptions.find(item => item.name === queryParam) + : null + pageSeoDesc = descEntry ? descEntry.value : pageSeoDesc + } + + return pageSeoDesc + } + return new Promise((resolve, reject) => { graphql(` { @@ -55,11 +57,29 @@ exports.createPages = ({ graphql, actions }) => { edges { node { fields { + slug id } - tableOfContents - fields { - slug + frontmatter { + title + metaTitle + metaDescription + langSwitcher + dbSwitcher + techMetaTitles { + name + value + } + techMetaDescriptions { + name + value + } + } + body + parent { + ... on File { + relativePath + } } } } @@ -67,18 +87,63 @@ exports.createPages = ({ graphql, actions }) => { } `).then(result => { result.data.allMdx.edges.forEach(({ node }) => { + if (node.frontmatter.langSwitcher) { + if (node.frontmatter.dbSwitcher) { + node.frontmatter.langSwitcher.forEach(lang => + node.frontmatter.dbSwitcher.forEach(db => + createPage({ + path: `${node.fields.slug.replace(/\d+-/g, '')}-${lang}-${db}`, + component: path.resolve(`./src/layouts/articleLayout.tsx`), + context: { + id: node.fields.id, + seoTitle: getTitle(node.frontmatter, lang, db), + seoDescription: getDesc(node.frontmatter, lang, db) + }, + }) + ) + ) + } else { + node.frontmatter.langSwitcher.forEach(lang => + createPage({ + path: `${node.fields.slug.replace(/\d+-/g, '')}-${lang}`, + component: path.resolve(`./src/layouts/articleLayout.tsx`), + context: { + id: node.fields.id, + seoTitle: getTitle(node.frontmatter, lang, null), + seoDescription: getDesc(node.frontmatter, lang, null) + }, + }) + ) + } + } + + if (node.frontmatter.dbSwitcher && !node.frontmatter.langSwitcher) { + node.frontmatter.dbSwitcher.forEach(db => + createPage({ + path: `${node.fields.slug.replace(/\d+-/g, '')}-${db}`, + component: path.resolve(`./src/layouts/articleLayout.tsx`), + context: { + id: node.fields.id, + seoTitle: getTitle(node.frontmatter, null, db), + seoDescription: getDesc(node.frontmatter, null, db) + }, + }) + ) + } createPage({ - path: node.fields.slug ? node.fields.slug.replace(/\d+-/g, "") : '/', + path: node.fields.slug ? node.fields.slug.replace(/\d+-/g, '') : '/', component: path.resolve(`./src/layouts/articleLayout.tsx`), context: { id: node.fields.id, + seoTitle: getTitle(node.frontmatter), + seoDescription: getDesc(node.frontmatter) }, - }); - }); - resolve(); - }); - }); -}; + }) + }) + resolve() + }) + }) +} exports.onCreateWebpackConfig = ({ actions }) => { actions.setWebpackConfig({ @@ -89,5 +154,6 @@ exports.onCreateWebpackConfig = ({ actions }) => { buble: '@philpl/buble', // to reduce bundle size }, }, - }); -}; + }) +} + diff --git a/package.json b/package.json index c4ad241f2a..eb49c1803c 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "gatsby-plugin-manifest": "^2.0.24", "gatsby-plugin-mdx": "^1.0.73", "gatsby-plugin-offline": "^2.0.25", - "gatsby-plugin-react-helmet": "^3.0.9", + "gatsby-plugin-react-helmet": "^3.2.4", "gatsby-plugin-remove-trailing-slashes": "^2.2.1", "gatsby-plugin-robots-txt": "^1.5.0", "gatsby-plugin-sharp": "^2.4.5", @@ -44,7 +44,7 @@ "react": "^16.8.4", "react-copy-to-clipboard": "^5.0.2", "react-dom": "^16.8.4", - "react-helmet": "^5.2.0", + "react-helmet": "^6.0.0", "react-hooks-global-state": "^1.0.0", "react-hooks-testing-library": "^0.3.6", "react-instantsearch-dom": "^6.4.0", diff --git a/src/components/header.tsx b/src/components/header.tsx index 18b36b2a2e..b8091a2d0e 100644 --- a/src/components/header.tsx +++ b/src/components/header.tsx @@ -54,15 +54,6 @@ const HeaderNav = styled.div` } ` -const Title = styled.span` - font-size: 1.2rem; - color: #f5f8fa; - font-style: normal; - font-weight: bold; - line-height: 100%; - letter-spacing: -0.02em; -` - const LogoContainer = styled.div` padding-right: 0.75rem; ` diff --git a/src/components/parentTitleComp.tsx b/src/components/parentTitleComp.tsx index 2c427ce001..5b8a661d0b 100644 --- a/src/components/parentTitleComp.tsx +++ b/src/components/parentTitleComp.tsx @@ -17,7 +17,6 @@ interface ParentTitleProps { const ParentTitle = ({ slug }: ParentTitleProps) => { const { allMdx }: AllArticles = useAllArticlesQuery() - const parentTitle = getParentTitle(slug, allMdx) return {parentTitle} } diff --git a/src/components/search/input.tsx b/src/components/search/input.tsx index d7a576aa2f..ade11d7c9f 100644 --- a/src/components/search/input.tsx +++ b/src/components/search/input.tsx @@ -56,7 +56,7 @@ const Input = styled.input` const DEBOUNCE_DELAY = 500 -const SearchBox = ({ refine, onFocus, onBlur, currentRefinement, ...rest }: any) => { +const SearchBox = ({ refine, onFocus, currentRefinement, ...rest }: any) => { const [value, setValue] = React.useState(currentRefinement) const timeoutId = React.useRef(null) diff --git a/src/components/seo.tsx b/src/components/seo.tsx index ad0b7c7c90..ec86c7078a 100644 --- a/src/components/seo.tsx +++ b/src/components/seo.tsx @@ -1,106 +1,71 @@ import * as React from 'react' -import Helmet from 'react-helmet' +import { Helmet } from 'react-helmet' import favicon from '../images/favicon-32x32.png' import { useStaticQuery, graphql } from 'gatsby' -import { urlGenerator } from '../utils/urlGenerator' +import { useLocation } from '@reach/router' type SEOProps = { title?: string description?: string - keywords?: string - slug?: string } -const SEO = ({ title, description, keywords, slug }: SEOProps) => { - const { site } = useStaticQuery(query) +const SEO = ({ title, description }: SEOProps) => { + const location = useLocation() + const [pathTechParams] = location.pathname.split('/').splice(-1) + const { site, allSitePage } = useStaticQuery(query) const { siteMetadata: { pathPrefix, siteUrl, + keywords, twitter: { site: tSite, creator: tCreator, image: tUrl }, og: { site_name: oSite, - // type: oType, - // image: { alt: oImgAlt, url: oUrl, type: oImgType, width: oImgWidth, height: oImgHeight }, + type: oType, + image: { alt: oImgAlt, url: oUrl, type: oImgType, width: oImgWidth, height: oImgHeight }, }, }, } = site + const currentPage = allSitePage.edges.find( + (page: any) => page.node.path.split('/').splice(-1)[0] === pathTechParams + ) + + const seoTitle = + currentPage && currentPage.node.context ? currentPage.node.context.seoTitle : title + const seoDescription = + currentPage && currentPage.node.context ? currentPage.node.context.seoDescription : description + let canonicalUrl = pathPrefix ? siteUrl + pathPrefix : siteUrl - canonicalUrl = slug ? canonicalUrl + urlGenerator(slug) : canonicalUrl + canonicalUrl = pathTechParams ? `${canonicalUrl}/${pathTechParams}` : canonicalUrl return ( - + + {/* */} + {/* */} + {seoTitle} + + {keywords && } + {/* Twitter */} + + + + + + + {/* Open Graph */} + + + + + + + + + + + + ) } @@ -131,5 +96,16 @@ const query = graphql` } } } + allSitePage { + edges { + node { + context { + seoTitle + seoDescription + } + path + } + } + } } ` diff --git a/src/components/sidebar/tree.tsx b/src/components/sidebar/tree.tsx index f6b5b99868..d47cb3c92c 100644 --- a/src/components/sidebar/tree.tsx +++ b/src/components/sidebar/tree.tsx @@ -1,13 +1,14 @@ import React, { useState } from 'react' import TreeNode from './treeNode' import { AllEdges } from '../../interfaces/AllArticles.interface' -import { ArticleFields } from '../../interfaces/Article.interface' +import { ArticleFields, ArticleFrontmatter } from '../../interfaces/Article.interface' import { createGlobalState } from 'react-hooks-global-state' import { urlGenerator } from '../../utils/urlGenerator' interface TreeNode { node: { fields: ArticleFields + frontmatter: ArticleFrontmatter } } @@ -27,7 +28,8 @@ const calculateTreeData = (edges: any) => { accu: any, { node: { - fields: { slug, title, staticLink, duration, experimental }, + fields: { slug }, + frontmatter: { title, staticLink, duration, experimental }, }, }: TreeNode ) => { diff --git a/src/components/sidebar/treeNode.tsx b/src/components/sidebar/treeNode.tsx index d50bff2e93..a46ca18f88 100644 --- a/src/components/sidebar/treeNode.tsx +++ b/src/components/sidebar/treeNode.tsx @@ -180,8 +180,9 @@ const TreeNode = ({ {title && label !== 'index' && url !== '/01-getting-started/04-example' && ( {hasExpandButton ? ( diff --git a/src/components/toc.tsx b/src/components/toc.tsx index 740f34d0b3..ed32611139 100644 --- a/src/components/toc.tsx +++ b/src/components/toc.tsx @@ -38,8 +38,8 @@ const TOC = ({ location }: any) => { allMdx.edges.map((item: any) => { if (item !== undefined) { if ( - urlGenerator(item.node.fields.slug) === location.pathname || - config.gatsby.pathPrefix + urlGenerator(item.node.fields.slug) === location.pathname + location.pathname.includes(urlGenerator(item.node.fields.slug)) || + location.pathname.includes(config.gatsby.pathPrefix + urlGenerator(item.node.fields.slug)) ) { if (item.node.tableOfContents.items) { navItems = item.node.tableOfContents.items.map((innerItem: any, index: number) => { diff --git a/src/components/topSection.tsx b/src/components/topSection.tsx index 0cd4e7ca2c..7b94d7e107 100644 --- a/src/components/topSection.tsx +++ b/src/components/topSection.tsx @@ -3,8 +3,8 @@ import styled from 'styled-components' import TOC from './toc' import TechnologySwitch from './techSwitcher' import ParentTitle from './parentTitleComp' -import { useNavigate } from '@reach/router' import { urlGenerator } from '../utils/urlGenerator' +import { withPrefix } from 'gatsby' const TopSectionWrapper = styled.div` position: relative; @@ -12,7 +12,6 @@ const TopSectionWrapper = styled.div` margin-top: 3.5rem; margin-bottom: 4rem; } - .tech-switch-block { position: relative; } @@ -43,19 +42,21 @@ const SwitcherWrapper = styled.div` } ` -const TopSection = ({ - location, - title, - slug, - indexPage, - langSwitcher, - dbSwitcher, - onChangeParam, -}: any) => { - const navigate = useNavigate() +const TopSection = ({ location, title, slug, langSwitcher, dbSwitcher, navigate }: any) => { + const [pathTechParams] = location.pathname.split('/').splice(-1) const getTechFromParam = (type: string, defaultVal: string) => { - const searchParam = new URLSearchParams(location.search).get(type) - return searchParam ? searchParam : defaultVal + const isTechPath = location.pathname !== withPrefix(urlGenerator(slug)) + let tech = defaultVal + if (isTechPath) { + if (type === 'lang') { + ;[tech] = pathTechParams.split('-').splice(dbSwitcher ? -2 : -1) + } + + if (type === 'db') { + ;[tech] = pathTechParams.split('-').splice(-1) + } + } + return tech } const [langSelected, setLangSelected] = React.useState( @@ -64,15 +65,14 @@ const TopSection = ({ const [dbSelected, setDbSelected] = React.useState( dbSwitcher ? getTechFromParam('db', dbSwitcher[0]) : 'postgres' ) - const goToNewPath = () => { - const newParams = `?${langSwitcher ? `lang=${langSelected}${dbSwitcher ? '&' : ''}` : ''}${ - dbSwitcher ? `db=${dbSelected}` : '' + const newParams = `${langSwitcher ? `${langSelected}${dbSwitcher ? '-' : ''}` : ''}${ + dbSwitcher ? `${dbSelected}` : '' }` - - if (!(location.pathname.includes(urlGenerator(slug)) && location.search === newParams)) { - onChangeParam(newParams) - navigate(newParams, { replace: !location.search }) + if (!pathTechParams.includes(newParams)) { + navigate(withPrefix(`${urlGenerator(slug)}-${newParams}`), { + replace: location.pathname === urlGenerator(slug), + }) } } @@ -138,10 +138,10 @@ const TopSection = ({ return ( - {!indexPage && } + {title}
- {!indexPage &&
} +
{langSwitcher && (
- {!indexPage && } +
) } diff --git a/src/hooks/useAllArticlesQuery.ts b/src/hooks/useAllArticlesQuery.ts index 735783d0aa..b15f8db62e 100644 --- a/src/hooks/useAllArticlesQuery.ts +++ b/src/hooks/useAllArticlesQuery.ts @@ -7,14 +7,16 @@ export const useAllArticlesQuery = () => { allMdx(sort: { fields: fields___slug }) { edges { node { - rawBody - objectID: id - fields { - slug + frontmatter { title duration staticLink experimental + langSwitcher + dbSwitcher + } + fields { + slug } } } diff --git a/src/interfaces/AllArticles.interface.ts b/src/interfaces/AllArticles.interface.ts index b7e1f54db7..3094f28ff3 100644 --- a/src/interfaces/AllArticles.interface.ts +++ b/src/interfaces/AllArticles.interface.ts @@ -1,8 +1,7 @@ import { EdgeNode } from './EdgeNode.interface' -import { ArticleFields } from './Article.interface' export interface AllEdges { - edges?: [EdgeNode] + edges?: [EdgeNode] } export interface AllArticles { diff --git a/src/interfaces/Article.interface.ts b/src/interfaces/Article.interface.ts index 91acde8839..a86637568f 100644 --- a/src/interfaces/Article.interface.ts +++ b/src/interfaces/Article.interface.ts @@ -1,8 +1,13 @@ -import { AllEdges } from './AllArticles.interface' - export interface ArticleFields { slug: string +} + +export interface ArticleFrontmatter { title: string + metaTitle?: string + metaDescription?: string + langSwitcher?: string[] + dbSwitcher?: string[] staticLink?: boolean duration?: string experimental?: boolean @@ -13,15 +18,8 @@ export interface ArticleData { fields: ArticleFields body: string parent: any - frontmatter: { - title: string - metaTitle?: string - metaDescription?: string - langSwitcher?: string[] - dbSwitcher?: string[] - } + frontmatter: ArticleFrontmatter } - allMdx: AllEdges site: { siteMetadata: { docsLocation: string diff --git a/src/interfaces/EdgeNode.interface.ts b/src/interfaces/EdgeNode.interface.ts index 923ebc175a..c6c81e2eb3 100644 --- a/src/interfaces/EdgeNode.interface.ts +++ b/src/interfaces/EdgeNode.interface.ts @@ -1,5 +1,9 @@ -export interface EdgeNode { +import { ArticleFrontmatter } from './Article.interface' +import { ArticleFields } from './Article.interface' + +export interface EdgeNode { node: { - frontmatter: { [Property in keyof Type]: Type[Property] } + frontmatter: { [Property in keyof ArticleFrontmatter]: ArticleFrontmatter[Property] } + fields: { [Property in keyof ArticleFields]: ArticleFields[Property] } } } diff --git a/src/interfaces/Layout.interface.ts b/src/interfaces/Layout.interface.ts index e64437e51b..e328ff8ae9 100644 --- a/src/interfaces/Layout.interface.ts +++ b/src/interfaces/Layout.interface.ts @@ -1,8 +1,3 @@ -// interface Logo { -// image: string; -// link: string; -// } - export interface HeaderProps { logoLink: string links: { name: string; link: string }[] // create interface for this diff --git a/src/layouts/articleLayout.tsx b/src/layouts/articleLayout.tsx index 082f0227bc..771558dd3f 100644 --- a/src/layouts/articleLayout.tsx +++ b/src/layouts/articleLayout.tsx @@ -7,6 +7,7 @@ import PageBottom from '../components/pageBottom' import SEO from '../components/seo' import { graphql } from 'gatsby' import MDXRenderer from 'gatsby-plugin-mdx/mdx-renderer' +import { useNavigate } from '@reach/router' type ArticleLayoutProps = ArticleQueryData & RouterProps @@ -26,34 +27,11 @@ const ArticleLayout = ({ data, ...props }: ArticleLayoutProps) => { }, } = data - const [seoTitle, setSEOTitle] = React.useState(title || metaTitle) - const [seoUrl, setSEOUrl] = React.useState(slug) - - const changeSEODetails = (newParams: string) => { - const lang = new URLSearchParams(newParams).get('lang') - const db = new URLSearchParams(newParams).get('db') - - const newUrl = slug + newParams - const newTitleString = `${lang ? `-${lang}${db ? '-' : ''}` : ''}${db ? db : ''}` - if (!(seoTitle && seoTitle.includes(newTitleString))) { - setSEOTitle(title + newTitleString) - } - if (!seoUrl.includes(newParams)) { - setSEOUrl(newUrl) - } - } - - // To show the SEO details during initial load - React.useEffect(() => { - const params = `?${langSwitcher ? `lang=${langSwitcher[0]}${dbSwitcher ? '&' : ''}` : ''}${ - dbSwitcher ? `db=${dbSwitcher[0]}` : '' - }` - changeSEODetails(params) - }, []) + const navigate = useNavigate() return ( - +
{ slug={slug} langSwitcher={langSwitcher} dbSwitcher={dbSwitcher} - onChangeParam={changeSEODetails} + navigate={navigate} />
{body} @@ -97,15 +75,5 @@ export const query = graphql` dbSwitcher } } - allMdx { - edges { - node { - fields { - slug - title - } - } - } - } } ` diff --git a/src/utils/algolia.js b/src/utils/algolia.js index a48110e76d..6932eabd55 100644 --- a/src/utils/algolia.js +++ b/src/utils/algolia.js @@ -33,10 +33,11 @@ const handleRawBody = node => { }; const unnestFrontmatter = node => { - const { fields, ...rest } = node; + const { fields, frontmatter, ...rest } = node; return { ...fields, + ...frontmatter, ...rest, }; }; @@ -56,6 +57,8 @@ const queries = [ rawBody fields { slug + } + frontmatter { title } } diff --git a/src/utils/parentTitle.ts b/src/utils/parentTitle.ts index fc6424da9a..750ff0302e 100644 --- a/src/utils/parentTitle.ts +++ b/src/utils/parentTitle.ts @@ -1,5 +1,8 @@ export const getParentTitle = (slug: string, allMdx?: any) => { - const allContent = allMdx && allMdx.edges && allMdx.edges.map((mdx: any) => mdx.node.fields) + const allContent = + allMdx && + allMdx.edges && + allMdx.edges.map((mdx: any) => ({ ...mdx.node.fields, title: mdx.node.frontmatter.title })) allContent?.map((content: any) => { content.parentTitle = '' const parts = content.slug.split('/') diff --git a/yarn.lock b/yarn.lock index 7be11aef23..e271e326e7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -129,28 +129,7 @@ invariant "^2.2.4" semver "^5.5.0" -"@babel/core@7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.8.4.tgz#d496799e5c12195b3602d0fddd77294e3e38e80e" - integrity sha512-0LiLrB2PwrVI+a2/IEskBopDYSd8BCb3rOvH7D5tzoWd696TBEduBvuLVm4Nx6rltrLZqvI3MCalB2K2aVzQjA== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.8.4" - "@babel/helpers" "^7.8.4" - "@babel/parser" "^7.8.4" - "@babel/template" "^7.8.3" - "@babel/traverse" "^7.8.4" - "@babel/types" "^7.8.3" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.1" - json5 "^2.1.0" - lodash "^4.17.13" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/core@^7.1.0", "@babel/core@^7.5.5", "@babel/core@^7.8.7": +"@babel/core@7.9.0", "@babel/core@^7.1.0", "@babel/core@^7.5.5", "@babel/core@^7.8.7": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.9.0.tgz#ac977b538b77e132ff706f3b8a4dbad09c03c56e" integrity sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w== @@ -172,7 +151,7 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.4.0", "@babel/generator@^7.8.4", "@babel/generator@^7.8.8", "@babel/generator@^7.9.0", "@babel/generator@^7.9.5": +"@babel/generator@^7.4.0", "@babel/generator@^7.8.8", "@babel/generator@^7.9.0", "@babel/generator@^7.9.5": version "7.9.5" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.9.5.tgz#27f0917741acc41e6eaaced6d68f96c3fa9afaf9" integrity sha512-GbNIxVB3ZJe3tLeDm1HSn2AhuD/mVcyLDpgtLXa5tplmWrJdF/elxB56XNqCuD6szyNkDi6wuoKXln3QeBmCHQ== @@ -383,7 +362,7 @@ "@babel/traverse" "^7.8.3" "@babel/types" "^7.8.3" -"@babel/helpers@^7.8.4", "@babel/helpers@^7.9.0": +"@babel/helpers@^7.9.0": version "7.9.2" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.9.2.tgz#b42a81a811f1e7313b88cba8adc66b3d9ae6c09f" integrity sha512-JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA== @@ -401,7 +380,7 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.7.0", "@babel/parser@^7.8.4", "@babel/parser@^7.8.6", "@babel/parser@^7.8.8", "@babel/parser@^7.9.0": +"@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.7.0", "@babel/parser@^7.8.6", "@babel/parser@^7.8.8", "@babel/parser@^7.9.0": version "7.9.4" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.4.tgz#68a35e6b0319bbc014465be43828300113f2f2e8" integrity sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA== @@ -455,15 +434,7 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-numeric-separator" "^7.8.3" -"@babel/plugin-proposal-object-rest-spread@7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.3.tgz#eb5ae366118ddca67bed583b53d7554cad9951bb" - integrity sha512-8qvuPwU/xxUCt78HocNlv0mXXo0wdh9VT1R04WU8HGOfaOob26pF+9P5/lYjN/q7DHOX1bvX60hnhOvuQUJdbA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - -"@babel/plugin-proposal-object-rest-spread@^7.3.2", "@babel/plugin-proposal-object-rest-spread@^7.5.5", "@babel/plugin-proposal-object-rest-spread@^7.8.3", "@babel/plugin-proposal-object-rest-spread@^7.9.5": +"@babel/plugin-proposal-object-rest-spread@7.9.5", "@babel/plugin-proposal-object-rest-spread@^7.3.2", "@babel/plugin-proposal-object-rest-spread@^7.5.5", "@babel/plugin-proposal-object-rest-spread@^7.8.3", "@babel/plugin-proposal-object-rest-spread@^7.9.5": version "7.9.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.5.tgz#3fd65911306d8746014ec0d0cf78f0e39a149116" integrity sha512-VP2oXvAf7KCYTthbUHwBlewbl1Iq059f6seJGsxMizaCdgHIeczOr7FBqELhSqfkIl04Fi8okzWzl63UKbQmmg== @@ -1012,7 +983,7 @@ "@babel/parser" "^7.8.6" "@babel/types" "^7.8.6" -"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.7.0", "@babel/traverse@^7.8.3", "@babel/traverse@^7.8.4", "@babel/traverse@^7.8.6", "@babel/traverse@^7.9.0": +"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.7.0", "@babel/traverse@^7.8.3", "@babel/traverse@^7.8.6", "@babel/traverse@^7.9.0": version "7.9.5" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.9.5.tgz#6e7c56b44e2ac7011a948c21e283ddd9d9db97a2" integrity sha512-c4gH3jsvSuGUezlP6rzSJ6jf8fYjLj3hsMZRx/nX0h+fmHN0w+ekubRrHPqnMec0meycA2nwCsJ7dC8IPem2FQ== @@ -1598,42 +1569,43 @@ unist-builder "^1.0.1" unist-util-visit "^1.3.0" -"@mdx-js/mdx@^1.5.5", "@mdx-js/mdx@^1.5.8": - version "1.5.8" - resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-1.5.8.tgz#40740eaf0b0007b461cee8df13a7ae5a1af8064a" - integrity sha512-OzanPTN0p9GZOEVeEuEa8QsjxxGyfFOOnI/+V1oC1su9UIN4KUg1k4n/hWTZC+VZhdW1Lfj6+Ho8nIs6L+pbDA== +"@mdx-js/mdx@^1.5.5", "@mdx-js/mdx@^1.5.8", "@mdx-js/mdx@^1.5.9": + version "1.5.9" + resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-1.5.9.tgz#16078e1660a0f5d88b7d8e73bf09b989a755fcb9" + integrity sha512-K/qYIWwV5+V1ChVHga3ZzXlXtEuNsBOt/QI54K+DvD4ayu9WdbBv/953JdC2ZPrHQek48WIbKBH27omZPA6ZPA== dependencies: - "@babel/core" "7.8.4" + "@babel/core" "7.9.0" "@babel/plugin-syntax-jsx" "7.8.3" "@babel/plugin-syntax-object-rest-spread" "7.8.3" - "@mdx-js/util" "^1.5.8" - babel-plugin-apply-mdx-type-prop "^1.5.8" - babel-plugin-extract-import-names "^1.5.8" + "@mdx-js/util" "^1.5.9" + babel-plugin-apply-mdx-type-prop "^1.5.9" + babel-plugin-extract-import-names "^1.5.9" camelcase-css "2.0.1" detab "2.0.3" hast-util-raw "5.0.2" lodash.uniq "4.5.0" - mdast-util-to-hast "7.0.0" - remark-mdx "^1.5.8" - remark-parse "7.0.2" - remark-squeeze-paragraphs "3.0.4" + mdast-util-to-hast "8.2.0" + remark-footnotes "1.0.0" + remark-mdx "^1.5.9" + remark-parse "8.0.1" + remark-squeeze-paragraphs "4.0.0" style-to-object "0.3.0" - unified "8.4.2" + unified "9.0.0" unist-builder "2.0.3" unist-util-visit "2.0.2" -"@mdx-js/react@^1.5.5", "@mdx-js/react@^1.5.8": - version "1.5.8" - resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-1.5.8.tgz#fc38fe0eb278ae24666b2df3c751e726e33f5fac" - integrity sha512-L3rehITVxqDHOPJFGBSHKt3Mv/p3MENYlGIwLNYU89/iVqTLMD/vz8hL9RQtKqRoMbKuWpzzLlKIObqJzthNYg== +"@mdx-js/react@^1.5.5", "@mdx-js/react@^1.5.8", "@mdx-js/react@^1.5.9": + version "1.5.9" + resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-1.5.9.tgz#31873ab097fbe58c61c7585fc0be64e83182b6df" + integrity sha512-rengdUSedIdIQbXPSeafItCacTYocARAjUA51b6R1KNHmz+59efz7UmyTKr73viJQZ98ouu7iRGmOTtjRrbbWA== "@mdx-js/runtime@^1.5.8": - version "1.5.8" - resolved "https://registry.yarnpkg.com/@mdx-js/runtime/-/runtime-1.5.8.tgz#e1d3672816925f58fe60970b49d35b1de80fd3cf" - integrity sha512-eiF6IOv8+FuUp1Eit5hRiteZ658EtZtqTc1hJ0V9pgBqmT0DswiD/8h1M5+kWItWOtNbvc6Cz7oHMHD3PrfAzA== + version "1.5.9" + resolved "https://registry.yarnpkg.com/@mdx-js/runtime/-/runtime-1.5.9.tgz#77d961c2aebc18d77899ea4722e3918cfa34775f" + integrity sha512-h6nkjaRPXe9uNnXBObxxqHguOcXacpWqoBke5NJDPiDdaBlSl5RYG0JziKbgmJFRNEn2RkQlk/YPT46BghB7Fw== dependencies: - "@mdx-js/mdx" "^1.5.8" - "@mdx-js/react" "^1.5.8" + "@mdx-js/mdx" "^1.5.9" + "@mdx-js/react" "^1.5.9" buble-jsx-only "^0.19.8" "@mdx-js/tag@^0.20.3": @@ -1641,10 +1613,10 @@ resolved "https://registry.yarnpkg.com/@mdx-js/tag/-/tag-0.20.3.tgz#9e2306040b6469248c45a5f5baf44d0014db0493" integrity sha512-Co3gUFmNDv9z2LjuvLTpTj2NaOSHFxuoZjohcG0YK/KfECO+Ns9idzThMYjfEDe1vAf4c824rqlBYseedJdFNw== -"@mdx-js/util@^1.5.8": - version "1.5.8" - resolved "https://registry.yarnpkg.com/@mdx-js/util/-/util-1.5.8.tgz#cbadda0378af899c17ce1aa69c677015cab28448" - integrity sha512-a7Gjjw8bfBSertA/pTWBA/9WKEhgaSxvQE2NTSUzaknrzGFOhs4alZSHh3RHmSFdSWv5pUuzAgsWseMLhWEVkQ== +"@mdx-js/util@^1.5.9": + version "1.5.9" + resolved "https://registry.yarnpkg.com/@mdx-js/util/-/util-1.5.9.tgz#9cf5c3517301daf60f07961ce190f9f92d8da37d" + integrity sha512-hty9ftw/RENS+6pEXTy4vi46CO7cDRdhcELxCaklcGTuxeqi9OROJ+oi03RJd2O2V+3wY5geGAdXKlPQCOTE/Q== "@mikaelkristiansson/domready@^1.0.10": version "1.0.10" @@ -1722,14 +1694,14 @@ react-dev-utils "^9.1.0" "@prisma/cli@^2.0.0-beta.2": - version "2.0.0-beta.2" - resolved "https://registry.yarnpkg.com/@prisma/cli/-/cli-2.0.0-beta.2.tgz#5252cbe458fd7de479a6697ab5cffd1659a5762c" - integrity sha512-lD0cv/YC4g4SKByxH3hvzX1oS9cjRdCDU1Sh2inATaKcTHWPlxxgXQW4yYU2FF/HSWR9KK6YMAdO3ShkOl1PEQ== + version "2.0.0-beta.3" + resolved "https://registry.yarnpkg.com/@prisma/cli/-/cli-2.0.0-beta.3.tgz#54ac441bd538aade10acb07912b6751698c766df" + integrity sha512-VZxeTLLMenhkAyaY4tvTqChcW6QtUkiVvZj7N6A2vi6HsM1Tnf0fIZsiH1h3e/LEnaaDGIUC8F4Gkh2SeyeyCg== "@prisma/client@^2.0.0-beta.2": - version "2.0.0-beta.2" - resolved "https://registry.yarnpkg.com/@prisma/client/-/client-2.0.0-beta.2.tgz#dd7b357f65e8100cd6cc1b610d848b72217640bb" - integrity sha512-VhNYeeGTrFfLjB/JL7XPoWpxSTCb+YV+F3ggR1X0CGa4b/u6Kxy65aElLozs+yFdMQPVNkyg2PwUO8xQ7G9fpg== + version "2.0.0-beta.3" + resolved "https://registry.yarnpkg.com/@prisma/client/-/client-2.0.0-beta.3.tgz#a1b2cce4744973481d2891fcb919ab099f118952" + integrity sha512-itwRDl9PS8pD9InbHFeh1m3kyMibpZbkMHx9/Q7lNVaxvBJeJjNlVFmclL9AIFMDAUhD+KtspqkBwUHKgJpd7g== "@reach/router@^1.3.3": version "1.3.3" @@ -1914,9 +1886,9 @@ "@types/node" "*" "@types/node@*": - version "13.13.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.1.tgz#1ba94c5a177a1692518bfc7b41aec0aa1a14354e" - integrity sha512-uysqysLJ+As9jqI5yqjwP3QJrhOcUwBjHUlUxPxjbplwKoILvXVsmYWEhfmAQlrPfbRZmhJB007o4L9sKqtHqQ== + version "13.13.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.2.tgz#160d82623610db590a64e8ca81784e11117e5a54" + integrity sha512-LB2R1Oyhpg8gu4SON/mfforE525+Hi/M1ineICEDftqNVTyFg1aRIeGuTvXAoWHc4nbrFncWtJgMmoyRvuGh7A== "@types/node@^8.5.7": version "8.10.60" @@ -1954,9 +1926,9 @@ "@types/react" "*" "@types/react-native@*": - version "0.62.2" - resolved "https://registry.yarnpkg.com/@types/react-native/-/react-native-0.62.2.tgz#f3e150f308c27089cefbcbfa3eb6cc14db279b2f" - integrity sha512-oIUIbqZNN9vRnGKWHYbTVp/GyTqdaM5mfy1s4zsi6BYvHAaFOPZ32IrhIHno/A5XOv4wuGfE7g5fliDk/H0+/Q== + version "0.62.3" + resolved "https://registry.yarnpkg.com/@types/react-native/-/react-native-0.62.3.tgz#e95e6e2de14656e43280995fc260ef6b044ed1ea" + integrity sha512-IO4uYEkYQKgMwHGSo7mBcuGi5Li71aM2ddQ1i5JuzX/2jLzU8KwzOEXXbMvFnU/08eEPEyhSqq0mRECkdGT18A== dependencies: "@types/react" "*" @@ -2085,9 +2057,9 @@ tsutils "^3.17.1" "@urql/core@^1.11.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@urql/core/-/core-1.11.0.tgz#d92ec4191f0f2d0da6137405f7b7ec5a5ce8e8cf" - integrity sha512-7BOZDptq2p4ExnWp3/buG937wJCywRzVXSIgYQrBiFsQO7UI7EBY7BVD26aMOTEy8uZ/MT68ZUN+OIirZWQ5Wg== + version "1.11.5" + resolved "https://registry.yarnpkg.com/@urql/core/-/core-1.11.5.tgz#bfd4f7cb5d5475aa12e973d4540c0a057472de68" + integrity sha512-id341sUsA5NQqftKFMV2d8AtV1h+cX68+QVZOfueZPCLyLTt8JlZQOn8/uFJQ2vlg3swNMvqtWAGytqMZNutSg== dependencies: wonka "^4.0.9" @@ -2866,25 +2838,25 @@ babel-plugin-add-module-exports@^0.3.3: optionalDependencies: chokidar "^2.0.4" -babel-plugin-apply-mdx-type-prop@^1.5.8: - version "1.5.8" - resolved "https://registry.yarnpkg.com/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.5.8.tgz#f5ff6d9d7a7fcde0e5f5bd02d3d3cd10e5cca5bf" - integrity sha512-xYp5F9mAnZdDRFSd1vF3XQ0GQUbIulCpnuht2jCmK30GAHL8szVL7TgzwhEGamQ6yJmP/gEyYNM9OR5D2n26eA== +babel-plugin-apply-mdx-type-prop@^1.5.9: + version "1.5.9" + resolved "https://registry.yarnpkg.com/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.5.9.tgz#85d888c875fa7bc33e4695da11c9ece068cc6b98" + integrity sha512-3uNQ4Zo/TjOaB0E98m6ez2Xfrb7IYAs5BB4b8zQXggPCCppg5kjQEe8AglH6F6b94+q7Qv/cNTnoNqGXs6RBEA== dependencies: "@babel/helper-plugin-utils" "7.8.3" - "@mdx-js/util" "^1.5.8" + "@mdx-js/util" "^1.5.9" babel-plugin-dynamic-import-node@^2.3.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.2.tgz#14fb5accb300f9aac0151949f6192259f1403c4a" - integrity sha512-yvczAMjbc73xira9yTyF1XnEmkX8QwlUhmxuhimeMUeAaA6s7busTPRVDzhVG7eeBdNcRiZ/mAwFrJ9It4vQcg== + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== dependencies: object.assign "^4.1.0" -babel-plugin-extract-import-names@^1.5.8: - version "1.5.8" - resolved "https://registry.yarnpkg.com/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.5.8.tgz#418057261346451d689dff5036168567036b8cf6" - integrity sha512-LcLfP8ZRBZMdMAXHLugyvvd5PY0gMmLMWFogWAUsG32X6TYW2Eavx+il2bw73KDbW+UdCC1bAJ3NuU25T1MI3g== +babel-plugin-extract-import-names@^1.5.9: + version "1.5.9" + resolved "https://registry.yarnpkg.com/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.5.9.tgz#3f450a8952b2fb97ba7676d4e1e67eade45d1988" + integrity sha512-0V3/VJClG/pUn7wnlmWByJdhJklZWD4XvR9P+Q7wDWs9kS48lmmB5Pp6+zvbTBBQGlqJB5/bBtwMRm4zdoPNzg== dependencies: "@babel/helper-plugin-utils" "7.8.3" @@ -2952,10 +2924,10 @@ babel-plugin-transform-react-remove-prop-types@^0.4.24: resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a" integrity sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA== -babel-preset-gatsby@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/babel-preset-gatsby/-/babel-preset-gatsby-0.3.3.tgz#ddc97e3f3dee7a3d3b391af21b964d475b7153a2" - integrity sha512-C3SJlC6ygjijn33pmVyYzteiqwBjFg2VfKEXqEBuy+thOXLtmqAIES62am++ynOW9PGynwgQXb24XoOERqUvbw== +babel-preset-gatsby@^0.3.4: + version "0.3.4" + resolved "https://registry.yarnpkg.com/babel-preset-gatsby/-/babel-preset-gatsby-0.3.4.tgz#85cec0075bf6bfd8271036d99f5db195ea1c050e" + integrity sha512-ifDMkFf7VZOc7vT8LF5GQXl9EadBZTMaBbCRXH6YvkczwGbm6Alfg+8FFPv0pP7EFPXxrLw99CmnmncALWJeSA== dependencies: "@babel/plugin-proposal-class-properties" "^7.8.3" "@babel/plugin-proposal-nullish-coalescing-operator" "^7.8.3" @@ -3680,9 +3652,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000989, caniuse-lite@^1.0.30001039, caniuse-lite@^1.0.30001043: - version "1.0.30001045" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001045.tgz#a770df9de36ad6ca0c34f90eaa797a2dbbb1b619" - integrity sha512-Y8o2Iz1KPcD6FjySbk1sPpvJqchgxk/iow0DABpGyzA1UeQAuxh63Xh0Enj5/BrsYbXtCN32JmR4ZxQTCQ6E6A== + version "1.0.30001046" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001046.tgz#7a06d3e8fd8aa7f4d21c9a2e313f35f2d06b013e" + integrity sha512-CsGjBRYWG6FvgbyGy+hBbaezpwiqIOLkxQPY4A4Ea49g1eNsnQuESB+n4QM0BKii1j80MyJ26Ir5ywTQkbRE4g== capture-exit@^2.0.0: version "2.0.0" @@ -5468,9 +5440,9 @@ ee-first@1.1.1: integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= electron-to-chromium@^1.3.247, electron-to-chromium@^1.3.413: - version "1.3.414" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.414.tgz#9d0a92defefda7cc1cf8895058b892795ddd6b41" - integrity sha512-UfxhIvED++qLwWrAq9uYVcqF8FdeV9sU2S7qhiHYFODxzXRrd1GZRl/PjITHsTEejgibcWDraD8TQqoHb1aCBQ== + version "1.3.415" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.415.tgz#e50241c1e2553e46cfe956c9d95f9ab3fc9a9134" + integrity sha512-GbtYqKffx3sU8G0HxwXuJFfs58Q7+iwLa5rBwaULwET6jWW8IAQSrVnu7vEfiUIcMVfbYyFg7cw3zdm+EbBJmw== elliptic@^6.0.0: version "6.5.2" @@ -6720,9 +6692,9 @@ fsevents@^1.2.7: nan "^2.12.1" fsevents@~2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" - integrity sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA== + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== function-bind@^1.1.1: version "1.1.1" @@ -6758,10 +6730,10 @@ gatsby-cli@^1.1.58: yargs "^11.1.0" yurnalist "^0.2.1" -gatsby-cli@^2.11.14: - version "2.11.14" - resolved "https://registry.yarnpkg.com/gatsby-cli/-/gatsby-cli-2.11.14.tgz#0a32d35f8dcb5d77efb1a6da4d4ae9532a19148d" - integrity sha512-+0amqTcgkYYHoRKlzRED2aGb+Lee4sERWumEYeIHBE60wbBwosgcQ66n7ImMij321Gh/wq6t+GR4R4uzBKR+Jg== +gatsby-cli@^2.11.15: + version "2.11.15" + resolved "https://registry.yarnpkg.com/gatsby-cli/-/gatsby-cli-2.11.15.tgz#d146e10d9e9cd023afb903f375b2fa471b8c8c7d" + integrity sha512-L1g6QcMrCcLx66o3yzhkSHJDrckQDhEn205zwG6IzmDSSyMfPQUkm8jvYdp7TiRh9COcZnms7zBg26A7v96ftg== dependencies: "@babel/code-frame" "^7.8.3" "@babel/runtime" "^7.8.7" @@ -6779,7 +6751,7 @@ gatsby-cli@^2.11.14: fs-exists-cached "^1.0.0" fs-extra "^8.1.0" gatsby-core-utils "^1.1.3" - gatsby-recipes "^0.0.11" + gatsby-recipes "^0.0.12" gatsby-telemetry "^1.2.5" hosted-git-info "^3.0.4" is-valid-path "^0.1.1" @@ -6883,9 +6855,9 @@ gatsby-plugin-manifest@^2.0.24: sharp "^0.25.1" gatsby-plugin-mdx@^1.0.73: - version "1.1.9" - resolved "https://registry.yarnpkg.com/gatsby-plugin-mdx/-/gatsby-plugin-mdx-1.1.9.tgz#92164a64c8e0a6bdc3098ee91a916f8ddddd9d8f" - integrity sha512-BdXe2pGPU9oN2LKJd4GJUC1KNtPRHnMit0CxlMHasrmzVDyGYjkG6EngL43LziLbDeYQQYdyPkWFe2+gsHlUOQ== + version "1.1.10" + resolved "https://registry.yarnpkg.com/gatsby-plugin-mdx/-/gatsby-plugin-mdx-1.1.10.tgz#8740e3a418a7846d0d4bd9c7c694d41180caa89c" + integrity sha512-qoOjJYXUF9wRHHnnaVgmXY2UVOqohY2eB/12JqUdCUAnrm76W1RLfQPk+9BiHKObknrgcWNIHj1nJz2FDtLgkw== dependencies: "@babel/core" "^7.8.7" "@babel/generator" "^7.8.8" @@ -6948,7 +6920,7 @@ gatsby-plugin-page-creator@^2.2.3: lodash "^4.17.15" micromatch "^3.1.10" -gatsby-plugin-react-helmet@^3.0.9: +gatsby-plugin-react-helmet@^3.2.4: version "3.2.4" resolved "https://registry.yarnpkg.com/gatsby-plugin-react-helmet/-/gatsby-plugin-react-helmet-3.2.4.tgz#3a69488454a433c5cef5aa02263a8faffa8cabd1" integrity sha512-AHmmhodv7E8+qkHC5W0XSTgoQb1iHMB15Jn4NnEnDz696pZ448g1MCnX3bEMGCjYg2wHKJlo29EVoa4z5dS5lw== @@ -7041,10 +7013,10 @@ gatsby-react-router-scroll@^2.2.2: scroll-behavior "^0.9.12" warning "^3.0.0" -gatsby-recipes@^0.0.11: - version "0.0.11" - resolved "https://registry.yarnpkg.com/gatsby-recipes/-/gatsby-recipes-0.0.11.tgz#89fde84ee2b2e0a3b4b688cd29c0a6f0ad5d129c" - integrity sha512-ZVoKiKE7OztVGuYe9z0tOxyJaYdR1StGH77XSRqTu5fkJLjDoKKMEekIch33/EMKRI3pBQSZFa4A7ZeqWiYtCw== +gatsby-recipes@^0.0.12: + version "0.0.12" + resolved "https://registry.yarnpkg.com/gatsby-recipes/-/gatsby-recipes-0.0.12.tgz#e43ac0719790d216e5c04f7e5418e70a05a66e38" + integrity sha512-46SxuVAIZP3uC070m3TzAaC+HFFWe8Eoyplli5IuFG3Qh1t5cuv1D95F+f29qVdrgadStj9hkqI+rjJOSjNv8w== dependencies: "@babel/core" "^7.8.7" "@babel/standalone" "^7.9.5" @@ -7060,7 +7032,7 @@ gatsby-recipes@^0.0.11: babel-plugin-add-module-exports "^0.3.3" babel-plugin-dynamic-import-node "^2.3.0" babel-plugin-remove-graphql-queries "^2.8.3" - babel-preset-gatsby "^0.3.3" + babel-preset-gatsby "^0.3.4" cors "^2.8.5" detect-port "^1.3.0" event-source-polyfill "^1.0.12" @@ -7121,9 +7093,9 @@ gatsby-remark-check-links@^2.1.0: unist-util-visit "^1.4.1" gatsby-remark-images@^3.2.1: - version "3.2.4" - resolved "https://registry.yarnpkg.com/gatsby-remark-images/-/gatsby-remark-images-3.2.4.tgz#97b14cce9063ca8ceafc5500a5678c77a3368465" - integrity sha512-hnFuJF470SHAj8pUa6Vlq0TuS4ih+AXdpf6+jvD6nObrxyGqadrkaiGf/7OVsZcEeRwrB6jYZ8GW9Bev/SMMLQ== + version "3.2.5" + resolved "https://registry.yarnpkg.com/gatsby-remark-images/-/gatsby-remark-images-3.2.5.tgz#c3ee06abe3c726d2011883175de0b0cef0b4ba03" + integrity sha512-ZkkvjiDYVLXZTNG+Nnsrf7dJbLeHPLUB1vqRYZZzJQHi1kEwoENfBZ12glyKf6JPVzVqFZONPLcwuRDZAxHOrg== dependencies: "@babel/runtime" "^7.8.7" chalk "^2.4.2" @@ -7206,9 +7178,9 @@ gatsby-telemetry@^1.2.5: uuid "3.4.0" gatsby-transformer-remark@^2.3.2: - version "2.7.3" - resolved "https://registry.yarnpkg.com/gatsby-transformer-remark/-/gatsby-transformer-remark-2.7.3.tgz#11828281a8ec979a5dfbe1d17f99f83c88c78035" - integrity sha512-Q88BTKI5g2ITE61oKh7LD6F0ZG7aKw9Zulwo2fIYrPfvTI7WeLo/dG8XHmma3hBbvuK1hmPvtZVRNEDnhqB10w== + version "2.7.4" + resolved "https://registry.yarnpkg.com/gatsby-transformer-remark/-/gatsby-transformer-remark-2.7.4.tgz#20ce5e26716f7d6888c424b855f5cd7c343801b8" + integrity sha512-p/eMLpL5KcRM7ZBPk/C4TE95woS5aqzqkpyRPrATf03MbpAEQFCwpfvCf2P62IKF2PBMMMtd1LmS/1NZV+On2w== dependencies: "@babel/runtime" "^7.8.7" bluebird "^3.7.2" @@ -7246,9 +7218,9 @@ gatsby-transformer-sharp@^2.1.17: sharp "^0.25.1" gatsby@^2.19.17, gatsby@^2.20.28: - version "2.20.28" - resolved "https://registry.yarnpkg.com/gatsby/-/gatsby-2.20.28.tgz#cbc1c1049a34f3de27750a28a0d874fd5bcb0909" - integrity sha512-6EuGr4LmOXPCiGUlOTwGpIrY0A3tBQRRYSQb7pM3sOfLGWDcDX3nTTkVwzVuWj1t8YF1OZh/GYL0bDb8CWu6dw== + version "2.20.29" + resolved "https://registry.yarnpkg.com/gatsby/-/gatsby-2.20.29.tgz#6f19309e911684599577dc6924961e058d123909" + integrity sha512-Bk0HPaxQGSC8RHykg2i6ypKCsTQzKnzpQ+lkz56TMSggcifdQDwZbJtYwI/qr4Se4RJHQmEIjJq6kN79qQcOvQ== dependencies: "@babel/code-frame" "^7.8.3" "@babel/core" "^7.8.7" @@ -7272,7 +7244,7 @@ gatsby@^2.19.17, gatsby@^2.20.28: babel-plugin-add-module-exports "^0.3.3" babel-plugin-dynamic-import-node "^2.3.0" babel-plugin-remove-graphql-queries "^2.8.3" - babel-preset-gatsby "^0.3.3" + babel-preset-gatsby "^0.3.4" better-opn "1.0.0" better-queue "^3.8.10" bluebird "^3.7.2" @@ -7311,7 +7283,7 @@ gatsby@^2.19.17, gatsby@^2.20.28: flat "^4.1.0" fs-exists-cached "1.0.0" fs-extra "^8.1.0" - gatsby-cli "^2.11.14" + gatsby-cli "^2.11.15" gatsby-core-utils "^1.1.3" gatsby-graphiql-explorer "^0.3.3" gatsby-link "^2.3.4" @@ -9004,9 +8976,9 @@ is-fullwidth-code-point@^3.0.0: integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-function@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5" - integrity sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU= + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" + integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== is-generator-fn@^2.0.0: version "2.1.0" @@ -9965,7 +9937,7 @@ json3@^3.3.2: resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== -json5@2.x, json5@^2.1.0, json5@^2.1.2: +json5@2.x, json5@^2.1.2: version "2.1.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== @@ -10540,9 +10512,9 @@ make-dir@^2.0.0, make-dir@^2.1.0: semver "^5.6.0" make-dir@^3.0.0, make-dir@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.2.tgz#04a1acbf22221e1d6ef43559f43e05a90dbb4392" - integrity sha512-rYKABKutXa6vXTXhoV18cBE7PaewPXHe/Bdq4v+ZLMhxbWApkFFplT0LcbMW+6BbjnQXzZ/sAvSE/JdguApG5w== + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== dependencies: semver "^6.0.0" @@ -10636,6 +10608,13 @@ mdast-squeeze-paragraphs@^3.0.0: dependencies: unist-util-remove "^1.0.0" +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" @@ -10657,15 +10636,22 @@ mdast-util-definitions@^1.2.0, mdast-util-definitions@^1.2.5: dependencies: unist-util-visit "^1.0.0" -mdast-util-to-hast@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-7.0.0.tgz#589b562ce1ae0a7849e6c38536a9e7bc4f415e54" - integrity sha512-vxnXKSZgvPG2grZM3kxaF052pxsLtq8TPAkiMkqYj1nFTOazYUPXt3LFYIEB6Ws/IX7Uyvljzk64kD6DwZl/wQ== +mdast-util-definitions@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-2.0.1.tgz#2c931d8665a96670639f17f98e32c3afcfee25f3" + integrity sha512-Co+DQ6oZlUzvUR7JCpP249PcexxygiaKk9axJh+eRzHDZJk2julbIdKB4PXHVxdBuLzvJ1Izb+YDpj2deGMOuA== + dependencies: + unist-util-visit "^2.0.0" + +mdast-util-to-hast@8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-8.2.0.tgz#adf9f824defcd382e53dd7bace4282a45602ac67" + integrity sha512-WjH/KXtqU66XyTJQ7tg7sjvTw1OQcVV0hKdFh3BgHPwZ96fSBCQ/NitEHsN70Mmnggt+5eUUC7pCnK+2qGQnCA== dependencies: collapse-white-space "^1.0.0" detab "^2.0.0" - mdast-util-definitions "^1.2.0" - mdurl "^1.0.1" + mdast-util-definitions "^2.0.0" + mdurl "^1.0.0" trim-lines "^1.0.0" unist-builder "^2.0.0" unist-util-generated "^1.0.0" @@ -10754,7 +10740,7 @@ mdn-data@2.0.6: resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.6.tgz#852dc60fcaa5daa2e8cf6c9189c440ed3e042978" integrity sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA== -mdurl@^1.0.1: +mdurl@^1.0.0, mdurl@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= @@ -10897,11 +10883,16 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@1.43.0, "mime-db@>= 1.43.0 < 2", mime-db@^1.28.0: +mime-db@1.43.0: version "1.43.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ== +"mime-db@>= 1.43.0 < 2", mime-db@^1.28.0: + version "1.44.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" + integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== + mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: version "2.1.26" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06" @@ -11144,9 +11135,9 @@ name-all-modules-plugin@^1.0.1: integrity sha1-Cr+2rYNXGLn7Te8GdOBmV6lUN1w= nan@^2.12.1: - version "2.14.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" - integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== + version "2.14.1" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" + integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== nanomatch@^1.2.9: version "1.2.13" @@ -11222,9 +11213,9 @@ no-case@^2.2.0, no-case@^2.3.2: lower-case "^1.1.1" node-abi@^2.7.0: - version "2.15.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.15.0.tgz#51d55cc711bd9e4a24a572ace13b9231945ccb10" - integrity sha512-FeLpTS0F39U7hHZU1srAK4Vx+5AHNVOTP+hxBNQknR/54laTHSFIJkDWDqiquY1LeLUgTfPN7sLPhMubx0PLAg== + version "2.16.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.16.0.tgz#7df94e9c0a7a189f4197ab84bac8089ef5894992" + integrity sha512-+sa0XNlWDA6T+bDLmkCUYn6W5k5W6BPRL6mqzSCs6H/xUgtl4D5x2fORKDzopKiU6wsyn/+wXlRXwXeSp+mtoA== dependencies: semver "^5.4.1" @@ -12812,9 +12803,9 @@ prettier@^1.16.4: integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== prettier@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.0.4.tgz#2d1bae173e355996ee355ec9830a7a1ee05457ef" - integrity sha512-SVJIQ51spzFDvh4fIbCLvciiDMCrRhlN3mbZvv/+ycjvmF5E73bKdGfU8QDLNmjYJf+lsGnDBC4UUnvTe5OO0w== + version "2.0.5" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.0.5.tgz#d6d56282455243f2f92cc1716692c08aa31522d4" + integrity sha512-7PtVymN48hGcO4fGjybyBSIWDsLU4H4XlvOHfq91pz9kkGlonzwTfYkaIEwiRg/dAJF9YlbsduBAgtYLi+8cFg== pretty-bytes@^4.0.2: version "4.0.2" @@ -13237,7 +13228,7 @@ react-error-overlay@^6.0.3: resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.7.tgz#1dcfb459ab671d53f660a991513cb2f0a0553108" integrity sha512-TAv1KJFh3RhqxNvhzxj6LeT5NWklP6rDr2a0jaTfsZ5wSZWHOGeqQyejUp3xxLfPt2UpyJEcVQB/zyPcmonNFA== -react-fast-compare@^2.0.2: +react-fast-compare@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9" integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw== @@ -13247,15 +13238,15 @@ react-fast-compare@^3.0.0: resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.0.1.tgz#884d339ce1341aad22392e7a88664c71da48600e" integrity sha512-C5vP0J644ofZGd54P8++O7AvrqMEbrGf8Ue0eAUJLJyw168dAX2aiYyX/zcY/eSNwO0IDjsKUaLE6n83D+TnEg== -react-helmet@^5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/react-helmet/-/react-helmet-5.2.1.tgz#16a7192fdd09951f8e0fe22ffccbf9bb3e591ffa" - integrity sha512-CnwD822LU8NDBnjCpZ4ySh8L6HYyngViTZLfBBb3NjtrpN8m49clH8hidHouq20I51Y6TpCTISCBbqiY5GamwA== +react-helmet@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/react-helmet/-/react-helmet-6.0.0.tgz#fcb93ebaca3ba562a686eb2f1f9d46093d83b5f8" + integrity sha512-My6S4sa0uHN/IuVUn0HFmasW5xj9clTkB9qmMngscVycQ5vVG51Qp44BEvLJ4lixupTwDlU9qX1/sCrMN4AEPg== dependencies: object-assign "^4.1.1" - prop-types "^15.5.4" - react-fast-compare "^2.0.2" - react-side-effect "^1.1.0" + prop-types "^15.7.2" + react-fast-compare "^2.0.4" + react-side-effect "^2.1.0" react-hooks-global-state@^1.0.0: version "1.0.0" @@ -13351,12 +13342,10 @@ react-refresh@^0.7.0: resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.7.2.tgz#f30978d21eb8cac6e2f2fde056a7d04f6844dd50" integrity sha512-u5l7fhAJXecWUJzVxzMRU2Zvw8m4QmDNHlTrT5uo3KBlYBhmChd7syAakBoay1yIiVhx/8Fi7a6v6kQZfsw81Q== -react-side-effect@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/react-side-effect/-/react-side-effect-1.2.0.tgz#0e940c78faba0c73b9b0eba9cd3dda8dfb7e7dae" - integrity sha512-v1ht1aHg5k/thv56DRcjw+WtojuuDHFUgGfc+bFHOWsF4ZK6C2V57DO0Or0GPsg6+LSTE0M6Ry/gfzhzSwbc5w== - dependencies: - shallowequal "^1.0.1" +react-side-effect@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/react-side-effect/-/react-side-effect-2.1.0.tgz#1ce4a8b4445168c487ed24dab886421f74d380d3" + integrity sha512-IgmcegOSi5SNX+2Snh1vqmF0Vg/CbkycU9XZbOHJlZ6kMzTmi3yc254oB1WCkgA7OQtIAoLmcSFuHTc/tlcqXg== react-simple-code-editor@^0.10.0: version "0.10.0" @@ -13676,39 +13665,45 @@ regjsparser@^0.6.4: dependencies: jsesc "~0.5.0" -remark-mdx@^1.5.8: - version "1.5.8" - resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-1.5.8.tgz#81fd9085e56ea534b977d08d6f170899138b3f38" - integrity sha512-wtqqsDuO/mU/ucEo/CDp0L8SPdS2oOE6PRsMm+lQ9TLmqgep4MBmyH8bLpoc8Wf7yjNmae/5yBzUN1YUvR/SsQ== +remark-footnotes@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/remark-footnotes/-/remark-footnotes-1.0.0.tgz#9c7a97f9a89397858a50033373020b1ea2aad011" + integrity sha512-X9Ncj4cj3/CIvLI2Z9IobHtVi8FVdUrdJkCNaL9kdX8ohfsi18DXHsCVd/A7ssARBdccdDb5ODnt62WuEWaM/g== + +remark-mdx@^1.5.9: + version "1.5.9" + resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-1.5.9.tgz#844311a162ad1a555f57914b3514069d0d47745d" + integrity sha512-HFr/VOVoJ2lnZsN090wttFTcqXIker49S5JT3Tem8SKMeQoRA9Pl+iIlEOZau+C9w6ISZj79l6nwzrflAa5VDA== dependencies: - "@babel/core" "7.8.4" + "@babel/core" "7.9.0" "@babel/helper-plugin-utils" "7.8.3" - "@babel/plugin-proposal-object-rest-spread" "7.8.3" + "@babel/plugin-proposal-object-rest-spread" "7.9.5" "@babel/plugin-syntax-jsx" "7.8.3" - "@mdx-js/util" "^1.5.8" + "@mdx-js/util" "^1.5.9" is-alphabetical "1.0.4" - remark-parse "7.0.2" - unified "8.4.2" + remark-parse "8.0.1" + unified "9.0.0" -remark-parse@7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-7.0.2.tgz#41e7170d9c1d96c3d32cf1109600a9ed50dba7cf" - integrity sha512-9+my0lQS80IQkYXsMA8Sg6m9QfXYJBnXjWYN5U+kFc5/n69t+XZVXU/ZBYr3cYH8FheEGf1v87rkFDhJ8bVgMA== +remark-parse@8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-8.0.1.tgz#7fc95d8f2b58fc6791cffb54803c763eb3756743" + integrity sha512-Ye/5W57tdQZWsfkuVyRq9SUWRgECHnDsMuyUMzdSKpTbNPkZeGtoYfsrkeSi4+Xyl0mhcPPddHITXPcCPHrl3w== 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 "^1.1.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 "^1.0.0" - vfile-location "^2.0.0" + 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: @@ -13747,7 +13742,14 @@ remark-sectionize@^1.0.1: unist-util-find-after "^2.0.2" unist-util-visit-parents "^2.0.1" -remark-squeeze-paragraphs@3.0.4, remark-squeeze-paragraphs@^3.0.1: +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-squeeze-paragraphs@^3.0.1: version "3.0.4" resolved "https://registry.yarnpkg.com/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-3.0.4.tgz#9fe50c3bf3b572dd88754cd426ada007c0b8dc5f" integrity sha512-Wmz5Yj9q+W1oryo8BV17JrOXZgUKVcpJ2ApE2pwnoHwhFKSk4Wp2PmFNbmJMgYSqAdFwfkoe+TSYop5Fy8wMgA== @@ -13949,9 +13951,9 @@ resolve@1.1.7: integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= resolve@1.x, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.15.1, resolve@^1.3.2, resolve@^1.8.1: - version "1.16.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.16.1.tgz#49fac5d8bacf1fd53f200fa51247ae736175832c" - integrity sha512-rmAglCSqWWMrrBv/XM6sW0NuRFiKViw/W4d9EbC4pt+49H8JwHy+mcGmALTEg504AUDcLTvb1T2q3E9AnmY+ig== + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== dependencies: path-parse "^1.0.6" @@ -14359,7 +14361,7 @@ shallow-compare@^1.2.2: resolved "https://registry.yarnpkg.com/shallow-compare/-/shallow-compare-1.2.2.tgz#fa4794627bf455a47c4f56881d8a6132d581ffdb" integrity sha512-LUMFi+RppPlrHzbqmFnINTrazo0lPNwhcgzuAXVVcfy/mqPDrQmHAyz5bvV0gDAuRFrk804V0HpQ6u9sZ0tBeg== -shallowequal@^1.0.1, shallowequal@^1.1.0: +shallowequal@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== @@ -14697,9 +14699,9 @@ source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: urix "^0.1.0" source-map-support@^0.5.6, source-map-support@~0.5.12: - version "0.5.17" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.17.tgz#29fe1b3c98b9dbd5064ada89052ee8ff070cb46c" - integrity sha512-bwdKOBZ5L0gFRh4KOxNap/J/MpvX9Yxsq9lFDx65s3o7F/NiHy7JRaGIS8MwW6tZPAq9UXE207Il0cfcb5yu/Q== + version "0.5.18" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.18.tgz#f5f33489e270bd7f7d7e7b8debf283f3a4066960" + integrity sha512-9luZr/BZ2QeU6tO2uG8N2aZpVSli4TSAOAqFOyTO51AJcD9P99c0K1h6dD6r6qo5dyT44BR5exweOaLLeldTkQ== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" @@ -15858,9 +15860,9 @@ ua-parser-js@^0.7.18: integrity sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ== unbzip2-stream@^1.0.9: - version "1.4.1" - resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.4.1.tgz#151b104af853df3efdaa135d8b1eca850a44b426" - integrity sha512-sgDYfSDPMsA4Hr2/w7vOlrJBlwzmyakk1+hW8ObLvxSp0LA36LcL2XItGvOT3OSblohSdevMuT8FQjLsqyy4sA== + version "1.4.2" + resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.4.2.tgz#84eb9e783b186d8fb397515fbb656f312f1a7dbf" + integrity sha512-pZMVAofMrrHX6Ik39hCk470kulCbmZ2SWfQLPmTWqfJV/oUm0gn1CblvHdUu4+54Je6Jq34x8kY6XjTy6dMkOg== dependencies: buffer "^5.2.1" through "^2.3.8" @@ -15921,13 +15923,14 @@ 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@8.4.2, unified@^8.4.2: - version "8.4.2" - resolved "https://registry.yarnpkg.com/unified/-/unified-8.4.2.tgz#13ad58b4a437faa2751a4a4c6a16f680c500fff1" - integrity sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA== +unified@9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/unified/-/unified-9.0.0.tgz#12b099f97ee8b36792dbad13d278ee2f696eed1d" + integrity sha512-ssFo33gljU3PdlWLjNp15Inqb77d6JnJSfyplGJPT/a+fNRNyCBeveBAYJdO5khKdF6WVHa/yYCC7Xl6BDwZUQ== dependencies: bail "^1.0.0" extend "^3.0.0" + is-buffer "^2.0.0" is-plain-obj "^2.0.0" trough "^1.0.0" vfile "^4.0.0" @@ -15958,6 +15961,17 @@ unified@^7.0.0: vfile "^3.0.0" x-is-string "^0.1.0" +unified@^8.4.2: + version "8.4.2" + resolved "https://registry.yarnpkg.com/unified/-/unified-8.4.2.tgz#13ad58b4a437faa2751a4a4c6a16f680c500fff1" + integrity sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA== + dependencies: + bail "^1.0.0" + extend "^3.0.0" + is-plain-obj "^2.0.0" + trough "^1.0.0" + vfile "^4.0.0" + union-value@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" @@ -16071,6 +16085,13 @@ unist-util-remove-position@^1.0.0, unist-util-remove-position@^1.1.4: 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.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" @@ -16393,6 +16414,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: + version "3.0.1" + resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-3.0.1.tgz#d78677c3546de0f7cd977544c367266764d31bb3" + integrity sha512-yYBO06eeN/Ki6Kh1QAkgzYpWT1d3Qln+ZCtSbJqFExPl1S3y2qqotJQXoh6qEvl/jDlgpUJolBn3PItVnnZRqQ== + 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"