Compare commits

..

2 Commits

Author SHA1 Message Date
Stephan Dörfler a85e429f4d added comments and post about comments
continuous-integration/drone/push Build is passing Details
2020-09-05 19:15:40 +02:00
Stephan Dörfler 5689ce6332 added eslint 2020-06-10 15:41:43 +02:00
17 changed files with 562 additions and 376 deletions

27
.eslintrc.json Normal file
View File

@ -0,0 +1,27 @@
{
"env": {
"browser": true,
"es6": true
},
"extends": [
"plugin:react/recommended",
"airbnb"
],
"globals": {
"Atomics": "readonly",
"SharedArrayBuffer": "readonly"
},
"parserOptions": {
"ecmaFeatures": {
"jsx": true
},
"ecmaVersion": 11,
"sourceType": "module"
},
"plugins": [
"react"
],
"rules": {
"comma-dangle": ["error", "never"]
}
}

View File

@ -19,16 +19,18 @@ Some time ago I listened to [an episode of the podcast .Net rocks](https://dotne
# How this is built # How this is built
Gatsby has a [template for blogs](https://github.com/gatsbyjs/gatsby-starter-blog). Using Gatsby has a [template for blogs](https://github.com/gatsbyjs/gatsby-starter-blog). Using
```bash
npx gatsby new blog https://github.com/gatsbyjs/gatsby-starter-blog npx gatsby new blog https://github.com/gatsbyjs/gatsby-starter-blog
```
I let gatsby create an instance of the blog template for me. From this template I got going with `npx gatsby develop` and started off with deleting a lot of files I didn't need. I also did some changes to the style. I have absolutely no background in anything even remotely related to making things look good, so I just went with what I had in my mind at that very moment (any feedback and suggestions are very welcome). The `gatsby new` command did also initialize a [`git`]() repository so I just had to commit my new changes. For better availability I then pushed the repository to [my self-hosted git server](https://code.while-false.de/stephan/blog). I let gatsby create an instance of the blog template for me. From this template I got going with `npx gatsby develop` and started off with deleting a lot of files I didn't need. I also did some changes to the style. I have absolutely no background in anything even remotely related to making things look good, so I just went with what I had in my mind at that very moment (any feedback and suggestions are very welcome). The `gatsby new` command did also initialize a [`git`]() repository so I just had to commit my new changes. For better availability I then pushed the repository to [my self-hosted git server](https://code.while-false.de/stephan/blog).
# How this is run # How this is run
I mentioned `docker` before. [It seems to be officially supported](https://github.com/gatsbyjs/gatsby-docker). I just went with the documentation and tried to get it to run. First, I created a `Dockerfile` in the project with just one line of content: I mentioned `docker` before. [It seems to be officially supported](https://github.com/gatsbyjs/gatsby-docker). I just went with the documentation and tried to get it to run. First, I created a `Dockerfile` in the project with just one line of content:
```docker
FROM gatsbyjs/gatsby:onbuild FROM gatsbyjs/gatsby:onbuild
```
Then, I could build first the gatsby project with `npx gatsby build` and use the optimized output from that to build a docker image with `docker build -t while-false/blog .` from the context of my project root. Next, I started a container from the newly created image with `docker run -d --name blog -p 8080:80 while-false/blog`. It worked on my laptop for `localhost:8080`, I saw the blog I just built. Nice! Then, I could build first the gatsby project with `npx gatsby build` and use the optimized output from that to build a docker image with `docker build -t while-false/blog .` from the context of my project root. Next, I started a container from the newly created image with `docker run -d --name blog -p 8080:80 while-false/blog`. It worked on my laptop for `localhost:8080`, I saw the blog I just built. Nice!

View File

@ -0,0 +1,86 @@
---
title: Comments
date: "2020-09-05T17:56:22.339Z"
description: I would love to hear from you!
---
## Where do comments live?
I built this blog with [`GatsbyJS`](https://www.gatsbyjs.org/), which is optimized for static content. It works great for everything that exists when I build the code and create another docker image. But now I want to add comments from my readers. Which of course aren't static and don't exist on compile-time. So it seems GatsbyJS would not be the right tool for the job.
Luckily, GatsbyJS is expandable. There even is a [guide on how to integrate comments](https://www.gatsbyjs.com/docs/adding-comments/) in a blog on the gatsby website itself. But it assumes you just go and use some external service like disqus (although it does mention several alternatives). I didn't want to outsource that, the whole point of this blog is to run things myself and learn from that.
What I found was [Commento](https://commento.io/). It focusses around privacy and can be [self-hosted](https://docs.commento.io/installation/self-hosting/) instead of using an external service. It even has docker support. I quickly set up my very own instance on my server:
```bash
docker run -d --name blog-commento \
-e "COMMENTO_ORIGIN=https://comments.while-false.de" \
-e "COMMENTO_POSTGRES=postgres://commentoDbUser:SuperSecretPassword@db_postgres/commento?sslmode=disable" \
registry.gitlab.com/commento/commento
```
*(In reality, I use a few more parameters and steps required for my specific hosting setup, which I will explain in a future post)*
So my blog itself can still be static and throught the magic of gatsby's automatic optimization blazing fast, while the dynamic comments are handled by an external server, which I can fully control as I host it myself.
## Include the comments in the blog
Next, I followed the [documentation for commento](https://docs.commento.io/installation/self-hosting/register-your-website/) and registered the blog on my commento instance. Easy.
Now to the tricky part. The static Gatsby.js website must embed the dynamic comments from the commento server. Again, I am lucky and found that [someone already did exactly that](https://itnext.io/adding-commento-to-react-apps-like-gatsby-871824fb57ae). With some small tweaks, this is what I use:
```js
import React, { useEffect } from 'react';
/**
* Helper to add scripts to the page.
* @param {string} src The source path for the script to insert.
* @param {string} id The unique identifier for the script element to insert.
* @param {HTMLElement} parentElement The DOM element to insert the script into.
*/
const insertScript = (src, id, parentElement) => {
const script = window.document.createElement('script');
script.async = true;
script.src = src;
script.id = id;
parentElement.appendChild(script);
return script;
};
/**
* Helper to remove scripts from the page.
* @param {string} id The unique identifier for the script element to remove.
* @param {HTMLElement} parentElement The DOM element to remove the script from
*/
const removeScript = (id, parentElement) => {
const script = window.document.getElementById(id);
if (script) {
parentElement.removeChild(script);
}
};
const Commento = ({ id }) => {
useEffect(() => {
// If there's no window there's nothing to do for us
if (!window) {
return;
}
const { document } = window;
// In case our #commento container exists we can add our commento script
if (document.getElementById('commento')) {
insertScript('https://comments.while-false.de/js/commento.js', 'commento-script', document.body);
}
// Cleanup; remove the script from the page
return () => removeScript('commento-script', document.body);
}, [id]);
return <div id="commento" />;
};
export default Commento;
```
This component itself is evaluated at runtime (it uses `useEffect`, which gatsby understands as non-static). It dynamically loads the scripts required by commento. The commento component is then included in my default blog-post template component by adding the line `<Commento id={this.props.slug} />`. The slug is the part of the URL after the hostname, i.e. `004-comments/` for this page. Thus, commento differentiates which comment belongs to which page.
Now, users can register and directly comment or comment anonymously with a required moderator review (which is me). Also, markdown, up- and downvoting, sorting, sticky, replies and moderation tools are included. Give it a try, I'd love to hear from you!
In the next few days I will tinker around with commento's settings for moderation notification emails, custom styling and comment analytics (number of views and number of comments).

View File

@ -1,6 +1,6 @@
// custom typefaces // custom typefaces
import "typeface-montserrat" import 'typeface-montserrat';
import "typeface-merriweather" import 'typeface-merriweather';
import "./src/styles/global.css"; import './src/styles/global.css';
import "prismjs/themes/prism-solarizedlight.css"; import 'prismjs/themes/prism-solarizedlight.css';

View File

@ -1,50 +1,50 @@
module.exports = { module.exports = {
siteMetadata: { siteMetadata: {
title: `While False Blog`, title: 'While False Blog',
author: `Stephan Dörfler`, author: 'Stephan Dörfler',
description: `Self-built developer blog based on gatsby.`, description: 'Self-built developer blog based on gatsby.',
siteUrl: `https://blog.while-false.de`, siteUrl: 'https://blog.while-false.de',
type: `website`, type: 'website',
}, },
plugins: [ plugins: [
{ {
resolve: `gatsby-source-filesystem`, resolve: 'gatsby-source-filesystem',
options: { options: {
path: `${__dirname}/content/blog`, path: `${__dirname}/content/blog`,
name: `blog`, name: 'blog',
}, },
}, },
{ {
resolve: `gatsby-source-filesystem`, resolve: 'gatsby-source-filesystem',
options: { options: {
path: `${__dirname}/content/assets`, path: `${__dirname}/content/assets`,
name: `assets`, name: 'assets',
}, },
}, },
{ {
resolve: `gatsby-transformer-remark`, resolve: 'gatsby-transformer-remark',
options: { options: {
plugins: [ plugins: [
{ {
resolve: `gatsby-remark-images`, resolve: 'gatsby-remark-images',
options: { options: {
maxWidth: 590, maxWidth: 590,
}, },
}, },
{ {
resolve: `gatsby-remark-responsive-iframe`, resolve: 'gatsby-remark-responsive-iframe',
options: { options: {
wrapperStyle: `margin-bottom: 1.0725rem`, wrapperStyle: 'margin-bottom: 1.0725rem',
}, },
}, },
`gatsby-remark-prismjs`, 'gatsby-remark-prismjs',
`gatsby-remark-copy-linked-files`, 'gatsby-remark-copy-linked-files',
`gatsby-remark-smartypants`, 'gatsby-remark-smartypants',
], ],
}, },
}, },
`gatsby-transformer-sharp`, 'gatsby-transformer-sharp',
`gatsby-plugin-sharp`, 'gatsby-plugin-sharp',
{ {
resolve: 'gatsby-plugin-matomo', resolve: 'gatsby-plugin-matomo',
options: { options: {
@ -52,8 +52,8 @@ module.exports = {
matomoUrl: 'https://matomo.while-false.de', matomoUrl: 'https://matomo.while-false.de',
siteUrl: 'https://blog.while-false.de', siteUrl: 'https://blog.while-false.de',
matomoPhpScript: 'matomo.php', matomoPhpScript: 'matomo.php',
matomoJsScript: 'matomo.js' matomoJsScript: 'matomo.js',
} },
}, },
{ {
resolve: 'gatsby-plugin-feed', resolve: 'gatsby-plugin-feed',
@ -72,17 +72,14 @@ module.exports = {
`, `,
feeds: [ feeds: [
{ {
serialize: ({ query: { site, allMarkdownRemark } }) => { serialize: ({ query: { site, allMarkdownRemark } }) => allMarkdownRemark.edges.map((edge) => ({
return allMarkdownRemark.edges.map(edge => { ...edge.node.frontmatter,
return Object.assign({}, edge.node.frontmatter, {
description: edge.node.excerpt, description: edge.node.excerpt,
date: edge.node.frontmatter.date, date: edge.node.frontmatter.date,
url: site.siteMetadata.siteUrl + edge.node.fields.slug, url: site.siteMetadata.siteUrl + edge.node.fields.slug,
guid: site.siteMetadata.siteUrl + edge.node.fields.slug, guid: site.siteMetadata.siteUrl + edge.node.fields.slug,
custom_elements: [{ "content:encoded": edge.node.html }], custom_elements: [{ 'content:encoded': edge.node.html }],
}) })),
})
},
query: ` query: `
{ {
allMarkdownRemark( allMarkdownRemark(
@ -102,31 +99,31 @@ module.exports = {
} }
} }
`, `,
output: "/rss.xml", output: '/rss.xml',
title: "while-false blog RSS Feed" title: 'while-false blog RSS Feed',
}, },
], ],
}, },
}, },
{ {
resolve: `gatsby-plugin-manifest`, resolve: 'gatsby-plugin-manifest',
options: { options: {
name: `While False Blog`, name: 'While False Blog',
short_name: `while-false`, short_name: 'while-false',
start_url: `/`, start_url: '/',
background_color: `#f9ebe0`, background_color: '#f9ebe0',
theme_color: `#3b7080`, theme_color: '#3b7080',
display: `minimal-ui`, display: 'minimal-ui',
icon: `content/assets/logo.png`, icon: 'content/assets/logo.png',
}, },
}, },
`gatsby-plugin-offline`, 'gatsby-plugin-offline',
`gatsby-plugin-react-helmet`, 'gatsby-plugin-react-helmet',
{ {
resolve: `gatsby-plugin-typography`, resolve: 'gatsby-plugin-typography',
options: { options: {
pathToConfigModule: `src/utils/typography`, pathToConfigModule: 'src/utils/typography',
}, },
}, },
], ],
} };

View File

@ -1,10 +1,10 @@
const path = require(`path`) const path = require('path');
const { createFilePath } = require(`gatsby-source-filesystem`) const { createFilePath } = require('gatsby-source-filesystem');
exports.createPages = async ({ graphql, actions }) => { exports.createPages = async ({ graphql, actions }) => {
const { createPage } = actions const { createPage } = actions;
const blogPost = path.resolve(`./src/templates/blog-post.js`) const blogPost = path.resolve('./src/templates/blog-post.js');
const result = await graphql( const result = await graphql(
` `
{ {
@ -25,18 +25,18 @@ exports.createPages = async ({ graphql, actions }) => {
} }
} }
` `
) );
if (result.errors) { if (result.errors) {
throw result.errors throw result.errors;
} }
// Create blog posts pages. // Create blog posts pages.
const posts = result.data.allMarkdownRemark.edges const posts = result.data.allMarkdownRemark.edges;
posts.forEach((post, index) => { posts.forEach((post, index) => {
const previous = index === posts.length - 1 ? null : posts[index + 1].node const previous = index === posts.length - 1 ? null : posts[index + 1].node;
const next = index === 0 ? null : posts[index - 1].node const next = index === 0 ? null : posts[index - 1].node;
createPage({ createPage({
path: post.node.fields.slug, path: post.node.fields.slug,
@ -46,18 +46,18 @@ exports.createPages = async ({ graphql, actions }) => {
previous, previous,
next, next,
}, },
}) });
}) });
} };
exports.onCreateNode = ({ node, actions, getNode }) => { exports.onCreateNode = ({ node, actions, getNode }) => {
const { createNodeField } = actions const { createNodeField } = actions;
if (node.internal.type === `MarkdownRemark`) { if (node.internal.type === 'MarkdownRemark') {
const value = createFilePath({ node, getNode }) const value = createFilePath({ node, getNode });
createNodeField({ createNodeField({
name: `slug`, name: 'slug',
node, node,
value, value,
}) });
}
} }
};

View File

@ -2,10 +2,11 @@
"name": "while-false-blog", "name": "while-false-blog",
"private": true, "private": true,
"description": "A simple blog powered by Gatsby and Markdown", "description": "A simple blog powered by Gatsby and Markdown",
"version": "0.1.0", "version": "1.0.0",
"author": "Stephan Dörfler <st.doerfler@outlook.com>", "author": "Stephan Dörfler <stephan@while-false.de>",
"dependencies": { "dependencies": {
"gatsby": "^2.22.17", "gatsby": "^2.23.3",
"gatsby-cli": "^2.12.45",
"gatsby-image": "^2.4.6", "gatsby-image": "^2.4.6",
"gatsby-plugin-feed": "^2.5.4", "gatsby-plugin-feed": "^2.5.4",
"gatsby-plugin-manifest": "^2.4.10", "gatsby-plugin-manifest": "^2.4.10",
@ -22,6 +23,7 @@
"gatsby-source-filesystem": "^2.3.10", "gatsby-source-filesystem": "^2.3.10",
"gatsby-transformer-remark": "^2.8.14", "gatsby-transformer-remark": "^2.8.14",
"gatsby-transformer-sharp": "^2.5.4", "gatsby-transformer-sharp": "^2.5.4",
"global": "^4.4.0",
"prismjs": "^1.20.0", "prismjs": "^1.20.0",
"react": "^16.13.1", "react": "^16.13.1",
"react-dom": "^16.13.1", "react-dom": "^16.13.1",
@ -34,7 +36,12 @@
"typography-theme-wordpress-2016": "^0.16.19" "typography-theme-wordpress-2016": "^0.16.19"
}, },
"devDependencies": { "devDependencies": {
"eslint": "^7.1.0", "eslint": "^6.8.0",
"eslint-config-airbnb": "^18.1.0",
"eslint-plugin-import": "^2.21.2",
"eslint-plugin-jsx-a11y": "^6.2.3",
"eslint-plugin-react": "^7.20.0",
"eslint-plugin-react-hooks": "^2.5.1",
"prettier": "^2.0.5" "prettier": "^2.0.5"
}, },
"keywords": [ "keywords": [

View File

@ -5,11 +5,11 @@
* See: https://www.gatsbyjs.org/docs/use-static-query/ * See: https://www.gatsbyjs.org/docs/use-static-query/
*/ */
import React from "react" import React from 'react';
import { useStaticQuery, graphql } from "gatsby" import { useStaticQuery, graphql } from 'gatsby';
import Image from "gatsby-image" import Image from 'gatsby-image';
import { rhythm } from "../utils/typography" import { rhythm } from '../utils/typography';
const Bio = () => { const Bio = () => {
const data = useStaticQuery(graphql` const data = useStaticQuery(graphql`
@ -27,13 +27,13 @@ const Bio = () => {
} }
} }
} }
`) `);
const { author } = data.site.siteMetadata const { author } = data.site.siteMetadata;
return ( return (
<div <div
style={{ style={{
display: `flex`, display: 'flex',
marginBottom: rhythm(2.5), marginBottom: rhythm(2.5),
}} }}
> >
@ -44,18 +44,22 @@ const Bio = () => {
marginRight: rhythm(1 / 2), marginRight: rhythm(1 / 2),
marginBottom: 0, marginBottom: 0,
minWidth: 50, minWidth: 50,
borderRadius: `100%`, borderRadius: '100%',
}} }}
imgStyle={{ imgStyle={{
borderRadius: `50%`, borderRadius: '50%',
}} }}
/> />
<p> <p>
Written by <strong>{author}</strong> who lives and works in Germany trying to build useful things. Written by
{` `} {' '}
<strong>{author}</strong>
{' '}
who lives and works in Germany trying to build useful things.
{' '}
</p> </p>
</div> </div>
) );
} };
export default Bio export default Bio;

View File

@ -0,0 +1,48 @@
import React, { useEffect } from 'react';
/**
* Helper to add scripts to the page.
* @param {string} src The source path for the script to insert.
* @param {string} id The unique identifier for the script element to insert.
* @param {HTMLElement} parentElement The DOM element to insert the script into.
*/
const insertScript = (src, id, parentElement) => {
const script = window.document.createElement('script');
script.async = true;
script.src = src;
script.id = id;
parentElement.appendChild(script);
return script;
};
/**
* Helper to remove scripts from the page.
* @param {string} id The unique identifier for the script element to remove.
* @param {HTMLElement} parentElement The DOM element to remove the script from
*/
const removeScript = (id, parentElement) => {
const script = window.document.getElementById(id);
if (script) {
parentElement.removeChild(script);
}
};
const Commento = ({ id }) => {
useEffect(() => {
// If there's no window there's nothing to do for us
if (!window) {
return;
}
const { document } = window;
// In case our #commento container exists we can add our commento script
if (document.getElementById('commento')) {
insertScript('https://comments.while-false.de/js/commento.js', 'commento-script', document.body);
}
// Cleanup; remove the script from the page
return () => removeScript('commento-script', document.body);
}, [id]);
return <div id="commento" />;
};
export default Commento;

View File

@ -1,13 +1,13 @@
import React from "react" import React from 'react';
import { Link } from "gatsby" import { Link } from 'gatsby';
import { rhythm, scale } from "../utils/typography" import { rhythm, scale } from '../utils/typography';
class Layout extends React.Component { class Layout extends React.Component {
render() { render() {
const { location, title, children } = this.props const { location, title, children } = this.props;
const rootPath = `${__PATH_PREFIX__}/` const rootPath = `${__PATH_PREFIX__}/`;
let header let header;
if (location.pathname === rootPath) { if (location.pathname === rootPath) {
header = ( header = (
@ -20,56 +20,59 @@ class Layout extends React.Component {
> >
<Link <Link
style={{ style={{
boxShadow: `none`, boxShadow: 'none',
textDecoration: `none`, textDecoration: 'none',
color: `inherit`, color: 'inherit',
}} }}
to={`/`} to="/"
> >
{title} {title}
</Link> </Link>
</h1> </h1>
) );
} else { } else {
header = ( header = (
<h3 <h3
style={{ style={{
fontFamily: `Montserrat, sans-serif`, fontFamily: 'Montserrat, sans-serif',
marginTop: 0, marginTop: 0,
}} }}
> >
<Link <Link
style={{ style={{
boxShadow: `none`, boxShadow: 'none',
textDecoration: `none`, textDecoration: 'none',
color: `inherit`, color: 'inherit',
}} }}
to={`/`} to="/"
> >
{title} {title}
</Link> </Link>
</h3> </h3>
) );
} }
return ( return (
<div <div
style={{ style={{
marginLeft: `auto`, marginLeft: 'auto',
marginRight: `auto`, marginRight: 'auto',
maxWidth: rhythm(24), maxWidth: rhythm(24),
padding: `${rhythm(1.5)} ${rhythm(3 / 4)}` padding: `${rhythm(1.5)} ${rhythm(3 / 4)}`,
}} }}
> >
<header>{header}</header> <header>{header}</header>
<main>{children}</main> <main>{children}</main>
<footer> <footer>
© {new Date().getFullYear()}, Built with ©
{` `} {' '}
{new Date().getFullYear()}
, Built with
{' '}
<a href="https://www.gatsbyjs.org">Gatsby</a> <a href="https://www.gatsbyjs.org">Gatsby</a>
</footer> </footer>
</div> </div>
) );
} }
} }
export default Layout export default Layout;

View File

@ -5,12 +5,14 @@
* See: https://www.gatsbyjs.org/docs/use-static-query/ * See: https://www.gatsbyjs.org/docs/use-static-query/
*/ */
import React from "react" import React from 'react';
import PropTypes from "prop-types" import PropTypes from 'prop-types';
import Helmet from "react-helmet" import Helmet from 'react-helmet';
import { useStaticQuery, graphql } from "gatsby" import { useStaticQuery, graphql } from 'gatsby';
function SEO({ description, lang, meta, title }) { function SEO({
description, lang, meta, title,
}) {
const { site } = useStaticQuery( const { site } = useStaticQuery(
graphql` graphql`
query { query {
@ -23,11 +25,11 @@ function SEO({ description, lang, meta, title }) {
} }
} }
} }
` `,
) );
const metaDescription = description || site.siteMetadata.description const metaDescription = description || site.siteMetadata.description;
const metaType = `website` || site.siteMetadata.type const metaType = 'website' || site.siteMetadata.type;
return ( return (
<Helmet <Helmet
@ -38,39 +40,39 @@ function SEO({ description, lang, meta, title }) {
titleTemplate={`%s | ${site.siteMetadata.title}`} titleTemplate={`%s | ${site.siteMetadata.title}`}
meta={[ meta={[
{ {
name: `description`, name: 'description',
content: metaDescription, content: metaDescription,
}, },
{ {
property: `og:title`, property: 'og:title',
content: title, content: title,
}, },
{ {
property: `og:description`, property: 'og:description',
content: metaDescription, content: metaDescription,
}, },
{ {
property: `og:type`, property: 'og:type',
content: metaType, content: metaType,
}, },
].concat(meta)} ].concat(meta)}
> >
<link href="https://fonts.googleapis.com/css?family=Oxygen+Mono&display=swap" rel="stylesheet"></link> <link href="https://fonts.googleapis.com/css?family=Oxygen+Mono&display=swap" rel="stylesheet" />
</Helmet> </Helmet>
) );
} }
SEO.defaultProps = { SEO.defaultProps = {
lang: `en`, lang: 'en',
meta: [], meta: [],
description: `A selfmade developer blog.`, description: 'A selfmade developer blog.',
} };
SEO.propTypes = { SEO.propTypes = {
description: PropTypes.string, description: PropTypes.string,
lang: PropTypes.string, lang: PropTypes.string,
meta: PropTypes.arrayOf(PropTypes.object), meta: PropTypes.arrayOf(PropTypes.object),
title: PropTypes.string.isRequired, title: PropTypes.string.isRequired,
} };
export default SEO export default SEO;

View File

@ -1,13 +1,13 @@
import React from "react" import React from 'react';
import { graphql } from "gatsby" import { graphql } from 'gatsby';
import Layout from "../components/layout" import Layout from '../components/layout';
import SEO from "../components/seo" import SEO from '../components/seo';
class NotFoundPage extends React.Component { class NotFoundPage extends React.Component {
render() { render() {
const { data } = this.props const { data } = this.props;
const siteTitle = data.site.siteMetadata.title const siteTitle = data.site.siteMetadata.title;
return ( return (
<Layout location={this.props.location} title={siteTitle}> <Layout location={this.props.location} title={siteTitle}>
@ -15,11 +15,11 @@ class NotFoundPage extends React.Component {
<h1>Not Found</h1> <h1>Not Found</h1>
<p>You just hit a route that doesn&#39;t exist... the sadness.</p> <p>You just hit a route that doesn&#39;t exist... the sadness.</p>
</Layout> </Layout>
) );
} }
} }
export default NotFoundPage export default NotFoundPage;
export const pageQuery = graphql` export const pageQuery = graphql`
query { query {
@ -29,4 +29,4 @@ export const pageQuery = graphql`
} }
} }
} }
` `;

View File

@ -1,23 +1,23 @@
import React from "react" import React from 'react';
import { Link, graphql } from "gatsby" import { Link, graphql } from 'gatsby';
import Bio from "../components/bio" import Bio from '../components/bio';
import Layout from "../components/layout" import Layout from '../components/layout';
import SEO from "../components/seo" import SEO from '../components/seo';
import { rhythm } from "../utils/typography" import { rhythm } from '../utils/typography';
class BlogIndex extends React.Component { class BlogIndex extends React.Component {
render() { render() {
const { data } = this.props const { data } = this.props;
const siteTitle = data.site.siteMetadata.title const siteTitle = data.site.siteMetadata.title;
const posts = data.allMarkdownRemark.edges const posts = data.allMarkdownRemark.edges;
return ( return (
<Layout location={this.props.location} title={siteTitle}> <Layout location={this.props.location} title={siteTitle}>
<SEO title="All posts" /> <SEO title="All posts" />
<Bio /> <Bio />
{posts.map(({ node }) => { {posts.map(({ node }) => {
const title = node.frontmatter.title || node.fields.slug const title = node.frontmatter.title || node.fields.slug;
return ( return (
<article key={node.fields.slug}> <article key={node.fields.slug}>
<header> <header>
@ -26,7 +26,7 @@ class BlogIndex extends React.Component {
marginBottom: rhythm(1 / 4), marginBottom: rhythm(1 / 4),
}} }}
> >
<Link style={{ boxShadow: `none` }} to={node.fields.slug}> <Link style={{ boxShadow: 'none' }} to={node.fields.slug}>
{title} {title}
</Link> </Link>
</h3> </h3>
@ -40,14 +40,14 @@ class BlogIndex extends React.Component {
/> />
</section> </section>
</article> </article>
) );
})} })}
</Layout> </Layout>
) );
} }
} }
export default BlogIndex export default BlogIndex;
export const pageQuery = graphql` export const pageQuery = graphql`
query { query {
@ -72,4 +72,4 @@ export const pageQuery = graphql`
} }
} }
} }
` `;

View File

@ -1,3 +1,7 @@
body { body {
background-color: #e3dcc2; background-color: #e3dcc2;
} }
#commento-textarea-root {
background-color: #00000010;
}

View File

@ -1,23 +1,24 @@
import React from "react" import React from 'react';
import { Link, graphql } from "gatsby" import { Link, graphql } from 'gatsby';
import Bio from "../components/bio" import Bio from '../components/bio';
import Layout from "../components/layout" import Layout from '../components/layout';
import SEO from "../components/seo" import SEO from '../components/seo';
import { rhythm, scale } from "../utils/typography" import { rhythm, scale } from '../utils/typography';
import Commento from '../components/commento';
class BlogPostTemplate extends React.Component { class BlogPostTemplate extends React.Component {
render() { render() {
const post = this.props.data.markdownRemark const post = this.props.data.markdownRemark;
const siteTitle = this.props.data.site.siteMetadata.title const siteTitle = this.props.data.site.siteMetadata.title;
const { previous, next } = this.props.pageContext const { previous, next } = this.props.pageContext;
return ( return (
<Layout location={this.props.location} title={siteTitle}> <Layout location={this.props.location} title={siteTitle}>
<SEO <SEO
title={post.frontmatter.title} title={post.frontmatter.title}
description={post.frontmatter.description || post.excerpt} description={post.frontmatter.description || post.excerpt}
type='article' type="article"
/> />
<article> <article>
<header> <header>
@ -32,7 +33,7 @@ class BlogPostTemplate extends React.Component {
<p <p
style={{ style={{
...scale(-1 / 5), ...scale(-1 / 5),
display: `block`, display: 'block',
marginBottom: rhythm(1), marginBottom: rhythm(1),
}} }}
> >
@ -47,41 +48,49 @@ class BlogPostTemplate extends React.Component {
/> />
<footer> <footer>
<Bio /> <Bio />
<div>
<h2>Comments</h2>
<Commento id={this.props.slug} />
</div>
</footer> </footer>
</article> </article>
<nav> <nav>
<ul <ul
style={{ style={{
display: `flex`, display: 'flex',
flexWrap: `wrap`, flexWrap: 'wrap',
justifyContent: `space-between`, justifyContent: 'space-between',
listStyle: `none`, listStyle: 'none',
padding: 0, padding: 0,
}} }}
> >
<li> <li>
{previous && ( {previous && (
<Link to={previous.fields.slug} rel="prev"> <Link to={previous.fields.slug} rel="prev">
{previous.frontmatter.title}
{' '}
{previous.frontmatter.title}
</Link> </Link>
)} )}
</li> </li>
<li> <li>
{next && ( {next && (
<Link to={next.fields.slug} rel="next"> <Link to={next.fields.slug} rel="next">
{next.frontmatter.title} {next.frontmatter.title}
{' '}
</Link> </Link>
)} )}
</li> </li>
</ul> </ul>
</nav> </nav>
</Layout> </Layout>
) );
} }
} }
export default BlogPostTemplate export default BlogPostTemplate;
export const pageQuery = graphql` export const pageQuery = graphql`
query BlogPostBySlug($slug: String!) { query BlogPostBySlug($slug: String!) {
@ -101,4 +110,4 @@ export const pageQuery = graphql`
} }
} }
} }
` `;

View File

@ -1,23 +1,21 @@
import Typography from "typography" import Typography from 'typography';
import Moraga from "typography-theme-moraga" import Moraga from 'typography-theme-moraga';
Moraga.overrideThemeStyles = () => { Moraga.overrideThemeStyles = () => ({
return { 'a.gatsby-resp-image-link': {
"a.gatsby-resp-image-link": { boxShadow: 'none',
boxShadow: `none`,
}, },
} });
}
Moraga.headerFontFamily = ['Oxygen Mono']; Moraga.headerFontFamily = ['Oxygen Mono'];
const typography = new Typography(Moraga); const typography = new Typography(Moraga);
// Hot reload typography in development. // Hot reload typography in development.
if (process.env.NODE_ENV !== `production`) { if (process.env.NODE_ENV !== 'production') {
typography.injectStyles() typography.injectStyles();
} }
export default typography export default typography;
export const rhythm = typography.rhythm export const { rhythm } = typography;
export const scale = typography.scale export const { scale } = typography;

365
yarn.lock
View File

@ -2173,6 +2173,11 @@
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.4.tgz#38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.4.tgz#38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339"
integrity sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA== integrity sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA==
"@types/json5@^0.0.29":
version "0.0.29"
resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4=
"@types/lodash.sample@^4.2.6": "@types/lodash.sample@^4.2.6":
version "4.2.6" version "4.2.6"
resolved "https://registry.yarnpkg.com/@types/lodash.sample/-/lodash.sample-4.2.6.tgz#ec7f6a6dbd0401c4a1e5f5b3c85fa5a85a42a84a" resolved "https://registry.yarnpkg.com/@types/lodash.sample/-/lodash.sample-4.2.6.tgz#ec7f6a6dbd0401c4a1e5f5b3c85fa5a85a42a84a"
@ -2916,7 +2921,7 @@ array-unique@^0.3.2:
resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
array.prototype.flat@^1.2.1: array.prototype.flat@^1.2.1, array.prototype.flat@^1.2.3:
version "1.2.3" version "1.2.3"
resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b" resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b"
integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ== integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==
@ -3175,10 +3180,10 @@ babel-plugin-macros@^2.0.0, babel-plugin-macros@^2.8.0:
cosmiconfig "^6.0.0" cosmiconfig "^6.0.0"
resolve "^1.12.0" resolve "^1.12.0"
babel-plugin-remove-graphql-queries@^2.9.3: babel-plugin-remove-graphql-queries@^2.9.5:
version "2.9.3" version "2.9.5"
resolved "https://registry.yarnpkg.com/babel-plugin-remove-graphql-queries/-/babel-plugin-remove-graphql-queries-2.9.3.tgz#afed7ed58596e84e29914a4ecc88471e0ea76766" resolved "https://registry.yarnpkg.com/babel-plugin-remove-graphql-queries/-/babel-plugin-remove-graphql-queries-2.9.5.tgz#b094d01e39d911e92317d38bee04bf4b2bf7c156"
integrity sha512-EfMoizTX4/aUVN/cbWCU+uythWT5Xjh29npZnyTwBL2b16JH7WM9vbVMJQoCi+26HfRpKJS6SJfDcUT12wc3Mg== integrity sha512-z0T2dMz6V8a8hC11NFDwnuT5xR0k4Vu4Zie4A5BPchQOe59uHpbaM54mMl66FUA/iLTfYC11xez1N3Wc1gV20w==
babel-plugin-syntax-jsx@^6.18.0: babel-plugin-syntax-jsx@^6.18.0:
version "6.18.0" version "6.18.0"
@ -3241,10 +3246,10 @@ babel-preset-fbjs@^3.3.0:
"@babel/plugin-transform-template-literals" "^7.0.0" "@babel/plugin-transform-template-literals" "^7.0.0"
babel-plugin-syntax-trailing-function-commas "^7.0.0-beta.0" babel-plugin-syntax-trailing-function-commas "^7.0.0-beta.0"
babel-preset-gatsby@^0.4.8: babel-preset-gatsby@^0.4.9:
version "0.4.8" version "0.4.9"
resolved "https://registry.yarnpkg.com/babel-preset-gatsby/-/babel-preset-gatsby-0.4.8.tgz#333d2e79b80186bc4d5ceadfaa07302696a0d976" resolved "https://registry.yarnpkg.com/babel-preset-gatsby/-/babel-preset-gatsby-0.4.9.tgz#738460c86a172c9fc649c66e12db9b137c50a71a"
integrity sha512-U2Ex9XKYk2SbSabZIvQ/r5aKzrQibmxtyZ1SxGC0HNsjLU1QdWCCs+jeoiClWyi036y/4wmvHTxPjOOM2KdIZQ== integrity sha512-Jh8d7d36O2G/bTofQohOuEPBbGwDY6JftiC2U4LCtnZ4WILCvMSnf1DvIP6Y9ZDNuVy8ETb2AzmAfW1Ys6jA1Q==
dependencies: dependencies:
"@babel/plugin-proposal-class-properties" "^7.10.1" "@babel/plugin-proposal-class-properties" "^7.10.1"
"@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.1" "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.1"
@ -3258,7 +3263,7 @@ babel-preset-gatsby@^0.4.8:
babel-plugin-dynamic-import-node "^2.3.3" babel-plugin-dynamic-import-node "^2.3.3"
babel-plugin-macros "^2.8.0" babel-plugin-macros "^2.8.0"
babel-plugin-transform-react-remove-prop-types "^0.4.24" babel-plugin-transform-react-remove-prop-types "^0.4.24"
gatsby-core-utils "^1.3.4" gatsby-core-utils "^1.3.5"
babel-runtime@^6.26.0: babel-runtime@^6.26.0:
version "6.26.0" version "6.26.0"
@ -3947,14 +3952,6 @@ chalk@^3.0.0:
ansi-styles "^4.1.0" ansi-styles "^4.1.0"
supports-color "^7.1.0" supports-color "^7.1.0"
chalk@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.0.0.tgz#6e98081ed2d17faab615eb52ac66ec1fe6209e72"
integrity sha512-N9oWFcegS0sFr9oh1oz2d7Npos6vNoWW9HvtCg5N1KRFpUhaAhvTv5Y58g880fZaEYSNm3qDz8SU1UrGvp+n7A==
dependencies:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
character-entities-html4@^1.0.0: character-entities-html4@^1.0.0:
version "1.1.4" version "1.1.4"
resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.4.tgz#0e64b0a3753ddbf1fdc044c5fd01d0199a02e125" resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.4.tgz#0e64b0a3753ddbf1fdc044c5fd01d0199a02e125"
@ -4648,7 +4645,7 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5:
shebang-command "^1.2.0" shebang-command "^1.2.0"
which "^1.2.9" which "^1.2.9"
cross-spawn@^7.0.0, cross-spawn@^7.0.2: cross-spawn@^7.0.0:
version "7.0.3" version "7.0.3"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
@ -5055,7 +5052,7 @@ deep-extend@^0.6.0:
resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
deep-is@^0.1.3, deep-is@~0.1.3: deep-is@~0.1.3:
version "0.1.3" version "0.1.3"
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
@ -5716,6 +5713,24 @@ escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
eslint-config-airbnb-base@^14.1.0:
version "14.1.0"
resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.1.0.tgz#2ba4592dd6843258221d9bff2b6831bd77c874e4"
integrity sha512-+XCcfGyCnbzOnktDVhwsCAx+9DmrzEmuwxyHUJpw+kqBVT744OUBrB09khgFKlK1lshVww6qXGsYPZpavoNjJw==
dependencies:
confusing-browser-globals "^1.0.9"
object.assign "^4.1.0"
object.entries "^1.1.1"
eslint-config-airbnb@^18.1.0:
version "18.1.0"
resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-18.1.0.tgz#724d7e93dadd2169492ff5363c5aaa779e01257d"
integrity sha512-kZFuQC/MPnH7KJp6v95xsLBf63G/w7YqdPfQ0MUanxQ7zcKUNG8j+sSY860g3NwCBOa62apw16J6pRN+AOgXzw==
dependencies:
eslint-config-airbnb-base "^14.1.0"
object.assign "^4.1.0"
object.entries "^1.1.1"
eslint-config-react-app@^5.2.1: eslint-config-react-app@^5.2.1:
version "5.2.1" version "5.2.1"
resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-5.2.1.tgz#698bf7aeee27f0cea0139eaef261c7bf7dd623df" resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-5.2.1.tgz#698bf7aeee27f0cea0139eaef261c7bf7dd623df"
@ -5723,7 +5738,7 @@ eslint-config-react-app@^5.2.1:
dependencies: dependencies:
confusing-browser-globals "^1.0.9" confusing-browser-globals "^1.0.9"
eslint-import-resolver-node@^0.3.2: eslint-import-resolver-node@^0.3.2, eslint-import-resolver-node@^0.3.3:
version "0.3.3" version "0.3.3"
resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz#dbaa52b6b2816b50bc6711af75422de808e98404" resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz#dbaa52b6b2816b50bc6711af75422de808e98404"
integrity sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg== integrity sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg==
@ -5742,7 +5757,7 @@ eslint-loader@^2.2.1:
object-hash "^1.1.4" object-hash "^1.1.4"
rimraf "^2.6.1" rimraf "^2.6.1"
eslint-module-utils@^2.4.1: eslint-module-utils@^2.4.1, eslint-module-utils@^2.6.0:
version "2.6.0" version "2.6.0"
resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6" resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6"
integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA== integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==
@ -5783,6 +5798,25 @@ eslint-plugin-import@^2.20.2:
read-pkg-up "^2.0.0" read-pkg-up "^2.0.0"
resolve "^1.12.0" resolve "^1.12.0"
eslint-plugin-import@^2.21.2:
version "2.21.2"
resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.21.2.tgz#8fef77475cc5510801bedc95f84b932f7f334a7c"
integrity sha512-FEmxeGI6yaz+SnEB6YgNHlQK1Bs2DKLM+YF+vuTk5H8J9CLbJLtlPvRFgZZ2+sXiKAlN5dpdlrWOjK8ZoZJpQA==
dependencies:
array-includes "^3.1.1"
array.prototype.flat "^1.2.3"
contains-path "^0.1.0"
debug "^2.6.9"
doctrine "1.5.0"
eslint-import-resolver-node "^0.3.3"
eslint-module-utils "^2.6.0"
has "^1.0.3"
minimatch "^3.0.4"
object.values "^1.1.1"
read-pkg-up "^2.0.0"
resolve "^1.17.0"
tsconfig-paths "^3.9.0"
eslint-plugin-jsx-a11y@^6.2.3: eslint-plugin-jsx-a11y@^6.2.3:
version "6.2.3" version "6.2.3"
resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz#b872a09d5de51af70a97db1eea7dc933043708aa" resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz#b872a09d5de51af70a97db1eea7dc933043708aa"
@ -5803,6 +5837,11 @@ eslint-plugin-react-hooks@^1.7.0:
resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.7.0.tgz#6210b6d5a37205f0b92858f895a4e827020a7d04" resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.7.0.tgz#6210b6d5a37205f0b92858f895a4e827020a7d04"
integrity sha512-iXTCFcOmlWvw4+TOE8CLWj6yX1GwzT0Y6cUfHHZqWnSk144VmVIRcVGtUAzrLES7C798lmvnt02C7rxaOX1HNA== integrity sha512-iXTCFcOmlWvw4+TOE8CLWj6yX1GwzT0Y6cUfHHZqWnSk144VmVIRcVGtUAzrLES7C798lmvnt02C7rxaOX1HNA==
eslint-plugin-react-hooks@^2.5.1:
version "2.5.1"
resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-2.5.1.tgz#4ef5930592588ce171abeb26f400c7fbcbc23cd0"
integrity sha512-Y2c4b55R+6ZzwtTppKwSmK/Kar8AdLiC2f9NADCuxbcTgPPg41Gyqa6b9GppgXSvCtkRw43ZE86CT5sejKC6/g==
eslint-plugin-react@^7.20.0: eslint-plugin-react@^7.20.0:
version "7.20.0" version "7.20.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.20.0.tgz#f98712f0a5e57dfd3e5542ef0604b8739cd47be3" resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.20.0.tgz#f98712f0a5e57dfd3e5542ef0604b8739cd47be3"
@ -5898,48 +5937,6 @@ eslint@^6.8.0:
text-table "^0.2.0" text-table "^0.2.0"
v8-compile-cache "^2.0.3" v8-compile-cache "^2.0.3"
eslint@^7.1.0:
version "7.1.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.1.0.tgz#d9a1df25e5b7859b0a3d86bb05f0940ab676a851"
integrity sha512-DfS3b8iHMK5z/YLSme8K5cge168I8j8o1uiVmFCgnnjxZQbCGyraF8bMl7Ju4yfBmCuxD7shOF7eqGkcuIHfsA==
dependencies:
"@babel/code-frame" "^7.0.0"
ajv "^6.10.0"
chalk "^4.0.0"
cross-spawn "^7.0.2"
debug "^4.0.1"
doctrine "^3.0.0"
eslint-scope "^5.0.0"
eslint-utils "^2.0.0"
eslint-visitor-keys "^1.1.0"
espree "^7.0.0"
esquery "^1.2.0"
esutils "^2.0.2"
file-entry-cache "^5.0.1"
functional-red-black-tree "^1.0.1"
glob-parent "^5.0.0"
globals "^12.1.0"
ignore "^4.0.6"
import-fresh "^3.0.0"
imurmurhash "^0.1.4"
inquirer "^7.0.0"
is-glob "^4.0.0"
js-yaml "^3.13.1"
json-stable-stringify-without-jsonify "^1.0.1"
levn "^0.4.1"
lodash "^4.17.14"
minimatch "^3.0.4"
natural-compare "^1.4.0"
optionator "^0.9.1"
progress "^2.0.0"
regexpp "^3.1.0"
semver "^7.2.1"
strip-ansi "^6.0.0"
strip-json-comments "^3.1.0"
table "^5.2.3"
text-table "^0.2.0"
v8-compile-cache "^2.0.3"
espree@^6.1.2: espree@^6.1.2:
version "6.2.1" version "6.2.1"
resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a"
@ -5949,21 +5946,12 @@ espree@^6.1.2:
acorn-jsx "^5.2.0" acorn-jsx "^5.2.0"
eslint-visitor-keys "^1.1.0" eslint-visitor-keys "^1.1.0"
espree@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/espree/-/espree-7.0.0.tgz#8a7a60f218e69f120a842dc24c5a88aa7748a74e"
integrity sha512-/r2XEx5Mw4pgKdyb7GNLQNsu++asx/dltf/CI8RFi9oGHxmQFgvLbc5Op4U6i8Oaj+kdslhJtVlEZeAqH5qOTw==
dependencies:
acorn "^7.1.1"
acorn-jsx "^5.2.0"
eslint-visitor-keys "^1.1.0"
esprima@^4.0.0: esprima@^4.0.0:
version "4.0.1" version "4.0.1"
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
esquery@^1.0.1, esquery@^1.2.0: esquery@^1.0.1:
version "1.3.1" version "1.3.1"
resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57"
integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==
@ -6794,10 +6782,10 @@ functional-red-black-tree@^1.0.1:
resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
gatsby-admin@^0.1.58: gatsby-admin@^0.1.67:
version "0.1.58" version "0.1.67"
resolved "https://registry.yarnpkg.com/gatsby-admin/-/gatsby-admin-0.1.58.tgz#b1cb8325cef1dc79a2e4ff1bc3261ee53695a407" resolved "https://registry.yarnpkg.com/gatsby-admin/-/gatsby-admin-0.1.67.tgz#2813d25ed25f11375500fbe9399ee64ea7a97d66"
integrity sha512-Tum3Avxp7gVH15S9AVRtQ0Ci4mYeQt3Kjvshjs25LPwcUYqr5Uze0kKTeqSlJjXfjxnIIXrHxEza8mzgGq9uzQ== integrity sha512-8TCI6TEycyb3qWmrRm6GieCMVsNnuAkbMXwl8grg5Vyi0UA2oGxilTTwfQERjLNfpsPpuI0rn0197clgYZCwQA==
dependencies: dependencies:
"@emotion/core" "^10.0.28" "@emotion/core" "^10.0.28"
"@emotion/styled" "^10.0.27" "@emotion/styled" "^10.0.27"
@ -6805,12 +6793,13 @@ gatsby-admin@^0.1.58:
"@typescript-eslint/parser" "^2.28.0" "@typescript-eslint/parser" "^2.28.0"
csstype "^2.6.10" csstype "^2.6.10"
formik "^2.1.4" formik "^2.1.4"
gatsby "^2.22.17" gatsby "^2.23.3"
gatsby-interface "0.0.167" gatsby-interface "0.0.167"
gatsby-plugin-typescript "^2.4.4" gatsby-plugin-typescript "^2.4.6"
gatsby-source-graphql "^2.5.3" gatsby-source-graphql "^2.5.4"
react "^16.12.0" react "^16.12.0"
react-dom "^16.12.0" react-dom "^16.12.0"
react-helmet "^6.0.0"
react-icons "^3.10.0" react-icons "^3.10.0"
strict-ui "^0.1.3" strict-ui "^0.1.3"
subscriptions-transport-ws "^0.9.16" subscriptions-transport-ws "^0.9.16"
@ -6819,10 +6808,10 @@ gatsby-admin@^0.1.58:
urql "^1.9.7" urql "^1.9.7"
yup "^0.29.1" yup "^0.29.1"
gatsby-cli@^2.12.42: gatsby-cli@^2.12.45:
version "2.12.42" version "2.12.45"
resolved "https://registry.yarnpkg.com/gatsby-cli/-/gatsby-cli-2.12.42.tgz#52482bb70e6caaa8c53523b738c7b9463561cdc9" resolved "https://registry.yarnpkg.com/gatsby-cli/-/gatsby-cli-2.12.45.tgz#5f99e8ea96264c55e981d13147c1a387c9bf1164"
integrity sha512-R7uRTthtMV6aXqwz4rEdZg3NGF5EYqsEmq9UwS9C5ErVPzdbN6MpR0QitJ6D775Fr62r8rbu0CuiyDpJ2vGUTg== integrity sha512-CY0ltZ5DvrSo30MkPcU2FFGiCrQUjirXAY7TdFEhc8IeV5Gj9E2AFmUF1FO4Dna6yv47WBBaHKFpsiKc5Iq0XA==
dependencies: dependencies:
"@babel/code-frame" "^7.10.1" "@babel/code-frame" "^7.10.1"
"@babel/runtime" "^7.10.2" "@babel/runtime" "^7.10.2"
@ -6839,9 +6828,9 @@ gatsby-cli@^2.12.42:
execa "^3.4.0" execa "^3.4.0"
fs-exists-cached "^1.0.0" fs-exists-cached "^1.0.0"
fs-extra "^8.1.0" fs-extra "^8.1.0"
gatsby-core-utils "^1.3.4" gatsby-core-utils "^1.3.5"
gatsby-recipes "^0.1.36" gatsby-recipes "^0.1.39"
gatsby-telemetry "^1.3.10" gatsby-telemetry "^1.3.11"
hosted-git-info "^3.0.4" hosted-git-info "^3.0.4"
ink "^2.7.1" ink "^2.7.1"
ink-spinner "^3.0.1" ink-spinner "^3.0.1"
@ -6879,6 +6868,18 @@ gatsby-core-utils@^1.3.4:
proper-lockfile "^4.1.1" proper-lockfile "^4.1.1"
xdg-basedir "^4.0.0" xdg-basedir "^4.0.0"
gatsby-core-utils@^1.3.5:
version "1.3.5"
resolved "https://registry.yarnpkg.com/gatsby-core-utils/-/gatsby-core-utils-1.3.5.tgz#3c8f2dc940cec6570d1317f02ba028f327d1e773"
integrity sha512-kbwJ5BeQ8OixJVuBb1AGRL6vdkFz9nFBa6gXqjQ6AAXHhYDrjOYrRMIENT1QLoabWo6tlh0Hyl1agfWaQwW8lg==
dependencies:
ci-info "2.0.0"
configstore "^5.0.1"
fs-extra "^8.1.0"
node-object-hash "^2.0.0"
proper-lockfile "^4.1.1"
xdg-basedir "^4.0.0"
gatsby-design-tokens@^2.0.2: gatsby-design-tokens@^2.0.2:
version "2.0.6" version "2.0.6"
resolved "https://registry.yarnpkg.com/gatsby-design-tokens/-/gatsby-design-tokens-2.0.6.tgz#593aa969e360560369fc59054c01236beed9be7d" resolved "https://registry.yarnpkg.com/gatsby-design-tokens/-/gatsby-design-tokens-2.0.6.tgz#593aa969e360560369fc59054c01236beed9be7d"
@ -6886,10 +6887,10 @@ gatsby-design-tokens@^2.0.2:
dependencies: dependencies:
hex2rgba "^0.0.1" hex2rgba "^0.0.1"
gatsby-graphiql-explorer@^0.4.4: gatsby-graphiql-explorer@^0.4.5:
version "0.4.4" version "0.4.5"
resolved "https://registry.yarnpkg.com/gatsby-graphiql-explorer/-/gatsby-graphiql-explorer-0.4.4.tgz#21f62f2dbb363e783cde1fd8569c8f64594ce647" resolved "https://registry.yarnpkg.com/gatsby-graphiql-explorer/-/gatsby-graphiql-explorer-0.4.5.tgz#63795dc891e0ddc25436f51495342f0f7a2a0a1f"
integrity sha512-9WLWrE7DUOFJ9PQ1ntEQceC0z9JEndRANTkpCTB7MWEBL/fvuj6+oDgmpW/eJPT2KkMuAP+g4o5bKld52MneRA== integrity sha512-5ykkwnMhmIAzcxvVCnvYEk8HmEoFDZLeRET3Ug4sCthYvfucqzG6JJ3RuMGhPElu6Sat0vSS6XKwQ5EPu/sWTA==
dependencies: dependencies:
"@babel/runtime" "^7.10.2" "@babel/runtime" "^7.10.2"
@ -6922,25 +6923,25 @@ gatsby-interface@0.0.167:
lodash.sample "^4.2.1" lodash.sample "^4.2.1"
theme-ui "^0.2.49" theme-ui "^0.2.49"
gatsby-link@^2.4.4: gatsby-link@^2.4.6:
version "2.4.4" version "2.4.6"
resolved "https://registry.yarnpkg.com/gatsby-link/-/gatsby-link-2.4.4.tgz#5887e45f839bba82dfa138b18ed2ce2ec0bcaf9f" resolved "https://registry.yarnpkg.com/gatsby-link/-/gatsby-link-2.4.6.tgz#5fdd2b16175e33ed51f20c9e5d1d0cc3eb2fe7f6"
integrity sha512-saWuA7jmN+p0qrZ9kyWVdvWBBM0Dd1X5PvnEUgZ1pa2jpymbJaDnxYOzTBJr9PCmV9IeMA1z5sqxKkMcPp4LGw== integrity sha512-jOYEJa860KHcVOZ/6gjMv2EnCG7StdD4mLEGEMcEC8mzn4PWHQXHYsGdXcOvjn6SaqJ888hWuYjik5Jm8xW+cg==
dependencies: dependencies:
"@babel/runtime" "^7.10.2" "@babel/runtime" "^7.10.2"
"@types/reach__router" "^1.3.3" "@types/reach__router" "^1.3.3"
prop-types "^15.7.2" prop-types "^15.7.2"
gatsby-page-utils@^0.2.8: gatsby-page-utils@^0.2.9:
version "0.2.8" version "0.2.9"
resolved "https://registry.yarnpkg.com/gatsby-page-utils/-/gatsby-page-utils-0.2.8.tgz#9f49415c92d041bc2d06d37376b35dd20b122004" resolved "https://registry.yarnpkg.com/gatsby-page-utils/-/gatsby-page-utils-0.2.9.tgz#567eb9b446d27a2cbcc99ca8bb6a321e2cfd1a65"
integrity sha512-LlWDt8Eg6hB5RM601f1P7L2NQ17m4//n+OtMwNpSYjhgklyCw2JHmDWj8fqEGjyMYFLbFFiVurCiYqBbvtc2ng== integrity sha512-Mh3QbDdKKrvbJRHtMsBvo+sDTaGfcTiXCFGTkFu2VbL3P6mZySFJ8fDLb9SbQvwvMVw/vD5IZT1KJerfmgfvGQ==
dependencies: dependencies:
"@babel/runtime" "^7.10.2" "@babel/runtime" "^7.10.2"
bluebird "^3.7.2" bluebird "^3.7.2"
chokidar "3.4.0" chokidar "3.4.0"
fs-exists-cached "^1.0.0" fs-exists-cached "^1.0.0"
gatsby-core-utils "^1.3.4" gatsby-core-utils "^1.3.5"
glob "^7.1.6" glob "^7.1.6"
lodash "^4.17.15" lodash "^4.17.15"
micromatch "^3.1.10" micromatch "^3.1.10"
@ -6984,15 +6985,15 @@ gatsby-plugin-offline@^3.2.8:
lodash "^4.17.15" lodash "^4.17.15"
workbox-build "^4.3.1" workbox-build "^4.3.1"
gatsby-plugin-page-creator@^2.3.8: gatsby-plugin-page-creator@^2.3.9:
version "2.3.8" version "2.3.9"
resolved "https://registry.yarnpkg.com/gatsby-plugin-page-creator/-/gatsby-plugin-page-creator-2.3.8.tgz#0b45574426652edcb75803a18a2bf570418b8434" resolved "https://registry.yarnpkg.com/gatsby-plugin-page-creator/-/gatsby-plugin-page-creator-2.3.9.tgz#b0793cf1340dc903560791fea4948c28b2d302ad"
integrity sha512-qREefPFXGg6HY5TVhtKFyhrolKfz4vygdBdpDnhxhDVwBNvT49GSzEXZDgNBFJrd4OzZ5CoI4Z38I/Mxz1760A== integrity sha512-ZNfjSoJ3AyACP5FWo0rwoeuIoZdD58le7oCmcVHVks/KOS/pJVGn8GwcrHE6xxCNM4KzqdfNBGZVyM+7RUASyA==
dependencies: dependencies:
"@babel/runtime" "^7.10.2" "@babel/runtime" "^7.10.2"
bluebird "^3.7.2" bluebird "^3.7.2"
fs-exists-cached "^1.0.0" fs-exists-cached "^1.0.0"
gatsby-page-utils "^0.2.8" gatsby-page-utils "^0.2.9"
glob "^7.1.6" glob "^7.1.6"
lodash "^4.17.15" lodash "^4.17.15"
micromatch "^3.1.10" micromatch "^3.1.10"
@ -7029,10 +7030,10 @@ gatsby-plugin-sharp@^2.6.10:
svgo "1.3.2" svgo "1.3.2"
uuid "^3.4.0" uuid "^3.4.0"
gatsby-plugin-typescript@^2.4.4: gatsby-plugin-typescript@^2.4.6:
version "2.4.4" version "2.4.6"
resolved "https://registry.yarnpkg.com/gatsby-plugin-typescript/-/gatsby-plugin-typescript-2.4.4.tgz#481ba616b608d55ccf3aa869bdfbd2731d68fc1d" resolved "https://registry.yarnpkg.com/gatsby-plugin-typescript/-/gatsby-plugin-typescript-2.4.6.tgz#8c1c53510678978303ce9cd489e69f6696409bd8"
integrity sha512-BWTqUEQ70DrqXQIEE5hl+0NK19ggDLksGZdt4OYJF3cFUmYn6sNhYu9cvKLcj4DLSxFVe1fJl7vK9n0HLdCwRA== integrity sha512-RfI2/k5XHmyNHjKDZDEPha/TNoY0Wh6zeBteqmidoPsJ2GfeFhyyxFxuRak+wYpZqdMh/aVwaJoF9Q1OiS4woQ==
dependencies: dependencies:
"@babel/core" "^7.10.2" "@babel/core" "^7.10.2"
"@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.1" "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.1"
@ -7040,7 +7041,7 @@ gatsby-plugin-typescript@^2.4.4:
"@babel/plugin-proposal-optional-chaining" "^7.10.1" "@babel/plugin-proposal-optional-chaining" "^7.10.1"
"@babel/preset-typescript" "^7.10.1" "@babel/preset-typescript" "^7.10.1"
"@babel/runtime" "^7.10.2" "@babel/runtime" "^7.10.2"
babel-plugin-remove-graphql-queries "^2.9.3" babel-plugin-remove-graphql-queries "^2.9.5"
gatsby-plugin-typography@^2.5.3: gatsby-plugin-typography@^2.5.3:
version "2.5.3" version "2.5.3"
@ -7049,19 +7050,19 @@ gatsby-plugin-typography@^2.5.3:
dependencies: dependencies:
"@babel/runtime" "^7.10.2" "@babel/runtime" "^7.10.2"
gatsby-react-router-scroll@^3.0.2: gatsby-react-router-scroll@^3.0.3:
version "3.0.2" version "3.0.3"
resolved "https://registry.yarnpkg.com/gatsby-react-router-scroll/-/gatsby-react-router-scroll-3.0.2.tgz#9206c3d7a04d14b507431a4032e842d83c21b4cf" resolved "https://registry.yarnpkg.com/gatsby-react-router-scroll/-/gatsby-react-router-scroll-3.0.3.tgz#3c373fe96efe63259235bb5f5f79eca837ab19d1"
integrity sha512-1W+16VxanVJ7RD3LmT0EgpUa7n/GgleJmcHg7ujcI7c2gvroJCTlRKxmu5VB6kVFSlZvUh3KPHdBqKxhPsU0DQ== integrity sha512-VwwF1kmehIbjZek5MeMvf3SySoJUbUhQVQIsteWLqOPU3shz7b1sLpcLu3o0knUn7ml+8NB3rG2Yjb0a/LPBpA==
dependencies: dependencies:
"@babel/runtime" "^7.10.2" "@babel/runtime" "^7.10.2"
scroll-behavior "^0.9.12" scroll-behavior "^0.9.12"
warning "^3.0.0" warning "^3.0.0"
gatsby-recipes@^0.1.36: gatsby-recipes@^0.1.39:
version "0.1.36" version "0.1.39"
resolved "https://registry.yarnpkg.com/gatsby-recipes/-/gatsby-recipes-0.1.36.tgz#a40211b23c11255cd6187b3282d5d2d9bb16441c" resolved "https://registry.yarnpkg.com/gatsby-recipes/-/gatsby-recipes-0.1.39.tgz#6bd079e0011fbe41c14b371f9b757bcaa377c3ad"
integrity sha512-nDIPCOUkwVGwAap7dITKXSrKJ06er0xgs0LTlB5y+ylQ/2NkyY6g1V+DiFF4/SLLjl9iTxNPgtzffoX+5OXSaw== integrity sha512-Pf8EGKhCAv4E1rU0NL6pKH9mC8QB/0pW/9oAAb9Rs2N3TeBYcQ36hQP95ana63GZwY35eKoFzjdWGHmegQw90Q==
dependencies: dependencies:
"@babel/core" "^7.10.2" "@babel/core" "^7.10.2"
"@babel/generator" "^7.10.2" "@babel/generator" "^7.10.2"
@ -7084,8 +7085,8 @@ gatsby-recipes@^0.1.36:
express "^4.17.1" express "^4.17.1"
express-graphql "^0.9.0" express-graphql "^0.9.0"
fs-extra "^8.1.0" fs-extra "^8.1.0"
gatsby-core-utils "^1.3.4" gatsby-core-utils "^1.3.5"
gatsby-telemetry "^1.3.10" gatsby-telemetry "^1.3.11"
glob "^7.1.6" glob "^7.1.6"
graphql "^14.6.0" graphql "^14.6.0"
graphql-compose "^6.3.8" graphql-compose "^6.3.8"
@ -7208,10 +7209,10 @@ gatsby-source-filesystem@^2.3.10:
valid-url "^1.0.9" valid-url "^1.0.9"
xstate "^4.10.0" xstate "^4.10.0"
gatsby-source-graphql@^2.5.3: gatsby-source-graphql@^2.5.4:
version "2.5.3" version "2.5.4"
resolved "https://registry.yarnpkg.com/gatsby-source-graphql/-/gatsby-source-graphql-2.5.3.tgz#353f2949502bf73875caf06653a68265923b9fa7" resolved "https://registry.yarnpkg.com/gatsby-source-graphql/-/gatsby-source-graphql-2.5.4.tgz#fc2eba5e6128bbe2af06c7e1405fca4370fba5dc"
integrity sha512-6WiEdyCpjFKFUzWvY26jrQUF3sBg5F0cpVLndJtSMtwvv6GYeiqllhMC2f8ygGYZvUVBCq1NHN/5Z/wGd0d0ww== integrity sha512-lP8/GS6f1SMQXa4q72iH/CAAZQ/RxwgADPdFSAZS8e7fNkdlhUYpUqY69mdmQxwv5iMqaHMVQTdQmuiKcyQYXg==
dependencies: dependencies:
"@babel/runtime" "^7.10.2" "@babel/runtime" "^7.10.2"
apollo-link "1.2.14" apollo-link "1.2.14"
@ -7223,10 +7224,10 @@ gatsby-source-graphql@^2.5.3:
node-fetch "^1.7.3" node-fetch "^1.7.3"
uuid "^3.4.0" uuid "^3.4.0"
gatsby-telemetry@^1.3.10: gatsby-telemetry@^1.3.11:
version "1.3.10" version "1.3.11"
resolved "https://registry.yarnpkg.com/gatsby-telemetry/-/gatsby-telemetry-1.3.10.tgz#19a8f450b14f42a8d5dcb8b704bcc17d9ff45dd9" resolved "https://registry.yarnpkg.com/gatsby-telemetry/-/gatsby-telemetry-1.3.11.tgz#2a5743387d84e796e11f9577f9981c9b46c34e11"
integrity sha512-Lp2DJhuPh5f5swYfIMcSYfXMi1bdoiO8Z2b3ZW2m+mDZk77dwEQg3dZPXlLyHGxboiO0D8Q7Jz6Fin9mO0T3CA== integrity sha512-k5bzy0G0Me0aQYaW1cOWp0PQ9+wRXHU0lbztdinnRAWlqqb3EGMVPtfUhP7aMJvXtj3UfLy3pk0xBfsX8BHvfA==
dependencies: dependencies:
"@babel/code-frame" "^7.10.1" "@babel/code-frame" "^7.10.1"
"@babel/runtime" "^7.10.2" "@babel/runtime" "^7.10.2"
@ -7235,7 +7236,7 @@ gatsby-telemetry@^1.3.10:
configstore "^5.0.1" configstore "^5.0.1"
envinfo "^7.5.1" envinfo "^7.5.1"
fs-extra "^8.1.0" fs-extra "^8.1.0"
gatsby-core-utils "^1.3.4" gatsby-core-utils "^1.3.5"
git-up "4.0.1" git-up "4.0.1"
is-docker "2.0.0" is-docker "2.0.0"
lodash "^4.17.15" lodash "^4.17.15"
@ -7286,10 +7287,10 @@ gatsby-transformer-sharp@^2.5.4:
semver "^5.7.1" semver "^5.7.1"
sharp "^0.25.1" sharp "^0.25.1"
gatsby@^2.22.17: gatsby@^2.23.3:
version "2.22.17" version "2.23.3"
resolved "https://registry.yarnpkg.com/gatsby/-/gatsby-2.22.17.tgz#e455dc49fedf564b4d7a1e62564a606caf09245f" resolved "https://registry.yarnpkg.com/gatsby/-/gatsby-2.23.3.tgz#d5d7bbe9c68b9d5f982520b06c6a057e034bc2c3"
integrity sha512-drdf4oIpQhX24fqEOzwmbX0qCzY8QDbmqQQ/6GzNgfSd90mTDwYCA7gCxIrzTE9GGwYDGdlokwwq6hONtIoIVA== integrity sha512-uVRJUQuTga7GMag9Rrb+3amjSVoGDPgSTXivhDXW/TzR5ouBr6/rudjcDTruRwFnKsAwUExrYMMXPRCwkMFctQ==
dependencies: dependencies:
"@babel/code-frame" "^7.10.1" "@babel/code-frame" "^7.10.1"
"@babel/core" "^7.10.2" "@babel/core" "^7.10.2"
@ -7313,8 +7314,8 @@ gatsby@^2.22.17:
babel-loader "^8.1.0" babel-loader "^8.1.0"
babel-plugin-add-module-exports "^0.3.3" babel-plugin-add-module-exports "^0.3.3"
babel-plugin-dynamic-import-node "^2.3.3" babel-plugin-dynamic-import-node "^2.3.3"
babel-plugin-remove-graphql-queries "^2.9.3" babel-plugin-remove-graphql-queries "^2.9.5"
babel-preset-gatsby "^0.4.8" babel-preset-gatsby "^0.4.9"
better-opn "1.0.0" better-opn "1.0.0"
better-queue "^3.8.10" better-queue "^3.8.10"
bluebird "^3.7.2" bluebird "^3.7.2"
@ -7353,15 +7354,15 @@ gatsby@^2.22.17:
flat "^4.1.0" flat "^4.1.0"
fs-exists-cached "1.0.0" fs-exists-cached "1.0.0"
fs-extra "^8.1.0" fs-extra "^8.1.0"
gatsby-admin "^0.1.58" gatsby-admin "^0.1.67"
gatsby-cli "^2.12.42" gatsby-cli "^2.12.45"
gatsby-core-utils "^1.3.4" gatsby-core-utils "^1.3.5"
gatsby-graphiql-explorer "^0.4.4" gatsby-graphiql-explorer "^0.4.5"
gatsby-link "^2.4.4" gatsby-link "^2.4.6"
gatsby-plugin-page-creator "^2.3.8" gatsby-plugin-page-creator "^2.3.9"
gatsby-plugin-typescript "^2.4.4" gatsby-plugin-typescript "^2.4.6"
gatsby-react-router-scroll "^3.0.2" gatsby-react-router-scroll "^3.0.3"
gatsby-telemetry "^1.3.10" gatsby-telemetry "^1.3.11"
glob "^7.1.6" glob "^7.1.6"
got "8.3.2" got "8.3.2"
graphql "^14.6.0" graphql "^14.6.0"
@ -7605,7 +7606,7 @@ global-prefix@^1.0.1:
is-windows "^1.0.1" is-windows "^1.0.1"
which "^1.2.14" which "^1.2.14"
global@^4.3.0: global@^4.3.0, global@^4.4.0:
version "4.4.0" version "4.4.0"
resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406"
integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==
@ -9579,14 +9580,6 @@ levn@^0.3.0, levn@~0.3.0:
prelude-ls "~1.1.2" prelude-ls "~1.1.2"
type-check "~0.3.2" type-check "~0.3.2"
levn@^0.4.1:
version "0.4.1"
resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
dependencies:
prelude-ls "^1.2.1"
type-check "~0.4.0"
lines-and-columns@^1.1.6: lines-and-columns@^1.1.6:
version "1.1.6" version "1.1.6"
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
@ -10949,18 +10942,6 @@ optionator@^0.8.3:
type-check "~0.3.2" type-check "~0.3.2"
word-wrap "~1.2.3" word-wrap "~1.2.3"
optionator@^0.9.1:
version "0.9.1"
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499"
integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==
dependencies:
deep-is "^0.1.3"
fast-levenshtein "^2.0.6"
levn "^0.4.1"
prelude-ls "^1.2.1"
type-check "^0.4.0"
word-wrap "^1.2.3"
original@>=0.0.5, original@^1.0.0: original@>=0.0.5, original@^1.0.0:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f"
@ -11951,11 +11932,6 @@ prebuild-install@^5.3.3:
tunnel-agent "^0.6.0" tunnel-agent "^0.6.0"
which-pm-runs "^1.0.0" which-pm-runs "^1.0.0"
prelude-ls@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
prelude-ls@~1.1.2: prelude-ls@~1.1.2:
version "1.1.2" version "1.1.2"
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
@ -12347,6 +12323,11 @@ react-fast-compare@^2.0.1, react-fast-compare@^2.0.2:
resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9" resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9"
integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw== integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==
react-fast-compare@^3.1.1:
version "3.2.0"
resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.0.tgz#641a9da81b6a6320f270e89724fb45a0b39e43bb"
integrity sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==
react-focus-lock@^2.3.1: react-focus-lock@^2.3.1:
version "2.3.1" version "2.3.1"
resolved "https://registry.yarnpkg.com/react-focus-lock/-/react-focus-lock-2.3.1.tgz#9d5d85899773609c7eefa4fc54fff6a0f5f2fc47" resolved "https://registry.yarnpkg.com/react-focus-lock/-/react-focus-lock-2.3.1.tgz#9d5d85899773609c7eefa4fc54fff6a0f5f2fc47"
@ -12369,6 +12350,16 @@ react-helmet@^5.2.1:
react-fast-compare "^2.0.2" react-fast-compare "^2.0.2"
react-side-effect "^1.1.0" react-side-effect "^1.1.0"
react-helmet@^6.0.0:
version "6.1.0"
resolved "https://registry.yarnpkg.com/react-helmet/-/react-helmet-6.1.0.tgz#a750d5165cb13cf213e44747502652e794468726"
integrity sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==
dependencies:
object-assign "^4.1.1"
prop-types "^15.7.2"
react-fast-compare "^3.1.1"
react-side-effect "^2.1.0"
react-hot-loader@^4.12.21: react-hot-loader@^4.12.21:
version "4.12.21" version "4.12.21"
resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-4.12.21.tgz#332e830801fb33024b5a147d6b13417f491eb975" resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-4.12.21.tgz#332e830801fb33024b5a147d6b13417f491eb975"
@ -12451,6 +12442,11 @@ react-side-effect@^1.1.0:
dependencies: dependencies:
shallowequal "^1.0.1" 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-style-singleton@^2.1.0: react-style-singleton@^2.1.0:
version "2.1.0" version "2.1.0"
resolved "https://registry.yarnpkg.com/react-style-singleton/-/react-style-singleton-2.1.0.tgz#7396885332e9729957f9df51f08cadbfc164e1c4" resolved "https://registry.yarnpkg.com/react-style-singleton/-/react-style-singleton-2.1.0.tgz#7396885332e9729957f9df51f08cadbfc164e1c4"
@ -12661,7 +12657,7 @@ regexpp@^2.0.1:
resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f"
integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==
regexpp@^3.0.0, regexpp@^3.1.0: regexpp@^3.0.0:
version "3.1.0" version "3.1.0"
resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2"
integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==
@ -12985,7 +12981,7 @@ resolve-url@^0.2.1:
resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.15.1, resolve@^1.3.2, resolve@^1.8.1: resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.15.1, resolve@^1.17.0, resolve@^1.3.2, resolve@^1.8.1:
version "1.17.0" version "1.17.0"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444"
integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==
@ -13308,7 +13304,7 @@ semver@^6.0.0, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0:
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
semver@^7.2.1, semver@^7.3.2: semver@^7.3.2:
version "7.3.2" version "7.3.2"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938"
integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==
@ -14206,7 +14202,7 @@ strip-indent@^1.0.1:
dependencies: dependencies:
get-stdin "^4.0.1" get-stdin "^4.0.1"
strip-json-comments@^3.0.1, strip-json-comments@^3.1.0: strip-json-comments@^3.0.1:
version "3.1.0" version "3.1.0"
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.0.tgz#7638d31422129ecf4457440009fba03f9f9ac180" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.0.tgz#7638d31422129ecf4457440009fba03f9f9ac180"
integrity sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w== integrity sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==
@ -14700,6 +14696,16 @@ ts-pnp@^1.1.6:
resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92"
integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==
tsconfig-paths@^3.9.0:
version "3.9.0"
resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b"
integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==
dependencies:
"@types/json5" "^0.0.29"
json5 "^1.0.1"
minimist "^1.2.0"
strip-bom "^3.0.0"
tslib@^1.0.0, tslib@^1.10.0, tslib@^1.11.1, tslib@^1.11.2, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: tslib@^1.0.0, tslib@^1.10.0, tslib@^1.11.1, tslib@^1.11.2, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3:
version "1.13.0" version "1.13.0"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043"
@ -14734,13 +14740,6 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0:
resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
type-check@^0.4.0, type-check@~0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
dependencies:
prelude-ls "^1.2.1"
type-check@~0.3.2: type-check@~0.3.2:
version "0.3.2" version "0.3.2"
resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
@ -15698,7 +15697,7 @@ wonka@^4.0.10, wonka@^4.0.9:
resolved "https://registry.yarnpkg.com/wonka/-/wonka-4.0.14.tgz#77d680a84e575ed15a9f975eb87d6c530488f3a4" resolved "https://registry.yarnpkg.com/wonka/-/wonka-4.0.14.tgz#77d680a84e575ed15a9f975eb87d6c530488f3a4"
integrity sha512-v9vmsTxpZjrA8CYfztbuoTQSHEsG3ZH+NCYfasHm0V3GqBupXrjuuz0RJyUaw2cRO7ouW2js0P6i853/qxlDcA== integrity sha512-v9vmsTxpZjrA8CYfztbuoTQSHEsG3ZH+NCYfasHm0V3GqBupXrjuuz0RJyUaw2cRO7ouW2js0P6i853/qxlDcA==
word-wrap@^1.2.3, word-wrap@~1.2.3: word-wrap@~1.2.3:
version "1.2.3" version "1.2.3"
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==