diff --git a/docs/categories.yml b/docs/categories.yml index 5ed2a767394ff..0aa283ada6c51 100644 --- a/docs/categories.yml +++ b/docs/categories.yml @@ -53,6 +53,7 @@ starter: - Square - Storybook - Stripe + - Style Guide - Styling:Ant Design - Styling:Bootstrap - Styling:Bulma diff --git a/docs/creators/creators.yml b/docs/creators/creators.yml index 3a5d52adc5a28..0afcc06ae6901 100644 --- a/docs/creators/creators.yml +++ b/docs/creators/creators.yml @@ -554,3 +554,11 @@ for_hire: true hiring: false portfolio: true +- name: Webplace + type: agency + image: images/webplace.png + description: >- + Webplace have been providing exceptional digital experiences for a vast range of clients since 2003. We provide digital strategy, UX / UI design, Web development, QA testing and ongoing maintenance & support. We are experts at WordPress, Drupal & Joomla and now use WordPress and Drupal as a Headless CMS with React / Gatsby as the frontend. + website: https://www.webplace.com.au + for_hire: true + portfolio: true diff --git a/docs/creators/images/webplace.png b/docs/creators/images/webplace.png new file mode 100644 index 0000000000000..cf42f7be64d3e Binary files /dev/null and b/docs/creators/images/webplace.png differ diff --git a/docs/docs/gatsby-image.md b/docs/docs/gatsby-image.md index b8f9b67b626a1..ae093360198b1 100644 --- a/docs/docs/gatsby-image.md +++ b/docs/docs/gatsby-image.md @@ -314,7 +314,7 @@ If you don't want to use the [blur-up effect](https://using-gatsby-image.gatsbyj If you want to use the [traced placeholder SVGs](https://using-gatsby-image.gatsbyjs.org/traced-svg/), choose the fragment with `tracedSVG` at the end. -#### About `withWebP` +#### About `withWebp` If you want to automatically use [WebP images](https://developers.google.com/speed/webp/) when the browser supports the file format, use the `withWebp` fragments. If the browser doesn't support WebP, `gatsby-image` will fall back to the default image format. diff --git a/docs/sites.yml b/docs/sites.yml index 97e80dfc9f2dc..13a46daf89411 100644 --- a/docs/sites.yml +++ b/docs/sites.yml @@ -856,7 +856,7 @@ - title: Alec Lomas's Portfolio / Blog main_url: https://www.lowmess.com/ url: https://www.lowmess.com/ - source_url: https://github.com/lowmess/lowmess + source_url: https://github.com/lowmess/lowmess.com featured: false categories: - Web Development @@ -10867,7 +10867,6 @@ description: > Narration Box provides cost effective voiceovers and narrations at scale using an intuitive editor and state of the art speech synthesis. categories: - - Styling:Tailwind - Productivity - Technology - Podcast @@ -11303,6 +11302,15 @@ - Marketing built_by: Laputan Software built_by_url: https://laputan.com.au +- title: Laputan Schools + main_url: https://schools.laputan.com.au + url: https://schools.laputan.com.au + description: > + Laputan Schools helps parents to research and engage with the schools around their areas. + categories: + - Education + built_by: Laputan Software + built_by_url: https://laputan.com.au - title: LeanyLabs main_url: https://leanylabs.com/ url: https://leanylabs.com/mvp-development/ @@ -11383,6 +11391,27 @@ built_by: Gabriel Giordano built_by_url: https://gabrielgiordano.com featured: false +- title: Prescriptive Data Solutions + main_url: https://www.prescriptive.solutions + url: https://www.prescriptive.solutions + source_url: https://github.com/prescriptive/2018Q4Website + description: > + IT Solution Delivery with Unique Benefits to the Enterprise Buyer. + categories: + - Technology + - Consulting +- title: LANDTX + main_url: https://www.landtx.com + url: https://www.landtx.com + source_url: https://github.com/ltx-digett/landtx + description: > + LANDTX markets investment, recreational, ranch and farm lands throughout Texas. + categories: + - Real Estate + - Business + built_by: Digett + built_by_url: https://www.digett.com + featured: false - title: Raleigh Bikes url: https://www.raleigh.co.uk/gb/en/ main_url: https://raleigh.co.uk/ @@ -11519,6 +11548,64 @@ built_by: HiringSolved built_by_url: https://hiringsolved.com/home/ featured: false +- title: Carie Fisher brings accessibility + fun to the web + url: https://cariefisher.com + main_url: https://cariefisher.com + source_url: https://github.com/cehfisher/cehfisher.github.io + description: > + Who says accessible websites have to be ugly and boring? Carie Fisher's blog/portfolio website aims to prove otherwise. + categories: + - Accessibility + - Blog + - Design + built_by: Carie Fisher + built_by_url: https://twitter.com/cariefisher +- title: Concept Classes + main_url: https://conceptclassesindore.xyz/ + url: https://www.conceptclassesindore.xyz/ + description: > + A fast and blazing website made for coaching classes + categories: + - Education + - Featured + built_by: Harsh Solanki +- title: ZN Agency + url: https://zn.agency + main_url: https://zn.agency + description: > + We are a digital consulting agency in Brisbane with UI/UX, Web Design & Development and Branding services. Our purpose is to contribute our share of positive experiences to this world. + categories: + - Agency + - Business + - Consulting + - Portfolio + - Technology + - User Experience + - Web Development + built_by: Nate Zerk + built_by_url: https://natezerk.com +- title: Marcus Wood + main_url: https://www.marcuswood.io/ + url: https://www.marcuswood.io/ + description: > + Personal website for Marcus Wood, a web developer that builds products with React, TypeScript, and GraphQL. + categories: + - Blog + - Portfolio + - Web Development + built_by: Marcus Wood + built_by_url: https://www.marcuswood.io/ +- title: Crogic + url: https://crogic.jp + main_url: https://crogic.jp + description: > + Web and Music Creator's porfolio site. + categories: + - Portfolio + - Web Development + - Music + built_by: Mei + built_by_url: https://twitter.com/vo_mei0623 - title: Reactive Resume url: https://rxresu.me main_url: https://rxresu.me @@ -11541,7 +11628,7 @@ - Community - Event - SEO -- title: John Kavanagh Portfolio +- title: John Kavanagh's Portfolio url: https://johnkavanagh.co.uk/ main_url: https://johnkavanagh.co.uk/ description: > @@ -11550,6 +11637,22 @@ - Portfolio - Technology - Web Development + - Blog + - Freelance + built_by: John Kavanagh + built_by_url: https://johnkavanagh.co.uk/ + featured: false +- title: Red Central + url: https://redcentral.co.uk/ + main_url: https://redcentral.co.uk/ + description: > + Based in Bristol in the UK, Red Central is the World's no.1 creative agency for entertainment and brand licensing. + categories: + - Agency + - Entertainment + - Media + - Consulting + - Design built_by: John Kavanagh built_by_url: https://johnkavanagh.co.uk/ featured: false @@ -11589,6 +11692,124 @@ - Business built_by: leaniercode featured: false +- title: laury.dev + url: https://laury.dev + main_url: https://laury.dev + source_url: https://github.com/laurybueno/laury.dev + description: > + Blog and portfolio of Laury Bueno, software developer and journalist + categories: + - Open Source + - Blog + - Portfolio + - Programming + - Technology + built_by: Laury Bueno + built_by_url: https://github.com/laurybueno/ +- title: Github Profile README Generator + url: https://rahuldkjain.github.io/gh-profile-readme-generator/ + main_url: https://rahuldkjain.github.io/gh-profile-readme-generator/ + source_url: https://github.com/rahuldkjain/github-profile-readme-generator + description: > + Generate github profile README easily with latest add-ons like visitors count, github stats, etc using minimal UI. + categories: + - Portfolio + - Open Source + built_by: Rahul Jain + built_by_url: https://rahuldkjain.github.io +- title: KuliahSG + url: https://kuliah.sg + main_url: https://kuliah.sg + categories: + - Education + description: Online Islamic content in Singapore +- title: Ámbito DΓ³lar + url: https://ambito-dolar.app + main_url: https://ambito-dolar.app + description: > + Free mobile application that informs the different exchange rates USD vs ARS in Argentina. + categories: + - App + - Landing Page + - Finance + built_by: Ariel Falduto + built_by_url: https://outa.im +- title: UP42 + main_url: https://up42.com/ + url: https://up42.com/ + description: UP42 is an open marketplace to buy and sell Earth Observation data and analytics algorithms. UP42 is also a platform to build and run analytics algorithms. + built_by: Axel Fuhrmann + built_by_url: https://axelfuhrmann.com/ + featured: false + categories: + - Data + - Technology + - Business + - Blog + - API +- title: Webplace + url: https:/www.webplace.com.au + main_url: https:/www.webplace.com.au + description: Corporate website for the Webplace Digital Agency + categories: + - Web Development + - Agency + - Portfolio + built_by: Webplace + built_by_url: https://www.webplace.com.au + featured: false +- title: Motherhost + main_url: https://motherhost.com/ + url: https://motherhost.com/ + description: > + Ecommerce website for web hosting company. + categories: + - Web Development + - E-commerce + built_by: Motherhost + built_by_url: https://motherhost.com +- title: Oomph + url: https://www.oomphinc.com/agency + main_url: https://www.oomphinc.com + description: > + We craft digital products β€” but we make so much more. We design delight. We make a lasting first impression. We communicate value & purpose. We build lifelong relationships. + categories: + - Accessibility + - Agency + - Business + - Design + - Marketing + - Technology + - User Experience + - Web Development + built_by: Oomph, Inc. + built_by_url: https://www.oomphinc.com +- title: FatihaTV + url: https://fatihatv.com + main_url: https://fatihatv.com + description: A distaction-free platform to consume Islamic content from reputable Youtube Channels + categories: + - Community + - Library + - Media + - Nonprofit + - SEO + built_by: TengkuHafidz + built_by_url: https://fidz.dev +- title: WebSheets Generator + url: https://my.websheets.co + main_url: https://demo.websheets.co + source_url: https://github.com/tengkuhafidz/websheets-generator + description: Generate websites with just Google Sheets + categories: + - Open Source + - Web Development + - Directory + - Gallery + - Portfolio + - Documentation + built_by: Tengku Hafidz + built_by_url: https://twitter.com/sohafidz - title: The Mezzofanti Guild - Language Learning Made Simple url: https://www.mezzoguild.com main_url: https://www.mezzoguild.com @@ -11602,3 +11823,15 @@ built_by: Donovan Nagel built_by_url: https://www.donovannagel.com featured: false +- title: Alex Perronnet Personal Website + url: https://alexperronnet.io + main_url: https://alexperronnet.io + source_url: https://github.com/alexperronnet/alexperronnet.io + description: > + I'm Alex Perronnet, a french freelance developer and designer. I'm also an open-source contributor and a content creator. + categories: + - Open Source + - Freelance + built_by: Alex Perronnet + built_by_url: https://alexperronnet.io + featured: false diff --git a/docs/starters.yml b/docs/starters.yml index ae0527800959c..ed8476e1d8038 100644 --- a/docs/starters.yml +++ b/docs/starters.yml @@ -1,3 +1,20 @@ +- url: https://gatsby-starter-lamma.netlify.app/ + repo: https://github.com/desktopofsamuel/gatsby-starter-lamma + description: A minimal, elegant, dark theme blog starter. Forked from Gatsby Advance Starter. + tags: + - Blog + - SEO + - Markdown + - MDX + features: + - Gatsby v2 + MDX + - Main page, Blog page, Category page, Tags Page + - Dark mode using use-dark-mode + - Subtle table of content component + - SEO with react-helmet + - Optimized image rendering using gatsby-image + - Icons from Font Awesome + - Programmatically generates styled pages for each blog post written in Markdown - url: https://mdx-cms-docs.netlify.app/ repo: https://github.com/danielcurtis/gatsby-starter-netlify-docs description: An accessible and blazing fast documentation starter for Gatsby integrated with Netlify CMS. @@ -60,6 +77,31 @@ - Offline Support - RSS Feed - Composable and extensible +- url: https://gatsby-typescript-markdown-starter.vercel.app/ + repo: https://github.com/caelinsutch/gatsby-typescript-markdown-starter + description: A Gatsby starter with TypeScript and Markdown Preconfigured to Make a Portfolio. + tags: + - Blog + - SEO + - Styling:SCSS + - Styling:CSS-in-JS + - Markdown + - Portfolio + features: + - Eslint/Prettier configured + - Easy to customize + - Typescript pre configured + - Markdown posts with PrismJS code styling + - Categories based off a yaml file + - Preconfigured with Gatsby Image + - High Lighthouse Scores + - Easy to understand product structure + - CSS in JS with Emotion + - Sass stylesheets + - React Helmet for SEO best practices and metatags + - SEO optimized + - Projects page, categories, home, 404 page + - Responsive - url: https://gatsby-starter-wordpress-twenty-twenty.netlify.app/ repo: https://github.com/henrikwirth/gatsby-starter-wordpress-twenty-twenty description: A port of the WordPress Twenty Twenty theme to Gatsby. @@ -386,6 +428,16 @@ - Use your GitHub as your own portfolio site - List your GitHub repositories - GitHub GraphQL API v4 +- url: https://gatsby-starter-github-repositories.netlify.app + repo: https://github.com/tool3/gatsby-starter-github-repositories + description: Single page starter based on gatsby-source-github-api and gatsby-starter-github-api + tags: + - Portfolio + - Onepage + features: + - Use your GitHub as your own portfolio site + - List your GitHub repositories + - GitHub GraphQL API v4 - url: https://gatsby-starter-bloomer.netlify.app/ repo: https://github.com/Cethy/gatsby-starter-bloomer @@ -1629,6 +1681,23 @@ - ESLint with Airbnb's config - Prettier integrated into ESLint - A few example components and pages with stories and simple site structure +- url: https://awesome-gatsby-starter-ts.netlify.app/ + repo: https://github.com/South-Paw/awesome-gatsby-starter-ts + description: TypeScript starter with a preconfigured MDX, Storybook, and ESLint environment for component first development of your next Gatsby site. + tags: + - Language:TypeScript + - MDX + - Markdown + - Storybook + - Styling:CSS-in-JS + - Linting + features: + - Gatsby MDX for JSX in Markdown loading, parsing, and rendering of pages + - Storybook for isolated component development + - styled-components for CSS-in-JS + - ESLint with Airbnb's config + - Prettier integrated into ESLint + - A few example components and pages with stories and simple site structure - url: https://santosfrancisco.github.io/gatsby-starter-cv/ repo: https://github.com/santosfrancisco/gatsby-starter-cv description: A simple starter to get up and developing your digital curriculum with Gatsby' @@ -4001,20 +4070,6 @@ - Alternate links to other languages - Sitemap with language information - Localized 404 pages -- url: https://gatsby-skeleton.netlify.app/ - repo: https://github.com/msallent/gatsby-skeleton - description: Gatsby starter with TypeScript and all sort of linting - tags: - - Language:TypeScript - - Styling:CSS-in-JS - - SEO - features: - - TypeScript - - Styled-Components - - ESLint - - Prettier - - Stylelint - - SEO - url: https://nehalem.netlify.app/ repo: https://github.com/nehalist/gatsby-starter-nehalem description: A starter for the Gatsby Nehalem Theme @@ -6743,6 +6798,7 @@ - Designed with component shadowing in mind to allow easier customization. - Theme UI is deeply integrated with design tokens and variants throughout. - Color mode switching available by default. + - RSS Feed - SEO optimized to include social media images and Twitter handles. - React Scroll for one page, anchor based navigation is available. - Code highlighting via Prism. @@ -6823,6 +6879,35 @@ - Fully responsive - Includes React Helmet to allow editing site meta tags - All landing page content can be customised through YAML files stored in content folder and in gatsby-config.js +- url: https://gatsby-tfs-acme-starter.netlify.app/ + repo: https://github.com/tiagofsanchez/gatsby-tfs-acme-starter + description: Your new digital garden. ACME Blog is a starter that was build on top of a gatsby-theme-acmeblog + tags: + - SEO + - Blog + - MDX + features: + - MDX + - Light and Dark mode + - Includes React Helmet to allow editing site meta tags + - Theme-ui + - Tags + - Categories +- url: https://code-notes-example.netlify.com/ + repo: https://github.com/MrMartineau/gatsby-starter-code-notes + description: A starter for the "Code Notes" Gatsby theme + tags: + - Markdown + - MDX + - Documentation + - Styling:Theme-UI + features: + - Notes can be written using Markdown or MDX + - Full syntax highlighting for most programming languages + - Notes can be tagged + - Notes can have associated emojis πŸ‘ + - Extra markdown features have also been added. See the demo for in-depth examples + - Note search powered by the super-fast Flexsearch - url: https://adityaketkar.netlify.app/ repo: https://github.com/adityaketkar/circle-packing-personal-homepage description: A Customizable Personal-Website Template, Ready to Deploy in 10 mins! @@ -6841,6 +6926,7 @@ tags: - Blog - SEO + - Search - Markdown - HTML5UP - Pagination @@ -6916,6 +7002,75 @@ - Pagination - Share Button - Prism for code preview +- url: https://gatsby-bootstrap-snipcart.netlify.app/ + repo: https://github.com/julianbattaglino/gatsby-snipcart-eccomerce.git + description: A simple e-commerce shop built using Gatsby / React Bootstrap and Snipcart. + tags: + - E-commerce + features: + - Pwa + - Styled Components +- url: https://gatsby-starter-emotion-theme.netlify.app/ + repo: https://github.com/jackoliver/gatsby-starter-emotion-theme + description: Gatsby+Emotion+Theming, made to get up and running quicker with standard marketing microsites. + tags: + - Styling:CSS-in-JS + features: + - Alias imports for quicker development + - Emotion theming out of the box + - Easy to change global parameters + - BYOD (Bring your own data sources) +- url: https://gatsby-starter-catalyst-lithium.netlify.app/ + repo: https://github.com/ehowey/gatsby-starter-catalyst-lithium + description: A personal blog starter with large featured images, SEO optimization, dark mode, and support for many different frontmatter fields. Based on Gatsby Theme Catalyst. Uses MDX for content and Theme UI for styling. Includes a core theme, a header theme, a footer theme, and a blog theme. + tags: + - MDX + - Styling:Theme-UI + - SEO + - PWA + - Blog + features: + - Based on Gatsby Theme Catalyst series of themes and starters. + - Theme options are used to enable some simple layout changes. + - Designed with component shadowing in mind to allow easier customization. + - Theme UI is deeply integrated with design tokens and variants throughout. + - Color mode switching available by default. + - RSS Feed + - SEO optimized to include social media images and Twitter handles. + - React Scroll for one page, anchor based navigation is available. + - Code highlighting via Prism. +- url: https://ghost-novela-preview.draftbox.co/ + repo: https://github.com/draftbox-co/gatsby-ghost-novela-starter + description: A Gatsby starter for creating blogs from headless Ghost CMS. + tags: + - AMP + - Blog + - CMS:Headless + - CMS:Ghost + - Disqus + - Language:TypeScript + - Markdown + - MDX + - Netlify + - Pagination + - PWA + - RSS + - SEO + - Styling:CSS-in-JS + - Styling:Theme-UI + features: + - Novela theme by Narrative + - Data sourcing from headless Ghost + - Responsive design + - SEO optimized + - OpenGraph structured data + - Twitter Cards meta + - Sitemap Generation + - XML Sitemaps + - Progressive Web App + - Offline Support + - RSS Feed + - Composable and extensible - url: https://gatsby-starter-portfolio.herokuapp.com/ repo: https://github.com/surudhb/gatsby-personal-site-template description: A minimalist dev portfolio featuring a blog, SEO, app-theming with React.Context, Bootstrap and Sass @@ -6941,6 +7096,285 @@ - Blog posts page features a live filter tool - Uses site metadata to populate About page - Resume page generated using template Markdown files +- url: https://cocky-williams-9d49bd.netlify.app/ + repo: https://github.com/peterdurham/gatsby-starter-blog-boost + description: A Netlify CMS powered blog starter to jumpstart your personal or company's development. + tags: + - Blog + - Markdown + - CMS:Netlify + features: + - Articles (Blog Post) CMS Model + - Topics pages + - Tag Pages + - Mobile ready +- url: https://gatsby-starter-skeleton.netlify.app/ + repo: https://github.com/msallent/gatsby-starter-skeleton + description: Gatsby starter featuring TypeScript, ESLint, Prettier and more... + tags: + - Language:TypeScript + - Linting + - Styling:SCSS + - SEO + features: + - TypeScript (even for gatsby-* files!) + - ESLint + - Prettier + - stylelint + - husky + - lint-staged + - Layout and SEO components + - SCSS Modules +- url: https://gatsby-persoanl.netlify.app/ + repo: https://github.com/AbdaliDahir/gatsby-portfolio + description: creative personal & portfolio template based on gatsby. designed so you can showcase your work and write your blogs. + tags: + - Blog + - Portfolio + - SEO + - Styling:CSS-in-JS + - Markdown + - Landing Page + features: + - creative portfolio + blog + - Styled components + - Responsive Design + - Portfolio + - Blog + - Github Api + - Google Analytics + - Create pages and posts + - Show works +- url: https://gatsby-starter-vadyan.netlify.app/ + repo: https://github.com/p1t1ch/gatsby-starter-vadyan + description: A modern content-agnostic Gatsby starter + tags: + - Language:TypeScript + - Linting + - Netlify + - PWA + - SEO + - Storybook + - Styling:CSS-in-JS + - Testing + features: + - πŸ’¬ Static type checking with Typescript + - πŸ₯‡ Linting environment with ESLint, Prettier, Husky & lint-staged + - 🎲 Testing environment with Jest, RTL & Cypress + - πŸ‘©β€πŸŽ€ CSS in JS styling with Emotion + - πŸ“• Work with components in Storybook + - πŸŒ€ Transform SVGs into React components with SVGR + - ✨ Full PWA support + - 🧠 Apollo Client setup for dynamic data + - 🚦 Ready to use CI/CD setup with Github Actions + - πŸ“Š Analyze generated build with Webpack Bundle Analyzer + - πŸ’₯ Write pretty imports with Webpack aliases +- url: https://gatsby-p5-gallery-starter.herokuapp.com/ + repo: https://github.com/doubledherin/gatsby-p5-starter + description: A responsive gallery / portofolio site for showing off your p5.js sketches, with React-p5.js integration via a built-in wrapper. + tags: + - Gallery + - Portfolio + - Styling:SCSS + + features: + - A responsive gallery website set up to easily contain generative art and other works created with p5.js +- url: https://emulsify-ds.github.io/gatsby-starter-emulsify-mdx/ + repo: https://github.com/emulsify-ds/gatsby-starter-emulsify-mdx + description: A starter for a style guide powered by Gatsby Theme Emulsify + tags: + - Style Guide + - Documentation + - Storybook + - Markdown + - MDX + - Styling:Theme-UI + features: + - Fully customizable style guide + - Document pages and components using Markdown/MDX + - Show live Storybook components with a shortcode + - Flexible code syntax highlighting using PrismJS + - Theming using config-based Theme UI + - Support for modes - light/dark built-in + - Image and file support in Markdown + - Shortcodes for wrapping components and building tab links + - Gatsby shadowing for Gatsby Theme Emulsify components + - Supports linking multiple style guides +- url: https://kontent-sample-app-gatsby-intranet.netlify.app + repo: https://github.com/Simply007/kontent-sample-app-gatsby-intranet + description: Showcase of Kentico Kontent Intranet admin UI using Material design. + tags: + - CMS:Headless + - CMS:Kontent + - Netlify + - Styling:Material + - i18n + features: + - Kentico Kontent CaaS platform as the data source + - Kentico Kontent rich text element resolution example + - Showcasing multilingual possibilities + - Includes plugins for easy, beautiful typography + - Material Design + - Intranet showcase +- url: https://varunagrawal.github.io/gatsby-bootstrap-template/ + repo: https://github.com/varunagrawal/gatsby-bootstrap-template + description: A minimalistic Gatsby starter template with Bootstrap 4 included. Great for getting started with Gatsby without worrying out styling. + tags: + - Styling:Bootstrap + - Client-side App + - Landing Page + features: + - Minimalistic, so nothing extra other than the barebones. + - Boostrap 4 support out of the box. + - Comes with React Helmet for adding site meta tags. +- url: https://demo.websheets.co + repo: https://github.com/tengkuhafidz/WebSheets-Listing-Page + description: A listing website generator based on a standard Google Sheets template. Manage the branding, layout, and data of the site by just updating the Google Sheets. + tags: + - Google Sheets + - Language:TypeScript + - Styling:Tailwind + - Styling:PostCSS + - PWA + - SEO + - Onepage + - Gallery + - Portfolio + features: + - Google Sheets as data point + - Change the Branding, template, and data of the site by just updating the Google Sheets + - Fast-loading static site + - Progressive web app with offline capabilities + - Customisable SEO and site metadata + - Social share + - Dark Mode + - Google Analytics + - Search functionality + - Responsive Design + - Preconfigured prettier, eslint, husky +- url: https://www.minimal-portfolio.openarchitex.dev/ + repo: https://github.com/OpenArchitex/gatsby-starter-minimal-portfolio + description: A simple portfolio with About, Projects and Contact sections created using Theme UI and MDX + tags: + - Portfolio + - Markdown + - MDX + - Styling:Tailwind + - Styling:Theme-UI + - Onepage + features: + - Gatsby v2 + - Simple portfolio with About, Projects and Contact sections + - Uses MDX and Theme UI for styling + - SEO enabled on each page with react-helmet +- url: https://renyuanz.github.io/leonids/ + repo: https://github.com/renyuanz/leonids + description: A simple, fixed sidebar two columns blog theme using tailwind to polish and Github Actions to deploy + tags: + - Blog + - SEO + - Markdown + - Styling:Tailwind + - Styling:PostCSS + features: + - All gatsby-starter-blog (the official blog theme) features + - Light/Dark mode + - Uses PostCSS with Tailwind to make styling pleasurable + - Auto-deploys to Github pages with Github actions CI + - SEO enabled on each page with react-helmet + - Features optimized image rendering using gatsby-image + - Writes with Markdown, your favourite writing tool +- url: https://gatsby-opinionated-starter.netlify.app/ + repo: https://github.com/datacrafts-io/gatsby-opinionated-starter + description: Opinionated full-fledged TypeScript dev environment starter + tags: + - Styling:SCSS + - Styling:Other + - Testing + - Language:TypeScript + - Linting + - Storybook + features: + - Storybook support + - SCSS + SCSS Modules support + - Jest + testing-library support + - TypeScript support + - ESLint support for both ES and TS + - remark-lint support for linting markdown files + - style-lint support for linting SCSS and SCSS Modules + - GitHub Actions CI optional support + - Renovate bot optional support + - Husky optional support + - Typography.js support + - Netlify deploy optional support +- url: https://gatsby-starter-fresh.netlify.app + repo: https://github.com/mishal23/gatsby-starter-fresh + description: A minimal GatsbyJS starter blog template using the Fresh Theme for anyone to build a blogging site + tags: + - Portfolio + - Blog + - SEO + - Markdown + features: + - Gatsby v2 + - Blazing fast loading time + - Mobile Friendly + - High quality code + - Component seperated code + - Custom 404 page + - In-built contact form powered by Formspree + - Markdown support for new posts + - Code syntax highlighting + - Disqus support for comments + - Supports PWA + - Social Media icons + - SEO friendly + - Twitter Tags + - Sitemap Generation + - Google Analytics +- url: https://gatsby-starter-testing.netlify.app/ + repo: https://github.com/DanailMinchev/gatsby-starter-testing + description: A simple Gatsby starter with configured testing frameworks and tools for each layer of the Test Pyramid and more. + tags: + - Linting + - Storybook + - Testing + features: + - Unit Testing - Jest with React Testing Library + - Structural Testing - Jest Snapshot Testing + - End-to-End Testing - Cypress with Cypress Testing Library + - Accessibility Testing - axe with cypress-axe + - Automated Visual Testing - Storybook with jest-puppeteer and jest-image-snapshot +- url: https://boogi.netlify.app + repo: https://github.com/filipowm/boogi + description: Create awesome documentation with modern, Gitbook-like look-and-feel. + tags: + - Documentation + - PWA + - SEO + - Markdown + - MDX + - Styling:CSS-in-JS + - CMS:Netlify + features: + - Customize your page to match your branding and needs + - Responsive, GitBook-like design inspired by https://gitbook.com/ + - Light / dark mode themes for entire app + - Custom [BooGi CLI](https://github.com/filipowm/boogi-cli) wrapping Gatsby CLI + to start quickly, simplify codebase, easily run locally and build you BooGi-based app + - Rich-content and rich-text features like text formatting, graphs and diagrams, + quotes, columnar layout, emojis, feather icons, highlights, live code editor, + syntax highlighting, external code snippets, social buttons and many many more! + - draft pages + - Search capabilities with [Algolia](https://www.algolia.com/) + - local search (search in a browser without need to integrate with Algolia) + - Progressive Web App (PWA) support - app can work entirely offline + - Integration with Google Analytics + - SEO friendliness + - full screen mode + - RSS feed + - Edit content on Gitlab, Github or Bitbucket with edit-on-repo feature + - Fully customizable using plain Yaml files - url: https://texblog.akshatbisht.com/ repo: https://github.com/aaaakshat/gatsby-starter-texblog description: A lightweight, LaTeX enabled starter to beautifully showcase your typeset articles. @@ -6959,3 +7393,57 @@ - Uses SCSS for easy-to-understand naming - Google Analytics support - Responsive design +- url: https://knochenmark.github.io/gatsby-starter-level-2/ + repo: https://github.com/Knochenmark/gatsby-starter-level-2 + description: A minimalistic, responsive and easily configurable Gatsby starter that will help to bring your portfolio to the next level. + tags: + - Portfolio + - Blog + - Markdown + - Styling:CSS-in-JS + - Linting + features: + - Responsive Layout + - High configurability + - Configurable Sections via Markdown + - Organized Projects by techs and Blog Posts by tags + - Posts in Markdown + - Pagination support + - Syntax highlighting in code blocks + - Styled Components with Emotion + - ESLint and Prettier + - FontAwsome Library for icons +- url: https://gatsby-starter-essentials.netlify.app/ + repo: https://github.com/selrond/gatsby-starter-essentials + description: A solid base to build your project upon + tags: + - Styling:CSS-in-JS + features: + - Sensible folder structure + - Only linted code is commit-able with pre-commit eslint hook + - Absolute imports (no more import Button from '../../../../../components/atoms/Button') + - styled-components set up + - sanitize.css included for sane out-of-the-box CSS defaults + - eslint with Airbnb config + - Auto formatted code via `prettier` as an `eslint` plugin + - Always up-to-date starter dependencies thanks to Dependabot + - Improved npm scripts - npm start runs a local server, so you can view your site live on multiple devices at once + - .nvmrc requiring lts node version + - Simple circleci integration to utilize CI/CD in your app +- url: https://frosty-torvalds-822eb0.netlify.app + repo: https://github.com/willb335/gatsby-starter-hoa + description: A template for home owner associations built with Gatsby, Contentful, and Netlify + tags: + - Blog + - CMS:Headless + - CMS:Contentful + - Styling:CSS-in-JS + - Netlify + features: + - CMS:Contentful integration with ready to go placeholder content + - Netlify integration including a pre-built contact form + - Pagination logic + - Styled Components + - SEO friendly components + - Prebuilt events calendar + - Material UI diff --git a/docs/tutorial/part-seven/index.md b/docs/tutorial/part-seven/index.md index 9a4f1dda9cdca..ce0fb51ab23cc 100644 --- a/docs/tutorial/part-seven/index.md +++ b/docs/tutorial/part-seven/index.md @@ -369,11 +369,11 @@ export const query = graphql` title date(formatString: "DD MMMM, YYYY") } - // highlight-start + # highlight-start fields { slug } - // highlight-end + # highlight-end excerpt } } diff --git a/packages/gatsby-admin/CHANGELOG.md b/packages/gatsby-admin/CHANGELOG.md index 6765e396da715..15e5da0b795a1 100644 --- a/packages/gatsby-admin/CHANGELOG.md +++ b/packages/gatsby-admin/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.1.134](https://github.com/gatsbyjs/gatsby/compare/gatsby-admin@0.1.133...gatsby-admin@0.1.134) (2020-08-12) + +**Note:** Version bump only for package gatsby-admin + +## [0.1.133](https://github.com/gatsbyjs/gatsby/compare/gatsby-admin@0.1.132...gatsby-admin@0.1.133) (2020-08-12) + +**Note:** Version bump only for package gatsby-admin + ## [0.1.132](https://github.com/gatsbyjs/gatsby/compare/gatsby-admin@0.1.131...gatsby-admin@0.1.132) (2020-08-11) **Note:** Version bump only for package gatsby-admin diff --git a/packages/gatsby-admin/package.json b/packages/gatsby-admin/package.json index ac5af45fcbe6e..95ef2b55e3d9f 100644 --- a/packages/gatsby-admin/package.json +++ b/packages/gatsby-admin/package.json @@ -1,6 +1,6 @@ { "name": "gatsby-admin", - "version": "0.1.132", + "version": "0.1.134", "main": "index.js", "author": "Max Stoiber", "license": "MIT", @@ -19,11 +19,11 @@ "csstype": "^2.6.10", "feedback-fish": "^0.1.12", "formik": "^2.1.4", - "gatsby": "^2.24.43", + "gatsby": "^2.24.45", "gatsby-interface": "0.0.183", "gatsby-plugin-typescript": "^2.4.18", "gatsby-plugin-webfonts": "^1.1.3", - "gatsby-source-graphql": "^2.7.0", + "gatsby-source-graphql": "^2.7.1", "lodash-es": "^4.17.15", "ncp": "^2.0.0", "nodemon": "^2.0.4", diff --git a/packages/gatsby-cli/CHANGELOG.md b/packages/gatsby-cli/CHANGELOG.md index b1fc1689465b9..368421795e258 100644 --- a/packages/gatsby-cli/CHANGELOG.md +++ b/packages/gatsby-cli/CHANGELOG.md @@ -3,6 +3,16 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.12.85](https://github.com/gatsbyjs/gatsby/compare/gatsby-cli@2.12.84...gatsby-cli@2.12.85) (2020-08-12) + +**Note:** Version bump only for package gatsby-cli + +## [2.12.84](https://github.com/gatsbyjs/gatsby/compare/gatsby-cli@2.12.83...gatsby-cli@2.12.84) (2020-08-12) + +### Bug Fixes + +- **structured-logging:** fix wrongly reporting status as success when we should still be in pending state ([#26380](https://github.com/gatsbyjs/gatsby/issues/26380)) ([d74ea66](https://github.com/gatsbyjs/gatsby/commit/d74ea66)) + ## [2.12.83](https://github.com/gatsbyjs/gatsby/compare/gatsby-cli@2.12.82...gatsby-cli@2.12.83) (2020-08-11) **Note:** Version bump only for package gatsby-cli diff --git a/packages/gatsby-cli/package.json b/packages/gatsby-cli/package.json index 592998970b175..da269fde9c79b 100644 --- a/packages/gatsby-cli/package.json +++ b/packages/gatsby-cli/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-cli", "description": "Gatsby command-line interface for creating new sites and running Gatsby commands", - "version": "2.12.83", + "version": "2.12.85", "author": "Kyle Mathews ", "bin": { "gatsby": "cli.js" @@ -24,7 +24,7 @@ "fs-exists-cached": "^1.0.0", "fs-extra": "^8.1.0", "gatsby-core-utils": "^1.3.15", - "gatsby-recipes": "^0.2.13", + "gatsby-recipes": "^0.2.14", "gatsby-telemetry": "^1.3.27", "hosted-git-info": "^3.0.4", "ink": "^2.7.1", diff --git a/packages/gatsby-cli/src/reporter/loggers/yurnalist/index.ts b/packages/gatsby-cli/src/reporter/loggers/yurnalist/index.ts index 35b9199f16c1b..63c80b547e0f5 100644 --- a/packages/gatsby-cli/src/reporter/loggers/yurnalist/index.ts +++ b/packages/gatsby-cli/src/reporter/loggers/yurnalist/index.ts @@ -30,6 +30,7 @@ export function initializeYurnalistLogger(): void { [LogLevels.Error]: yurnalist.error.bind(yurnalist), [LogLevels.Info]: yurnalist.info.bind(yurnalist), [LogLevels.Success]: yurnalist.success.bind(yurnalist), + [LogLevels.Debug]: yurnalist.verbose.bind(yurnalist), [ActivityLogLevels.Success]: yurnalist.success.bind(yurnalist), [ActivityLogLevels.Failed]: (text: string): void => { yurnalist.log(`${chalk.red(`failed`)} ${text}`) diff --git a/packages/gatsby-cli/src/reporter/redux/__tests__/integration.ts b/packages/gatsby-cli/src/reporter/redux/__tests__/integration.ts new file mode 100644 index 0000000000000..4a6f595a218ed --- /dev/null +++ b/packages/gatsby-cli/src/reporter/redux/__tests__/integration.ts @@ -0,0 +1,71 @@ +import { ActivityStatuses, ActivityTypes } from "../../constants" +import { ISetStatus } from "../types" + +jest.useFakeTimers() + +describe(`integration`, () => { + let dispatchSpy, internalActions + + const getDispatchedSetStatusActions = (): Array => + dispatchSpy.mock.calls + .map(args => args[0]) + .filter(action => action.type === `SET_STATUS`) + + beforeEach(async () => { + jest.resetModules() + const { getStore } = require(`../`) + dispatchSpy = jest.spyOn(getStore(), `dispatch`) + internalActions = await import(`../actions`) + }) + + test(`Doesn't dispatch pre-emptive SUCCESS `, async () => { + const { + createPendingActivity, + endActivity, + startActivity, + } = internalActions + + startActivity({ + id: `activity-1`, + text: `activity-1`, + type: ActivityTypes.Spinner, + }) + endActivity({ id: `activity-1`, status: ActivityStatuses.Success }) + startActivity({ + id: `activity-2`, + text: `activity-2`, + type: ActivityTypes.Spinner, + }) + createPendingActivity({ id: `pending-activity` }) + endActivity({ id: `activity-2`, status: ActivityStatuses.Success }) + + jest.runOnlyPendingTimers() + + let dispatchedSetStatusActions = getDispatchedSetStatusActions() + + // we don't expect to see SET_STATUS other than initial IN_PROGRESS + // as we still have pending activity + expect(dispatchedSetStatusActions.length).toEqual(1) + expect(dispatchedSetStatusActions[0]).toEqual({ + type: `SET_STATUS`, + payload: `IN_PROGRESS`, + timestamp: expect.any(String), + }) + + endActivity({ id: `pending-activity`, status: ActivityStatuses.Cancelled }) + jest.runOnlyPendingTimers() + + dispatchedSetStatusActions = getDispatchedSetStatusActions() + expect(dispatchedSetStatusActions.length).toEqual(2) + expect(dispatchedSetStatusActions[0]).toEqual({ + type: `SET_STATUS`, + payload: `IN_PROGRESS`, + timestamp: expect.any(String), + }) + expect(dispatchedSetStatusActions[1]).toEqual({ + type: `SET_STATUS`, + payload: `SUCCESS`, + timestamp: expect.any(String), + }) + }) +}) diff --git a/packages/gatsby-cli/src/reporter/redux/__tests__/internal-actions.ts b/packages/gatsby-cli/src/reporter/redux/__tests__/internal-actions.ts new file mode 100644 index 0000000000000..7e2dc75b1bbf6 --- /dev/null +++ b/packages/gatsby-cli/src/reporter/redux/__tests__/internal-actions.ts @@ -0,0 +1,113 @@ +import { Dispatch, CombinedState } from "redux" + +import { ActivityStatuses } from "../../constants" +import { ISetStatus, IGatsbyCLIState } from "../types" +import { GatsbyCLIStore } from "../" + +jest.useFakeTimers() + +describe(`setStatus action creator`, () => { + let mockStatus: ActivityStatuses | "" = `` + let setStatus + + const dispatchMockFn: Dispatch = ( + action: T + ): T => { + mockStatus = action.payload + return action + } + + const dispatch = jest.fn(dispatchMockFn) + + const setStatusWithDispatch = ( + status: ActivityStatuses | "" + ): T => setStatus(status)(dispatch) + + beforeAll(async () => { + jest.doMock(`../`, () => { + return { + getStore: (): Partial => { + return { + getState: (): CombinedState<{ logs: IGatsbyCLIState }> => { + return { + logs: { status: mockStatus, messages: [], activities: {} }, + } + }, + } + }, + } + }) + jest.resetModules() + setStatus = (await import(`../internal-actions`)).setStatus + }) + + afterAll(() => { + jest.unmock(`../`) + }) + + beforeEach(() => { + mockStatus = `` + dispatch.mockClear() + }) + + it(`debounces SUCCESS in case activities don't overlap`, () => { + setStatusWithDispatch(ActivityStatuses.InProgress) + setStatusWithDispatch(ActivityStatuses.Success) + setStatusWithDispatch(ActivityStatuses.InProgress) + setStatusWithDispatch(ActivityStatuses.Success) + + // we should only emit initial IN_PROGRESS event + expect(dispatch).toHaveBeenCalledTimes(1) + expect(dispatch).toHaveBeenNthCalledWith(1, { + type: `SET_STATUS`, + payload: ActivityStatuses.InProgress, + }) + + jest.runOnlyPendingTimers() + + expect(dispatch).toHaveBeenCalledTimes(2) + expect(dispatch).toHaveBeenNthCalledWith(2, { + type: `SET_STATUS`, + payload: ActivityStatuses.Success, + }) + }) + + it(`debounces FAILED in case activities don't overlap`, () => { + setStatusWithDispatch(ActivityStatuses.InProgress) + setStatusWithDispatch(ActivityStatuses.Success) + setStatusWithDispatch(ActivityStatuses.InProgress) + setStatusWithDispatch(ActivityStatuses.Failed) + + // we should only emit initial IN_PROGRESS event + expect(dispatch).toHaveBeenCalledTimes(1) + expect(dispatch).toHaveBeenNthCalledWith(1, { + type: `SET_STATUS`, + payload: ActivityStatuses.InProgress, + }) + + jest.runOnlyPendingTimers() + + expect(dispatch).toHaveBeenCalledTimes(2) + expect(dispatch).toHaveBeenNthCalledWith(2, { + type: `SET_STATUS`, + payload: ActivityStatuses.Failed, + }) + }) + + it(`doesn't wrongly emit SUCCESS when we are still in progress `, () => { + setStatusWithDispatch(ActivityStatuses.InProgress) + setStatusWithDispatch(ActivityStatuses.Success) + setStatusWithDispatch(ActivityStatuses.InProgress) + + expect(dispatch).toHaveBeenCalledTimes(1) + expect(dispatch).toHaveBeenNthCalledWith(1, { + type: `SET_STATUS`, + payload: ActivityStatuses.InProgress, + }) + + jest.runOnlyPendingTimers() + + //we are still in progress, so we shouldn't emit anything other than initial IN_PROGRESS + expect(dispatch).toHaveBeenCalledTimes(1) + }) +}) diff --git a/packages/gatsby-cli/src/reporter/redux/index.ts b/packages/gatsby-cli/src/reporter/redux/index.ts index f3c207d1467ad..bd29a252c76ce 100644 --- a/packages/gatsby-cli/src/reporter/redux/index.ts +++ b/packages/gatsby-cli/src/reporter/redux/index.ts @@ -11,7 +11,7 @@ let store = createStore( {} ) -type GatsbyCLIStore = typeof store +export type GatsbyCLIStore = typeof store type StoreListener = (store: GatsbyCLIStore) => void type ActionLogListener = (action: ActionsUnion) => any type Thunk = (...args: any[]) => ActionsUnion diff --git a/packages/gatsby-cli/src/reporter/redux/internal-actions.ts b/packages/gatsby-cli/src/reporter/redux/internal-actions.ts index 449ef26658a98..57f18d4d70b32 100644 --- a/packages/gatsby-cli/src/reporter/redux/internal-actions.ts +++ b/packages/gatsby-cli/src/reporter/redux/internal-actions.ts @@ -44,23 +44,40 @@ signalExit(() => { }) let cancelDelayedSetStatus: (() => void) | null -// TODO: THIS IS NOT WORKING ATM + +let pendingStatus: ActivityStatuses | "" = `` + +// We debounce "done" statuses because activities don't always overlap +// and there is timing window after one activity ends and before next one starts +// where technically we are "done" (all activities are done). +// We don't want to emit multiple SET_STATUS events that would toggle between +// IN_PROGRESS and SUCCESS/FAILED in short succession in those cases. export const setStatus = ( status: ActivityStatuses | "", force: boolean = false ) => (dispatch: Dispatch): void => { const currentStatus = getStore().getState().logs.status + if (cancelDelayedSetStatus) { cancelDelayedSetStatus() cancelDelayedSetStatus = null } - if (status !== currentStatus) { - if (status === `IN_PROGRESS` || force || weShouldExit) { - dispatch({ - type: Actions.SetStatus, - payload: status, - }) - } else { + + if ( + status !== currentStatus && + (status === ActivityStatuses.InProgress || force || weShouldExit) + ) { + dispatch({ + type: Actions.SetStatus, + payload: status, + }) + pendingStatus = `` + } else { + // use pending status if truthy, fallback to current status if we don't have pending status + const pendingOrCurrentStatus = pendingStatus || currentStatus + + if (status !== pendingOrCurrentStatus) { + pendingStatus = status cancelDelayedSetStatus = delayedCall(() => { setStatus(status, true)(dispatch) }, 1000) @@ -135,26 +152,18 @@ export const createPendingActivity = ({ id: string status?: ActivityStatuses }): ActionsToEmit => { - const actionsToEmit: ActionsToEmit = [] - - const logsState = getStore().getState().logs - const globalStatus = getGlobalStatus(id, status) - - if (globalStatus !== logsState.status) { - actionsToEmit.push(setStatus(globalStatus)) - } - - actionsToEmit.push({ - type: Actions.PendingActivity, - payload: { - id, - type: ActivityTypes.Pending, - status, + return [ + setStatus(globalStatus), + { + type: Actions.PendingActivity, + payload: { + id, + type: ActivityTypes.Pending, + status, + }, }, - }) - - return actionsToEmit + ] } type QueuedStartActivityActions = Array< @@ -175,32 +184,25 @@ export const startActivity = ({ current?: number total?: number }): QueuedStartActivityActions => { - const actionsToEmit: QueuedStartActivityActions = [] - - const logsState = getStore().getState().logs - const globalStatus = getGlobalStatus(id, status) - if (globalStatus !== logsState.status) { - actionsToEmit.push(setStatus(globalStatus)) - } - - actionsToEmit.push({ - type: Actions.StartActivity, - payload: { - id, - uuid: uuidv4(), - text, - type, - status, - startTime: process.hrtime(), - statusText: ``, - current, - total, + return [ + setStatus(globalStatus), + { + type: Actions.StartActivity, + payload: { + id, + uuid: uuidv4(), + text, + type, + status, + startTime: process.hrtime(), + statusText: ``, + current, + total, + }, }, - }) - - return actionsToEmit + ] } type QueuedEndActivity = Array< @@ -276,13 +278,8 @@ export const endActivity = ({ } } - const logsState = getStore().getState().logs - const globalStatus = getGlobalStatus(id, status) - - if (globalStatus !== logsState.status) { - actionsToEmit.push(setStatus(globalStatus)) - } + actionsToEmit.push(setStatus(globalStatus)) return actionsToEmit } diff --git a/packages/gatsby-image/CHANGELOG.md b/packages/gatsby-image/CHANGELOG.md index 8075952fbd488..0e54d99ef8afe 100644 --- a/packages/gatsby-image/CHANGELOG.md +++ b/packages/gatsby-image/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.4.16](https://github.com/gatsbyjs/gatsby/compare/gatsby-image@2.4.15...gatsby-image@2.4.16) (2020-08-12) + +### Bug Fixes + +- **gatsby-image:** Fix typings for fixed and fluid props ([#24767](https://github.com/gatsbyjs/gatsby/issues/24767)) ([08e0aa1](https://github.com/gatsbyjs/gatsby/commit/08e0aa1)) + ## [2.4.15](https://github.com/gatsbyjs/gatsby/compare/gatsby-image@2.4.14...gatsby-image@2.4.15) (2020-08-10) **Note:** Version bump only for package gatsby-image diff --git a/packages/gatsby-image/index.d.ts b/packages/gatsby-image/index.d.ts index e4f1eec6344ee..c88fc622870bf 100644 --- a/packages/gatsby-image/index.d.ts +++ b/packages/gatsby-image/index.d.ts @@ -24,11 +24,15 @@ export interface FluidObject { media?: string } -interface GatsbyImageProps { +interface GatsbyImageOptionalProps { + /** + * @deprecated Use `fixed` + */ resolutions?: FixedObject + /** + * @deprecated Use `fluid` + */ sizes?: FluidObject - fixed?: FixedObject | FixedObject[] - fluid?: FluidObject | FluidObject[] fadeIn?: boolean durationFadeIn?: number title?: string @@ -49,6 +53,16 @@ interface GatsbyImageProps { loading?: `auto` | `lazy` | `eager` draggable?: boolean } + +interface GatsbyImageFluidProps extends GatsbyImageOptionalProps { + fluid: FluidObject | FluidObject[] +} + +interface GatsbyImageFixedProps extends GatsbyImageOptionalProps { + fixed: FixedObject | FixedObject[] +} + +export type GatsbyImageProps = GatsbyImageFluidProps | GatsbyImageFixedProps export default class GatsbyImage extends React.Component< GatsbyImageProps, diff --git a/packages/gatsby-image/package.json b/packages/gatsby-image/package.json index 3c28942649822..b2b01980379ae 100644 --- a/packages/gatsby-image/package.json +++ b/packages/gatsby-image/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-image", "description": "Lazy-loading React image component with optional support for the blur-up effect.", - "version": "2.4.15", + "version": "2.4.16", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-image/withIEPolyfill/index.d.ts b/packages/gatsby-image/withIEPolyfill/index.d.ts index 54c745305d976..8365de1624cdf 100644 --- a/packages/gatsby-image/withIEPolyfill/index.d.ts +++ b/packages/gatsby-image/withIEPolyfill/index.d.ts @@ -2,7 +2,7 @@ import * as React from "react" import GatsbyImage, { GatsbyImageProps } from "../index" -interface GatsbyImageWithIEPolyfillProps extends GatsbyImageProps { +type GatsbyImageWithIEPolyfillProps = GatsbyImageProps & { objectFit?: `fill` | `contain` | `cover` | `none` | `scale-down` objectPosition?: string } diff --git a/packages/gatsby-recipes/CHANGELOG.md b/packages/gatsby-recipes/CHANGELOG.md index 5449d05fcc80c..935c14beab56b 100644 --- a/packages/gatsby-recipes/CHANGELOG.md +++ b/packages/gatsby-recipes/CHANGELOG.md @@ -3,6 +3,13 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.2.14](https://github.com/gatsbyjs/gatsby/compare/gatsby-recipes@0.2.13...gatsby-recipes@0.2.14) (2020-08-12) + +### Bug Fixes + +- **deps:** install deps as devDependencies on storybook recipe ([#25991](https://github.com/gatsbyjs/gatsby/issues/25991)) ([88a8025](https://github.com/gatsbyjs/gatsby/commit/88a8025)) +- **recipes:** Install storybook dependencies with development type on typescript recipe ([#25989](https://github.com/gatsbyjs/gatsby/issues/25989)) ([e6b6268](https://github.com/gatsbyjs/gatsby/commit/e6b6268)) + ## [0.2.13](https://github.com/gatsbyjs/gatsby/compare/gatsby-recipes@0.2.12...gatsby-recipes@0.2.13) (2020-08-11) ### Bug Fixes diff --git a/packages/gatsby-recipes/package.json b/packages/gatsby-recipes/package.json index e8d1843456405..f213705ff68c1 100644 --- a/packages/gatsby-recipes/package.json +++ b/packages/gatsby-recipes/package.json @@ -1,7 +1,7 @@ { "name": "gatsby-recipes", "description": "Core functionality for Gatsby Recipes", - "version": "0.2.13", + "version": "0.2.14", "author": "Kyle Mathews ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" diff --git a/packages/gatsby-recipes/recipes/storybook-js.mdx b/packages/gatsby-recipes/recipes/storybook-js.mdx index cf55c78185047..545fb00e935f6 100644 --- a/packages/gatsby-recipes/recipes/storybook-js.mdx +++ b/packages/gatsby-recipes/recipes/storybook-js.mdx @@ -8,16 +8,16 @@ This recipe: Installs babel plugins and presets as well as the Storybook React NPM packages and addons. - - - - - - - - - - + + + + + + + + + + --- diff --git a/packages/gatsby-recipes/recipes/storybook-ts.mdx b/packages/gatsby-recipes/recipes/storybook-ts.mdx index ec94b075f398f..85ce52533ac49 100644 --- a/packages/gatsby-recipes/recipes/storybook-ts.mdx +++ b/packages/gatsby-recipes/recipes/storybook-ts.mdx @@ -11,17 +11,17 @@ This recipe: Installs TypesScript + babel plugins and presets as well as the Storybook React NPM packages and addons. - - - - - - - - - - - + + + + + + + + + + + --- diff --git a/packages/gatsby-remark-images-contentful/src/__tests__/utils/__snapshots__/index.js.snap b/packages/gatsby-remark-images-contentful/src/__tests__/utils/__snapshots__/index.js.snap new file mode 100644 index 0000000000000..09a084e4c3340 --- /dev/null +++ b/packages/gatsby-remark-images-contentful/src/__tests__/utils/__snapshots__/index.js.snap @@ -0,0 +1,19 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`builds responsive sizes proberly calculates responsive values 1`] = ` +Object { + "aspectRatio": 1.3333333333333333, + "base64": "data:image/jpeg;base64,bW9ja2VkQmFzZTY0", + "density": 72, + "presentationHeight": 600, + "presentationWidth": 800, + "sizes": "(max-width: 800px) 100vw, 800px", + "src": "//images.ctfassets.net/rocybtov1ozk/wtrHxeu3zEoEce2MokCSi/73dce36715f16e27cf5ff0d2d97d7dff/quwowooybuqbl6ntboz3.jpg", + "srcSet": "https://images.ctfassets.net/rocybtov1ozk/wtrHxeu3zEoEce2MokCSi/73dce36715f16e27cf5ff0d2d97d7dff/quwowooybuqbl6ntboz3.jpg?w=200 200w, +https://images.ctfassets.net/rocybtov1ozk/wtrHxeu3zEoEce2MokCSi/73dce36715f16e27cf5ff0d2d97d7dff/quwowooybuqbl6ntboz3.jpg?w=400 400w, +https://images.ctfassets.net/rocybtov1ozk/wtrHxeu3zEoEce2MokCSi/73dce36715f16e27cf5ff0d2d97d7dff/quwowooybuqbl6ntboz3.jpg?w=800 800w", + "webpSrcSet": "https://images.ctfassets.net/rocybtov1ozk/wtrHxeu3zEoEce2MokCSi/73dce36715f16e27cf5ff0d2d97d7dff/quwowooybuqbl6ntboz3.jpg?w=200&fm=webp 200w, +https://images.ctfassets.net/rocybtov1ozk/wtrHxeu3zEoEce2MokCSi/73dce36715f16e27cf5ff0d2d97d7dff/quwowooybuqbl6ntboz3.jpg?w=400&fm=webp 400w, +https://images.ctfassets.net/rocybtov1ozk/wtrHxeu3zEoEce2MokCSi/73dce36715f16e27cf5ff0d2d97d7dff/quwowooybuqbl6ntboz3.jpg?w=800&fm=webp 800w", +} +`; diff --git a/packages/gatsby-remark-images-contentful/src/__tests__/utils/index.js b/packages/gatsby-remark-images-contentful/src/__tests__/utils/index.js new file mode 100644 index 0000000000000..042e7c9985d4d --- /dev/null +++ b/packages/gatsby-remark-images-contentful/src/__tests__/utils/index.js @@ -0,0 +1,49 @@ +import axios from "axios" +import { buildResponsiveSizes } from "../../utils/index" + +jest.mock(`axios`) + +const reporterMock = jest.fn() + +describe(`builds responsive sizes`, () => { + const imageUrl = `//images.ctfassets.net/rocybtov1ozk/wtrHxeu3zEoEce2MokCSi/73dce36715f16e27cf5ff0d2d97d7dff/quwowooybuqbl6ntboz3.jpg` + const metadata = { + width: 800, + height: 600, + density: 72, + } + const options = { + maxWidth: 2000, + } + + beforeEach(() => { + axios.mockClear() + axios.mockImplementation(() => + Promise.resolve({ + data: `mockedBase64`, + headers: { + "content-type": `image/jpeg`, + }, + }) + ) + }) + + test(`proberly calculates responsive values`, async () => { + const result = await buildResponsiveSizes( + { metadata, imageUrl, options }, + reporterMock + ) + + expect(result).toMatchSnapshot() + }) + test(`does not remove search parameters`, async () => { + const result = await buildResponsiveSizes( + { metadata, imageUrl: `${imageUrl}?q=70`, options }, + reporterMock + ) + + expect(result.src).toContain(`q=70`) + expect(result.srcSet).toContain(`q=70`) + expect(result.webpSrcSet).toContain(`q=70`) + }) +}) diff --git a/packages/gatsby-remark-images-contentful/src/index.js b/packages/gatsby-remark-images-contentful/src/index.js index 0550704eeaad6..c8330f9795daa 100644 --- a/packages/gatsby-remark-images-contentful/src/index.js +++ b/packages/gatsby-remark-images-contentful/src/index.js @@ -91,11 +91,14 @@ module.exports = async ( response.data.destroy() - const responsiveSizesResult = await buildResponsiveSizes({ - metadata, - imageUrl: originalImg, - options, - }) + const responsiveSizesResult = await buildResponsiveSizes( + { + metadata, + imageUrl: originalImg, + options, + }, + reporter + ) // Calculate the paddingBottom % const ratio = `${(1 / responsiveSizesResult.aspectRatio) * 100}%` diff --git a/packages/gatsby-remark-images-contentful/src/utils/index.js b/packages/gatsby-remark-images-contentful/src/utils/index.js index 8c416f42f1d6c..3a3d65c3ce039 100644 --- a/packages/gatsby-remark-images-contentful/src/utils/index.js +++ b/packages/gatsby-remark-images-contentful/src/utils/index.js @@ -1,20 +1,34 @@ +const { URL } = require(`url`) const axios = require(`axios`) -const getBase64Img = async url => { - const response = await axios({ - method: `GET`, - responseType: `arraybuffer`, - url: `${url}`, - }) +// This should be replaced with the solution for https://github.com/gatsbyjs/gatsby/issues/24220 +const getBase64Img = async (url, reporter) => { + try { + const response = await axios({ + method: `GET`, + responseType: `arraybuffer`, + url: `${url}`, + }) - const base64Img = `data:${ - response.headers[`content-type`] - };base64,${new Buffer(response.data).toString(`base64`)}` + const base64Img = `data:${ + response.headers[`content-type`] + };base64,${new Buffer(response.data).toString(`base64`)}` - return base64Img + return base64Img + } catch (err) { + reporter.panic(`Failed downloading the base64 image for ${url}`, err) + return undefined + } } -const buildResponsiveSizes = async ({ metadata, imageUrl, options = {} }) => { +const buildResponsiveSizes = async ( + { metadata, imageUrl, options = {} }, + reporter +) => { + const imageURL = new URL( + imageUrl.indexOf(`/`) === 0 ? `https:${imageUrl}` : imageUrl + ) + const { width, height, density } = metadata const { sizeByPixelDensity, maxWidth, sizes } = options const aspectRatio = width / height @@ -41,17 +55,20 @@ const buildResponsiveSizes = async ({ metadata, imageUrl, options = {} }) => { filteredSizes.push(width) - const base64Img = await getBase64Img(`${imageUrl}?w=40`) + imageURL.searchParams.set(`w`, `40`) + + const base64Img = await getBase64Img(imageURL.href, reporter) + + const getSrcSetUrl = size => { + imageURL.searchParams.set(`w`, `${Math.round(size)}`) + return `${imageURL.href} ${Math.round(size)}w` + } + + const srcSet = filteredSizes.map(getSrcSetUrl).join(`,\n`) - const srcSet = filteredSizes - .map(size => `${imageUrl}?w=${Math.round(size)} ${Math.round(size)}w`) - .join(`,\n`) + imageURL.searchParams.set(`fm`, `webp`) - const webpSrcSet = filteredSizes - .map( - size => `${imageUrl}?fm=webp&w=${Math.round(size)} ${Math.round(size)}w` - ) - .join(`,\n`) + const webpSrcSet = filteredSizes.map(getSrcSetUrl).join(`,\n`) // TODO think about a better structure to save srcset types instead of adding them to the root return { diff --git a/packages/gatsby-source-graphql/CHANGELOG.md b/packages/gatsby-source-graphql/CHANGELOG.md index f8eee7a50cfa8..eb42d19745202 100644 --- a/packages/gatsby-source-graphql/CHANGELOG.md +++ b/packages/gatsby-source-graphql/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.7.1](https://github.com/gatsbyjs/gatsby/compare/gatsby-source-graphql@2.7.0...gatsby-source-graphql@2.7.1) (2020-08-12) + +### Bug Fixes + +- **gatsby-source-graphql:** use the latest version of graphql-tools ([#26392](https://github.com/gatsbyjs/gatsby/issues/26392)) ([81a1c03](https://github.com/gatsbyjs/gatsby/commit/81a1c03)) + # [2.7.0](https://github.com/gatsbyjs/gatsby/compare/gatsby-source-graphql@2.6.2...gatsby-source-graphql@2.7.0) (2020-08-06) ### Features diff --git a/packages/gatsby-source-graphql/package.json b/packages/gatsby-source-graphql/package.json index a99c2484820a7..3d062271c77e7 100644 --- a/packages/gatsby-source-graphql/package.json +++ b/packages/gatsby-source-graphql/package.json @@ -1,16 +1,16 @@ { "name": "gatsby-source-graphql", "description": "Gatsby plugin which adds a third-party GraphQL API to Gatsby GraphQL", - "version": "2.7.0", + "version": "2.7.1", "author": "Mikhail Novikov ", "bugs": { "url": "https://github.com/gatsbyjs/gatsby/issues" }, "dependencies": { "@babel/runtime": "^7.10.3", - "@graphql-tools/links": "v6.0.9", - "@graphql-tools/utils": "v6.0.9", - "@graphql-tools/wrap": "v6.0.9", + "@graphql-tools/links": "^6.0.9", + "@graphql-tools/utils": "^6.0.9", + "@graphql-tools/wrap": "^6.0.9", "apollo-link": "1.2.14", "apollo-link-http": "^1.5.17", "dataloader": "^2.0.0", diff --git a/packages/gatsby/CHANGELOG.md b/packages/gatsby/CHANGELOG.md index e25e8ecd086b5..a21794cddc68b 100644 --- a/packages/gatsby/CHANGELOG.md +++ b/packages/gatsby/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [2.24.45](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.24.44...gatsby@2.24.45) (2020-08-12) + +**Note:** Version bump only for package gatsby + +## [2.24.44](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.24.43...gatsby@2.24.44) (2020-08-12) + +**Note:** Version bump only for package gatsby + ## [2.24.43](https://github.com/gatsbyjs/gatsby/compare/gatsby@2.24.42...gatsby@2.24.43) (2020-08-11) ### Bug Fixes diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index 7cce9df6f104e..69281becac905 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -1,7 +1,7 @@ { "name": "gatsby", "description": "Blazing fast modern site generator for React", - "version": "2.24.43", + "version": "2.24.45", "author": "Kyle Mathews ", "bin": { "gatsby": "./cli.js" @@ -71,7 +71,7 @@ "find-cache-dir": "^3.3.1", "fs-exists-cached": "1.0.0", "fs-extra": "^8.1.0", - "gatsby-cli": "^2.12.83", + "gatsby-cli": "^2.12.85", "gatsby-core-utils": "^1.3.15", "gatsby-graphiql-explorer": "^0.4.12", "gatsby-legacy-polyfills": "^0.0.2", diff --git a/packages/gatsby/src/utils/__tests__/map-templates-to-static-query-hashes.js b/packages/gatsby/src/utils/__tests__/map-templates-to-static-query-hashes.js index eac045a272123..c8c0499808bac 100644 --- a/packages/gatsby/src/utils/__tests__/map-templates-to-static-query-hashes.js +++ b/packages/gatsby/src/utils/__tests__/map-templates-to-static-query-hashes.js @@ -47,7 +47,7 @@ const createModule = (resource, reasons = []) => { describe(`map-templates-to-static-query-hashes`, () => { it(`should map static-queries to a component file on all platforms`, () => { const asyncRequires = createModule( - `_this_is_virtual_fs_path_/$virtual/async-requires.js` + `.cache/_this_is_virtual_fs_path_/$virtual/async-requires.js` ) const templateMap = mapTemplatesToStaticQueryHashes( diff --git a/packages/gatsby/src/utils/gatsby-webpack-virtual-modules.ts b/packages/gatsby/src/utils/gatsby-webpack-virtual-modules.ts index c8f51554232c6..d35822e641639 100644 --- a/packages/gatsby/src/utils/gatsby-webpack-virtual-modules.ts +++ b/packages/gatsby/src/utils/gatsby-webpack-virtual-modules.ts @@ -22,7 +22,7 @@ interface IGatsbyWebpackVirtualModulesContext { const fileContentLookup: Record = {} const instances: IGatsbyWebpackVirtualModulesContext[] = [] -export const VIRTUAL_MODULES_BASE_PATH = `_this_is_virtual_fs_path_` +export const VIRTUAL_MODULES_BASE_PATH = `.cache/_this_is_virtual_fs_path_` export class GatsbyWebpackVirtualModules { apply(compiler): void { diff --git a/packages/gatsby/src/utils/map-templates-to-static-query-hashes.ts b/packages/gatsby/src/utils/map-templates-to-static-query-hashes.ts index efcfa0f0d2855..18b49560be4cd 100644 --- a/packages/gatsby/src/utils/map-templates-to-static-query-hashes.ts +++ b/packages/gatsby/src/utils/map-templates-to-static-query-hashes.ts @@ -25,7 +25,7 @@ interface IModule extends Omit { */ const entryNodes = [ `.cache/api-runner-browser-plugins.js`, - `.cache/async-requires.js`, + `.cache/_this_is_virtual_fs_path_/$virtual/async-requires.js`, ] /* This function takes the current Redux state and a compilation diff --git a/www/cloud-redirects.yaml b/www/cloud-redirects.yaml new file mode 100644 index 0000000000000..0818a5f6323f9 --- /dev/null +++ b/www/cloud-redirects.yaml @@ -0,0 +1,45 @@ +# slugified tags on .org had dashes that WP doesn't include +- fromPath: /blog/tags/a-11-y/ + toPath: https://gatsbyjs.com/blog/tags/a11y/ +- fromPath: /blog/tags/i-18-n/ + toPath: https://gatsbyjs.com/blog/tags/i18n/ +- fromPath: /blog/tags/s-3/ + toPath: https://gatsbyjs.com/blog/tags/s3/ +- fromPath: /blog/tags/v-1/ + toPath: https://gatsbyjs.com/blog/tags/v1/ +- fromPath: /blog/tags/v-2/ + toPath: https://gatsbyjs.com/blog/tags/v2/ +# 100days posts lived under another folder, WP doesn't support "-" in slugs +- fromPath: /blog/100days/accessibility/ + toPath: https://gatsbyjs.com/blog/100days-accessibility/ +- fromPath: /blog/100days/apps/ + toPath: https://gatsbyjs.com/blog/100days-apps/ +- fromPath: /blog/100days/cms/ + toPath: https://gatsbyjs.com/blog/100days-cms/ +- fromPath: /blog/100days/comments/ + toPath: https://gatsbyjs.com/blog/100days-comments/ +- fromPath: /blog/100days/create-themes/ + toPath: https://gatsbyjs.com/blog/100days-create-themes/ +- fromPath: /blog/100days/free-hosting/ + toPath: https://gatsbyjs.com/blog/100days-free-hosting/ +- fromPath: /blog/100days/gatsby-image/ + toPath: https://gatsbyjs.com/blog/100days-gatsby-image/ +- fromPath: /blog/100days/mdx/ + toPath: https://gatsbyjs.com/blog/100days-mdx/ +- fromPath: /blog/100days/performance/ + toPath: https://gatsbyjs.com/blog/100days-performance/ +- fromPath: /blog/100days/pwa/ + toPath: https://gatsbyjs.com/blog/100days-pwa/ +- fromPath: /blog/100days/react-component/ + toPath: https://gatsbyjs.com/blog/100days-react-component/ +- fromPath: /blog/100days/seo/ + toPath: https://gatsbyjs.com/blog/100days-seo/ +- fromPath: /blog/100days/serverless/ + toPath: https://gatsbyjs.com/blog/100days-serverless/ +- fromPath: /blog/100days/start-blog/ + toPath: https://gatsbyjs.com/blog/100days-start-blog/ +- fromPath: /blog/100days/use-themes/ + toPath: https://gatsbyjs.com/blog/100days-use-themes/ +# sunsetting /ecosystem, directing to plugins makes sense +- fromPath: /ecosystem + toPath: https://gatsbyjs.com/plugins/ diff --git a/www/gatsby-node.js b/www/gatsby-node.js index a574d47e38381..37dff05dbc817 100644 --- a/www/gatsby-node.js +++ b/www/gatsby-node.js @@ -3,6 +3,7 @@ const startersRedirects = require(`./starter-redirects.json`) const { loadYaml } = require(`./src/utils/load-yaml`) const redirects = loadYaml(`./redirects.yaml`) +const cloudRedirects = loadYaml(`./cloud-redirects.yaml`) // Split the logic into files based on the section of the website. // The eventual goal is to split www into different themes per section. @@ -120,6 +121,13 @@ exports.createPages = async helpers => { const { actions } = helpers const { createRedirect } = actions + /** + * ============================================================================ + * REDIIRECTS + * NOTE: Order matters!! Higher specificity comes first + * ============================================================================ + */ + redirects.forEach(redirect => { createRedirect({ isPermanent: true, ...redirect, force: true }) }) @@ -132,4 +140,34 @@ exports.createPages = async helpers => { force: true, }) }) + + // one-off redirects for .com + // pages that don't line up 1 to 1 with data stored in WP + cloudRedirects.forEach(redirect => { + createRedirect({ isPermanent: true, ...redirect, force: true }) + }) + + // splat redirects + await createRedirect({ + fromPath: `/packages/*`, + toPath: `https://gatsbyjs.com/plugins/:splat`, + isPermanent: true, + force: true, + }) + + await createRedirect({ + fromPath: `/creators/*`, + toPath: `https://gatsbyjs.com/partner/`, + isPermanent: true, + force: true, + }) + + // catch all redirect + // this needs to be the last redirect created or it'll match everything + await createRedirect({ + fromPath: `/*`, + toPath: `https://gatsbyjs.com/:splat`, + isPermanent: true, + force: true, + }) } diff --git a/www/package.json b/www/package.json index 5a27ef13a8e8b..985d1f33d278a 100644 --- a/www/package.json +++ b/www/package.json @@ -21,11 +21,11 @@ "dotenv": "^8.2.0", "email-validator": "^1.2.3", "fuse.js": "^3.6.1", - "gatsby": "^2.24.37", + "gatsby": "^2.24.43", "gatsby-alias-imports": "^1.0.4", "gatsby-core-utils": "^1.3.15", "gatsby-design-tokens": "^2.0.10", - "gatsby-image": "^2.4.14", + "gatsby-image": "^2.4.15", "gatsby-plugin-canonical-urls": "^2.3.10", "gatsby-plugin-catch-links": "^2.3.11", "gatsby-plugin-emotion": "^4.3.10", @@ -35,16 +35,16 @@ "gatsby-plugin-guess-js": "^1.3.11", "gatsby-plugin-layout": "^1.3.10", "gatsby-plugin-mailchimp": "^2.2.3", - "gatsby-plugin-manifest": "^2.4.22", + "gatsby-plugin-manifest": "^2.4.23", "gatsby-plugin-mdx": "1.2.34", - "gatsby-plugin-netlify": "^2.3.12", + "gatsby-plugin-netlify": "^2.3.13", "gatsby-plugin-netlify-cache": "^0.1.0", "gatsby-plugin-nprogress": "^2.3.10", - "gatsby-plugin-offline": "^3.2.22", + "gatsby-plugin-offline": "^3.2.23", "gatsby-plugin-react-helmet": "^3.3.10", "gatsby-plugin-react-svg": "^3.0.0", "gatsby-plugin-remove-serviceworker": "^1.0.0", - "gatsby-plugin-sharp": "^2.6.25", + "gatsby-plugin-sharp": "^2.6.27", "gatsby-plugin-sitemap": "^2.4.11", "gatsby-plugin-theme-ui": "^0.3.0", "gatsby-plugin-twitter": "^2.3.10", @@ -68,7 +68,7 @@ "gatsby-transformer-documentationjs": "^4.3.13", "gatsby-transformer-remark": "^2.8.28", "gatsby-transformer-screenshot": "^2.3.16", - "gatsby-transformer-sharp": "^2.5.12", + "gatsby-transformer-sharp": "^2.5.13", "gatsby-transformer-yaml": "^2.4.10", "get-package-json-from-github": "^1.2.1", "graphql-request": "1.8.2", @@ -124,7 +124,7 @@ "forestry:preview": "gatsby develop -p 8080 -H 0.0.0.0" }, "devDependencies": { - "@testing-library/jest-dom": "^5.11.2", + "@testing-library/jest-dom": "^5.11.3", "@testing-library/react": "^10.4.8", "babel-core": "^7.0.0-bridge.0", "babel-jest": "^24.9.0", diff --git a/yarn.lock b/yarn.lock index 0d790df82ef86..239e7d906b345 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,24 @@ # yarn lockfile v1 +"@apollo/client@^3.0.2": + version "3.1.3" + resolved "https://registry.yarnpkg.com/@apollo/client/-/client-3.1.3.tgz#4ea9c3818bd2836a3dbe26088227c3d8cb46ad2b" + integrity sha512-zXMiaj+dX0sgXIwEV5d/PI6B8SZT2bqlKNjZWcEXRY7NjESF5J3nd4v8KOsrhHe+A3YhNv63tIl35Sq7uf41Pg== + dependencies: + "@types/zen-observable" "^0.8.0" + "@wry/context" "^0.5.2" + "@wry/equality" "^0.2.0" + fast-json-stable-stringify "^2.0.0" + graphql-tag "^2.11.0" + hoist-non-react-statics "^3.3.2" + optimism "^0.12.1" + prop-types "^15.7.2" + symbol-observable "^1.2.0" + ts-invariant "^0.4.4" + tslib "^1.10.0" + zen-observable "^0.8.14" + "@ardatan/aggregate-error@0.0.1": version "0.0.1" resolved "https://registry.yarnpkg.com/@ardatan/aggregate-error/-/aggregate-error-0.0.1.tgz#1403ac5de10d8ca689fc1f65844c27179ae1d44f" @@ -1363,6 +1381,13 @@ dependencies: regenerator-runtime "^0.13.4" +"@babel/runtime@^7.10.5": + version "7.11.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736" + integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw== + dependencies: + regenerator-runtime "^0.13.4" + "@babel/standalone@^7.10.2": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/standalone/-/standalone-7.11.0.tgz#c8882afdb737306cb127f58f0befec4def31beb5" @@ -1670,33 +1695,36 @@ unique-filename "^1.1.1" which "^1.3.1" -"@graphql-tools/delegate@6.0.9": - version "6.0.9" - resolved "https://registry.yarnpkg.com/@graphql-tools/delegate/-/delegate-6.0.9.tgz#f3cd06837c502c596d1a3e1d625d9c95168825fc" - integrity sha512-v3qiQspXCr0/UGu0V8nEBS1Qwkb/zscgD321PgxgYFDljvBsAuysz7Q0DXl9OYkPqwS2RTPeYZZqsgahEpfpeg== +"@graphql-tools/delegate@6.0.18": + version "6.0.18" + resolved "https://registry.yarnpkg.com/@graphql-tools/delegate/-/delegate-6.0.18.tgz#093e335e346cd26791222e066a3e5929bc38b79c" + integrity sha512-CmNTD60qcTEZM3bvOV2t3Zdj7veY0zgXXVXNgMC9Fx+D2dNdJFCwXdcPAF0SKqlJoj/alBDSl1U6nqYKT9fQOA== dependencies: - "@graphql-tools/schema" "6.0.9" - "@graphql-tools/utils" "6.0.9" + "@ardatan/aggregate-error" "0.0.1" + "@graphql-tools/schema" "6.0.18" + "@graphql-tools/utils" "6.0.18" + is-promise "4.0.0" tslib "~2.0.0" -"@graphql-tools/links@v6.0.9": - version "6.0.9" - resolved "https://registry.yarnpkg.com/@graphql-tools/links/-/links-6.0.9.tgz#4dd0e7ffc96bc1a22bb9f3a2817e21ec16b52992" - integrity sha512-bw++CJ7Txr49ISPHEvnw4UUE+a/2lxsGFrF99ioXJUqeiluukdjVdszgxOr+SOrW/BdJYwMh7094dRkXc07mfg== +"@graphql-tools/links@^6.0.9": + version "6.0.18" + resolved "https://registry.yarnpkg.com/@graphql-tools/links/-/links-6.0.18.tgz#cc0d0542b98a12ee6a5763462255e9421343509d" + integrity sha512-r1unH0UqlUNT985zGfajhq5iysFDCeHB5I2mu+fdaAoIWQB+1dizUpwVkYarWX+u9W4OSNFrF9Hw8IwzKS+51Q== dependencies: - "@graphql-tools/utils" "6.0.9" + "@graphql-tools/utils" "6.0.18" apollo-link "1.2.14" - apollo-upload-client "13.0.0" - cross-fetch "3.0.4" + apollo-upload-client "14.1.1" + cross-fetch "3.0.5" form-data "3.0.0" + is-promise "4.0.0" tslib "~2.0.0" -"@graphql-tools/schema@6.0.9": - version "6.0.9" - resolved "https://registry.yarnpkg.com/@graphql-tools/schema/-/schema-6.0.9.tgz#1b9d7a465c0459cdfbce5860fa8c7ef89f0d96b5" - integrity sha512-lemY+UeZRVmMYPvszCKvPfaR+R0dR2FgqjhESzlNWBbLhHuCewilTzYuQ+A+o8hQxdtPGIHfNPGf6A0ZZ70jWw== +"@graphql-tools/schema@6.0.18": + version "6.0.18" + resolved "https://registry.yarnpkg.com/@graphql-tools/schema/-/schema-6.0.18.tgz#243eb370e4cded00767202bbabf0893f65c3f5b9" + integrity sha512-xrScjRX9pTSVxqiSkx7Hn/9rzxLweysINa5Pkirdkv5lJY4e0Db53osur0nG/+SJyUmIN70tUtuhEZq4Ezr/PA== dependencies: - "@graphql-tools/utils" "6.0.9" + "@graphql-tools/utils" "6.0.18" tslib "~2.0.0" "@graphql-tools/schema@^6.0.14": @@ -1715,21 +1743,24 @@ "@ardatan/aggregate-error" "0.0.1" camel-case "4.1.1" -"@graphql-tools/utils@6.0.9", "@graphql-tools/utils@v6.0.9": - version "6.0.9" - resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-6.0.9.tgz#135a56f6520a99a2bbbfaf7d76bd5f681d1ce457" - integrity sha512-WtX+t64SCN9VejKA/gdtm2sHPOX8D1G1tAyrrKH7hnh6RaCmQwYkhs/f6tBnTTYOIBy7yVYNoXzqiv/tmOkAOQ== +"@graphql-tools/utils@6.0.18", "@graphql-tools/utils@^6.0.9": + version "6.0.18" + resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-6.0.18.tgz#bba960f0ab327c8304089d41da0b7a3e00fe430f" + integrity sha512-8ntYuXJucBtjViOYljeKBzScfpVTnv7BfqIPU/WJ65h6nXD+qf8fMUR1C4MpCUeFvSjMiDSB5Z4enJmau/9D3A== dependencies: + "@ardatan/aggregate-error" "0.0.1" camel-case "4.1.1" -"@graphql-tools/wrap@v6.0.9": - version "6.0.9" - resolved "https://registry.yarnpkg.com/@graphql-tools/wrap/-/wrap-6.0.9.tgz#c8f447513ca9d10c31e695ad09992fb0c4ae0518" - integrity sha512-tvygPTfI8DcbT1rJ45dqkpbF6xYxy3/54yvrzgHJc674clAI9q98i16mql9iso3Rc9oSEt1CWUugmrNqgcgWrA== +"@graphql-tools/wrap@^6.0.9": + version "6.0.18" + resolved "https://registry.yarnpkg.com/@graphql-tools/wrap/-/wrap-6.0.18.tgz#a9a9bd8e1dac469671274153f419ab35317164ac" + integrity sha512-AHegxtawd+ivpUhI1gP4xQWWYPl5GvCmvzaas03DfrGlGcV/LyKJIzdZDEs2E4oCgwCU7F9UQMxgTsq+Dttn5Q== dependencies: - "@graphql-tools/delegate" "6.0.9" - "@graphql-tools/schema" "6.0.9" - "@graphql-tools/utils" "6.0.9" + "@graphql-tools/delegate" "6.0.18" + "@graphql-tools/schema" "6.0.18" + "@graphql-tools/utils" "6.0.18" + aggregate-error "3.0.1" + is-promise "4.0.0" tslib "~2.0.0" "@gustavnikolaj/async-main-wrap@^3.0.1": @@ -4277,6 +4308,11 @@ resolved "https://registry.yarnpkg.com/@types/yoga-layout/-/yoga-layout-1.9.2.tgz#efaf9e991a7390dc081a0b679185979a83a9639a" integrity sha512-S9q47ByT2pPvD65IvrWp7qppVMpk9WGMbVq9wbWZOHg6tnXSD4vyhao6nOSBwwfDdV2p3Kx9evA9vI+XWTfDvw== +"@types/zen-observable@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.8.0.tgz#8b63ab7f1aa5321248aad5ac890a485656dcea4d" + integrity sha512-te5lMAWii1uEJ4FwLjzdlbw3+n0FZNOvFXHxQDKeT0dilh7HOzdMzV2TrJVUzq8ep7J4Na8OUYPRLSQkJHAlrg== + "@typescript-eslint/eslint-plugin@^2.24.0", "@typescript-eslint/eslint-plugin@^2.28.0": version "2.28.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.28.0.tgz#4431bc6d3af41903e5255770703d4e55a0ccbdec" @@ -4531,6 +4567,13 @@ "@webassemblyjs/wast-parser" "1.9.0" "@xtuc/long" "4.2.2" +"@wry/context@^0.5.2": + version "0.5.2" + resolved "https://registry.yarnpkg.com/@wry/context/-/context-0.5.2.tgz#f2a5d5ab9227343aa74c81e06533c1ef84598ec7" + integrity sha512-B/JLuRZ/vbEKHRUiGj6xiMojST1kHhu4WcreLfNN7q9DqQFrb97cWgf/kiYsPSUCAMVN0HzfFc8XjJdzgZzfjw== + dependencies: + tslib "^1.9.3" + "@wry/equality@^0.1.2": version "0.1.9" resolved "https://registry.yarnpkg.com/@wry/equality/-/equality-0.1.9.tgz#b13e18b7a8053c6858aa6c85b54911fb31e3a909" @@ -4538,6 +4581,13 @@ dependencies: tslib "^1.9.3" +"@wry/equality@^0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@wry/equality/-/equality-0.2.0.tgz#a312d1b6a682d0909904c2bcd355b02303104fb7" + integrity sha512-Y4d+WH6hs+KZJUC8YKLYGarjGekBrhslDbf/R20oV+AakHPINSitHfDRQz3EGcEWc1luXYNUvMhawWtZVWNGvQ== + dependencies: + tslib "^1.9.3" + "@xtuc/ieee754@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" @@ -4716,6 +4766,14 @@ agentkeepalive@^3.4.1: dependencies: humanize-ms "^1.2.1" +aggregate-error@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.1.tgz#db2fe7246e536f40d9b5442a39e117d7dd6a24e0" + integrity sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + aggregate-error@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.0.tgz#5b5a3c95e9095f311c9ab16c19fb4f3527cd3f79" @@ -4934,7 +4992,7 @@ apache-md5@1.1.2: resolved "https://registry.yarnpkg.com/apache-md5/-/apache-md5-1.1.2.tgz#ee49736b639b4f108b6e9e626c6da99306b41692" integrity sha1-7klza2ObTxCLbp5ibG2pkwa0FpI= -apollo-link-http-common@^0.2.14, apollo-link-http-common@^0.2.16: +apollo-link-http-common@^0.2.16: version "0.2.16" resolved "https://registry.yarnpkg.com/apollo-link-http-common/-/apollo-link-http-common-0.2.16.tgz#756749dafc732792c8ca0923f9a40564b7c59ecc" integrity sha512-2tIhOIrnaF4UbQHf7kjeQA/EmSorB7+HyJIIrUjJOKBgnXwuexi8aMecRlqTIDWcyVXCeqLhUnztMa6bOH/jTg== @@ -4952,7 +5010,7 @@ apollo-link-http@^1.5.17: apollo-link-http-common "^0.2.16" tslib "^1.9.3" -apollo-link@1.2.14, apollo-link@^1.2.12, apollo-link@^1.2.14: +apollo-link@1.2.14, apollo-link@^1.2.14: version "1.2.14" resolved "https://registry.yarnpkg.com/apollo-link/-/apollo-link-1.2.14.tgz#3feda4b47f9ebba7f4160bef8b977ba725b684d9" integrity sha512-p67CMEFP7kOG1JZ0ZkYZwRDa369w5PIjtMjvrQd/HnIV8FRsHRqLqK+oAZQnFa1DDdZtOtHTi+aMIW6EatC2jg== @@ -4962,15 +5020,14 @@ apollo-link@1.2.14, apollo-link@^1.2.12, apollo-link@^1.2.14: tslib "^1.9.3" zen-observable-ts "^0.8.21" -apollo-upload-client@13.0.0: - version "13.0.0" - resolved "https://registry.yarnpkg.com/apollo-upload-client/-/apollo-upload-client-13.0.0.tgz#146d1ddd85d711fcac8ca97a72d3ca6787f2b71b" - integrity sha512-lJ9/bk1BH1lD15WhWRha2J3+LrXrPIX5LP5EwiOUHv8PCORp4EUrcujrA3rI5hZeZygrTX8bshcuMdpqpSrvtA== +apollo-upload-client@14.1.1: + version "14.1.1" + resolved "https://registry.yarnpkg.com/apollo-upload-client/-/apollo-upload-client-14.1.1.tgz#2b21bb3424293a56ad9c4b9678395f5898f9b9be" + integrity sha512-6H6AW5habDHH/9XCJ8l2qlkaohwIcO+Lt/8P2908/yx0TC0oaiDNVu+0v2YE/5gA6NP0RvztUodzJUZJz27C0g== dependencies: - "@babel/runtime" "^7.9.2" - apollo-link "^1.2.12" - apollo-link-http-common "^0.2.14" - extract-files "^8.0.0" + "@apollo/client" "^3.0.2" + "@babel/runtime" "^7.10.5" + extract-files "^9.0.0" apollo-utilities@^1.3.0: version "1.3.2" @@ -7859,13 +7916,12 @@ cross-fetch@2.2.2: node-fetch "2.1.2" whatwg-fetch "2.0.4" -cross-fetch@3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.0.4.tgz#7bef7020207e684a7638ef5f2f698e24d9eb283c" - integrity sha512-MSHgpjQqgbT/94D4CyADeNoYh52zMkCX4pcJvPP5WqPsLFMKjr2TCMg381ox5qI0ii2dPwaLx/00477knXqXVw== +cross-fetch@3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.0.5.tgz#2739d2981892e7ab488a7ad03b92df2816e03f4c" + integrity sha512-FFLcLtraisj5eteosnX1gf01qYDCOc4fDy0+euOt8Kn9YBY2NtXL/pCoYPavw24NIQkQqm5ZOLsGD5Zzj0gyew== dependencies: node-fetch "2.6.0" - whatwg-fetch "3.0.0" cross-spawn@5.1.0, cross-spawn@^5.0.1, cross-spawn@^5.1.0: version "5.1.0" @@ -10217,10 +10273,10 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" -extract-files@^8.0.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/extract-files/-/extract-files-8.1.0.tgz#46a0690d0fe77411a2e3804852adeaa65cd59288" - integrity sha512-PTGtfthZK79WUMk+avLmwx3NGdU8+iVFXC2NMGxKsn0MnihOG2lvumj+AZo8CTwTrwjXDgZ5tztbRlEdRjBonQ== +extract-files@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/extract-files/-/extract-files-9.0.0.tgz#8a7744f2437f81f5ed3250ed9f1550de902fe54a" + integrity sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ== extract-zip@^1.6.6: version "1.7.0" @@ -11822,6 +11878,11 @@ graphql-subscriptions@^1.1.0: dependencies: iterall "^1.2.1" +graphql-tag@^2.11.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.11.0.tgz#1deb53a01c46a7eb401d6cb59dec86fa1cccbffd" + integrity sha512-VmsD5pJqWJnQZMUeRwrDhfgoyqcfwEkvtpANqcoUG8/tOLkwNgU9mzub/Mc78OJMhHjx7gfAMTxzdG43VGg3bA== + graphql-type-json@^0.2.4: version "0.2.4" resolved "https://registry.yarnpkg.com/graphql-type-json/-/graphql-type-json-0.2.4.tgz#545af27903e40c061edd30840a272ea0a49992f9" @@ -12331,6 +12392,13 @@ hoist-non-react-statics@^3.3.0: dependencies: react-is "^16.7.0" +hoist-non-react-statics@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + home-or-tmp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" @@ -13557,6 +13625,11 @@ is-primitive@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" +is-promise@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-4.0.0.tgz#42ff9f84206c1991d26debf520dd5c01042dd2f3" + integrity sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ== + is-promise@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" @@ -17605,6 +17678,13 @@ opn@^5.4.0, opn@^5.5.0: dependencies: is-wsl "^1.1.0" +optimism@^0.12.1: + version "0.12.1" + resolved "https://registry.yarnpkg.com/optimism/-/optimism-0.12.1.tgz#933f9467b9aef0e601655adb9638f893e486ad02" + integrity sha512-t8I7HM1dw0SECitBYAqFOVHoBAHEQBTeKjIL9y9ImHzAVkdyPK4ifTgM4VJRDtTUY4r/u5Eqxs4XcGPHaoPkeQ== + dependencies: + "@wry/context" "^0.5.2" + optimist@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" @@ -24052,7 +24132,7 @@ trough@^1.0.0: resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-2.2.1.tgz#c5bf04a5bbec3fd118be4084461b3a27c4d796bf" integrity sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q== -ts-invariant@^0.4.0: +ts-invariant@^0.4.0, ts-invariant@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/ts-invariant/-/ts-invariant-0.4.4.tgz#97a523518688f93aafad01b0e80eb803eb2abd86" integrity sha512-uEtWkFM/sdZvRNNDL3Ehu4WVpwaulhwQszV8mrtcdeE8nN00BV9mAmQ88RkrBhFgl9gMgvjJLAQcZbnPXI9mlA== @@ -26254,6 +26334,11 @@ zen-observable@^0.8.0: version "0.8.9" resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.9.tgz#0475c760ff0eda046bbdfa4dc3f95d392807ac53" +zen-observable@^0.8.14: + version "0.8.15" + resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.15.tgz#96415c512d8e3ffd920afd3889604e30b9eaac15" + integrity sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ== + zipkin-javascript-opentracing@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/zipkin-javascript-opentracing/-/zipkin-javascript-opentracing-2.1.0.tgz#05aed5ff7b609f60ca54020de7f3b0b6c0b0a973"