diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md new file mode 100644 index 0000000000..90cff75711 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug-report.md @@ -0,0 +1,32 @@ +--- +name: "Bug Report" +about: Notice something off? Tell us about it here. +labels: bug +--- + + + +### Description + + + +### Steps to Reproduce + + + +### Expected Result + + + +### Actual Result + + + +### Additional Context + + \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/code-changes.md b/.github/ISSUE_TEMPLATE/code-changes.md new file mode 100644 index 0000000000..ad751612cd --- /dev/null +++ b/.github/ISSUE_TEMPLATE/code-changes.md @@ -0,0 +1,23 @@ +--- +name: "Code Changes" +about: Tell us more about how you want to improve graphql.org +labels: enhancement +--- + + + +### Description + + + +### Motivation + + + +### Collaboration + + + +### Additional Context + + \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/new-faq-question.md b/.github/ISSUE_TEMPLATE/new-faq-question.md new file mode 100644 index 0000000000..d596fb62c0 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/new-faq-question.md @@ -0,0 +1,23 @@ +--- +name: "New FAQ Question" +about: Propose a new question to add to our FAQ page +labels: faq +--- + + + +### Question + + + +### Proposed answer + + + +### Collaboration + + + +### Additional Context + + diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md new file mode 100644 index 0000000000..d45f50dd58 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/question.md @@ -0,0 +1,7 @@ +--- +name: "Question" +about: Ask us anything! +labels: question +--- + + diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000000..9b9f5e0d5f --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,15 @@ + + +Closes # + +## Description + + \ No newline at end of file diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml new file mode 100644 index 0000000000..4fa2c31f98 --- /dev/null +++ b/.github/workflows/CI.yml @@ -0,0 +1,28 @@ +name: CI + +on: + push: + branches: [ zh-Hans ] + workflow_dispatch: + +jobs: + build-and-deploy: + runs-on: ubuntu-latest + steps: + - name: Checkout ๐Ÿ›Ž๏ธ + uses: actions/checkout@v2 + with: + persist-credentials: false + + - name: Install and Build ๐Ÿ”ง + run: | + yarn install + yarn build + + - name: Deploy ๐Ÿš€ + uses: JamesIves/github-pages-deploy-action@3.7.1 + with: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + BRANCH: master + FOLDER: public + CLEAN: true \ No newline at end of file diff --git a/.gitignore b/.gitignore index aa091beba7..4dd1c8a2d2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,77 @@ -*.swp -*~ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +old +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Typescript v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# dotenv environment variable files +.env* + +# gatsby files +.cache/ +public + +# Mac files .DS_Store -.nvmrc -node_modules -npm-debug.log -/build/ -.tmp.* \ No newline at end of file +# Yarn +yarn-error.log +.pnp/ +.pnp.js +# Yarn Integrity file +.yarn-integrity + +# Swap files +*.swp + +# IDE files +.idea/ +*.iml diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000000..58d06c368a --- /dev/null +++ b/.prettierignore @@ -0,0 +1,4 @@ +.cache +package.json +package-lock.json +public diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000000..33d2cfa3f6 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,4 @@ +{ + "arrowParens": "avoid", + "semi": false +} diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 0529840303..0000000000 --- a/.travis.yml +++ /dev/null @@ -1,9 +0,0 @@ -language: node_js -node_js: 6 - -deploy: - skip_cleanup: true - provider: script - script: ./resources/publish.sh - on: - branch: zh-Hans diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000000..c3afcd0cb8 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,164 @@ +# Contributing to graphql.org + +> This repository is governed by the [GraphQL Code of Conduct](https://graphql.org/codeofconduct/). By contributing, you agree to abide by its terms. + +Thanks for taking the time to contribute! The GraphQL community is great because of people like you ๐ŸŽ‰ + +There are many ways to get involved. Follow this guide and feel free to [reach out if you have questions](#asking-questions). + +## What's in this document + +- [Development guide](#development-guide) + - [Running the site locally](#running-the-site-locally) + - [Branching](#branching) + - [Project structure](#project-structure) + - [Publishing the updated site](#publishing-the-updated-site) +- [Updating content](#updating-content) + - [Fix a typo, code sample bug, or formatting](#fix-a-typo-code-sample-bug-or-formatting) + - [Add a library or tool to the Code page](#add-a-library-or-tool-to-the-code-page) + - [Add a resource to the Community page](#add-a-resource-to-the-community-page) + - [Add a question to the FAQ](#add-a-question-to-the-faq) + - [Write a new section or guide](#write-a-new-section-or-guide) +- [Making changes to the code](#making-changes-to-the-code) + - [Browser support](#browser-support) +- [Contributing something else](#contributing-something-else) +- [Asking questions](#asking-questions) + +## Development guide + +### Running the site locally + +First, clone this repository and move into the directory: + +```bash +git clone https://github.com/graphql/graphql.github.io.git +cd graphql.github.io +``` + +Then, use [Yarn](https://yarnpkg.com/getting-started/install) to install and load all the necessary dependencies: + +```bash +yarn +``` + +> Note: [Yarn is currently the only way to run the site locally](https://github.com/graphql/graphql.github.io/issues/946). + +Run the `start` script to launch the server: + +```bash +yarn start +``` + +Finally, open [http://localhost:8000](http://localhost:8000) to view it in the browser. + +The GraphQL website is built with [Gatsby](https://www.gatsbyjs.com/docs/). This means that a hot-reloading development environment will be accessible by default. + +### Branching + +Active development for graphql.org happens on the `source` branch. Be sure to create any new branches or direct any pull requests back to `source`. + +### Project structure + +- `static`: Files that will be copied directly to `public`. +- `public`: Output files that will be served by a static HTTP server. +- `src`: Markdown and the TypeScript/JavaScript files used to generate the website. + - `assets`: All the [`less`](http://lesscss.org/) files that contain stylesheets. + - `components` and `Containers`: React components used for layouts and pages. + - `content`: Markdown files with the content of pages. + - `templates`: Layout templates. + - `utils`: Helper functions. + +### Publishing the updated site + +Your changes will be merged into the `source` branch. Then, the CI will automatically publish a new version of http://graphql.org via [Netlify](https://docs.netlify.com/). + +## Updating content + +### Fix a typo, code sample bug, or formatting + +If you notice something wrong in the text or code samples, please follow our [development guide](#development-guide) to [open a pull request](https://github.com/graphql/graphql.github.io/pulls) with your fix. + +All of the content on graphql.org is written and formatted in [Markdown](https://www.gatsbyjs.com/docs/mdx/markdown-syntax/). + +### Add a library, tool, or service to the Code page + +The [Code page](https://graphql.org/code/) is a collection of libraries, tools, and services built for GraphQL. + +#### General guidelines + +**Adding a resource:** +- With rare exceptions, any pull request that adds a new library, tool, or service to the Code page will be accepted. +- Any library should include a few paragraphs describing the usage and offering people a chance to grok the project priorities. +- If there isn't a section already for your programming language, please add it. + +If it isn't a library, tool, or service - then it could go on the [Community page](#add-a-resource-to-the-community-page). If you aren't sure where your resource would fit, you can [open an issue](https://github.com/graphql/graphql.github.io/issues/new) and ask. + +**Removing a resource:** +- Services that don't work anymore +- Code repositories that are archived +- Projects declared to be abandoned by their maintainers +- Any link that 404s + +We rely on these concrete signals before removing a resource. Even if a project hasn't been released in a few years, that doesn't mean that it's not working. + +#### Workflow + +To add or remove a resource to this page, follow our [development guide](#development-guide) to [open a pull request](https://github.com/graphql/graphql.github.io/pulls). + +The content for this page is located in [various directories under `src/content/code`](./src/). Everything is written and formatted in [Markdown](https://www.gatsbyjs.com/docs/mdx/markdown-syntax/). + +### Add a resource to the Community page + +The [Community page](https://graphql.org/community/) highlights resources and groups that help people get more involved with GraphQL. + +To add something to this page, follow our [development guide](#development-guide) to [open a pull request](https://github.com/graphql/graphql.github.io/pulls). + +The content for this page is located in a [directory under `src/content/community`](./src/). Everything is written and formatted in [Markdown](https://www.gatsbyjs.com/docs/mdx/markdown-syntax/). + +### Add a question to the FAQ + +Our [Frequently Asked Questions (FAQ) page](https://graphql.org/faq/) is designed to help answer questions from the community. This page is still in development, so if you think there's a question missing - please [open an issue](https://github.com/graphql/graphql.github.io/issues/new)! It'd be great if you could include both the question and a proposed answer outline in the issue description. + +Once you have approval from a maintainer, use the [development guide](#development-guide) to add your question and answer. The content for the FAQ is located in [`src/content/faq`](./src/content/faq/). Each section has its own [Markdown](https://www.gatsbyjs.com/docs/mdx/markdown-syntax/) file. + +> Note: All answers in this section should be vendor-neutral and accessible to GraphQL users of all levels. + +When your answer is ready, [open a pull request](https://github.com/graphql/graphql.github.io/pulls/). + +### Write a new section or guide + +There are still several [Best Practices guides that no one has written](https://github.com/graphql/graphql.github.io/issues/41) yet. If you want to take one of these, comment on [the original issue](https://github.com/graphql/graphql.github.io/issues/41) and mention which topic you'll work on. + +Then, use our [development guide](#development-guide) to determine where your new page best fits. Our documentation is written and formatted in [Markdown](https://www.gatsbyjs.com/docs/mdx/markdown-syntax/). + +Once it's ready for review, please [open a pull request](https://github.com/graphql/graphql.github.io/pulls/). + +## Making changes to the code + +Before diving into any code updates, please [open an issue](https://github.com/graphql/graphql.github.io/issues/new) describing the change(s) you'd like to make. + +If you're working off an [existing issue](https://github.com/graphql/graphql.github.io/issues/), follow our [development guide](#development-guide) to make your changes. Once it's ready for review, please [open a pull request](https://github.com/graphql/graphql.github.io/pulls/) and reference the original issue. + +### Browser support + +We aim to support the latest stable versions of Chrome, Edge, Firefox, Safari, and Safari on mobile. + +## Contributing something else + +Interested in adding something not covered in this guide? Please [open an issue](https://github.com/graphql/graphql.github.io/issues/new) and tell us all about your idea. + +## Asking questions + +If you run into any problems or have questions while contributing, you're always welcome to [open an issue](https://github.com/graphql/graphql.github.io/issues/new). + +# Opening a PR to contribute your code + +You can also ping our team in the [#website channel on the GraphQL Slack](https://graphql.slack.com/messages/website/). [Get your invite here!](https://graphql-slack.herokuapp.com/) + +This repository is managed by EasyCLA. Project participants must sign the free ([GraphQL Specification Membership agreement](https://preview-spec-membership.graphql.org) before making a contribution. You only need to do this one time, and it can be signed by [individual contributors](http://individual-spec-membership.graphql.org/) or their [employers](http://corporate-spec-membership.graphql.org/). + +To initiate the signature process please open a PR against this repo. The EasyCLA bot will block the merge if we still need a membership agreement from you. + +You can find [detailed information here](https://github.com/graphql/graphql-wg/tree/main/membership). If you have issues, please email [operations@graphql.org](mailto:operations@graphql.org). + +If your company benefits from GraphQL and you would like to provide essential financial support for the systems and people that power our community, please also consider membership in the [GraphQL Foundation](https://foundation.graphql.org/join). diff --git a/README.md b/README.md index 8b7edb96f6..dbdf9b2519 100644 --- a/README.md +++ b/README.md @@ -1,34 +1,39 @@ +# Source Repository for graphql.org +This repository contains the source code of https://graphql.org website. + # Contributing [![All Contributors](https://img.shields.io/badge/all_contributors-11-orange.svg?style=flat-square)](#contributors) Organization gh-pages deploy the `master` branch, so active development occurs on this `source` branch. -The site is written in JS and Markdown files in `site/`. - -The site chrome are all in JS files in `site/_core/`. - ### Making changes The first time, get all the dependencies loaded via -``` -npm install -``` +`$ npm install` or `$ yarn install` Then, run the server via -``` -npm start -Open http://localhost:8444/ -``` +`$ npm start` or `$ yarn start` -Anytime you change the contents, just refresh the page and it's going to be updated. +Open [http://localhost:8000](http://localhost:8000) to view it in the browser. +Anytime you make some changes, refresh the page to see the updates. -### Publish the Website +### Folder structure -Once pushed to the `source` branch, Travis CI will publish http://graphql.org/ +- `static` folder contains the files that will be copied directly to `public` folder which will contain the output files to be served by a static HTTP server. + +- `src` folder contains markdown and TypeScript/JavaScript files used to generate the website; +- - `assets` folder contains `less` files and those files contain stylesheets +- - `components` and `Containers` folders contains React components that are used in layouts and pages +- - `content` folder contains markdown files for the content of pages +- - `templates` contains the layout templates +- - `utils` contains helper functions + +### Publish the Website +Once pushed to the `zh-Hans` branch, CI will publish to http://graphql.cn/ ## Contributors diff --git a/gatsby-config.js b/gatsby-config.js new file mode 100644 index 0000000000..9582d3f079 --- /dev/null +++ b/gatsby-config.js @@ -0,0 +1,119 @@ +module.exports = { + siteMetadata: { + title: "ไธ€็งไธบไฝ ็š„ API ่€Œ็”Ÿ็š„ๆŸฅ่ฏข่ฏญ่จ€", + description: + "GraphQL ๆไพ›ไบ† API ไธญๆ•ฐๆฎ็š„ๅฎŒๆ•ดๆ่ฟฐ๏ผŒๆไพ›่ฎฉๅฎขๆˆท็ซฏ่ƒฝๅคŸๅ‡†็กฎๅœฐ่Žทๅ–้œ€่ฆ็š„ๆ•ฐๆฎ่€ŒไธๅŒ…ๅซไปปไฝ•ๅ†—ไฝ™็š„่ƒฝๅŠ›๏ผŒ่ฎฉ API ๆ›ดๅŠ ๅฎนๆ˜“้š็€ๆ—ถ้—ดๆŽจ็งป่€Œๆผ”่ฟ›๏ผŒๅนถๆไพ›ๅผบๅคง็š„ๅผ€ๅ‘่€…ๅทฅๅ…ทใ€‚", + siteUrl: "http://graphql.cn/", + }, + + plugins: [ + "gatsby-plugin-react-helmet", + 'gatsby-plugin-anchor-links', + { + resolve: "gatsby-source-filesystem", + options: { + name: "content", + path: `${__dirname}/src/content`, + }, + }, + { + resolve: "gatsby-transformer-remark", + options: { + plugins: [ + { + resolve: "@weknow/gatsby-remark-twitter", + options: { + debug: true + } + } + ] + } + }, + { + resolve: `gatsby-plugin-webfonts`, + options: { + fonts: { + google: [ + { + family: `Rubik`, + variants: [`300`], + }, + { + family: `Roboto Mono`, + variants: [`400`, `400i`, `600`], + }, + { + family: `Roboto`, + variants: [`300`], + }, + ], + }, + }, + }, + `gatsby-plugin-less`, + `gatsby-plugin-react-helmet`, + { + resolve: `gatsby-plugin-google-analytics`, + options: { + trackingId: "UA-44373548-16", + }, + }, + { + resolve: "gatsby-plugin-feed", + options: { + query: ` + { + site { + siteMetadata { + siteUrl + } + } + } + `, + feeds: [ + { + serialize: ({ query: { site, allMarkdownRemark } }) => + allMarkdownRemark.edges.map( + ({ + node: { + excerpt, + frontmatter: { title, date, permalink, byline }, + }, + }) => ({ + title, + date, + url: site.siteMetadata.siteUrl + permalink, + description: excerpt, + author: byline, + }) + ), + query: ` + { + allMarkdownRemark( + filter: {frontmatter: {layout: {eq: "blog"}}}, + sort: { order: DESC, fields: [frontmatter___date] } + ) { + edges { + node { + excerpt + frontmatter { + title + date + permalink + byline + } + } + } + } + } + `, + output: "/blog/rss.xml", + title: "Blog | GraphQL", + feed_url: "http://graphql.org/blog/rss.xml", + site_url: "http://graphql.org/", + }, + ], + }, + }, + ], +} diff --git a/gatsby-node.js b/gatsby-node.js new file mode 100644 index 0000000000..a3961b4567 --- /dev/null +++ b/gatsby-node.js @@ -0,0 +1,369 @@ +const path = require("path") +const sortLibs = require("./scripts/sort-libraries") +const globby = require("globby") +const frontmatterParser = require("parser-front-matter") +const { readFile } = require("fs-extra") +const { promisify } = require("util") + +exports.onCreatePage = async ({ page, actions }) => { + const { createPage, deletePage } = actions + deletePage(page) + let context = { + ...page.context, + sourcePath: path.relative(__dirname, page.componentPath), + } + if (page.path === "/code" || page.path === "/code/") { + const markdownFilePaths = await globby("src/content/code/**/*.md") + const codeData = {} + const slugMap = require("./src/content/code/slug-map.json") + const parse$ = promisify(frontmatterParser.parse) + await Promise.all( + markdownFilePaths.map(async markdownFilePath => { + const markdownFileContent = await readFile(markdownFilePath, "utf-8") + let { + data: { name, description, url, github, npm, gem }, + content: howto, + } = await parse$(markdownFileContent, undefined) + howto = howto.trim() + const pathArr = markdownFilePath.split("/") + if (markdownFilePath.includes("language-support")) { + const languageSupportDirIndex = pathArr.indexOf("language-support") + const languageNameSlugIndex = languageSupportDirIndex + 1 + const languageNameSlug = pathArr[languageNameSlugIndex] + const languageName = slugMap[languageNameSlug] + codeData.Languages = codeData.Languages || {} + codeData.Languages[languageName] = + codeData.Languages[languageName] || {} + + const categoryNameSlugIndex = languageSupportDirIndex + 2 + const categoryNameSlug = pathArr[categoryNameSlugIndex] + const categoryName = slugMap[categoryNameSlug] + codeData.Languages[languageName][categoryName] = + codeData.Languages[languageName][categoryName] || [] + codeData.Languages[languageName][categoryName].push({ + name, + description, + howto, + url, + github, + npm, + gem, + sourcePath: markdownFilePath, + }) + } else { + const codeDirIndex = pathArr.indexOf("code") + const categoryNameSlugIndex = codeDirIndex + 1 + const categoryNameSlug = pathArr[categoryNameSlugIndex] + const categoryName = slugMap[categoryNameSlug] + codeData[categoryName] = codeData[categoryName] || [] + codeData[categoryName].push({ + name, + description, + howto, + url, + github, + npm, + gem, + sourcePath: markdownFilePath, + }) + } + }) + ) + const languageList = [] + let sortedTools = [] + await Promise.all([ + Promise.all( + Object.keys(codeData.Languages).map(async languageName => { + const libraryCategoryMap = codeData.Languages[languageName] + let languageTotalStars = 0 + await Promise.all( + Object.keys(libraryCategoryMap).map(async libraryCategoryName => { + const libraries = libraryCategoryMap[libraryCategoryName] + const { sortedLibs, totalStars } = await sortLibs(libraries) + libraryCategoryMap[libraryCategoryName] = sortedLibs + languageTotalStars += totalStars || 0 + }) + ) + languageList.push({ + name: languageName, + totalStars: languageTotalStars, + categoryMap: libraryCategoryMap, + }) + }) + ), + sortLibs(codeData.Tools).then(({ sortedLibs }) => { + sortedTools = sortedLibs + }), + ]) + + context = { + ...context, + otherLibraries: { + Services: codeData.Services, + Tools: sortedTools, + "More Stuff": codeData["More Stuff"], + }, + languageList: languageList.sort((a, b) => { + if (a.totalStars > b.totalStars) { + return -1 + } else if (a.totalStars < b.totalStars) { + return 1 + } + return 0 + }), + } + } + createPage({ + ...page, + context, + }) +} + +exports.createPages = async ({ graphql, actions }) => { + const { createPage } = actions + + const result = await graphql(/* GraphQL */ ` + query { + allMarkdownRemark { + edges { + node { + fileAbsolutePath + parent { + ... on File { + relativeDirectory + sourceInstanceName + } + } + frontmatter { + title + permalink + next + category + sublinks + sidebarTitle + date + tags + } + id + } + } + } + tagsGroup: allMarkdownRemark { + group(field: frontmatter___tags) { + fieldValue + } + } + } + `) + + const docTemplate = path.resolve("./src/templates/doc.tsx") + + if (result.errors) { + // eslint-disable-next-line no-console + console.error(result.errors) + throw result.errors + } + + const markdownPages = result.data.allMarkdownRemark.edges + + // foundation: [ + // { + // fileAbsolutePath: '/graphql/graphql.github.io/src/content/foundation/About.md', + // parent: {}, + // frontmatter: {}, + // id: '1d502d5e-3453-56cf-ad9a-7f6bfb68d9ba' + // }, + // ... + // ] + // } + let pagesGroupedByFolder = {} + + // { + // foundation: [ + // { name: 'foundation', links: [{"fileAbsolutePath":"/graphql/graphql.github.io/src/content/foundation/About.md","parent":{"relativeDirectory":"foundation","sourceInstanceName":"content"},"frontmatter":{"title":"What is the GraphQL Foundation?","permalink":"/foundation/","next":"/foundation/join/","category":"GraphQL Foundation","sublinks":null,"sidebarTitle":"About the Foundation","date":null},"id":"1d502d5e-3453-56cf-ad9a-7f6bfb68d9ba"}] }, + // { name: 'GraphQL Foundation', links: [Array] } + // ], + // Note that this is mutated + let sideBardata = {} + + // Sidebar items to add which don't come from markdown + const additionalSidebarItems = { + foundation: [ + { + name: "GraphQL Foundation", + links: [ + { + frontmatter: { + sidebarTitle: "Foundation Members", + title: "Foundation Members", + permalink: "/foundation/members/", + date: null, + category: "GraphQL Foundation", + }, + }, + ], + }, + ], + } + + // E.g. + // { + // permalink: '/learn/best-practices/', + // relativeDirectory: 'learn', + // sidebarTitle: 'Introduction', + // nextPermalink: '/learn/thinking-in-graphs/', + // sourcePath: 'src/content/learn/BestPractice-Introduction.md' + // } + const allPages = [] + + // Loop through all *.md files in the repo, setting up both pagesGroupedByFolder + // and allPages. + markdownPages.map(({ node }) => { + const { + frontmatter: { permalink, next, sidebarTitle }, + parent: { relativeDirectory, sourceInstanceName }, + } = node + + if ( + sourceInstanceName !== "content" || + relativeDirectory.includes("code/") + ) { + return + } + + if (!pagesGroupedByFolder[relativeDirectory]) { + pagesGroupedByFolder = { + ...pagesGroupedByFolder, + [relativeDirectory]: [node], + } + } else { + pagesGroupedByFolder = { + ...pagesGroupedByFolder, + [relativeDirectory]: [...pagesGroupedByFolder[relativeDirectory], node], + } + } + + allPages.push({ + permalink, + relativeDirectory, + sidebarTitle, + nextPermalink: next, + sourcePath: path.relative(__dirname, node.fileAbsolutePath), + }) + }) + + // Loop through the sections in the sidebar, mutating the + // next and previous objects for different + Object.entries(pagesGroupedByFolder).map(([folder, pages]) => { + let pagesByUrl = {} + let previousPagesMap = {} + let pagesByDate = pages.sort((a, b) => { + const aDate = new Date(a.frontmatter.date || Date.now()) + const bDate = new Date(b.frontmatter.date || Date.now()) + if (aDate > bDate) { + return -1 + } else if (aDate < bDate) { + return 1 + } + return 0 + }) + + pagesByDate.forEach(page => { + const next = page.frontmatter.next + const permalink = page.frontmatter.permalink + + if (next) { + previousPagesMap[next] = permalink + } + pagesByUrl[permalink] = page + }) + + let firstPage = null + pagesByDate.forEach(page => { + const permalink = page.frontmatter.permalink + if (!previousPagesMap[permalink] && !firstPage) { + firstPage = page + return + } + }) + + if (!firstPage) { + throw new Error(`First page not found in ${folder}`) + } + + let categoriesMap = {} + let currentCategory = null + + let page = firstPage + let i = 0 + while (page && i++ < 1000) { + const { frontmatter } = page + const { + category: definedCategory, + next: definedNextPageUrl, + } = frontmatter + let category = definedCategory || folder + if (!currentCategory || category !== currentCategory.name) { + if (currentCategory) { + if (!(currentCategory.name in categoriesMap)) { + categoriesMap[currentCategory.name] = currentCategory + } + } + currentCategory = { + name: category, + links: [], + } + } + currentCategory.links.push(page) + if (definedNextPageUrl) { + page = pagesByUrl[definedNextPageUrl] + } else { + page = pagesByDate[pagesByDate.indexOf(page) + 1] + } + if (currentCategory.links.includes(page)) { + page = null + } + } + + if (!(currentCategory.name in categoriesMap)) { + categoriesMap[currentCategory.name] = currentCategory + } + + sideBardata[folder] = Object.values(categoriesMap) + }) + + Object.entries(additionalSidebarItems).map(([folder, sections]) => { + sections.forEach(s => { + const originalLinks = sideBardata[folder].find(l => l.name === s.name) + originalLinks.links = [...originalLinks.links, ...s.links] + }) + }) + + // Use all the set up data to now tell Gatsby to create pages + // on the site + allPages.forEach(page => { + createPage({ + path: `${page.permalink}`, + component: docTemplate, + context: { + permalink: page.permalink, + nextPermalink: page.nextPermalink, + sideBarData: sideBardata[page.relativeDirectory], + sourcePath: page.sourcePath, + }, + }) + }) + + // Create tag pages + const tagTemplate = path.resolve("src/templates/tags.tsx") + const tags = result.data.tagsGroup.group + tags.forEach(tag => { + createPage({ + path: `/tags/${tag.fieldValue}/`, + component: tagTemplate, + context: { + tag: tag.fieldValue, + }, + }) + }) +} diff --git a/netlify.toml b/netlify.toml new file mode 100644 index 0000000000..2c4c21be4d --- /dev/null +++ b/netlify.toml @@ -0,0 +1,11 @@ +# Settings in the [build] context are global and are applied to all contexts +# unless otherwise overridden by more specific contexts. +[build] + # Directory that contains the deploy-ready HTML files and assets generated by + # the build. This is relative to the base directory if one has been set, or the + # root directory if a base has not been set. This sample publishes the + # directory located at the absolute path "root/project/build-output" + publish = "public/" + + # Default build command. + command = "yarn build" diff --git a/notes/ContributingToCodePage.md b/notes/ContributingToCodePage.md new file mode 100644 index 0000000000..2ac02d4479 --- /dev/null +++ b/notes/ContributingToCodePage.md @@ -0,0 +1,78 @@ +## Contributing to the Code Page + +Hi, thanks for reading the docs! + +Secondly, we want to provide a really strong overview of all the libraries in the GraphQL eco-system. To make this +easy for contributors the code page is automatically generated from a series of markdown files in this repo. + +```sh +$ tree src/content/code +src/content/code +โ”œโ”€โ”€ language-support +โ”‚ โ”œโ”€โ”€ c-c +โ”‚ โ”‚ โ””โ”€โ”€ tools +โ”‚ โ”‚ โ””โ”€โ”€ libgraphqlparser.md +โ”‚ โ”œโ”€โ”€ clojure +โ”‚ โ”‚ โ”œโ”€โ”€ client +โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ regraph.md +โ”‚ โ”‚ โ””โ”€โ”€ server +โ”‚ โ”‚ โ”œโ”€โ”€ alumbra.md +โ”‚ โ”‚ โ”œโ”€โ”€ graphql-clj.md +โ”‚ โ”‚ โ””โ”€โ”€ lacinia.md +โ”‚ โ”œโ”€โ”€ c-net +โ”‚ โ”‚ โ”œโ”€โ”€ client +โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ graphql-client.md +โ”‚ โ”‚ โ”‚ โ”œโ”€โ”€ graphql-net-client.md +โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ sahb-graphqlclient.md +// etc +``` + +We'd love any new project to include a few paragraphs describing its goals and usage, the goal here is to make it easy for people to decide between options. + +Here's an optimal example example of what we're looking for: + +- It uses yml frontmatter to provide additional information like repo, npm +- It explains itself in the 'description' then fills fleshes out that description with some code samples + +````md +--- +name: Express GraphQL +description: The reference implementation of a GraphQL API server over an Express webserver. You can use this to run GraphQL in conjunction with a regular Express webserver, or as a standalone GraphQL server. +url: /graphql-js/running-an-express-graphql-server/ +github: graphql/express-graphql +npm: "express-graphql" +--- + +To run an `express-graphql` hello world server: + +```bash +npm install express express-graphql graphql +``` + +Then run `node server.js` with this code in `server.js`: + +```js +var express = require('express'); +var { graphqlHTTP } = require('express-graphql'); +var { buildSchema } = require('graphql'); + +var schema = buildSchema(` + type Query { + hello: String + } +`); + +var root = { hello: () => 'Hello world!' }; + +var app = express(); +app.use('/graphql', graphqlHTTP({ + schema: schema, + rootValue: root, + graphiql: true, +})); +app.listen(4000, () => console.log('Now browse to localhost:4000/graphql')); +``` + +```` + +Any library/tool/service has a maximum height in the site, and then it can be expanded by clicking, so if you need quite a lot of space to explain your project then that's OK. diff --git a/package.json b/package.json index 1d1ab5ebd6..d56aaf28f0 100644 --- a/package.json +++ b/package.json @@ -3,39 +3,44 @@ "private": true, "version": "0.0.0", "scripts": { - "start": "rm -rf build && babel-node resources/server.js", - "build": "rm -rf build && babel-node resources/build.js", - "watch": "rm -rf build && babel-node resources/watch.js", - "test": "npm run build" + "build": "gatsby build", + "develop": "GATSBY_GRAPHQL_IDE=playground gatsby develop", + "format": "prettier --write \"**/*.{js,jsx,ts,tsx,json,md}\"", + "start": "npm run develop", + "serve": "gatsby serve", + "clean": "gatsby clean", + "test": "echo \"Write tests! -> https://gatsby.dev/unit-testing\" && exit 1" }, - "babel": { - "optional": [ - "es7.asyncFunctions", - "es7.objectRestSpread" - ] - }, - "site": { - "source": "./site", - "build": "./build" + "dependencies": { + "@graphql-tools/schema": "7.0.0", + "@weknow/gatsby-remark-twitter": "^0.2.3", + "codemirror": "5.58.2", + "codemirror-graphql": "0.12.3", + "gatsby": "2.25.0", + "gatsby-plugin-anchor-links": "1.1.1", + "gatsby-plugin-feed": "2.6.0", + "gatsby-plugin-google-analytics": "2.4.0", + "gatsby-plugin-less": "4.0.6", + "gatsby-plugin-react-helmet": "3.3.14", + "gatsby-plugin-webfonts": "1.1.3", + "gatsby-source-filesystem": "2.4.0", + "gatsby-transformer-remark": "2.9.0", + "globby": "11.0.1", + "graphql": "15.4.0", + "marked": "1.2.2", + "numbro": "2.3.2", + "parser-front-matter": "1.6.4", + "prism-react-renderer": "1.1.1", + "prismjs": "1.22.0", + "react": "17.0.1", + "react-dom": "17.0.1", + "react-helmet": "6.1.0", + "timeago.js": "4.0.2" }, "devDependencies": { - "babel": "^5.8.23", - "babel-core": "^5.8.23", - "babel-loader": "^5.3.2", - "babel-runtime": "^5.8.20", - "express": "^4.13.3", - "js-yaml": "^3.4.0", - "less": "^2.7.1", - "react": "15.3.1", - "react-dom": "15.3.1", - "sane": "^1.2.0", - "webpack": "^1.12.1" - }, - "dependencies": { - "codemirror": "^5.6.0", - "codemirror-graphql": "^0.5.7", - "graphql": "^0.7.0", - "graphql-tools": "^0.6.6", - "marked": "^0.3.5" + "@types/codemirror": "0.0.98", + "@types/prismjs": "1.16.2", + "@types/react-helmet": "6.1.0", + "prettier": "2.1.2" } } diff --git a/resources/Site.js b/resources/Site.js deleted file mode 100644 index 82a5447caa..0000000000 --- a/resources/Site.js +++ /dev/null @@ -1,171 +0,0 @@ -/** - * Copyright (c) 2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the license found in the - * LICENSE file in the root directory of this source tree. - */ - -var fileWalker = require('./fileWalker'); -var fs = require('fs'); -var path = require('path'); -var writer = require('./writer'); -var yaml = require('js-yaml'); -import { endsWith } from './util'; - -exports.readSite = readSite; -exports.buildSite = buildSite; - -async function readSite(siteRoot) { - var site = { - root: path.resolve(siteRoot), - files: [] - }; - - await fileWalker(site.root, (absPath, stat) => { - var relPath = path.relative(site.root, absPath); - - return readFileData(absPath, relPath, stat).then(data => { - data = normalizeData(data); - var dirName = path.dirname(relPath); - var dirs = dirName === '.' ? [] : dirName.split(path.sep); - // TODO: throw if a dirname is only a number or is called "length" - // TODO: there must be a better data structure that doesn't hack Array - var files = site.files; - files.push(data); - for (var i = 0; i < dirs.length; i++) { - files = files[dirs[i]] || (files[dirs[i]] = []); - files.push(data); - } - }); - }); - - // Cross-link all prev/next pages - var pageByUrl = Object.create(null); - for (var i = 0; i < site.files.length; i++) { - pageByUrl[path.resolve(site.files[i].url)] = site.files[i]; - } - - for (var i = 0; i < site.files.length; i++) { - var page = site.files[i]; - if (page.next) { - page.nextPage = pageByUrl[path.resolve(page.url, page.next)]; - } - } - - return site; -} - -function buildSite(buildRoot, site, filter) { - return Promise.all(site.files - .filter(file => - !filter || - (filter.test ? filter.test(file.absPath) : filter === file.absPath)) - .map(file => writer(buildRoot, file, site)) - ); -} - - - -var PAGEISH = [ '.html.js', '.xml.js', '.md', '.markdown' ]; - -function isPageish(filePath) { - for (var i = 0; i < PAGEISH.length; i++) { - if (endsWith(filePath, PAGEISH[i])) { - return true; - } - } - return false; -} - -var FRONT_MATTER_RX = - /^(---\s*\n(?:(?:[^\n]*\n)(?!---|\.\.\.))*[^\n]*\n)(?:---|\.\.\.)?(?:\s*\n)*/; - -// Given some file information produce a data structure that can be used. -// If a file is page-like, front-matter will be looked for. -function readFileData(absPath, relPath, stat) { - if (stat.size > 100000 || !isPageish(relPath)) { - return Promise.resolve({ absPath, relPath, stat }); - } - return readFile(absPath).then(content => { - var frontMatter = FRONT_MATTER_RX.exec(content); - - if (!frontMatter) { - return { absPath, relPath, stat, content }; - } - return { - ...yaml.load(frontMatter[1]), - absPath, - relPath, - stat, - content: content.slice(frontMatter[0].length) - }; - }); -} - -// Normalize the file data -function normalizeData(file) { - file.isPage = file.content && isPageish(file.relPath); - file.url = urlToFile(file); - var dirname = path.dirname(file.relPath); - file.dir = dirname === '.' ? 'docs' : dirname.split('/')[0]; - file.date = file.date ? - Date.parse(file.date) : - (file.stat.birthtime || file.stat.ctime); - return file; -} - -// The URL with a leading slash to a file. -function urlToFile(file) { - // Determine full url from permalink or the file path. - var url; - if (file.permalink) { - url = file.permalink[0] === '/' ? - file.permalink : - '/' + path.join(path.dirname(file.relPath), file.permalink); - // Ext-less permalinks should have trailing slashes - if (!endsWith(url, '/') && path.extname(url) === '') { - url += '/'; - } - } else { - url = '/' + file.relPath; - - if (endsWith(file.relPath, '.xml.js')) { - url = url.slice(0, -'.js'.length); - } else { - for (var i = 0; i < PAGEISH.length; i++) { - if (endsWith(url, PAGEISH[i])) { - url = url.slice(0, -PAGEISH[i].length) + '.html'; - } - } - } - } - - // Convert .less to .css - if (path.extname(url) === '.less') { - url = url.slice(0, -5) + '.css'; - } - - // Assume index.html stands for the parent directory - if (path.basename(url) === 'index.html') { - url = path.dirname(url); - if (!endsWith(url, '/')) { - url += '/'; - } - } - - return url; -} - -// Simple Promise wrapper around fs.readFile -function readFile(filePath) { - return new Promise((resolve, reject) => { - fs.readFile(filePath, 'utf8', (err, content) => { - if (err) { - reject(err); - } else { - resolve(content); - } - }); - }); -} diff --git a/resources/build.js b/resources/build.js deleted file mode 100644 index c79c408499..0000000000 --- a/resources/build.js +++ /dev/null @@ -1,39 +0,0 @@ -/** - * Copyright (c) 2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the license found in the - * LICENSE file in the root directory of this source tree. - */ - -var path = require('path'); -var Site = require('./Site'); - -module.exports = build; - -process.on('unhandledRejection', (error, promise) => { - console.error('Unhandled Promise Rejection:'); - console.error(error && error.stack || error); - console.error(promise); -}); - -var pwd = process.env.PWD; -var sourceDir = process.env.npm_package_site_source || './'; -var buildDir = process.env.npm_package_site_build || './_build'; - -var SITE_ROOT = path.resolve(pwd, sourceDir); -var BUILD_ROOT = path.resolve(pwd, buildDir); - -async function build(filter) { - console.log('building...'); - var site = await Site.readSite(SITE_ROOT); - await Site.buildSite(BUILD_ROOT, site, filter); - console.log('built'); -} - -if (require.main === module) { - build().catch(error => { - console.error(error.stack || error) - process.exit(1); - }); -} diff --git a/resources/fileWalker.js b/resources/fileWalker.js deleted file mode 100644 index 5b18b4223b..0000000000 --- a/resources/fileWalker.js +++ /dev/null @@ -1,70 +0,0 @@ -/** - * Copyright (c) 2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the license found in the - * LICENSE file in the root directory of this source tree. - */ - -var fs = require('fs'); -var path = require('path'); - -module.exports = fileWalker; - -var IGNORE_RX = - /^(?:_|\.|(?:node_modules|package\.json|README\.(?:md|markdown))$)/; - -var INCLUDE_RX = /^(?:\.nojekyll|\.htaccess)/; - -function fileWalker(dirPath, onVisitFile) { - return new Promise((resolve, reject) => { - fs.readdir(dirPath, (error, files) => { - if (error) { - return reject(error); - } - - var absFiles = files - .filter(fileName => !IGNORE_RX.test(fileName) || INCLUDE_RX.test(fileName)) - .map(fileName => path.join(dirPath, fileName)); - - lstatAll(absFiles, (error, stats) => { - if (error) { - return reject(error); - } - var awaitWalkers = absFiles.reduce((promise, absFileName, index) => { - return promise.then(() => { - if (stats[index].isDirectory()) { - return fileWalker(absFileName, onVisitFile); - } else { - return onVisitFile(absFileName, stats[index]); - } - }); - }, Promise.resolve()); - - awaitWalkers.then(() => resolve(), reject); - }); - }); - }); -} - -function lstatAll(files, cb) { - var count = files.length; - var stats = []; - var success = true; - files.forEach((fileName, index) => { - if (success) { - fs.lstat(fileName, (error, stat) => { - if (success) { - if (error) { - success = false; - return cb(error); - } - stats[index] = stat; - if (--count === 0) { - cb(null, stats); - } - } - }); - } - }); -} diff --git a/resources/publish.sh b/resources/publish.sh deleted file mode 100755 index e6f6b1103a..0000000000 --- a/resources/publish.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/bash -e - -# Publishing to NPM is currently supported by Travis CI, which ensures that all -# tests pass first and the deployed module contains the correct file struture. -# In order to prevent inadvertently circumventing this, we ensure that a CI -# environment exists before continuing. -if [ "$CI" != true ]; then - echo "\n\n\n \033[101;30m Only Travis CI can publish to NPM. \033[0m\n\n\n" 1>&2; - exit 1; -fi; - - -# Ensure the website was built -if [ ! -f ./build/index.html ]; then - echo "\n\n\n \033[101;30m Something went wrong, the site does not exist. \033[0m\n\n\n" 1>&2; - exit 1; -fi - -# Commit the website and push it -cd build -git init -git config user.name "Travis CI" -git config user.email "travis@travis-ci.org" -git add . -git commit -a -m "Auto-deploy by Travis CI" -git push --force --quiet "https://$%7BGH_TOKEN%7D@github.com/xitu/graphql.github.io.git" master:master diff --git a/resources/renderReactPage.js b/resources/renderReactPage.js deleted file mode 100644 index dfafb375ae..0000000000 --- a/resources/renderReactPage.js +++ /dev/null @@ -1,48 +0,0 @@ -/** - * Copyright (c) 2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the license found in the - * LICENSE file in the root directory of this source tree. - */ - -var ReactDOM = require('react-dom/server') -var React = require('react'); - -module.exports = renderReactPage; - -/** - * Options: - * - * - component: A Component constructor class - * - props: The props to provide to the Component - * - */ -function renderReactPage(options) { - var component = options.component; - var props = options.props; - - var html = ReactDOM.renderToStaticMarkup( - React.createElement(component, props) - ); - - if (html.indexOf('', ''); - - return '' + html; - } - - // Assert correct return - if (html.indexOf('' - ); - } - - // Append DOCTYPE - html = '' + html; - - // Return rendered source - return html; -} diff --git a/resources/server.js b/resources/server.js deleted file mode 100644 index 62c3e957bc..0000000000 --- a/resources/server.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Copyright (c) 2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the license found in the - * LICENSE file in the root directory of this source tree. - */ - -var path = require('path'); -var express = require('express'); -var watch = require('./watch'); - -var pwd = process.env.PWD; -var buildDir = process.env.npm_package_site_build || './_build'; - -var FILE_SERVE_ROOT = path.resolve(pwd, buildDir); - -var app = express().use(express.static(FILE_SERVE_ROOT)) -app.listen(8444, () => { - watch().then(() => { - console.log('Open http://localhost:8444/'); - }).catch(error => console.error(error.stack || error)); -}); diff --git a/resources/util.js b/resources/util.js deleted file mode 100644 index f0f6183c10..0000000000 --- a/resources/util.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Copyright (c) 2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the license found in the - * LICENSE file in the root directory of this source tree. - */ - -export function endsWith(string, partial) { - return ( - partial.length <= string.length && - string.substr(string.length - partial.length) === partial - ); -} diff --git a/resources/watch.js b/resources/watch.js deleted file mode 100644 index a80d5ae96b..0000000000 --- a/resources/watch.js +++ /dev/null @@ -1,110 +0,0 @@ -/** - * Copyright (c) 2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the license found in the - * LICENSE file in the root directory of this source tree. - */ - -var fs = require('fs'); -var path = require('path'); -var sane = require('sane'); -var build = require('./build'); - -var pwd = process.env.PWD; -var sourceDir = process.env.npm_package_site_source || './'; -var buildDir = process.env.npm_package_site_build || path.join(sourceDir, '_build'); - -var SITE_ROOT = path.resolve(pwd, sourceDir); -var BUILD_ROOT = path.resolve(pwd, buildDir); - -var buildWithinSite = path.relative(SITE_ROOT, BUILD_ROOT); -if (buildWithinSite[0] === '.') { - buildWithinSite = null; -} else if (buildWithinSite.indexOf('/') !== -1) { - // Note: minimatch would not be able to safely ignore watching this directory - // if nested deeply within source. - throw new Error('Cannot watch safely. Build deeply within Source'); -} - -module.exports = watch; - -function watch() { - return build().then(() => { - var globIgnore = - 'node_modules' + (buildWithinSite ? '|' + buildWithinSite : ''); - var watcher = sane(SITE_ROOT, { - // Note: minimatch erroneously negates the entire pattern if the first - // character is a !. This prefix should cause it to not match. - // glob: ['?(%)!(' + globIgnore + ')/**/*', '?(%)!(' + globIgnore + ')'], - // handle node v0.10 bug - watchman: /^v0.10/.test(process.version) - }) - .on('ready', startWatch) - .on('add', changeFile) - .on('delete', deleteFile) - .on('change', changeFile); - }); -} - -function startWatch() { - console.log('watching...'); -} - -function changeFile(fileName) { - enqueue(fileName); -} - -function deleteFile(fileName) { - enqueue(fileName); -} - -const queue = []; - -function enqueue(fileName) { - queue.push(fileName); - if (queue.length === 1) { - rebuild(); - } else { - console.log('queue', fileName); - } -} - -function rebuild() { - const fileName = queue[0]; - const filter = - /_core\//.test(fileName) ? /\.(js|md)$/ : - /\.less$/.test(fileName) ? /\.less$/ : - fileName ? SITE_ROOT + '/' + fileName : - null; - clearCache(fileName); - return build(filter).then( - () => { - queue.shift(); - if (queue.length) { - return rebuild(); - } - }, - error => { - console.error(error.stack || error); - queue.shift(); - if (queue.length) { - return rebuild(); - } - } - ); -} - -function clearCache(causeFileName) { - if (path.extname(causeFileName) === '.js') { - for (var fileName in require.cache) { - if (fileName.indexOf('/node_modules/') === -1) { - delete require.cache[fileName]; - } - } - } -} - -if (require.main === module) { - watch().catch(error => console.error(error.stack || error)); -} diff --git a/resources/writer.js b/resources/writer.js deleted file mode 100644 index 19ac44454c..0000000000 --- a/resources/writer.js +++ /dev/null @@ -1,230 +0,0 @@ -/** - * Copyright (c) 2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the license found in the - * LICENSE file in the root directory of this source tree. - */ - -var vm = require('vm'); -var webpack = require('webpack'); -var React = require('react'); -var ReactDOM = require('react-dom/server') -var fs = require('fs'); -var yaml = require('js-yaml'); -var path = require('path'); -var less = require('less'); -var renderReactPage = require('./renderReactPage'); -import { endsWith } from './util'; - - -module.exports = writer; - -async function writer(buildDir, file, site) { - var writePath = getWritePath(buildDir, file); - console.log(' writing', file.relPath); - - // Render Less file - if (endsWith(file.absPath, '.less')) { - const input = await readFile(file.absPath); - const output = await less.render(input, { filename: file.absPath }); - return await writeFile(writePath, output.css); - } - - // Non-modified content - if (!file.content) { - await promiseDirExists(path.dirname(writePath)); - await promisePipeEnds( - fs.createReadStream(file.absPath).pipe(fs.createWriteStream(writePath)) - ); - return; - } - - var data; - - // Render JS file - if (endsWith(file.relPath, '.html.js') || endsWith(file.relPath, '.xml.js')) { - data = renderReactPage({ - component: require(path.resolve(file.absPath)), - props: { site, page: file } - }); - } else if (endsWith(file.relPath, '.md') || - endsWith(file.relPath, '.markdown')) { - var absLayoutPath = path.join(path.dirname(file.absPath), file.layout); - data = renderReactPage({ - component: require(path.resolve(absLayoutPath)), - props: { site, page: file } - }); - } else { - data = file.content; - } - - data = await writeScript(writePath, file, data); - - await writeFile(writePath, data); -} - -var SCRIPT_RX = /` + - `` + - `` - ) - ); - }); - }); - - }); - - }); -} - -function getWritePath(buildDir, file) { - var writePath = file.url; - if (endsWith(writePath, '/')) { - writePath = path.join(writePath, 'index.html'); - } - return path.join(buildDir, writePath.slice(1)); -} - -// Simple Promise wrapper around fs.writeFile -function readFile(filePath, fmt) { - return new Promise((resolve, reject) => - fs.readFile(filePath, fmt || 'utf8', (err, results) => - err ? reject(err) : resolve(results)) - ); -} - -// Ensures directory exists, then writes file -async function writeFile(filePath, data) { - await promiseDirExists(path.dirname(filePath)); - await _writeFile(filePath, data); -} - -// Simple Promise wrapper around fs.writeFile -function _writeFile(filePath, data) { - return new Promise((resolve, reject) => - fs.writeFile(filePath, data, err => err ? reject(err) : resolve()) - ); -} - -function promisePipeEnds(pipe) { - return new Promise((resolve, reject) => { - pipe.on('close', resolve).on('error', reject); - }); -} - -function promiseDirExists(dir) { - return new Promise((resolve, reject) => { - mkdirp(dir, err => err ? reject(err) : resolve()); - }); -} - -function mkdirp(p, cb) { - p = path.resolve(p); - fs.mkdir(p, 511 ^ process.umask(), error => { - if (error && error.code === 'EEXIST') { - return cb(); - } else if (error && error.code === 'ENOENT') { - mkdirp(path.dirname(p), error2 => { - return error2 ? cb(error2) : mkdirp(p, cb); - }); - } else { - cb(error); - } - }); -} diff --git a/scripts/sort-libraries.js b/scripts/sort-libraries.js new file mode 100644 index 0000000000..a0fd747b63 --- /dev/null +++ b/scripts/sort-libraries.js @@ -0,0 +1,209 @@ +const fetch = require(`node-fetch`); +const numbro = require("numbro"); +const timeago = require('timeago.js'); + +const getGitHubStats = async githubRepo => { + const [owner, repoName] = githubRepo.split("/") + const accessToken = process.env.GITHUB_ACCESS_TOKEN + if (!accessToken) { + return {}; + } + const query = /* GraphQL */ ` + fragment defaultBranchRefFragment on Ref { + target { + ... on Commit { + history(since: $since) { + edges { + node { + author { + name + } + pushedDate + } + } + } + } + } + } + query($owner: String!, $repoName: String!, $since: GitTimestamp!) { + repositoryOwner(login: $owner) { + repository(name: $repoName) { + defaultBranchRef { + ...defaultBranchRefFragment + } + stargazers { + totalCount + } + updatedAt + forkCount + pullRequests { + totalCount + } + description + licenseInfo { + name + } + releases(last: 1) { + nodes { + publishedAt + } + } + tags: refs(refPrefix: "refs/tags/", first: 1, orderBy: {field: TAG_COMMIT_DATE, direction: DESC}) { + nodes { + name + target { + ... on Tag { + target { + ... on Commit { + pushedDate + } + } + } + } + } + } + } + } + } + ` + const lastMonth = new Date() + lastMonth.setMonth(lastMonth.getMonth() - 3) + const response = await fetch("http://github.com/service/https://api.github.com/graphql", { + method: "POST", + body: JSON.stringify({ + query, + variables: { owner, repoName, since: lastMonth }, + }), + headers: { + Authorization: `Bearer ${accessToken}`, + "Content-Type": "application/json", + }, + }) + const responseJson = await response.json() + if (responseJson && responseJson.errors) { + throw JSON.stringify(responseJson.errors); + } + if (!responseJson || !responseJson.data) { + throw `GitHub returned empty response for ${owner}/${repoName}` + } + const { repositoryOwner } = responseJson.data + if (!repositoryOwner) { + throw `No GitHub user found for ${owner}/${repoName}` + } + const { repository: repo } = repositoryOwner + if (!repo) { + throw `No GitHub repo found ${owner}/${repoName}` + } + const stars = repo.stargazers.totalCount + const commitHistory = repo.defaultBranchRef.target.history.edges + + let hasCommitsInLast3Months = false; + commitHistory.forEach(commit => { + if (!commit.node.author.name.match(/bot/i)) { + hasCommitsInLast3Months = true; + } + }) + const formattedStars = numbro(stars).format({ + average: true, + }); + + const releases = []; + if (repo.tags && repo.tags.nodes && repo.tags.nodes.length && repo.tags.nodes[0].target.target && repo.tags.nodes[0].target.target.pushedDate) { + releases.push(repo.tags.nodes[0].target.target.pushedDate); + } + if (repo.releases && repo.releases.nodes && repo.releases.nodes.length) { + releases.push(repo.releases.nodes[0].publishedAt) + } + if(owner.includes("graphql")) { + console.log({ releases, repoName }) + } + + const lastRelease = releases.filter(Boolean).sort().reverse()[0] + + return { + hasCommitsInLast3Months, + stars, + formattedStars, + license: repo.licenseInfo && repo.licenseInfo.name, + lastRelease, + formattedLastRelease: lastRelease && timeago.format(lastRelease), + } +} + +const getNpmStats = async packageName => { + const response = await fetch( + `https://api.npmjs.org/downloads/point/last-week/${encodeURIComponent( + packageName + )}` + ) + const responseJson = await response.json() + const downloadCount = responseJson.downloads + return { downloadCount } +} + +const getGemStats = async packageName => { + const response = await fetch( + `https://rubygems.org/api/v1/gems/${encodeURIComponent(packageName)}.json` + ) + const responseJson = await response.json() + const downloadCount = responseJson.downloads + return { downloadCount } +} + +const sortLibs = async libs => { + let totalStars = 0; + const libsWithScores = await Promise.all( + libs.map(async lib => { + const [ + npmStats = {}, + gemStars = {}, + githubStats = {}, + ] = await Promise.all([ + lib.npm && getNpmStats(lib.npm), + lib.gem && getGemStats(lib.gem), + lib.github && getGitHubStats(lib.github), + ]) + const result = { + ...lib, + ...npmStats, + ...gemStars, + ...githubStats, + } + totalStars += result.stars || 0; + return result; + }) + ) + const sortedLibs = libsWithScores.sort((a, b) => { + let aScore = 0, + bScore = 0 + if ("downloadCount" in a && 'downloadCount' in b) { + if (a.downloadCount > b.downloadCount) { + aScore += 40 + } else if (b.downloadCount > a.downloadCount) { + bScore += 40 + } + } + if ("hasCommitsInLast3Months" in a && a.hasCommitsInLast3Months) { + aScore += 30 + } + if ("hasCommitsInLast3Months" in b && b.hasCommitsInLast3Months) { + bScore += 30 + } + if ('stars' in a && 'stars' in b) { + if (a.stars > b.stars) { + aScore += 40 + } else if (a.stars < b.stars) { + bScore += 40 + } + } + if (bScore > aScore) { + return 1 + } else if (bScore < aScore) { + return -1 + } + return 0 + }) + return { sortedLibs, totalStars } +} + +module.exports = sortLibs diff --git a/site/.nojekyll b/site/.nojekyll deleted file mode 100644 index bc7f8f7417..0000000000 --- a/site/.nojekyll +++ /dev/null @@ -1 +0,0 @@ -TODO: get this out of the source diff --git a/site/_core/BlogLayout.js b/site/_core/BlogLayout.js deleted file mode 100644 index 3f8d639d55..0000000000 --- a/site/_core/BlogLayout.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * Copyright (c) 2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the license found in the - * LICENSE file in the root directory of this source tree. - */ - -var React = require('react'); -var Site = require('./Site'); -var BlogSidebar = require('./BlogSidebar'); -var BlogPost = require('./BlogPost'); - -module.exports = ({ page, site }) => - -
-
- - -
-
-
diff --git a/site/_core/BlogPost.js b/site/_core/BlogPost.js deleted file mode 100644 index 2b8bf65df4..0000000000 --- a/site/_core/BlogPost.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * Copyright (c) 2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the license found in the - * LICENSE file in the root directory of this source tree. - */ - -var React = require('react'); -var Marked = require('./Marked'); - -module.exports = ({ post, isPermalink }) => -
-

{isPermalink ? post.title : {post.title}}

-

{new Date(post.date).toLocaleDateString()} by {post.byline}

- {post.guestBio ? null :
} - {post.guestBio &&

{ - `This guest article contributed by ${post.byline}, ${post.guestBio}.` - }

} - {post.content} -
diff --git a/site/_core/BlogSidebar.js b/site/_core/BlogSidebar.js deleted file mode 100644 index 53f96d09f8..0000000000 --- a/site/_core/BlogSidebar.js +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Copyright (c) 2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the license found in the - * LICENSE file in the root directory of this source tree. - */ - -var path = require('path'); -var React = require('react'); - -module.exports = ({ site, page }) => -
-
-

Subscribe

- RSS -
-
-

Recent Posts

-
    - {site.files.blog - .filter(file => !file.draft && path.extname(file.relPath) === '.md') - .sort((a, b) => a.date < b.date) - .map(post => -
  • - {post === page ? post.title : {post.title}} -
  • - )} -
-
-
diff --git a/site/_core/DocsLayout.js b/site/_core/DocsLayout.js deleted file mode 100644 index 0e9e86d0de..0000000000 --- a/site/_core/DocsLayout.js +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Copyright (c) 2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the license found in the - * LICENSE file in the root directory of this source tree. - */ - -var path = require('path'); -var React = require('react'); -var Site = require('./Site'); -var Marked = require('./Marked'); -var DocsSidebar = require('./DocsSidebar'); - -export default ({ page, site }) => - -
-
-
-

{page.title}

- {page.content} - {page.next && - - ็ปง็ปญ้˜…่ฏป → - {page.nextPage.title} - } -
- -
-
-
diff --git a/site/_core/DocsSidebar.js b/site/_core/DocsSidebar.js deleted file mode 100644 index 6acff72ce6..0000000000 --- a/site/_core/DocsSidebar.js +++ /dev/null @@ -1,126 +0,0 @@ -/** - * Copyright (c) 2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the license found in the - * LICENSE file in the root directory of this source tree. - */ - -var React = require('react'); -import { toSlug } from './Header'; - -export default ({ site, page, firstURL }) => -
- {getCategories(site, page.dir, firstURL).map(category => - - )} -
- -// pageID is the id of the rendering page -// category is the category object to render a sidebar for -function SidebarForCategory({ pageID, category }) { - const listItems = category.links.map(page => { - const shouldOpenInNewWindow = page.url.slice(0, 4) === 'http'; - const target = shouldOpenInNewWindow ? '_blank' : null; - const rel = shouldOpenInNewWindow ? 'noopener noreferrer' : null; - - // Link for the main page overall - return ( -
  • - - {page.sidebarTitle || page.title} - - {page.sublinks && // Sublinks to any page sub-parts - - } -
  • - ); - }); - - return ( -
    -

    {category.name}

    -
      {listItems}
    -
    - ); -} - -// If firstURL is provided, it's the URL (starting with /) of the -// first page to put on the sidebar. -function getCategories(site, dir, firstURL) { - if (!site.files[dir]) { - throw new Error('Cannot build sidebar for ' + dir); - } - var pages = site.files[dir].filter(file => file.content); - - // Build a hashmap of url -> page - var articles = {} - for (var i = 0; i < pages.length; ++i) { - var page = pages[i]; - articles[page.url] = page; - } - - // Build a hashmap of url -> previous_url - var previous = {}; - for (var i = 0; i < pages.length; ++i) { - var page = pages[i]; - if (page.next) { - if (!articles[page.next]) { - throw new Error( - '`next: ' + page.next + '` in ' + page.url + ' doesn\'t exist' - ); - } - previous[articles[page.next].url] = page.url; - } - } - - // Find the first element which doesn't have any previous - var first = null; - for (var i = 0; i < pages.length; ++i) { - var page = pages[i]; - if (firstURL === page.url || !previous[page.url]) { - first = page; - break; - } - } - if (!first) { - throw new Error('first not found'); - } - - var categories = []; - var currentCategory = null; - - var page = first; - var i = 0; - while (page && i++ < 1000) { - if (!currentCategory || page.category !== currentCategory.name) { - currentCategory && categories.push(currentCategory); - currentCategory = { - name: page.category, - links: [] - } - } - currentCategory.links.push(page); - page = articles[page.next]; - } - categories.push(currentCategory); - - return categories; -} diff --git a/site/_core/GraphQLJSLayout.js b/site/_core/GraphQLJSLayout.js deleted file mode 100644 index ed4cfcc914..0000000000 --- a/site/_core/GraphQLJSLayout.js +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Copyright (c) 2016, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the license found in the - * LICENSE file in the root directory of this source tree. - */ - -var path = require('path'); -var React = require('react'); -var Site = require('./Site'); -var Marked = require('./Marked'); -var DocsSidebar = require('./DocsSidebar'); - -export default ({ page, site }) => - -
    -
    -
    -

    {page.title}

    - {page.content} - {page.next && - - ็ปง็ปญ้˜…่ฏป → - {page.nextPage.title} - } -
    - -
    -
    -
    diff --git a/site/_core/Header.js b/site/_core/Header.js deleted file mode 100644 index 62115bf758..0000000000 --- a/site/_core/Header.js +++ /dev/null @@ -1,74 +0,0 @@ -/** - * Copyright (c) 2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the license found in the - * LICENSE file in the root directory of this source tree. - */ - -var React = require('react'); - -export function toSlug(string) { - // var accents = "ร รกรครขรจรฉรซรชรฌรญรฏรฎรฒรณรถรดรนรบรผรปรฑรง"; - var accents = "\u00e0\u00e1\u00e4\u00e2\u00e8" + - "\u00e9\u00eb\u00ea\u00ec\u00ed\u00ef" + - "\u00ee\u00f2\u00f3\u00f6\u00f4\u00f9" + - "\u00fa\u00fc\u00fb\u00f1\u00e7"; - - var without = "aaaaeeeeiiiioooouuuunc"; - - string = String(string) - - if (string.indexOf('๏ผˆ') === -1) { - return string - - // Handle uppercase characters - .toLowerCase() - - // Dash blank characters - .replace(/\s+/g, '-') - - // Trim dashes - .replace(/^-|-$/g, ''); - } - - return string - - // Handle uppercase characters - .toLowerCase() - - // Handle accentuated characters - .replace( - new RegExp('[' + accents + ']', 'g'), - function (c) { return without.charAt(accents.indexOf(c)); }) - - // Dash special characters - .replace(/[^a-z0-9]/g, '-') - - // Compress multiple dash - .replace(/-+/g, '-') - - // Trim dashes - .replace(/^-|-$/g, ''); -} - -export default (props) => { - var usedSlugs = props.usedSlugs || {}; - var append = ''; - var loopCount = 0; - do { - var slug = toSlug((props.toSlug || props.children) + append); - append = '-' + (++loopCount); - } while (usedSlugs[slug]); - usedSlugs[slug] = slug; - var Heading = 'h' + props.level; - var url = props.url || ''; - - return ( - - - {props.children} - {' '}# - - ); -} diff --git a/site/_core/HeaderLinks.js b/site/_core/HeaderLinks.js deleted file mode 100644 index edccfe6d24..0000000000 --- a/site/_core/HeaderLinks.js +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Copyright (c) 2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the license found in the - * LICENSE file in the root directory of this source tree. - */ - -var React = require('react'); - -const links = [ - { section: 'learn', text: 'ๅญฆไน ', href: '/learn/' }, - { section: 'code', text: 'ไปฃ็ ', href: '/code/' }, - { section: 'community', text: '็คพๅŒบ', href: '/community/' }, - { section: 'blog', text: 'ๅšๅฎข', href: '/blog/' }, - { section: 'spec', text: '่ง„่Œƒ', href: 'http://spec.graphql.cn/' }, -]; - -export default ({ section }) => - diff --git a/site/_core/Marked.js b/site/_core/Marked.js deleted file mode 100644 index c94ac23c52..0000000000 --- a/site/_core/Marked.js +++ /dev/null @@ -1,1122 +0,0 @@ -/** - * marked - a markdown parser - * Copyright (c) 2011-2013, Christopher Jeffrey. (MIT Licensed) - * https://github.com/chjj/marked -*/ - -var React = require('react'); -var Prism = require('./Prism'); -import Header from './Header'; - -export default function Marked(props) { - return
    {marked(props.children, props)}
    ; -} - -/** - * Block-Level Grammar - */ - -var block = { - newline: /^\n+/, - code: /^( {4}[^\n]+\n*)+/, - fences: noop, - hr: /^( *[-*_]){3,} *(?:\n+|$)/, - heading: /^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/, - nptable: noop, - lheading: /^([^\n]+)\n *(=|-){3,} *\n*/, - blockquote: /^( *>[^\n]+(\n[^\n]+)*\n*)+/, - list: /^( *)(bull) [\s\S]+?(?:hr|\n{2,}(?! )(?!\1bull )\n*|\s*$)/, - html: /^ *(?:comment|closed|closing) *(?:\n{2,}|\s*$)/, - def: /^ *\[([^\]]+)\]: *]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)/, - table: noop, - paragraph: /^((?:[^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+)\n*/, - text: /^[^\n]+/ -}; - -block.bullet = /(?:[*+-]|\d+\.)/; -block.item = /^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/; -block.item = replace(block.item, 'gm') - (/bull/g, block.bullet) - (); - -block.list = replace(block.list) - (/bull/g, block.bullet) - ('hr', /\n+(?=(?: *[-*_]){3,} *(?:\n+|$))/) - (); - -block._tag = '(?!(?:' - + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code' - + '|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo' - + '|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|@)\\b'; - -block.html = replace(block.html) - ('comment', //) - ('closed', /<(tag)[\s\S]+?<\/\1>/) - ('closing', /])*?>/) - (/tag/g, block._tag) - (); - -block.paragraph = replace(block.paragraph) - ('hr', block.hr) - ('heading', block.heading) - ('lheading', block.lheading) - ('blockquote', block.blockquote) - ('tag', '<' + block._tag) - ('def', block.def) - (); - -/** - * Normal Block Grammar - */ - -block.normal = merge({}, block); - -/** - * GFM Block Grammar - */ - -block.gfm = merge({}, block.normal, { -//fences: /^ *(`{3,}|~{3,}) *(\S+)? *\n([\s\S]+?)\s*\1 *(?:\n+|$)/, - fences: /^ *(`{3,}|~{3,}) *([^\s{]+)?(?: *\{ *((?:\d+(?: *- *\d+)?(?: *, *\d+(?: *- *\d+)?)*) *)?\})? *\n([\s\S]+?)\s*\1 *(?:\n+|$)/, - paragraph: /^/ -}); - -block.gfm.paragraph = replace(block.paragraph) - ('(?!', '(?!' + block.gfm.fences.source.replace('\\1', '\\2') + '|') - (); - -/** - * GFM + Tables Block Grammar - */ - -block.tables = merge({}, block.gfm, { - nptable: /^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/, - table: /^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/ -}); - -/** - * Block Lexer - */ - -function Lexer(options) { - this.tokens = []; - this.tokens.links = {}; - this.options = options || marked.defaults; - this.rules = block.normal; - - if (this.options.gfm) { - if (this.options.tables) { - this.rules = block.tables; - } else { - this.rules = block.gfm; - } - } -} - -/** - * Expose Block Rules - */ - -Lexer.rules = block; - -/** - * Static Lex Method - */ - -Lexer.lex = function(src, options) { - var lexer = new Lexer(options); - return lexer.lex(src); -}; - -/** - * Preprocessing - */ - -Lexer.prototype.lex = function(src) { - src = src - .replace(/\r\n|\r/g, '\n') - .replace(/\t/g, ' ') - .replace(/\u00a0/g, ' ') - .replace(/\u2424/g, '\n'); - - return this.token(src, true); -}; - -/** - * Lexing - */ - -Lexer.prototype.token = function(src, top) { - var src = src.replace(/^ +$/gm, '') - , next - , loose - , cap - , bull - , b - , item - , space - , i - , l; - - while (src) { - // newline - if (cap = this.rules.newline.exec(src)) { - src = src.substring(cap[0].length); - if (cap[0].length > 1) { - this.tokens.push({ - type: 'space' - }); - } - } - - // code - if (cap = this.rules.code.exec(src)) { - src = src.substring(cap[0].length); - cap = cap[0].replace(/^ {4}/gm, ''); - this.tokens.push({ - type: 'code', - text: !this.options.pedantic - ? cap.replace(/\n+$/, '') - : cap - }); - continue; - } - - // fences (gfm) - if (cap = this.rules.fences.exec(src)) { - src = src.substring(cap[0].length); - this.tokens.push({ - type: 'code', - lang: cap[2], - line: cap[3], - text: cap[4] - }); - continue; - } - - // heading - if (cap = this.rules.heading.exec(src)) { - src = src.substring(cap[0].length); - this.tokens.push({ - type: 'heading', - depth: cap[1].length, - text: cap[2] - }); - continue; - } - - // table no leading pipe (gfm) - if (top && (cap = this.rules.nptable.exec(src))) { - src = src.substring(cap[0].length); - - item = { - type: 'table', - header: cap[1].replace(/^ *| *\| *$/g, '').split(/ *\| */), - align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */), - cells: cap[3].replace(/\n$/, '').split('\n') - }; - - for (i = 0; i < item.align.length; i++) { - if (/^ *-+: *$/.test(item.align[i])) { - item.align[i] = 'right'; - } else if (/^ *:-+: *$/.test(item.align[i])) { - item.align[i] = 'center'; - } else if (/^ *:-+ *$/.test(item.align[i])) { - item.align[i] = 'left'; - } else { - item.align[i] = null; - } - } - - for (i = 0; i < item.cells.length; i++) { - item.cells[i] = item.cells[i].split(/ *\| */); - } - - this.tokens.push(item); - - continue; - } - - // lheading - if (cap = this.rules.lheading.exec(src)) { - src = src.substring(cap[0].length); - this.tokens.push({ - type: 'heading', - depth: cap[2] === '=' ? 1 : 2, - text: cap[1] - }); - continue; - } - - // hr - if (cap = this.rules.hr.exec(src)) { - src = src.substring(cap[0].length); - this.tokens.push({ - type: 'hr' - }); - continue; - } - - // blockquote - if (cap = this.rules.blockquote.exec(src)) { - src = src.substring(cap[0].length); - - this.tokens.push({ - type: 'blockquote_start' - }); - - cap = cap[0].replace(/^ *> ?/gm, ''); - - // Pass `top` to keep the current - // "toplevel" state. This is exactly - // how markdown.pl works. - this.token(cap, top); - - this.tokens.push({ - type: 'blockquote_end' - }); - - continue; - } - - // list - if (cap = this.rules.list.exec(src)) { - src = src.substring(cap[0].length); - bull = cap[2]; - - this.tokens.push({ - type: 'list_start', - ordered: bull.length > 1 - }); - - // Get each top-level item. - cap = cap[0].match(this.rules.item); - - next = false; - l = cap.length; - i = 0; - - for (; i < l; i++) { - item = cap[i]; - - // Remove the list item's bullet - // so it is seen as the next token. - space = item.length; - item = item.replace(/^ *([*+-]|\d+\.) +/, ''); - - // Outdent whatever the - // list item contains. Hacky. - if (~item.indexOf('\n ')) { - space -= item.length; - item = !this.options.pedantic - ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '') - : item.replace(/^ {1,4}/gm, ''); - } - - // Determine whether the next list item belongs here. - // Backpedal if it does not belong in this list. - if (this.options.smartLists && i !== l - 1) { - b = block.bullet.exec(cap[i+1])[0]; - if (bull !== b && !(bull.length > 1 && b.length > 1)) { - src = cap.slice(i + 1).join('\n') + src; - i = l - 1; - } - } - - // Determine whether item is loose or not. - // Use: /(^|\n)(?! )[^\n]+\n\n(?!\s*$)/ - // for discount behavior. - loose = next || /\n\n(?!\s*$)/.test(item); - if (i !== l - 1) { - next = item[item.length-1] === '\n'; - if (!loose) loose = next; - } - - this.tokens.push({ - type: loose - ? 'loose_item_start' - : 'list_item_start' - }); - - // Recurse. - this.token(item, false); - - this.tokens.push({ - type: 'list_item_end' - }); - } - - this.tokens.push({ - type: 'list_end' - }); - - continue; - } - - // html - if (cap = this.rules.html.exec(src)) { - src = src.substring(cap[0].length); - this.tokens.push({ - type: this.options.sanitize - ? 'paragraph' - : 'html', - pre: cap[1] === 'pre' || cap[1] === 'script', - text: cap[0] - }); - continue; - } - - // def - if (top && (cap = this.rules.def.exec(src))) { - src = src.substring(cap[0].length); - this.tokens.links[cap[1].toLowerCase()] = { - href: cap[2], - title: cap[3] - }; - continue; - } - - // table (gfm) - if (top && (cap = this.rules.table.exec(src))) { - src = src.substring(cap[0].length); - - item = { - type: 'table', - header: cap[1].replace(/^ *| *\| *$/g, '').split(/ *\| */), - align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */), - cells: cap[3].replace(/(?: *\| *)?\n$/, '').split('\n') - }; - - for (i = 0; i < item.align.length; i++) { - if (/^ *-+: *$/.test(item.align[i])) { - item.align[i] = 'right'; - } else if (/^ *:-+: *$/.test(item.align[i])) { - item.align[i] = 'center'; - } else if (/^ *:-+ *$/.test(item.align[i])) { - item.align[i] = 'left'; - } else { - item.align[i] = null; - } - } - - for (i = 0; i < item.cells.length; i++) { - item.cells[i] = item.cells[i] - .replace(/^ *\| *| *\| *$/g, '') - .split(/ *\| */); - } - - this.tokens.push(item); - - continue; - } - - // top-level paragraph - if (top && (cap = this.rules.paragraph.exec(src))) { - src = src.substring(cap[0].length); - this.tokens.push({ - type: 'paragraph', - text: cap[1][cap[1].length-1] === '\n' - ? cap[1].slice(0, -1) - : cap[1] - }); - continue; - } - - // text - if (cap = this.rules.text.exec(src)) { - // Top-level should never reach here. - src = src.substring(cap[0].length); - this.tokens.push({ - type: 'text', - text: cap[0] - }); - continue; - } - - if (src) { - throw new - Error('Infinite loop on byte: ' + src.charCodeAt(0)); - } - } - - return this.tokens; -}; - -/** - * Inline-Level Grammar - */ - -var inline = { - escape: /^\\([\\`*{}\[\]()#+\-.!_>])/, - autolink: /^<([^ >]+(@|:\/)[^ >]+)>/, - url: noop, - sup: /^([\s\S]+?)<\/sup>/, - tag: /^|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/, - link: /^!?\[(inside)\]\(href\)/, - reflink: /^!?\[(inside)\]\s*\[([^\]]*)\]/, - nolink: /^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/, - strong: /^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/, - em: /^\b_((?:__|[\s\S])+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/, - code: /^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/, - br: /^ {2,}\n(?!\s*$)/, - del: noop, - text: /^[\s\S]+?(?=[\\?(?:\s+['"]([\s\S]*?)['"])?\s*/; - -inline.link = replace(inline.link) - ('inside', inline._inside) - ('href', inline._href) - (); - -inline.reflink = replace(inline.reflink) - ('inside', inline._inside) - (); - -/** - * Normal Inline Grammar - */ - -inline.normal = merge({}, inline); - -/** - * Pedantic Inline Grammar - */ - -inline.pedantic = merge({}, inline.normal, { - strong: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/, - em: /^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/ -}); - -/** - * GFM Inline Grammar - */ - -inline.gfm = merge({}, inline.normal, { - escape: replace(inline.escape)('])', '~|])')(), - url: /^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/, - del: /^~~(?=\S)([\s\S]*?\S)~~/, - text: replace(inline.text) - (']|', '~]|') - ('|', '|https?://|') - () -}); - -/** - * GFM + Line Breaks Inline Grammar - */ - -inline.breaks = merge({}, inline.gfm, { - br: replace(inline.br)('{2,}', '*')(), - text: replace(inline.gfm.text)('{2,}', '*')() -}); - -/** - * Inline Lexer & Compiler - */ - -function InlineLexer(links, options) { - this.options = options || marked.defaults; - this.links = links; - this.rules = inline.normal; - - if (!this.links) { - throw new - Error('Tokens array requires a `links` property.'); - } - - if (this.options.gfm) { - if (this.options.breaks) { - this.rules = inline.breaks; - } else { - this.rules = inline.gfm; - } - } else if (this.options.pedantic) { - this.rules = inline.pedantic; - } -} - -/** - * Expose Inline Rules - */ - -InlineLexer.rules = inline; - -/** - * Static Lexing/Compiling Method - */ - -InlineLexer.output = function(src, links, options) { - var inline = new InlineLexer(links, options); - return inline.output(src); -}; - -/** - * Lexing/Compiling - */ - -InlineLexer.prototype.output = function(src) { - var out = [] - , link - , text - , href - , cap; - - while (src) { - // escape - if (cap = this.rules.escape.exec(src)) { - src = src.substring(cap[0].length); - out.push(cap[1]); - continue; - } - - // autolink - if (cap = this.rules.autolink.exec(src)) { - src = src.substring(cap[0].length); - if (cap[2] === '@') { - text = cap[1][6] === ':' - ? cap[1].substring(7) - : cap[1]; - href = 'mailto:' + text; - } else { - text = cap[1]; - href = text; - } - out.push(React.DOM.a({href: this.sanitizeUrl(href)}, text)); - continue; - } - - // url (gfm) - if (cap = this.rules.url.exec(src)) { - src = src.substring(cap[0].length); - text = cap[1]; - href = text; - out.push(React.DOM.a({href: this.sanitizeUrl(href)}, text)); - continue; - } - - // sup - if (cap = this.rules.sup.exec(src)) { - src = src.substring(cap[0].length); - out.push(React.DOM.sup(null, this.output(cap[2] || cap[1]))); - continue; - } - - // tag - if (cap = this.rules.tag.exec(src)) { - src = src.substring(cap[0].length); - // TODO(alpert): Don't escape if sanitize is false - out.push(cap[0]); - continue; - } - - // link - if (cap = this.rules.link.exec(src)) { - src = src.substring(cap[0].length); - out.push(this.outputLink(cap, { - href: cap[2], - title: cap[3] - })); - continue; - } - - // reflink, nolink - if ((cap = this.rules.reflink.exec(src)) - || (cap = this.rules.nolink.exec(src))) { - src = src.substring(cap[0].length); - link = (cap[2] || cap[1]).replace(/\s+/g, ' '); - link = this.links[link.toLowerCase()]; - if (!link || !link.href) { - out.push.apply(out, this.output(cap[0][0])); - src = cap[0].substring(1) + src; - continue; - } - out.push(this.outputLink(cap, link)); - continue; - } - - // strong - if (cap = this.rules.strong.exec(src)) { - src = src.substring(cap[0].length); - out.push(React.DOM.strong(null, this.output(cap[2] || cap[1]))); - continue; - } - - // em - if (cap = this.rules.em.exec(src)) { - src = src.substring(cap[0].length); - out.push(React.DOM.em(null, this.output(cap[2] || cap[1]))); - continue; - } - - // code - if (cap = this.rules.code.exec(src)) { - src = src.substring(cap[0].length); - out.push(React.DOM.code(null, cap[2])); - continue; - } - - // br - if (cap = this.rules.br.exec(src)) { - src = src.substring(cap[0].length); - out.push(React.DOM.br(null, null)); - continue; - } - - // del (gfm) - if (cap = this.rules.del.exec(src)) { - src = src.substring(cap[0].length); - out.push(React.DOM.del(null, this.output(cap[1]))); - continue; - } - - // text - if (cap = this.rules.text.exec(src)) { - src = src.substring(cap[0].length); - out.push(this.smartypants(cap[0])); - continue; - } - - if (src) { - throw new - Error('Infinite loop on byte: ' + src.charCodeAt(0)); - } - } - - return out; -}; - -/** - * Sanitize a URL for a link or image - */ - -InlineLexer.prototype.sanitizeUrl = function(url) { - if (this.options.sanitize) { - try { - var prot = decodeURIComponent(url) - .replace(/[^A-Za-z0-9:]/g, '') - .toLowerCase(); - if (prot.indexOf('javascript:') === 0) { - return '#'; - } - } catch (e) { - return '#'; - } - } - return url; -}; - -/** - * Compile Link - */ - -InlineLexer.prototype.outputLink = function(cap, link) { - if (cap[0][0] !== '!') { - var shouldOpenInNewWindow = - link.href.charAt(0) !== '/' - && link.href.charAt(0) !== '#'; - - return React.DOM.a({ - href: this.sanitizeUrl(link.href), - title: link.title, - target: shouldOpenInNewWindow ? '_blank' : null, - rel: shouldOpenInNewWindow ? 'nofollow noopener noreferrer' : null - }, this.output(cap[1])); - } else { - return React.DOM.img({ - src: this.sanitizeUrl(link.href), - alt: cap[1], - title: link.title - }, null); - } -}; - -/** - * Smartypants Transformations - */ - -InlineLexer.prototype.smartypants = function(text) { - if (!this.options.smartypants) return text; - return text - .replace(/--/g, '\u2014') - .replace(/'([^']*)'/g, '\u2018$1\u2019') - .replace(/"([^"]*)"/g, '\u201C$1\u201D') - .replace(/\.{3}/g, '\u2026'); -}; - -/** - * Parsing & Compiling - */ - -function Parser(options) { - this.tokens = []; - this.token = null; - this.options = options || marked.defaults; - this.usedSlugs = {}; -} - -/** - * Static Parse Method - */ - -Parser.parse = function(src, options) { - var parser = new Parser(options); - return parser.parse(src); -}; - -/** - * Parse Loop - */ - -Parser.prototype.parse = function(src) { - this.inline = new InlineLexer(src.links, this.options); - this.tokens = src.reverse(); - - var out = []; - while (this.next()) { - out.push(this.tok()); - } - - return out; -}; - -/** - * Next Token - */ - -Parser.prototype.next = function() { - return this.token = this.tokens.pop(); -}; - -/** - * Preview Next Token - */ - -Parser.prototype.peek = function() { - return this.tokens[this.tokens.length-1] || 0; -}; - -/** - * Parse Text Tokens - */ - -Parser.prototype.parseText = function() { - var body = this.token.text; - - while (this.peek().type === 'text') { - body += '\n' + this.next().text; - } - - return this.inline.output(body); -}; - -/** - * Parse Current Token - */ - -Parser.prototype.tok = function() { - switch (this.token.type) { - case 'space': { - return []; - } - case 'hr': { - return React.DOM.hr(null, null); - } - case 'heading': { - return ( -
    - {this.inline.output(this.token.text)} -
    - ); - } - case 'code': { - if (this.token.lang === 'graphql') { - var lines = this.token.text.split('\n'); - var firstLine = lines.shift().match(/^\s*#\s*({.*})$/); - if (firstLine) { - var metaData; - try { - metaData = JSON.parse(firstLine[1]); - } catch (e) { - console.error('Invalid Metadata JSON:', firstLine[1]); - } - if (metaData) { - var query = lines.join('\n'); - var variables = metaData.variables ? JSON.stringify(metaData.variables, null, 2) : ''; - return - - Facebook Inc. The contents of this page are licensed BSD-3-Clause. - - - - - - When we built Facebook's mobile applications, we needed a data-fetching API powerful enough to describe all of Facebook, yet simple and easy to learn so product developers can focus on building things quickly. We developed GraphQL three years ago to fill this need. Today it powers hundreds of billions of API calls a day. This year we've begun the process of open-sourcing GraphQL by drafting a specification, releasing a reference implementation, and forming a community around it here at [graphql.org](http://graphql.org/). ## Why GraphQL? @@ -135,9 +23,8 @@ There was also a considerable amount of code to write on both the server to prep A GraphQL query is a string that is sent to a server to be interpreted and fulfilled, which then returns JSON back to the client. - +``` **Defines a data shape:** The first thing you'll notice is that GraphQL queries mirror their response. This makes it easy to predict the shape of the data returned from a query, as well as to write a query if you know the data your app needs. More important, this makes GraphQL really easy to learn and use. GraphQL is unapologetically driven by the data requirements of products and of the designers and developers who build them. @@ -170,9 +56,8 @@ A GraphQL query is a string that is sent to a server to be interpreted and fulfi **Introspective:** A GraphQL server can be queried for the types it supports. This creates a powerful platform for tools and client software to build atop this information like code generation in statically typed languages, our application framework, Relay, or IDEs like GraphiQL (pictured below). GraphiQL helps developers learn and explore an API quickly without grepping the codebase or wrangling with cURL. - +``` **Version free:** The shape of the returned data is determined entirely by the client's query, so servers become simpler and easy to generalize. When you're adding new product features, additional fields can be added to the server, leaving existing clients unaffected. When you're sunsetting older features, the corresponding server fields can be deprecated but continue to function. This gradual, backward-compatible process removes the need for an incrementing version number. We still support three years of released Facebook applications on a single version of our GraphQL API. diff --git a/site/blog/20151016-subscriptions.md b/src/content/blog/2015-10-16-subscriptions.md similarity index 99% rename from site/blog/20151016-subscriptions.md rename to src/content/blog/2015-10-16-subscriptions.md index 919a85fc89..271cb31dad 100644 --- a/site/blog/20151016-subscriptions.md +++ b/src/content/blog/2015-10-16-subscriptions.md @@ -1,7 +1,8 @@ --- title: "Subscriptions in GraphQL and Relay" -layout: ../_core/BlogLayout +layout: blog permalink: /blog/subscriptions-in-graphql-and-relay/ +tags: ["blog", "spec"] date: 16 Oct 2015 byline: Dan Schafer and Laney Kuenzel --- diff --git a/site/blog/20160419-mocking.md b/src/content/blog/2016-04-19-mocking.md similarity index 72% rename from site/blog/20160419-mocking.md rename to src/content/blog/2016-04-19-mocking.md index 69866266b5..4d37e9c9de 100644 --- a/site/blog/20160419-mocking.md +++ b/src/content/blog/2016-04-19-mocking.md @@ -1,8 +1,9 @@ --- title: "Mocking your server is easy with GraphQL" -layout: ../_core/BlogLayout +layout: blog permalink: /blog/mocking-with-graphql/ date: 19 Apr 2016 +tags: ["blog"] byline: "Jonas Helfer" guestBio: engineer at Meteor working on Apollo --- @@ -42,7 +43,29 @@ GraphQL makes mocking easy, because every GraphQL backend comes with a static ty Hereโ€™s how easy it is to create a mocked backend that will accept any valid GraphQL query with the GraphQL mocking tool we are building as part of our new [GraphQL server toolkit](https://github.com/apollostack/graphql-tools): - +```js +// > npm install graphql-tools +import { mockServer } from 'graphql-tools'; +import schema from './mySchema.graphql'; + +const myMockServer = mockServer(schema); +myMockServer.query(`{ + allUsers: { + id + name + } +}`); + +// returns +// { +// data: { +// allUsers:[ +// { id: 'ee5ae76d-9b91-4270-a007-fad2054e2e75', name: 'lorem ipsum' }, +// { id: 'ca5c182b-99a8-4391-b4b4-4a20bd7cb13a', name: 'quis ut' } +// ] +// } +// } +``` Every GraphQL server needs a schema, so itโ€™s not extra code you need to write just for mocking. And the query is the one your component already uses for fetching data, so thatโ€™s also not code you write just for mocking. Not counting the import statement, it only took us one line of code to mock the entire backend! @@ -58,7 +81,43 @@ Luckily, this takes only a little more effort: customization of mock data is rea It lets you do all of the following and more: - +```js + +// customize mocking per type (i.e. Integer, Float, String) +mockServer(schema, { + Int: () => 6, + Float: () => 22.1, + String: () => 'Hello', +}); + +// customize mocking per field in the schema (i.e. for Person.name and Person.age) +mockServer(schema, { + Person: () => ({ + name: casual.name, + age: () => casual.integer(0,120), + }) +}); + +// mock lists of specific or random length( and lists of lists of lists โ€ฆ) +mockServer(schema, { + Person: () => { + // a list of length between 2 and 6 + friends: () => new MockList([2,6]), + // a list of three lists of two items: [[1, 1], [2, 2], [3, 3]] + listOfLists: () => new MockList(3, () => new MockList(2)), + }, +}); + +// customize mocking of a field or type based on the query arguments +mockServer(schema, { + Person: () => { + // the number of friends in the list now depends on numPages + paginatedFriends: (o, { numPages }) => new MockList(numPages * PAGE_SIZE), + }, +}); + +// You can also disable mocking for specific fields, pass through to the backend, etc. +``` For each type and each field you can provide a function that will be called on to generate mock data. Mock functions on fields have precedence over mock functions on types, but they work together really nicely: The field mock functions only need to describe the properties of the objects that matter to them, type mock functions will fill in the rest. @@ -68,7 +127,79 @@ I think the real power of this tool is that while it allows almost arbitrarily c But enough talking, hereโ€™s a complete example: - +```js + +import { mockServer, MockList } from 'graphql-tools'; +import casual from 'casual-browserify'; + +// The GraphQL schema. Described in more detail here: +// https://medium.com/apollo-stack/the-apollo-server-bc68762e93b +const schema = ` + type User { + id: ID! + name: String + lists: [List] + } + type List { + id: ID! + name: String + owner: User + incomplete_count: Int + tasks(completed: Boolean): [Task] + } + type Task { + id: ID! + text: String + completed: Boolean + list: List + } + type RootQuery { + user(id: ID): User + } + schema { + query: RootQuery + } +`; + +// Mock functions are defined per type and return an +// object with some or all of the fields of that type. +// If a field on the object is a function, that function +// will be used to resolve the field if the query requests it. +const server = mockServer(schema, { + RootQuery: () => ({ + user: (o, { id }) => ({ id }), + }), + List: () => ({ + name: () => casual.word, + tasks: () => new MockList(4, (o, { completed }) => ({ completed })), + }), + Task: () => ({ text: casual.words(10) }), + User: () => ({ name: casual.name }), +}); + +mockServer.query(` +query tasksForUser{ + user(id: 6) { + id + name + lists { + name + completeTasks: tasks(completed: true) { + completed + text + } + incompleteTasks: tasks(completed: false) { + completed + text + } + anyTasks: tasks { + completed + text + } + } + } +}`); +``` ## Live demo + try it yourself To see the example in action and see what output it generates, head over to the [live demo](https://launchpad.graphql.com/98lq7vz8r) try running some queries! diff --git a/site/blog/20160502-rest-api-graphql-wrapper.md b/src/content/blog/2016-05-02-rest-api-graphql-wrapper.md similarity index 99% rename from site/blog/20160502-rest-api-graphql-wrapper.md rename to src/content/blog/2016-05-02-rest-api-graphql-wrapper.md index 384d4d3556..99006133d5 100644 --- a/site/blog/20160502-rest-api-graphql-wrapper.md +++ b/src/content/blog/2016-05-02-rest-api-graphql-wrapper.md @@ -1,8 +1,9 @@ --- title: "Wrapping a REST API in GraphQL" -layout: ../_core/BlogLayout +layout: blog permalink: /blog/rest-api-graphql-wrapper/ -date: 5 May 2016 +tags: ["blog"] +date: 2016-05-05 byline: "Steven Luscher" --- @@ -141,7 +142,7 @@ const PersonType = new GraphQLObjectType({ /* ... */ friends: { type: new GraphQLList(PersonType), - resolve: person => person.friends.map(getPersonByURL), + resolve: person => person.friends.map(fetchPersonByURL), }, }), }); @@ -395,7 +396,7 @@ To create a `DataLoader` you supply a method that can resolve a list of objects ```js const personLoader = new DataLoader( - urls => Promise.all(urls.map(getPersonByURL)) + urls => Promise.all(urls.map(fetchPersonByURL)) ); ``` diff --git a/site/blog/20160914-production-ready.md b/src/content/blog/2016-09-14-production-ready.md similarity index 98% rename from site/blog/20160914-production-ready.md rename to src/content/blog/2016-09-14-production-ready.md index 6b1e076613..4e2b4aacd3 100644 --- a/site/blog/20160914-production-ready.md +++ b/src/content/blog/2016-09-14-production-ready.md @@ -1,7 +1,8 @@ --- title: "Leaving technical preview" -layout: ../_core/BlogLayout +layout: blog permalink: /blog/production-ready/ +tags: ["blog"] date: 14 Sep 2016 byline: "Lee Byron" --- diff --git a/src/content/blog/2017-11-08-programmable-web.md b/src/content/blog/2017-11-08-programmable-web.md new file mode 100644 index 0000000000..a482bcc091 --- /dev/null +++ b/src/content/blog/2017-11-08-programmable-web.md @@ -0,0 +1,12 @@ +--- +title: "ProgrammableWeb: GraphQL Moving to Neutral, Open-Source Foundation" +tags: ["in-the-news"] +layout: blog +date: 2017-11-08 +byline: ProgrammableWeb +permalink: /blog/2017-11-08-programmableweb-graphql-moving-to-neutral-open-source-foundation +--- + +GraphQL will now have its own foundation: the [GraphQL Foundation](/foundation/). Although GraphQL was initially incubated by Facebook, GraphQL is now utilized heavily by a diverse set of companies including major tech giants (e.g. Twitter, Airbnb, Shopify, etc.). Accordingly, it makes sense that the data query language move to a neutral, open source home. Like many open source projects, the GraphQL Foundation will be hosted by the Linux Foundation. Linux will implement an open governance model similar to many collaborations overseen by Linux. The exact details of the model, and future plans continue to be a work in progress. The current founding members include Airbnb, Apollo, Coursera, Elementl, Facebook, GitHub, Hasura, Prisma, Shopify and Twitter. + +[Read More ยป](https://www.programmableweb.com/news/graphql-moving-to-neutral-open-source-foundation/brief/2018/11/08) \ No newline at end of file diff --git a/src/content/blog/2018-11-06-eweek.md b/src/content/blog/2018-11-06-eweek.md new file mode 100644 index 0000000000..9b847d6bd9 --- /dev/null +++ b/src/content/blog/2018-11-06-eweek.md @@ -0,0 +1,12 @@ +--- +title: "eWeek: GraphQL API Specification Moving Forward with Independent Foundation" +tags: ["in-the-news"] +layout: blog +date: 2018-11-06 +byline: eweek +permalink: /blog/2018-11-06-eweek-graphql-api-specification-moving-forward-with-independent-foundation +--- + +The Linux Foundation announced on Nov. 6 that it is forming a new foundation to support the open source GraphQL specification, which enables a new generation of APIs. For nearly two decades, REST (Representational State Transfer) has been one of the primary approaches for enabling APIs that help to connect and extend applications and web services. REST however has multiple limitations, which is where GraphQL steps into the picture, finding wide adoption by large web properties. GraphQL was created in 2012 by Facebook and became open source in 2015. The move to create a new vendor-neutral independent foundation under the Linux Foundation will serve to help further advance the development of GraphQL. + +[Read more ยป](https://www.eweek.com/development/graphql-api-specification-moving-forward-with-independent-foundation) \ No newline at end of file diff --git a/src/content/blog/2018-11-06-infoworld.md b/src/content/blog/2018-11-06-infoworld.md new file mode 100644 index 0000000000..7059d04f1c --- /dev/null +++ b/src/content/blog/2018-11-06-infoworld.md @@ -0,0 +1,14 @@ +--- +title: "InfoWorld: GraphQL gets its own foundation" +tags: ["in-the-news"] +layout: blog +date: 2018-11-06 +byline: InfoWorld +permalink: /blog/2018-11-06-infoworld-graphql-gets-its-own-foundation +--- + +The Linux Foundation plans to host a foundation to support the GraphQL API project, with the intent of growing a neutral ecosystem for the technology. + +GraphQL is a specification for building APIs. It is intended to make cross-platform and mobile development simpler. Providing an alternative to REST, GraphQL lets developers use a strongly typed query language to define requests and responses, letting an application specify what it needs from an API. GraphQL enables access to multiple data sources through a single request. + +[Read more ยป](https://www.infoworld.com/article/3318255/apis/graphql-gets-its-own-foundation.html) \ No newline at end of file diff --git a/src/content/blog/2018-11-06-linux-foundation-graphql.md b/src/content/blog/2018-11-06-linux-foundation-graphql.md new file mode 100644 index 0000000000..9d6a56d60c --- /dev/null +++ b/src/content/blog/2018-11-06-linux-foundation-graphql.md @@ -0,0 +1,48 @@ +--- +title: "The Linux Foundation Announces Intent to Form New Foundation to Support GraphQL" +tags: ["announcements"] +layout: blog +date: 2018-11-06 +byline: GraphQL Foundation +permalink: /blog/2018-11-06-linux-foundation-announces-intent-to-form-new-foundation-to-support-graphql +--- + +[The Linux Foundation](https://www.linuxfoundation.org/), the nonprofit organization enabling mass innovation through open source, announces a broad coalition of industry leaders and users have joined forces to create a new open source foundation for the [GraphQL](https://graphql.org/) project, which will be dedicated to growing and sustaining a neutral GraphQL ecosystem. Hosted under the Linux Foundation, the [GraphQL Foundation](https://gql.foundation/)'s mission will be to enable widespread adoption and help accelerate development of GraphQL and the surrounding ecosystem. + +โ€œAs one of GraphQLโ€™s co-creators, Iโ€™ve been amazed and proud to see it grow in adoption since its open sourcing. Through the formation of the GraphQL Foundation, I hope to see GraphQL become industry standard by encouraging contributions from a broader group and creating a shared investment in vendor-neutral events, documentation, tools, and support,โ€ said Lee Byron, co-creator of GraphQL. + +GraphQL is a nextยญ-generation API technology developed internally by Facebook in 2012 before being publicly [open sourced in 2015](https://code.fb.com/core-data/graphql-a-data-query-language/). As application development shifts towards microservices architectures with an emphasis on flexibility and speed to market, tools like GraphQL are redefining API design and client-server interaction to improve the developer experience, increasing developer productivity and minimizing amounts of data transferred. GraphQL makes cross-platform and mobile development simpler with availability in multiple programming languages, allowing developers to create seamless user experiences for their customers. + +GraphQL is being used in production by a [variety of high scale companies](https://graphql.org/users/) such as Airbnb, Atlassian, Audi, CNBC, GitHub, Major League Soccer, Netflix, Shopify, The New York Times, Twitter, Pinterest and Yelp. GraphQL also [powers hundreds of billions of API calls a day at Facebook](https://code.fb.com/core-data/graphql-a-data-query-language/). + +โ€œWe are thrilled to welcome the GraphQL Foundation into the Linux Foundation. This advancement is important because it allows for long-term support and accelerated growth of this essential and groundbreaking technology that is changing the approach to API design for cloud-connected applications in any language,โ€ said Jim Zemlin, Executive Director, the Linux Foundation. + +Unlike REST-ยญbased APIs, which take advantage of HTTP and existing protocols, GraphQL APIs provide developers with the flexibility to query the exact data they need from a diverse set of cloud data sources, with less code, greater performance and security, and a faster development cycle. Not only does this enable developers to rapidly build topยญ quality apps, it also helps them achieve consistency and feature parity across multiple platforms such as web, iOS, Android, and embedded and IoT applications. + +The GraphQL Foundation will have an open governance model that encourages participation and technical contribution and will provide a framework for long-term stewardship by an ecosystem invested in GraphQLโ€™s success. + +โ€œAt Facebook, our mission is to give people the power to build community and bring the world closer together. We believe open source projects and the communities built around them help accelerate the pace of innovation and bring many minds to bear to solve large-scale challenges. GraphQL is one such project and community and the GraphQL Foundation will help ensure GraphQL continues to solve the real data fetching challenges that developers will face in building the products of tomorrow,โ€ said Killian Murphy, Director, Facebook Open Source. + +โ€œGraphQL has redefined how developers work with APIs and client-server interactions. We look forward to working with the diverse GraphQL community from end users like Facebook to a diverse ecosystem of vendors to become an independent foundation, draft their governance and continue to foster the growth and adoption of GraphQL,โ€ said Chris Aniszczyk, Vice President of Developer Relations, the Linux Foundation. + +## Supporting Quotes + +โ€œAirbnb is making a massive investment in GraphQL, putting it at the center of our API strategy across both our product and internal tools. We are excited to see the Foundation play a key role in cultivating the community around GraphQL and continue to evolve GraphQL as a technology, paving the way for continued innovation of Airbnbโ€™s API.โ€ โ€” Adam Neary, Tech Lead, Airbnb + +โ€œGiven GraphQLโ€™s centrality in the modern app development stack, the foundation weโ€™re announcing today is not just necessary, but overdue. As the creators of Apollo, the most widely used implementation of GraphQL, weโ€™re looking forward to working together with the Linux Foundation to define appropriate governance processes for this critical Internet standard.โ€ โ€“ Geoff Schmidt, coยญ-founder and CEO of Apollo GraphQL + +โ€œGraphQL, and the strong ecosystem behind it, is leading to a fundamental change in how we build products, and it helps bring together teams and organizations of every size. At Coursera, GraphQL assists us in understanding the massive breadth of our APIs and helps us create transformative educational experiences for everyone, everywhere. Weโ€™re excited to see the impact of the GraphQL Foundation in making both the technology and the community stronger.โ€ โ€“ Jon Wong, Staff Software Engineer, Coursera + +โ€œGraphQL has come a long way since its creation in 2012. Itโ€™s been an honor seeing the technology grow from a prototype, to powering Facebookโ€™s core applications, to an open source technology on the way to becoming a ubiquitous standard across the entire industry. The GraphQL Foundation is an exciting step forward. This new governance model is a major milestone in that maturation process that will ensure a neutral venue and structure for the entire community to drive the technology forward.โ€ โ€“ Nick Schrock, Founder, Elementl, GraphQL Co-Creator + +โ€œWe created GraphQL at Facebook six years ago to help us build high-performance mobile experiences, so to see it grow and gain broad industry adoption has been amazing. Since Facebook open-sourced GraphQL in 2015, the community has grown to include developers around the world, newly-founded startups, and well-established companies. The creation of the GraphQL Foundation is a new chapter that will create a governance structure we believe will empower the community and provide GraphQL long-term technical success. Iโ€™m excited to see its continued growth under the Foundationโ€™s guidance.โ€ โ€“ Dan Schafer, Facebook Software Engineer, GraphQL Co-Creator + +โ€œGraphQL has proven to be a valuable, extensible tool for GitHub, our customers, and our integrators over the past two years. The GraphQL Foundation embodies openness, transparency, and community โ€” all of which we believe in at GitHub.โ€ โ€“ Kyle Daigle, Director, Ecosystem Engineering, GitHub + +โ€œThis is a very welcome announcement, and we believe that this is a necessary step. The GraphQL community has grown rapidly over the last few years, and has reached the point where transparent, neutral governance policies are necessary for future growth. At Hasura, we look forward to helping the Foundation in its work.โ€ โ€“ Tanmai Gopal, CEO, Hasura + +โ€œGraphQL has become one of the most important technologies in the modern application development stack and sees rapid adoption by developers and companies across all industries. At Prisma, weโ€™re very excited to support the GraphQL Foundation to enable a healthy community and sustain the continuous development of GraphQL.โ€ โ€“ Johannes Schickling, Founder and CEO, Prisma + +โ€œAt Shopify, GraphQL powers our core APIs and all our mobile and web clients. We strongly believe in open development and look to the Foundation to help expand the community and nurture its evolution.โ€ โ€“ Jean-Michel Lemieux, SVP Engineering, Shopify + +โ€œGraphQL is gaining tremendous adoption as one of the best protocols for remote retrieval of large object graphs. At Twitter, we are looking forward to whatโ€™s to come in the GraphQL ecosystem and are very excited to support the GraphQL Foundation.โ€ โ€“ Anna Sulkina Sr. Engineering Manager, Core Services Group, Twitter diff --git a/src/content/blog/2018-11-07-datanami.md b/src/content/blog/2018-11-07-datanami.md new file mode 100644 index 0000000000..5978b8b549 --- /dev/null +++ b/src/content/blog/2018-11-07-datanami.md @@ -0,0 +1,12 @@ +--- +title: "Datanami: Will GraphQL Become a Standard for the New Data Economy?" +tags: ["in-the-news"] +layout: blog +date: 2018-11-07 +byline: Datanami +permalink: /blog/2018-11-07-datanami-will-graphql-become-a-standard-for-the-new-data-economy +--- + +Donโ€™t look now but a new language called GraphQL is emerging that could radically simplify how developers use APIs to get data into applications, and potentially provide a graph-like alternative to procedural REST. The company behind the open source software, Apollo, today announced the GraphQL Platform to standardize access to the new technology. + +[Read more ยป](https://www.datanami.com/2018/11/07/will-graphql-become-a-standard-for-the-new-data-economy/) diff --git a/src/content/blog/2018-11-07-sd-times.md b/src/content/blog/2018-11-07-sd-times.md new file mode 100644 index 0000000000..017a1d70bd --- /dev/null +++ b/src/content/blog/2018-11-07-sd-times.md @@ -0,0 +1,14 @@ +--- +title: "SD Times: The Linux Foundation announces plans to form GraphQL foundation" +tags: ["in-the-news"] +layout: blog +date: 2018-11-07 +byline: SD Times +permalink: /blog/2018-11-07-sd-times-lf-announces-plans-to-form-graphql-foundation +--- + +In an effort to grow and sustain the GraphQL ecosystem, The Linux Foundation has announced plans to launch a new open-source foundation for it. GraphQL is an [API](https://sdtimes.com/tag/apis/) technology that was initially developed by Facebook. + +The GraphQL Foundation will be a collaborative effort between industry leaders and users. + +[Read more ยป](https://sdtimes.com/api/the-linux-foundation-announces-plans-to-form-graphql-foundation/) diff --git a/src/content/blog/2018-11-07-the-register.md b/src/content/blog/2018-11-07-the-register.md new file mode 100644 index 0000000000..e674b64824 --- /dev/null +++ b/src/content/blog/2018-11-07-the-register.md @@ -0,0 +1,12 @@ +--- +title: "The Register: Facebookโ€™s open-source license drama-zone GraphQL gets swanky digs in Linux mansion" +tags: ["in-the-news"] +layout: blog +date: 2018-11-07 +byline: The Register +permalink: /blog/2018-11-07-the-register +--- + +GraphQL, a query language for APIs that was on the verge of being shunned last year over software license concerns, has bounced back and landed in the arms of the Linux Foundation. + +[Read more ยป](https://www.theregister.co.uk/2018/11/07/graphql_on_linux/) \ No newline at end of file diff --git a/src/content/blog/2018-11-12-channel-futures.md b/src/content/blog/2018-11-12-channel-futures.md new file mode 100644 index 0000000000..68ac1f29f9 --- /dev/null +++ b/src/content/blog/2018-11-12-channel-futures.md @@ -0,0 +1,17 @@ +--- +title: "Channel Futures: GraphQL API Query Language Growing, Gets Own Support Foundation" +tags: ["in-the-news"] +layout: blog +date: 2018-11-12 +byline: Channel Futures +permalink: /blog/2018-11-12-channel-futures-graphql-api-query-language-growing +--- + +The growing popularity and use of the open-source GraphQL API language by software developers has inspired the creation of a [GraphQL Foundation](https://www.linuxfoundation.org/press-release/2018/11/intent_to_form_graphql/) to promote the technology and help it accelerate its development and footprint in future code. + + + +The new organization, hosted by the non-profit [Linux Foundation](http://www.linuxfoundation.org/), is made up of a wide range of companies and users that are interested in growing and nurturing the GraphQL API project, which Facebook originally developed internally. After several years of development, Facebook released the code for GraphQL as an opn-source project. + +[Read more ยป](https://www.channelfutures.com/open-source/graphql-api-query-language-growing-gets-own-support-foundation +) \ No newline at end of file diff --git a/src/content/blog/2019-03-12-joint-development-foundation.md b/src/content/blog/2019-03-12-joint-development-foundation.md new file mode 100644 index 0000000000..c4c864fe44 --- /dev/null +++ b/src/content/blog/2019-03-12-joint-development-foundation.md @@ -0,0 +1,60 @@ +--- +title: The GraphQL Foundation Announces Collaboration with the Joint Development Foundation to Drive Open Source and Open Standards +tags: ["announcements"] +layout: blog +date: 2019-03-12 +byline: GraphQL Foundation +permalink: /blog/2019-03-12-graphql-foundation-announces-collaboration-with-jdf +--- + +The [GraphQL Foundation](/foundation/), a neutral home for the GraphQL community to accelerate development of the surrounding ecosystem, today announces it is collaborating with the Joint Development Foundation (JDF), [which recently joined the Linux Foundation to drive adoption of open source and standards](https://www.linuxfoundation.org/press-release/2018/12/jdf-joins-lf-family/), to continue developing the [GraphQL specification](https://github.com/facebook/graphql/). + +GraphQL Foundation encourages contributions, stewardship, and a shared investment from a broad group in vendor-neutral events, documentation, tools, and support for the data query language. The following companies Apollo, AWS, Butterfly Network, Dgraph Labs, Facebook, Gatsby, GraphZen, Hasura, IBM, Intuit, Neo4j, Novvum, Pipefy, Salsify, Solo.io and Thicit are joining as members to advance GraphQL as an industry specification for designing more effective APIs. + +GraphQL powers hundreds of billions of API calls a day at Facebook, which developed the technology in 2012 and played an integral role in helping GraphQL [join the Linux Foundation last year](https://www.linuxfoundation.org/press-release/2018/11/intent_to_form_graphql/). Today, virtually every major programming language offers GraphQL support through a variety of open source software libraries. + +GraphQL is the first Linux Foundation project to benefit from the JDF and Linux Foundation collaboration, which provides open source projects with a swift path to standardization for open specifications. Developers will have an open GraphQL specification and open source software implementations available for designing conformant APIs. + +โ€œWe are excited to formally welcome new members and to work closely with them to build out and support a global GraphQL ecosystem. Weโ€™re pleased that the GraphQL specification will continue to evolve through the JDF and Linux Foundation partnership. With an easier and faster way to create and advance standards, developers can concentrate on creating applications that make a bigger impact on communities around the world,โ€ said Lee Byron, co-creator of GraphQL. + +GraphQL is important for API development as it allows nested objects in a single API request that traditionally would require multiple API requests. The [GraphQL specification](https://github.com/facebook/graphql/), [GraphQL.js](https://github.com/graphql/graphql-js) reference implementation, [DataLoader](https://github.com/facebook/dataloader) library, and [GraphiQL](https://github.com/graphql/graphiql) developer tool are technical projects supported by the GraphQL Foundation. As application development shifts toward microservices architectures with an emphasis on flexibility and speed to market, tools like GraphQL are redefining API design and client-server interaction to improve the developer experience, increasing developer productivity and minimizing amounts of data transferred. GraphQL makes cross-platform and mobile development simpler with availability in multiple programming languages that are consistent and feature parity across multiple platforms such as web, iOS, Android, and embedded and IoT applications. + +[The Linux Foundation](https://www.linuxfoundation.org/) and the [Facebook Open Source](https://opensource.facebook.com/) team leveraged the JDFโ€™s proven framework to create a lightweight governance structure for specifications โ€” allowing communities to quickly spin-up neutral collaborations. + +โ€œWeโ€™re thrilled to see GraphQL and the Joint Development Foundation join forces and get to work so quickly to advance open standards,โ€ said Jim Zemlin, executive director of the Linux Foundation. โ€œWorking with the JDF, the GraphQL community is able to leverage turnkey infrastructure to create and manage open standards more quickly and nimbly than ever before. This allows developers to continue to break barriers and modernize application development.โ€ + +โ€œWe are very pleased to have worked closely with the Linux Foundation in creating this novel approach to specification-based collaborations,โ€ said Michael Cheng from the Facebook Open Source team. โ€œBy offering open source communities a streamlined path to standardization and nurturing open source implementations, this strategic alignment benefits GraphQL developers, corporate contributors and end users who need both outcomes to succeed.โ€ + +โ€œWe look forward to working closely with the GraphQL Foundation and we expect many other Linux Foundation projects to work with us this year to accelerate specifications and standards development to advance their mission and drive the creation of innovative technology, โ€ said David Rudin, president of the Joint Development Foundation. + +## Member Quotes + +โ€œGiven GraphQLโ€™s centrality in the modern app development stack, the foundation weโ€™re launching today is not just necessary, but overdue. As the creators of Apollo, the most widely used implementation of GraphQL, weโ€™re looking forward to working together with the Linux Foundation to define appropriate governance processes and accelerate the adoption of this critical Internet standard.โ€ โ€” Geoff Schmidt, CEO and Co-Founder, Apollo + +โ€œGraphQL is a foundational technology for building APIs that empower frontend developers to deliver the best user experience for their customers. With AWS AppSync and the Amplify Framework, AWS is enabling developers to build and run critical GraphQL workloads at scale, and we are excited to join the Foundation to support and grow the GraphQL community.โ€ โ€” Adrian Cockcroft, Vice President of Cloud Architecture Strategy, AWS + +โ€œGraphQL has been invaluable to Butterfly Network in advancing our mission of democratizing medical imaging. Itโ€™s enabled us to build data-efficient APIs to serve healthcare providers in areas with limited broadband internet access, while preserving our ability to quickly develop new API functionality. GraphQL has played a key role in allowing our back end and front end teams to work together with a minimum of friction. Weโ€™re excited to support the GraphQL Foundation in its work to further shepherd the standard.โ€ โ€” Jimmy Jia, Principal Scientist, Butterfly Network + +โ€œDgraph started just a few months after a draft GraphQL spec was released in mid-2015. Unsatisfied with existing graph languages, we decided to bet the future of our distributed graph database on GraphQL. Dgraph is now the only database to natively support a language very close to GraphQL. Considering how easy and intuitive it is for our users, it has been the best decision we made. So, we stand proud with the GraphQL Foundation to help build the next generation of apps on graphs.โ€ โ€“ Manish R. Jain, CEO, Dgraph Labs + +โ€œOur goal at Gastby is to provide the best platform for building fast, compelling websites. We use GraphQL to provide a flexible data layer that can be used with different sources. We welcome the establishment of the GraphQL Specification Project and are very excited to be part of it.โ€ โ€” Mikhail Novikov, Software Developer, Gatsby Inc. + +โ€œGraphZen strives to deliver a fantastic developer experience for C# developers building GraphQL APIs and to provide the support and training needed by enterprises to realize the benefits of GraphQL. GraphZen is excited to join the GraphQL Foundation and steward the GraphQL specification in a way that continues to drive innovation and adoption through open standards.โ€ โ€” Craig Smitham, Creator & Founder, GraphZen + +โ€œThe GraphQL technology and community is spearheading a much required shift in the API experience for the modern web, especially as applications are becoming more โ€˜frontendโ€™ heavy. At Hasura, weโ€™re extremely excited about the potential of GraphQL to evolve the way teams organize their codebases, and communicate with each other; especially in relation to the ongoing serverless movement. There could not be a better home for GraphQL projects and events than the GraphQL Foundation, and we are proud to do our bit to help make the technology and community around GraphQL sustainable and open.โ€ โ€” Tanmai Gopal, CEO, Hasura + +โ€œIBM has continued to be an industry leader, helping clients keep pace with the rapidly evolving API technologies landscape. We are pleased to join the new GraphQL Foundation as a founding member to help drive greater open source innovation and adoption of this important data access language and runtime for APIs.โ€ โ€“ Juan Carlos Soto, VP Hybrid Cloud Integration and API Economy, IBM + +โ€œIntuit began using GraphQL shortly after it arrived in open source. We have developed a complex schema with over 600 core objects, 1,600 types and thousands of connections between objects. Weโ€™ve made major contributions to the open source GraphQL Java library. We look forward to participating in the GraphQL Foundation to advance its capabilities and more directly participate in the thriving community.โ€ โ€” Jeff Brewer, Vice President, Chief Architect, Small Business and Self-Employed Group, Intuit + +โ€œNeo4j is pleased to support GraphQL, due to its unique ability to enable front-end developers, API developers and data architects to all work with the same graph-based data model. Our GraphQL integration and GRANDstack have already helped thousands of developers build graph applications with Neo4j, thanks to the huge developer productivity gain of GraphQL and the graph thinking mindset it brings for both developers and API consumers. The GraphQL Foundation is an important step to cement todayโ€™s most relevant standard for building APIs and weโ€™re honored to join as founding members to help steward GraphQL as the ecosystem continues to evolve.โ€ โ€” Emil Eifrem, CEO and Co-Founder, Neo4j + +โ€œWe are grateful that Novvum has grown alongside GraphQL and its community over the past four years. We couldnโ€™t be more excited about the future of GraphQL, and look forward to working with the Linux Foundation and GraphQL Foundation to improve the quality and experience of API development for engineers.โ€ โ€” Raj Singh, CEO and Co-Founder, Novvum + +โ€œAt Pipefy we are building the lean management platform. Since the beginning, GraphQL has enabled our developers to deliver new features and services more efficiently and with better communication from front-end and back-end teams. After we started using it internally, we decided to build our public API using GraphQL, a choice that enabled us to deliver a better developer experience to the developers who are building on top of our platform. We are excited to contribute to the GraphQL ecosystem and support the GraphQL Foundation.โ€ โ€” Raphael Costa, Head of Platform, Pipefy + +โ€œSalsify provides a data platform that enables the worldโ€™s largest brands to deliver compelling product experiences across the retail ecosystem. Our GraphQL powered APIs enable us to support a diverse set of use cases with great developer ergonomics and excellent performance. We look forward to working with the GraphQL Foundation to support the continued evolution of GraphQL.โ€ โ€” Joel Turkel, Chief Software Architect, Salsify + +โ€œ[Solo.io](http://solo.io/)โ€™s mission is to empower enterprise organizations rapidly adopt innovative technology and extend their existing investments. GraphQL is a powerful way to help โ€œglueโ€ monolith, microservices, and serverless applications with a unified API. Our open-source project, Sqoop, leverages GraphQL and other innovative projects like Envoy to streamline the developer experience, and simply glue together environments without writing a single line of code. We are excited to join the GraphQL Foundation and look forward to working within the GraphQL communityโ€ โ€” Idit Levine, CEO & Founder, Solo.io + +โ€œGraphQL, and alongside its tooling, has grown to proof its worth and is here to stay. Time for a power-up supported by many hands and brains through the Joint Development Foundation and Linux Foundation. GraphQL is the glue that keeps your domain data in context, understandable, and always ready to empower the next ideas. Looking forward to new and improved powerโ€™s, to evolution.โ€ โ€” Tim Govers, CEO, Thicit diff --git a/src/content/blog/2019-10-28-interactive-landscape.md b/src/content/blog/2019-10-28-interactive-landscape.md new file mode 100644 index 0000000000..c1926bf58f --- /dev/null +++ b/src/content/blog/2019-10-28-interactive-landscape.md @@ -0,0 +1,50 @@ +--- +title: GraphQL Foundation Launches Interactive Landscape and Welcomes New Members from Open Source Summit Europe +tags: ["announcements"] +layout: blog +date: 2019-10-28 +byline: GraphQL Foundation +permalink: /blog/2019-10-28-graphql-foundation-launches-interactive-landscape-welcomes-new-members +--- +[The GraphQL Foundation](/), a neutral home for the GraphQL community to accelerate development of the surrounding ecosystem, today announced seven new members to support the Foundation's efforts, along with the launch of the [GraphQL Landscape](https://landscape.graphql.org). + +The GraphQL Landscape is a dynamically generated tool designed to help explore the burgeoning GraphQL community of projects, adopters and member organizations. Currently, it is comprised of 100+ cards representing a market cap of more than $3.4T. + +"When we first created GraphQL, we set out to make product development easier with APIs driven by the needs of mobile and app developers and dramatic simplifications of how APIs are built and maintained," said Lee Byron, Director of the GraphQL Foundation. "I'm thrilled to see this influx of multi-industry support for GraphQL and a commitment to increase developer productivity, showcased throughout the impressive and growing landscape." + +"I'm thrilled to help launch the GraphQL Foundation's first landscape, displaying GraphQL's vast range of projects, adopters and members," said Chris Aniszczyk, VP of Developer Relations and CTO of CNCF at the Linux Foundation. "This interactive resource has been a labor of love from and for our community, and I look forward to watching it grow into the same standard for real-time ecosystem information that the CNCF Landscape has been for the cloud native space." + +GraphQL is a nextยญ-generation API technology developed internally by Facebook in 2012 before being publicly [open sourced in 2015](https://code.fb.com/core-data/graphql-a-data-query-language/). Unlike REST-ยญbased APIs, which take advantage of HTTP and existing protocols, GraphQL APIs provide developers with the flexibility to query the exact data they need from a diverse set of cloud data sources, with less code, greater performance and security, and a faster development cycle. Not only does this enable developers to rapidly build topยญ quality apps, it also helps them achieve consistency and feature parity across multiple platforms such as web, iOS, Android, and embedded and IoT applications. + +Brian Warner of The Linux Foundation has joined the GraphQL Foundation as its Program Director, helping to support the growing community and the project's ongoing needs. "I look forward to working with Lee and the governing board to establish the infrastructure and support needed to ensure the health and sustainability of the vibrant GraphQL community." + +GraphQL is being used in production by a [variety of high scale companies](https://graphql.org/users/) such as Airbnb, Atlassian, Audi, CNBC, GitHub, Major League Soccer, Netflix, Shopify, The New York Times, Twitter, Pinterest and Yelp. GraphQL also [powers hundreds of billions of API calls a day at Facebook](https://code.fb.com/core-data/graphql-a-data-query-language/). + +## Member Quotes + +"Open source specifications rely on strong collaboration and proper stewardship. 8base loves GraphQL and we joined the GraphQL Foundation to be involved in the specification's future with other leading-edge technology companies. Our hope is that, with our involvement, the surrounding ecosystem continues to flourish at an accelerated pace." - *Albert Santalo, CEO & Founder, 8base* + +"It's truly surreal to see GraphQL grow from its conception to spread throughout the entire technology industry. The Foundation provides the infrastructure to make this a true industry standard, backed by stable, trusted, company-neutral governance." - *Nick Schrock, Founder, Elementl* + +"At Expedia Group, GraphQL is helping us build better experiences for our travelers. As a rapidly adopted technology in software development, we believe an open and community supported GraphQL specification and ecosystem is critical to its continued success." - *Trevor Livingston, Principal Architect, Expedia Group (VRBO)* + +"At Fauna, we have seen first-hand the productivity and architectural benefits GraphQL offers developers. We believe that an open ecosystem and shared specification are a benefit to all. We're excited to contribute to the GraphQL community and collaborate on its continued innovation." - *Matt Freels, CTO, Fauna, Inc.* + +"We are thrilled to be a part of the GraphQL Foundation. We see GraphQL as one of the most important emerging API technologies and strongly believe in its bright future! We're excited to continue investing in the GraphQL ecosystem and community with tools, events and educational content." - *Johannes Schickling, CEO, Prisma* + +"We're deliberate about the technology we build and adopt. That's why we're excited to double-down on our investment in GraphQL as a foundational technology at Shopify. We believe GraphQL provides great tools for our internal teams and app developers to extend our platform and create faster merchant experiences." - *Jean-Michel Lemieux, CTO, Shopify* + +"GraphQL plays a key part in helping us serve the public conversation on Twitter by enabling faster product iteration across our teams. As GraphQL is gaining tremendous adoption as one of the best protocols for remote retrieval of large object graphs, we are very excited to support the GraphQL Foundation." - *Anna Sulkina Engineering Director, Core Services Group, Twitter* + +## About the GraphQL Foundation + +The GraphQL Foundation is an open, neutral organization that provides oversight of funding, operations, and marketing resources for the GraphQL community to enable widespread adoption and help accelerate development of the broader ecosystem. The [GraphQL specification](https://github.com/graphql/graphql-spec), [GraphQL.js](https://github.com/graphql/graphql-js) reference implementation, [DataLoader](https://github.com/graphql/dataloader) library, and [GraphiQL](https://github.com/graphql/graphiql) developer tool are technical projects supported by the GraphQL Foundation. More details can be found at [https://foundation.graphql.org](/). + +## About The Linux Foundation + +The Linux Foundation is the organization of choice for the worldโ€™s top developers and companies to build ecosystems that accelerate open technology development and industry adoption. Together with the worldwide open source community, it is solving the hardest technology problems by creating the largest shared technology investment in history. Founded in 2000, The Linux Foundation today provides tools, training and events to scale any open source project, which together deliver an economic impact not achievable by any one company. More information can be found at www.linuxfoundation.org. + +\# \# \# + +*The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our trademark usage page: [https://www.linuxfoundation.org/trademark-usage](https://www.linuxfoundation.org/trademark-usage). Linux is a registered trademark of Linus Torvalds.* + diff --git a/src/content/blog/2019-10-31-linux-foundation-training.md b/src/content/blog/2019-10-31-linux-foundation-training.md new file mode 100644 index 0000000000..c8205a956d --- /dev/null +++ b/src/content/blog/2019-10-31-linux-foundation-training.md @@ -0,0 +1,39 @@ +--- +title: "Linux Foundation Training Announces a Free Online Course-Exploring GraphQL: A Query Language for APIs" +tags: ["announcements"] +layout: blog +date: 2019-10-31 +byline: GraphQL Foundation +permalink: /blog/2019-10-31-linux-foundation-training-announces-free-online-course-exploring-graphql +--- + +[The Linux Foundation](http://www.linuxfoundation.org/), the nonprofit organization enabling mass innovation through open source, today announced enrollment is now open for a new, free, course โ€“ [Exploring GraphQL: A Query Language for APIs](https://www.edx.org/course/introduction-to-graphql). This course is offered through [edX](https://www.edx.org/), the trusted platform for learning. + +[GraphQL](https://graphql.org) is revolutionizing the way developers are building APIs for web, mobile and even databases. But what exactly is GraphQL? GraphQL is an open source data query and manipulation language for APIs, and a runtime for fulfilling queries with existing data. + +This course explains what GraphQL is and why it is getting so much attention from software engineers. It covers the advantages over REST, what types of software architectures to use it with, and why it benefits both frontend and backend developers. The student practices GraphQL queries in an interactive playground, and learns advanced topics such as how to implement a GraphQL server on the backend, how to use a GraphQL server with a client, and how to keep the GraphQL server secure. The course content was originally created by [Prisma](https://prisma.io), and updated and maintained by [Novvum](https://novvum.io). + +"Since open sourcing GraphQL, I have been blown away by the growth of the technology and community. I'm excited to see the introduction of more educational material which I hope will help our community continue to grow and reach developers world-wide." โ€“ *Lee Byron, Executive Director, GraphQL Foundation, and GraphQL Co-Creator* + +This course will help programmers gain the skills needed to use GraphQL for a small project or professionally in production. They will feel comfortable getting started with the right tools for their use case. + +For the nontechnical person, this course will help them improve communication with developers and to participate in conversations about GraphQL. They will understand when and why to use GraphQL for a project. + +[Exploring GraphQL: A Query Language for APIs](https://www.edx.org/course/introduction-to-graphql) is available at no cost, with content access for up to 7 weeks. Learners may upgrade to the verified track for $99, which includes all graded assessments, unlimited access to the course content and the ability to earn a Verified Certificate upon passing the course. + +### About The Linux Foundation + +The Linux Foundation is the organization of choice for the worldโ€™s top developers and companies to build ecosystems that accelerate open technology development and industry adoption. Together with the worldwide open source community, it is solving the hardest technology problems by creating the largest shared technology investment in history. Founded in 2000, The Linux Foundation today provides tools, training and events to scale any open source project, which together deliver an economic impact not achievable by any one company. More information can be found at [www.linuxfoundation.org](https://linuxfoundation.org). + +The Linux Foundation has registered trademarks and uses trademarks. For a list of trademarks of The Linux Foundation, please see our trademark usage page: [https://www.linuxfoundation.org/trademark-usage](https://www.linuxfoundation.org/trademark-usage/). + +Linux is a registered trademark of Linus Torvalds. + +\# \# \# + +### Media Contact: + +Clyde Seepersad +The Linux Foundation +404-964-6973 +cseepersad@linuxfoundation.org diff --git a/src/content/blog/2020-04-02-graphql-annual-report-2019.md b/src/content/blog/2020-04-02-graphql-annual-report-2019.md new file mode 100644 index 0000000000..c37151b693 --- /dev/null +++ b/src/content/blog/2020-04-02-graphql-annual-report-2019.md @@ -0,0 +1,26 @@ +--- +title: "Announcing the 1st GraphQL Foundation Annual Report" +tags: ["announcements"] +layout: blog +date: 2020-04-02 +byline: GraphQL Foundation +permalink: /blog/2020-04-02-announcing-the-first-graphql-foundation-annual-report +--- + +The GraphQL Foundation recently turned 1 year old and is happy to announce its [first annual report](/foundation/annual-reports/2019/)! + +The annual report details the accomplishments of the organization in its first year, along with a forward looking statement for 2020 and beyond from Lee Byron, the GraphQL Foundation Executive Director: + +> As the Executive Director of the GraphQL project, I hope I can speak for the whole community when I say we are looking forward to another productive year of GraphQL development. We are putting the final touches on the GraphQL 2020 spec release, and continue to make great progress developing new features, stabilizing existing ones, and exploring beyond core GraphQL. +> +> It has been really encouraging to see GraphQL continue to evolve over the past year as a technology and as a community. GraphQL is being used at scale by not only Facebook but now a great number of organizations large and small. As I said when first introducing the project, GraphQL is unapologetically driven by the needs of the client. This has been a critical aspect of GraphQL's success and it is great to see this principle reflect itself in our community, where those more interested in consuming APIs than producing them have come together to support the ongoing sustainability of the project. +> +> Since establishing the GraphQL Foundation, we've had an outpouring of support from these companies. This neutral, non-profit home for the GraphQL project has provided a healthy way for users, contributors, and supporters to collaborate and contribute funding in support of our programs and collaborative processes. For example, this support has enabled us to support long-time contributor Ivan Goncharov to focus on crucial development and maintenance of the reference implementation, specification and other community gardening work. It has also allowed us to launch a [free GraphQL edX course](https://www.edx.org/course/exploring-graphql-a-query-language-for-apis), and has enabled us to take some first steps toward supporting and producing community events. +> +> Development of the GraphQL spec has remained open to all contributors. Over the last year we've brought more rigor and clarity to the development process. I've found it encouraging that contributions have been a healthy mix of aspirational new features and iterative improvements to the stable base. This demonstrates that GraphQL is evolving in meaningful ways to address exciting new use cases while also building confidence and stability around what thousands of companies use in production every day. Both of these are essential for GraphQL's long term success. +> +> Looking ahead, I have great optimism for GraphQL and see huge opportunities. First, we've been hard at work on the 2020 spec and that release is imminent. Spec development continues to accelerate and exciting advancements and improvements are underway for the 2021 release and beyond. Second, we have been accepted to participate in Google Summer of Code and are looking forward to adding these talented students as project collaborators. Third, the communities around the core GraphQL project are collaborating. For example, GraphiQL and Playground recently announced they will be joining efforts to build better tools for us all. +> +> Thank you again for your involvement in this project and your support of the GraphQL Foundation. I am pleased with our progress and am looking forward to another productive year. +> +> _โ€“ **Lee Byron**, Executive Director, GraphQL Foundation, and GraphQL Co-Creator_ diff --git a/src/content/blog/2020-04-03-graphiql-graphql-playground.md b/src/content/blog/2020-04-03-graphiql-graphql-playground.md new file mode 100644 index 0000000000..8f2ecc7cfa --- /dev/null +++ b/src/content/blog/2020-04-03-graphiql-graphql-playground.md @@ -0,0 +1,75 @@ +--- +title: "Web-based GraphQL IDEs for the win: How & Why Playground & GraphiQL are joining forces" +tags: ["announcements"] +layout: blog +date: 2020-04-03 +byline: Rikki Schulte, Jason Kuhrt +permalink: /blog/2020-04-03-web-based-graphql-ides-for-the-win +--- + +![Banner showing the Prisma and GraphQL Foundation logos with a :handshake: emoji between them](/img/news/playground-transition-banner.png) + +## GraphiQL's beginnings + +The initial public commit to GraphiQL was in 2014. + +When [Lee Byron](https://github.com/leebyron), [Hyo Jeong](https://github.com/asiandrummer) and [Angel Gomez](https://github.com/AGS-) first published it, the intention was to create a minimal reference IDE development ecosystem for GraphQL. [Greg Hurrell](https://github.com/wincent) created the streaming `graphql-language-service-parser`, designed to empower the `codemirror-graphql` mode. + +The goal was to give people the utility packages they needed to build their own web based or desktop IDE tool, and at its core, a relatively simple tool for folks to start learning and applying the language, and for exploring schemas. At the time, LSP was not yet a commonly accepted standard, and VSCode had yet to become the incredibly popular development tool it is today. + +Last year, these original engineers handed over to the graphql foundation three repositories: GraphiQL, `codemirror-graphql` and the `graphql-language-service` packages. + +Fast forward to now, and GraphiQL is now used by GraphQL implementations in dozens of languages, as well as hundreds of frameworks and runtimes. It's used for everything from HTTP operations, to querying local schemas, data science tools, and even for data transmission for IOT platforms. You'll find it in the AWS dashboard, GitHub developer tools, and many more places we are honored to see this library used. + +## Enter Playground + +Alongside GraphiQL, many of us are familiar with its sibling - the handsome & feature-full [GraphQL Playground](https://github.com/prisma-labs/graphql-playground). Following GraphiQL's lead, it uses our `codemirror-graphql` ([Insomnia](https://insomnia.rest/graphql/), [Altair](https://altair.sirmuel.design/) and many others are also in this club!). This is why there are so many similarities between the direct editing experience of these tools. + +Playground is _exactly_ what we wanted to happen. It helped drive the development of our language ecosystem, and gave users an easier option than the more customization-oriented GraphiQL. It provided a ton of excellent features - `graphql-config` support, multiple tabs, i18n, and http server middlewares. + +## Prisma Donates Playground to GraphQL Foundation + +As many have successfully guessed, **Prisma _is_ donating Playground to the GraphQL Foundation.** Entering 2019 Prisma envisioned an eventual Playground 2.0 but then the advent of a modular GraphiQL 2 project showed an opportunity for great synergy, made all the more natural by Prisma's pivot toward modular database tooling for developers. + +Playground 1.x has been a community effort of [dozens of contributors](https://github.com/prisma-labs/graphql-playground/graphs/contributors). Prisma thanks all contributors who helped out along the way. Prisma remains deeply committed to supporting the future of the GraphQL language. For example the [Prisma Labs team](https://github.com/prisma-labs) continues to focus on GraphQL API layer and [recently announced](https://github.com/prisma-labs/nexus/issues/373) the transition of [Nexus](https://nexus.js.org/) from a schema building library into a full [fledged GraphQL API framework](https://www.nexusjs.org). + +## The Playground Features you love + +In the interest of parity, we will keep a lot of the same features, whether by introducing them to the core or proving plugins that will ship with the playground preset. + +- multiple tabs (GraphiQL Core) +- headers tab per operation tab (plugin) +- tracing tab (plugin) +- playground doc explorer (plugin) +- internationalization (GraphiQL Core) +- `graphql-config` support, with new features thanks to our fantastic colleagues at the [Guild Dev](https://github.com/orgs/the-guild-org/people), who Prisma has entrusted with many other projects. +- easy to use middlewares + +## New Features + +These new features will come with the new `graphql@2.0.0`: + +- vscode style command palette (via `monaco-editor`) +- jump to fragment or other type definitions +- generate a collection of operations from your project's source files +- more customizable network options - default headers per project, as well as headers per-operation +- helpers for integrating custom authentication flows +- extensive theme, layout, and component customization abilities (you can start with the playground theme preset and work from there!) +- custom tabs and panels +- a first-class `graphiql-explorer` plugin in partnership with the original creators, our colleagues at [OneGraph](https://www.onegraph.com/) + +## How will it be re-implemented? + +Playground 2.0 will be a GraphiQL preset that includes the custom theme as well as the custom playground doc explorer plugin (as an alternative to the new doc explorer proposed by @orta and other users), HTTP headers and tracing tab plugins. You can find more technical detail, ongoing discussion and things to work on the [GraphiQL Plugin API Meta Issue](https://github.com/graphql/graphiql/issues/983) or in [other playground related discussion issues](https://github.com/graphql/graphiql/issues?q=label%3Agraphql-playground-preset) in the GraphiQL monorepo. + +While the Playground team's baseline goal will be relative parity with Playground 1.0, the team will be accepting proposals for new features and plugins that build on the existing GraphQL Playground experience. The [Features Roundup](https://github.com/graphql/graphiql/projects/10) project is a great place to see what we have planned already for plugins that Playground's preset can use, or you can also create a proposal if you don't see what you're looking for. + +## `graphql-playground` repository next steps + +The existing `graphql-playground` repository will get one or two more maintenance/bugfix releases before it will be archived. You can still fork it of course. You can learn more about this in [the graphql-playground issue](https://github.com/prisma-labs/graphql-playground/issues/1143) we created for this migration. + +## Call for Contributors + +We're also looking for contributors to form a team to develop, support and maintain a playground preset. The goal would be for them to help iterate on and stabilize the plugin API effort, as well as work towards the effort of contributing to and maintaining the playground preset and its associated plugins. If you are interested leave comment in the [Call for Contributors Github issue](https://github.com/graphql/graphiql/issues/1443). + +You can also follow the [Plugin API Proposal discussion issue](https://github.com/graphql/graphiql/issues/983) for updates, and get involved in our [discord channel](https://discord.gg/EXUYPaY) we've created just for the playground initiative. diff --git a/src/content/blog/2020-06-13-season-of-docs.md b/src/content/blog/2020-06-13-season-of-docs.md new file mode 100644 index 0000000000..83e2abc1e0 --- /dev/null +++ b/src/content/blog/2020-06-13-season-of-docs.md @@ -0,0 +1,42 @@ +--- +title: "GraphQL joins Google Season of Docs" +tags: ["announcements"] +layout: blog +date: 2020-06-13 +byline: Obinna Ekwuno +permalink: /blog/2020-06-13-graphql-joins-google-season-of-docs +--- + +# **GraphQL joins Google Season of Docs.** + +Open source communities are one of the best ways to collaborate with a larger scale of developers, it incorporates the best part of learning, mentorship, and collaboration on a large scale. +**Open-source** software has been proven to create large effective ecosystems of users that improve quality. It has been known for many years that the more a piece of software is used, the quicker bugs **will** be identified. In the **open-source** community when a bug is found, users contribute fixes. +**GraphQL** is an **open**-**source** data query and manipulation language for APIs, and a runtime for fulfilling queries with existing data. **GraphQL** was developed internally by Facebook in 2012 before being publicly released in 2015. + + + +# **What is Google Season of Docs?** + +The Google Season of Docs is the intersection of technical writing, open-source contribution, and mentorship. In this three month program, you will be working closely with maintainers of open source projects to improve on existing documentation and processes to better the community. + +For technical writers who are new to open source, the program provides an opportunity to gain experience in contributing to open source projects. + +For technical writers who're already working in open source, the program provides a potentially new way of working together. Season of Docs also gives open source projects an opportunity to engage more of the technical writing community. + + + +## **How can I be a part of this?** + +Open source organizations apply to be mentor organizations in the Season of Docs which includes a list of documentation project ideas with their applications. Technical writers can look through the list of proposals here are the [project ideas for the GraphQL organization](https://github.com/graphql/foundation/tree/master/mentorship/2020/gsod). +When you have selected a project you would like to work on, write up a project proposal and submit it to [Season of Docs](https://developers.google.com/season-of-docs). You may continue to refine your proposals until July 9th. If you need clarifications, please contact Ivan Goncharov and Uri Goldshtein by sending a message to [mentorship@lists.foundation.graphql.org](mailto:mentorship@lists.foundation.graphql.org). + +The GraphQL organization will reach out to you after they have evaluated the proposals. The accepted technical writers spend a few months working with mentors from the open-source organizations to complete their projects. At the end of the program, the Google program administrators announce the projects that finished successfully. +Check out the [official technical writer guide.](https://developers.google.com/season-of-docs/docs/tech-writer-guide) + + + +## **How long is this program?** + +The technical writing applications started on June 9th, 2020 and will last till July 9th, 2020. The selection process for the proposals submitted to organizations lasts till July 31st, 2020. Then Doc development officially begins September 14th, 2020, and ends December 5th, 2020. For a more detailed timeline check out the [official season of docs timeline](https://developers.google.com/season-of-docs/docs/timeline). + +_โ€“ **Obinna Ekwuno**, Software Engineer, DevRel GatsbyJS_ diff --git a/src/content/blog/2020-06-30-gsoc-2020-naman.md b/src/content/blog/2020-06-30-gsoc-2020-naman.md new file mode 100644 index 0000000000..c685fc272f --- /dev/null +++ b/src/content/blog/2020-06-30-gsoc-2020-naman.md @@ -0,0 +1,26 @@ +--- +title: "Google Summer of Code 2020 Participant: Naman" +tags: ["announcements"] +layout: blog +date: 2020-06-30 +byline: Naman Kumar +permalink: /blog/2020-06-30-gsoc-2020-participant-naman +--- +![GSOC 2020](/img/logos/gsoc.svg) +> [Naman Kumar](https://naman.sh) is a Computer Science & Engineering student from New Delhi, India and a FullStack Engineer at [ProductHunt](https://producthunt.com). He is selected for Google Summer of Code 2020 - GraphQL Foundation under the mentorship of [Ivan Goncharov](https://github.com/IvanGoncharov). In this post he will share his plans on how he is going to spend his summer contributing to the Graphql Foundation. + +Hi, GraphQL is a technology I use everyday at my work place and other projects building platforms with 200 to 2 million users. I am surely in love with it, acknowledging how much it improves the development speed and removes the overhead of documentation for starters. + +I have huge respect for Open Source organisations and really inspired by the work the whole graphql community is doing to make lives of developers easier. I have always wanted to participating in GSOC, which I assure you is a dream of every student. + +I got to know about the acceptance of Graphql Foundation under GSOC from Ivanโ€™s [talk](https://www.youtube.com/watch?v=PsXxL1oJLrc&list=PLTRTpHrUcSB9jtvOwnq1yVwZl5k2DdBb2&index=24&t=0s) at GraphQL Asia Submit 2020. I was really excited about having a chance to contribute to the tools which are used not only by me but are powering applications used by billions of people on the planet. + +Having a keen interest in compiler design, the project idea of working on the [graphql.js](https://github.com/graphql/graphql-js/) reference parser looked really interesting to me. Fortunately being selected for the program, I am going to spend the summer of 2020 working on Graphql.js reference parser and [GraphiQL parser](https://github.com/graphql/graphiql/tree/main/packages/graphql-language-service-parser), to merge the two together. Graphql.js reference parser do not have streaming support or the best error recovery setup. The goal is to take inspiration from the GraphiQL parser and implement the streaming support in the reference parser so that it can be used by IDEs and other development tools. + +I spent the community bonding period getting to know both the people in the graphql community and getting myself familiar with the projects. I explored the code base and solved few minor bugs with the help of Ivan. The graphql.js reference parser which is well maintained has a really good code quality and readability which helped me gain it's understanding really quickly, on the other hand the GraphiQL parser with just 1000 lines of pure โ€œold is goldโ€ code base, implemented 3 years ago, looks difficult to grasp at first but with proper understanding is a very simple and cute state machine. + +Ivan and I also spent the time ideating about dividing the whole project into 3 milestones and breaking those into smaller goals. As the graphiql parser is not actively maintained and has zero test coverage it was really important to have the parser fully covered before we make any changes. Our goal was to enable the graphql.js parser be able to used by the IDEs and performance is a major factor we need to care about for that. Considering it, we also decided to do benchmarking of the GraphiQL parser. Ergo the first milestones includes reaching 100% test coverage for the GraphiQL parser and thorough benchmarking. + +The next steps will be to use the graphql.js reference parserโ€™s lexer in the GraphiQL parser and construct a plan to merge the parsers. Once the graphql.js parser reaches the capabilities as that of the GraphiQL parser, we can migrate the GraphiQL IDE to use graphql.js parser. Near to the completion of the first milestone I am really happy with the new thing I have learned under the mentorship of Ivan and really excited to work on the upcoming tasks. + +> โ€“ **Naman Kumar**, GSOC 2020, Graphql Foundation diff --git a/src/content/blog/2020-09-11-newsletter-august-2020.md b/src/content/blog/2020-09-11-newsletter-august-2020.md new file mode 100644 index 0000000000..7e252fc79e --- /dev/null +++ b/src/content/blog/2020-09-11-newsletter-august-2020.md @@ -0,0 +1,58 @@ +--- +title: GraphQL Foundation Monthly Newsletter August 2020 +tags: ["newsletter"] +layout: blog +date: 2020-09-11 +byline: GraphQL Foundation +permalink: /blog/2020-09-11-graphql-foundation-monthly-newsletter-august-2020 +--- + +[GraphQL](https://graphql.org) has redefined how developers work with APIs and client-server interactions. And as the community works hard to foster the growth and adoption of GraphQL, we are excited to share the work of the community and discussions via a new monthly GraphQL Foundation newsletter. + +All work on GraphQL and related projects, both big and small, is important to the growth and maturity of the project, which has already seen adoption from many of the worldโ€™s largest internet-scale companies. + +Many of these items are just in beginning discussions while some are further along. The goal of this monthly post is to summarize and share whatโ€™s top of mind for the community and help others get involved. These are only initial discussion topics. For notes on the full discussion during the monthly WG calls please refer to these [call notes](https://docs.google.com/document/d/1_jvxzCkI6VWo2KEobisoiW1n_irJ4dp0aD8Pq9UXuvw/edit#) + +## Updates + +### [GraphQL over WebSocket refresh, existing issues and security implications](https://github.com/enisdenjo/graphql-transport-ws/blob/master/PROTOCOL.md) +This discussion topic proposes taking on the following two critical items of security and bypassing the onConnect event. And possibly re-writing the WebSocket protocol from scratch with full RFCs + + +### [Tagged Type RFC](https://github.com/graphql/graphql-spec/pull/733) +This is an RFC for a new "Tagged" type to be added to GraphQL, to help address the input polymorphism feature gap. Originally proposed as the @oneField directive, the Tagged type has evolved into an entire new type in the type system, and is currently the lead proposal from the Input Unions Working Group. + +A Tagged type defines a list of named member fields each with an associated type (like the fields in Object and Input Object types); but with the stipulation that exactly one of these fields must be present (no more, no less). Depending on the types of the member fields, a Tagged type could be appropriate for input, output, or both, which is proving to be quite controversial; it's possible that the tagged type might be scoped to input only before release. The Tagged type was most recently introduced to the GraphQL Working Group in August and is undergoing feedback and revision before an expected update with the working group in October or November. + +If you have use-cases for input polymorphism, please take a look - feedback is very welcome. + +### [Standardize naming for Field coordinates](https://github.com/graphql/graphql-spec/issues/735) + +This PR proposes the following 2 RFCs +1. Formalizing the naming and definition of field coordinates (as discussed in [#735](https://github.com/graphql/graphql-spec/issues/735)) +2. Formalizing the way in which a Field Node (and list thereof) contained within a query document can be serialized as field coordinates + + +### [Adding generics to DocumentNode and Source to allow TypeScript type inference](https://github.com/graphql/graphql-js/issues/2727) + +[@dotansimha](https://github.com/dotansimha) from [The Guild](https://the-guild.dev) had recently implemented an improved version of DocumentNode, called TypedDocumentNode, that allows type generics for result type and variable type and contributed it to graphql-js. + +This improved version allows TypeScript to infer the types automatically when an object that matches the signature is used. + +You can learn more by reading about it on his [blog post](https://the-guild.dev/blog/typed-document-node). + +## In Other News + +* We recently welcomed the newest member of the GraphQL Foundation - [The Guild](https://the-guild.dev). [Here](https://foundation.graphql.org/members/) you can find the list of all current members of the foundation. +* [@hereisnaman](https://github.com/hereisnaman) successfully finished his Google Summer of Code (GSoC) project and is in the process of merging his[PR](https://github.com/graphql/graphql-js/pull/2770). Learn more about it [here](https://foundation.graphql.org/news/2020/06/30/google-summer-of-code-2020-participant-naman/). +* GraphQL was accepted to the Google Season of Docs (GSoD) and [@carolstran](https://github.com/carolstran) will be working on the [FAQ section](https://developers.google.com/season-of-docs/docs/participants/project-graphql-carolstran) of graphql.org +* [GraphQL over HTTP](https://github.com/graphql/graphql-over-http) was moved and is now under GraphQL Foundation +* [@lilianammmatos](https://github.com/lilianammmatos) and [@robrichard have](https://github.com/robrichard) made big progress on `@deferer & @stream`. Yo can learn more by watching their talk about it at the [GraphQL Summit](https://www.youtube.com/watch?v=icv_Pq06aOY): +* [@andimarek](https://github.com/andimarek) and [@eapache](https://github.com/eapache) started the [GraphQL Scalars](https://github.com/graphql/graphql-scalars/issues) initiative. You can also learn more by watching their talk about it at the [GraphQL Summit](https://www.youtube.com/watch?v=SRGTaYL3h9c). +* All WG recordings were published on [Youtube](https://www.youtube.com/channel/UCERcwLeheOXp_u61jEXxHMA). + +## Get Involved! + +Developers can get involved in the community and contribute to the project at [https://github.com/graphql](https://github.com/graphql). + +Organizations interested in becoming members of the GraphQL Foundation or the GraphQL Specification can learn more on our [member page](/foundation/join). If you have questions about membership, please send an email to [membership@graphql.org](mailto:membership@graphql.org). diff --git a/src/content/blog/2020-09-21-gsod-2020-carolyn.md b/src/content/blog/2020-09-21-gsod-2020-carolyn.md new file mode 100644 index 0000000000..a4cdc2f3e3 --- /dev/null +++ b/src/content/blog/2020-09-21-gsod-2020-carolyn.md @@ -0,0 +1,35 @@ +--- +title: "Google Season of Docs 2020 Participant: Carolyn Stransky" +tags: ["announcements"] +layout: blog +date: 2020-09-21 +byline: Carolyn Stransky +permalink: /blog/2020-09-21-gsod-carolyn-stransky +--- + +> [Carolyn Stransky](https://workwithcarolyn.com/) is a frontend developer and journalist based in Berlin, Germany. She is selected for [Google Season of Docs 2020](https://developers.google.com/season-of-docs) - GraphQL Foundation under the mentorship of [Ivan Goncharov](https://github.com/IvanGoncharov). In this post, she will share her plans on how she is going to spend the next couple of months contributing to the GraphQL Foundation. + +When I first heard about GraphQL three years ago, I thought that it was a programming language that constructed charts or plotted points on graphs. After building my first application with GraphQL, I would have categorized it as React-specific tooling, like Redux or React Router. Months later, I was still convinced it was just another Twitter-fueled programming trend. + +Looking back now, itโ€™s clear that my initial perceptions of GraphQL were incorrectโ€ฆ but they werenโ€™t uncommon. + +Learning a new technology comes with a lot of questions - and GraphQL is no exception. There are so many misconceptions about what GraphQL is and how it can be used. And I wasnโ€™t the only GraphQL newbie holding on to those same, inaccurate beliefs. + +After gaining a solid understanding of what GraphQL _really_ is, I started giving presentations at conferences about how difficult I found the learning process (literally the talk title was [Life is hard and so is learning GraphQL](https://workwithcarolyn.com/speaking/life-is-hard-and-so-is-learning-graphql)). This talk was cathartic, both for me and the audiences I was presenting to. Through my research, I also realized that while [graphql.org](https://graphql.org/) thoroughly covers the core concepts, it doesnโ€™t directly address some of the questions you face as a new learner. + +Fortunately, GraphQL has evolved enough that the information is out there and available. Itโ€™s more a matter of finding it because that information is scattered throughout various resources and programming communities. Thatโ€™s why I was excited to see a [Frequently Asked Questions](https://github.com/graphql/faq) (FAQ) page as one of the proposed Season of Docs projects. And as someone who has openly critiqued the GraphQL documentation, I wanted to play a part in actively improving them. + +There are two main goals behind this FAQ page: + +1. **Build a centralized resource for everyone**. As of now, much of the GraphQL ecosystem is focused on JavaScript due to the early ties with Relay and React. But GraphQL is for everyone, regardless of programming language, so this resource should be too. To ensure this, the FAQ content will be framework agnostic and vendor-neutral. +2. **Become a truly community-owned resource**. GraphQL was initially passed down from Facebook, but itโ€™s no longer maintained solely by Facebook. This should be a resource that everyone is welcome to contribute to and the community feels empowered to change and grow. That way, common questions wonโ€™t be left unanswered. + +The plan for exactly how to tackle this page will morph and evolve throughout the next two and a half months. My hope, though, is that keeping these goals in mind will lead to a new resource that will help both newcomers and seasoned GraphQL users thrive. + +In preparation for the documentation development part of Season of Docs, I became familiar with [the repository behind graphql.org](http://graphql.org) by triaging issues and reviewing open pull requests. I also helped with the [ongoing migration to Gatsby](https://github.com/graphql/graphql.github.io/issues/875) because Iโ€™ll be building the new FAQ page in Gatsby (there are still [open issues](https://github.com/graphql/graphql.github.io/pull/913#issuecomment-687325610) if you want to contribute). You can read more details about the community bonding phase [on my blog](https://workwithcarolyn.com/blog/community-bonding-gsod). + +The next step is to create the inaugural batch of FAQ content. This will be about 10-15 questions sourced from various areas of the Internet and in consultation with prominent GraphQL teachers. Once those are complete with thorough answers and built into the new Gatsby site, Iโ€™ll get feedback from the community (thatโ€™s you) and continue to iterate on the content, design, layout - everything! + +If you have opinions or would like to follow the projectโ€™s progress, [open an issue](https://github.com/graphql/graphql.github.io/issues/new) or [lurk around the website repository](https://github.com/graphql/graphql.github.io/). + +> โ€“ **Carolyn Stransky**, GSoD 2020, Graphql Foundation diff --git a/src/content/blog/2020-10-15-newsletter-september-2020.md b/src/content/blog/2020-10-15-newsletter-september-2020.md new file mode 100644 index 0000000000..2321a47875 --- /dev/null +++ b/src/content/blog/2020-10-15-newsletter-september-2020.md @@ -0,0 +1,60 @@ +--- +title: GraphQL Foundation Monthly Newsletter September 2020 +tags: ["newsletter"] +layout: blog +date: 2020-10-15 +byline: GraphQL Foundation +permalink: /blog/2020-10-15-graphql-foundation-monthly-newsletter-september-2020 +--- + +[GraphQL](https://graphql.org/) has redefined how developers work with APIs and client-server interactions. And as the community works hard to foster the growth and adoption of GraphQL, we are excited to share the work of the community and discussions via a new monthly GraphQL Foundation newsletter. + +All work on GraphQL and related projects, both big and small, is important to the growth and maturity of the project, which has already seen adoption from many of the worldโ€™s largest internet-scale companies. + +Many of these items are just in beginning discussions while some are further along. The goal of this monthly post is to summarize and share whatโ€™s top of mind for the community and help others get involved. These are only initial discussion topics. For notes on the full discussion during the monthly WG calls please refer to these [call notes](https://github.com/graphql/graphql-wg/blob/b1bfe0cee461d752146dc77e5c35a5e8d7921272/notes/2020-09-03.md#allowing-deprecation-of-inputs-10m-evan). + +## WG Updates: + +### Allowing deprecation of inputs + +Discussed whether the spec should allow deprecating an input that is required. Two concerns: deprecations are intended to be actionable; introspection does not include deprecated things by default - could break tooling that's no longer receiving deprecated inputs as part of their introspection results. +* Regarding case 1: not much of a blocker; the action from deprecation doesn't need to come from a schema (e.g. it could be switch to a new version/endpoint) +* Regarding case 2: much more of an issue because we could be breaking clients. My suggestion is to return required arguments even if they're deprecated - introspection should always give you what's necessary even if you say you don't want it. + +### @defer/@stream + +trying to answer the โ€œwhy we donโ€™t support Defer on field questionโ€. The reasoning for that is the original Apollo implementation was only on fields. We ran into problems in that itโ€™s difficult to coordinate + +### Querying Query query queries: "query" ambiguity + +The issue was first raised around the ambiguity of the term "query" as used in the GraphQL spec and ecosystem back in April. In just this title, we've referred to requesting, the Query type, a query operation, and a nested selection set; but that's just some of the ways we use this term, which can make it really hard for people new to GraphQL to get up to speed. Benjie has analyzed the use of the term, and has proposed a consistent set of terminology to use based on other terms used in the GraphQL spec already, this was discussed at the most recent Working Group. See [Spec PR #777](https://github.com/graphql/graphql-spec/pull/777). + +### Other topics discussed: + +* [TypeScript Migration Progress in graphql-js](https://github.com/graphql/graphql-js/issues/2104) +* [How to bootstrap graphql-js working group?](https://github.com/graphql/graphql-js/issues/2787) +* GitHub infrastructure for managing Working groups +* Custom Scalars subproject + +## Ecosystem Updates: + +Vscode-graphql, which uses the official GraphQL Language Server, has now become the official reference vscode extension! Like GraphiQL, we will work to ensure all new spec language features are introduced here. After making the announcement we gained 30,000 new users! [This blog post](https://rikki.dev/vscode-graphql-lsp-0-3-0/) will tell you more about all the new features. + +## In Other News... + +* Dgraph Labs launched [Slash GraphQL](https://www.producthunt.com/posts/slash-graphql), a product that can help you get a working GraphQL backend in minutes +* A new library for the WebSocket Protocol has been created. Read more [here](https://the-guild.dev/blog/graphql-over-websockets). +* The Guild has created a new [GraphQL-ESLint library](https://github.com/dotansimha/graphql-eslint) for linting your GraphQL schemas and operations with community and custom rules. Read more [here](https://the-guild.dev/blog/introducing-graphql-eslint). +* GraphQL CLI 4.1 has been released. [Read here](https://the-guild.dev/blog/whats-new-in-graphql-cli-4.1.0) about the new functionality. +* You can now consume WebHooks as GraphQL Subscriptions thanks to the new version of [GraphQL Mesh](https://github.com/urigo/graphql-mesh). Read more [here](https://the-guild.dev/blog/graphql-mesh-subscriptions). +* Hasuraโ€™s [Enterprise GraphQL Conf](https://hasura.io/enterprisegraphql/) is taking place October 20-22. There is still time to register +* AWS released a new webinar โ€œ[Build Modern Serverless Applications with GraphQL APIs and AWS AppSync](https://pages.awscloud.com/Build-Modern-Serverless-Applications-with-GraphQL-APIs-and-AWS-AppSync_2020_0918-MBL_OD.html?&trk=ep_card-el_a131L0000084iG3QAI&trkCampaign=NA-FY20-AWS-DIGMKT-WEBINAR-SERIES-September_2020_0918-MBL&sc_channel=el&sc_campaign=pac_2018-2019_exlinks_ondemand_OTT_evergreen&sc_outcome=Product_Adoption_Campaigns&sc_geo=NAMER&sc_country=mult)โ€ +* Catch up on recent talks from the [GraphQL Berlin](https://www.youtube.com/watch?v=4UDsR4z2KIY) Meetup +* [GraphQL Amsterdam](https://www.meetup.com/Amsterdam-GraphQL-Meetup/events/273901137/), [GraphQL Copenhagen](https://www.meetup.com/Copenhagen-GraphQL-Meetup-Group/events/273901144/), React GraphQL Academy and The Guild are collaborating on an online GraphQL Meetup. Check out the details [here](https://twitter.com/reactgqlacademy/status/1313789927834947585?s=20). +* Apollo created an [Error Handling Visualizer](https://apollo-visualizer.vercel.app/) tool, which provides an interactive playground to visualize the relationship between nullability and error handling in GraphQL, specifically with Apollo Client. + +## Get Involved! + +Developers can get involved in the community and contribute to the project at [https://github.com/graphql](https://github.com/graphql). + +Organizations interested in becoming members of the GraphQL Foundation or the GraphQL Specification can learn more on our [member page](/foundation/join). If you have questions about membership, please send an email to [membership@graphql.org](mailto:membership@graphql.org). diff --git a/src/content/blog/2020-11-12-newsletter-october-2020.md b/src/content/blog/2020-11-12-newsletter-october-2020.md new file mode 100644 index 0000000000..145d595450 --- /dev/null +++ b/src/content/blog/2020-11-12-newsletter-october-2020.md @@ -0,0 +1,55 @@ +--- +title: GraphQL Foundation Monthly Newsletter October 2020 +tags: ["newsletter"] +layout: blog +date: 2020-11-12 +byline: GraphQL Foundation +permalink: /blog/2020-11-12-graphql-foundation-monthly-newsletter-october-2020 +--- + +[GraphQL](https://graphql.org/) has redefined how developers work with APIs and client-server interactions. And as the community works hard to foster the growth and adoption of GraphQL, we are excited to share the work of the community and discussions via the monthly GraphQL Foundation newsletter. + +## WG Updates + +The [GraphQL Working Group](https://github.com/graphql/graphql-wg) meets monthly, and records [detailed minutes](https://github.com/graphql/graphql-wg/blob/master/notes/2020-10-01.md). You can also listen to the replays of GraphQL technical meetings on [YouTube](https://youtube.graphql.org). + +### [Query ambiguity: discussion of replacement terms](https://github.com/graphql/graphql-spec/issues/715) + +In the GraphQL ecosystem the term "query" can seem overloaded and ambiguous - sometimes it refers to the query operation type or a query operation, sometimes it refers to a GraphQL request or a GraphQL document containing operations, sometimes it refers to the contents of selection sets (as in "query reuse"), and sometimes it is used as a verb to refer to the generic act of querying a server for information. + +The WG discussed the best way to remove this ambiguity and how to move forward. + +### [Schema Coordinates RFC check in](https://github.com/graphql/graphql-spec/pull/746) + +The RFC is filed, and the next action is to turn this into an actual spec edit. + +### [Tagged type update](https://github.com/graphql/graphql-spec/pull/733) + +This is an RFC for a new "Tagged type" to be added to GraphQL. It replaces the ["@oneField directive"](https://github.com/graphql/graphql-spec/pull/586) proposal following feedback from the Input Unions Working Group. Please note that "Tagged type" is the working name, and may change if we come up with a better name for it. + +A Tagged type defines a list of named members each with an associated type (like the fields in Object types and Input Object types), but differs from Object types and Input Object types in that exactly one of those members must be present. + +The aim of the Tagged type is to introduce a form of polymorphism in GraphQL that can be symmetric between input and output. In output, it can generally be used as an alternative to Union (the differences will be outlined below). It goes beyond interfaces and unions in that it allows the same type to be specified more than once, which is particularly useful to represent filters such as this pseudocode `{greaterThan: Int} | {lessThan: Int}`. + +## In Other News... + +* [Vox Media evaluates Apollo GraphQL Federation and The Guild Schema Stitching](https://product.voxmedia.com/2020/11/2/21494865/to-federate-or-stitch-a-graphql-gateway-revisited) for the best GraphQL platform to manage โ€œa chorus of applications working together to publish modern mediaโ€ +* AWS released a โ€œ[Decision Guide to GraphQL Implementation](https://aws.amazon.com/graphql/guide/)โ€ +* [Netflix discusses](https://netflixtechblog.com/how-netflix-scales-its-api-with-graphql-federation-part-1-ae3557c187e2) how it scales its API with [Apollo GraphQL](https://www.apollographql.com/) Federation via its next generation architecture, โ€œStudio Edgeโ€, which uses federation as a critical element. +* [Building a GraphQL server with GraphQL Helix](https://dev.to/danielrearden/building-a-graphql-server-with-graphql-helix-2k44), a newly released library for building GraphQL APIs. The aim of GraphQL Helix is to allow developers to use new features that are not yet supported in other libraries and to prevent vendor lock-in. +* [GraphQL Tools v7 was released to deliver the next generation GraphQL API Gateway](https://the-guild.dev/blog/graphql-tools-v7), bringing a new way to federate multiple GraphQL servers, focusing on standard spec compliant GraphQ +* Weโ€™ve already announced that The Guild has recently joined the GraphQL Foundation and now [they wrote a blog post about it](https://the-guild.dev/blog/joining-graphql-foundation). Who will be the next to join? + +## Upcoming Events: + +* **Nov 17**: [GraphQL Contributor Days](https://www.graphql-meetup.com/#/graphql-contributor-days-november-2020), in partnership with [Hasura](https://hasura.io/), will give important updates to the community, and provide a forum for anyone using GraphQL to have direct access to core contributors and authors of various libraries and frameworks through live chat and an online broadcast. +* **Dec 2**: [Relay Meetup](https://relaymeetup.com/) is a global, online meetup on Relay, the GraphQL client. This event will feature a conversation about the @defer and @stream directives and why it should be brought to the official GraphQL specification. +* **Dec 7-8**: [GraphQL Galaxy Conference](https://graphqlgalaxy.com) is a new remote conference focusing on all things[ GraphQL](https://twitter.com/search?q=%23GraphQL&src=hashtag_click). +* Missed Apollo Day on Nov. 10th? Check out some of the great talks on [Twitch](https://www.twitch.tv/apollographql). + +## Get Involved! + +Developers can get involved in the community and contribute to the project at [https://github.com/graphql](https://github.com/graphql). + +Organizations interested in becoming members of the GraphQL Foundation or the GraphQL Specification can learn more on our [member page](/foundation/join). If you have questions about membership, please send an email to [membership@graphql.org](mailto:membership@graphql.org). + diff --git a/src/content/blog/2020-12-08-defer-stream.md b/src/content/blog/2020-12-08-defer-stream.md new file mode 100644 index 0000000000..b4a06e6674 --- /dev/null +++ b/src/content/blog/2020-12-08-defer-stream.md @@ -0,0 +1,138 @@ +--- +title: "Improving Latency with @defer and @stream Directives" +tags: ["announcements"] +layout: blog +date: 2020-12-08 +byline: Rob Richard, Liliana Matos +permalink: /blog/2020-12-08-improving-latency-with-defer-and-stream-directives +--- + +> Rob Richard and Liliana Matos are front-end engineers at [1stDibs.com](https://www.1stdibs.com). They have been working with the GraphQL Working Group as champions of the the `@defer` and `@stream` directives. + +The `@defer` and `@stream` directives have been a much anticipated set of features ever since Lee Byron first talked about it at [GraphQL Europe 2016](https://youtu.be/ViXL0YQnioU?t=769). For most of 2020, we have been working with the GraphQL Working Group to standardize this feature. It is now a Stage 2 proposal, but to advance further, we are looking to the GraphQL community to try using these directives and provide feedback. We have released experimental versions of `GraphQL.js` and `express-graphql`. They are published to npm under `graphql@experimental-stream-defer` and `express-graphql@experimental-stream-defer`. We encourage everyone interested in this feature to try out these releases and let us know how it goes in the [issue created for feedback](https://github.com/graphql/graphql-js/issues/2848). Read on to find out more about what this proposal offers. + +One of the disadvantages of GraphQLโ€™s request/response model is that the GraphQL response is not returned to clients until the entire request has finished processing. However, not all requested data may be of equal importance, and in some use cases it may be possible for applications to act on a subset of the requested data. An application can speed up its time-to-interactive if the GraphQL server can send the most important data as soon as itโ€™s ready. The new `@defer` and `@stream` directives allow GraphQL servers to do exactly that by returning multiple payloads from a single GraphQL response. + +The `@defer` directive can be applied to fragment spreads and inline fragments. It is a declarative way for developers to mark parts of a query as non-essential for immediate return. + +Hereโ€™s an example of the `@defer` directive: + +#### Request + +```graphql +query { + person(id: "cGVvcGxlOjE=") { + name + ...HomeworldFragment @defer(label: "homeworldDefer") +} + +fragment HomeworldFragment on Person { + homeworld { + name + } +} +``` + +#### Response + +**Payload 1** + +```json +{ + "data": { + "person": { + "name": "Luke Skywalker" + } + }, + "hasNext": true +} +``` + +**Payload 2** + +```json +{ + "label": "homeworldDefer", + "path": ["person"], + "data": { + "homeworld": { + "name": "Tatooine" + } + }, + "hasNext": false +} +``` + +When the GraphQL execution engine encounters the `@defer` directive, it will fork execution and begin to resolve those fields asynchronously. While the deferred payload is still being prepared, the client can receive and act on the initial payload. This is most useful when the deferred data is large, expensive to load, or not on the critical path for interactivity. + +Similar to `@defer`, the `@stream` directive also allows the client to receive data before the entire result is ready. `@stream` can be used on list fields. Hereโ€™s an example of the `@stream` directive: + +#### Request + +```graphql +query { + person(id: "cGVvcGxlOjE=") { + name + films @stream(initialCount: 2, label: "filmsStream") { + title + } +} +``` + +#### Response + +**Payload 1** + +```json +{ + "data": { + "person": { + "name": "Luke Skywalker", + "films": [ + { "title": "A New Hope" }, + { "title": "The Empire Strikes Back" } + ] + } + }, + "hasNext": true +} +``` + +**Payload 2** + +```json +{ + "label": "filmsStream", + "path": ["person", "films", 2], + "data": { + "title": "Return of the Jedi" + }, + "hasNext": true +} +``` + +**Payload 3** + +```json +{ + "label": "filmsStream", + "path": ["person", "films", 3], + "data": { + "title": "Revenge of the Sith" + }, + "hasNext": false +} +``` + +When the GraphQL execution engine encounters the `@stream` directive, it will resolve as many list items specified by the `initialCount` argument. The rest will be resolved asynchronously. This is especially useful for an interface where only a few elements can be rendered above the fold. The client can render these elements as soon as possible while the server is still resolving the rest of the data. + +While the GraphQL specification doesnโ€™t specify transport protocols, we expect the most common transport for queries with `@defer`/`@stream` to be HTTP with chunked transfer encoding. This allows a GraphQL server to keep a standard HTTP connection open, while streaming each payload to the client as soon as itโ€™s ready. It has low overhead, has been supported by browsers for decades, and can work easily with most infrastructure. + +You can learn more about these directives at: + +* [The @defer/@stream RFC](https://github.com/graphql/graphql-spec/blob/master/rfcs/DeferStream.md) +* [The proposed spec edits](https://github.com/graphql/graphql-spec/pull/742) +* [The GraphQL Incremental Delivery over HTTP RFC](https://github.com/graphql/graphql-over-http/blob/master/rfcs/IncrementalDelivery.md) +* [Our talk at GraphQL Summit 2020](https://www.youtube.com/watch?v=icv_Pq06aOY) + +> โ€“ **Rob Richard**, **Liliana Matos**, Front-End Engineering, 1stDibs.com diff --git a/src/content/blog/2021-02-15-newsletter-february-2021.md b/src/content/blog/2021-02-15-newsletter-february-2021.md new file mode 100644 index 0000000000..c61dc30593 --- /dev/null +++ b/src/content/blog/2021-02-15-newsletter-february-2021.md @@ -0,0 +1,65 @@ +--- +title: GraphQL Foundation Monthly Newsletter February 2021 +tags: ["newsletter"] +layout: blog +date: 2021-02-15 +byline: GraphQL Foundation +permalink: /blog/2021-02-15-graphql-foundation-monthly-newsletter-february-2021 +--- + +[GraphQL](https://graphql.org/) has redefined how developers work with APIs and client-server interactions. And as the community works hard to foster the growth and adoption of GraphQL, we are excited to share the work of the community and discussions via the monthly GraphQL Foundation newsletter. + +GraphQL reached new heights in 2020 and is only poised to continue itโ€™s meteoric rise in 2021. Thank you again for your involvement in this project and your support of the GraphQL Foundation. We are excited for another productive year! + +## Working Group Updates + +### [Advancing no introspection at root of Subscription operation ](https://github.com/graphql/graphql-spec/pull/776) + +The group decided to disallow since it doesnโ€™t work in the reference implementation. During the graphql-js implementation some issues were discovered around fragments that are being fixed. Read more [here](https://github.com/graphql/graphql-spec/pull/776). + +### [Default value coercion update](https://github.com/graphql/graphql-spec/pull/793) + +Currently this is a case where infinite loops can occur. The WG is working to figure out how to avoid this in the spec [here](https://github.com/graphql/graphql-spec/pull/793#issuecomment-738736539). + +### [Defer/stream updates](https://github.com/graphql/graphql-spec/blob/main/rfcs/DeferStream.md) + +The official experimental branch of graphql-js/express-graphql. The WG is working to update the initialCount, validation rule in GraphQL.js, and the spec. + +### Schema Coordinates Spec + +The RFC and spec edit have been out for a few months with credit due to everyone who has reviewed those. Last time the field arguments were the discussion there were two main contenders: `Query.business(id:)` versus `Query.business.id`. The WG is looking for consensus. The discussion summarized can be found [here](https://github.com/graphql/graphql-spec/pull/746#issuecomment-740914167). + +### _Typename is not valid at subscription root + +`__typename` does not return an async iterator and has been deemed not useful at the root of a subscription operation, yet it is allowed by GraphQL validation. This field has caused some confusion in the community, and the WG has proposed explicitly validating it to prevent the field to catch these issues earlier. + +### Default value coercion + +There's inconsistency in the handling of default values between user-supplied defaults (i.e. variables in operation documents) and schema-supplied defaults (for arguments or input object fields). The WG discussed ways in which a poorly constructed GraphQL schema can break the type safety guarantees of GraphQL and proposed addressing this by making schema defaults operate in a more expected manner. Next steps are to get an implementation finished so that we can advance the spec changes to stage 2. + +## In Other News... + +* [Federated GraphQL @ Walmart](https://medium.com/walmartglobaltech/federated-graphql-walmart-bfc85c2553de) +* [Apollo Extends Explorer GraphQL IDE to Development Environments](https://thenewstack.io/apollo-extends-explorer-graphql-ide-to-development-environments/) +* [How Netflix Scales its API with GraphQL Federation (Part 2)](https://netflixtechblog.com/how-netflix-scales-its-api-with-graphql-federation-part-2-bbe71aaec44a) +* [Hasura launched a 3 week series of articles, live-streams, and A.M.As for GraphQL beginners and experts.](https://hasura.io/blog/graphql-january-with-hasura/) +* [Prisma announced Nexus 1.0: A Major Release for Type-Safe, Code-First GraphQL APIs](https://www.prisma.io/blog/announcing-the-release-of-nexus-schema-v1-b5eno5g08d0b) +* ZDNet: [2021 Technology trend review: Cloud, Kubernetes, and GraphQL](https://zdnet.com/article/2021-technology-trend-review-part-1-blockchain-cloud-open-source/) +* TechTarget: [Enterprise application trends that will impact 2021: GraphQL vs. REST choice steers microservices development](https://searchapparchitecture.techtarget.com/feature/Enterprise-application-trends-that-will-impact) +* [Top 20 GraphQL Jobs Postings](https://www.dice.com/jobs/q-GraphQL-jobs) +* GraphQL Galaxyโ€™s talk uploaded online, [check out the Keynote](https://youtu.be/mfg6ZJ2GGRc)! +* The [new Schema Stitching Handbook was released](https://the-guild.dev/blog/a-new-year-for-schema-stitching), together with examples and video walkthrough with everything you need to know about Federated/Distributed GraphQL Gateways +* [The Guild announced GraphQL Modules 1.0](https://the-guild.dev/blog/graphql-modules-v1) as a major rewrite after 3 years of experience. The new version includes better simplicity and performance +* With [GraphQL Mesh](https://graphql-mesh.com/) you can now wrap any existing API and add reactivity to it - check out [this blog post about how to do it](https://the-guild.dev/blog/add-reactivity-to-an-existing-source) +* [spotify-graphql is approaching v2.0](https://twitter.com/whereischarly/status/1349467930166239232?s=20) as a complete rewrite, instead of manual code it uses GraphQL Mesh under the hood to generate the API +* Software Engineering Daily: [Podcast with DGraphโ€™s Manit Jain](https://softwareengineeringdaily.com/2021/01/19/dgraph-native-graphql-database-with-manish-jain/) + +## Upcoming Events: + +* Asiaโ€™s largest [GraphQL conference](https://graphql.asia/) is back! February 24th & 25th + +## Get Involved! + +Developers can get involved in the community and contribute to the project at [https://github.com/graphql](https://github.com/graphql). + +Organizations interested in becoming members of the GraphQL Foundation or the GraphQL Specification can learn more on our [member page](/foundation/join/). If you have questions about membership, please send an email to [membership@graphql.org](mailto:membership@graphql.org). diff --git a/src/content/blog/2021-03-31-newsletter-march-2021.md b/src/content/blog/2021-03-31-newsletter-march-2021.md new file mode 100644 index 0000000000..ee57badfe0 --- /dev/null +++ b/src/content/blog/2021-03-31-newsletter-march-2021.md @@ -0,0 +1,59 @@ +--- +title: GraphQL Foundation Monthly Newsletter March 2021 +tags: ["newsletter"] +layout: blog +date: 2021-03-31 +byline: GraphQL Foundation +permalink: /blog/2021-03-31-graphql-foundation-monthly-newsletter-march-2021 +--- + +[GraphQL](https://graphql.org/) has redefined how developers work with APIs and client-server interactions. And as the community works hard to foster the growth and adoption of GraphQL, we are excited to share the work of the community and discussions via the monthly GraphQL Foundation newsletter. + +GraphQL reached new heights in 2020 and is only poised to continue itโ€™s meteoric rise in 2021. Thank you again for your involvement in this project and your support of the GraphQL Foundation. We are excited for another productive year! + +## Working Group Updates + +**GraphQL Foundation marketing committee** + +The newly created GraphQL Foundation marketing committee is responsible for coordinating marketing activities in support of the [Foundation](https://foundation.graphql.org/) and the [projects](https://github.com/graphql). They meet regularly, and welcome participation from Foundation and community members. + +The meeting agendas and minutes are open and available in [meetings/](https://github.com/graphql/marketing/blob/main/meetings). We generally meet on the fourth Thursday of the month at 9am PT. To be added to the recurring invite, please contact operations@graphql.org. + +**Allowing fields to diverge more** + +This is one of the most complicated validation rules, which is about overlapping fields and not forcing to ensure every field is unique in a query, especially if you compose queries. They have to be merged together and ensure the field is only executed once. There's a rule to ensure this merging can be done. + +The working group has agreed to add prose or a non-normative note to this validation rule to explain this. + +**Operation Expressions** + +Operation expressions is an extension to the Schema Coordinates syntax that allows for a host of new use cases. Outlined [here](https://github.com/graphql/graphql-spec/pull/823) are some of the use cases that have been discussed so far, and have iterated on the syntax, but everything in this is very much in flux. + +**Directions via introspection report** + +Custom directives are not currently introspectable. This has been a big discussion over the years. Recently, graphql-java has implemented (almost merged) the ability to query directive by introspection. + +**Oneof Input Objects and Oneof Fields** + +Oneof Input Objects are a special variant of Input Objects where the type system asserts that exactly one of the fields must be set and non-null, all others being omitted. This is represented in introspection with the `__Type.oneField: Boolean` field, and in SDL via the `@oneOf` directive on the input object. The working group has agreed to Contribute syntax thoughts and on the RFC itself, and write an implementation in GraphQL.js + +## In Other News... + +* ZDNet: [Databases, graphs, and GraphQL: The past, present, and future](https://www.zdnet.com/article/databases-graphs-and-graphql-past-present-and-future/) +* ZDNet: [Hasura connects GraphQL to the REST of the world](https://www.zdnet.com/article/hasura-connects-graphql-to-the-rest-of-the-world/) +* ADT Mag: [Netflix Open Sources GraphQL for Spring Boot](https://adtmag.com/articles/2021/02/17/netflix-open-sources-graphql-for-spring-boot.aspx) +* ProgrammableWeb: [Facebook Adds Relay Hooks for Improved GraphQL Data Fetching](https://www.programmableweb.com/news/facebook-adds-relay-hooks-improved-graphql-data-fetching/brief/2021/03/11) +* [Dgraph Labs Launches Slash GraphQL, Industryโ€™s First GraphQL-Native Database Backend-As-A-Service](https://www.globenewswire.com/news-release/2020/09/10/2091563/0/en/Dgraph-Labs-Launches-Slash-GraphQL-Industry-s-First-GraphQL-Native-Database-Backend-As-A-Service.html) +* [How Square accelerates product development with Apollo GraphQL](https://www.apollographql.com/blog/how-square-accelerates-product-development-with-apollo-graphql/) +* [Netflix: Beyond REST Rapid Development with GraphQL Microservices](https://netflixtechblog.com/beyond-rest-1b76f7c20ef6) +* [The Guild announce early access to GraphQL Hive - A new Schema Registry for your GraphQL Workflows](https://the-guild.dev/blog/graphql-hive-preview) + +## Upcoming Events: + +* The GraphQL community will come together once again for [GraphQL Summit](https://summit.graphql.com/) April 7th & 8th + +## Get Involved! + +Developers can get involved in the community and contribute to the project at [https://github.com/graphql](https://github.com/graphql). + +Organizations interested in becoming members of the GraphQL Foundation or the GraphQL Specification can learn more on our [member page](https://foundation.graphql.org/join). If you have questions about membership, please send an email to membership@graphql.org. diff --git a/src/content/blog/2021-04-30-newsletter-april-2021.md b/src/content/blog/2021-04-30-newsletter-april-2021.md new file mode 100644 index 0000000000..fe4631ef75 --- /dev/null +++ b/src/content/blog/2021-04-30-newsletter-april-2021.md @@ -0,0 +1,60 @@ +--- +title: GraphQL Foundation Monthly Newsletter April 2021 +tags: ["newsletter"] +layout: blog +date: 2021-04-30 +byline: GraphQL Foundation +permalink: /blog/2021-04-30-graphql-foundation-monthly-newsletter-april-2021 +--- + +# GraphQL Foundation Monthly Newsletter April 2021 + +[GraphQL](https://graphql.org/) has redefined how developers work with APIs and client-server interactions. And as the community works hard to foster the growth and adoption of GraphQL, we are excited to share the work of the community and discussions via the monthly GraphQL Foundation newsletter. + +GraphQL reached new heights in 2020 and is only poised to continue itโ€™s meteoric rise in 2021. Thank you again for your involvement in this project and your support of the GraphQL Foundation. We are excited for another productive year! + +## Working Group Updates + +### GraphQL Foundation marketing committee + +The newly created GraphQL Foundation marketing committee is responsible for coordinating marketing activities in support of the [Foundation](https://foundation.graphql.org/) and the [projects](https://github.com/graphql). They meet regularly, and welcome participation from Foundation and community members. + +The meeting agendas and minutes are open and available in [meetings/](https://github.com/graphql/marketing/blob/main/meetings). We generally meet on the fourth Thursday of the month at 9am PT. To be added to the recurring invite, please contact [operations@graphql.org](mailto:operations@graphql.org). + +### Spec cut + +There are few more final phase proposals still waiting on review, as well as updating the version of the legal text). The next step will include having the TSC take a formal vote to cut the draft. + +### TypeScript migration for GraphQL.js + +Representing almost 6 million downloads per week. TypeScript is in need of additional clean up, including GraphQLList and GraphQLNonNull. The WG decided to drop Flow types, and have a PR for converting to TypeScript. The plan is to incorporate the fixes into the main release, which is very close to being done. Once finished, it will be added to release 16.0.0-alpha.1. Once that is complete it will merge the PR and convert to TypeScript. + +### Adding descriptions to queries and fragments + +The purpose of this discussion is to add necessary comments for various business use cases. As of now we have to parse SDL data and it's problematic when people add other comments. The WG is working on the best way to solve this issue. + +### Schema introspection extensions + +First implemented by GraphQL Java,then some issues were found and it was discovered there was some additional work to be done before turning it into an RFC. The Working Group is planning to address these issues shortly. + + +## In Other News... + +* [Dgraph announces v21.03 - Resilient Rocket Release](https://dgraph.io/blog/post/v2103-release/) +* Read: [GraphQL API Security best practices with AWS AppSync and Amplify](https://github.com/danilop/graphql-api-security-with-aws-appsync-and-amplify) + * AWS AppSync is a fully managed service which allows developers to deploy and interact with serverless scalable GraphQL backends on AWS. +* [Neo4j announces GraphQL Library Beta Release](https://medium.com/neo4j/announcing-the-neo4j-graphql-library-beta-99ae8541bbe7) +* TechTarget: [Dgraph GraphQL database users detail graph use cases](https://searchdatamanagement.techtarget.com/news/252499595/Dgraph-GraphQL-database-users-detail-graph-use-cases) +* Devops.com: [Apollo GraphQL Makes Federated Server More Accessible](https://devops.com/apollo-graphql-makes-federated-server-more-accessible/) +* The New Stack: [Why Shopify Favors GraphQL over REST for Its APIs](https://thenewstack.io/why-shopify-favors-graphql-over-rest-for-its-apis/) +* Code Story: [E17: Matt Debergalis, Apollo GraphQL](https://codestory.co/podcast/e17-matt-debergalis-apollo-graphql/) + +## Upcoming Events: + +* [Hasura Con '21: The Big Hasura User Conference](https://hasura.io/events/hasura-con-2021/) The 2021 installment of Hasura Con will take place on June 23rd and 24th. The event brings together users from all over the world to celebrate all things Hasura and will feature top-notch speakers and workshops. Sign up today to attend Hasura Con '21 or submit a talk proposal to share your knowledge at the event. + +## Get Involved! + +Developers can get involved in the community and contribute to the project at [https://github.com/graphql](https://github.com/graphql). + +Organizations interested in becoming members of the GraphQL Foundation or the GraphQL Specification can learn more on our [member page](https://foundation.graphql.org/join). If you have questions about membership, please send an email to membership@graphql.org. diff --git a/src/content/code/code.md b/src/content/code/code.md new file mode 100644 index 0000000000..623d31b891 --- /dev/null +++ b/src/content/code/code.md @@ -0,0 +1,779 @@ +--- +title: Code +layout: code +permalink: /code/ +--- + +GraphQL ๅทฒๆœ‰ๅคš็ง็ผ–็จ‹่ฏญ่จ€ๆ”ฏๆŒใ€‚ไธ‹่กจๅŒ…ๅซไธ€ไบ›ๆต่กŒ็š„ๆœๅŠก็ซฏๆก†ๆžถใ€ๅฎขๆˆท็ซฏๅบ“ใ€ๆœๅŠกๅ’Œๅ…ถไป–ๆœ‰็”จ็š„ๅ†…ๅฎนใ€‚ + +## ๆœๅŠก็ซฏๅบ“ + +้™คไบ† GraphQL [JavaScript ๅ‚่€ƒๅฎž็Žฐ](#javascript)๏ผŒ่ฟ˜ๆœ‰ๅ…ถไป–ๆœๅŠก็ซฏๅบ“๏ผš + +- [C# / .NET](#c#-/-.net) +- [Clojure](#clojure) +- [D](#d) +- [Elixir](#elixir) +- [Erlang](#erlang) +- [Go](#go) +- [Groovy](#groovy) +- [Haskell](#haskell) +- [Java](#java) +- [JavaScript](#javascript) +- [Kotlin](#kotlin) +- [Perl](#perl) +- [PHP](#php) +- [Python](#python) +- [Ruby](#ruby) +- [Rust](#rust) +- [Scala](#scala) +- [Swift](#swift) +- [OCaml / Reason](#ocaml-reason) + +### C# / .NET + +#### [graphql-dotnet](https://github.com/graphql-dotnet/graphql-dotnet)๏ผš.NET ็š„ GraphQL ๅฎž็Žฐ + +```csharp +using System; +using GraphQL; +using GraphQL.Types; + +public class Program +{ + public static void Main(string[] args) + { + var schema = Schema.For(@" + type Query { + hello: String + } + "); + var json = schema.Execute(_ => + { + _.Query = "{ hello }"; + _.Root = new { Hello = "Hello World!" }; + }); + Console.WriteLine(json); + } +} +``` + + - [graphql-net](https://github.com/ckimes89/graphql-net)๏ผš่ฝฌๆข GraphQL ๅˆฐ IQueryable + - [Entity GraphQL](https://github.com/lukemurray/EntityGraphQL)๏ผš้’ˆๅฏน .NET Core ็š„ GraphQL ๅบ“ใ€‚็ผ–่ฏ‘ไธบ IQueryable ไปฅ่ฝปๆพๅœฐไปŽ็Žฐๆœ‰็š„ๆ•ฐๆฎๆจกๅž‹๏ผˆไพ‹ๅฆ‚ไปŽ Entity Framework ๆ•ฐๆฎๆจกๅž‹๏ผ‰ไธญๆšด้œฒๅ‡บ schema + - [DotNetGraphQLQueryGen](https://github.com/lukemurray/DotNetGraphQLQueryGen)๏ผšไปŽ GraphQL schema ็”Ÿๆˆ็ฑป๏ผŒไปฅๅœจ dotnet ไธญ่ฟ›่กŒ็ฑปๅž‹ๅฎ‰ๅ…จ็š„ๆŸฅ่ฏข็š„ .NET Core ๅบ“ + - [Hot Chocolate](https://github.com/ChilliCream/hotchocolate)๏ผš้’ˆๅฏน .NET core ๅ’Œ .NET classic ็š„ GraphQL ๆœๅŠกๅ™จ + - [NGraphQL](https://github.com/rivantsov/starwars)๏ผš็”จไบŽ .NET Core ๅ’ŒๅฎŒๆ•ดๆก†ๆžถ็š„ GraphQL ๆœๅŠกๅ™จ + +### Clojure + +#### [alumbra](https://github.com/alumbra/alumbra) + +ไธ€ๅฅ— Clojure ็š„ GraphQL ๅฏๅค็”จ็ป„ไปถ๏ผŒๆปก่ถณ [alumbra.spec](https://github.com/alumbra/alumbra.spec) ่ง„่Œƒ่ฆๆฑ‚็š„ๆ•ฐๆฎ็ป“ๆž„ใ€‚ + +```clojure +(require '[alumbra.core :as alumbra] + '[claro.data :as data]) + +(def schema + "type Person { name: String!, friends: [Person!]! } + type QueryRoot { person(id: ID!): Person, me: Person! } + schema { query: QueryRoot }") + +(defrecord Person [id] + data/Resolvable + (resolve! [_ _] + {:name (str "Person #" id) + :friends (map ->Person (range (inc id) (+ id 3)))})) + +(def QueryRoot + {:person (map->Person {}) + :me (map->Person {:id 0})}) + +(def app + (alumbra/handler + {:schema schema + :query QueryRoot})) + +(defonce my-graphql-server + (aleph.http/start-server #'app {:port 3000})) +``` + +```bash +$ curl -XPOST "http://0.0.0.0:3000/" -H'Content-Type: application/json' -d'{ + "query": "{ me { name, friends { name } } }" +}' +{"data":{"me":{"name":"Person #0","friends":[{"name":"Person #1"},{"name":"Person #2"}]}}} +``` + +#### [graphql-clj](https://github.com/tendant/graphql-clj) + +ไธ€ไธชๆไพ› GraphQL ๅฎž็Žฐ็š„ Clojure ๅบ“ใ€‚ + +ๅฏไปฅๆ‰ง่กŒไธ€ไธช \`hello world\` GraphQL ๆŸฅ่ฏข็š„ \`graphql-clj\` ไปฃ็ ๅฆ‚ไธ‹๏ผš + +```clojure + +(def schema "type QueryRoot { + hello: String + }") + +(defn resolver-fn [type-name field-name] + (get-in {"QueryRoot" {"hello" (fn [context parent & rest] + "Hello world!")}} + [type-name field-name])) + +(require '[graphql-clj.executor :as executor]) + +(executor/execute nil schema resolver-fn "{ hello }") +``` + +#### [lacinia](https://github.com/walmartlabs/lacinia) + +ไธ€ๅฅ— GraphQL ่ง„่Œƒ็š„ๅฎŒๆ•ดๅฎž็Žฐ๏ผŒ่‡ดๅŠ›ไบŽ็ปดๆŠคๅฏน่ง„่Œƒ็š„ๅค–้ƒจๅ…ผๅฎนใ€‚ + +### D + + - [graphqld](https://github.com/burner/graphqld)๏ผšD ็ผ–็จ‹่ฏญ่จ€็š„ GraphQL ๅฎž็Žฐใ€‚ + +### Elixir + + - [absinthe](https://github.com/absinthe-graphql/absinthe)๏ผšElixir ็š„ GraphQL ๅฎž็Žฐใ€‚ + - [graphql-elixir](https://github.com/graphql-elixir/graphql)๏ผšไธ€ไธช Facebook GraphQL ็š„ Elixir ๅฎž็Žฐใ€‚ + +### Erlang + + - [graphql-erlang](https://github.com/shopgun/graphql-erlang)๏ผšErlang ็š„ GraphQL ๅฎž็Žฐใ€‚ + +### Go + + - [graphql-go](https://github.com/graphql-go/graphql)๏ผšไธ€ไธช Go/Golang ็š„ GraphQL ๅฎž็Žฐใ€‚ + - [graph-gophers/graphql-go](https://github.com/graph-gophers/graphql-go)๏ผšไธ€ไธชๆดป่ทƒ็š„ Golang GraphQL ๅฎž็Žฐใ€‚ + - [99designs/gqlgen](https://github.com/99designs/gqlgen)๏ผš็”ŸๆˆๅŸบไบŽ graphql ็š„ๆœๅŠกๅ™จ็š„ๅบ“ใ€‚ + - [graphql-relay-go](https://github.com/graphql-go/relay)๏ผšไธ€ไธช็”จไบŽๅธฎๅŠฉๆž„ๅปบ graphql-go ๆœๅŠกๅ™จ็š„ Go/Golang ๅบ“๏ผŒๆ”ฏๆŒ react-relayใ€‚ + - [samsarahq/thunder](https://github.com/samsarahq/thunder)๏ผšๅฏ่ฝปๆพ่ฟ›่กŒ schema ๆž„ๅปบใ€ๅฎžๆ—ถๆŸฅ่ฏขๅ’Œๆ‰นๅค„็†็š„ GraphQL ๅฎž็Žฐใ€‚ + - [appointy/jaal](https://github.com/appointy/jaal)๏ผšๅœจ Go ไธญๅผ€ๅ‘็ฌฆๅˆ่ง„่Œƒ็š„ GraphQL ๆœๅŠกๅ™จใ€‚ + +### Groovy + +#### [gorm-graphql](https://github.com/grails/gorm-graphql/) + +**ๆ ธๅฟƒๅบ“** โ€”โ€” GORM GraphQL ๅบ“ๆไพ›ไบ†ๅŸบไบŽไฝ ็š„ GORM ๅฎžไฝ“ๆฅ็”Ÿๆˆ GraphQL schema ็š„ๅŠŸ่ƒฝใ€‚้™คไบ†่ƒฝๅคŸๅฐ†ๅŸŸ็ฑปๆ˜ ๅฐ„ๅˆฐ GraphQL schema ไน‹ๅค–๏ผŒๆ ธๅฟƒๅบ“่ฟ˜ๆไพ›ไบ†้€š่ฟ‡ schema ็š„ๆ‰ง่กŒๆฅๆŸฅ่ฏขใ€ๆ›ดๆ–ฐๅ’Œๅˆ ้™คๆ•ฐๆฎ็š„โ€œๆ•ฐๆฎ่ฎฟ้—ฎ่€…โ€็š„้ป˜่ฎคๅฎž็Žฐใ€‚ + +**Grails ๆ’ไปถ** โ€”โ€” ไฝœไธบๅฏนๆ ธๅฟƒๅบ“็š„่กฅๅ……๏ผŒGORM GraphQL Grails ๆ’ไปถ่ƒฝๅคŸ๏ผš + +- ๆไพ›ไธ€ไธช้€š่ฟ‡ HTTP ๆฅๆŽฅๆ”ถๅ’Œๅ“ๅบ” GraphQL ่ฏทๆฑ‚็š„ๆŽงๅˆถๅ™จใ€‚ +- ๅœจๅฏๅŠจๆ—ถไฝฟ็”จ spring bean ้…็ฝฎ็”Ÿๆˆ schema๏ผŒไปฅไพฟไบŽๆ‰ฉๅฑ•ใ€‚ +- ๅŒ…ๅซไธ€ไธชๅœจๅผ€ๅ‘็Žฏๅขƒไธ‹้ป˜่ฎคๅฏ็”จ็š„ [GraphiQL](https://github.com/graphql/graphiql) ๆต่งˆๅ™จใ€‚่ฟ™ไธ€ๆต่งˆๅ™จๅฏไปฅๅœจ /graphql/browser ไธ‹่ฎฟ้—ฎใ€‚ +- ไฝฟ็”จ Grails ๆไพ›็š„ๆ•ฐๆฎ็ป‘ๅฎš่ฆ†็›–้ป˜่ฎค็š„ๆ•ฐๆฎ็ป‘ๅฎš +- ๆไพ›ไธ€ไธช [็‰น่ดจ](https://grails.github.io/gorm-graphql/latest/api/org/grails/gorm/graphql/plugin/testing/GraphQLSpec.html) ไปฅไฝฟไฝ ๆ›ดๅฎนๆ˜“ๅฏน GraphQL ๅ…ฅๅฃ็ซฏ็‚น่ฟ›่กŒ้›†ๆˆๆต‹่ฏ• + +ๆ›ดๅคšไฟกๆฏ่ฏทๆŸฅ็œ‹ [ๆ–‡ๆกฃ](https://grails.github.io/gorm-graphql/latest/guide/index.html)ใ€‚ + +#### [GQL](https://grooviter.github.io/gql/) + +GQL ๆ˜ฏไธ€ไธชๅœจ Groovy ไธญไฝฟ็”จ GraphQL ็š„ๅบ“ใ€‚ + +### Haskell + +#### [Morpheus GraphQL](https://github.com/morpheusgraphql/morpheus-graphql) + +็”จไบŽๆž„ๅปบ GraphQL API ็š„ Haskell ๅบ“ใ€‚ + +ไธ€ไธชไฝฟ็”จ `morpheus-graphql` ็š„ hello world ็คบไพ‹๏ผš + +```graphql +# schema.gql +""" +A supernatural being considered divine and sacred +""" +type Deity { + name: String! + power: String @deprecated(reason: "no more supported") +} +type Query { + deity(name: String! = "Morpheus"): Deity! +} +``` + +```haskell +{-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE DuplicateRecordFields #-} +{-# LANGUAGE FlexibleContexts #-} +{-# LANGUAGE FlexibleInstances #-} +{-# LANGUAGE MultiParamTypeClasses #-} +{-# LANGUAGE NamedFieldPuns #-} +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE ScopedTypeVariables #-} +{-# LANGUAGE TemplateHaskell #-} +{-# LANGUAGE TypeFamilies #-} +module API (api) where +import Data.ByteString.Lazy.Char8 (ByteString) +import Data.Morpheus (interpreter) +import Data.Morpheus.Document (importGQLDocument) +import Data.Morpheus.Types (RootResolver (..), Undefined (..)) +import Data.Text (Text) +importGQLDocument "schema.gql" +rootResolver :: RootResolver IO () Query Undefined Undefined +rootResolver = + RootResolver + { queryResolver = Query {deity}, + mutationResolver = Undefined, + subscriptionResolver = Undefined + } + where + deity DeityArgs {name} = + pure + Deity + { name = pure name, + power = pure (Just "Shapeshifting") + } +api :: ByteString -> IO ByteString +api = interpreter rootResolver +``` + +ๆŸฅ็œ‹ [morpheus-graphql-examples](https://github.com/morpheusgraphql/morpheus-graphql) ไบ†่งฃๆ›ดๅคๆ‚็š„ APIใ€‚ + +### Java + +#### [graphql-java](https://github.com/graphql-java/graphql-java) + +ไธ€ไธช็”จไบŽๆž„ๅปบ GraphQL API ็š„ Java ๅบ“ใ€‚ + +ๅฏไปฅๆ‰ง่กŒไธ€ไธช `hello world` GraphQL ๆŸฅ่ฏข็š„ `graphql-java` ไปฃ็ ๅฆ‚ไธ‹๏ผš + +```java +import graphql.ExecutionResult; +import graphql.GraphQL; +import graphql.schema.GraphQLSchema; +import graphql.schema.StaticDataFetcher; +import graphql.schema.idl.RuntimeWiring; +import graphql.schema.idl.SchemaGenerator; +import graphql.schema.idl.SchemaParser; +import graphql.schema.idl.TypeDefinitionRegistry; + +import static graphql.schema.idl.RuntimeWiring.newRuntimeWiring; + +public class HelloWorld { + + public static void main(String[] args) { + String schema = "type Query{hello: String} schema{query: Query}"; + + SchemaParser schemaParser = new SchemaParser(); + TypeDefinitionRegistry typeDefinitionRegistry = schemaParser.parse(schema); + + RuntimeWiring runtimeWiring = new RuntimeWiring() + .type("Query", builder -> builder.dataFetcher("hello", new StaticDataFetcher("world"))) + .build(); + + SchemaGenerator schemaGenerator = new SchemaGenerator(); + GraphQLSchema graphQLSchema = schemaGenerator.makeExecutableSchema(typeDefinitionRegistry, runtimeWiring); + + GraphQL build = GraphQL.newGraphQL(graphQLSchema).build(); + ExecutionResult executionResult = build.execute("{hello}"); + + System.out.println(executionResult.getData().toString()); + // Prints: {hello=world} + } +} +``` + +ๆŸฅ็œ‹ [graphql-java ๆ–‡ๆกฃ](https://github.com/graphql-java/graphql-java) ไปฅไบ†่งฃๆ›ดๅคšไฟกๆฏใ€‚ + +### JavaScript + +#### [GraphQL.js](/graphql-js/) ([github](https://github.com/graphql/graphql-js/)) ([npm](https://www.npmjs.com/package/graphql)) + +GraphQL ่ง„่Œƒ็š„ๅ‚่€ƒๅฎž็Žฐ๏ผŒ่ฎพ่ฎก็”จไบŽๅœจ Node.js ็Žฏๅขƒไธญ่ฟ่กŒใ€‚ + +ๅฆ‚ๆžœ่ฆๅœจๅ‘ฝไปค่กŒไธญ่ฟ่กŒไธ€ไธช `GraphQL.js` ็š„ hello world ่„šๆœฌ๏ผš + +```bash +npm install graphql +``` + +็„ถๅŽไฝฟ็”จ `node hello.js` ไปฅ่ฟ่กŒ `hello.js` ไธญ็š„ไปฃ็ ๏ผš + +```js +var { graphql, buildSchema } = require('graphql'); + +var schema = buildSchema(` + type Query { + hello: String + } +`); + +var root = { hello: () => 'Hello world!' }; + +graphql({schema, source:'{ hello }', rootValue:root}).then((response) => { + console.log(response); +}); +``` + +#### [express-graphql](/graphql-js/running-an-express-graphql-server/) ([github](https://github.com/graphql/express-graphql)) ([npm](https://www.npmjs.com/package/express-graphql)) + +ๅŸบไบŽ Express webserver ๆœๅŠกๅ™จ็š„ไธ€ไธช GraphQL API ๆœๅŠก็ซฏๅ‚่€ƒๅฎž็Žฐ๏ผŒไฝ ๅฏไปฅ็”จๅฎƒ็ป“ๅˆๅธธ่ง„ Express webserver ๆฅ่ฟ่กŒ GraphQL๏ผŒไนŸๅฏไปฅไฝœไธบ็‹ฌ็ซ‹ GraphQL ๆœๅŠกๅ™จใ€‚ + +ๅฆ‚ๆžœ่ฆ่ฟ่กŒ `express-graphql` ็š„ hello world ๆœๅŠกๅ™จ๏ผš + +```bash +npm install express express-graphql graphql +``` + +็„ถๅŽไฝฟ็”จ `node server.js` ไปฅ่ฟ่กŒ `server.js` ไธญ็š„ไปฃ็ ๏ผš + +```js +var express = require('express'); +var { graphqlHTTP } = require('express-graphql'); +var { buildSchema } = require('graphql'); + +var schema = buildSchema(` + type Query { + hello: String + } +`); + +var root = { hello: () => 'Hello world!' }; + +var app = express(); +app.use('/graphql', graphqlHTTP({ + schema: schema, + rootValue: root, + graphiql: true, +})); +app.listen(4000, () => console.log('Now browse to localhost:4000/graphql')); +``` + +#### [apollo-server](https://www.apollographql.com/docs/apollo-server/) ([github](https://github.com/apollographql/apollo-server)) ([npm](https://www.npmjs.com/package/apollo-server-express)) + +ๆฅ่‡ชไบŽ Apollo ็š„ไธ€ๅฅ— GraphQL server ๅŒ…๏ผŒๅฏ็”จไบŽๅคš็ง Node.js HTTP ๆก†ๆžถ๏ผˆExpress๏ผŒConnect๏ผŒHapi๏ผŒKoa ็ญ‰๏ผ‰ใ€‚ + +ๅฆ‚ๆžœ่ฆ่ฟ่กŒ `apollo-server-express` ็š„ hello world ๆœๅŠกๅ™จ๏ผš + +```bash +npm install apollo-server-express express +``` + +็„ถๅŽไฝฟ็”จ `node server.js` ไปฅ่ฟ่กŒ `server.js` ไธญ็š„ไปฃ็ ๏ผš + +```js +const express = require('express'); +const { ApolloServer, gql } = require('apollo-server-express'); + +const typeDefs = gql` + type Query { + hello: String + } +`; + +const resolvers = { + Query: { + hello: () => 'Hello world!', + }, +}; +const server = new ApolloServer({ typeDefs, resolvers }); +const app = express(); +server.applyMiddleware({ app }); +app.listen({ port: 4000 }, () => + console.log('Now browse to http://localhost:4000' + server.graphqlPath) +); +``` + +Apollo Server ไนŸๆ”ฏๆŒๆ‰€ๆœ‰็š„ Node.js HTTP ๆœๅŠกๅ™จๆก†ๆžถ๏ผšExpressใ€Connectใ€HAPIใ€Koa ๅ’Œ NestJsใ€‚ + +### Kotlin + + - [graphql-kotlin](https://github.com/ExpediaGroup/graphql-kotlin/)๏ผšไธ€็ป„็”จไบŽๅœจ Kotlin ไธญ่ฟ่กŒ GraphQL ๆœๅŠกๅ™จ็š„ๅบ“ใ€‚ + - [KGraphQL](https://github.com/aPureBase/KGraphQL)๏ผš่ฎพ็ฝฎ GraphQL ๆœๅŠกๅ™จ็š„ไธ€ไธช็บฏ Kotlin ๅฎž็Žฐใ€‚ + +### Perl + + - [graphql-perl](https://github.com/graphql-perl/graphql-perl)๏ผšGraphQL ๅ‚่€ƒๅฎž็Žฐ็š„ Perl ็งปๆค็‰ˆๆœฌ + - [MetaCPAN documentation](https://metacpan.org/pod/GraphQL) + - [Mojolicious-Plugin-GraphQL](https://github.com/graphql-perl/Mojolicious-Plugin-GraphQL)๏ผšๅฐ†ไฝ ็š„ GraphQL ๆœๅŠก่ฟžๆŽฅๅˆฐ Mojolicious ๅบ”็”จ + - [GraphQL-Plugin-Convert-DBIC](https://github.com/graphql-perl/GraphQL-Plugin-Convert-DBIC)๏ผš่‡ชๅŠจๅฐ†ไฝ ็š„ DBIx::Class schema ่ฟžๆŽฅๅˆฐ GraphQL + - [GraphQL-Plugin-Convert-OpenAPI](https://github.com/graphql-perl/GraphQL-Plugin-Convert-OpenAPI)๏ผš่‡ชๅŠจๅฐ†ไปปไฝ• OpenAPI ๆœๅŠก๏ผˆๆœฌๅœฐๆˆ–่ฟœ็จ‹็š„ Mojolicious๏ผ‰่ฟžๆŽฅๅˆฐGraphQL + +### PHP + + - [graphql-php](https://github.com/webonyx/graphql-php)๏ผšGraphQL ๅ‚่€ƒๅฎž็Žฐ็š„ PHP ็งปๆค็‰ˆๆœฌ + - [graphql-relay-php](https://github.com/ivome/graphql-relay-php)๏ผšไธ€ไธช็”จไบŽ่พ…ๅŠฉๆž„ๅปบ graphql-php ๆœๅŠกๅ™จ็š„ๅบ“๏ผŒๆ”ฏๆŒ react-relay + - [Railt](https://github.com/railt/railt)๏ผšไธ€ไธช PHP GraphQL ๆก†ๆžถ + - [Lighthouse](https://github.com/nuwave/lighthouse)๏ผšไธ€ไธช็”จไบŽ Laravel ็š„ GraphQL ๆœๅŠกๅ™จ + - [GraphQLBundle](https://github.com/overblog/GraphQLBundle)๏ผšไธ€ไธช็”จไบŽ Symfony ็š„ GraphQL ๆœๅŠกๅ™จ + - [WPGraphQL](https://github.com/wp-graphql/wp-graphql)๏ผšไธ€ไธชๅ…่ดน็š„ๅผ€ๆบ WordPress ๆ’ไปถ๏ผŒๅฏไธบไปปไฝ• WordPress ็ฝ‘็ซ™ๆไพ›ๅฏๆ‰ฉๅฑ•็š„ GraphQL schema ๅ’Œ API + - [GraphQL API for WordPress](https://github.com/GraphQLAPI/graphql-api-for-wp)๏ผšWordPress ็š„ GraphQL ๆœๅŠกๅ™จ + - [GraPHPinator](https://github.com/infinityloop-dev/graphpinator)๏ผš็Žฐไปฃ PHP ็š„ไธ€ไธช GraphQL ๅฎž็Žฐ + +#### [API Platform](https://api-platform.com) ([github](https://github.com/api-platform/api-platform)) + +API Platform ๆ˜ฏไธ€ไธชๅŸบไบŽ Symfony ๆž„ๅปบ็š„ๅŠŸ่ƒฝ้ฝๅ…จใ€็ตๆดปไธ”ๅฏๆ‰ฉๅฑ•็š„ API ๆก†ๆžถใ€‚ +ไปฅไธ‹็š„็ฑป่ถณไปฅๅˆ›ๅปบไธŽ Relay ๅ…ผๅฎน็š„ GraphQL ๆœๅŠกๅ™จๅ’Œๆ”ฏๆŒ็Žฐไปฃ REST ๆ ผๅผ๏ผˆJSON-LDใ€JSONAPI...๏ผ‰็š„่ถ…ๅช’ไฝ“ API๏ผš + +```php +name; + } + // ... +} +``` + +GraphQLite ็š„ๅ…ถไป–ๅŠŸ่ƒฝๅŒ…ๆ‹ฌ้ชŒ่ฏใ€ๅฎ‰ๅ…จๆ€งใ€้”™่ฏฏๅค„็†ใ€้€š่ฟ‡ๆ•ฐๆฎๅŠ ่ฝฝๅ™จๆจกๅผๅŠ ่ฝฝโ€ฆโ€ฆ + +#### [Siler](https://siler.leocavalcante.com/graphql/) ([github](https://github.com/leocavalcante/siler)) + +Siler ๆ˜ฏไธ€ไธชๅ…ทๆœ‰้ซ˜็บงๆŠฝ่ฑกๅŠŸ่ƒฝ๏ผŒๅฏไธŽ GraphQL ๆญ้…ไฝฟ็”จ็š„ PHP ๅบ“ใ€‚ + +ๅฆ‚ๆžœ่ฆ่ฟ่กŒ Siler ็š„ hello world ่„šๆœฌ๏ผš + +```graphql +type Query { + hello: String +} +``` + +```php + [ + 'hello' => 'world', + ], +]; +$schema = Graphql\schema($typeDefs, $resolvers); + +echo "Server running at http://127.0.0.1:8080"; +Http\server(Graphql\psr7($schema), function (\Throwable $err) { + var_dump($err); + return Diactoros\json([ + 'error' => true, + 'message' => $err->getMessage(), + ]); +})()->run(); +``` + +ๅฎƒ่ฟ˜ๆ นๆฎ Apollo ็š„ๅทฅไฝœๅŽŸ็†ๆไพ›ไบ†ๆž„ๅปบ WebSocket ่ฎข้˜…ๆœๅŠกๅ™จ็š„ๅŠŸ่ƒฝใ€‚ + +### Swift + + - [Graphiti](https://github.com/GraphQLSwift/Graphiti)๏ผšไธ€ไธช Swift ๅบ“๏ผŒๅฏๅฟซ้€Ÿใ€ๅฎ‰ๅ…จไธ”่ฝปๆพๅœฐๆž„ๅปบ GraphQL schema/็ฑปๅž‹ใ€‚ + +### Python + +#### [Graphene](http://graphene-python.org/) ([github](https://github.com/graphql-python/graphene)) + +ไธ€ไธช็”จไบŽๆž„ๅปบ GraphQL API ็š„ Python ๅบ“ใ€‚ + +ๅฆ‚ๆžœ่ฆ่ฟ่กŒไธ€ไธช Graphene hello world ่„šๆœฌ๏ผš + +```bash +pip install graphene +``` + +็„ถๅŽไฝฟ็”จ `python hello.py` ไปฅ่ฟ่กŒ `hello.py` ไธญ็š„ไปฃ็ ๏ผš + +```python +import graphene + +class Query(graphene.ObjectType): + hello = graphene.String(name=graphene.String(default_value="World")) + + def resolve_hello(self, info, name): + return 'Hello ' + name + +schema = graphene.Schema(query=Query) +result = schema.execute('{ hello }') +print(result.data['hello']) # "Hello World" +``` + +ๅ…ถไนŸๆœ‰ๅฏน [Relay](https://facebook.github.io/relay/)ใ€Djangoใ€SQLAlchemy ๅ’Œ Google App Engine ็š„่‰ฏๅฅฝ็ป‘ๅฎšใ€‚ + +### Ruby + +#### [graphql-ruby](https://github.com/rmosolgo/graphql-ruby) + +ไธ€ไธช็”จไบŽๆž„ๅปบ GraphQL API ็š„ Ruby ๅบ“ใ€‚ + +ๅฆ‚ๆžœ่ฆไฝฟ็”จ `graphql-ruby` ่ฟ่กŒไธ€ไธช hello world ่„šๆœฌ๏ผš + +```bash +gem install graphql +``` + +็„ถๅŽไฝฟ็”จ `ruby hello.rb` ่ฟ่กŒ `hello.rb` ไธญ็š„ไปฃ็ ๏ผš + +```ruby +require 'graphql' + +class QueryType < GraphQL::Schema::Object + graphql_name 'Query' + field :hello do + type types.String + resolve -> (obj, args, ctx) { 'Hello world!' } + end +end + +class Schema < GraphQL::Schema + query QueryType +end + +puts Schema.execute('{ hello }').to_json +``` + +ๅ…ถไนŸๆœ‰ๅฏนไบŽ Relay ๅ’Œ Rails ็š„่‰ฏๅฅฝ็ป‘ๅฎšใ€‚ + +#### [Agoo](https://github.com/ohler55/agoo) + +ไธ€ไธชๆ”ฏๆŒ GraphQL ็š„้ซ˜ๆ€ง่ƒฝ Web ๆœๅŠกๅ™จใ€‚Agoo ่‡ดๅŠ›ไบŽไธบ GraphQL ๆไพ›ไธ€ไธช็ฎ€ๅ•ๆ˜“็”จ็š„ APIใ€‚ + +```ruby +require 'agoo' + +class Query + def hello + 'hello' + end +end + +class Schema + attr_reader :query + + def initialize + @query = Query.new() + end +end + +Agoo::Server.init(6464, 'root', thread_count: 1, graphql: '/graphql') +Agoo::Server.start() +Agoo::GraphQL.schema(Schema.new) { + Agoo::GraphQL.load(%^type Query { hello: String }^) +} +sleep + +# To run this GraphQL example type the following then go to a browser and enter +# a URL of localhost:6464/graphql?query={hello} +# +# ruby hello.rb +``` + +### Rust + + - [graphql-rust/juniper](https://github.com/graphql-rust/juniper)๏ผš็”จไบŽ Rust ็š„ GraphQL ๆœๅŠก็ซฏๅบ“ + +### Scala + +#### [Sangria](http://sangria-graphql.org/) ([github](https://github.com/sangria-graphql/sangria))๏ผšๆ”ฏๆŒ [Relay](https://facebook.github.io/relay/) ็š„ไธ€ไธช Scala GraphQL ๅบ“ใ€‚ + +ไฝฟ็”จ็š„ `sangria` ็š„ไธ€ไธช GraphQL schema ไปฅๅŠ hello world ๆŸฅ่ฏข๏ผš + +```scala +import sangria.schema._ +import sangria.execution._ +import sangria.macros._ + +val QueryType = ObjectType("Query", fields[Unit, Unit]( + Field("hello", StringType, resolve = _ โ‡’ "Hello world!") +)) + +val schema = Schema(QueryType) + +val query = graphql"{ hello }" + +Executor.execute(schema, query) map println +``` + +### OCaml / Reason + +#### [ocaml-graphql-server](https://github.com/andreas/ocaml-graphql-server)๏ผš็”จไบŽ OCaml ๅ’Œ Reason ็š„ GraphQL ๆœๅŠก็ซฏๅบ“ใ€‚ + +## GraphQL ๅฎขๆˆท็ซฏ + +- [C# / .NET](#c#-/-.net-1) +- [Clojurescript](#clojurescript-1) +- [Elixir](#elixir-1) +- [Elm](#elm) +- [Flutter](#flutter) +- [Go](#go-1) +- [Haskell](#haskell-1) +- [Java / Android](#java-android) +- [JavaScript](#javascript-1) +- [Julia](#julia) +- [Kotlin](#kotlin) +- [Swift / Objective-C iOS](#swift-objective-c-ios) +- [Python](#python-1) +- [R](#r) + +### C# / .NET + + - [GraphQL.Client](https://github.com/graphql-dotnet/graphql-client)๏ผšไธ€ไธช็”จไบŽ .NET ็š„ GraphQL ๅฎขๆˆท็ซฏ + - [graphql-net-client](https://github.com/bkniffler/graphql-net-client)๏ผšๅŸบไบŽ .Net ็š„ GraphQL ๅฎขๆˆท็ซฏๅŸบๆœฌๆ ทไพ‹ + - [SAHB.GraphQLClient](https://github.com/sahb1239/SAHB.GraphQLClient)๏ผšGraphQL ๅฎขๆˆท็ซฏ๏ผŒๆ”ฏๆŒไปŽ C# ็š„็ฑป็”ŸๆˆๆŸฅ่ฏข + +### Clojurescript + + - [re-graph](https://github.com/oliyh/re-graph/)๏ผšไธ€ไธชๅœจ Clojurescript ไธญๅฎž็Žฐ็š„ GraphQL ๅฎขๆˆท็ซฏ๏ผŒๆ”ฏๆŒ websocketsใ€‚ + +### Elixir + + - [Neuron](https://github.com/uesteibar/neuron)๏ผšElixir ็š„ GraphQL ๅฎขๆˆท็ซฏ + - [common_graphql_client](https://github.com/annkissam/common_graphql_client)๏ผšๆ”ฏๆŒ HTTP ๅ’Œ WebSocket ็š„ Elixir GraphQL ๅฎขๆˆท็ซฏ + +### Elm + + - [dillonkearns/elm-graphql](https://github.com/dillonkearns/elm-graphql)๏ผšไธ€ไธชๅบ“ๅ’Œๅ‘ฝไปค่กŒไปฃ็ ็”Ÿๆˆๅ™จ๏ผŒ็”จไบŽไธบ GraphQL ๅ…ฅๅฃ็ซฏ็‚นๅˆ›ๅปบ็ฑปๅž‹ๅฎ‰ๅ…จ็š„ Elm ไปฃ็ ใ€‚ + +### Flutter + + - [graphql](https://github.com/zino-app/graphql-flutter#readme)๏ผšไธ€ไธช Flutter ไธญ็š„ GraphQL ๅฎขๆˆท็ซฏๅฎž็Žฐใ€‚ + +### Go + + - [graphql](https://github.com/shurcooL/graphql#readme)๏ผšไธ€ไธชไฝฟ็”จ Go ็ผ–ๅ†™็š„ GraphQL ๅฎขๆˆท็ซฏๅฎž็Žฐใ€‚ + - [machinebox/graphql](https://github.com/machinebox/graphql)๏ผš็”จไบŽ GraphQL ็š„ไธ€ไธชไผ˜้›…็š„ๅบ•ๅฑ‚ HTTP ๅฎขๆˆท็ซฏใ€‚ + +### Haskell + + - [morpheus-graphql-client](https://github.com/morpheusgraphql/morpheus-graphql)๏ผšไฝฟ็”จ Haskell ็š„ไธ€ไธชๅผบ็ฑปๅž‹ GraphQL ๅฎขๆˆท็ซฏๅฎž็Žฐใ€‚ + +### Java / Android + + - [Apollo Android](https://github.com/apollographql/apollo-android)๏ผšไธ€ไธช็”จไบŽ JVMใ€Android ๅ’Œ Kotlin native ็š„ GraphQL ๅฎขๆˆท็ซฏ๏ผŒๅผบ็ฑปๅž‹ใ€ๅธฆ็ผ“ๅญ˜ๅŠŸ่ƒฝใ€‚ + - [Nodes](https://github.com/americanexpress/nodes)๏ผšไธ€ไธช GraphQL JVM ๅฎขๆˆท็ซฏ๏ผŒ็”จไบŽไปŽๆ ‡ๅ‡†ๆจกๅž‹ๅฎšไน‰ๆž„ๅปบๆŸฅ่ฏขใ€‚ + +### JavaScript + + - [Relay](https://facebook.github.io/relay/) ([github](https://github.com/facebook/relay)) ([npm](https://www.npmjs.com/package/react-relay))๏ผšFacebook ็š„ๆก†ๆžถ๏ผŒ็”จไบŽๆž„ๅปบไธŽ GraphQL ๅŽ็ซฏไบคๆต็š„ React ๅบ”็”จใ€‚ + - [Apollo Client](http://apollographql.com/client/) ([github](https://github.com/apollographql/apollo-client))๏ผšไธ€ไธชๅผบๅคง็š„ JavaScript GraphQL ๅฎขๆˆท็ซฏ๏ผŒ่ฎพ่ฎก็”จไบŽไธŽ Reactใ€React Nativeใ€Angular 2 ๆˆ–่€…ๅŽŸ็”Ÿ JavaScript ไธ€ๅŒๅทฅไฝœใ€‚ + - [graphql-request](https://github.com/prisma/graphql-request)๏ผšไธ€ไธช็ฎ€ๅ•็ตๆดป็š„ JavaScript GraphQL ๅฎขๆˆท็ซฏ๏ผŒๅฏไปฅ่ฟ่กŒไบŽๆ‰€ๆœ‰็š„ JavaScript ็Žฏๅขƒ๏ผˆๆต่งˆๅ™จ๏ผŒNode.js ๅ’Œ React Native๏ผ‰โ€”โ€” ๅŸบๆœฌไธŠๆ˜ฏ `fetch` ็š„่ฝปๅบฆๅฐ่ฃ…ใ€‚ + - [Lokka](https://github.com/kadirahq/lokka)๏ผšไธ€ไธช็ฎ€ๅ•็š„ JavaScript GraphQL ๅฎขๆˆท็ซฏ๏ผŒๅฏไปฅ่ฟ่กŒไบŽๆ‰€ๆœ‰็š„ JavaScript ็Žฏๅขƒ โ€”โ€” ๆต่งˆๅ™จ๏ผŒNode.js ๅ’Œ React Nativeใ€‚ + - [nanogql](https://github.com/yoshuawuyts/nanogql)๏ผšไธ€ไธชไฝฟ็”จๆจกๆฟๅญ—็ฌฆไธฒ็š„ๅฐๅž‹ GraphQL ๅฎขๆˆท็ซฏๅบ“ใ€‚ + - [gq-loader](https://github.com/Houfeng/gq-loader)๏ผšไธ€ไธช็ฎ€ๅ•็š„ JavaScript GraphQL ๅฎขๆˆท็ซฏ๏ผŒ้€š่ฟ‡ webpack ๅŠ ่ฝฝๅ™จ่ฎฉ *.gql ๆ–‡ไปถไฝœไธบๆจกๅ—ไฝฟ็”จใ€‚ + - [AWS Amplify](https://aws.github.io/aws-amplify)๏ผšไฝฟ็”จไบ‘ๆœๅŠก่ฟ›่กŒๅบ”็”จๅผ€ๅ‘็š„ JavaScript ๅบ“๏ผŒๆ”ฏๆŒ GraphQL ๅŽ็ซฏๅ’Œ็”จไบŽๅค„็† GraphQL ๆ•ฐๆฎ็š„ React ็ป„ไปถใ€‚ + - [Grafoo](https://github.com/grafoojs/grafoo)๏ผšไธ€ไธช้€š็”จ็š„ GraphQL ๅฎขๆˆท็ซฏ๏ผŒๅ…ทๆœ‰ไป… 1.6kb ็š„ๅคšๆก†ๆžถ็š„่ง†ๅ›พๅฑ‚้›†ๆˆใ€‚ + - [urql](https://formidable.com/open-source/urql/) ([github](https://github.com/FormidableLabs/urql))๏ผšไธ€ไธช็”จไบŽ React ็š„้ซ˜ๅบฆๅฏๅฎšๅˆถไธ”็”จ้€”ๅนฟๆณ›็š„ GraphQL ๅฎขๆˆท็ซฏใ€‚ + - [graphqurl](https://github.com/hasura/graphqurl) ([npm](https://www.npmjs.com/package/graphqurl))๏ผšๅธฆๆœ‰่‡ชๅŠจๅฎŒๆˆๅŠŸ่ƒฝใ€่ฎข้˜…ๅ’Œ GraphiQL ็š„ curlใ€‚ไนŸๆ˜ฏไธ€ไธช็ฎ€ๅ•้€š็”จ็š„ javascript GraphQL ๅฎขๆˆท็ซฏใ€‚ + +### Julia + + - [Diana.jl](https://github.com/codeneomatrix/Diana.jl)๏ผšไธ€ไธช Julia GraphQL ๆœๅŠก็ซฏๅฎž็Žฐ. + +### Kotlin + + - [graphql-kotlin](https://github.com/ExpediaGroup/graphql-kotlin/)๏ผšไธ€็ป„ GraphQL ๅบ“๏ผŒๅŒ…ๆ‹ฌไธ€ไธช่ฝป้‡็บงใ€็ฑปๅž‹ๅฎ‰ๅ…จ็š„ GraphQL HTTP ๅฎขๆˆท็ซฏใ€‚ + +### Swift / Objective-C iOS + + - [Apollo iOS](https://www.apollographql.com/docs/ios/) ([github](https://github.com/apollographql/apollo-ios))๏ผšไธ€ไธช็”จไบŽ iOS ็š„ GraphQL ๅฎขๆˆท็ซฏ๏ผŒ่ฟ”ๅ›žๆŸฅ่ฏข็‰นๅฎš็š„ Swift ็ฑปๅž‹๏ผŒไธŽ Xcode ้›†ๆˆๅŽๅฏไปฅๅˆ†ๅฑๆ˜พ็คบไฝ ็š„ Swift ๆบไปฃ็ ๅ’Œ GraphQL๏ผŒๅนถ่ƒฝๅœจ่กŒๅ†…ๅฑ•็คบ้ชŒ่ฏ้”™่ฏฏใ€‚ + - [GraphQL iOS](https://github.com/funcompany/graphql-ios)๏ผšไธ€ไธช็”จไบŽ iOS ็š„ Objective-C GraphQL ๅฎขๆˆท็ซฏใ€‚ + - [Graphaello](https://github.com/nerdsupremacist/Graphaello)๏ผšไธ€ไธชไฝฟ็”จ GraphQL ๅ’Œ Apollo ๅœจ SwiftUI ไธญ็ผ–ๅ†™ๅฃฐๆ˜Žๅผใ€็ฑปๅž‹ๅฎ‰ๅ…จๅ’Œๆ•ฐๆฎ้ฉฑๅŠจ็š„ๅบ”็”จ็จ‹ๅบ็š„ๅทฅๅ…ท + +### Python + + - [GQL](https://github.com/graphql-python/gql)๏ผšไธ€ไธช Python ไธญ็š„ GraphQL ๅฎขๆˆท็ซฏใ€‚ + - [python-graphql-client](https://github.com/prisma/python-graphql-client)๏ผš้€‚็”จไบŽ Python 2.7+ ็š„็ฎ€ๅ• GraphQL ๅฎขๆˆท็ซฏใ€‚ + - [sgqlc](https://github.com/profusion/sgqlc)๏ผšไธ€ไธช็ฎ€ๅ•็š„ Python GraphQL ๅฎขๆˆท็ซฏใ€‚ๆ”ฏๆŒไธบ GraphQL schema ไธญๅฎšไน‰็š„็ฑปๅž‹็”Ÿๆˆไปฃ็ ใ€‚ + +### R + + - [ghql](https://github.com/ropensci/ghql)๏ผš้€š็”จ็š„ GraphQL R ๅฎขๆˆท็ซฏใ€‚ + +## ๅทฅๅ…ท + + - [graphiql](https://github.com/graphql/graphiql) ([npm](https://www.npmjs.com/package/graphiql))๏ผšไธ€ไธชไบคไบ’ๅผ็š„่ฟ่กŒไบŽๆต่งˆๅ™จไธญ็š„ GraphQL IDE. + - [libgraphqlparser](https://github.com/graphql/libgraphqlparser)๏ผšไธ€ไธช C++ ็‰ˆ GraphQL ๆŸฅ่ฏข่ฏญ่จ€ๅˆ†ๆžๅ™จ๏ผŒๆไพ› C ๅ’Œ C++ APIใ€‚ + - [Graphql Language Service](https://github.com/graphql/graphql-language-service)๏ผšไธ€ไธช็”จไบŽๆž„ๅปบ IDE ็š„ GraphQL ่ฏญ่จ€ๆœๅŠก๏ผˆ่ฏŠๆ–ญใ€่‡ชๅŠจๅฎŒๆˆ็ญ‰๏ผ‰็š„ๆŽฅๅฃใ€‚ + - [quicktype](https://quicktype.io) ([github](https://github.com/quicktype/quicktype))๏ผšๅœจ TypeScriptใ€Swiftใ€golangใ€C#ใ€C++ ็ญ‰่ฏญ่จ€ไธญไธบ GraphQL ๆŸฅ่ฏข็”Ÿๆˆ็ฑปๅž‹ใ€‚ + - [GraphQL Code Generator](https://graphql-code-generator.com)๏ผšGraphQL ไปฃ็ ็”Ÿๆˆๅ™จๅ…ทๆœ‰ๅฏน่‡ชๅฎšไน‰ๆ’ไปถๅ’Œๆจกๆฟ๏ผˆๅฆ‚ Typescript ๅ‰็ซฏๅ’ŒๅŽ็ซฏใ€React Hooksใ€่งฃๆžๅ™จ็ญพๅ็ญ‰๏ผ‰็š„็ตๆดปๆ”ฏๆŒใ€‚ + - [GraphQL Inspector](https://www.graphql-inspector.com)๏ผšๆฏ”่พƒ schema๏ผŒ้ชŒ่ฏๆ–‡ๆกฃ๏ผŒๆŸฅๆ‰พ้‡ๅคงๆ›ดๆ”น๏ผŒๆŸฅๆ‰พ็›ธไผผ็ฑปๅž‹๏ผŒschema ่ฆ†็›–็އ็ญ‰็ญ‰ใ€‚ + - [GraphQL Config](https://www.graphql-config.com)๏ผšไธบไฝ ๆ‰€ๆœ‰็š„ GraphQL ๅทฅๅ…ทๅบ”็”จๅŒไธ€ไปฝ้…็ฝฎ๏ผˆๆ”ฏๆŒๅคงๅคšๆ•ฐๅทฅๅ…ทใ€็ผ–่พ‘ๅ™จๅ’Œ IDE๏ผ‰ใ€‚ + - [GraphQL CLI](https://www.graphql-cli.com)๏ผš็”จไบŽๅธธ่ง GraphQL ๅผ€ๅ‘ๅทฅไฝœๆต็จ‹็š„ๅ‘ฝไปค่กŒๅทฅๅ…ทใ€‚ + - [GraphQL Scalars](https://github.com/Urigo/graphql-scalars)๏ผš่‡ชๅฎšไน‰ GraphQL ๆ ‡้‡็ฑปๅž‹็š„ๅบ“๏ผŒ็”จไบŽๅˆ›ๅปบ็ฒพ็กฎ็š„ใ€็ฑปๅž‹ๅฎ‰ๅ…จ็š„ GraphQL schemaใ€‚ + - [GraphQL Tools](https://www.graphql-tools.com)๏ผšไธ€็ป„็”จไบŽๅฟซ้€Ÿๅผ€ๅ‘ GraphQL ๅทฅๅ…ท็š„ๅฎž็”จ็จ‹ๅบ๏ผˆschema ๅ’Œๆ–‡ๆกฃๅŠ ่ฝฝ๏ผŒschema ๅˆๅนถ็ญ‰๏ผ‰ใ€‚ + - [SOFA](https://github.com/Urigo/sofa)๏ผšไปŽไฝ ็š„ GraphQL API ็”Ÿๆˆ REST APIใ€‚ + - [GraphQL-ESLint](https://github.com/dotansimha/graphql-eslint)๏ผšๅฐ† GraphQL AST ้›†ๆˆๅˆฐ ESLint ๆ ธๅฟƒไธญ๏ผˆไฝœไธบ่งฃๆžๅ™จ๏ผ‰ใ€‚ + - [GraphQL Modules](https://www.graphql-modules.com)๏ผšไฝฟไฝ ๅฏไปฅๅฐ†ๅŽ็ซฏๅฎž็Žฐๅˆ†ๆ‹†ๆˆๅฐๅž‹ใ€ๅฏ้‡็”จใ€ๆ˜“ไบŽๅฎž็Žฐๅ’Œๆ˜“ไบŽๆต‹่ฏ•็š„้ƒจๅˆ†ใ€‚ + - [GraphQL Mesh](https://www.graphql-mesh.com)๏ผšๅ…่ฎธไฝ ไฝฟ็”จ GraphQL ๆŸฅ่ฏข่ฏญ่จ€ๆฅ่ฎฟ้—ฎไธ่ฟ่กŒ GraphQL ็š„่ฟœ็จ‹ API๏ผˆไนŸๅŒ…ๆ‹ฌ้‚ฃไบ›่ฟ่กŒ GraphQL ็š„่ฟœ็จ‹ API๏ผ‰ไธญ็š„ๆ•ฐๆฎใ€‚ๅฎƒๅฏไปฅไฝœไธบๅ…ถไป–ๆœๅŠก็š„็ฝ‘ๅ…ณ๏ผŒไนŸๅฏไปฅไฝœไธบๆœฌๅœฐ GraphQL schema ่ฟ่กŒ๏ผŒไปฅ่šๅˆๆฅ่‡ช่ฟœ็จ‹ API ็š„ๆ•ฐๆฎใ€‚ + - [Graphql Calculator](https://github.com/graphql-calculator/graphql-calculator)๏ผšๅŸบไบŽๆŒ‡ไปคๅ’Œ่กจ่พพๅผๅฎž็Žฐ็š„่ฝป้‡็บงๆŸฅ่ฏข่ฎก็ฎ—ๅผ•ๆ“Ž๏ผŒๅ…่ฎธไฝ ๅŸบไบŽๆŒ‡ไปคๅ’Œ่กจ่พพๅผๅฏนๆŸฅ่ฏขๅญ—ๆฎต่ฟ›่กŒๅŠ ๅทฅ่ฝฌๆขๅ’Œ็ผ–ๆŽ’ๆŽงๅˆถใ€‚ + +## ๆœๅŠก + + - [Apollo Graph Manage](http://engine.apollographql.com)๏ผšไธ€ไธช็”จไบŽ็›‘่ง† GraphQL ๅŽ็ซฏ็š„ๆ€ง่ƒฝๅ’Œไฝฟ็”จ็š„ไบ‘ๆœๅŠกใ€‚ + - [GraphCMS](https://graphcms.com/)๏ผšไธ€ไธช BaaS๏ผˆๅŽ็ซฏๅณๆœๅŠก๏ผ‰๏ผŒๅฎƒไธบไฝ ้…็ฝฎไบ†ไธ€ไธชไฝœไธบๅ†…ๅฎน็ผ–่พ‘ๅทฅๅ…ทๆฅๅค„็†ๅญ˜ๅ‚จๆ•ฐๆฎ็š„ GraphQL ๅŽ็ซฏใ€‚ + - [Prisma](https://www.prisma.io) ([github](https://github.com/prisma))๏ผšไธ€ไธช BaaS๏ผˆๅŽ็ซฏๅณๆœๅŠก๏ผ‰๏ผŒๅฎƒไธบไฝ ็š„ๅบ”็”จ็จ‹ๅบๆไพ›ไบ†ไธ€ไธช GraphQL ๅŽ็ซฏ๏ผŒไธ”ๅ…ทๆœ‰็”จไบŽ็ฎก็†ๆ•ฐๆฎๅบ“ๅ’Œๅญ˜ๅ‚จๆ•ฐๆฎ็š„ๅผบๅคง็š„ web uiใ€‚ + - [Tipe](https://tipe.io) ([github](https://github.com/tipeio))๏ผšไธ€ไธช SaaS๏ผˆ่ฝฏไปถๅณๆœๅŠก๏ผ‰ๅ†…ๅฎน็ฎก็†็ณป็ปŸ๏ผŒๅ…่ฎธไฝ ไฝฟ็”จๅผบๅคง็š„็ผ–่พ‘ๅทฅๅ…ทๅˆ›ๅปบไฝ ็š„ๅ†…ๅฎน๏ผŒๅนถ้€š่ฟ‡ GraphQL ๆˆ– REST API ไปŽไปปไฝ•ๅœฐๆ–น่ฎฟ้—ฎๅฎƒใ€‚ + - [AWS AppSync](https://aws.amazon.com/appsync/)๏ผšๅฎŒๅ…จๆ‰˜็ฎก็š„ GraphQL ๆœๅŠก๏ผŒๅŒ…ๅซๅฎžๆ—ถ่ฎข้˜…ใ€็ฆป็บฟ็ผ–็จ‹ๅ’ŒๅŒๆญฅใ€ไผไธš็บงๅฎ‰ๅ…จ็‰นๆ€งไปฅๅŠ็ป†็ฒ’ๅบฆ็š„ๆŽˆๆƒๆŽงๅˆถใ€‚ + - [Elide](https://elide.io)๏ผšไธ€ไธช Java ๅบ“๏ผŒๅฏไปฅๅœจไปปไฝ•ๅ…ณ็ณปๆ•ฐๆฎๅบ“ไธŠๅฐ† JPA ๆณจ้‡Š็š„ๆ•ฐๆฎๆจกๅž‹ๅ…ฌๅผ€ไธบ GraphQL ๆœๅŠกใ€‚ + - [Hasura](https://hasura.io) ([github](https://github.com/hasura))๏ผšHasura ่ฟžๆŽฅๅˆฐไฝ ็š„ๆ•ฐๆฎๅบ“ๅ’ŒๅพฎๆœๅŠก๏ผŒๅนถ็ซ‹ๅณไธบไฝ ๆไพ›ๅฏ็”จไบŽ็”Ÿไบง็š„ GraphQL APIใ€‚ + - [FaunaDB](https://docs.fauna.com/fauna/current/graphql)๏ผš้€š่ฟ‡ๅฏผๅ…ฅ gql schema ๅˆ›ๅปบๅณๆ—ถ GraphQL ๅŽ็ซฏใ€‚ๆ•ฐๆฎๅบ“ๅฐ†ไธบไฝ ๅˆ›ๅปบๅ…ณ็ณปๅ’Œ็ดขๅผ•๏ผŒๅ› ๆญคไฝ ๆ— ้œ€็ผ–ๅ†™ไปปไฝ•ๆ•ฐๆฎๅบ“ไปฃ็ ๅณๅฏๅœจๅ‡ ็ง’้’Ÿๅ†…ๆŸฅ่ฏขใ€‚Serverless ๅฎšไปทๅฏๅ…่ดนๅผ€ๅง‹ไฝฟ็”จใ€‚ + - [Back4App](https://www.back4app.com/docs/parse-graphql/graphql-getting-started)๏ผšBack4App ๆ˜ฏไธ€ไธชๅŽ็ซฏๅณๆœๅŠกๅนณๅฐ๏ผŒๅฏๅธฎๅŠฉไฝ ๅŸบไบŽ GraphQL ๆž„ๅปบๅ’Œๆ‰ฉๅฑ•็Žฐไปฃๅบ”็”จ็จ‹ๅบใ€‚ + +## ๆ›ดๅคšๅ†…ๅฎน + + - [awesome-graphql](https://github.com/chentsulin/awesome-graphql)๏ผšไธ€ไธช็ฅžๅฅ‡็š„็คพๅŒบ๏ผŒ็ปดๆŠคไธ€็ณปๅˆ—ๅบ“ใ€่ต„ๆบ็ญ‰ใ€‚ + diff --git a/src/content/code/language-support/c-c/tools/libgraphqlparser.md b/src/content/code/language-support/c-c/tools/libgraphqlparser.md new file mode 100644 index 0000000000..e3681c82fa --- /dev/null +++ b/src/content/code/language-support/c-c/tools/libgraphqlparser.md @@ -0,0 +1,8 @@ +--- +name: libgraphqlparser +description: A GraphQL query language parser in C++ with C and C++ APIs. +url: https://github.com/graphql/libgraphqlparser +github: graphql/libgraphqlparser +--- + + diff --git a/src/content/code/language-support/c-net/client/graphql-client.md b/src/content/code/language-support/c-net/client/graphql-client.md new file mode 100644 index 0000000000..df6e016432 --- /dev/null +++ b/src/content/code/language-support/c-net/client/graphql-client.md @@ -0,0 +1,8 @@ +--- +name: GraphQL.Client +description: A GraphQL Client for .NET. +url: https://github.com/graphql-dotnet/graphql-client +github: graphql-dotnet/graphql-client +--- + + diff --git a/src/content/code/language-support/c-net/client/graphql-net-client.md b/src/content/code/language-support/c-net/client/graphql-net-client.md new file mode 100644 index 0000000000..5042b5859c --- /dev/null +++ b/src/content/code/language-support/c-net/client/graphql-net-client.md @@ -0,0 +1,8 @@ +--- +name: graphql-net-client +description: Basic example GraphQL client for .NET. +url: https://github.com/bkniffler/graphql-net-client +github: bkniffler/graphql-net-client +--- + + diff --git a/src/content/code/language-support/c-net/client/sahb-graphqlclient.md b/src/content/code/language-support/c-net/client/sahb-graphqlclient.md new file mode 100644 index 0000000000..2fa58640f7 --- /dev/null +++ b/src/content/code/language-support/c-net/client/sahb-graphqlclient.md @@ -0,0 +1,8 @@ +--- +name: SAHB.GraphQLClient +description: GraphQL client which supports generating queries from C# classes +url: https://github.com/sahb1239/SAHB.GraphQLClient +github: sahb1239/SAHB.GraphQLClient +--- + + diff --git a/src/content/code/language-support/c-net/client/strawberry-shake.md b/src/content/code/language-support/c-net/client/strawberry-shake.md new file mode 100644 index 0000000000..b54c164cfa --- /dev/null +++ b/src/content/code/language-support/c-net/client/strawberry-shake.md @@ -0,0 +1,23 @@ +--- +name: Strawberry Shake +description: Strawberry Shake is a open-source reactive GraphQL client for .NET +url: https://chillicream.com/docs/strawberryshake/ +github: ChilliCream/hotchocolate +--- + +Strawberry Shake removes the complexity of state management and lets you interact with local and remote data through GraphQL. + +You can use Strawberry Shake to: + +- Generate a C# client from your GraphQL queries. +- Interact with local and remote data through GraphQL. +- Use reactive APIs to interact with your state. + +```csharp +client.GetHero + .Watch(ExecutionStrategy.CacheFirst) + .Subscribe(result => + { + Console.WriteLine(result.Data.Name); + }) +``` diff --git a/src/content/code/language-support/c-net/server/entity-graphql.md b/src/content/code/language-support/c-net/server/entity-graphql.md new file mode 100644 index 0000000000..be3cc954b3 --- /dev/null +++ b/src/content/code/language-support/c-net/server/entity-graphql.md @@ -0,0 +1,8 @@ +--- +name: Entity GraphQL +description: .NET Core GraphQL library. Compiles to IQueryable to easily expose a schema from an existing data model (E.g. from an Entity Framework data model) +url: https://github.com/lukemurray/EntityGraphQL +github: lukemurray/EntityGraphQL +--- + + diff --git a/src/content/code/language-support/c-net/server/graphql-dotnet.md b/src/content/code/language-support/c-net/server/graphql-dotnet.md new file mode 100644 index 0000000000..6ac2e840bb --- /dev/null +++ b/src/content/code/language-support/c-net/server/graphql-dotnet.md @@ -0,0 +1,34 @@ +--- +name: graphql-dotnet +description: GraphQL for .NET +url: https://github.com/graphql-dotnet/graphql-dotnet +github: graphql-dotnet/graphql-dotnet +--- + +```csharp +using System; +using System.Threading.Tasks; +using GraphQL; +using GraphQL.Types; +using GraphQL.SystemTextJson; // First add PackageReference to GraphQL.SystemTextJson + +public class Program +{ + public static async Task Main(string[] args) + { + var schema = Schema.For(@" + type Query { + hello: String + } + "); + + var json = await schema.ExecuteAsync(_ => + { + _.Query = "{ hello }"; + _.Root = new { Hello = "Hello World!" }; + }); + + Console.WriteLine(json); + } +} +``` diff --git a/src/content/code/language-support/c-net/server/graphql-net.md b/src/content/code/language-support/c-net/server/graphql-net.md new file mode 100644 index 0000000000..9c5d76e671 --- /dev/null +++ b/src/content/code/language-support/c-net/server/graphql-net.md @@ -0,0 +1,8 @@ +--- +name: graphql-net +description: Convert GraphQL to IQueryable +url: https://github.com/ckimes89/graphql-net +github: chkimes/graphql-net +--- + + diff --git a/src/content/code/language-support/c-net/server/hot-chocolate.md b/src/content/code/language-support/c-net/server/hot-chocolate.md new file mode 100644 index 0000000000..2b9704ad33 --- /dev/null +++ b/src/content/code/language-support/c-net/server/hot-chocolate.md @@ -0,0 +1,38 @@ +--- +name: Hot Chocolate +description: Hot Chocolate is an open-source GraphQL Server for .NET +url: https://chillicream.com/docs/hotchocolate/ +github: ChilliCream/hotchocolate +--- + +Hot Chocolate takes the complexity away from building a fully-fledged GraphQL server and lets you focus on delivering the next big thing. + +```csharp +using Microsoft.AspNetCore; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Builder; +using Microsoft.Extensions.DependencyInjection; + +WebHost + .CreateDefaultBuilder(args) + .ConfigureServices(services => + services + .AddGraphQLServer() + .AddQueryType()) + .Configure(builder => + builder + .UseRouting() + .UseEndpoints(e => e.MapGraphQL())) + .Build() + .Run(); + +public class Query +{ + public Hero GetHero() => new Hero(); +} + +public class Hero +{ + public string Name => "Luke Skywalker"; +} +``` diff --git a/src/content/code/language-support/c-net/server/ngraphql.md b/src/content/code/language-support/c-net/server/ngraphql.md new file mode 100644 index 0000000000..f9a94187b0 --- /dev/null +++ b/src/content/code/language-support/c-net/server/ngraphql.md @@ -0,0 +1,6 @@ +--- +name: NGraphQL +description: A set of packages for implementing high-performant GraphQL servers in .NET. Faithful implementation of official 2018 Specification. Features batched execution support (aka Data Loader); support for custom scalars; HTTP server based on ASP.NET Core; parsed query cache; modular API construction (equivalent of schema stiching); full introspection support; runtime metrics and quotas. +url: https://github.com/rivantsov/ngraphql +github: rivantsov/ngraphql +--- diff --git a/src/content/code/language-support/clojure/client/regraph.md b/src/content/code/language-support/clojure/client/regraph.md new file mode 100644 index 0000000000..2c8b73838a --- /dev/null +++ b/src/content/code/language-support/clojure/client/regraph.md @@ -0,0 +1,8 @@ +--- +name: regraph +description: A GraphQL client implemented in Clojurescript with support for websockets. +url: https://github.com/oliyh/re-graph/ +github: oliyh/re-graph +--- + + diff --git a/src/content/code/language-support/clojure/server/alumbra.md b/src/content/code/language-support/clojure/server/alumbra.md new file mode 100644 index 0000000000..c652f0769a --- /dev/null +++ b/src/content/code/language-support/clojure/server/alumbra.md @@ -0,0 +1,41 @@ +--- +name: alumbra +description: A set of reusable GraphQL components for Clojure conforming to the data structures given in [alumbra.spec](https://github.com/alumbra/alumbra.spec). +url: https://github.com/alumbra/alumbra +github: alumbra/alumbra +--- + +```clojure +(require '[alumbra.core :as alumbra] + '[claro.data :as data]) + +(def schema + "type Person { name: String!, friends: [Person!]! } + type QueryRoot { person(id: ID!): Person, me: Person! } + schema { query: QueryRoot }") + +(defrecord Person [id] + data/Resolvable + (resolve! [_ _] + {:name (str "Person #" id) + :friends (map ->Person (range (inc id) (+ id 3)))})) + +(def QueryRoot + {:person (map->Person {}) + :me (map->Person {:id 0})}) + +(def app + (alumbra/handler + {:schema schema + :query QueryRoot})) + +(defonce my-graphql-server + (aleph.http/start-server #'app {:port 3000})) +``` + +```bash +$ curl -XPOST "http://0.0.0.0:3000/" -H'Content-Type: application/json' -d'{ + "query": "{ me { name, friends { name } } }" +}' +{"data":{"me":{"name":"Person #0","friends":[{"name":"Person #1"},{"name":"Person #2"}]}}} +``` diff --git a/src/content/code/language-support/clojure/server/graphql-clj.md b/src/content/code/language-support/clojure/server/graphql-clj.md new file mode 100644 index 0000000000..e7baeea859 --- /dev/null +++ b/src/content/code/language-support/clojure/server/graphql-clj.md @@ -0,0 +1,23 @@ +--- +name: graphql-clj +description: A Clojure library that provides a GraphQL implementation. +url: https://github.com/tendant/graphql-clj +github: tendant/graphql-clj +--- + +Code that executes a hello world GraphQL query with `graphql-clj`: +```clojure + +(def schema "type QueryRoot { + hello: String + }") + +(defn resolver-fn [type-name field-name] + (get-in {"QueryRoot" {"hello" (fn [context parent & rest] + "Hello world!")}} + [type-name field-name])) + +(require '[graphql-clj.executor :as executor]) + +(executor/execute nil schema resolver-fn "{ hello }") +``` diff --git a/src/content/code/language-support/clojure/server/lacinia.md b/src/content/code/language-support/clojure/server/lacinia.md new file mode 100644 index 0000000000..0bb3f22aed --- /dev/null +++ b/src/content/code/language-support/clojure/server/lacinia.md @@ -0,0 +1,8 @@ +--- +name: lacinia +description: A full implementation of the GraphQL specification that aims to maintain external compliance with the specification. +url: https://github.com/walmartlabs/lacinia +github: walmartlabs/lacinia +--- + + diff --git a/src/content/code/language-support/d/server/graphqld.md b/src/content/code/language-support/d/server/graphqld.md new file mode 100644 index 0000000000..da50567414 --- /dev/null +++ b/src/content/code/language-support/d/server/graphqld.md @@ -0,0 +1,8 @@ +--- +name: graphqld +description: A GraphQL implementaiton for the D Programming Language. +url: https://github.com/burner/graphqld +github: burner/graphqld +--- + + diff --git a/src/content/code/language-support/elixir/client/common-graphql-client.md b/src/content/code/language-support/elixir/client/common-graphql-client.md new file mode 100644 index 0000000000..ec360e651f --- /dev/null +++ b/src/content/code/language-support/elixir/client/common-graphql-client.md @@ -0,0 +1,8 @@ +--- +name: common_graphql_client +description: Elixir GraphQL Client with HTTP and WebSocket support +url: https://github.com/annkissam/common_graphql_client +github: annkissam/common_graphql_client +--- + + diff --git a/src/content/code/language-support/elixir/client/neuron.md b/src/content/code/language-support/elixir/client/neuron.md new file mode 100644 index 0000000000..c77f230742 --- /dev/null +++ b/src/content/code/language-support/elixir/client/neuron.md @@ -0,0 +1,8 @@ +--- +name: Neuron +description: A GraphQL client for Elixir +url: https://github.com/uesteibar/neuron +github: uesteibar/neuron +--- + + diff --git a/src/content/code/language-support/elixir/server/absinthe.md b/src/content/code/language-support/elixir/server/absinthe.md new file mode 100644 index 0000000000..bc657a90b8 --- /dev/null +++ b/src/content/code/language-support/elixir/server/absinthe.md @@ -0,0 +1,8 @@ +--- +name: absinthe +description: GraphQL implementation for Elixir. +url: https://github.com/absinthe-graphql/absinthe +github: absinthe-graphql/absinthe +--- + + diff --git a/src/content/code/language-support/elixir/server/graphql-elixir.md b/src/content/code/language-support/elixir/server/graphql-elixir.md new file mode 100644 index 0000000000..4ec2bf84b1 --- /dev/null +++ b/src/content/code/language-support/elixir/server/graphql-elixir.md @@ -0,0 +1,8 @@ +--- +name: graphql-elixir +description: An Elixir implementation of Facebook's GraphQL. +url: https://github.com/graphql-elixir/graphql +github: graphql-elixir/graphql +--- + + diff --git a/src/content/code/language-support/elm/client/dillonkearns-elm-graphql.md b/src/content/code/language-support/elm/client/dillonkearns-elm-graphql.md new file mode 100644 index 0000000000..0850dba825 --- /dev/null +++ b/src/content/code/language-support/elm/client/dillonkearns-elm-graphql.md @@ -0,0 +1,8 @@ +--- +name: dillonkearns/elm-graphql +description: Library and command-line code generator to create type-safe Elm code for a GraphQL endpoint. +url: https://github.com/dillonkearns/elm-graphql +github: dillonkearns/elm-graphql +--- + + diff --git a/src/content/code/language-support/erlang/server/graphql-erlang.md b/src/content/code/language-support/erlang/server/graphql-erlang.md new file mode 100644 index 0000000000..9bb34ad549 --- /dev/null +++ b/src/content/code/language-support/erlang/server/graphql-erlang.md @@ -0,0 +1,8 @@ +--- +name: graphql-erlang +description: GraphQL implementation in Erlang. +url: https://github.com/shopgun/graphql-erlang +github: jlouis/graphql-erlang +--- + + diff --git a/src/content/code/language-support/flutter/client/ferry.md b/src/content/code/language-support/flutter/client/ferry.md new file mode 100644 index 0000000000..ffaa019b6b --- /dev/null +++ b/src/content/code/language-support/flutter/client/ferry.md @@ -0,0 +1,8 @@ +--- +name: Ferry +description: Ferry is a simple, powerful GraphQL Client for Flutter and Dart. +url: https://ferrygraphql.com/ +github: gql-dart/ferry +--- + + diff --git a/src/content/code/language-support/flutter/client/graphql.md b/src/content/code/language-support/flutter/client/graphql.md new file mode 100644 index 0000000000..fa0eb8e3aa --- /dev/null +++ b/src/content/code/language-support/flutter/client/graphql.md @@ -0,0 +1,8 @@ +--- +name: graphql +description: A GraphQL client implementation in Flutter. +url: https://github.com/zino-app/graphql-flutter#readme +github: zino-app/graphql-flutter +--- + + diff --git a/src/content/code/language-support/go/client/go-graphql-client.md b/src/content/code/language-support/go/client/go-graphql-client.md new file mode 100644 index 0000000000..35bdad9438 --- /dev/null +++ b/src/content/code/language-support/go/client/go-graphql-client.md @@ -0,0 +1,8 @@ +--- +name: go-graphql-client +description: A GraphQL Go client with Mutation, Query and Subscription support. +url: https://github.com/hasura/go-graphql-client +github: hasura/go-graphql-client +--- + + diff --git a/src/content/code/language-support/go/client/graphql.md b/src/content/code/language-support/go/client/graphql.md new file mode 100644 index 0000000000..3e778eac5d --- /dev/null +++ b/src/content/code/language-support/go/client/graphql.md @@ -0,0 +1,8 @@ +--- +name: graphql +description: A GraphQL client implementation in Go. +url: https://github.com/shurcooL/graphql#readme +github: shurcooL/graphql +--- + + diff --git a/src/content/code/language-support/go/client/machinebox-graphql.md b/src/content/code/language-support/go/client/machinebox-graphql.md new file mode 100644 index 0000000000..a2f35489d8 --- /dev/null +++ b/src/content/code/language-support/go/client/machinebox-graphql.md @@ -0,0 +1,8 @@ +--- +name: machinebox/graphql +description: An elegant low-level HTTP client for GraphQL. +url: https://github.com/machinebox/graphql +github: machinebox/graphql +--- + + diff --git a/src/content/code/language-support/go/server/99designs-gqlgen.md b/src/content/code/language-support/go/server/99designs-gqlgen.md new file mode 100644 index 0000000000..80b2f9d0f2 --- /dev/null +++ b/src/content/code/language-support/go/server/99designs-gqlgen.md @@ -0,0 +1,8 @@ +--- +name: 99designs/gqlgen +description: Go generate based graphql server library. +url: https://github.com/99designs/gqlgen +github: 99designs/gqlgen +--- + + diff --git a/src/content/code/language-support/go/server/appointy-jaal.md b/src/content/code/language-support/go/server/appointy-jaal.md new file mode 100644 index 0000000000..28095e284e --- /dev/null +++ b/src/content/code/language-support/go/server/appointy-jaal.md @@ -0,0 +1,8 @@ +--- +name: appointy/jaal +description: Develop spec compliant GraphQL servers in Go. +url: https://github.com/appointy/jaal +github: appointy/jaal +--- + + diff --git a/src/content/code/language-support/go/server/graph-gophers-graphql-go.md b/src/content/code/language-support/go/server/graph-gophers-graphql-go.md new file mode 100644 index 0000000000..2bf5eaad94 --- /dev/null +++ b/src/content/code/language-support/go/server/graph-gophers-graphql-go.md @@ -0,0 +1,8 @@ +--- +name: graph-gophers/graphql-go +description: An active implementation of GraphQL in Golang (was https://github.com/neelance/graphql-go). +url: https://github.com/graph-gophers/graphql-go +github: graph-gophers/graphql-go +--- + + diff --git a/src/content/code/language-support/go/server/graphql-go.md b/src/content/code/language-support/go/server/graphql-go.md new file mode 100644 index 0000000000..6ef7da936f --- /dev/null +++ b/src/content/code/language-support/go/server/graphql-go.md @@ -0,0 +1,8 @@ +--- +name: graphql-go +description: An implementation of GraphQL for Go / Golang. +url: https://github.com/graphql-go/graphql +github: graphql-go/graphql +--- + + diff --git a/src/content/code/language-support/go/server/graphql-relay-go.md b/src/content/code/language-support/go/server/graphql-relay-go.md new file mode 100644 index 0000000000..423b01719d --- /dev/null +++ b/src/content/code/language-support/go/server/graphql-relay-go.md @@ -0,0 +1,8 @@ +--- +name: graphql-relay-go +description: A Go/Golang library to help construct a graphql-go server supporting react-relay. +url: https://github.com/graphql-go/relay +github: graphql-go/relay +--- + + diff --git a/src/content/code/language-support/go/server/samsarahq-thunder.md b/src/content/code/language-support/go/server/samsarahq-thunder.md new file mode 100644 index 0000000000..370cd634e2 --- /dev/null +++ b/src/content/code/language-support/go/server/samsarahq-thunder.md @@ -0,0 +1,8 @@ +--- +name: samsarahq/thunder +description: A GraphQL implementation with easy schema building, live queries, and batching. +url: https://github.com/samsarahq/thunder +github: samsarahq/thunder +--- + + diff --git a/src/content/code/language-support/go/tools/graphjin.md b/src/content/code/language-support/go/tools/graphjin.md new file mode 100644 index 0000000000..464e5bac94 --- /dev/null +++ b/src/content/code/language-support/go/tools/graphjin.md @@ -0,0 +1,8 @@ +--- +name: graphjin +description: An instant GraphQL to SQL compiler. Use as a standalone service or a Go library. Formerly super-graph. +url: https://github.com/dosco/graphjin +github: dosco/graphjin +--- + + diff --git a/src/content/code/language-support/groovy/server/gorm-graphql.md b/src/content/code/language-support/groovy/server/gorm-graphql.md new file mode 100644 index 0000000000..9c6ba9c890 --- /dev/null +++ b/src/content/code/language-support/groovy/server/gorm-graphql.md @@ -0,0 +1,21 @@ +--- +name: gorm-graphql +description: An automatic GraphQL schema generator for GORM +url: https://grails.github.io/gorm-graphql/latest/guide/index.html +github: grails/gorm-graphql +--- + +**Core Library** - The GORM GraphQL library provides functionality to generate a GraphQL schema based on your GORM entities. In addition to mapping domain classes to a GraphQL schema, the core library also provides default implementations of "data fetchers" to query, update, and delete data through executions of the schema. + +**Grails Plugin** - In a addition to the Core Library, the GORM GraphQL Grails Plugin: + +- Provides a controller to receive and respond to GraphQL requests through HTTP, based on their guidelines. + +- Generates the schema at startup with spring bean configuration to make it easy to extend. + +- Includes a [GraphiQL](https://github.com/graphql/graphiql) browser enabled by default in development. The browser is accessible at /graphql/browser. + +- Overrides the default data binder to use the data binding provided by Grails +- Provides a [trait](https://grails.github.io/gorm-graphql/latest/api/org/grails/gorm/graphql/plugin/testing/GraphQLSpec.html) to make integration testing of your GraphQL endpoints easier + +See [the documentation](https://grails.github.io/gorm-graphql/latest/guide/index.html) for more information. diff --git a/src/content/code/language-support/groovy/server/gql.md b/src/content/code/language-support/groovy/server/gql.md new file mode 100644 index 0000000000..fa32e99e5a --- /dev/null +++ b/src/content/code/language-support/groovy/server/gql.md @@ -0,0 +1,8 @@ +--- +name: GQL +description: GQL is a Groove library for GraphQL +url: https://grooviter.github.io/gql/ +github: grooviter/gql +--- + + diff --git a/src/content/code/language-support/haskell/client/morpheus-graphql-client.md b/src/content/code/language-support/haskell/client/morpheus-graphql-client.md new file mode 100644 index 0000000000..cec77a5e8e --- /dev/null +++ b/src/content/code/language-support/haskell/client/morpheus-graphql-client.md @@ -0,0 +1,8 @@ +--- +name: morpheus-graphql-client +description: A strongly-typed GraphQL client implementation in Haksell. +url: https://github.com/morpheusgraphql/morpheus-graphql +github: morpheusgraphql/morpheus-graphql +--- + + diff --git a/src/content/code/language-support/haskell/server/morpheus-graphql.md b/src/content/code/language-support/haskell/server/morpheus-graphql.md new file mode 100644 index 0000000000..a53e7216ea --- /dev/null +++ b/src/content/code/language-support/haskell/server/morpheus-graphql.md @@ -0,0 +1,61 @@ +--- +name: Morpheus GraphQL +description: A Haskell library for building GraphQL APIs. +url: https://github.com/morpheusgraphql/morpheus-graphql +github: morpheusgraphql/morpheus-graphql +--- + +Hello world example with `morpheus-graphql`: + +```graphql +# schema.gql +""" +A supernatural being considered divine and sacred +""" +type Deity { + name: String! + power: String @deprecated(reason: "no more supported") +} +type Query { + deity(name: String! = "Morpheus"): Deity! +} +``` + + +```haskell +{-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE DuplicateRecordFields #-} +{-# LANGUAGE FlexibleContexts #-} +{-# LANGUAGE FlexibleInstances #-} +{-# LANGUAGE MultiParamTypeClasses #-} +{-# LANGUAGE NamedFieldPuns #-} +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE ScopedTypeVariables #-} +{-# LANGUAGE TemplateHaskell #-} +{-# LANGUAGE TypeFamilies #-} +module API (api) where +import Data.ByteString.Lazy.Char8 (ByteString) +import Data.Morpheus (interpreter) +import Data.Morpheus.Document (importGQLDocument) +import Data.Morpheus.Types (RootResolver (..), Undefined (..)) +import Data.Text (Text) +importGQLDocument "schema.gql" +rootResolver :: RootResolver IO () Query Undefined Undefined +rootResolver = + RootResolver + { queryResolver = Query {deity}, + mutationResolver = Undefined, + subscriptionResolver = Undefined + } + where + deity DeityArgs {name} = + pure + Deity + { name = pure name, + power = pure (Just "Shapeshifting") + } +api :: ByteString -> IO ByteString +api = interpreter rootResolver +``` + +See [morpheus-graphql-examples](https://github.com/morpheusgraphql/morpheus-graphql) for more sophisticated APIs. diff --git a/src/content/code/language-support/haskell/server/mu-haskell.md b/src/content/code/language-support/haskell/server/mu-haskell.md new file mode 100644 index 0000000000..636f68d248 --- /dev/null +++ b/src/content/code/language-support/haskell/server/mu-haskell.md @@ -0,0 +1,56 @@ +--- +name: Mu-Haskell with Mu-GraphQL +description: A Haskell library for building microservices (gRPC, HTTP) and GraphQL APIs. +url: https://higherkindness.io/mu-haskell/ +github: higherkindness/mu-haskell +--- + +Example implementation of a GraphQL server with type-level representation of the schema auto-generated: + +```haskell +{-# LANGUAGE DataKinds #-} +{-# LANGUAGE NamedFieldPuns #-} +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE PartialTypeSignatures #-} +{-# LANGUAGE TypeApplications #-} +{-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE TypeOperators #-} + +-- imports omitted for brevity... + +graphql "Library" "library.graphql" -- all the magic happens here! ๐Ÿช„๐ŸŽฉ + +-- ... a bit more code... + +libraryServer :: SqlBackend -> ServerT ObjectMapping i Library ServerErrorIO _ +libraryServer conn = + resolver + ( object @"Book" + ( field @"id" bookId, + field @"title" bookTitle, + field @"author" bookAuthor, + field @"imageUrl" bookImage + ), + object @"Author" + ( field @"id" authorId, + field @"name" authorName, + field @"books" authorBooks + ), + object @"Query" + ( method @"authors" allAuthors, + method @"books" allBooks + ), + object @"Mutation" + ( method @"newAuthor" newAuthor, + method @"newBook" newBook + ), + object @"Subscription" + (method @"allBooks" allBooksConduit) + ) + where + bookId :: Entity Book -> ServerErrorIO Integer + bookId (Entity (BookKey k) _) = pure $ toInteger k + -- ... more resolvers... +``` + +See [our docs](https://higherkindness.io/mu-haskell/graphql/) for more information about how to build your own GraphQL server and [the library example](https://github.com/higherkindness/mu-graphql-example-elm) for a more end-to-end example that includes a client written in Elm! diff --git a/src/content/code/language-support/java-kotlin-android/client/apollo-android.md b/src/content/code/language-support/java-kotlin-android/client/apollo-android.md new file mode 100644 index 0000000000..d4e6fc704e --- /dev/null +++ b/src/content/code/language-support/java-kotlin-android/client/apollo-android.md @@ -0,0 +1,8 @@ +--- +name: Apollo Android +description: A strongly-typed, caching GraphQL client for Android, written in Java. +url: https://github.com/apollographql/apollo-android +github: apollographql/apollo-android +--- + + diff --git a/src/content/code/language-support/java-kotlin-android/client/graphql-kotlin.md b/src/content/code/language-support/java-kotlin-android/client/graphql-kotlin.md new file mode 100644 index 0000000000..94bf273a58 --- /dev/null +++ b/src/content/code/language-support/java-kotlin-android/client/graphql-kotlin.md @@ -0,0 +1,88 @@ +--- +name: graphql-kotlin +description: A set of libraries for running GraphQL client and server in Kotlin. +url: https://github.com/ExpediaGroup/graphql-kotlin/ +github: ExpediaGroup/graphql-kotlin +--- + +GraphQL Kotlin provides a set of lightweight type-safe GraphQL HTTP clients. The library provides Ktor HTTP client and Spring WebClient based reference implementations as well as allows for custom implementations using other engines. Type-safe data models are generated at build time by the GraphQL Kotlin Gradle and Maven plugins. + +To generate Ktor based GraphQL client add following to your Gradle build file: + +```kotlin +// build.gradle.kts +import com.expediagroup.graphql.plugin.generator.GraphQLClientType +import com.expediagroup.graphql.plugin.gradle.graphql + +plugins { + id("com.expediagroup.graphql") version $latestGraphQLKotlinVersion +} + +dependencies { + implementation("com.expediagroup:graphql-kotlin-ktor-client:$latestGraphQLKotlinVersion") +} + +graphql { + client { + // target GraphQL endpoint + endpoint = "http://localhost:8080/graphql" + // package for generated client code + packageName = "com.example.generated" + clientType = GraphQLClientType.KTOR + } +} +``` + +By default, GraphQL Kotlin plugin will look for query files under `src/main/resources`. Given `helloWorld: String!` query we can add following `HelloWorldQuery.graphql` sample query to our repo: + +```graphql +query HelloWorldQuery { + helloWorld +} +``` + +Plugin will generate following client code: + +```kotlin +package com.example.generated + +import com.expediagroup.graphql.client.GraphQLKtorClient +import com.expediagroup.graphql.types.GraphQLResponse +import kotlin.String + +const val HELLO_WORLD_QUERY: String = "query HelloWorldQuery {\n helloWorld\n}" + +class HelloWorldQuery( + private val graphQLClient: GraphQLKtorClient<*> +) { + suspend fun execute(requestBuilder: HttpRequestBuilder.() -> Unit = {}): GraphQLResponse = + graphQLClient.execute(HELLO_WORLD_QUERY, "HelloWorldQuery", null, requestBuilder) + + data class Result( + val helloWorld: String + ) +} +``` + +We can then execute the client + +```kotlin +package com.example.client + +import com.expediagroup.graphql.client.GraphQLKtorClient +import com.expediagroup.graphql.generated.HelloWorldQuery +import kotlinx.coroutines.runBlocking +import java.net.URL + +fun main() { + val client = GraphQLKtorClient(url = URL("http://localhost:8080/graphql")) + val helloWorldQuery = HelloWorldQuery(client) + runBlocking { + val result = helloWorldQuery.execute() + println("hello world query result: ${result.data?.helloWorld}") + } + client.close() +} +``` + +See [graphql-kotlin docs](https://expediagroup.github.io/graphql-kotlin/docs/getting-started) for additial details. \ No newline at end of file diff --git a/src/content/code/language-support/java-kotlin-android/client/nodes.md b/src/content/code/language-support/java-kotlin-android/client/nodes.md new file mode 100644 index 0000000000..2840e6a29a --- /dev/null +++ b/src/content/code/language-support/java-kotlin-android/client/nodes.md @@ -0,0 +1,8 @@ +--- +name: Nodes +description: A GraphQL JVM Client designed for constructing queries from standard model definitions. By American Express. +url: https://github.com/americanexpress/nodes +github: americanexpress/nodes +--- + + diff --git a/src/content/code/language-support/java-kotlin-android/server/graphql-calculator.md b/src/content/code/language-support/java-kotlin-android/server/graphql-calculator.md new file mode 100644 index 0000000000..536d42e8b8 --- /dev/null +++ b/src/content/code/language-support/java-kotlin-android/server/graphql-calculator.md @@ -0,0 +1,57 @@ +--- +name: graphql-calculator +description: A lightweight graphql calculation engine. +url: https://github.com/graphql-calculator/graphql-calculator +github: graphql-calculator/graphql-calculator +--- + +GraphQL Calculator is a lightweight graphql calculation engine, +which is used to alter execution behavior of graphql query. + +Here are some examples on how to use GraphQL Calculator on graphql query. + +```graphql +query basicMapValue($userIds:[Int]){ + userInfoList(userIds:$userIds) + { + id + age + firstName + lastName + fullName: stringHolder @map(mapper: "firstName + lastName") + } +} +query filterUserByAge($userId:[Int]){ + userInfoList(userIds: $userId) + @filter(predicate: "age>=18") + { + userId + age + firstName + lastName + } +} +query parseFetchedValueToAnotherFieldArgumentMap($itemIds:[Int]){ + itemList(itemIds: $itemIds){ + # save sellerId as List with unique name "sellerIdList" + sellerId @fetchSource(name: "sellerIdList") + name + saleAmount + salePrice + } + userInfoList(userIds: 1) + # transform the argument of "userInfoList" named "userIds" according to expression "sellerIdList" and expression argument, + # which mean replace userIds value by source named "sellerIdList" + @argumentTransform(argumentName: "userIds", + operateType: MAP, + expression: "sellerIdList", + dependencySources: ["sellerIdList"] + ){ + userId + name + age + } +} +``` + +See [graphql-calculator README](https://github.com/graphql-calculator/graphql-calculator) for more information. diff --git a/src/content/code/language-support/java-kotlin-android/server/graphql-java.md b/src/content/code/language-support/java-kotlin-android/server/graphql-java.md new file mode 100644 index 0000000000..d01ea20a88 --- /dev/null +++ b/src/content/code/language-support/java-kotlin-android/server/graphql-java.md @@ -0,0 +1,47 @@ +--- +name: graphql-java +description: A Java library for building GraphQL APIs. +url: https://github.com/graphql-java/graphql-java +github: graphql-java/graphql-java +--- + +Code that executes a hello world GraphQL query with `graphql-java`: + +```java +import graphql.ExecutionResult; +import graphql.GraphQL; +import graphql.schema.GraphQLSchema; +import graphql.schema.StaticDataFetcher; +import graphql.schema.idl.RuntimeWiring; +import graphql.schema.idl.SchemaGenerator; +import graphql.schema.idl.SchemaParser; +import graphql.schema.idl.TypeDefinitionRegistry; + +import static graphql.schema.idl.RuntimeWiring.newRuntimeWiring; + +public class HelloWorld { + + public static void main(String[] args) { + String schema = "type Query{hello: String} schema{query: Query}"; + + SchemaParser schemaParser = new SchemaParser(); + TypeDefinitionRegistry typeDefinitionRegistry = schemaParser.parse(schema); + + RuntimeWiring runtimeWiring = new RuntimeWiring() + .type("Query", builder -> builder.dataFetcher("hello", new StaticDataFetcher("world"))) + .build(); + + SchemaGenerator schemaGenerator = new SchemaGenerator(); + GraphQLSchema graphQLSchema = schemaGenerator.makeExecutableSchema(typeDefinitionRegistry, runtimeWiring); + + GraphQL build = GraphQL.newGraphQL(graphQLSchema).build(); + ExecutionResult executionResult = build.execute("{hello}"); + + System.out.println(executionResult.getData().toString()); + // Prints: {hello=world} + } +} +``` + +See [the graphql-java docs](https://github.com/graphql-java/graphql-java) for more information on setup. + diff --git a/src/content/code/language-support/java-kotlin-android/server/graphql-kotlin.md b/src/content/code/language-support/java-kotlin-android/server/graphql-kotlin.md new file mode 100644 index 0000000000..9e321f89a7 --- /dev/null +++ b/src/content/code/language-support/java-kotlin-android/server/graphql-kotlin.md @@ -0,0 +1,40 @@ +--- +name: graphql-kotlin +description: A set of libraries for running GraphQL client and server in Kotlin. +url: https://github.com/ExpediaGroup/graphql-kotlin/ +github: ExpediaGroup/graphql-kotlin +--- + +GraphQL Kotlin follows a code first approach for generating your GraphQL schemas. Given the similarities between Kotlin and GraphQL, such as the ability to define nullable/non-nullable types, a schema can be generated from Kotlin code without any separate schema specification. To create a reactive GraphQL web server add following dependency to your Gradle build file: + +```kotlin +// build.gradle.kts +implementation("com.expediagroup", "graphql-kotlin-spring-server", latestVersion) +``` + +We also need to provide a list of supported packages that can be scanned for exposing your schema objects through reflections. Add following configuration to your `application.yml` file: + +```yaml +graphql: + packages: + - "com.your.package" +``` + +With the above configuration we can now create our schema. In order to expose your queries, mutations and/or subscriptions in the GraphQL schema you simply need to implement corresponding marker interface and they will be automatically picked up by `graphql-kotlin-spring-server` auto-configuration library. + +```kotlin +@Component +class HelloWorldQuery : Query { + fun helloWorld() = "Hello World!!!" +} +``` + +This will result in a reactive GraphQL web application with following schema: + +```graphql +type Query { + helloWorld: String! +} +``` + +See [graphql-kotlin docs](https://expediagroup.github.io/graphql-kotlin/docs/getting-started) for additial details. diff --git a/src/content/code/language-support/java-kotlin-android/server/kgraphql.md b/src/content/code/language-support/java-kotlin-android/server/kgraphql.md new file mode 100644 index 0000000000..bd73f061f1 --- /dev/null +++ b/src/content/code/language-support/java-kotlin-android/server/kgraphql.md @@ -0,0 +1,61 @@ +--- +name: KGraphQL +description: KGraphQL is a Kotlin implementation of GraphQL. It provides a rich DSL to set up the GraphQL schema. +url: https://kgraphql.io/ +github: aPureBase/KGraphQL +--- + +Here's an example on how to create a simple schema based on a kotlin data class plus a property resolver that gets applied onto your class. + +```kotlin +data class Article(val id: Int, val text: String) + +fun main() { + val schema = KGraphQL.schema { + query("article") { + resolver { id: Int?, text: String -> + Article(id ?: -1, text) + } + } + type
    { + property("fullText") { + resolver { article: Article -> + "${article.id}: ${article.text}" + } + } + } + } + + schema.execute(""" + { + article(id: 5, text: "Hello World") { + id + fullText + } + } + """).let(::println) +} +``` + +KGraphQL is using coroutines behind the scenes to provide great asynchronous performance. + +See [KGraphQL docs](https://kgraphql.io/Installation/) for more in depth usage. + +## Ktor Plugin + +KGraphQL has a Ktor plugin which gives you a fully functional GraphQL server with a single [install](https://ktor.io/docs/zfeatures.html) function call. Example below shows how to set up a GraphQL server within Ktor and it will give you a [GraphQL Playground](https://github.com/graphql/graphql-playground) out of the box by entering `localhost:8080/graphql`. + +```kotlin +fun Application.module() { + install(GraphQL) { + playground = true + schema { + query("hello") { + resolver { -> "World!" } + } + } + } +} +``` + +You can follow the [Ktor tutorial](https://kgraphql.io/Tutorials/ktor/) to set up a KGraphQL server with ktor from scratch up. diff --git a/src/content/code/language-support/java-kotlin-android/tools/graphql-java-generator.md b/src/content/code/language-support/java-kotlin-android/tools/graphql-java-generator.md new file mode 100644 index 0000000000..04f6855ad0 --- /dev/null +++ b/src/content/code/language-support/java-kotlin-android/tools/graphql-java-generator.md @@ -0,0 +1,16 @@ +--- +name: GraphQL Java Generator +description: GraphQL Java Generator is a tool that generates Java code to speed up development for Client and Server of GraphQL APIs +url: https://github.com/graphql-java-generator +github: graphql-java-generator/graphql-gradle-plugin-project +--- + +* GraphQL Java client: it generates the Java classes that call the GraphQL endpoint, and the POJO that will contain the data returned by the server. +The GraphQL endpoint can then be queried by using a simple call to a Java method (see sample below) +* GraphQL Java server: it is based on [graphql-java](https://github.com/graphql-java/graphql-java) (listed here above). It generates all the boilerplate code. +You'll only have to implement what's specific to your server, which are the joins between the GraphQL types. +GraphQL Java Generator is available as a [Maven Plugin](https://graphql-maven-plugin-project.graphql-java-generator.com/index.html). +A Gradle plugin is coming soon. +Please note that GraphQL Java Generator is an accelerator: the generated code doesnโ€™t depend on any library specific to GraphQL Java Generator. +So, it helps you to start building application based on graphql-java. Once the code is generated, you can decide to manually edit it as any standard java application, and get rid of GraphQL Java Generator. +Of course you can, and should, according to us :), continue using GraphQL Java Generator when your projet evolves. diff --git a/src/content/code/language-support/javascript/client/apollo-client.md b/src/content/code/language-support/javascript/client/apollo-client.md new file mode 100644 index 0000000000..2de76d9c45 --- /dev/null +++ b/src/content/code/language-support/javascript/client/apollo-client.md @@ -0,0 +1,9 @@ +--- +name: Apollo Client +description: A powerful JavaScript GraphQL client, designed to work well with React, React Native, Angular 2, or just plain JavaScript. +url: http://apollographql.com/client/ +github: apollographql/apollo-client +npm: "@apollo/client" +--- + + diff --git a/src/content/code/language-support/javascript/client/aws-amplify.md b/src/content/code/language-support/javascript/client/aws-amplify.md new file mode 100644 index 0000000000..1588f72758 --- /dev/null +++ b/src/content/code/language-support/javascript/client/aws-amplify.md @@ -0,0 +1,9 @@ +--- +name: AWS Amplify +description: A JavaScript library for application development using cloud services, which supports GraphQL backend and React components for working with GraphQL data. +url: https://docs.amplify.aws/ +github: aws-amplify/amplify-js +npm: "aws-amplify" +--- + + diff --git a/src/content/code/language-support/javascript/client/gq-loader.md b/src/content/code/language-support/javascript/client/gq-loader.md new file mode 100644 index 0000000000..40a76b1b1a --- /dev/null +++ b/src/content/code/language-support/javascript/client/gq-loader.md @@ -0,0 +1,9 @@ +--- +name: gq-loader +description: A simple JavaScript GraphQL client๏ผŒLet the *.gql file be used as a module through webpack loader. +url: https://github.com/Houfeng/gq-loader +github: Houfeng/gq-loader +npm: "gq-loader" +--- + + diff --git a/src/content/code/language-support/javascript/client/grafoo.md b/src/content/code/language-support/javascript/client/grafoo.md new file mode 100644 index 0000000000..792facaee3 --- /dev/null +++ b/src/content/code/language-support/javascript/client/grafoo.md @@ -0,0 +1,9 @@ +--- +name: Grafoo +description: An all purpose GraphQL client with view layer integrations for multiple frameworks in just 1.6kb. +url: https://github.com/grafoojs/grafoo +github: grafoojs/grafoo +npm: "@grafoo/core" +--- + + diff --git a/src/content/code/language-support/javascript/client/graphql-hooks.md b/src/content/code/language-support/javascript/client/graphql-hooks.md new file mode 100644 index 0000000000..0ae88803ac --- /dev/null +++ b/src/content/code/language-support/javascript/client/graphql-hooks.md @@ -0,0 +1,70 @@ +--- +name: graphql-hooks +description: Minimal React hooks-first GraphQL client with a tiny bundle, SSR support and caching +url: https://github.com/nearform/graphql-hooks +github: nearform/graphql-hooks +npm: "graphql-hooks" +--- + +- ๐Ÿฅ‡ First-class hooks API +- โš–๏ธ _Tiny_ bundle: only 7.6kB (2.8 gzipped) +- ๐Ÿ“„ Full SSR support: see [graphql-hooks-ssr](packages/graphql-hooks-ssr) +- ๐Ÿ”Œ Plugin Caching: see [graphql-hooks-memcache](packages/graphql-hooks-memcache) +- ๐Ÿ”ฅ No more render props hell +- โณ Handle loading and error states with ease + +### Quickstart + +```bash +npm install graphql-hooks +``` + +First you'll need to create a client and wrap your app with the provider: + +```js +import { GraphQLClient, ClientContext } from 'graphql-hooks' + +const client = new GraphQLClient({ + url: '/graphql' +}) + +function App() { + return ( + + {/* children */} + + ) +} +``` + +Now in your child components you can make use of `useQuery`: + +```js +import { useQuery } from 'graphql-hooks' + +const HOMEPAGE_QUERY = `query HomePage($limit: Int) { + users(limit: $limit) { + id + name + } +}` + +function MyComponent() { + const { loading, error, data } = useQuery(HOMEPAGE_QUERY, { + variables: { + limit: 10 + } + }) + + if (loading) return 'Loading...' + if (error) return 'Something Bad Happened' + + return ( +
      + {data.users.map(({ id, name }) => ( +
    • {name}
    • + ))} +
    + ) +} +``` diff --git a/src/content/code/language-support/javascript/client/graphql-request.md b/src/content/code/language-support/javascript/client/graphql-request.md new file mode 100644 index 0000000000..12e6d10d25 --- /dev/null +++ b/src/content/code/language-support/javascript/client/graphql-request.md @@ -0,0 +1,9 @@ +--- +name: GraphQL Request +description: A simple and flexible JavaScript GraphQL client that works in all JavaScript environments (the browser, Node.js, and React Native) - basically a lightweight wrapper around `fetch`. +url: https://github.com/prisma/graphql-request +github: prisma-labs/graphql-request +npm: "graphql-request" +--- + + diff --git a/src/content/code/language-support/javascript/client/graphqurl.md b/src/content/code/language-support/javascript/client/graphqurl.md new file mode 100644 index 0000000000..8d9b83db99 --- /dev/null +++ b/src/content/code/language-support/javascript/client/graphqurl.md @@ -0,0 +1,9 @@ +--- +name: graphqurl +description: curl for GraphQL with autocomplete, subscriptions and GraphiQL. Also a dead-simple universal javascript GraphQL client. +url: https://github.com/hasura/graphqurl +github: hasura/graphqurl +npm: "graphqurl" +--- + + diff --git a/src/content/code/language-support/javascript/client/lokka.md b/src/content/code/language-support/javascript/client/lokka.md new file mode 100644 index 0000000000..6f3c8d3277 --- /dev/null +++ b/src/content/code/language-support/javascript/client/lokka.md @@ -0,0 +1,9 @@ +--- +name: Lokka +description: A simple JavaScript GraphQL client that works in all JavaScript environments (the browser, Node.js, and React Native). +url: https://github.com/kadirahq/lokka +github: kadirahq/lokka +npm: "lokka" +--- + + diff --git a/src/content/code/language-support/javascript/client/nanogql.md b/src/content/code/language-support/javascript/client/nanogql.md new file mode 100644 index 0000000000..14e6761774 --- /dev/null +++ b/src/content/code/language-support/javascript/client/nanogql.md @@ -0,0 +1,9 @@ +--- +name: nanogql +description: Tiny GraphQL client library using template strings. +url: https://github.com/yoshuawuyts/nanogql +github: choojs/nanographql +npm: "nanographql" +--- + + diff --git a/src/content/code/language-support/javascript/client/relay.md b/src/content/code/language-support/javascript/client/relay.md new file mode 100644 index 0000000000..ea2d96a16d --- /dev/null +++ b/src/content/code/language-support/javascript/client/relay.md @@ -0,0 +1,9 @@ +--- +name: Relay +description: Facebook's framework for building React applications that talk to a GraphQL backend. +url: https://facebook.github.io/relay/ +github: facebook/relay +npm: "react-relay" +--- + + diff --git a/src/content/code/language-support/javascript/client/urql.md b/src/content/code/language-support/javascript/client/urql.md new file mode 100644 index 0000000000..801836bea7 --- /dev/null +++ b/src/content/code/language-support/javascript/client/urql.md @@ -0,0 +1,15 @@ +--- +name: urql +description: A highly customizable and versatile GraphQL client with which you add on features like normalized caching as you grow. +url: https://formidable.com/open-source/urql/docs/ +github: FormidableLabs/urql +npm: "@urql/core" +--- + +`urql` is a GraphQL client that exposes a set of helpers for several frameworks. +It's built to be highly customisable and versatile so you can take it from getting started with your first GraphQL project +all the way to building complex apps and experimenting with GraphQL clients. + +- Currently supports React, React Native, Preact, Svelte, and Vue, and is supported by GraphQL Code Generator. +- Logical yet simple default behaviour and document caching, and normalized caching via `@urql/exchange-graphcache` +- Fully customizable behaviour via "exchanges" (addon packages) diff --git a/src/content/code/language-support/javascript/server/apollo-server.md b/src/content/code/language-support/javascript/server/apollo-server.md new file mode 100644 index 0000000000..de749042b6 --- /dev/null +++ b/src/content/code/language-support/javascript/server/apollo-server.md @@ -0,0 +1,43 @@ +--- +name: Apollo Server +description: A set of GraphQL server packages from Apollo that work with various Node.js HTTP frameworks (Express, Connect, Hapi, Koa etc). +url: https://www.apollographql.com/docs/apollo-server/ +github: apollographql/apollo-server +npm: "apollo-server-express" +--- + +To run a hello world server with apollo-server-express: + +```bash +npm install apollo-server-express express +``` + +Then run `node server.js` with this code in `server.js`: + +```js +const express = require('express'); +const { ApolloServer, gql } = require('apollo-server-express'); + +const typeDefs = gql` + type Query { + hello: String + } +`; + +const resolvers = { + Query: { + hello: () => 'Hello world!', + }, +}; + +const server = new ApolloServer({ typeDefs, resolvers }); + +const app = express(); +server.applyMiddleware({ app }); + +app.listen({ port: 4000 }, () => + console.log('Now browse to http://localhost:4000' + server.graphqlPath) +); +``` + +Apollo Server also supports all Node.js HTTP server frameworks: Express, Connect, HAPI, Koa and NestJs. diff --git a/src/content/code/language-support/javascript/server/express-graphql.md b/src/content/code/language-support/javascript/server/express-graphql.md new file mode 100644 index 0000000000..ae70681236 --- /dev/null +++ b/src/content/code/language-support/javascript/server/express-graphql.md @@ -0,0 +1,37 @@ +--- +name: Express GraphQL +description: The reference implementation of a GraphQL API server over an Express webserver. You can use this to run GraphQL in conjunction with a regular Express webserver, or as a standalone GraphQL server. +url: /graphql-js/running-an-express-graphql-server/ +github: graphql/express-graphql +npm: "express-graphql" +--- + +To run an `express-graphql` hello world server: + +```bash +npm install express express-graphql graphql +``` + +Then run `node server.js` with this code in `server.js`: + +```js +var express = require('express'); +var { graphqlHTTP } = require('express-graphql'); +var { buildSchema } = require('graphql'); + +var schema = buildSchema(` + type Query { + hello: String + } +`); + +var root = { hello: () => 'Hello world!' }; + +var app = express(); +app.use('/graphql', graphqlHTTP({ + schema: schema, + rootValue: root, + graphiql: true, +})); +app.listen(4000, () => console.log('Now browse to localhost:4000/graphql')); +``` diff --git a/src/content/code/language-support/javascript/server/graphql-helix.md b/src/content/code/language-support/javascript/server/graphql-helix.md new file mode 100644 index 0000000000..5c872e3ec3 --- /dev/null +++ b/src/content/code/language-support/javascript/server/graphql-helix.md @@ -0,0 +1,84 @@ +--- +name: GraphQL Helix +description: A collection of utility functions for building your own GraphQL HTTP server. You can check out [Building a GraphQL server with GraphQL Helix](https://dev.to/danielrearden/building-a-graphql-server-with-graphql-helix-2k44) on DEV for a detailed tutorial on getting started. +url: https://github.com/contrawork/graphql-helix +github: contrawork/graphql-helix +npm: "graphql-helix" +--- + +To run a hello world server with GraphQL Helix: + +```bash +npm install graphql graphql-helix express +``` + +Then run `node server.js` with this code in `server.js`: + +```js +const express = require('express') +const { + GraphQLObjectType, + GraphQLSchema, + GraphQLString +} = require('graphql'); +const { + getGraphQLParameters, + processRequest, + renderGraphiQL, + shouldRenderGraphiQL +} = require('graphql-helix'); + +const schema = new GraphQLSchema({ + query: new GraphQLObjectType({ + name: 'Query', + fields: { + hello: { + type: GraphQLString, + resolve: () => 'Hello world!', + }, + }, + }), +}); + +const app = express(); + +app.use(express.json()); + +app.use('/graphql', async (req, res) => { + const request = { + body: req.body, + headers: req.headers, + method: req.method, + query: req.query, + }; + + if (shouldRenderGraphiQL(request)) { + res.send(renderGraphiQL()); + } else { + const { operationName, query, variables } = getGraphQLParameters(request); + + const result = await processRequest({ + operationName, + query, + variables, + request, + schema, + }); + + if (result.type === 'RESPONSE') { + result.headers.forEach(({ name, value }) => res.setHeader(name, value)); + res.status(result.status); + res.json(result.payload); + } else { + // graphql-helix also supports subscriptions and incremental delivery (i.e. @defer and @stream directives) + // out of the box. See the repo for more complete examples that also implement those features. + } + } +}); + +app.listen(4000, () => + console.log('Now browse to http://localhost:4000/graphql'); +) +``` + +This example uses Express, but GraphQL Helix is framework- and runtime-agnostic -- it can run in Node, Deno and the browser. GraphQL Helix provides you with a handful of utility functions to build your own HTTP server but leaves the ultimate implementation details up to you. diff --git a/src/content/code/language-support/javascript/server/graphql-js.md b/src/content/code/language-support/javascript/server/graphql-js.md new file mode 100644 index 0000000000..9769b78e39 --- /dev/null +++ b/src/content/code/language-support/javascript/server/graphql-js.md @@ -0,0 +1,31 @@ +--- +name: GraphQL.js +description: The reference implementation of the GraphQL specification, designed for running GraphQL in a Node.js environment. +url: /graphql-js/ +github: graphql/graphql-js +npm: "graphql" +--- + +To run a `GraphQL.js` hello world script from the command line: + +```bash +npm install graphql +``` + +Then run `node hello.js` with this code in `hello.js`: + +```js +var { graphql, buildSchema } = require('graphql'); + +var schema = buildSchema(` + type Query { + hello: String + } +`); + +var root = { hello: () => 'Hello world!' }; + +graphql(schema, '{ hello }', root).then((response) => { + console.log(response); +}); +``` diff --git a/src/content/code/language-support/javascript/server/graphql-yoga.md b/src/content/code/language-support/javascript/server/graphql-yoga.md new file mode 100644 index 0000000000..30f6521639 --- /dev/null +++ b/src/content/code/language-support/javascript/server/graphql-yoga.md @@ -0,0 +1,37 @@ +--- +name: graphql-yoga +description: Fully-featured GraphQL Server with focus on easy setup, performance & great developer experience +url: https://github.com/dotansimha/graphql-yoga +github: dotansimha/graphql-yoga +npm: "graphql-yoga" +--- + +- Sensible defaults & includes everything you need with minimal setup. +- Built-in support for GraphQL subscriptions using WebSockets. +- Works with all GraphQL clients (Apollo, Relay...) and fits seamless in your GraphQL workflow. + +To run a hello world server with graphql-yoga: + +```bash +npm install graphql-yoga +``` + +Then run `node server.js` with this code in `server.js`: + +```js +import { GraphQLServer } from 'graphql-yoga' +// ... or using "require()" +// const { GraphQLServer } = require('graphql-yoga') +const typeDefs = ` + type Query { + hello(name: String): String! + } +`; +const resolvers = { + Query: { + hello: (_, { name }) => `Hello ${name || 'World'}`, + }, +}; +const server = new GraphQLServer({ typeDefs, resolvers }) +server.start(() => console.log('Server is running on localhost:4000')) +``` diff --git a/src/content/code/language-support/javascript/tools/giraphql.md b/src/content/code/language-support/javascript/tools/giraphql.md new file mode 100644 index 0000000000..f4f2c62c8b --- /dev/null +++ b/src/content/code/language-support/javascript/tools/giraphql.md @@ -0,0 +1,32 @@ +--- +name: GiraphQL +description: A plugin based schema builder for creating code-first GraphQL schemas in typescript +url: https://giraphql.com/ +github: hayes/giraphql +npm: "@giraphql/core" +--- + +GiraphQL makes writing type-safe schemas simple, and works without a code generator, +build process, or extensive manual type definitions. + +```ts +import { ApolloServer } from "apollo-server" +import SchemaBuilder from "@giraphql/core" + +const builder = new SchemaBuilder({}) + +builder.queryType({ + fields: t => ({ + hello: t.string({ + args: { + name: t.arg.string({}), + }, + resolve: (parent, { name }) => `hello, ${name || "World"}`, + }), + }), +}) + +new ApolloServer({ + schema: builder.toSchema({}), +}).listen(3000) +``` diff --git a/src/content/code/language-support/javascript/tools/graphiql.md b/src/content/code/language-support/javascript/tools/graphiql.md new file mode 100644 index 0000000000..b9c2b53ffe --- /dev/null +++ b/src/content/code/language-support/javascript/tools/graphiql.md @@ -0,0 +1,9 @@ +--- +name: GraphiQL +description: An interactive in-browser GraphQL IDE. +url: https://github.com/graphql/graphiql +github: graphql/graphiql +npm: "graphiql" +--- + + diff --git a/src/content/code/language-support/javascript/tools/graphql-cli.md b/src/content/code/language-support/javascript/tools/graphql-cli.md new file mode 100644 index 0000000000..3c7ff98d00 --- /dev/null +++ b/src/content/code/language-support/javascript/tools/graphql-cli.md @@ -0,0 +1,9 @@ +--- +name: GraphQL CLI +description: A command line tool for common GraphQL development workflows. +url: https://graphql-cli.com +github: Urigo/graphql-cli +npm: "graphql-cli" +--- + + diff --git a/src/content/code/language-support/javascript/tools/graphql-code-generator.md b/src/content/code/language-support/javascript/tools/graphql-code-generator.md new file mode 100644 index 0000000000..ac5bf4fed5 --- /dev/null +++ b/src/content/code/language-support/javascript/tools/graphql-code-generator.md @@ -0,0 +1,9 @@ +--- +name: GraphQL Code Generator +description: GraphQL code generator with flexible support for custom plugins and templates like Typescript (frontend and backend), React Hooks, resolvers signatures and more. +url: https://graphql-code-generator.com +github: dotansimha/graphql-code-generator +npm: "@graphql-codegen/cli" +--- + + diff --git a/src/content/code/language-support/javascript/tools/graphql-config.md b/src/content/code/language-support/javascript/tools/graphql-config.md new file mode 100644 index 0000000000..8bc7db8659 --- /dev/null +++ b/src/content/code/language-support/javascript/tools/graphql-config.md @@ -0,0 +1,9 @@ +--- +name: GraphQL Config +description: One configuration for all your GraphQL tools (supported by most tools, editors & IDEs). +url: https://graphql-config.com +github: kamilkisiela/graphql-config +npm: "graphql-config" +--- + + diff --git a/src/content/code/language-support/javascript/tools/graphql-eslint.md b/src/content/code/language-support/javascript/tools/graphql-eslint.md new file mode 100644 index 0000000000..829e4c62eb --- /dev/null +++ b/src/content/code/language-support/javascript/tools/graphql-eslint.md @@ -0,0 +1,9 @@ +--- +name: GraphQL-ESLint +description: GraphQL-ESLint integrates GraphQL AST in the ESLint core (as a parser). +url: https://github.com/dotansimha/graphql-eslint/ +github: dotansimha/graphql-eslint/ +npm: "@graphql-eslint/eslint-plugin" +--- + + diff --git a/src/content/code/language-support/javascript/tools/graphql-inspector.md b/src/content/code/language-support/javascript/tools/graphql-inspector.md new file mode 100644 index 0000000000..060c06929f --- /dev/null +++ b/src/content/code/language-support/javascript/tools/graphql-inspector.md @@ -0,0 +1,9 @@ +--- +name: GraphQL Inspector +description: Compare schemas, validate documents, find breaking changes, find similar types, schema coverage, and more. +url: https://graphql-inspector.com/ +github: kamilkisiela/graphql-inspector +npm: "@graphql-inspector/cli" +--- + + diff --git a/src/content/code/language-support/javascript/tools/graphql-language-service.md b/src/content/code/language-support/javascript/tools/graphql-language-service.md new file mode 100644 index 0000000000..443a090ce2 --- /dev/null +++ b/src/content/code/language-support/javascript/tools/graphql-language-service.md @@ -0,0 +1,9 @@ +--- +name: GraphQL Language Service +description: An interface for building GraphQL language services for IDEs (diagnostics, autocomplete etc). +url: https://github.com/graphql/graphql-language-service +github: graphql/graphql-language-service +npm: "graphql-language-service" +--- + + diff --git a/src/content/code/language-support/javascript/tools/graphql-live-query.md b/src/content/code/language-support/javascript/tools/graphql-live-query.md new file mode 100644 index 0000000000..59eaad5c56 --- /dev/null +++ b/src/content/code/language-support/javascript/tools/graphql-live-query.md @@ -0,0 +1,9 @@ +--- +name: GraphQL Live Query +description: Real-Time with GraphQL for any GraphQL schema or transport. +url: https://github.com/n1ru4l/graphql-live-query +github: n1ru4l/graphql-live-query +npm: "@n1ru4l/graphql-live-query" +--- + + diff --git a/src/content/code/language-support/javascript/tools/graphql-mesh.md b/src/content/code/language-support/javascript/tools/graphql-mesh.md new file mode 100644 index 0000000000..8bf2de4398 --- /dev/null +++ b/src/content/code/language-support/javascript/tools/graphql-mesh.md @@ -0,0 +1,9 @@ +--- +name: GraphQL Mesh +description: GraphQL Mesh allows you to use GraphQL query language to access data in remote APIs that don't run GraphQL (and also ones that do run GraphQL). It can be used as a gateway to other services, or run as a local GraphQL schema that aggregates data from remote APIs. +url: https://graphql-mesh.com +github: Urigo/graphql-mesh +npm: "@graphql-mesh/cli" +--- + + diff --git a/src/content/code/language-support/javascript/tools/graphql-middleware.md b/src/content/code/language-support/javascript/tools/graphql-middleware.md new file mode 100644 index 0000000000..c5ebf02d76 --- /dev/null +++ b/src/content/code/language-support/javascript/tools/graphql-middleware.md @@ -0,0 +1,65 @@ +--- +name: GraphQLMiddleware +description: Split up your GraphQL resolvers in middleware functions. +url: https://github.com/maticzav/graphql-middleware +github: maticzav/graphql-middleware +npm: "graphql-middleware" +--- + +GraphQL Middleware is a schema wrapper which allows you to manage additional functionality across multiple resolvers efficiently. + +## Features + +๐Ÿ’ก Easy to use: An intuitive, yet familiar API that you will pick up in a second. +๐Ÿ’ช Powerful: Allows complete control over your resolvers (Before, After). +๐ŸŒˆ Compatible: Works with any GraphQL Schema. + +## Example + +```ts +const { ApolloServer } = require('apollo-server') +const { makeExecutableSchema } = require('@graphql-tools/schema') + +const typeDefs = ` +type Query { + hello(name: String): String + bye(name: String): String +} +` +const resolvers = { + Query: { + hello: (root, args, context, info) => { + console.log(`3. resolver: hello`) + return `Hello ${args.name ? args.name : 'world'}!` + }, + bye: (root, args, context, info) => { + console.log(`3. resolver: bye`) + return `Bye ${args.name ? args.name : 'world'}!` + }, + }, +} + +const logInput = async (resolve, root, args, context, info) => { + console.log(`1. logInput: ${JSON.stringify(args)}`) + const result = await resolve(root, args, context, info) + console.log(`5. logInput`) + return result +} + +const logResult = async (resolve, root, args, context, info) => { + console.log(`2. logResult`) + const result = await resolve(root, args, context, info) + console.log(`4. logResult: ${JSON.stringify(result)}`) + return result +} + +const schema = makeExecutableSchema({ typeDefs, resolvers }) + +const schemaWithMiddleware = applyMiddleware(schema, logInput, logResult) + +const server = new ApolloServer({ + schema: schemaWithMiddleware, +}) + +await server.listen({ port: 8008 }) +``` \ No newline at end of file diff --git a/src/content/code/language-support/javascript/tools/graphql-modules.md b/src/content/code/language-support/javascript/tools/graphql-modules.md new file mode 100644 index 0000000000..eeec6b18f6 --- /dev/null +++ b/src/content/code/language-support/javascript/tools/graphql-modules.md @@ -0,0 +1,9 @@ +--- +name: GraphQL Modules +description: GraphQL Modules lets you separate your backend implementation to small, reusable, easy-to-implement and easy-to-test pieces. +url: https://graphql-modules.com +github: Urigo/graphql-modules +npm: "graphql-modules" +--- + + diff --git a/src/content/code/language-support/javascript/tools/graphql-scalars.md b/src/content/code/language-support/javascript/tools/graphql-scalars.md new file mode 100644 index 0000000000..fcbe9a2123 --- /dev/null +++ b/src/content/code/language-support/javascript/tools/graphql-scalars.md @@ -0,0 +1,9 @@ +--- +name: GraphQL Scalars +description: A library of custom GraphQL scalar types for creating precise, type-safe GraphQL schemas. +url: https://github.com/Urigo/graphql-scalars +github: Urigo/graphql-scalars +npm: "graphql-scalars" +--- + + diff --git a/src/content/code/language-support/javascript/tools/graphql-shield.md b/src/content/code/language-support/javascript/tools/graphql-shield.md new file mode 100644 index 0000000000..282fde8515 --- /dev/null +++ b/src/content/code/language-support/javascript/tools/graphql-shield.md @@ -0,0 +1,60 @@ +--- +name: GraphQLShield +description: A GraphQL tool to ease the creation of permission layer. +url: https://github.com/maticzav/graphql-shield +github: maticzav/graphql-shield +npm: "graphql-shield" +--- + +GraphQL Shield helps you create a permission layer for your application. Using an intuitive rule-API, you'll gain the power of the shield engine on every request and reduce the load time of every request with smart caching. This way you can make sure your application will remain quick, and no internal data will be exposed. + +```ts +import { rule, shield, and, or, not } from 'graphql-shield' + +// Rules + +const isAuthenticated = rule({ cache: 'contextual' })( + async (parent, args, ctx, info) => { + return ctx.user !== null + }, +) + +const isAdmin = rule({ cache: 'contextual' })( + async (parent, args, ctx, info) => { + return ctx.user.role === 'admin' + }, +) + +const isEditor = rule({ cache: 'contextual' })( + async (parent, args, ctx, info) => { + return ctx.user.role === 'editor' + }, +) + +// Permissions + +const permissions = shield({ + Query: { + frontPage: not(isAuthenticated), + fruits: and(isAuthenticated, or(isAdmin, isEditor)), + customers: and(isAuthenticated, isAdmin), + }, + Mutation: { + addFruitToBasket: isAuthenticated, + }, + Fruit: isAuthenticated, + Customer: isAdmin, +}) + +// Server + +const server = new GraphQLServer({ + typeDefs, + resolvers, + middlewares: [permissions], + context: (req) => ({ + ...req, + user: getUser(req), + }), +}) +``` \ No newline at end of file diff --git a/src/content/code/language-support/javascript/tools/graphql-tools.md b/src/content/code/language-support/javascript/tools/graphql-tools.md new file mode 100644 index 0000000000..393b0568e4 --- /dev/null +++ b/src/content/code/language-support/javascript/tools/graphql-tools.md @@ -0,0 +1,9 @@ +--- +name: GraphQL Tools +description: A set of utils for faster development of GraphQL tools (Schema and documents loading, Schema merging and more). +url: https://graphql-tools.com +github: ardatan/graphql-tools +npm: "graphql-tools" +--- + + diff --git a/src/content/code/language-support/javascript/tools/graphql-ws.md b/src/content/code/language-support/javascript/tools/graphql-ws.md new file mode 100644 index 0000000000..1f5222c55c --- /dev/null +++ b/src/content/code/language-support/javascript/tools/graphql-ws.md @@ -0,0 +1,9 @@ +--- +name: GraphQL-WS +description: Coherent, zero-dependency, lazy, simple, GraphQL over WebSocket Protocol compliant server and client. +url: https://github.com/enisdenjo/graphql-ws +github: enisdenjo/graphql-ws +npm: "graphql-ws" +--- + + diff --git a/src/content/code/language-support/javascript/tools/postgraphile.md b/src/content/code/language-support/javascript/tools/postgraphile.md new file mode 100644 index 0000000000..79aedc83c7 --- /dev/null +++ b/src/content/code/language-support/javascript/tools/postgraphile.md @@ -0,0 +1,9 @@ +--- +name: Postgraphile +description: builds a powerful, extensible and performant GraphQL API from a PostgreSQL schema in seconds; saving you weeks if not months of development time. +url: https://www.graphile.org/postgraphile +github: graphile/postgraphile +npm: "postgraphile" +--- + + diff --git a/src/content/code/language-support/javascript/tools/sofa.md b/src/content/code/language-support/javascript/tools/sofa.md new file mode 100644 index 0000000000..becc69b471 --- /dev/null +++ b/src/content/code/language-support/javascript/tools/sofa.md @@ -0,0 +1,9 @@ +--- +name: SOFA +description: Generate REST API from your GraphQL API. +url: https://sofa-api.com/ +github: Urigo/SOFA +npm: "sofa-api" +--- + + diff --git a/src/content/code/language-support/julia/client/diana-jl.md b/src/content/code/language-support/julia/client/diana-jl.md new file mode 100644 index 0000000000..2def0c8952 --- /dev/null +++ b/src/content/code/language-support/julia/client/diana-jl.md @@ -0,0 +1,8 @@ +--- +name: Diana.jl +description: A Julia GraphQL server implementation. +url: https://github.com/neomatrixcode/Diana.jl +github: neomatrixcode/Diana.jl +--- + + diff --git a/src/content/code/language-support/ocaml-reason/server/ocaml-graphql-server.md b/src/content/code/language-support/ocaml-reason/server/ocaml-graphql-server.md new file mode 100644 index 0000000000..8826c9c9a4 --- /dev/null +++ b/src/content/code/language-support/ocaml-reason/server/ocaml-graphql-server.md @@ -0,0 +1,8 @@ +--- +name: ocaml-graphql-server +description: GraphQL server library for OCaml and Reason +url: https://github.com/andreas/ocaml-graphql-server +github: andreas/ocaml-graphql-server +--- + + diff --git a/src/content/code/language-support/perl/server/graphql-perl.md b/src/content/code/language-support/perl/server/graphql-perl.md new file mode 100644 index 0000000000..f9f099c2a1 --- /dev/null +++ b/src/content/code/language-support/perl/server/graphql-perl.md @@ -0,0 +1,16 @@ +--- +name: graphql-perl +description: A Perl port of GraphQL reference implementation +url: https://github.com/graphql-perl/graphql-perl +github: graphql-perl/graphql-perl +--- + +- [MetaCPAN documentation](https://metacpan.org/pod/GraphQL) + + - [Mojolicious-Plugin-GraphQL](https://github.com/graphql-perl/Mojolicious-Plugin-GraphQL) - connect your GraphQL service to a Mojolicious app + + - [GraphQL-Plugin-Convert-DBIC](https://github.com/graphql-perl/GraphQL-Plugin-Convert-DBIC) - automatically connect your DBIx::Class schema to GraphQL + + - [GraphQL-Plugin-Convert-OpenAPI](https://github.com/graphql-perl/GraphQL-Plugin-Convert-OpenAPI) - automatically connect any OpenAPI service (either local Mojolicious one, or remote) to GraphQL + + diff --git a/src/content/code/language-support/php/server/api-platform.md b/src/content/code/language-support/php/server/api-platform.md new file mode 100644 index 0000000000..0f5cfd77d5 --- /dev/null +++ b/src/content/code/language-support/php/server/api-platform.md @@ -0,0 +1,41 @@ +--- +name: API Platform +description: API Platform is a fully-featured, flexible and extensible API framework built on top of Symfony. +url: https://api-platform.com +github: api-platform/api-platform +--- + +The following class is enough to create both a Relay-compatible GraphQL server and a hypermedia API supporting modern REST formats (JSON-LD, JSONAPI...): + +```php +__('Representation of a user', 'users'); + } + + public function getID(object $user) + { + return $user->ID; + } + + public function getTypeDataLoaderClass(): string + { + return UserTypeDataLoader::class; + } +} +``` + +Please notice how the `TypeResolver` does not indicate which are its fields. It also does not load the objects from the database, but instead delegates this task to a `TypeDataLoader`. + +Adding fields to the type is done via a `FieldResolver`: + +```php +class UserFieldResolver extends AbstractDBDataFieldResolver +{ + public static function getClassesToAttachTo(): array + { + return [ + UserTypeResolver::class, + ]; + } + + public static function getFieldNamesToResolve(): array + { + return [ + 'username', + 'email', + 'url', + ]; + } + + public function getSchemaFieldDescription( + TypeResolverInterface $typeResolver, + string $fieldName + ): ?string { + $translationAPI = TranslationAPIFacade::getInstance(); + $descriptions = [ + 'username' => $translationAPI->__("User's username handle", "users"), + 'email' => $translationAPI->__("User's email", "users"), + 'url' => $translationAPI->__("URL of the user's profile in the website", "users"), + ]; + return $descriptions[$fieldName]; + } + + public function getSchemaFieldType( + TypeResolverInterface $typeResolver, + string $fieldName + ): ?string { + $types = [ + 'username' => SchemaDefinition::TYPE_STRING, + 'email' => SchemaDefinition::TYPE_EMAIL, + 'url' => SchemaDefinition::TYPE_URL, + ]; + return $types[$fieldName]; + } + + public function resolveValue( + TypeResolverInterface $typeResolver, + object $user, + string $fieldName, + array $fieldArgs = [] + ) { + switch ($fieldName) { + case 'username': + return $user->user_login; + + case 'email': + return $user->user_email; + + case 'url': + $userService = UserServiceFacade::getInstance(); + return $userService->getUserProfileURL($user->ID); + } + + return null; + } +} +``` + +The definition of a field for the GraphQL schema, and its resolution, is split into a multitude of functions from the `FieldResolver`: + +- `getSchemaFieldDescription` +- `getSchemaFieldType` +- `resolveValue` +- `getSchemaFieldArgs` +- `isSchemaFieldResponseNonNullable` +- `getImplementedInterfaceClasses` +- `resolveFieldTypeResolverClass` +- `resolveFieldMutationResolverClass` + +This code is more legible than if all functionality is satisfied through a single function, or through a configuration array, making it easier to implement and maintain the resolvers. diff --git a/src/content/code/language-support/php/server/graphql-php.md b/src/content/code/language-support/php/server/graphql-php.md new file mode 100644 index 0000000000..b84b448c96 --- /dev/null +++ b/src/content/code/language-support/php/server/graphql-php.md @@ -0,0 +1,8 @@ +--- +name: graphql-php +description: A PHP port of GraphQL reference implementation +url: https://github.com/webonyx/graphql-php +github: webonyx/graphql-php +--- + + diff --git a/src/content/code/language-support/php/server/graphql-relay-php.md b/src/content/code/language-support/php/server/graphql-relay-php.md new file mode 100644 index 0000000000..f35550c219 --- /dev/null +++ b/src/content/code/language-support/php/server/graphql-relay-php.md @@ -0,0 +1,8 @@ +--- +name: graphql-relay-php +description: A library to help construct a graphql-php server supporting react-relay. +url: https://github.com/ivome/graphql-relay-php +github: ivome/graphql-relay-php +--- + + diff --git a/src/content/code/language-support/php/server/graphqlbundle.md b/src/content/code/language-support/php/server/graphqlbundle.md new file mode 100644 index 0000000000..1a13a665ff --- /dev/null +++ b/src/content/code/language-support/php/server/graphqlbundle.md @@ -0,0 +1,8 @@ +--- +name: GraphQLBundle +description: A GraphQL server for Symfony +url: https://github.com/overblog/GraphQLBundle +github: overblog/GraphQLBundle +--- + + diff --git a/src/content/code/language-support/php/server/graphqlite.md b/src/content/code/language-support/php/server/graphqlite.md new file mode 100644 index 0000000000..055e61dc6a --- /dev/null +++ b/src/content/code/language-support/php/server/graphqlite.md @@ -0,0 +1,37 @@ +--- +name: GraphQLite +description: GraphQLite is a library that offers an annotations-based syntax for GraphQL schema definition. +url: https://graphqlite.thecodingmachine.io +github: thecodingmachine/graphqlite +--- + +It is framework agnostic with bindings available for Symfony and Laravel. +This code declares a "product" query and a "Product" Type: +```php +class ProductController +{ + /** + * @Query() + */ + public function product(string $id): Product + { + // Some code that looks for a product and returns it. + } +} + +/** + * @Type() + */ +class Product +{ + /** + * @Field() + */ + public function getName(): string + { + return $this->name; + } + // ... +} +``` +Other GraphQLite features include validation, security, error handling, loading via data-loader pattern... diff --git a/src/content/code/language-support/php/server/lighthouse.md b/src/content/code/language-support/php/server/lighthouse.md new file mode 100644 index 0000000000..33bfbf7450 --- /dev/null +++ b/src/content/code/language-support/php/server/lighthouse.md @@ -0,0 +1,8 @@ +--- +name: Lighthouse +description: A GraphQL server for Laravel +url: https://github.com/nuwave/lighthouse +github: nuwave/lighthouse +--- + + diff --git a/src/content/code/language-support/php/server/railt.md b/src/content/code/language-support/php/server/railt.md new file mode 100644 index 0000000000..0c4d999cff --- /dev/null +++ b/src/content/code/language-support/php/server/railt.md @@ -0,0 +1,8 @@ +--- +name: Railt +description: A PHP GraphQL Framework. +url: https://github.com/railt/railt +github: railt/railt +--- + + diff --git a/src/content/code/language-support/php/server/serge.md b/src/content/code/language-support/php/server/serge.md new file mode 100644 index 0000000000..e4a2a0fe96 --- /dev/null +++ b/src/content/code/language-support/php/server/serge.md @@ -0,0 +1,8 @@ +--- +name: serge +description: Use GraphQL to define your Domain Model for CQRS/ES and let serge generate code to handle GraphQL requests. +url: https://github.com/kepawni/serge +github: kepawni/serge +--- + + diff --git a/src/content/code/language-support/php/server/siler.md b/src/content/code/language-support/php/server/siler.md new file mode 100644 index 0000000000..c947260c11 --- /dev/null +++ b/src/content/code/language-support/php/server/siler.md @@ -0,0 +1,43 @@ +--- +name: Siler +description: Siler is a PHP library powered with high-level abstractions to work with GraphQL. +url: https://siler.leocavalcante.com/graphql/ +github: leocavalcante/siler +--- + +To run a Siler hello world script: +```graphql +type Query { + hello: String +} +``` + +```php + [ + 'hello' => 'world', + ], +]; +$schema = Graphqlschema($typeDefs, $resolvers); + +echo "Server running at http://127.0.0.1:8080"; + +Httpserver(Graphqlpsr7($schema), function (Throwable $err) { + var_dump($err); + return Diactorosjson([ + 'error' => true, + 'message' => $err->getMessage(), + ]); +})()->run(); +``` +It also provides functionality for the construction of a WebSocket Subscriptions Server based on how Apollo works. + diff --git a/src/content/code/language-support/php/server/wpgraphql.md b/src/content/code/language-support/php/server/wpgraphql.md new file mode 100644 index 0000000000..2fd292b5a5 --- /dev/null +++ b/src/content/code/language-support/php/server/wpgraphql.md @@ -0,0 +1,8 @@ +--- +name: WPGraphQL +description: A free, open-source WordPress plugin that provides an extendable GraphQL schema and API for any WordPress site +url: https://github.com/wp-graphql/wp-graphql +github: wp-graphql/wp-graphql +--- + + diff --git a/src/content/code/language-support/python/client/gql.md b/src/content/code/language-support/python/client/gql.md new file mode 100644 index 0000000000..8cebdc4361 --- /dev/null +++ b/src/content/code/language-support/python/client/gql.md @@ -0,0 +1,8 @@ +--- +name: GQL +description: A GraphQL client in Python. +url: https://github.com/graphql-python/gql +github: graphql-python/gql +--- + + diff --git a/src/content/code/language-support/python/client/python-graphql-client.md b/src/content/code/language-support/python/client/python-graphql-client.md new file mode 100644 index 0000000000..960e042369 --- /dev/null +++ b/src/content/code/language-support/python/client/python-graphql-client.md @@ -0,0 +1,8 @@ +--- +name: python-graphql-client +description: Simple GraphQL client for Python 2.7+. +url: https://github.com/prisma/python-graphql-client +github: prisma-labs/python-graphql-client +--- + + diff --git a/src/content/code/language-support/python/client/sgqlc.md b/src/content/code/language-support/python/client/sgqlc.md new file mode 100644 index 0000000000..20ec654363 --- /dev/null +++ b/src/content/code/language-support/python/client/sgqlc.md @@ -0,0 +1,8 @@ +--- +name: sgqlc +description: A simple Python GraphQL client. Supports generating code generation for types defined in a GraphQL schema. +url: https://github.com/profusion/sgqlc +github: profusion/sgqlc +--- + + diff --git a/src/content/code/language-support/python/server/ariadne.md b/src/content/code/language-support/python/server/ariadne.md new file mode 100644 index 0000000000..aa6f3ca0c1 --- /dev/null +++ b/src/content/code/language-support/python/server/ariadne.md @@ -0,0 +1,43 @@ +--- +name: Ariadne +description: Ariadne is a Python library for implementing GraphQL servers using schema-first approach. It supports both synchronous and asynchronous query execution, ships with batteries included for common GraphQL server problems like query cost validation or performance tracing and has simple API that is easy to extend or replace. +url: https://ariadnegraphql.org +github: mirumee/ariadne +--- + +Ariadne can be installed with pip: + +```bash +pip install ariadne +``` + +It ships with many GraphQL server implementations, enabling easy experimentation: + +```python +from ariadne import ObjectType, QueryType, gql, make_executable_schema +from ariadne.asgi import GraphQL +# Define types using Schema Definition Language (https://graphql.org/learn/schema/) +# Wrapping string in gql function provides validation and better error traceback +type_defs = gql(""" + type Query { + hello: String! + } +""") +# Bind resolver functions to Query's fields using QueryType +query_type = QueryType() +# Resolvers are simple python functions +@query_type.field("hello") +def resolve_hello(*_): + return "Hello world!" +# Create executable GraphQL schema +schema = make_executable_schema(type_defs, query_type) +# Create an ASGI app using the schema, running in debug mode +app = GraphQL(schema, debug=True) +``` + +Above server can be ran with uvicorn: + +``` +pip install uvicorn +uvicorn example:app +``` diff --git a/src/content/code/language-support/python/server/graphene.md b/src/content/code/language-support/python/server/graphene.md new file mode 100644 index 0000000000..772aaabc70 --- /dev/null +++ b/src/content/code/language-support/python/server/graphene.md @@ -0,0 +1,30 @@ +--- +name: Graphene +description: A Python library for building GraphQL APIs. +url: http://graphene-python.org/ +github: graphql-python/graphene +--- + +To run a Graphene hello world script: + +```bash +pip install graphene +``` + +Then run `python hello.py` with this code in `hello.py`: + +```python +import graphene + +class Query(graphene.ObjectType): + hello = graphene.String(name=graphene.String(default_value="World")) + + def resolve_hello(self, info, name): + return 'Hello ' + name + +schema = graphene.Schema(query=Query) +result = schema.execute('{ hello }') +print(result.data['hello']) # "Hello World" +``` + +There are also nice bindings for [Relay](https://facebook.github.io/relay/), Django, SQLAlchemy, and Google App Engine. diff --git a/src/content/code/language-support/python/server/strawberry.md b/src/content/code/language-support/python/server/strawberry.md new file mode 100644 index 0000000000..b12260ed80 --- /dev/null +++ b/src/content/code/language-support/python/server/strawberry.md @@ -0,0 +1,32 @@ +--- +name: Strawberry +description: Strawberry is a Python library for implementing code first GraphQL servers using modern Python features like type hints. +url: https://strawberry.rocks +github: strawberry-graphql/strawberry +--- + +Here's an example of a Strawberry hello world, first install the library: + +```bash +pip install strawberry-graphql +``` + +Create an `app.py` file with this content: + +```python +import strawberry + +@strawberry.type +class Query: + @strawberry.field + def hello(self, name: str = "World") -> str: + return f"Hello {name}" + +schema = strawberry.Schema(query=Query) +``` + +Then run `strawberry server app` and you will have a basic schema server +running on `http://localhost:8000/`. + +Strawberry also has views for ASGI, Flask and Django and provides utilities +like dataloaders and tracing. diff --git a/src/content/code/language-support/python/server/tartiflette.md b/src/content/code/language-support/python/server/tartiflette.md new file mode 100644 index 0000000000..b9c78af3eb --- /dev/null +++ b/src/content/code/language-support/python/server/tartiflette.md @@ -0,0 +1,34 @@ +--- +name: Tartiflette +description: A Python 3.6+ _(asyncio)_ library for building GraphQL APIs. +url: https://tartiflette.io +github: tartiflette/tartiflette +--- + +To run a tartiflette hello world script: +```bash +pip install tartiflette +``` +Then run `python hello.py` with this code in `hello.py`: +```python +import asyncio +from tartiflette import Engine, Resolver +@Resolver("Query.hello") +async def resolver_hello(parent, args, ctx, info): + return "hello " + args["name"] +async def run(): + tftt_engine = Engine(""" + type Query { + hello(name: String): String + } + """) + result = await tftt_engine.execute( + query='query { hello(name: "Chuck") }' + ) + print(result) + # {'data': {'hello': 'hello Chuck'}} +if __name__ == "__main__": + loop = asyncio.get_event_loop() + loop.run_until_complete(run()) +``` +There is also a nice [HTTP wrapper](https://github.com/dailymotion/tartiflette-aiohttp). diff --git a/src/content/code/language-support/r/server/ghql.md b/src/content/code/language-support/r/server/ghql.md new file mode 100644 index 0000000000..b832a4e73b --- /dev/null +++ b/src/content/code/language-support/r/server/ghql.md @@ -0,0 +1,8 @@ +--- +name: ghql +description: General purpose GraphQL R client +url: https://github.com/ropensci/ghql +github: ropensci/ghql +--- + + diff --git a/src/content/code/language-support/ruby/server/agoo.md b/src/content/code/language-support/ruby/server/agoo.md new file mode 100644 index 0000000000..be7b315dd5 --- /dev/null +++ b/src/content/code/language-support/ruby/server/agoo.md @@ -0,0 +1,37 @@ +--- +name: Agoo +description: A high performance web server with support for GraphQL. Agoo strives for a simple, easy to use API for GraphQL. +url: https://github.com/ohler55/agoo +github: ohler55/agoo +gem: agoo +--- + +```ruby +require 'agoo' + +class Query + def hello + 'hello' + end +end + +class Schema + attr_reader :query + + def initialize + @query = Query.new() + end +end + +Agoo::Server.init(6464, 'root', thread_count: 1, graphql: '/graphql') +Agoo::Server.start() +Agoo::GraphQL.schema(Schema.new) { + Agoo::GraphQL.load(%^type Query { hello: String }^) +} +sleep + +# To run this GraphQL example type the following then go to a browser and enter +# a URL of localhost:6464/graphql?query={hello} +# +# ruby hello.rb +``` diff --git a/src/content/code/language-support/ruby/server/graphql-ruby.md b/src/content/code/language-support/ruby/server/graphql-ruby.md new file mode 100644 index 0000000000..847cb44833 --- /dev/null +++ b/src/content/code/language-support/ruby/server/graphql-ruby.md @@ -0,0 +1,33 @@ +--- +name: graphql-ruby +description: A Ruby library for building GraphQL APIs. +url: https://github.com/rmosolgo/graphql-ruby +github: rmosolgo/graphql-ruby +gem: graphql +--- + +To run a hello world script with `graphql-ruby`: +```bash +gem install graphql +``` + +Then run `ruby hello.rb` with this code in `hello.rb`: + +```ruby +require 'graphql' + +class QueryType < GraphQL::Schema::Object + graphql_name 'Query' + field :hello do + type types.String + resolve -> (obj, args, ctx) { 'Hello world!' } + end +end + +class Schema < GraphQL::Schema + query QueryType +end + +puts Schema.execute('{ hello }').to_json +``` +There are also nice bindings for Relay and Rails. diff --git a/src/content/code/language-support/rust/client/cynic.md b/src/content/code/language-support/rust/client/cynic.md new file mode 100644 index 0000000000..f1680b6945 --- /dev/null +++ b/src/content/code/language-support/rust/client/cynic.md @@ -0,0 +1,61 @@ +--- +name: cynic +description: A bring your own types GraphQL client for Rust +url: https://cynic-rs.dev +github: obmarg/cynic +--- + +A client library for rust that generates queries from types you provide, +verifying that the types match the shape of your schema. + +It provides [a generator](https://generator.cynic-rs.dev) to bootstrap types +from existing GraphQL queries. + +Usage example: + +```rust +#[derive(cynic::QueryFragment, Debug)] +#[cynic( + schema_path = "../schemas/starwars.schema.graphql", + query_module = "query_dsl", + graphql_type = "Root", + argument_struct = "FilmArguments" +)] +struct FilmDirectorQuery { + #[arguments(id = &args.id)] + film: Option, +} + +#[derive(cynic::QueryFragment, Debug)] +#[cynic( + schema_path = "../schemas/starwars.schema.graphql", + query_module = "query_dsl", + graphql_type = "Film" +)] +struct Film { + title: Option, + director: Option, +} + +#[derive(cynic::FragmentArguments)] +struct FilmArguments { + id: Option, +} + +fn main() { + use cynic::{QueryBuilder, http::ReqwestBlockingExt}; + + let query = FilmDirectorQuery::build(&FilmArguments { + id: Some("ZmlsbXM6MQ==".into()), + }) + + reqwest::blocking::Client::new() + .post("https://swapi-graphql.netlify.com/.netlify/functions/index") + .run_graphql(query) + .unwrap() +} + +mod query_dsl { + cynic::query_dsl!("../schemas/starwars.schema.graphql"); +} +``` diff --git a/src/content/code/language-support/rust/client/gql_client.md b/src/content/code/language-support/rust/client/gql_client.md new file mode 100644 index 0000000000..bffd74c656 --- /dev/null +++ b/src/content/code/language-support/rust/client/gql_client.md @@ -0,0 +1,32 @@ +--- +name: gql_client +description: Minimal GraphQL client for Rust +url: https://github.com/arthurkhlghatyan/gql-client-rs +github: arthurkhlghatyan/gql-client-rs +--- + +Usage example +```rust +use gql_client::Client; + +#[tokio::main] +async fn main() -> Result<(), Box> { + let endpoint = "https://graphqlzero.almansi.me/api"; + let query = r#" + query AllPostsQuery { + posts { + data { + id + } + } + } + "#; + + let client = Client::new(endpoint); + let data: AllPosts = client.query::(query).await.unwrap(); + + println!("{:?}" data); + + Ok(()) +} +``` diff --git a/src/content/code/language-support/rust/server/async-graphql.md b/src/content/code/language-support/rust/server/async-graphql.md new file mode 100644 index 0000000000..77b29bc9c2 --- /dev/null +++ b/src/content/code/language-support/rust/server/async-graphql.md @@ -0,0 +1,18 @@ +--- +name: Async-graphql +description: Async-graphql is a high-performance server-side library that supports all GraphQL specifications. +url: https://github.com/async-graphql/async-graphql +github: async-graphql/async-graphql +--- + +```rust + use async_graphql::*; + struct Query; + #[Object] + impl Query { + /// Returns the sum of a and b + async fn add(&self, a: i32, b: i32) -> i32 { + a + b + } + } + ``` diff --git a/src/content/code/language-support/rust/server/graphql-rust-juniper.md b/src/content/code/language-support/rust/server/graphql-rust-juniper.md new file mode 100644 index 0000000000..7cf7c961f5 --- /dev/null +++ b/src/content/code/language-support/rust/server/graphql-rust-juniper.md @@ -0,0 +1,8 @@ +--- +name: graphql-rust/juniper +description: GraphQL server library for Rust +url: https://github.com/graphql-rust/juniper +github: graphql-rust/juniper +--- + + diff --git a/src/content/code/language-support/scala/client/caliban.md b/src/content/code/language-support/scala/client/caliban.md new file mode 100644 index 0000000000..881e35a0d5 --- /dev/null +++ b/src/content/code/language-support/scala/client/caliban.md @@ -0,0 +1,8 @@ +--- +name: Caliban +description: Functional GraphQL library for Scala, with client code generation and type-safe queries. +url: https://ghostdogpr.github.io/caliban/ +github: ghostdogpr/caliban +--- + + diff --git a/src/content/code/language-support/scala/server/caliban.md b/src/content/code/language-support/scala/server/caliban.md new file mode 100644 index 0000000000..0644058584 --- /dev/null +++ b/src/content/code/language-support/scala/server/caliban.md @@ -0,0 +1,29 @@ +--- +name: Caliban +description: Caliban is a purely functional library for building GraphQL servers and clients in Scala +url: https://ghostdogpr.github.io/caliban/ +github: ghostdogpr/caliban +--- + +An example of a GraphQL schema and query with `caliban`: +```scala +import caliban.GraphQL.graphQL +import caliban.RootResolver + +case class Character(name: String, age: Int) + +def getCharacters(): List[Character] = ??? + +// schema +case class Queries(characters: List[Character]) + +// resolver +val queries = Queries(getCharacters) + +val api = graphQL(RootResolver(queries)) + +for { + interpreter <- api.interpreter + result <- interpreter.execute("{ characters { name } }") +} yield result +``` diff --git a/src/content/code/language-support/scala/server/sangria.md b/src/content/code/language-support/scala/server/sangria.md new file mode 100644 index 0000000000..c900b46ed6 --- /dev/null +++ b/src/content/code/language-support/scala/server/sangria.md @@ -0,0 +1,23 @@ +--- +name: Sangria +description: A Scala GraphQL library that supports [Relay](https://facebook.github.io/relay/). +url: http://sangria-graphql.org/ +github: sangria-graphql/sangria +--- + +An example of a hello world GraphQL schema and query with `sangria`: +```scala +import sangria.schema._ +import sangria.execution._ +import sangria.macros._ + +val QueryType = ObjectType("Query", fields[Unit, Unit]( + Field("hello", StringType, resolve = _ โ‡’ "Hello world!") +)) + +val schema = Schema(QueryType) + +val query = graphql"{ hello }" + +Executor.execute(schema, query) map println +``` diff --git a/src/content/code/language-support/swift-objective-c-ios/client/apollo-ios.md b/src/content/code/language-support/swift-objective-c-ios/client/apollo-ios.md new file mode 100644 index 0000000000..5bc1c64ac8 --- /dev/null +++ b/src/content/code/language-support/swift-objective-c-ios/client/apollo-ios.md @@ -0,0 +1,8 @@ +--- +name: Apollo iOS +description: A GraphQL client for iOS that returns results as query-specific Swift types, and integrates with Xcode to show your Swift source and GraphQL side by side, with inline validation errors. +url: https://www.apollographql.com/docs/ios/ +github: apollographql/apollo-ios +--- + + diff --git a/src/content/code/language-support/swift-objective-c-ios/client/graphaello.md b/src/content/code/language-support/swift-objective-c-ios/client/graphaello.md new file mode 100644 index 0000000000..27167b6e00 --- /dev/null +++ b/src/content/code/language-support/swift-objective-c-ios/client/graphaello.md @@ -0,0 +1,8 @@ +--- +name: Graphaello +description: A Tool for Writing Declarative, Type-Safe and Data-Driven Applications in SwiftUI using GraphQL and Apollo +url: https://github.com/nerdsupremacist/Graphaello +github: nerdsupremacist/Graphaello +--- + + diff --git a/src/content/code/language-support/swift-objective-c-ios/client/graphql-ios.md b/src/content/code/language-support/swift-objective-c-ios/client/graphql-ios.md new file mode 100644 index 0000000000..b4492cd232 --- /dev/null +++ b/src/content/code/language-support/swift-objective-c-ios/client/graphql-ios.md @@ -0,0 +1,8 @@ +--- +name: GraphQL iOS +description: An Objective-C GraphQL client for iOS. +url: https://github.com/funcompany/graphql-ios +github: funcompany/graphql-ios +--- + + diff --git a/src/content/code/language-support/swift-objective-c-ios/client/swift-graphql.md b/src/content/code/language-support/swift-objective-c-ios/client/swift-graphql.md new file mode 100644 index 0000000000..f6c4063245 --- /dev/null +++ b/src/content/code/language-support/swift-objective-c-ios/client/swift-graphql.md @@ -0,0 +1,49 @@ +--- +name: SwiftGraphQL +description: A GraphQL client that lets you forget about GraphQL. +url: https://github.com/maticzav/swift-graphql +github: maticzav/swift-graphql +--- + + +SwiftGraphQL is a Swift code generator and a lightweight GraphQL client. It lets you create queries using Swift, and guarantees that every query you create is valid. + +The library is centered around three core principles: + +๐Ÿš€ If your project compiles, your queries work. +๐Ÿฆ‰ Use Swift in favour of GraphQL wherever possible. +๐ŸŒณ Your application model should be independent of your schema. + +Here's a short preview of the SwiftGraphQL code + +```swift +import SwiftGraphQL + +// Define a Swift model. +struct Human: Identifiable { + let id: String + let name: String + let homePlanet: String? +} + +// Create a selection. +let human = Selection.Human { + Human( + id: try $0.id(), + name: try $0.name(), + homePlanet: try $0.homePlanet() + ) +} + +// Construct a query. +let query = Selection.Query { + try $0.humans(human.list) +} + +// Perform the query. +send(query, to: "http://swift-graphql.heroku.com/") { result in + if let data = try? result.get() { + print(data) // [Human] + } +} +``` \ No newline at end of file diff --git a/src/content/code/language-support/swift-objective-c-ios/server/graphiti.md b/src/content/code/language-support/swift-objective-c-ios/server/graphiti.md new file mode 100644 index 0000000000..f6a51dd945 --- /dev/null +++ b/src/content/code/language-support/swift-objective-c-ios/server/graphiti.md @@ -0,0 +1,8 @@ +--- +name: Graphiti +description: Swift library for building GraphQL schemas/types fast, safely and easily. +url: https://github.com/GraphQLSwift/Graphiti +github: GraphQLSwift/Graphiti +--- + + diff --git a/src/content/code/language-support/swift-objective-c-ios/server/graphzahl.md b/src/content/code/language-support/swift-objective-c-ios/server/graphzahl.md new file mode 100644 index 0000000000..dfacfe38aa --- /dev/null +++ b/src/content/code/language-support/swift-objective-c-ios/server/graphzahl.md @@ -0,0 +1,8 @@ +--- +name: GraphZahl +description: Swift library for writing Declarative, Type-Safe GraphQL APIs with Zero Boilerplate. +url: https://github.com/nerdsupremacist/GraphZahl +github: nerdsupremacist/GraphZahl +--- + + diff --git a/src/content/code/services/altair.md b/src/content/code/services/altair.md new file mode 100644 index 0000000000..979bb1bf9e --- /dev/null +++ b/src/content/code/services/altair.md @@ -0,0 +1,7 @@ +--- +name: Altair +description: An alternative to Postman that supports editing GraphQL queries directly and autoload your GraphQL schema. +url: https://altair.sirmuel.design/ +--- + + diff --git a/src/content/code/services/apollo-graph-manager.md b/src/content/code/services/apollo-graph-manager.md new file mode 100644 index 0000000000..d0283fd22f --- /dev/null +++ b/src/content/code/services/apollo-graph-manager.md @@ -0,0 +1,7 @@ +--- +name: Apollo Graph Manager +description: A cloud service for monitoring the performance and usage of your GraphQL backend. +url: https://engine.apollographql.com +--- + + diff --git a/src/content/code/services/aws-appsync.md b/src/content/code/services/aws-appsync.md new file mode 100644 index 0000000000..21fc42ae78 --- /dev/null +++ b/src/content/code/services/aws-appsync.md @@ -0,0 +1,7 @@ +--- +name: AWS AppSync +description: Fully managed GraphQL service with realtime subscriptions, offline programming & synchronization, and enterprise security features as well as fine grained authorization controls. +url: https://aws.amazon.com/appsync/ +--- + + diff --git a/src/content/code/services/elide.md b/src/content/code/services/elide.md new file mode 100644 index 0000000000..64ef631169 --- /dev/null +++ b/src/content/code/services/elide.md @@ -0,0 +1,7 @@ +--- +name: Elide +description: A Java library that can expose a JPA annotated data model as a GraphQL service over any relational database. +url: https://elide.io +--- + + diff --git a/src/content/code/services/faunadb.md b/src/content/code/services/faunadb.md new file mode 100644 index 0000000000..decd136ab3 --- /dev/null +++ b/src/content/code/services/faunadb.md @@ -0,0 +1,7 @@ +--- +name: FaunaDB +description: Create an instant GraphQL backend by importing a gql schema. The database will create relations and indexes for you, so you'll be ready to query in seconds, without writing any database code. Serverless pricing, free to get started. +url: https://docs.fauna.com/fauna/current/graphql +--- + + diff --git a/src/content/code/services/graphcms.md b/src/content/code/services/graphcms.md new file mode 100644 index 0000000000..5ae71b45d8 --- /dev/null +++ b/src/content/code/services/graphcms.md @@ -0,0 +1,7 @@ +--- +name: GraphCMS +description: A BaaS (Backend as a Service) that sets you up with a GraphQL backend as well as tools for content editors to work with the stored data. +url: https://graphcms.com/ +--- + + diff --git a/src/content/code/services/hasura.md b/src/content/code/services/hasura.md new file mode 100644 index 0000000000..dc72b4317f --- /dev/null +++ b/src/content/code/services/hasura.md @@ -0,0 +1,8 @@ +--- +name: Hasura +description: Hasura connects to your databases & microservices and instantly gives you a production-ready GraphQL API. +url: https://hasura.io +github: hasura/graphql-engine +--- + + diff --git a/src/content/code/services/lexascms.md b/src/content/code/services/lexascms.md new file mode 100644 index 0000000000..10907871c5 --- /dev/null +++ b/src/content/code/services/lexascms.md @@ -0,0 +1,7 @@ +--- +name: LexasCMS +description: A headless CMS (Content Management System) that combines powerful content personalisation and scheduling capabilities with a modern content editing experience and a blazing fast GraphQL/REST content delivery API. +url: https://www.lexascms.com +--- + + diff --git a/src/content/code/services/moesif-api-analytics.md b/src/content/code/services/moesif-api-analytics.md new file mode 100644 index 0000000000..3c903be90d --- /dev/null +++ b/src/content/code/services/moesif-api-analytics.md @@ -0,0 +1,7 @@ +--- +name: Moesif API Analytics +description: A GraphQL analaytics and monitoring Service to find functional and performance issues. +url: https://www.moesif.com/features/graphql-analytics +--- + + diff --git a/src/content/code/services/postman.md b/src/content/code/services/postman.md new file mode 100644 index 0000000000..749a1b49e7 --- /dev/null +++ b/src/content/code/services/postman.md @@ -0,0 +1,7 @@ +--- +name: Postman +description: An HTTP Client that supports editing GraphQL queries. +url: https://learning.postman.com/docs/sending-requests/supported-api-frameworks/graphql/ +--- + + diff --git a/src/content/code/services/prisma.md b/src/content/code/services/prisma.md new file mode 100644 index 0000000000..a01d88d797 --- /dev/null +++ b/src/content/code/services/prisma.md @@ -0,0 +1,8 @@ +--- +name: Prisma +description: A BaaS (Backend as a Service) providing a GraphQL backend for your applications with a powerful web ui for managing your database and stored data. +url: https://www.prisma.io +github: prisma/prisma +--- + + diff --git a/src/content/code/services/tipe.md b/src/content/code/services/tipe.md new file mode 100644 index 0000000000..eca017351a --- /dev/null +++ b/src/content/code/services/tipe.md @@ -0,0 +1,8 @@ +--- +name: Tipe +description: A SaaS (Software as a Service) content management system that allows you to create your content with powerful editing tools and access it from anywhere with a GraphQL or REST API. +url: https://tipe.io +github: tipeio/tipe +--- + + diff --git a/src/content/code/slug-map.json b/src/content/code/slug-map.json new file mode 100644 index 0000000000..a4895135eb --- /dev/null +++ b/src/content/code/slug-map.json @@ -0,0 +1,30 @@ +{ + "c-c": "C / C++", + "c-net": "C# / .NET", + "clojure": "Clojure", + "d": "D", + "elixir": "Elixir", + "elm": "Elm", + "erlang": "Erlang", + "flutter": "Flutter", + "go": "Go", + "groovy": "Groovy", + "haskell": "Haskell", + "java-kotlin-android": "Java / Kotlin", + "javascript": "JavaScript", + "julia": "Julia", + "perl": "Perl", + "php": "PHP", + "python": "Python", + "r": "R", + "ruby": "Ruby", + "rust": "Rust", + "scala": "Scala", + "ocaml-reason": "OCaml / Reason", + "swift-objective-c-ios": "Swift / Objective-C", + "language-support": "Language Support", + "client": "Client", + "server": "Server", + "tools": "Tools", + "services": "Services" +} diff --git a/src/content/code/tools/graphql-code-generator.md b/src/content/code/tools/graphql-code-generator.md new file mode 100644 index 0000000000..ac5bf4fed5 --- /dev/null +++ b/src/content/code/tools/graphql-code-generator.md @@ -0,0 +1,9 @@ +--- +name: GraphQL Code Generator +description: GraphQL code generator with flexible support for custom plugins and templates like Typescript (frontend and backend), React Hooks, resolvers signatures and more. +url: https://graphql-code-generator.com +github: dotansimha/graphql-code-generator +npm: "@graphql-codegen/cli" +--- + + diff --git a/src/content/code/tools/quicktype.md b/src/content/code/tools/quicktype.md new file mode 100644 index 0000000000..e5278b2798 --- /dev/null +++ b/src/content/code/tools/quicktype.md @@ -0,0 +1,9 @@ +--- +name: quicktype +description: Generate types for GraphQL queries in TypeScript, Swift, golang, C#, C++, and more. +url: https://quicktype.io/ +github: quicktype/quicktype +npm: "quicktype" +--- + + diff --git a/src/content/code/tools/schemathesis.md b/src/content/code/tools/schemathesis.md new file mode 100644 index 0000000000..19cc336747 --- /dev/null +++ b/src/content/code/tools/schemathesis.md @@ -0,0 +1,37 @@ +--- +name: Schemathesis +description: A modern API testing tool for web applications built with Open API and GraphQL specifications. +url: https://github.com/schemathesis/schemathesis +github: schemathesis/schemathesis +--- + +Install Schemathesis via `pip`: + +```bash +pip install schemathesis +``` + +Then, create a file `test_api.py` with the content below and replace the `URL` value with your own GraphQL endpoint URL: + +```python +from hypothesis import settings +import schemathesis + +URL = "https://your.app.com/graphql" +schema = schemathesis.graphql.from_url(http://github.com/URL) + +@schema.parametrize() +@settings(deadline=None) +def test_api(case): + response = case.call() + case.validate_response(response) +``` + +Then run `pytest test_api.py`. Note that you can write your app in any programming language; the tool will communicate with it over HTTP. + +Schemathesis will generate valid queries automatically based on the schema and will minimize failing cases. +For example, running the code above against `https://bahnql.herokuapp.com/graphql` uncovers that running the `{ search(searchTerm: "") { stations { name } } }` query leads to a server error: + +``` +{"errors":[{"message":"Cannot read property \'city\' of undefined","locations":[{"line":1,"column":28}],"path":["search","stations"]}],"data":null} +``` diff --git a/src/content/codeofconduct/CodeOfConduct.md b/src/content/codeofconduct/CodeOfConduct.md new file mode 100644 index 0000000000..0a6705c01e --- /dev/null +++ b/src/content/codeofconduct/CodeOfConduct.md @@ -0,0 +1,50 @@ +--- +title: ่กŒไธบๅฎˆๅˆ™ +layout: docs +category: ่กŒไธบๅฎˆๅˆ™ +permalink: /codeofconduct/ +--- + +# GraphQL ่กŒไธบๅฎˆๅˆ™ v1.0 + +## ๆˆ‘ไปฌ็š„ๆ‰ฟ่ฏบ + +ไธบไบ†่ฅ้€ ไธ€ไธชๅผ€ๆ”พๅ’Œ็ƒญๆƒ…็š„็Žฏๅขƒ๏ผŒๆˆ‘ไปฌไฝœไธบ่ดก็Œฎ่€…ๅ’Œ็ปดๆŠค่€…ๆ‰ฟ่ฏบไปปไฝ•ไบบ้ƒฝ่ƒฝไธๅ—ๅ›ฐๆ‰ฐ็š„ๅ‚ไธŽๆˆ‘ไปฌ็š„้กน็›ฎๅ’Œ็คพๅŒบ๏ผŒๆ— ่ฎบๅนด้พ„ใ€ไฝ“ๅž‹ใ€ๆ˜ฏๅฆๆฎ‹็–พใ€็งๆ—ใ€ๆ€งๅˆซ็‰นๅพใ€ๆ€งๅˆซ่ฎคๅŒๅ’Œ่กจ่พพใ€็ป้ชŒๆฐดๅนณใ€ๆ•™่‚ฒใ€็คพไผš็ปๆตŽๅœฐไฝใ€ๅ›ฝ็ฑใ€ไธชไบบๅฝข่ฑกใ€็งๆ—ใ€ๅฎ—ๆ•™ใ€ๆˆ–ๆ˜ฏๆ€งๅˆซ่ฎคๅŒๅ’Œๅ–ๅ‘ใ€‚ + +## ๆˆ‘ไปฌ็š„ๆ ‡ๅ‡† + +ไปฅไธ‹ๆ˜ฏๆœ‰ๅŠฉไบŽๅˆ›้€ ็งฏๆž็Žฏๅขƒ็š„่กŒไธบ่Œƒไพ‹๏ผš + +* ไฝฟ็”จๆฌข่ฟŽๅ’ŒๅŒ…ๅฎน็š„่ฏญ่จ€ +* ๅฐŠ้‡ไธๅŒ็š„่ง‚็‚นๅ’Œ็ป้ชŒ +* ไผ˜้›…ๅœฐๆŽฅๅ—ๅปบ่ฎพๆ€ง็š„ๆ‰น่ฏ„ +* ๅ…ณๆณจๅฏน็คพๅŒบๆœ€ๆœ‰ๅˆฉ็š„ไบ‹ๆƒ… +* ่กจ็Žฐๅ‡บๅฏนๅ…ถไป–็คพๅŒบๆˆๅ‘˜็š„ๅŒๆƒ… + +ไปฅไธ‹ๆ˜ฏๅ‚ไธŽ่€…ไธๅฏๆŽฅๅ—็š„่กŒไธบๆกˆไพ‹๏ผš + +* ไฝฟ็”จ่‰ฒๆƒ…่ฏญ่จ€ๆˆ–ๅ›พๅƒไปฅๅŠไธๅ—ๆฌข่ฟŽ็š„ๆ€งๅ…ณๆณจๆˆ–ๆฑ‚็ˆฑ +* ๆถๆ„็ ดๅใ€ไพฎ่พฑ/่ดฌๆŸ่ฏ„่ฎบไปฅๅŠไธชไบบๆˆ–ๆ”ฟๆฒปๆ”ปๅ‡ป +* ๅ…ฌๅผ€ๆˆ–็งไธ‹็š„้ชšๆ‰ฐ +* ๅ‘ๅธƒไป–ไบบ็š„็งไบบไฟกๆฏ๏ผŒไพ‹ๅฆ‚ๆœช็ปๆ˜Ž็กฎ่ฎธๅฏ็š„ๅฎžไฝ“ๆˆ–็”ตๅญๅœฐๅ€ +* ๅœจไธ“ไธš็Žฏๅขƒไธญๅฏ่ขซๅˆ็†ๅœฐ่ฎคไธบไธๅˆ้€‚็š„ๅ…ถไป–่กŒไธบ + +## ๆˆ‘ไปฌ็š„่ดฃไปป + +GraphQL ่ง„่Œƒๆˆๅ‘˜ใ€้กน็›ฎๅ‚ไธŽ่€…ๅ’Œ่ดก็Œฎ่€…๏ผˆ็ปŸ็งฐโ€œๅ‚ไธŽ่€…โ€๏ผ‰่ดŸ่ดฃๆพ„ๆธ…ๅฏๆŽฅๅ—่กŒไธบ็š„ๆ ‡ๅ‡†๏ผŒๅนถไธ”ๅบ”่ฏฅ้‡‡ๅ–้€‚ๅฝ“ๅ’Œๅ…ฌๅนณ็š„็บ ๆญฃๆŽชๆ–ฝๆฅๅบ”ๅฏนไปปไฝ•ไธๅฏๆŽฅๅ—็š„่กŒไธบใ€‚ + +GraphQL ่ง„่Œƒ็š„ๆŒ‡ๅฏผๅง”ๅ‘˜ไผšๆœ‰ๆƒๅŠ›ๅ’Œ่ดฃไปปๅˆ ้™คใ€็ผ–่พ‘ๆˆ–ๆ‹’็ปไธŽๆœฌ่กŒไธบๅฎˆๅˆ™ไธไธ€่‡ด็š„่ฏ„่ฎบใ€ๆไบคใ€ไปฃ็ ใ€็ปดๅŸบ็ผ–่พ‘ใ€่ฎฎ้ข˜ๅ’Œๅ…ถไป–่ดก็Œฎ๏ผŒไนŸๅฏไปฅๆš‚ๆ—ถๆˆ–ๆฐธไน…ๆ€ง็š„็ฆๆญขไป–ไปฌ่ฎคไธบไธๅˆ้€‚็š„ๆฅ่‡ชไปปไฝ•ๅ‚ไธŽ่€…็š„ๅ…ทๆœ‰ๅจ่ƒๆ€งใ€ๆ”ปๅ‡ปๆ€งๆˆ–ๆœ‰ๅฎณๆ€ง็š„ๅ…ถไป–่กŒไธบใ€‚ + +ๆ‰€ๆœ‰ๅ‚ไธŽ่€…้ƒฝ่ฎคๅฎš Linux ๅŸบ้‡‘ไผšๆ˜ฏๆœ€้€‚ๅˆๆญค้กน็›ฎๅผ€ๅ‘็š„็ป„็ป‡ใ€‚ๅ‚ไธŽ่€…ๆ‰ฟ่ฎคๅนถๅŒๆ„ Linux ๅŸบ้‡‘ไผšๆ‹ฅๆœ‰โ€œGraphQLโ€ไปฅๅŠไธŽ GraphQL ๅผ€ๆบ้กน็›ฎๅ’Œ GraphQL ่ง„่Œƒ็›ธๅ…ณ็š„ไปปไฝ•ๅ…ถไป–ๅ็งฐๅ’Œๅ•†ๆ ‡็š„ไธ“ๅˆฉๆƒ๏ผŒๅนถๆŽˆๆƒไป–ไบบไฝฟ็”จ่ฟ™ไบ›ๅ•†ๆ ‡๏ผŒ็กฎๅฎšๆญค็ฑปไฝฟ็”จ็š„ๆŒ‡ๅฏผๆ–น้’ˆไปฅๅŠๅˆ†ๆดพ่ฟ™ไบ›่Œ่ดฃใ€‚ๅ‚ไธŽ่€…ๅŒๆ„ไธ้‡‡ๅ–ไปปไฝ•ไธŽๆญค็ฑปๆƒๅˆฉไธไธ€่‡ด็š„่กŒไธบ๏ผŒๅนถ้…ๅˆ Linux ๅŸบ้‡‘ไผš่ฎคไธบๅฟ…่ฆๆˆ–ๅฏๅ–็š„ไปปไฝ•่กŒๅŠจ๏ผŒไปฅ้˜ฒๆญขๆททๆท†ๆˆ–็กฎ็ซ‹ๆˆ–ไฟ็•™่ฟ™ไบ›ๆƒๅˆฉใ€‚ๅ‚ไธŽ่€…ไธไผš็‹ฌ็ซ‹้‡‡็”จใ€ไฝฟ็”จๆˆ–ๅฐ่ฏ•ๆณจๅ†ŒไธŽ่ฟ™ไบ›ๅ็งฐๆททๆท†ๆˆ–็›ธไผผ็š„ไปปไฝ•ๅ•†ๆ ‡ๆˆ–ๅ•†ๅ“ๅ็งฐใ€‚ + +## ้€‚็”จ่Œƒๅ›ด + +ๆœฌ่กŒไธบๅฎˆๅˆ™้€‚็”จไบŽ้กน็›ฎ็ฉบ้—ดๅ’ŒๆŸไธ€ไธชไฝ“ไปฃ่กจ้กน็›ฎๆˆ–ๅ…ถ็คพๅŒบๆ—ถ็š„ๅ…ฌๅ…ฑ้ข†ๅŸŸไธญใ€‚ไปฃ่กจ้กน็›ฎๆˆ–็คพๅŒบ็š„็คบไพ‹ๅŒ…ๆ‹ฌไฝฟ็”จไธ€ไธชๅฎ˜ๆ–น็š„้กน็›ฎ็”ตๅญ้‚ฎไปถๅœฐๅ€ใ€้€š่ฟ‡ๅฎ˜ๆ–น็คพไบคๅช’ไฝ“ๅธๆˆทๅ‘ๅธƒไฟกๆฏๆˆ–ๆ˜ฏไฝœไธบ็บฟไธŠๆˆ–็บฟไธ‹ๆดปๅŠจ็š„ๆŒ‡ๅฎšไปฃ่กจใ€‚้กน็›ฎ็ปดๆŠคไบบๅ‘˜ๅฏไปฅ่ฟ›ไธ€ๆญฅๅฎšไน‰ๅ’Œๆพ„ๆธ…ๅฏนไบŽ้กน็›ฎ็š„้™ˆ่ฟฐใ€‚ + +## ๆ‰ง่กŒ + +ๅฏไปฅ้€š่ฟ‡่”็ณปๆ‰ง่กŒไธป็ฎกๆŠฅๅ‘Šๆปฅ็”จใ€้ชšๆ‰ฐๆˆ–ๅ…ถไป–ไธๅฏๆŽฅๅ—่กŒไธบ็š„ๆƒ…ๅ†ตใ€‚ๅฆ‚ๆžœๆŠ•่ฏ‰ๆถ‰ๅŠๆ‰ง่กŒไธป็ฎก๏ผŒๅˆ™่”็ณปๆŒ‡ๅฏผๅง”ๅ‘˜ไผš็š„ๆˆๅ‘˜ใ€‚ๆ‰€ๆœ‰ๆŠ•่ฏ‰้ƒฝๅฐ†ๅพ—ๅˆฐๅฎกๆŸฅๅ’Œ่ฐƒๆŸฅ๏ผŒๅนถ็ป™ๅ‡บๅฟ…่ฆไธ”้€‚ๅˆๅฝ“ๆ—ถๆƒ…ๅ†ต็š„ๅ›žๅคใ€‚้กน็›ฎๅ›ข้˜Ÿๆœ‰ไน‰ๅŠกไธบไบ‹ไปถๆŠฅๅ‘Š่€…ไฟๅฏ†ใ€‚ๅ…ทไฝ“ๆ‰ง่กŒๆ”ฟ็ญ–็š„่ฟ›ไธ€ๆญฅ็ป†่Š‚ๅฏไปฅๅ•็‹ฌๅ‘ๅธƒใ€‚ๆœช็œŸ่ฏš้ตๅฎˆๆˆ–ๆ‰ง่กŒๆœฌ่กŒไธบๅฎˆๅˆ™็š„ๅ‚ไธŽ่€…ๅฏ่ƒฝไผš้ขไธด็”ฑๆŒ‡ๅฏผๅง”ๅ‘˜ไผš็กฎๅฎš็š„ๆš‚ๆ—ถๆˆ–ๆฐธไน…ๆ€งๅฝฑๅ“ใ€‚ + +## ๆฅๆบ + +ๆœฌ่กŒไธบๅฎˆๅˆ™ๆ”น็ผ–่‡ช่ดก็Œฎ่€…ๅฅ‘็บฆ 1.4 ็‰ˆ๏ผŒๅฏไปฅไปŽ [https://www.contributor-covenant.org/version/1/4/code-of-conduct.html](https://www.contributor-covenant.org/version/1/4/code-of-conduct.html) ่Žทๅ–ใ€‚ๆœ‰ๅ…ณๆœฌ่กŒไธบๅฎˆๅˆ™็š„ๅธธ่ง้—ฎ้ข˜็š„่งฃ็ญ”๏ผŒ่ฏทๅ‚้˜… [https://www.contributor-covenant.org/faq](https://www.contributor-covenant.org/faq)ใ€‚ diff --git a/src/content/community/Community-Developers.md b/src/content/community/Community-Developers.md new file mode 100644 index 0000000000..16240f28de --- /dev/null +++ b/src/content/community/Community-Developers.md @@ -0,0 +1,86 @@ +--- +title: GraphQL for Developers +layout: docs +category: Community +permalink: /community/developers/ +next: /community/project-resources/ +sublinks: How GraphQL is developed,Participating in development,GraphQL project governance +--- + +The following resources are intended to describe how GraphQL development processes work, how to get involved, and where to get help. + +## Essential links + +* The [GraphQL Specification](https://spec.graphql.org) +* GraphQL [reference implementations and tools](/code/) +* The official [GraphQL GitHub org](https://github.com/graphql) +* The official [GraphQL Slack](https://slack.graphql.org) +* Instructions on how to sign the [GraphQL Specification Membership Agreement](https://github.com/graphql/graphql-wg/tree/HEAD/membership) +* The [GraphQL project calendar](https://calendar.graphql.org) +* Meeting replays on the [GraphQL YouTube channel](https://youtube.graphql.org) + +## How GraphQL is developed + +At its core, the GraphQL project is organized around the [specification](https://spec.graphql.org), with a wide variety of supporting implementations and tools. + +GraphQL has an active and mutually beneficial relationship with its many implementations. The GraphQL specification is continuously evolving under the care of the [GraphQL Working Group](https://github.com/graphql/graphql-wg), which consists of GraphQL spec experts, contributors to public [reference implementations](/code/), and implementers. At any given time, GraphQL specification updates are a combination of anticipatory planning with documentation of patterns and behaviors that are already proven in production, sometimes at very large scale. + +### Working groups + +The GraphQL specification, sub-specifications, and official reference implementations are developed using the working group model. The working groups meet monthly or as-needed in order to review ideas and plan their work. + +#### The GraphQL Working Group + +The [GraphQL Working Group](https://github.com/graphql/graphql-wg) is the main group that plans and implements changes to the [GraphQL specification](https://spec.graphql.org). It meets actively and is the default place for discussion for topics which do not have a separate breakout working group (breakout working groups include the [Input Union WG](https://github.com/graphql/graphql-spec/blob/main/rfcs/InputUnion.md) and the [GraphQL-over-HTTP WG](https://github.com/graphql/graphql-over-http)). + +* **GitHub**: [github.com/graphql/graphql-wg](https://github.com/graphql/graphql-wg) +* **Meeting frequency:** Monthly, generally the first Thursday ([calendar](https://calendar.graphql.org)) +* **Agenda:** [GitHub](https://github.com/graphql/graphql-wg/tree/main/agendas) +* **Recordings:** [YouTube](https://www.youtube.com/playlist?list=PLP1igyLx8foH30_sDnEZnxV_8pYW3SDtb) + +#### GraphQL.js Working Group + +The [GraphQL.js Working Group](https://github.com/graphql/graphql-js-wg) works on one of the main reference implementations, [graphql.js](https://github.com/graphql/graphql-js). + +* **GitHub**: [github.com/graphql/graphql-js-wg](https://github.com/graphql/graphql-wg) +* **Meeting frequency:** Monthly, generally the last Wednedsay ([calendar](https://calendar.graphql.org)) +* **Agenda:** [GitHub](https://github.com/graphql/graphql-js-wg/tree/main/agendas) +* **Recordings:** [YouTube](https://www.youtube.com/playlist?list=PLP1igyLx8foHghwopNuQM7weyP5jR147I) + +If you would like to set up a working group around a specific topic, please join a [GraphQL Working Group meeting](https://github.com/graphql/graphql-wg) and present your idea. + +## Participating in development + +GraphQL is developed in the open, through [GitHub](https://github.com/graphql) and working group meetings that are open for anyone to attend (so long as they are covered under the [free membership agreement](https://github.com/graphql/graphql-wg/tree/HEAD/membership)). In addition, anybody is welcome to view the [recordings of our meetings on YouTube](https://youtube.graphql.org) + +### First steps + +If you want to get involved in GraphQL, add yourself to the meeting agenda for one of our [working groups or implementations](https://github.com/graphql/graphql-wg/blob/main/GraphQL-TSC.md#about-the-graphql-specification-project), sign the document if you haven't already, and show up! Or, if you prefer, just open a PR against our projects as this will also initiate the spec membership signature process. + +We welcome your participation! + +### Getting up to speed + +All of our work [happens in the open](https://github.com/graphql). In addition, we record our workgroups' meetings on [YouTube](https://youtube.graphql.org). If you are interested in quickly getting up to speed on what's happening in a working group, the meeting minutes and [replays](https://youtube.graphql.org) are a great place to begin. + +### Asking questions + +The best place to ask a development-related question is in a working group meeting, or by opening a GitHub issue. Please note that if you have an implementation question, you may get a faster answer by [asking in one of the channels more geared toward users](/community/users/#where-to-ask-questions). + +## GraphQL project governance + +GraphQL was open sourced by Facebook in 2015, and became a neutrally governed project managed by the Linux Foundation in 2019. In keeping with best practices, the technical governance of the GraphQL project is separate and distinct from the financial and policy governance of the [GraphQL Foundation](/foundation/). + +### Technical governance + +The GraphQL project is a chartered under the [Joint Development Foundation](https://www.jointdevelopment.org/) (JDF). JDF is a part of the Linux Foundation family, and is an organization specifically dedicated to making open standards easier to manage. + +The GraphQL specification, the GraphQL Working Group, and all other sub-working groups and implementations in the [GraphQL GitHub organization](https://github.com/graphql) are governed by the [GraphQL project charter](https://technical-charter.graphql.org). + +The [Technical Steering Committee](https://github.com/graphql/graphql-wg/blob/main/GraphQL-TSC.md), or TSC, is established in the [technical charter](https://technical-charter.graphql.org) as the top technical decision-making body. It consists of [representatives from the GraphQL technical community](https://github.com/graphql/graphql-wg/blob/main/GraphQL-TSC.md#tsc-voting-members) and is responsible for overseeing specification and development work, and approving new releases. TSC members serve a two-year term. + +### Financial and policy governance + +The [GraphQL Foundation](/foundation/) provides financial support for the GraphQL project. In keeping with best practices, the Foundation is a separate organization, which helps to ensure that technical decisions are made upon their own merit and independent of financial contributions. The GraphQL Foundation uses the funds raised through [membership dues](/foundation/join/) to support the work of the GraphQL Project through investments in infrastructure, coordination support services, developer grants, and mentorship programs. + +The [GraphQL Foundation](/foundation/) is supported entirely by [membership dues](/foundation/join/), from [companies](/foundation/members/) who wish to support the long-term sustainability of the GraphQL ecosystem. diff --git a/site/community/Community-Events.md b/src/content/community/Community-Events.md similarity index 63% rename from site/community/Community-Events.md rename to src/content/community/Community-Events.md index 75e0b03b9d..607206238f 100644 --- a/site/community/Community-Events.md +++ b/src/content/community/Community-Events.md @@ -1,6 +1,6 @@ --- title: ๅณๅฐ†ไธพ่กŒ็š„ๆดปๅŠจ -layout: ../_core/DocsLayout +layout: docs category: ็คพๅŒบ permalink: /community/upcoming-events/ sublinks: ๅณๅฐ†ไธพ่กŒ็š„ๆดปๅŠจ,่šไผš @@ -8,13 +8,21 @@ sublinks: ๅณๅฐ†ไธพ่กŒ็š„ๆดปๅŠจ,่šไผš ## ๅณๅฐ†ไธพ่กŒ็š„ๆดปๅŠจ -### GraphQL Europe ไผš่ฎฎ +### Byteconf GraphQL -- **ๆ—ฅๆœŸ๏ผš** 2018 ๅนด 6 ๆœˆ 15 ๆ—ฅ -- **ๅœฐ็‚น๏ผš** ๅพทๅ›ฝ ๆŸๆž— -- **้“พๆŽฅ๏ผš** https://graphql-europe.org +- **ๆ—ฅๆœŸ๏ผš** 2020 ๅนด 1 ๆœˆ 31 ๆ—ฅ +- **ๅœฐ็‚น๏ผš** ๅœจ็บฟ +- **้“พๆŽฅ๏ผš** https://www.bytesized.xyz/graphql-2020 -GraphQL Europe ๆ˜ฏๆฌงๆดฒ้ž่ฅๅˆฉๆ€ง็š„ GraphQL ๅคงไผš๏ผŒ้‚€่ฏทไบ†ๆฅ่‡ชไธ–็•Œๅ„ๅœฐ็š„ๆผ”่ฎฒๅ˜‰ๅฎพใ€‚ไบ†่งฃๆฅ่‡ช่กŒไธšไธ“ๅฎถ็š„ GraphQL ๆœ€ไฝณๅฎž่ทต๏ผŒๅนถๆˆไธบ่“ฌๅ‹ƒๅ‘ๅฑ•็š„ GraphQL ็คพๅŒบ็š„ไธ€้ƒจๅˆ†ใ€‚ +ๅœจ YouTube ไธŠๅฎžๆ—ถ็›ดๆ’ญ็š„ๅ…่ดน GraphQL ไผš่ฎฎ + +### GraphQL Asia + +- **ๆ—ฅๆœŸ๏ผš** 2020 ๅนด 2 ๆœˆ 20 - 22 ๆ—ฅ +- **ๅœฐ็‚น๏ผš** ๅฐๅบฆ็ญๅŠ ็ฝ—ๅฐ” +- **้“พๆŽฅ๏ผš** https://graphql.asia + +Hasura ็ป„็ป‡็š„ GraphQL ไผš่ฎฎ ## ่šไผš @@ -27,18 +35,18 @@ GraphQL Europe ๆ˜ฏๆฌงๆดฒ้ž่ฅๅˆฉๆ€ง็š„ GraphQL ๅคงไผš๏ผŒ้‚€่ฏทไบ†ๆฅ่‡ชไธ–็•Œ - [GraphQL NYC](https://www.meetup.com/GraphQL-NYC/) - [GraphQL Atlanta](https://www.meetup.com/GraphQL-Atlanta/) - [GraphQL Austin](https://www.meetup.com/ATX-GraphQL/) -- [GraphQL Miami](https://www.meetup.com/Miami-GraphQL/) - [GraphQL Los Angeles](https://www.meetup.com/Los-Angeles-GraphQL-Meetup/) - [GraphQL Dallas-Fort Worth](https://www.meetup.com/DFW-GraphQL-Meetup/) - [GraphQL Ottawa](https://www.meetup.com/GraphQL-Ottawa/) - [GraphQL Columbus](https://www.meetup.com/GraphQL-Columbus/) - [GraphQL Vancouver](https://www.meetup.com/GraphQL-Vancouver/) - [GraphQL Minneapolis](https://www.meetup.com/GraphQL-MN/) -- [GraphQL Denver/Boulder](https://www.meetup.com/GraphQL-Denver-Boulder-Meetup/) +- [GraphQL Denver](https://www.meetup.com/graphql-denver/) - [GraphQL By the Bay (San Francisco)](https://www.meetup.com/graphql-by-the-bay/) ### ๅ—็พŽๆดฒ +- [GraphQL Florianรณpolis](https://www.meetup.com/GraphQL-Floripa/) - [GraphQL Sรฃo Paulo](https://www.meetup.com/Apollo-GraphQL/) - [GraphQL Buenos Aires](https://www.meetup.com/GraphQL-BA/) @@ -46,23 +54,30 @@ GraphQL Europe ๆ˜ฏๆฌงๆดฒ้ž่ฅๅˆฉๆ€ง็š„ GraphQL ๅคงไผš๏ผŒ้‚€่ฏทไบ†ๆฅ่‡ชไธ–็•Œ - [GraphQL Amsterdam](https://www.meetup.com/Amsterdam-GraphQL-Meetup/) - [GraphQL Berlin](https://www.meetup.com/graphql-berlin/) -- [GraphQL Istanbul](https://www.meetup.com/GraphQL-Istanbul/) -- [GraphQL London](https://www.meetup.com/GraphQL-London) -- [GraphQL Paris](https://www.meetup.com/GraphQL-Paris/) -- [GraphQL Munich](https://www.meetup.com/GraphQL-Munich/) - [GraphQL Barcelona](https://www.meetup.com/GraphQL-Barcelona/) -- [GraphQL Stockholm](https://www.meetup.com/GraphQL-Stockholm/) - [GraphQL Budapest](https://www.meetup.com/Budapest-GraphQL/) +- [GraphQL Copenhagen](https://www.meetup.com/Copenhagen-GraphQL-Meetup-Group/) +- [GraphQL Edinburgh](https://www.meetup.com/GraphQL-Edinburgh/) - [GraphQL Lisbon](https://www.meetup.com/GraphQL-Lisbon/) +- [GraphQL London](https://www.meetup.com/GraphQL-London) +- [GraphQL Luxembourg](https://www.meetup.com/GraphQL-Luxembourg/) +- [GraphQL Milano](https://www.meetup.com/GraphQL-Milano/) +- [GraphQL Munich](https://www.meetup.com/GraphQL-Munich/) +- [GraphQL Paris](https://www.meetup.com/GraphQL-Paris/) +- [GraphQL Paris 2](https://www.meetup.com/fr-FR/parisgraphql/) +- [GraphQL Stockholm](https://www.meetup.com/GraphQL-Stockholm/) - [GraphQL Vienna](https://www.meetup.com/GraphQL-Vienna/) ### ๆพณๆดฒ - [GraphQL Melbourne](http://graphql.melbourne/) -- [GraphQL Sydney](http://graphql.sydney/) +- [GraphQL Sydney](https://graphql.sydney/) ### ไบšๆดฒ - [GraphQL Tel Aviv](https://www.meetup.com/GraphQL-TLV/) - [GraphQL Tokyo](https://www.meetup.com/GraphQL-Tokyo/) -- [GraphQL Meetup (Bangalore)](https://www.meetup.com/GraphQL-Meetup/) +- [GraphQL Meetup (Bangalore)](https://www.meetup.com/graphql-bangalore/) +- [GraphQL Meetup (Bangkok)](https://www.meetup.com/GraphQL-Bangkok/) +- [GraphQL Meetup (Singapore)](https://www.meetup.com/GraphQL-SG/) +- [GraphQL Meetup (Hong Kong)](https://www.meetup.com/GraphQLHongKong/) diff --git a/site/community/Community-Resources.md b/src/content/community/Community-Resources.md similarity index 71% rename from site/community/Community-Resources.md rename to src/content/community/Community-Resources.md index c8be0635d4..c2c7751030 100644 --- a/site/community/Community-Resources.md +++ b/src/content/community/Community-Resources.md @@ -1,10 +1,10 @@ --- title: ็คพๅŒบ่ต„ๆบ -layout: ../_core/DocsLayout +layout: docs category: ็คพๅŒบ permalink: /community/ next: /community/upcoming-events/ -sublinks: ๅšๅฎข,่ง†้ข‘ +sublinks: ๅšๅฎข,่ง†้ข‘,ๅ›พไนฆ,ๆ›ดๅคš่ต„ๆบ --- ## Stack Overflow @@ -13,7 +13,7 @@ sublinks: ๅšๅฎข,่ง†้ข‘ ## Facebook Group -ๅŠ ๅ…ฅ [GraphQL Facebook Group](https://www.facebook.com/groups/graphql.community/) ๆฅๆๅ‡บ้—ฎ้ข˜ใ€่ฎจ่ฎบๅ’Œๅˆ†ไบซใ€‚GraphQL Facebook group ๆ˜ฏ้ฆ–้€‰็š„ๅ‘ๅธƒๅ…ฌๅ‘Šๅ’Œ่ฟ›่กŒๅนฟๆณ›่ฎจ่ฎบ็š„ๅœบๆ‰€ใ€‚ +ๅŠ ๅ…ฅ [GraphQL Facebook Group](https://www.facebook.com/groups/graphql.community/) ๅˆ†ไบซๅ’Œๅ‘็Žฐๆ–ฐๅ†…ๅฎนใ€‚GraphQL Facebook group ๆ˜ฏ้ฆ–้€‰็š„ๅ‘ๅธƒๅ…ฌๅ‘Šๅ’Œ่ฟ›่กŒๅนฟๆณ›่ฎจ่ฎบ็š„ๅœบๆ‰€ใ€‚ ## Twitter @@ -23,11 +23,11 @@ sublinks: ๅšๅฎข,่ง†้ข‘ - [@GraphQL](https://twitter.com/GraphQL) - [@graphqlweekly](https://twitter.com/graphqlweekly) -- [@graphqlnews](https://twitter.com/graphqlnews) - [@GraphQLStackOverflow](https://twitter.com/GraphQLatSO) - [@apollographql](https://twitter.com/apollographql) -- [@graphcool](https://twitter.com/graphcool) -- [@ScapholdDotIO](https://twitter.com/ScapholdDotIO) +- [@prisma](https://twitter.com/prisma) +- [@HasuraHQ](https://twitter.com/HasuraHQ) +- [@TheGuildDev](https://twitter.com/TheGuildDev) ## IRC @@ -43,27 +43,33 @@ sublinks: ๅšๅฎข,่ง†้ข‘ - [**#general** on GraphQL](https://graphql.slack.com/messages/general/). [ๅœจ่ฟ™้‡Œ่Žทๅพ—้‚€่ฏท๏ผ](https://graphql-slack.herokuapp.com/) - [Apollo Slack](http://apollostack.com/#slack) -- [Reindex Slack](http://slack.reindex.io/) - [Graphcool Slack](https://slack.graph.cool/) -- [Scaphold.io Slack](http://slack.scaphold.io/) ## ๅšๅฎข ไปฅไธ‹ๆ˜ฏไธ€ไบ›ๅ€ผๅพ—ๆณจๆ„็š„ๅšๅฎขๆ–‡็ซ ๏ผŒไปฅๅธฎๅŠฉๆ‚จๆ›ดๅฅฝๅœฐไบ†่งฃ GraphQL๏ผš +- [GraphQL๏ผšไธ€็งๆ•ฐๆฎๆŸฅ่ฏข่ฏญ่จ€](/blog/graphql-a-query-language/) - Lee Byron +- [GraphQL ๅ’Œ Relay ไธญ็š„่ฎข้˜…](/blog/subscriptions-in-graphql-and-relay/) - Dan Schafer and Laney Kuenzel +- [็”จ GraphQL ่ฝปๆพ mock ไฝ ็š„ๆœๅŠกๅ™จ](/blog/mocking-with-graphql/) - Jonas Helfer +- [ๅœจ GraphQL ไธญๅŒ…่ฃ… REST API](/blog/rest-api-graphql-wrapper/) - Steven Luscher +- [ๅ‘ŠๅˆซๆŠ€ๆœฏ้ข„่งˆ](/blog/production-ready/) - Lee Byron +- [้‡ๆ–ฐ่ฎธๅฏ GraphQL ่ง„่Œƒ](https://medium.com/@leeb/relicensing-the-graphql-specification-e7d07a52301b) - Lee Byron - [GraphQL ็ฎ€ไป‹](https://facebook.github.io/react/blog/2015/05/01/graphql-introduction.html) - Nick Schrock - [ไปŽ REST ๅˆฐ GraphQL](https://0x2a.sh/from-rest-to-graphql-b4e95e94c26b#.tag7nzkrb) - Jacob Gillespie - [GraphQL ่ฎฒ่งฃ](https://medium.com/apollo-stack/graphql-explained-5844742f195e#.zdykxos6i) - Jonas Helfer - [GraphQL ๆฆ‚ๅฟตๅฏ่ง†ๅŒ–](https://medium.com/apollo-stack/the-concepts-of-graphql-bc68bd819be3#.hfczgtdsj) - Dhaivat Pandya -- [ๆž„ๅปบ f8 App๏ผšไฝฟ็”จ GraphQL & Relay](http://makeitopen.com/tutorials/building-the-f8-app/relay/) +- [ๆž„ๅปบ f8 App๏ผšไฝฟ็”จ GraphQL & Relay](http://makeitopen.com/docs/en/1-A2-relay.html) - [ไฝ ็š„็ฌฌไธ€ไธช GraphQL ๆœๅŠกๅ™จ](https://medium.com/the-graphqlhub/your-first-graphql-server-3c766ab4f0a2#.ovn0y19k4) - Clay Allsopp -- [ๆ•™็จ‹๏ผš็”จ Apollo-serverใ€Dataloader ๅ’Œ Knex ๅฏๅŠจไธ€ไธช JS API](https://bamtech.gitbooks.io/dev-standards/content/backend/graphql-js/getting-started-with-apollo-server-dataloader-knex.mo.html) - Thomas Pucci +- [ๆ•™็จ‹๏ผš็”จ Apollo-serverใ€Dataloader ๅ’Œ Knex ๅฏๅŠจไธ€ไธช JS API](https://bamtech.gitbook.io/dev-standards/backend/graphql-js/getting-started-with-apollo-server-dataloader-knex.mo.html) - Thomas Pucci - [ๆ•™็จ‹๏ผšๅฆ‚ไฝ•ๆž„ๅปบไธ€ไธช GraphQL ๆœๅŠกๅ™จ](https://medium.com/apollo-stack/tutorial-building-a-graphql-server-cddaa023c035#.bu6sdnst4) - Jonas Helfer - [ไฝฟ็”จ GraphQL ๆŸฅ่ฏขๅ‚ๆ•ฐ่ฎพ่ฎกๅผบๅคง็š„ API](https://www.graph.cool/docs/tutorials/designing-powerful-apis-with-graphql-query-parameters-aing7uech3/) - Johannes Schickling - [GraphQL ๅ’Œไธๅฏๆ€่ฎฎ็š„ Apollo Client](https://medium.com/google-developer-experts/graphql-and-the-amazing-apollo-client-fe57e162a70c) - Gerard Sans - [GraphQL ๆœๅŠกๅ™จๅŸบ็ก€๏ผˆ็ฌฌไธ€้ƒจๅˆ†๏ผ‰๏ผšSchema](https://blog.graph.cool/graphql-server-basics-the-schema-ac5e2950214e) - Nikolas Burk - [GraphQL ๆœๅŠกๅ™จๅŸบ็ก€๏ผˆ็ฌฌไบŒ้ƒจๅˆ†๏ผ‰๏ผš็ฝ‘็ปœๅฑ‚](https://blog.graph.cool/graphql-server-basics-the-network-layer-51d97d21861) - Nikolas Burk - [GraphQL ๆœๅŠกๅ™จๅŸบ็ก€๏ผˆ็ฌฌไธ‰้ƒจๅˆ†๏ผ‰๏ผšๆญ็ง˜ GraphQL ่งฃๆžๅ™จไธญ็š„ `info` ๅ‚ๆ•ฐ](https://blog.graph.cool/graphql-server-basics-demystifying-the-info-argument-in-graphql-resolvers-6f26249f613a) - Nikolas Burk +- [GraphQL ๅ…ฅ้—จๆŒ‡ๅ—](https://www.freecodecamp.org/news/a-beginners-guide-to-graphql-86f849ce1bec/) - Leonardo Maldonado +- [้ซ˜ๆ€ง่ƒฝ GraphQL to SQL ๅผ•ๆ“Ž็š„ๆžถๆž„](https://blog.hasura.io/architecture-of-a-high-performance-graphql-to-sql-server-58d9944b8a87) - Hasura ## ่ง†้ข‘ @@ -92,24 +98,28 @@ Facebook ๅ†…ๅค–็š„ๅผ€ๅ‘่€…ๅœจไธ–็•Œๅ„ๅœฐ็š„ไผš่ฎฎๅ’Œ่šไผšไธŠ้ƒฝ่ฐˆๅˆฐไบ† Grap - [ไฝฟ็”จ Angular 2 ้‡Šๆ”พ GraphQL ็š„ๅŠ›้‡](https://www.youtube.com/watch?v=VYpJ9pfugM8) - Gerard Sans, NG-BE 2016 - [็ฝ‘็ปœ็ ”่ฎจไผš็ณปๅˆ—๏ผšGraphQL ๅœจไธ–็•Œๅ„ๅœฐ](https://graphql-world.com/webinar) - Vince Ning & Michael Paris - [GraphQL Europe ไธญ็š„ๆ‰€ๆœ‰ๆผ”่ฎฒ](https://www.youtube.com/playlist?list=PLn2e1F9Rfr6n_WFm9fPE-_wYPrYvSTySt) - Lee Byron, Sashko Stubailo, Dan Schafer, Johannes Schickling ็ญ‰ +- [ๅญฆไน ๅŸบไบŽ React ๅ’Œ Relay ็š„ GraphQL](https://www.packtpub.com/application-development/learning-graphql-react-and-relay-video) - Divyendu Singh +- [ๅฎž่ทตๆฏ” RESTful Web ๆœๅŠกๆ›ดๅฅฝ็š„ GraphQL๏ผˆ่ง†้ข‘๏ผ‰](https://www.packtpub.com/application-development/hands-graphql-better-restful-web-services-video) - Ashwin Hegde +- [ไธ€ไธช PostgreSQL ๆ”ฏๆŒ็š„ GraphQL BaaS](https://www.youtube.com/watch?v=neIZcc8y3B0) - Tanmai Gopal ## ๅ›พไนฆ +- [GraphQL ๆŒ‡ๅ—](https://graphql.guide) - John Resig ๅ’Œ Loren Sands-Ramshaw +- [ๅญฆไน  GraphQL](https://www.amazon.com/Learning-GraphQL-Declarative-Fetching-Modern/dp/1492030716/) - Eve Porcello ๅ’Œ Alex Banks +- [ๅ…จๆ ˆ GraphQL](https://www.graphql.college/fullstack-graphql) - Julian Mayorga +- [ๅœจ Elixir ๅ’Œ Absinthe ไธญไฝฟ็”จ Craft GraphQL API](https://pragprog.com/book/wwgraphql/craft-graphql-apis-in-elixir-with-absinthe) - Bruce Williams and Ben Wilson - [ๅญฆไน  GraphQL ๅ’Œ Relay](https://www.packtpub.com/web-development/learning-graphql-and-relay) - Samer Buna +- [ๅŠจๆ‰‹ไฝฟ็”จ GraphQL ๅ’Œ React ่ฟ›่กŒๅ…จๆ ˆ Web ๅผ€ๅ‘](https://www.packtpub.com/web-development/hands-full-stack-web-development-graphql-and-react) - Sebastian Grebe +- [GraphQL ไน‹่ทฏ](https://www.robinwieruch.de/the-road-to-graphql-book/) - Robin Wieruch +- [็”Ÿไบงๅฏ็”จ็š„ GraphQL](https://book.productionreadygraphql.com/) - Marc-Andre Giroux ## ๆ›ดๅคš่ต„ๆบ ่ฆๆŽข็ดขๅ…ถไป–ๆœ‰ๅ…ณ GraphQL ็š„็คพๅŒบๅผ€ๅ‘็š„่ต„ๆบๅ’Œๅ†…ๅฎน๏ผŒ่ฏทๆŸฅ็œ‹ไปฅไธ‹็ฝ‘็ซ™๏ผš +- [Exploring GraphQL: A Query Language For APIs](https://www.edx.org/course/exploring-graphql-a-query-language-for-apis)๏ผšๅ…่ดน็š„ 7 ๅ‘จ edX ่ฏพ็จ‹ - [How to GraphQL](https://www.howtographql.com)๏ผšGraphQL ็š„ๅ…จๆ ˆๆ•™็จ‹ -- [Building Apollo](https://dev-blog.apollodata.com/) -- [Learn GraphQL](https://learngraphql.com/basics/introduction) +- [Building Apollo](https://blog.apollographql.com) - [awesome-graphql](https://github.com/chentsulin/awesome-graphql): ไธ€ไธชๅฅ‡ๅฆ™็š„็คพๅŒบ๏ผŒ็ปดๆŠคไบ†ๅบ“ใ€่ต„ๆบ็ญ‰็š„ๅˆ้›†ใ€‚ - [graphql-apis](https://github.com/APIs-guru/graphql-apis): ๅ…ฌๅผ€ GraphQL API ็š„้›†ๅˆๅˆ—่กจใ€‚ -- [Graphcool Blog](https://www.graph.cool/blog/) -- [Learn Apollo](https://www.learnapollo.com/): Apollo GraphQL Client ็š„ๅŠจๆ‰‹ๆ•™็จ‹๏ผˆ้€‚็”จไบŽ Reactใ€ReactNativeใ€Exponentใ€Angularใ€Vue ๅ’Œ iOS๏ผ‰ -- [Learn Relay](https://www.learnrelay.org): ๅฏน Relay ็š„ๅ…จ้ขไป‹็ป๏ผˆๅŒ…ๅซ่ง†้ข‘ๆ•™็จ‹๏ผ‰ -- [Scaphold Community](https://scaphold.io/community/): ไธ€ไบ›ๅธฎๅŠฉๆ‚จๅฐ†ไฝฟ็”จ GraphQL ็š„ app ๅ‘ๅธƒๅˆฐ็”Ÿไบง็Žฏๅขƒ็š„่ต„ๆบ -- [GraphQL World](https://graphql-world.com): GraphQL ๅผ€ๅ‘่€…ๅ’ŒๆดปๅŠจ็š„ๅ…จ็ƒ็คพๅŒบ -- [GraphQL Talks](https://www.graph.cool/talks/): ๆ‰พๅˆฐๅนถ่ง‚็œ‹ๆœ€ๅฅฝ็š„ GraphQL ๆผ”่ฎฒ - [Basically, Full-stack GraphQL](https://github.com/TejasQ/basically-fullstack-graphql)๏ผšไฝฟ็”จ็ฎ€ๅ•่‹ฑๆ–‡็š„ไธ€ไธชๅŸบไบŽไปฃ็ ็š„ไป‹็ปๅœจๅฎขๆˆท็ซฏ_ๅ’Œ_ๆœๅŠก็ซฏไฝฟ็”จ GraphQL diff --git a/src/content/community/Community-RunningProjects.md b/src/content/community/Community-RunningProjects.md new file mode 100644 index 0000000000..354468a667 --- /dev/null +++ b/src/content/community/Community-RunningProjects.md @@ -0,0 +1,79 @@ +--- +title: Project resources +layout: docs +category: Community +permalink: /community/project-resources/ +next: /community/upcoming-events/ +sublinks: Types of GraphQL projects,Running project meetings,Resources for projects +--- + +The following resources are intended to help official GraphQL projects understand what resources are available to them, and how to correctly run meetings.. + +## Types of GraphQL projects + +The GraphQL community is incredibly broad, with a large number of reference implementations which are developed and evolving in parallel to the GraphQL project. Many of them are listed [here](/code/). + +The primary distinction between official GraphQL projects and other implementations is that GraphQL projects are managed under the [GraphQL technical charter](https://technical-charter.graphql.org) and [GraphQL Code of Conduct](https://code-of-conduct.graphql.org). + +We welcome and encourage community members and third-parties to maintain their own implementations. + +> ### Making an independent project official +> +> If you maintain a tool or reference implementation that you'd like to transfer to the [GraphQL GitHub org](https://github.com/graphql), or if you are planning to start a new workgroup or implementation within the official GraphQL project, please add your name to the agenda of an upcoming [GraphQL Working Group meeting](https://github.com/graphql/graphql-wg/tree/HEAD/agendas) to introduce your idea. +> +> Should your proposal meet with approval, a few things will then need to happen. For example, we will work with you to adopt our policies and neutral governance, and help you transfer the project and its assets (generally the domain name and any trademarks) so that they are neutrally held at the Linux Foundation. If you'd like to explore the idea before making a proposal, please reach out to [operations@graphql.org](mailto:operations@graphql.org) + + +## Running project meetings + +Because GraphQL is a [Joint Development Foundation](https://www.jointdevelopment.org/) project, all meeting participants and contributors must complete the GraphQL specification membership agreement prior to participating. + +Each **technical meeting** must: + +* Have an agenda Markdown document in the project repo published at least a week before the call. +* Have an "Attendees" section where people can open a PR and add their own names in advance. +* Optional, but encouraged: Use the GraphQL Zoom account so that we can easily post the meeting recording to [YouTube](https://youtube.graphql.org). + +Each **attendee** must: + +* Add their name to the agenda prior to the meeting. +* Pass the EasyCLA check by signing the agreement as an individual, or asking their company to add them to the list. + +The **person running the call** must: + +* Merge all appropriate attendance and agenda PRs with passing checks prior to the meeting. +* Verify that everyone who connects to the meeting appears on the list. +* If someone joins who is not on the list, they need to disconnect until they can PR themselves onto the attendee list with all checks passing. +* Notify all attendees the meeting is being recorded, and record to the cloud. +* Keep minutes, or have a volunteer to write them. Minutes should be published to the project repo. + + +## Resources for projects + +### Zoom + +Official GraphQL projects and workgroups are welcome and encouraged to use the GraphQL zoom. Please contact [operations@graphql.org](mailto:operations@graphql.org) to get the credentials. + +### GitHub + +Official GraphQL projects can host their repos in the [graphql organization](https://github.com/graphql). This includes code repos, spec repos, and workgroup coordination repos. Please contact [operations@graphql.org](mailto:operations@graphql.org) for details. + +### YouTube playlist + +Wherever possible, we record meetings and post them to a playlist on the [GraphQL YouTube channel](https://youtube.graphql.org). If your project does not have a playlist, please contact [operations@graphql.org](mailto:operations@graphql.org) and we can set you up. + +### GraphQL calendar + +Project meetings should be added to the [GraphQL calendar](https://calendar.graphql.org), so that people can easily find them. + +### GraphQL domain registration and DNS management + +The Linux Foundation holds the top-level graphql.org domain, and a number of others. If you need to register a domain for your project (particularly if it includes the word "graphql") or need to manage DNS for a registered domain, please contact [operations@graphql.org](mailto:operations@graphql.org). + +### Trademark guidance + +The GraphQL trademark is managed by LF Projects. GraphQL projects are able to use the GraphQL name and marks in accordance with the [trademark policy](https://lfprojects.org/policies/trademark-policy/). If your project has questions about how you or others can use the mark, please contact [trademark@graphql.org](mailto:trademark@graphql.org). + +### All other questions + +If you have a question not covered here, please reach out to [operations@graphql.org](mailto:operations@graphql.org). diff --git a/src/content/community/Community-Users.md b/src/content/community/Community-Users.md new file mode 100644 index 0000000000..2e40a6dc55 --- /dev/null +++ b/src/content/community/Community-Users.md @@ -0,0 +1,126 @@ +--- +title: GraphQL for Users +layout: docs +category: Community +permalink: /community/users/ +next: /community/developers/ +sublinks: Training courses,Where to ask questions,Blogs,Videos,Books,More resources +--- + +The following resources are intended to help users and implementers. Find something useful? Please add it to the list! + +*Please note that the GraphQL Foundation does not provide support or services, and cannot recommend one vendor's product over another.* + +## Training courses + +A number of GraphQL training courses are available. + +* [Exploring GraphQL: A Query Language For APIs](https://www.edx.org/course/exploring-graphql-a-query-language-for-apis): A free 7 week edX course, developed by [Linux Foundation Training](https://training.linuxfoundation.org) +* [How to GraphQL](https://www.howtographql.com): The Fullstack Tutorial for GraphQL + +## Where to ask questions + +### Stack Overflow + +Many members of the community use Stack Overflow to ask and answer questions. If you're running into an implementation issue or having trouble with a query, this is the best place to start. + +[Read through the existing questions tagged with **graphql** or ask your own!](http://stackoverflow.com/questions/tagged/graphql) + +### Slack, Discord, and IRC + +Many GraphQL developers idle in Discord, Slack, and IRC for live +communication and can answer quick questions. + +Please be patient and polite. These are not explicitly user support channels, although they're likely a good place to find someone who can answer your question if you ask nicely. + +* **Slack:** [#general on the GraphQL Slack](https://graphql.slack.com/messages/general/) [(Get an invite)](https://graphql-slack.herokuapp.com/) +* **IRC:** [#graphql on freenode](https://freenode.net/) + +#### Discord + +* [Everything GraphQL: Curated By The Guild](https://discord.gg/xud7bH9) +* [#graphql on the ReactiFlux Discord](http://join.reactiflux.com/) + +### Vendor channels + +The following channels are maintained by vendors, and may be a good place to find help on their products. + +* [Apollo Slack](http://apollostack.com/#slack) +* [Graphile Discord](https://discord.gg/graphile) +* [Prisma Slack](https://slack.prisma.io/) + +## Blogs + +Here are a list of notable blog posts to help you better understand GraphQL: + +- [GraphQL: A data query language](/blog/graphql-a-query-language/) - Lee Byron +- [Subscriptions in GraphQL and Relay](/blog/subscriptions-in-graphql-and-relay/) - Dan Schafer and Laney Kuenzel +- [Mocking your server is easy with GraphQL](/blog/mocking-with-graphql/) - Jonas Helfer +- [Wrapping a REST API in GraphQL](/blog/rest-api-graphql-wrapper/) - Steven Luscher +- [Leaving technical preview](/blog/production-ready/) - Lee Byron +- [Relicensing the GraphQL specification](https://medium.com/@leeb/relicensing-the-graphql-specification-e7d07a52301b) - Lee Byron +- [GraphQL Introduction](https://facebook.github.io/react/blog/2015/05/01/graphql-introduction.html) - Nick Schrock +- [From REST to GraphQL](https://0x2a.sh/from-rest-to-graphql-b4e95e94c26b#.tag7nzkrb) - Jacob Gillespie +- [GraphQL Explained](https://medium.com/apollo-stack/graphql-explained-5844742f195e#.zdykxos6i) - Jonas Helfer +- [GraphQL Concepts Visualized](https://medium.com/apollo-stack/the-concepts-of-graphql-bc68bd819be3#.hfczgtdsj) - Dhaivat Pandya +- [Building the f8 App: Using GraphQL & Relay](http://makeitopen.com/docs/en/1-A2-relay.html) +- [Your First GraphQL Server](https://medium.com/the-graphqlhub/your-first-graphql-server-3c766ab4f0a2#.ovn0y19k4) - Clay Allsopp +- [Tutorial: Kick start a JS API with Apollo-server, Dataloader and Knex](https://bamtech.gitbook.io/dev-standards/backend/graphql-js/getting-started-with-apollo-server-dataloader-knex.mo) - Thomas Pucci +- [Tutorial: How to Build a GraphQL Server](https://medium.com/apollo-stack/tutorial-building-a-graphql-server-cddaa023c035#.bu6sdnst4) - Jonas Helfer +- [Designing Powerful APIs with GraphQL Query Parameters](https://www.graph.cool/docs/tutorials/designing-powerful-apis-with-graphql-query-parameters-aing7uech3/) - Johannes Schickling +- [GraphQL and the amazing Apollo Client](https://medium.com/google-developer-experts/graphql-and-the-amazing-apollo-client-fe57e162a70c) - Gerard Sans +- [GraphQL Server Basics (Part I): The Schema](https://blog.graph.cool/graphql-server-basics-the-schema-ac5e2950214e) - Nikolas Burk +- [GraphQL Server Basics (Part II): The Network Layer](https://blog.graph.cool/graphql-server-basics-the-network-layer-51d97d21861) - Nikolas Burk +- [GraphQL Server Basics (Part III): Demystifying the `info` argument in GraphQL resolvers](https://blog.graph.cool/graphql-server-basics-demystifying-the-info-argument-in-graphql-resolvers-6f26249f613a) - Nikolas Burk +- [A Beginnerโ€™s Guide to GraphQL](https://www.freecodecamp.org/news/a-beginners-guide-to-graphql-86f849ce1bec/) - Leonardo Maldonado +- [Architecture of a high performance GraphQL to SQL engine](https://blog.hasura.io/architecture-of-a-high-performance-graphql-to-sql-server-58d9944b8a87) - Hasura + +## Videos + +Developers inside and outside of Facebook have given talks about GraphQL at conferences and meetups around the world. Here are some of our favorites: + +- [Exploring GraphQL](https://www.youtube.com/watch?v=WQLzZf34FJ8) - Lee Byron, React Europe 2015 +- [From Zero to GraphQL in 30 Minutes](https://www.youtube.com/watch?v=UBGzsb2UkeY) - Steve Luscher +- [Exploring GraphQL](https://www.youtube.com/watch?v=_9RgHXqH8J0) - Nick Schrock, @Scale 2015 +- [GraphQL Servers](https://www.youtube.com/watch?v=KOudxKJXsjc) - Nick Schrock, React Rally 2015 +- [GraphQL at Facebook](https://www.youtube.com/watch?v=etax3aEe2dA) - Dan Schafer, React Europe 2016 +- [GraphQL Source Code Overview](https://www.youtube.com/watch?v=IqtYr6RX32Q) - Lee Byron +- [GraphQL Future](https://www.youtube.com/watch?v=ViXL0YQnioU) - Lee Byron & Laney Kuenzel +- [Apollo Client: Put GraphQL Data in Your UI](https://www.youtube.com/watch?v=u1E0CbGeICo) - Sashko Stubailo +- [Relay 2 - simpler, faster, and more predictable](https://www.youtube.com/watch?v=OEfUBN9dAI8) - Greg Hurrell +- [Build a GraphQL server for Node.js, using PostgreSQL/MySQL](https://www.youtube.com/watch?v=DNPVqK_woRQ) - Lee Benson +- [A GraphQL Framework for Non-JS Servers](https://www.youtube.com/watch?v=RNoyPSrQyPs) - Syrus Akbary +- [Modernize Your Angular App with GraphQL](https://www.youtube.com/watch?v=E8feZBidZcs) - Uri Goldshtein, AngularCamp 2016 +- [GraphQL server tutorial for Node.js with SQL, MongoDB and REST ](https://www.youtube.com/watch?v=PHabPhgRUuU) - Jonas Helfer +- [Building Native Mobile Apps with GraphQL](https://www.youtube.com/watch?v=z5rz3saDPJ8) - Martjin Walraven, React Europe 2016 +- [GraphQL in native applications](https://atscaleconference.com/videos/graphql-in-native-applications-at-scale/) - Igor Canadi & Alex Langenfeld, @Scale 2016 +- [Build a GraphQL Backend with the Serverless Framework](https://acloud.guru/learn/serverless-with-graphql) - Ryan Brown +- [Build a Full GraphQL Backend in Under 5 Minutes](https://www.youtube.com/watch?v=bJ8pnYd6jPQ) - Michael Paris +- [GraphQL: From Zero to Scala](https://www.youtube.com/watch?v=6ttypoLyRaU) - Jรฉrรฉmie Astori, Northeast Scala Symposium 2017 +- [GraphQL in Production: Backend as a Service](https://www.youtube.com/watch?v=U2NKoStGBvE) - Michael Paris & Vince Ning, GraphQL in Production Meetup SF August 2016 +- [Development of real-time apps with GraphQL Node.js](https://youtu.be/yh_A6CEqsSM) - Vince Ning & Michael Paris, SF Node Meetup February 2017 +- [Unleashing the power of GraphQL using Angular 2](https://www.youtube.com/watch?v=VYpJ9pfugM8) - Gerard Sans, NG-BE 2016 +- [Webinar Series: GraphQL Around The World](https://graphql-world.com/webinar) - Vince Ning & Michael Paris +- [All Talks from GraphQL Europe](https://www.youtube.com/playlist?list=PLn2e1F9Rfr6n_WFm9fPE-_wYPrYvSTySt) - Lee Byron, Sashko Stubailo, Dan Schafer, Johannes Schickling and many more +- [Learning GraphQL with React and Relay](https://www.packtpub.com/application-development/learning-graphql-react-and-relay-video) by Divyendu Singh +- [Hands-on GraphQL for Better RESTful Web Services (Video)](https://www.packtpub.com/application-development/hands-graphql-better-restful-web-services-video) by Ashwin Hegde +- [A PostgreSQL backed GraphQL BaaS](https://www.youtube.com/watch?v=neIZcc8y3B0) by Tanmai Gopal + +## Books + +- [The GraphQL Guide](https://graphql.guide) by John Resig and Loren Sands-Ramshaw +- [Learning GraphQL](https://www.amazon.com/Learning-GraphQL-Declarative-Fetching-Modern/dp/1492030716/) by Eve Porcello and Alex Banks +- [Fullstack GraphQL](https://www.graphql.college/fullstack-graphql) by Julian Mayorga +- [Craft GraphQL APIs in Elixir with Absinthe](https://pragprog.com/book/wwgraphql/craft-graphql-apis-in-elixir-with-absinthe) by Bruce Williams and Ben Wilson +- [Learning GraphQL and Relay](https://www.packtpub.com/web-development/learning-graphql-and-relay) by Samer Buna +- [Hands-on Full-Stack Web Development with GraphQL and React](https://www.packtpub.com/web-development/hands-full-stack-web-development-graphql-and-react) by Sebastian Grebe +- [The Road to GraphQL](https://www.robinwieruch.de/the-road-to-graphql-book/) by Robin Wieruch +- [Production Ready GraphQL](https://book.productionreadygraphql.com/) by Marc-Andre Giroux + +## More Resources + +To explore other community-developed resources and content about GraphQL, take a look at these sites: + +- [Building Apollo](https://blog.apollographql.com) +- [awesome-graphql](https://github.com/chentsulin/awesome-graphql): A fantastic community maintained collection of libraries, resources, and more. +- [graphql-apis](https://github.com/APIs-guru/graphql-apis): A collective list of public GraphQL APIs. diff --git a/src/content/faq/BestPractices.md b/src/content/faq/BestPractices.md new file mode 100644 index 0000000000..c01e0e6a78 --- /dev/null +++ b/src/content/faq/BestPractices.md @@ -0,0 +1,60 @@ +--- +title: Best Practices +layout: faq +permalink: /faq/best-practices +position: 3 +--- + +### Is GraphQL scalable? + +Yes, GraphQL is designed to be scalable and is used by many companies in production under a very high load. + +GraphQL comes with some [built-in performance boosts](#how-does-graphql-affect-my-product-s-performance) that can help. But once you push it to production, you're responsible for scaling it across instances and monitoring performance. + +### Does GraphQL support offline usage? + +No, or at least not natively. But there are [GraphQL clients](#what-is-a-graphql-client-and-why-would-i-need-one) that enable you to build offline-first. They use features designed to perform data operations while offline, such as caching and service workers. + +You can find a list of GraphQL clients in various languages on our [Code page](/code/). + +### What are the security concerns with GraphQL? + +Most of the security concerns associated with GraphQL are typical for any API or service. A few examples: SQL injections, Denial of Service (DoS) attacks, or someone abusing flawed authentication. But there are also some attacks specific to GraphQL. For instance, [batching attacks](https://cheatsheetseries.owasp.org/cheatsheets/GraphQL_Cheat_Sheet.html#batching-attacks). These attacks can happen as a result of GraphQL allowing you to batch multiple queries (or requests for multiple object instances) in a single network call. + +No matter the concern, itโ€™s important to be proactive. There are many ways to securing your GraphQL server. Using a timeout, setting a maximum depth for queries, and throttling queries based on the server time it needs to complete are all potential approaches. + +For an overview of common security concerns and how to address them, check out the [Security tutorial on How to GraphQL](https://www.howtographql.com/advanced/4-security/) and [OWASPโ€™s GraphQL Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/GraphQL_Cheat_Sheet.html). + +### How can I set up authorization with GraphQL? + +We recommend enforcing authorization behavior in the [business logic layer](/learn/thinking-in-graphs/#business-logic-layer). That way, you have a single source of truth for authorization. + +For a more detailed explanation, go to our [Authorization documentation](/learn/authorization/). + +### How does authentication work with GraphQL? + +You can implement authentication with common patterns, such as [OAuth](https://oauth.net/) or [JWT](https://jwt.io/). Thereโ€™s nothing special about authentication within the GraphQL specification. + +Some [GraphQL libraries](/code/#language-support) include a specific protocol for authentication as well. Although if youโ€™re working with a pipeline model, we recommend that [GraphQL be placed after all authentication middleware](/learn/serving-over-http/#web-request-pipeline). + +If youโ€™re using [GraphQL.js](/graphql-js/) to build your API server, we have documentation on [handling authentication with Express middleware](/graphql-js/authentication-and-express-middleware/). + +### Is GraphQL the right fit for designing a microservice architecture? + +Yes, it can be. If youโ€™re integrating GraphQL into your microservice architecture, weโ€™d recommend having one GraphQL schema as an API gateway rather than having your client talk to multiple GraphQL services. This way, you can split your backend into microservices, but then still aggregate all your data to the frontend from a single API. + +There are many ways to create an API gateway. The benefit of using GraphQL is that you can take advantage of features like [caching](/learn/caching/), request budgeting, and planning out query schedules. + +### How does versioning work in GraphQL? + +Thereโ€™s nothing that will prevent a GraphQL service from being versioned like any other REST API. That said, GraphQL avoids versioning by design. + +Instead, GraphQL provides the tools to continually build and evolve your schema. For example, GraphQL only returns the data thatโ€™s explicitly requested. This means that you can add new features (and all the associated types and fields) without creating a breaking change or bloating results for existing queries. + +You can read more about [how versioning works in GraphQL](/learn/best-practices/#versioning) in our Best Practices section. + +### How can I document my GraphQL API? + +One of the benefits of GraphQL is that it's inherently self-documenting. This means that when you use an interactive tool like [GraphiQL](https://github.com/graphql/graphiql), youโ€™re able to explore what data is exposed by your GraphQL API. This includes the [fields](/learn/queries/#fields), [types](/learn/schema/#type-system), and more. You can also add a [description field](https://spec.graphql.org/draft/#sec-Documentation) to provide supplementary notes about your endpoint. This description field supports strings and Markdown. + +For many, this provides enough API reference documentation. But it doesnโ€™t reduce the need for other forms of documentation. You'll likely still need to create guides that explain how the general concepts tie into your specific use case. \ No newline at end of file diff --git a/src/content/faq/Foundation.md b/src/content/faq/Foundation.md new file mode 100644 index 0000000000..d33d3f696c --- /dev/null +++ b/src/content/faq/Foundation.md @@ -0,0 +1,54 @@ +--- +title: GraphQL Foundation +layout: faq +permalink: /faq/graphql-foundation +position: 6 +--- + +### What does the GraphQL Foundation do? + +The primary responsibility of the Foundation is to set policy and allocate the budget to maximize the sustainability of the GraphQL community. Members participate on a governing board that meets monthly and decides how to allocate its funding. + +### Where does the funding go when I become a member? + +The GraphQL Foundation is funded exclusively through the support of our members. The governing board sets an annual budget to use the dues to the maximum benefit of the community. +Ways the Foundation distributes the money raised through memberships include: + +* Providing grants and sponsorship to core community developers who are working in neutral roles. +* Funding core community IT infrastructure. +* Funding coordination, financial, and legal support programs for the Foundation and the GraphQL project ecosystem. +* Other community and developer support programs. + +The GraphQL Foundation budget is realigned as the needs of the community change. + +### How are decisions made? + +As with other Linux Foundation projects, the governing board makes decisions through votes. Every vote is equal and no members have special voting rights or privileges. The charter currently limits the governing board to 25 members. + +### Who can join the GraphQL Foundation? + +GraphQL Foundation membership is open to companies who wish to support the GraphQL ecosystem. As the GraphQL Foundation is hosted at the [Linux Foundation](https://linuxfoundation.org), members must also join the Linux Foundation. + +### Do I need to join the Foundation to participate in GraphQL development? + +No, Foundation membership is separate from the technical development community. There is no cost to participate in GraphQL development, although you must sign the [free GraphQL Specification membership agreement](https://github.com/graphql/graphql-wg/tree/main/membership) in order to participate. These two things are different from each other. + +Members join the Foundation in order to provide essential funding and participate in the decisions on how it is used. Developers join the GraphQL Specification in order to contribute ideas, code, and other content. Many companies do both. + +### How do I participate in technical development? + +We would love to have you! The best place to get started is the [GraphQL Working Group](https://github.com/graphql/graphql-wg/tree/HEAD/membership), which meets monthly. Open a PR to add yourself to the agenda, and you are welcome to join. + +Otherwise, you can get involved in [any of our other projects](https://github.com/graphql/graphql-wg/blob/main/GraphQL-TSC.md#about-the-graphql-specification-project). + +### Who founded the organization? + +The GraphQL Foundation was founded by Apollo, AWS, Butterfly Network, Dgraph Labs, Facebook, Gatsby, GraphZen, Hasura, IBM, Intuit, Neo4j, Novvum, Pipefy, Salsify, Solo.io and Thicit. + +### Who is currently a member? + +You can learn more about our membership on the [GraphQL Foundation membership page](/foundation/members/). + +### How do we join? + +You can become a member of GraphQL Foundation and the Linux Foundation by completing our [membership application form](https://join.graphql.org). diff --git a/src/content/faq/Frontend.md b/src/content/faq/Frontend.md new file mode 100644 index 0000000000..ce7d9d805c --- /dev/null +++ b/src/content/faq/Frontend.md @@ -0,0 +1,12 @@ +--- +title: Frontend +layout: faq +permalink: /faq/frontend +position: 5 +--- + +### Does GraphQL replace Redux or other state management libraries? + +No, GraphQL isnโ€™t a state management library - but it can reduce the need for one. + +One benefit of state management libraries like Redux is that they can manipulate API responses into a format that your application understands. With GraphQL, you have control over [what data you request](/learn/queries/#fields) and typically results are formatted in a client-friendly way by the graph design. So this benefit is already built-in. Many [client libraries](#what-is-a-graphql-client-and-why-would-i-need-one) can also be used to manage state and have features like caching built-in. You may still decide to implement a state management library, but using it to format response data is generally not necessary. \ No newline at end of file diff --git a/src/content/faq/General.md b/src/content/faq/General.md new file mode 100644 index 0000000000..3ac038d0d0 --- /dev/null +++ b/src/content/faq/General.md @@ -0,0 +1,58 @@ +--- +title: General +layout: faq +permalink: /faq/general +position: 2 +--- + +### Is GraphQL frontend or backend? + +Both. GraphQL specifies how you can [exchange information between client and server](https://www.howtographql.com/basics/3-big-picture/). This includes how the server can indicate [what data and operations are available](/learn/introspection/), how the client should [format requests](/learn/queries/), how the server should [execute these queries](/learn/execution/), and what the client will [receive in response](/learn/serving-over-http/#response). + +### Does GraphQL use HTTP? + +Yes, [GraphQL is typically served over HTTP](/learn/best-practices/#http). This is largely due to how pervasive the HTTP protocol is in our industry. But it helps that you can try out GraphQL by creating [a single HTTP request](#why-should-i-use-graphql). Guidelines for setting up a GraphQL server to operate over HTTP are available in our [Serving over HTTP](/learn/serving-over-http/) documentation. + +While HTTP is the most common choice for client-server protocol, itโ€™s not the only one. GraphQL is agnostic to the transport layer. So, for example, you could use [WebSockets](https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API) for GraphQL subscriptions instead of HTTP to consume realtime data. + +### How does GraphQL affect my productโ€™s performance? + +On a typical GraphQL backend, every field on every type has a focused, single-purpose function for resolving that value. Also, instead of trying to handle data batching on the client, [GraphQL moves that logic to the server](/learn/best-practices/#server-side-batching-caching). As a result, there are some inherent performance benefits. Minimizing over-fetching and making [fewer roundtrips to the server](/learn/queries/#fields) are two of them. + +Other performance factors should be considered when building out your GraphQL implementation. For example, itโ€™s possible for a GraphQL service to be โ€˜chattyโ€™ and repeatedly load data from your database. This is commonly solved by [implementing a batching technique](/learn/best-practices/#server-side-batching-caching) or [utilizing a tool like DataLoader](https://github.com/graphql/dataloader). + +### What is a GraphQL client and why would I use one? + +GraphQL clients can help you handle [queries, mutations,](/learn/queries/) and [subscriptions](https://spec.graphql.org/draft/#sec-Subscription) to a [GraphQL server](https://www.howtographql.com/advanced/1-server/). They use the underlying structure of a GraphQL API to automate certain processes. This includes batching, UI updates, build-time schema validation, and more. + +A list of GraphQL clients in various languages is available on our [Code page](/code/). Thereโ€™s also an [in-depth explanation of their benefits](https://www.howtographql.com/advanced/0-clients/) on How To GraphQL. + +You don't need a specific client to work with GraphQL, though. You might want to start out by [issuing GraphQL results with a regular HTTP client](/learn/serving-over-http/). Then later switch to a GraphQL-optimized client as your application grows in complexity. + +### Does GraphQL replace ORMs? + +No, GraphQL is a specification typically used for remote client-server communications. It's [agnostic to the data source(s) used](#is-graphql-a-database-language-like-sql) and doesnโ€™t implement an object-relational mapping technique. But there are ORMs built specifically for GraphQL. A few of those are listed under the [Services section of our Code page](/code/#services). + +### Is GraphQL owned by Facebook? + +No, GraphQL is governed by the [GraphQL Foundation](#what-is-the-graphql-foundation). + +That said, the specification was originally developed at Facebook and [Facebook is a member](https://foundation.graphql.org/members/) of the GraphQL Foundation. You might notice that some of our [GitHub repositories](https://github.com/graphql/) still have the license listed under Facebook Inc. We're updating those and have already converted major projects, like [GraphiQL](https://github.com/graphql/graphiql/blob/main/LICENSE) and [DataLoader](https://github.com/graphql/dataloader/blob/master/LICENSE), to the the new copyright: "Copyright (c) 2020 GraphQL Contributors." + +### Who is behind GraphQL? + +Many people! The [GraphQL specification and all related projects](http://github.com/graphql/) are open source, so anyone is welcome to [contribute](#how-can-i-contribute-to-the-specification). That said, there is a structure in place behind the repositories. This exists to resolve conflicts within the community and guiding technical decisions. + +The [GraphQL Foundation](#what-is-the-graphql-foundation) provides most of the oversight for GraphQL. It's made up of [representatives from dozens of different companies](https://foundation.graphql.org/members/). + +There are also monthly virtual [GraphQL Working Group (WG)](https://github.com/graphql/graphql-wg) meetings managed by the GraphQL Foundation. These meetings are designed to bring together maintainers of commonly used GraphQL libraries and tools, as well as significant contributors to the GraphQL community. The WG meetings are completely open. Anyone is able to join and [propose items to the agenda](https://github.com/graphql/graphql-wg/blob/main/agendas/). + +In the [November 2020 WG meeting](https://www.youtube.com/watch?v=UybZp9O24Ow), it was announced that GraphQL will have a Technical Steering Committee (TSC) going forward. More on that coming soon. + +If this is confusing, donโ€™t worry - thereโ€™s a lot going on. To get a more visual, high-level overview, check out the [GraphQL Landscape](https://landscape.graphql.org/). + +### What is the GraphQL Foundation? + +The [GraphQL Foundation](https://foundation.graphql.org/faq/) is a neutral foundation that provides governance for GraphQL. This includes vendor-neutral oversight of open-source repositories, funding, events, and more. It's hosted under the [Linux Foundation](https://www.linuxfoundation.org/) and consists of [representatives from dozens of different companies](https://foundation.graphql.org/members/). The idea is that itโ€™s an impartial and open home for the GraphQL community. + +You can find out more by visiting [foundation.graphql.org](https://foundation.graphql.org/). diff --git a/src/content/faq/GettingStarted.md b/src/content/faq/GettingStarted.md new file mode 100644 index 0000000000..1c9628ce8e --- /dev/null +++ b/src/content/faq/GettingStarted.md @@ -0,0 +1,50 @@ +--- +title: Getting Started +layout: faq +permalink: /faq/getting-started +position: 1 +--- + +### Why should I use GraphQL? + +It depends on your use case, but in general, GraphQL has a few key features that stand out. For example, GraphQL enables you to: + +* Aggregate data from [multiple UI components](/learn/queries/#fragments). +* Create a representation of your data that feels familiar and natural ([a graph](/learn/thinking-in-graphs/#it-s-graphs-all-the-way-down)). +* Ensure that all of your data is [statically typed](/learn/schema/) and these types inform [what queries the schema supports](/learn/introspection/). +* [Reduce the need for breaking changes](/learn/best-practices/#versioning), but utilize a [built-in mechanism for deprecations](https://spec.graphql.org/draft/#sec-Deprecation) when you need to. +* Access to a [powerful tooling ecosystem](/code/#generic-tools) with GUIs, editor integrations, code generation, linting, analytics, and more. + +[Our homepage](/) outlines even more reasons to use GraphQL. + +You can try out GraphQL without rewriting your entire application. For instance, starting with a single HTTP request that wraps an existing REST call. Your [GraphQL schema](/learn/thinking-in-graphs/#shared-language) and [business domain model](/learn/thinking-in-graphs/#business-logic-layer) can expand gradually. We recommend focusing on one use case at first and only building the part of the schema needed for that. + +### Does GraphQL replace REST? + +No, not necessarily. They both handle APIs and can [serve similar purposes](/learn/thinking-in-graphs/#business-logic-layer) from a business perspective. GraphQL is often considered an alternative to REST, but itโ€™s not a definitive replacement. + +GraphQL and REST can actually co-exist in your stack. For example, you can abstract REST APIs behind a [GraphQL server](https://www.howtographql.com/advanced/1-server/). This can be done by masking your REST endpoint into a GraphQL endpoint using [root resolvers](/learn/execution/#root-fields-resolvers). + +For an opinionated perspective on how GraphQL compares to REST, check out [How To GraphQL](https://www.howtographql.com/basics/1-graphql-is-the-better-rest/). + +### Is GraphQL a database language like SQL? + +No, but this is a common misconception. + +GraphQL is a specification typically used for remote client-server communications. Unlike SQL, GraphQL is agnostic to the data source(s) used to retrieve data and persist changes. Accessing and manipulating data is performed with arbitrary functions called [resolvers](/learn/execution/). GraphQL coordinates and aggregates the data from these resolver functions, then returns the result to the client. Generally, these resolver functions should delegate to a [business logic layer](/learn/thinking-in-graphs/#business-logic-layer) responsible for communicating with the various underlying data sources. These data sources could be remote APIs, databases, [local cache](/learn/caching/), and nearly anything else your programming language can access. + +For more information on how to get GraphQL to interact with your database, check out our [documentation on resolvers](/learn/execution/#root-fields-resolvers). + +### How can I learn GraphQL? + +There are many resources available to help you learn GraphQL, including this website. In [our documentation](/learn/), youโ€™ll find a series of articles that explain essential GraphQL concepts and how they work. Our [Community page](/community) is full of resources to reference and groups to join. + +For more practical guides, visit the [How to GraphQL](https://www.howtographql.com/) fullstack tutorial website. We also have a free online course with edX, [Exploring GraphQL: A Query Language for APIs](https://www.edx.org/course/exploring-graphql-a-query-language-for-apis). + +Before you start your learning journey, make sure you know [what an API is](https://www.codenewbie.org/blogs/an-intro-to-apis) and how communication generally works between client and server. + +### Is GraphQL only for React or JavaScript developers? + +No, not at all. [GraphQL is a specification](https://spec.graphql.org/) that can be [implemented in any language](/learn/schema/#type-language). Our [Code page](/code/) contains a long list of libraries in many different programming languages to help with that. + +Itโ€™s understandable why youโ€™d think this, though. GraphQL was introduced at a [React conference](https://www.youtube.com/watch?v=9sc8Pyc51uU) and [GraphQL.js](/graphql-js/) is one of the most widely used implementations to date. We know this can be confusing, so weโ€™re working to improve our documentation and add more code samples that arenโ€™t written in JavaScript. \ No newline at end of file diff --git a/src/content/faq/Specification.md b/src/content/faq/Specification.md new file mode 100644 index 0000000000..4a21c82964 --- /dev/null +++ b/src/content/faq/Specification.md @@ -0,0 +1,32 @@ +--- +title: Specification +layout: faq +permalink: /faq/specification +position: 4 +--- + +### What is the best way to follow specification releases? + +The latest working draft release of the GraphQL specification can be found at [spec.graphql.org/draft](https://spec.graphql.org/draft/). Previous editions are also available at permalinks that match their [release tag](https://github.com/graphql/graphql-spec/releases). + +The entire process behind each release is open source. You can monitor specification proposals by following [pull requests in the graphql-spec repository](https://github.com/graphql/graphql-spec/pulls). You can also watch past GraphQL Working Group discussions about various proposals on [YouTube](https://www.youtube.com/channel/UCERcwLeheOXp_u61jEXxHMA). + +### How can I contribute to the GraphQL specification? + +GraphQL is still evolving and contributions are very welcome! The specification (including the [latest working draft](https://spec.graphql.org/)) is open source. [Contributor guidelines](https://github.com/graphql/graphql-spec/blob/main/CONTRIBUTING.md) are available on GitHub. + +There are more ways to get involved with GraphQL beyond the specification though. Updating the content on [this website and the documentation](https://github.com/graphql/graphql.github.io), for example. Or contributing to [graphql-js](https://github.com/graphql/graphql-js), [express-graphql](https://github.com/graphql/express-graphql), [GraphiQL](https://github.com/graphql/graphiql), or [one of the many other projects](https://github.com/graphql/) maintained by the [GraphQL Foundation](#what-is-the-graphql-foundation). + +### What is GraphQL Specification membership? + +The [GraphQL Specification](https://specification.graphql.org) and the associated reference implementations are a Joint Development Foundation project (also part of the Linux Foundation family). Individual or corporate contributors sign a document at no cost that they agree their contributions are under the open source licenses of the project. Because this is not GraphQL Foundation membership, specification members do not decide how to spend the budget. + +To sign the [GraphQL Specification membership document](https://github.com/graphql/graphql-wg/tree/HEAD/membership), open a PR against any [GraphQL repo on GitHub](https://github.com/graphql). + +If your organization uses and benefits from GraphQL, please consider becoming a member of both by opening a PR on behalf of your company and [joining the GraphQL Foundation](https://join.graphql.org). + +### Where is the documentation for subscriptions? + +It's not on this website yet, but we're working on it. If you'd like to help write guides on subscriptions, please [let us know](https://github.com/graphql/graphql.github.io/issues/993). + +For now, the specification includes details for [how to write and execute subscriptions](https://spec.graphql.org/draft/#sec-Subscription). diff --git a/src/content/foundation/About.md b/src/content/foundation/About.md new file mode 100644 index 0000000000..7ff55a183e --- /dev/null +++ b/src/content/foundation/About.md @@ -0,0 +1,35 @@ +--- +title: What is the GraphQL Foundation? +sidebarTitle: About the Foundation +heroText: An open and neutral home for the GraphQL community, dedicated to promoting widespread adoption and accelerating development of the surrounding ecosystem +layout: foundation +category: GraphQL Foundation +permalink: /foundation/ +next: /foundation/annual-reports/ +--- + +The **GraphQL Foundation** is a neutral foundation founded by global technology and application development companies. The GraphQL Foundation encourages contributions, stewardship, and a shared investment from a broad group in vendor-neutral events, documentation, tools, and support for GraphQL. + +GraphQL was created in 2012 and open sourced by Facebook in 2015. In 2019, Facebook and others [created the GraphQL Foundation](https://foundation.graphql.org/news/2019/03/12/the-graphql-foundation-announces-collaboration-with-the-joint-development-foundation-to-drive-open-source-and-open-standards/) as a neutral, non-profit home for the GraphQL assets and ongoing collaboration, and hosted by [The Linux Foundation](https://linuxfoundation.org). The GraphQL Foundation is a fully neutral home for the GraphQL trademark, and provides a means of collecting and distributing membership dues to support core community infrastructure and programs. + +## The GraphQL Foundation supports the community + +The primary mission of the GraphQL Foundation is to ensure that the GraphQL community is able to focus on the continued evolution of the [specification](https://spec.graphql.org) and [reference implementations](/code/). We accomplish this through a number of core activities: + +* Funding grants for project maintainers and community gardeners. +* Coordinating and funding mentorship programs. +* Providing collaboration infrastructure. +* Managing the GraphQL trademark and related policies. +* Providing legal support for projects. +* Operational and logistical support through The Linux Foundation. + +The GraphQL Foundation works in close collaboration with the [GraphQL Working Group](https://github.com/graphql/graphql-wg/) and the [GraphQL TSC](https://github.com/graphql/graphql-wg/blob/main/GraphQL-TSC.md). + +## Members support the GraphQL Foundation + +The GraphQL Foundation would like to thank [our current members](/foundation/members/) for their ongoing support to ensure the sustainability of the GraphQL ecosystem. Learn more about how your company can demonstrate its commitment to GraphQL by [becoming a member of the GraphQL Foundation](https://graphql.org/foundation/join). + + +If you have questions, you can reach out to [membership@graphql.org](mailto:membership@graphql.org). + + diff --git a/src/content/foundation/AnnualReports.md b/src/content/foundation/AnnualReports.md new file mode 100644 index 0000000000..ebd6f238ad --- /dev/null +++ b/src/content/foundation/AnnualReports.md @@ -0,0 +1,20 @@ +--- +title: Annual Reports +sidebarTitle: Annual Reports +heroText: Reflecting upon our accomplishments, anticipating our future +layout: foundation +category: GraphQL Foundation +permalink: /foundation/annual-reports/ +next: /foundation/contact/ +--- + +The GraphQL annual reports are a celebration of the ongoing work happening in the GraphQL technical community, the GraphQL Foundation, and our members. + +If you have an item you'd like to add to the annual report, please contact [operations@graphql.org](mailto:operations@graphql.org). + +## 2019 + +The GraphQL Foundation was founded in 2019, to support and sustain the GraphQL ecosystem. We had a busy first year! + +[Read the 2019 Annual Report ยป](/foundation/annual-reports/2019/) + diff --git a/src/content/foundation/Contact.md b/src/content/foundation/Contact.md new file mode 100644 index 0000000000..0770c50e65 --- /dev/null +++ b/src/content/foundation/Contact.md @@ -0,0 +1,48 @@ +--- +title: Contact the GraphQL Foundation +sidebarTitle: Contact us +heroText: The GraphQL Foundation is here to help. +layout: foundation +category: GraphQL Foundation +permalink: /foundation/contact/ +sublinks: Membership Inquriries,Membership Support,Meeting Logistics,Media Inquries,Technical Issues,General +next: /foundation/join/ +--- + +The GraphQL Foundation is supported by staff from [The Linux Foundation](https://linuxfoundation.org). If you have questions, please reach out to us using the links below. + +*Please note that we do not provide user support for GraphQL. If you have an implementation question, +please use the [relevant community channels](/community/).* + +## Membership Inquiries + +If you would like to learn more about becoming a GraphQL member, please email +[membership@graphql.org](mailto:membership@graphql.org). + +## Membership Support + +If you are already a member of the [GraphQL Foundation](/foundation/) and you need help with your membership, please reach out to [operations@graphql.org](mailto:operations@graphql.org). + +## Meeting Logistics + +Governing board and Working Group members who need help with meeting logistics (setting up a Zoom conference, adding or changing a calendar entry, designating an alternate representative, etc.) can reach out to [operations@graphql.org](mailto:operations@graphql.org) with their request. + +## Media Inquiries + +For media inquiries, please reach out to [pr@graphql.org](mailto:pr@graphql.org). + +## Technical Issues + +To report a technical issue with GraphQL, please use the [community channels](/community/). + +## General + +For all other inquiries, please email [info@graphql.org](mailto:info@graphql.org). + +Our mailing address is: + +> **GraphQL Foundation** +> 548 Market St +> PMB 57274 +> San Francisco, California +> 94104-5401 US diff --git a/src/content/foundation/Join.md b/src/content/foundation/Join.md new file mode 100644 index 0000000000..da7a00108f --- /dev/null +++ b/src/content/foundation/Join.md @@ -0,0 +1,97 @@ +--- +title: Become a Member +sidebarTitle: Join GraphQL +heroText: GraphQL Foundation members demonstrate their commitment to the ecosystem by providing essential financial support. +layout: foundation +category: GraphQL Foundation +permalink: /foundation/join/ +sublinks: GraphQL Specification,GraphQL Foundation +next: /foundation/members/ +--- + +There are two primary ways to support the ongoing development and success of GraphQL. + +* Developers can [join the GraphQL Specification](#the-graphql-specification), enabling them to contribute code, time, and talent to GraphQL technical projects. This is free for companies and individuals. + +* Organizations can [join the GraphQL Foundation](#the-graphql-foundation), which is the non-profit that supports the sustainability of the GraphQL community. This is accomplished through annual membership fees, which are allocated by the Governing Board for the benefit of the GraphQL ecosystem. + +If you have a question about which membership is right for you, please reach out to [membership@graphql.org](mailto:membership@graphql.org). + +--- + +## GraphQL Specification + +The GraphQL Specification and its related tools and libraries are developed under the Joint Development Foundation, a non-profit organization focused on open standards that is part of The Linux Foundation family. + +Membership in the GraphQL Specification is free, and is required for all who participate in the development process. This includes direct contributions to the specification, participation in meetings and discussions, and contributions to reference implementations and tooling. Joining is simple and straightforward, and all are welcome as members. + +*Please note that you or your employer must sign a specification membership before you can join GraphQL calls and participate in the technical development process.* + +### [Corporate specification membership](https://corporate-spec-membership.graphql.org) + +If you are planning to work on GraphQL for your employer, please ask an appropriate person to complete the corporate GraphQL Specification Membership application. ([preview](https://preview-spec-membership.graphql.org)) + +To join, please open a PR against a GraphQL repo ([instructions](https://corporate-spec-membership.graphql.org)). + +### [Individual specification membership](https://individual-spec-membership.graphql.org) + +If you are planning to work on GraphQL as an individual or if you are a student, please complete the individual GraphQL Specification Membership application. ([preview](https://preview-spec-membership.graphql.org)) + +To join, please open a PR against a GraphQL repo ([instructions](https://individual-spec-membership.graphql.org)). + +*Please note: If your employer has already signed a specification membership agreement, you do not need to sign a separate agreement as an individual. If your organization is a member of the GraphQL Foundation, you will still need a valid GraphQL Specification membership in order to contribute.* + +--- + +## GraphQL Foundation + +The GraphQL Foundation is a member-supported, non-profit organization whose mission is to support the long-term health and viability of the [GraphQL ecosystem](https://graphql.org). The GraphQL Foundation is hosted by [The Linux Foundation](https://linuxfoundation.org), the 501(c)6 non-profit home of Linux and many other open source collaborative projects. + +The GraphQL Foundation is entirely supported by [end-users, vendors, service providers, and consultants](/foundation/members) who recognize the importance of ensuring the long-term viability of neutral, collaborative development. The GraphQL Foundation is funded through participation fees, which are allocated by the governing board in ways that benefit the development community. + +### Benefits of membership + +The GraphQL Foundation Governing Board is responsible for setting high-level policy and allocating the GraphQL Foundation budget in ways that benefit the technical community. + +The first 20 members of the GraphQL Foundation participate as voting members of the Governing Board. Any additional members vote to select up to five additional seats. + +### How to join + +To [join the GraphQL Foundation](https://join.graphql.org), organizations become a member of the Linux Foundation and sign the GraphQL Foundation participation agreement. The GraphQL Foundation annual fee is received into a fund managed by the GraphQL Foundation Governing Board. + +* [Preview the Linux Foundation membership application ยป](/files/LF_Membership-Preview.pdf) +* [Preview the GraphQL Foundation participation agreement ยป](/files/GraphQL_Foundation-Participation_Agreement-Preview.pdf) + +GraphQL Foundation membership fees and Linux Foundation Silver Membership dues are adjusted according to an organization's number of full-time employees. + +### [GraphQL Foundation Membership](https://join.graphql.org) + +Organization size | Cost +:-----------------|:---- +General (5,000+) | $20,000 +General (2,000 to 4,999) | $10,000 +General (50 to 1,999) | $5,000 +General (Up to 49) | $2,000 + +To join, please complete the [membership application](https://join.graphql.org). + +### [Linux Foundation Membership](https://join.graphql.org) + +Organization size | Cost +:-----------------|:---- +Platinum | $500,000 +Gold | $100,000 +Silver (5,000+) | $20,000 +Silver (500 to 4,999) | $15,000 +Silver (100 to 499) | $10,000 +Silver (Up to 99) | $5,000 + +To join, please complete the [membership application](https://join.graphql.org). + +The GraphQL Foundation and the Linux Foundation also offer a no-cost associate membership for pre-approved non-profits, open source projects, and government entities. To learn more about Associate membership, please email [membership@graphql.org](mailto:membership@graphql.org). + +### Support the GraphQL Foundation + +To become a member and demonstrate your organization's support of GraphQL, please [complete the membership application](https://join.graphql.org). + +If you have questions or issues, please email [membership@graphql.org](mailto:membership@graphql.org). diff --git a/src/content/foundation/annual-report/2019.md b/src/content/foundation/annual-report/2019.md new file mode 100644 index 0000000000..e80eb9b163 --- /dev/null +++ b/src/content/foundation/annual-report/2019.md @@ -0,0 +1,289 @@ +--- +title: 2019 Annual Report +sidebarTitle: '2019' +heroText: 2019 Annual Report +layout: foundation +category: Annual Reports +permalink: /foundation/annual-reports/2019/ +next: /foundation/annual-reports/ +date: 2020-04-02 +--- + +The GraphQL Foundation is a neutral foundation founded by global technology and application development companies. The GraphQL Foundation encourages contributions, stewardship, and a shared investment from a broad group in vendor-neutral events, documentation, tools, and support for GraphQL. + +The GraphQL Foundation was formed in March 2019 and has now completed one full year of operation. We are pleased to present this annual report detailing the many things we have accomplished in support of this fast growing and broadly adopted platform. + +Comments and feedback are welcome at [info@graphql.org](mailto:info@graphql.org). + +> "The growth behind the technology and the community supporting GraphQL has been incredible. The GraphQL Foundation has played a critical role in helping to make GraphQL a neutral industry standard and enabling widespread adoption by encouraging contributions, and creating shared tools, and resources." +> +> โ€“ _**Lee Byron**, Executive Director, GraphQL Foundation, and GraphQL Co-Creator_ + +## A BUSY YEAR FOR GRAPHQL + +* [Who we are](#who-we-are) +* [Cultivating Projects](#cultivating-projects) +* [Growing membership](#growing-membership) +* [Growing The Graphql End User Community](#growing-the-graphql-end-user-community) +* [How Do I Get Involved?](#how-do-i-get-involved) +* [Events 2019](#events-2019) + * [Attendee Feedback](#attendee-feedback) +* [Community Updates](#community-updates) + * [Why Our Members Use GraphQL](#why-our-members-use-graphql) + * [How Our Members Are Using GraphQL](#how-our-members-are-using-graphql) + * [Member Contributions to the GraphQL Ecosystem](#member-contributions-to-the-graphql-ecosystem) + * [Publications From Our Members](#publications-from-our-members) + * [Talks, Papers, and Discussions on GraphQL](#talks-papers-and-discussions-on-graphql) +* [Training](#training) +* [Community Engagement](#community-engagement) +* [GraphQL Landscape](#graphql-landscape) +* [Devstats](#devstats) +* [A Look Ahead to 2020](#a-look-ahead-to-2020) + +## WHO WE ARE + +The [GraphQL Foundation](/) is a neutral foundation created by the founders of [GraphQL](https://graphql.org), along with many organizations who are using GraphQL in production. The GraphQL Foundation encourages contributions, stewardship, and a shared investment by providing vendor-neutral events, documentation, tools, and support for GraphQL. + + +## CULTIVATING PROJECTS + +The GraphQL Foundation hosts the [GraphQL specification](https://github.com/graphql/graphql-spec), [GraphQL.js](https://github.com/graphql/graphql-js) reference implementation, [DataLoader](https://github.com/graphql/dataloader) library, and [GraphiQL](https://github.com/graphql/graphiql) developer tool. + +GraphQL is a nextยญ-generation API technology developed internally by Facebook in 2012 before being publicly [open sourced in 2015](https://code.fb.com/core-data/graphql-a-data-query-language/). Unlike REST-ยญbased APIs, which take advantage of HTTP and existing protocols, GraphQL APIs provide developers with the flexibility to query the exact data they need from a diverse set of cloud data sources, with less code, greater performance and security, and a faster development cycle. Not only does this enable developers to rapidly build topยญ quality apps, it also helps them achieve consistency and feature parity across multiple platforms such as web, iOS, Android, and embedded and IoT applications. + +The GraphQL Foundation also funded community member Ivan Goncharov to work through a variety of GraphQL project issues, from backlog cleanup and more. + +## GROWING MEMBERSHIP + +The GraphQL Foundation +[launched](/news/2019/03/12/the-graphql-foundation-announces-collaboration-with-the-joint-development-foundation-to-drive-open-source-and-open-standards/) with 10 [members](/foundation/members/) and we wrapped the year with 21 members in total, including Apollo, AWS, Butterfly Network, Dgraph Labs, Facebook, Gatsby, GraphZen, Hasura, IBM, Intuit, Neo4j, Novvum, Pipefy, Salsify, Solo.io and more. [Join](/join/) your industry peers in helping to shape the GraphQL ecosystem. + +
    Lee presenting
    + +Organizations interested in becoming members of the GraphQL Foundation or the GraphQL Specification can learn more on our [new member page](/join). If you have questions about membership, please send an email to membership@graphql.org. + +## GROWING THE GRAPHQL END USER COMMUNITY + +We offer multiple opportunities for end users to contribute and have their voices heard. Companies that use GraphQL technologies internally, but do not sell any GraphQL services externally, are eligible to join the end user community. + +Our end user community is growing and we finished 2019 with 83 top companies and startups that are committed to accelerating the adoption of GraphQL and improving the developer experience. Please email us for more information at membership@graphql.org. + +## HOW DO I GET INVOLVED? + +GraphQL is first and foremost an open source project, and developers can contribute to the project at [https://github.com/graphql](https://github.com/graphql). Organizations interested in becoming members of the GraphQL Foundation or participating in development of the GraphQL Specification can learn more on our [new member page](/join). If you have questions about membership, please send an email to [membership@graphql.org](mailto:membership@graphql.org). + +## EVENTS 2019 + +In addition to multiple community events, GraphQL Summit 2019 was held in San Francisco, and GraphQL Asia 2019 was held in Bangalore. + +### ATTENDEE FEEDBACK + +
    +
    +
    + + + +
    + +## COMMUNITY UPDATES + +The GraphQL community is fortunate to have an active and engaged group of companies participating in the GraphQL Foundation. + +### WHY OUR MEMBERS USE GRAPHQL + +
    Apollo GraphQL logo
    + +"GraphQL is a transformative technology that saves time and money for every team building rich, user-centric applications. **Apollo** is proud to play a central role in its rapid rise and maturation in 2019. Apolloโ€™s industry-leading open source and cloud services power many of the worldโ€™s most significant online properties, including Expedia, Airbnb, PayPal, The New York Times, SurveyMonkey and thousands more. Apollo also hosts the worldโ€™s largest event dedicated to this technology - GraphQL Summit - which in 2019 featured more than 1,200 attendees and over 60 technical talks from some of the worldโ€™s most recognizable brands that are already benefiting from GraphQL." + +
    AWS logo
    + +"Collaborating with the Open Source community is always special; it has allowed **AWS** to improve and better understand the use cases that customers want to tackle, such as local mocking and testing. In order to move fast and ensure that we were releasing a valuable feature, we worked for several months with community members. We want to give a special thanks to Conduit Ventures for their significant contributions to the new Amplify local mocking environment." + +
    Expedia Group logo
    + +"GraphQL has been a huge accelerator for how **Expedia Group's** web application and service teams build APIs. Being part of the open source community is a priority for us in how we contribute back and learn from others on the same journey." + +
    Hasura logo
    + +"GraphQL is a rare technology that simultaneously improves the communication between _machines_ and between _humans!_ Data becomes easier to explore and consume for humans and GraphQL's spec driven design allows the creation of tools that can automate complex tasks around data fetching on the server and data management on the client. **Hasura's** flagship GraphQL engine automates complex data access work while giving API consumers an API they love using!" + +
    IBM logo
    + +"**IBM** is pleased to be an active member of the Linux Foundation's GraphQL project by participating on its technical working group and as a founding member of its Governing Board. IBM continued its commitment to innovating on key open technologies such as GraphQL in 2019." + +
    Novvum logo
    + +"At **Novvum**, our team is tiny, but we try to contribute to the foundation and open source community whenever possible. A few projects that come to mind are graphql-playground, graphql-weekly, graphql-birdseye, and the graphql edX course. GraphQL enables teams to focus on their bottom line and less on the nuances of software development. It provides the freedom necessary for frontend devs, UI/UX designers, content marketers, etc. to make incredible stuff without compromising the safety, flexibility, and stability desired by backend teams. It's come a long way since the early days. We are not surprised to see so many big named companies adopting it today." + +
    PayPal logo
    + +"GraphQL has been a complete game changer in the way **PayPal** thinks about data, fetch data and build applications." + +
    Salsify logo
    + +"**Salsify** provides a commerce and content platform that enables the world's largest brands to deliver engaging product experiences across the digital shelf. Our GraphQL powered APIs enable us to support a diverse set of integrated use cases on an extensible microservices platform architecture with great developer ergonomics and excellent performance." + +--- + +### HOW OUR MEMBERS ARE USING GRAPHQL + +
    Expedia Group logo
    + +**Expedia Group** continues to rapidly adopt GraphQL. Over the last 2 years we have transitioned our REST APIs to GraphQL โ€“ and now over 90% of all customer interactions in web and native[vrbo.com](http://vrbo.com/) apps are powered by GraphQL APIs and over 30% of all customer interactions on Expedia.com as well as other brands such as Hotels.com. + +
    Facebook logo
    + +**Facebook** has used GraphQL to power our production mobile apps for the last 7.5 years, from its creation as an internal API in 2012 to its open sourcing in 2015 and beyond. In 2020, weโ€™re as invested in the community and the technology as ever โ€” weโ€™re [discussing our approach to streaming semantics with the GraphQL working group](https://github.com/graphql/graphql-wg/issues/329), and weโ€™re [powering the new Facebook.com with GraphQL and Relay](https://developers.facebook.com/videos/2019/building-the-new-facebookcom-with-react-graphql-and-relay/). + +
    Novvum logo
    + +**Novvum** had been deploying graphql into production for the majority of our customers since its inception back in 2015. On any project, we find it extremely beneficial to add GraphQL as the primary communication layer between clients and the data that they need. From building car-sharing platforms on a time crunch to architecting fintech infrastructure to scaffolding MVPs for early-stage startups, we've observed many short- and long-term benefits by introducing GraphQL. + +
    PayPal logo
    + +**PayPal** uses GraphQL to power many of our products and user experiences including PayPal Checkout, our flagship product that facilitates payments for millions of merchants and users. + +--- + +### MEMBER CONTRIBUTIONS TO THE GRAPHQL ECOSYSTEM + +Our members have been active and engaged participants in the GraphQL ecosystem. Here are some of the ways in which our ecosystem has been enriched through their participation. + +
    Apollo GraphQL logo
    + +* **[Apollo Graph Manager](https://www.apollographql.com/docs/graph-manager/):** Tools and services for teams collaborating on a data graph, including a central schema registry, data graph analytics, workflows for developing and maintaining agile schemas, and machinery for managing graph security and policy and operations. +* **[Federation](https://www.apollographql.com/docs/apollo-server/federation/introduction/):** An open specification for composing multiple GraphQL services into a single data graph. The specification has been widely supported by the GraphQL community, with JavaScript, Kotlin, Java, Go, Python, Ruby, and PHP servers all adopting the federation programming model. +* **[Apollo Client](https://www.apollographql.com/docs/react/v3.0-beta):** The industryโ€™s most popular open-source library for connecting application UI to a GraphQL service. The upcoming Apollo Client 3, currently in beta, introduces a flexible data cache and brings many improvements to managing both local state and remote data. +* **[Apollo Server](https://www.apollographql.com/docs/apollo-server):** An open-source library for building a data graph in JavaScript thatโ€™s incrementally adoptable, production-ready, and compatible with any data source. Apollo Server defines the de-facto standard for GraphQL over HTTP and supports essential features for running GraphQL at scale such as federation, tracing, and caching. +* **[Apollo developer tooling](https://github.com/apollographql/apollo-tooling):** The Apollo tooling repository is home to several open-source GraphQL developer tools, including the Apollo CLI and VS Code extension. These tools connect to the Apollo registry, a central hub for managing your data graph, in order to provide workflows for an excellent developer experience. + +
    Expedia Group logo
    + +* **[GraphQL Kotlin](https://github.com/ExpediaGroup/graphql-kotlin):** Continued work on GraphQL Kotlin libraries for running GraphQL Server, including code first-schema generation and a Spring Boot based Kotlin Graphql Server. This technology powers Expedia.com and its fleet of brands like Orbitz, Wotif, & Travelocity +* **[GraphQL Component](https://github.com/ExpediaGroup/graphql-component):** GraphQL Component is a modular graphql schema framework in javascript being utilized to build APIs for Vrbo travel and owner applications, as well as partner services and public APIs. + +
    Hasura logo
    + +* **[GraphQL Engine](https://github.com/hasura/graphql-engine):** An open-source GraphQL engine for Postgres and other data sources. +* **[GraphQURL](https://github.com/hasura/graphqurl):** A command like utility like curl for GraphQL, with autocomplete and support for subscriptions. +* **[graphql-bench](https://github.com/hasura/graphql-bench):** A GraphQL benchmarking suite to make it easy for developers to test the performance of their GraphQL servers. +* **[learn-graphql](https://github.com/hasura/learn-graphql):** Open-source tutorials for almost all frontend application stacks to get started with GraphQL. + +
    IBM logo
    + +* **[OpenAPI-to-GraphQL](https://github.com/IBM/openapi-to-graphql):** Released the open-source OpenAPI-to-GraphQL library, which generates GraphQL interfaces on top of existing REST APIs. IBM made numerous other contributions to the open source community. +* **[libgraphqlparser](https://github.com/graphql/libgraphqlparser):** Delivered improvements to the open source GraphQL C++ library +* **[Loopback 4 OpenAPI-to-GraphQL](https://loopback.io/doc/en/lb4/exposing-graphql-apis.html):** Released Loopback 4 "OpenAPI-to-GraphQL" module that creates a GraphQL wrapper for REST APIs which are described by an OpenAPI specification + +--- + +### PUBLICATIONS FROM OUR MEMBERS + +
    Apollo GraphQL logo
    + +* [Principled GraphQL, best practices for creating, maintaining, and operating a data graph](https://principledgraphql.com/) +* [Fullstack GraphQL tutorial](https://www.apollographql.com/docs/tutorial/introduction/) + +
    AWS logo
    + +* [Merging GraphQL schema files and more from the CLI](https://aws.amazon.com/blogs/mobile/merging-graphql-schema-files-and-more-with-the-cli/) +* [Developing and testing GraphQL APIs, Storage and Functions with Amplify Framework Local Mocking features](https://aws.amazon.com/blogs/mobile/amplify-framework-local-mocking/) +* [Amplify DataStore โ€“ Simplify Development of Offline Apps with GraphQL](https://aws.amazon.com/blogs/aws/amplify-datastore-simplify-development-of-offline-apps-with-graphql/) + +
    Expedia Group logo
    + +* [The Architectural Principles Behind Vrboโ€™s GraphQL Implementation](https://medium.com/expedia-group-tech/graphql-component-architecture-principles-homeaway-ede8a58d6fde) + +
    Hasura logo
    + +* [Architecture of a high performance GraphQL to SQL engine](https://hasura.io/blog/architecture-of-a-high-performance-graphql-to-sql-server-58d9944b8a87/) +* [Level up your serverless game with a GraphQL data-as-a-service layer](https://hasura.io/blog/level-up-your-serverless-game-with-a-graphql-data-as-a-service-layer/) +* [Fluent GraphQL clients: how to write queries like a boss](https://hasura.io/blog/fluent-graphql-clients-how-to-write-queries-like-a-boss/) + +
    IBM logo
    + +* [An Empirical Study of GraphQL Schemas (at ICSOC conference)](https://arxiv.org/pdf/1907.13012.pdf) +* [An Empirical Study of GraphQL (blog)](https://medium.com/swlh/empirical-study-graphql-icsoc19-29038c48da5) +* [GraphQL API Management](https://www.ibm.com/blogs/research/2019/02/graphql-api-management) + +--- + +### TALKS, PAPERS, AND DISCUSSIONS ON GRAPHQL + +
    Apollo GraphQL logo
    + +* [GraphQL Summit 2019 Keynote, by Matt DeBergalis](https://youtu.be/EDqw-sGVq3k) +* [Migrating to Apollo and GraphQL at Airbnb, by Brie Bunge](https://youtu.be/pywcFELoU8E) +* [The Architecture of Federation, by Jeff Hampton](https://youtu.be/LKQKn1oFXJU) +* [All GraphQL Summit 2019 talks](https://www.youtube.com/playlist?list=PLpi1lPB6opQyraZSmwFre_FpL00_3nTzV) + +
    AWS logo
    + +* Co-organized the [GraphQL London Meetup group](https://www.meetup.com/GraphQL-London) +* Co-organized the [GraphQL San Francisco Meetup group](https://www.meetup.com/GraphQL-SF) +* [Archive of Meetup talks](https://www.youtube.com/c/GraphQLTalks). +* [Building modern APIs with GraphQL](https://www.youtube.com/watch?v=bRnu7xvU1_Y) + +
    Expedia Group logo
    + +* [Creating a federated schema for a global company (GraphQL Summit)](https://www.youtube.com/watch?v=MuD3TAP0D9Y) + +
    Hasura logo
    + +* [Accelerating product and data delivery with GraphQL](https://www.youtube.com/watch?v=znzdocyfZsc) +* [API management and governance for GraphQL](https://www.youtube.com/watch?v=ypEtjxVmgoI) +* [Building a high performance realtime GraphQL API on existing databases](https://www.youtube.com/watch?v=HOKMJkBYaqQ) + +
    IBM logo
    + +* [GraphQL sessions at 2019 API Conference, Berlin](https://apiconference.net/)) +* Demonstrated GraphQL API Management in IBM API Connect and IBM DataPowerยฎ Gateway enabling determination of GraphQL query characteristics, advanced threat protection, customized rate limiting, and API plan configuration +* [Conducted IBM Developer Meetups where GraphQL work was highlighted in talks and technical demonstrations](https://www.meetup.com/ibmcodenyc/events/266535427/) + +## TRAINING + +The GraphQL Foundation is proud to offer a new, free course โ€“ [Exploring GraphQL: A Query Language for APIs](https://www.edx.org/course/introduction-to-graphql) โ€“ through [edX](https://www.edx.org/) which we have had thousands already sign up for. + +If you are a programmer, this course will help you gain the skills you need to get started using GraphQL for a small project, or professionally in production. We cover a variety of tools to address multiple use cases. + +If you are nontechnical, this course will help you communicate with developers and participate in conversations about GraphQL, and understand when and why to use GraphQL for a project. + +## COMMUNITY ENGAGEMENT + +Want to start a meetup? Drop us a line, weโ€™d love to hear your idea: info@graphql.org. + +## GRAPHQL LANDSCAPE + +The [GraphQL Interactive Landscape](https://landscape.graphql.org/) was recently published by the GraphQL Foundation. + +![GraphQL Landscape](https://landscape.graphql.org/images/landscape.png) + +What is an interactive landscape? The concept started when the CNCF began the process of cataloging different types of tools for building out a cloud native architecture. This led to the creation of the CNCF Interactive Landscape. Turns out this tool became very helpful to all of us sorting out this new and exciting space. In the interest of providing a similar reference, the GraphQL Foundation defined their own version of the interactive landscape, including also adopters of GraphQL technology. + +The landscape is open source, and contributions from the community are welcomed. You can find guidelines for updating the landscape at: [https://github.com/graphql/graphql-landscape](https://github.com/graphql/graphql-landscape). + +## DEVSTATS + +The [DevStats](https://github.com/cncf/devstats) tool, which is open source, downloads data representing every public GitHub action across GraphQL Foundation projects and stores it in a queryable [Postgres](https://www.postgresql.org/) database. DevStats downloads updated data every hour and you can check out the tool here: [https://devstats.graphql.org](https://devstats.graphql.org/) + +## A LOOK AHEAD TO 2020 + +As the Executive Director of the GraphQL project, I hope I can speak for the whole community when I say we are looking forward to another productive year of GraphQL development. We are putting the final touches on the GraphQL 2020 spec release, and continue to make great progress developing new features, stabilizing existing ones, and exploring beyond core GraphQL. + +It has been really encouraging to see GraphQL continue to evolve over the past year as a technology and as a community. GraphQL is being used at scale by not only Facebook but now a great number of organizations large and small. As I said when first introducing the project, GraphQL is unapologetically driven by the needs of the client. This has been a critical aspect of GraphQL's success and it is great to see this principle reflect itself in our community, where those more interested in consuming APIs than producing them have come together to support the ongoing sustainability of the project. + +Since establishing the GraphQL Foundation, we've had an outpouring of support from these companies. This neutral, non-profit home for the GraphQL project has provided a healthy way for users, contributors, and supporters to collaborate and contribute funding in support of our programs and collaborative processes. For example, this support has enabled us to support long-time contributor Ivan Goncharov to focus on crucial development and maintenance of the reference implementation, specification and other community gardening work. It has also allowed us to launch a free GraphQL edX course, and has enabled us to take some first steps toward supporting and producing community events. + +Development of the GraphQL spec has remained open to all contributors. Over the last year we've brought more rigor and clarity to the development process. I've found it encouraging that contributions have been a healthy mix of aspirational new features and iterative improvements to the stable base. This demonstrates that GraphQL is evolving in meaningful ways to address exciting new use cases while also building confidence and stability around what thousands of companies use in production every day. Both of these are essential for GraphQL's long term success. + +Looking ahead, I have great optimism for GraphQL and see huge opportunities. First, we've been hard at work on the 2020 spec and that release is imminent. Spec development continues to accelerate and exciting advancements and improvements are underway for the 2021 release and beyond. Second, we have been accepted to participate in Google Summer of Code and are looking forward to adding these talented students as project collaborators. Third, the communities around the core GraphQL project are collaborating. For example, GraphiQL and Playground recently announced they will be joining efforts to build better tools for us all. + +Thank you again for your involvement in this project and your support of the GraphQL Foundation. I am pleased with our progress and am looking forward to another productive year. + +_โ€“ Lee Byron, Executive Director, GraphQL Foundation, and GraphQL Co-Creator_ + + + + + diff --git a/site/graphql-js/APIReference-Errors.md b/src/content/graphql-js/APIReference-Errors.md similarity index 92% rename from site/graphql-js/APIReference-Errors.md rename to src/content/graphql-js/APIReference-Errors.md index 46d08f8be3..2dfe469626 100644 --- a/site/graphql-js/APIReference-Errors.md +++ b/src/content/graphql-js/APIReference-Errors.md @@ -1,6 +1,6 @@ --- title: graphql/error -layout: ../_core/GraphQLJSLayout +layout: docs category: API ๅ‚่€ƒ permalink: /graphql-js/error/ sublinks: formatError,GraphQLError,locatedError,syntaxError @@ -54,12 +54,14 @@ class GraphQLError extends Error { nodes?: Array, stack?: ?string, source?: Source, - positions?: Array + positions?: Array, + originalError?: ?Error, + extensions?: ?{ [key: string]: mixed } ) } ``` -GraphQLError ่กจ็คบ GraphQL ไบง็”Ÿ็š„้”™่ฏฏไฟกๆฏใ€‚ๅฎƒๅŒ…ๅซไธ€ไบ›็”จไบŽ่ฐƒ่ฏ•็š„ไฟกๆฏ๏ผŒๆฏ”ๅฆ‚ๆŸฅ่ฏข่ฏญๅฅไธญ้”™่ฏฏๅ‘็”Ÿ็š„ไฝ็ฝฎใ€‚ๆœ€ๅธธ่ง็š„้”™่ฏฏไฟกๆฏๅฐฑๆ˜ฏไธ‹้ข็š„็š„ `locatedError`ใ€‚ +GraphQLError ่กจ็คบ GraphQL ไบง็”Ÿ็š„้”™่ฏฏไฟกๆฏใ€‚ๅฎƒๅŒ…ๅซไธ€ไบ›็”จไบŽ่ฐƒ่ฏ•็š„ไฟกๆฏ๏ผŒๆฏ”ๅฆ‚ๆŸฅ่ฏข่ฏญๅฅไธญ้”™่ฏฏๅ‘็”Ÿ็š„ไฝ็ฝฎใ€‚ๆœ€ๅธธ่ง็š„้”™่ฏฏไฟกๆฏๅฐฑๆ˜ฏไธ‹้ข็š„ `locatedError`ใ€‚ ### syntaxError diff --git a/site/graphql-js/APIReference-Execution.md b/src/content/graphql-js/APIReference-Execution.md similarity index 94% rename from site/graphql-js/APIReference-Execution.md rename to src/content/graphql-js/APIReference-Execution.md index 2654905f58..f2459f1e4f 100644 --- a/site/graphql-js/APIReference-Execution.md +++ b/src/content/graphql-js/APIReference-Execution.md @@ -1,6 +1,6 @@ --- title: graphql/execution -layout: ../_core/GraphQLJSLayout +layout: docs category: API ๅ‚่€ƒ permalink: /graphql-js/execution/ sublinks: execute @@ -37,7 +37,9 @@ export function execute( contextValue?: mixed, variableValues?: ?{[key: string]: mixed}, operationName?: ?string -): Promise +): MaybePromise + +type MaybePromise = Promise | T; type ExecutionResult = { data: ?Object; diff --git a/site/graphql-js/APIReference-ExpressGraphQL.md b/src/content/graphql-js/APIReference-ExpressGraphQL.md similarity index 85% rename from site/graphql-js/APIReference-ExpressGraphQL.md rename to src/content/graphql-js/APIReference-ExpressGraphQL.md index 0f49cba4bf..312bb0ab53 100644 --- a/site/graphql-js/APIReference-ExpressGraphQL.md +++ b/src/content/graphql-js/APIReference-ExpressGraphQL.md @@ -1,6 +1,6 @@ --- title: express-graphql -layout: ../_core/GraphQLJSLayout +layout: docs category: API ๅ‚่€ƒ permalink: /graphql-js/express-graphql/ sublinks: graphqlHTTP @@ -10,8 +10,8 @@ next: /graphql-js/graphql/ `express-graphql` ๆจกๅ—ๆไพ›ไบ†ไธ€ไธชๅˆ›ๅปบ [Express](https://expressjs.com/) ๆœๅŠก็š„็ฎ€ๅ•ๆ–นๆณ•ๆฅ่ฟ่กŒ GraphQL APIใ€‚ ```js -import graphqlHTTP from 'express-graphql'; // ES6 -var graphqlHTTP = require('express-graphql'); // CommonJS +import { graphqlHTTP } from 'express-graphql'; // ES6 +var { graphqlHTTP } = require('express-graphql'); // CommonJS ``` ### graphqlHTTP diff --git a/site/graphql-js/APIReference-GraphQL.md b/src/content/graphql-js/APIReference-GraphQL.md similarity index 99% rename from site/graphql-js/APIReference-GraphQL.md rename to src/content/graphql-js/APIReference-GraphQL.md index bf80e4ac82..ee373e60e3 100644 --- a/site/graphql-js/APIReference-GraphQL.md +++ b/src/content/graphql-js/APIReference-GraphQL.md @@ -1,6 +1,6 @@ --- title: graphql -layout: ../_core/GraphQLJSLayout +layout: docs category: API ๅ‚่€ƒ permalink: /graphql-js/graphql/ sublinks: graphql diff --git a/site/graphql-js/APIReference-Language.md b/src/content/graphql-js/APIReference-Language.md similarity index 99% rename from site/graphql-js/APIReference-Language.md rename to src/content/graphql-js/APIReference-Language.md index 9fb77b5534..5e146ec70f 100644 --- a/site/graphql-js/APIReference-Language.md +++ b/src/content/graphql-js/APIReference-Language.md @@ -1,6 +1,6 @@ --- title: graphql/language -layout: ../_core/GraphQLJSLayout +layout: docs category: API ๅ‚่€ƒ permalink: /graphql-js/language/ sublinks: BREAK,getLocation,Kind,lex,parse,parseValue,printSource,visit diff --git a/site/graphql-js/APIReference-TypeSystem.md b/src/content/graphql-js/APIReference-TypeSystem.md similarity index 98% rename from site/graphql-js/APIReference-TypeSystem.md rename to src/content/graphql-js/APIReference-TypeSystem.md index 0291d80eb2..e9196ae6f7 100644 --- a/site/graphql-js/APIReference-TypeSystem.md +++ b/src/content/graphql-js/APIReference-TypeSystem.md @@ -1,6 +1,6 @@ --- title: graphql/type -layout: ../_core/GraphQLJSLayout +layout: docs category: API ๅ‚่€ƒ permalink: /graphql-js/type/ sublinks: getNamedType,getNullableType,GraphQLBoolean,GraphQLEnumType,GraphQLFloat,GraphQLID,GraphQLInputObjectType,GraphQLInt,GraphQLInterfaceType,GraphQLList,GraphQLNonNull,GraphQLObjectType,GraphQLScalarType,GraphQLSchema,GraphQLString,GraphQLUnionType,isAbstractType,isCompositeType,isInputType,isLeafType,isOutputType @@ -442,7 +442,7 @@ var RGBType = new GraphQLEnumType({ ```js class GraphQLInputObjectType { - constructor(config: GraphQLInputObjectTypeConfig) + constructor(config: GraphQLInputObjectConfig) } type GraphQLInputObjectConfig = { @@ -508,8 +508,8 @@ class GraphQLList { var PersonType = new GraphQLObjectType({ name: 'Person', fields: () => ({ - parents: { type: new GraphQLList(Person) }, - children: { type: new GraphQLList(Person) }, + parents: { type: new GraphQLList(PersonType) }, + children: { type: new GraphQLList(PersonType) }, }) }); ``` diff --git a/site/graphql-js/APIReference-Utilities.md b/src/content/graphql-js/APIReference-Utilities.md similarity index 99% rename from site/graphql-js/APIReference-Utilities.md rename to src/content/graphql-js/APIReference-Utilities.md index 73b0521aba..1470fc5b8c 100644 --- a/site/graphql-js/APIReference-Utilities.md +++ b/src/content/graphql-js/APIReference-Utilities.md @@ -1,6 +1,6 @@ --- title: graphql/utilities -layout: ../_core/GraphQLJSLayout +layout: docs category: API ๅ‚่€ƒ permalink: /graphql-js/utilities/ sublinks: astFromValue,buildASTSchema,buildClientSchema,buildSchema,introspectionQuery,isValidJSValue,isValidLiteralValue,printIntrospectionSchema,printSchema,typeFromAST,TypeInfo @@ -178,7 +178,7 @@ function typeFromAST( ```js function astFromValue( value: any, - type?: ?GraphQLType + type: GraphQLInputType ): ?Value ``` diff --git a/site/graphql-js/APIReference-Validation.md b/src/content/graphql-js/APIReference-Validation.md similarity index 98% rename from site/graphql-js/APIReference-Validation.md rename to src/content/graphql-js/APIReference-Validation.md index d559241892..2a983938f5 100644 --- a/site/graphql-js/APIReference-Validation.md +++ b/src/content/graphql-js/APIReference-Validation.md @@ -1,6 +1,6 @@ --- title: graphql/validation -layout: ../_core/GraphQLJSLayout +layout: docs category: API ๅ‚่€ƒ permalink: /graphql-js/validation/ sublinks: specifiedRules,validate diff --git a/site/graphql-js/Guides-ConstructingTypes.md b/src/content/graphql-js/Guides-ConstructingTypes.md similarity index 93% rename from site/graphql-js/Guides-ConstructingTypes.md rename to src/content/graphql-js/Guides-ConstructingTypes.md index f7f261979b..4f5ddbc17c 100644 --- a/site/graphql-js/Guides-ConstructingTypes.md +++ b/src/content/graphql-js/Guides-ConstructingTypes.md @@ -1,6 +1,6 @@ --- title: ๆž„ๅปบ็ฑปๅž‹ -layout: ../_core/GraphQLJSLayout +layout: docs category: ้ซ˜็บงๆŒ‡ๅ— permalink: /graphql-js/constructing-types/ next: /graphql-js/express-graphql/ @@ -14,7 +14,7 @@ next: /graphql-js/express-graphql/ ```javascript var express = require('express'); -var graphqlHTTP = require('express-graphql'); +var { graphqlHTTP } = require('express-graphql'); var { buildSchema } = require('graphql'); var schema = buildSchema(` @@ -41,7 +41,7 @@ var fakeDatabase = { }; var root = { - user: function ({id}) { + user: ({id}) => { return fakeDatabase[id]; } }; @@ -60,7 +60,7 @@ console.log('Running a GraphQL API server at localhost:4000/graphql'); ```javascript var express = require('express'); -var graphqlHTTP = require('express-graphql'); +var { graphqlHTTP } = require('express-graphql'); var graphql = require('graphql'); // Maps id to User object @@ -94,7 +94,7 @@ var queryType = new graphql.GraphQLObjectType({ args: { id: { type: graphql.GraphQLString } }, - resolve: function (_, {id}) { + resolve: (_, {id}) => { return fakeDatabase[id]; } } diff --git a/site/graphql-js/Tutorial-Authentication.md b/src/content/graphql-js/Tutorial-Authentication.md similarity index 94% rename from site/graphql-js/Tutorial-Authentication.md rename to src/content/graphql-js/Tutorial-Authentication.md index e787d08f82..a64acdd7cd 100644 --- a/site/graphql-js/Tutorial-Authentication.md +++ b/src/content/graphql-js/Tutorial-Authentication.md @@ -1,7 +1,7 @@ --- title: ่ฎค่ฏๅ’Œ Express ไธญ้—ดไปถ sidebarTitle: ่ฎค่ฏ & ไธญ้—ดไปถ -layout: ../_core/GraphQLJSLayout +layout: docs category: GraphQL.js ๆ•™็จ‹ permalink: /graphql-js/authentication-and-express-middleware/ next: /graphql-js/constructing-types/ @@ -15,7 +15,7 @@ Express ไธญ้—ดไปถๅฏไปฅๅพˆๆ–นไพฟๅœฐ็ป“ๅˆ `express-graphql` ไฝฟ็”จ๏ผŒ่ฟ™ไนŸๆ˜ฏ ```javascript var express = require('express'); -var graphqlHTTP = require('express-graphql'); +var { graphqlHTTP } = require('express-graphql'); var { buildSchema } = require('graphql'); var schema = buildSchema(` @@ -24,7 +24,7 @@ var schema = buildSchema(` } `); -function loggingMiddleware(req, res, next) { +const loggingMiddleware = (req, res, next) => { console.log('ip:', req.ip); next(); } diff --git a/site/graphql-js/Tutorial-BasicTypes.md b/src/content/graphql-js/Tutorial-BasicTypes.md similarity index 96% rename from site/graphql-js/Tutorial-BasicTypes.md rename to src/content/graphql-js/Tutorial-BasicTypes.md index 883d07c677..7ef24eff1d 100644 --- a/site/graphql-js/Tutorial-BasicTypes.md +++ b/src/content/graphql-js/Tutorial-BasicTypes.md @@ -1,6 +1,6 @@ --- title: ๅŸบๆœฌ็ฑปๅž‹ -layout: ../_core/GraphQLJSLayout +layout: docs category: GraphQL.js ๆ•™็จ‹ permalink: /graphql-js/basic-types/ next: /graphql-js/passing-arguments/ @@ -18,7 +18,7 @@ GraphQL schema language ๆ”ฏๆŒ็š„ๆ ‡้‡็ฑปๅž‹ๆœ‰ `String`ใ€`Int`ใ€`Float`ใ€`B ```javascript var express = require('express'); -var graphqlHTTP = require('express-graphql'); +var { graphqlHTTP } = require('express-graphql'); var { buildSchema } = require('graphql'); // ไฝฟ็”จ GraphQL schema language ๆž„ๅปบไธ€ไธช schema diff --git a/site/graphql-js/Tutorial-ExpressGraphQL.md b/src/content/graphql-js/Tutorial-ExpressGraphQL.md similarity index 93% rename from site/graphql-js/Tutorial-ExpressGraphQL.md rename to src/content/graphql-js/Tutorial-ExpressGraphQL.md index 9835f7b4f2..598e6d9dae 100644 --- a/site/graphql-js/Tutorial-ExpressGraphQL.md +++ b/src/content/graphql-js/Tutorial-ExpressGraphQL.md @@ -1,7 +1,7 @@ --- title: ่ฟ่กŒไธ€ไธช Express GraphQL ๆœๅŠกๅ™จ sidebarTitle: Express + GraphQL -layout: ../_core/GraphQLJSLayout +layout: docs category: GraphQL.js ๆ•™็จ‹ permalink: /graphql-js/running-an-express-graphql-server/ next: /graphql-js/graphql-clients/ @@ -17,7 +17,7 @@ npm install express express-graphql graphql --save ```javascript var express = require('express'); -var graphqlHTTP = require('express-graphql'); +var { graphqlHTTP } = require('express-graphql'); var { buildSchema } = require('graphql'); // ไฝฟ็”จ GraphQL Schema Language ๅˆ›ๅปบไธ€ไธช schema @@ -41,7 +41,7 @@ app.use('/graphql', graphqlHTTP({ graphiql: true, })); app.listen(4000); -console.log('Running a GraphQL API server at localhost:4000/graphql'); +console.log('Running a GraphQL API server at http://localhost:4000/graphql'); ``` ็”จไปฅไธ‹ๅ‘ฝไปคๅฏๅŠจ่ฏฅ GraphQL ๆœๅŠกๅ™จ๏ผš diff --git a/site/graphql-js/Tutorial-GettingStarted.md b/src/content/graphql-js/Tutorial-GettingStarted.md similarity index 95% rename from site/graphql-js/Tutorial-GettingStarted.md rename to src/content/graphql-js/Tutorial-GettingStarted.md index e301e53439..014f5440c8 100644 --- a/site/graphql-js/Tutorial-GettingStarted.md +++ b/src/content/graphql-js/Tutorial-GettingStarted.md @@ -1,7 +1,7 @@ --- title: GraphQL.js ๅ…ฅ้—จ sidebarTitle: ๅ…ฅ้—จ -layout: ../_core/GraphQLJSLayout +layout: docs category: GraphQL.js ๆ•™็จ‹ permalink: /graphql-js/ next: /graphql-js/running-an-express-graphql-server/ @@ -40,7 +40,7 @@ var root = { }; // ่ฟ่กŒ GraphQL query '{ hello }' ๏ผŒ่พ“ๅ‡บๅ“ๅบ” -graphql(schema, '{ hello }', root).then((response) => { +graphql({schema, source:'{ hello }', rootValue:root}).then((response) => { console.log(response); }); ``` diff --git a/site/graphql-js/Tutorial-GraphQLClients.md b/src/content/graphql-js/Tutorial-GraphQLClients.md similarity index 76% rename from site/graphql-js/Tutorial-GraphQLClients.md rename to src/content/graphql-js/Tutorial-GraphQLClients.md index d9f1b3e40e..62ea854fd9 100644 --- a/site/graphql-js/Tutorial-GraphQLClients.md +++ b/src/content/graphql-js/Tutorial-GraphQLClients.md @@ -1,6 +1,6 @@ --- title: GraphQL ๅฎขๆˆท็ซฏ -layout: ../_core/GraphQLJSLayout +layout: docs category: GraphQL.js ๆ•™็จ‹ permalink: /graphql-js/graphql-clients/ next: /graphql-js/basic-types/ @@ -23,18 +23,21 @@ http://localhost:4000/graphql {"data":{"hello":"Hello world!"}} ``` -้€š่ฟ‡ๆต่งˆๅ™จๅ‘้€ GraphQL ไนŸๅพˆ็ฎ€ๅ•ใ€‚ๆ‰“ๅผ€ http://localhost:4000 ๏ผŒๅผ€ๅฏๅผ€ๅ‘่€…ๆŽงๅˆถๅฐ๏ผŒ็ฒ˜่ดด๏ผš +ๅฆ‚ๆžœไฝ ๆ›ดๅ€พๅ‘ไบŽไฝฟ็”จๅ›พๅฝข็”จๆˆท็•Œ้ขๅ‘้€ๆต‹่ฏ•ๆŸฅ่ฏข๏ผŒไฝ ๅฏไปฅไฝฟ็”จๅฎขๆˆท็ซฏ๏ผŒไพ‹ๅฆ‚ [GraphiQL](https://github.com/graphql/graphiql) ๅ’Œ [Insomnia](https://github.com/getinsomnia/insomnia)ใ€‚ + +้€š่ฟ‡ๆต่งˆๅ™จๅ‘้€ GraphQL ไนŸๅพˆ็ฎ€ๅ•ใ€‚ๆ‰“ๅผ€ http://localhost:4000/graphql ๏ผŒๅผ€ๅฏๅผ€ๅ‘่€…ๆŽงๅˆถๅฐ๏ผŒ็ฒ˜่ดด๏ผš ```javascript -var xhr = new XMLHttpRequest(); -xhr.responseType = 'json'; -xhr.open("POST", "/graphql"); -xhr.setRequestHeader("Content-Type", "application/json"); -xhr.setRequestHeader("Accept", "application/json"); -xhr.onload = function () { - console.log('data returned:', xhr.response); -} -xhr.send(JSON.stringify({query: "{ hello }"})); +fetch('http://github.com/graphql', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'Accept': 'application/json', + }, + body: JSON.stringify({query: "{ hello }"}) +}) + .then(r => r.json()) + .then(data => console.log('data returned:', data)); ``` ไฝ ไผšๅœจๆŽงๅˆถๅฐไธญ่งๅˆฐ่ฟ”ๅ›ž็š„ๆ•ฐๆฎ๏ผš @@ -58,21 +61,23 @@ type Query { ```javascript var dice = 3; var sides = 6; -var xhr = new XMLHttpRequest(); -xhr.responseType = 'json'; -xhr.open("POST", "/graphql"); -xhr.setRequestHeader("Content-Type", "application/json"); -xhr.setRequestHeader("Accept", "application/json"); -xhr.onload = function () { - console.log('data returned:', xhr.response); -} var query = `query RollDice($dice: Int!, $sides: Int) { rollDice(numDice: $dice, numSides: $sides) }`; -xhr.send(JSON.stringify({ - query: query, - variables: { dice: dice, sides: sides }, -})); + +fetch('http://github.com/graphql', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'Accept': 'application/json', + }, + body: JSON.stringify({ + query, + variables: { dice, sides }, + }) +}) + .then(r => r.json()) + .then(data => console.log('data returned:', data)); ``` ่ฟ™็ง่ฏญๆณ•็š„ๅ˜้‡ๆœ‰ๅŠฉไบŽ่‡ชๅŠจ้ฟๅ…่ฝฌไน‰ bug๏ผŒไนŸๆ›ดๅฎนๆ˜“็›‘ๆŽงๆœๅŠกๅ™จใ€‚ diff --git a/site/graphql-js/Tutorial-Mutations.md b/src/content/graphql-js/Tutorial-Mutations.md similarity index 88% rename from site/graphql-js/Tutorial-Mutations.md rename to src/content/graphql-js/Tutorial-Mutations.md index c19449d1eb..afce5c2886 100644 --- a/site/graphql-js/Tutorial-Mutations.md +++ b/src/content/graphql-js/Tutorial-Mutations.md @@ -1,6 +1,6 @@ --- title: ๅ˜ๆ›ดๅ’Œ่พ“ๅ…ฅ็ฑปๅž‹ -layout: ../_core/GraphQLJSLayout +layout: docs category: GraphQL.js ๆ•™็จ‹ permalink: /graphql-js/mutations-and-input-types/ next: /graphql-js/authentication-and-express-middleware/ @@ -27,11 +27,11 @@ type Query { ```javascript var fakeDatabase = {}; var root = { - setMessage: function ({message}) { + setMessage: ({message}) => { fakeDatabase.message = message; return message; }, - getMessage: function () { + getMessage: () => { return fakeDatabase.message; } }; @@ -73,7 +73,7 @@ type Mutation { ```javascript var express = require('express'); -var graphqlHTTP = require('express-graphql'); +var { graphqlHTTP } = require('express-graphql'); var { buildSchema } = require('graphql'); // ไฝฟ็”จ GraphQL schema language ๆž„ๅปบ schema @@ -112,20 +112,20 @@ class Message { var fakeDatabase = {}; var root = { - getMessage: function ({id}) { + getMessage: ({id}) => { if (!fakeDatabase[id]) { throw new Error('no message exists with id ' + id); } return new Message(id, fakeDatabase[id]); }, - createMessage: function ({input}) { + createMessage: ({input}) => { // Create a random id for our "database". var id = require('crypto').randomBytes(10).toString('hex'); fakeDatabase[id] = input; return new Message(id, input); }, - updateMessage: function ({id, input}) { + updateMessage: ({id, input}) => { if (!fakeDatabase[id]) { throw new Error('no message exists with id ' + id); } @@ -165,28 +165,30 @@ mutation { ```javascript var author = 'andy'; var content = 'hope is a good thing'; -var xhr = new XMLHttpRequest(); -xhr.responseType = 'json'; -xhr.open("POST", "/graphql"); -xhr.setRequestHeader("Content-Type", "application/json"); -xhr.setRequestHeader("Accept", "application/json"); -xhr.onload = function () { - console.log('data returned:', xhr.response); -} var query = `mutation CreateMessage($input: MessageInput) { createMessage(input: $input) { id } }`; -xhr.send(JSON.stringify({ - query: query, - variables: { - input: { - author: author, - content: content, + +fetch('http://github.com/graphql', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'Accept': 'application/json', + }, + body: JSON.stringify({ + query, + variables: { + input: { + author, + content, + } } - } -})); + }) +}) + .then(r => r.json()) + .then(data => console.log('data returned:', data)); ``` ไธ€ไธชๅๅˆ†็‰นๆฎŠ็š„ๅ˜ๆ›ด็ฑปๅž‹ๆ˜ฏโ€œๆ”นๅ˜็”จๆˆทโ€๏ผŒ่ญฌๅฆ‚ๆณจๅ†Œๆ–ฐ็”จๆˆทใ€‚้™คไบ†ไฝฟ็”จ GraphQL ๅ˜ๆ›ดๆฅๅฎž็Žฐ่ฟ™ไธชๅŠŸ่ƒฝไน‹ๅค–๏ผŒๅœจๅญฆๅฎŒ [GraphQL ่ฎค่ฏๅ’Œ Express ไธญ้—ดไปถ](/graphql-js/authentication-and-express-middleware/) ไน‹ๅŽไฝ ่ฟ˜่ƒฝไฝฟ็”จ็Žฐๆœ‰ๅบ“ๆฅๅฎž็Žฐใ€‚ diff --git a/site/graphql-js/Tutorial-ObjectTypes.md b/src/content/graphql-js/Tutorial-ObjectTypes.md similarity index 96% rename from site/graphql-js/Tutorial-ObjectTypes.md rename to src/content/graphql-js/Tutorial-ObjectTypes.md index 002cb7be19..fce5a0275d 100644 --- a/site/graphql-js/Tutorial-ObjectTypes.md +++ b/src/content/graphql-js/Tutorial-ObjectTypes.md @@ -1,6 +1,6 @@ --- title: ๅฏน่ฑก็ฑปๅž‹ -layout: ../_core/GraphQLJSLayout +layout: docs category: GraphQL.js ๆ•™็จ‹ permalink: /graphql-js/object-types/ next: /graphql-js/mutations-and-input-types/ @@ -50,7 +50,7 @@ class RandomDie { } var root = { - getDie: function ({numSides}) { + getDie: ({numSides}) => { return new RandomDie(numSides || 6); } } @@ -74,7 +74,7 @@ type Query { ```javascript var express = require('express'); -var graphqlHTTP = require('express-graphql'); +var { graphqlHTTP } = require('express-graphql'); var { buildSchema } = require('graphql'); // ็”จ GraphQL schema language ๆž„้€ ไธ€ไธช schema @@ -111,7 +111,7 @@ class RandomDie { // root ่ง„ๅฎšไบ†้กถๅฑ‚็š„ API ๅ…ฅๅฃ็ซฏ็‚น var root = { - getDie: function ({numSides}) { + getDie: ({numSides}) => { return new RandomDie(numSides || 6); } } diff --git a/site/graphql-js/Tutorial-PassingArguments.md b/src/content/graphql-js/Tutorial-PassingArguments.md similarity index 83% rename from site/graphql-js/Tutorial-PassingArguments.md rename to src/content/graphql-js/Tutorial-PassingArguments.md index 54a463ce74..e2572efaa5 100644 --- a/site/graphql-js/Tutorial-PassingArguments.md +++ b/src/content/graphql-js/Tutorial-PassingArguments.md @@ -1,12 +1,12 @@ --- title: ไผ ้€’ๅ‚ๆ•ฐ -layout: ../_core/GraphQLJSLayout +layout: docs category: GraphQL.js ๆ•™็จ‹ permalink: /graphql-js/passing-arguments/ next: /graphql-js/object-types/ --- -ๅฐฑๅƒ REST API ไธ€ๆ ท๏ผŒๅœจ GraphQL API ไธญ๏ผŒ้€šๅธธๅ‘ๅ…ฅๅฃ็ซฏ็‚นไผ ๅ…ฅๅ‚ๆ•ฐ๏ผŒๅœจ schema language ไธญๅฎšไน‰ๅ‚ๆ•ฐ๏ผŒๅนถ่‡ชๅŠจ่ฟ›่กŒ็ฑปๅž‹ๆฃ€ๆŸฅใ€‚ๆฏไธ€ไธชๅ‚ๆ•ฐๅฟ…้กปๆœ‰ๅๅญ—ๅ’Œๆ•ฐๆฎ็ฑปๅž‹ใ€‚ไธพไธชไพ‹ๅญ๏ผŒๅœจ [ๅŸบ็ก€็ฑปๅž‹ๆ–‡ๆกฃ](/graphql-js/basic-types/) ไธญ๏ผŒๆˆ‘ไปฌๅฎšไน‰ไบ†ไธ€ไธชๅไธบ `rollThreeDice` ็š„ๅ…ฅๅฃ็ซฏ็‚น๏ผš +ๅฐฑๅƒ REST API ไธ€ๆ ท๏ผŒๅœจ GraphQL API ไธญ๏ผŒ้€šๅธธๅ‘ๅ…ฅๅฃ็ซฏ็‚นไผ ๅ…ฅๅ‚ๆ•ฐ๏ผŒๅœจ schema language ไธญๅฎšไน‰ๅ‚ๆ•ฐ๏ผŒๅนถ่‡ชๅŠจ่ฟ›่กŒ็ฑปๅž‹ๆฃ€ๆŸฅใ€‚ๆฏไธ€ไธชๅ‚ๆ•ฐๅฟ…้กปๆœ‰ๅๅญ—ๅ’Œๆ•ฐๆฎ็ฑปๅž‹ใ€‚ไธพไธชไพ‹ๅญ๏ผŒๅœจ [ๅŸบๆœฌ็ฑปๅž‹ๆ–‡ๆกฃ](/graphql-js/basic-types/) ไธญ๏ผŒๆˆ‘ไปฌๅฎšไน‰ไบ†ไธ€ไธชๅไธบ `rollThreeDice` ็š„ๅ…ฅๅฃ็ซฏ็‚น๏ผš ```javascript type Query { @@ -28,7 +28,7 @@ type Query { ```javascript var root = { - rollDice: function (args) { + rollDice: (args) => { var output = []; for (var i = 0; i < args.numDice; i++) { output.push(1 + Math.floor(Math.random() * (args.numSides || 6))); @@ -42,7 +42,7 @@ var root = { ```javascript var root = { - rollDice: function ({numDice, numSides}) { + rollDice: ({numDice, numSides}) => { var output = []; for (var i = 0; i < numDice; i++) { output.push(1 + Math.floor(Math.random() * (numSides || 6))); @@ -58,7 +58,7 @@ var root = { ```javascript var express = require('express'); -var graphqlHTTP = require('express-graphql'); +var { graphqlHTTP } = require('express-graphql'); var { buildSchema } = require('graphql'); // ไฝฟ็”จ GraphQL schema language ๆž„้€ ไธ€ไธช schema @@ -70,7 +70,7 @@ var schema = buildSchema(` // root ไธบๆฏไธช็ซฏ็‚นๅ…ฅๅฃ API ๆไพ›ไธ€ไธช่งฃๆžๅ™จ var root = { - rollDice: function ({numDice, numSides}) { + rollDice: ({numDice, numSides}) => { var output = []; for (var i = 0; i < numDice; i++) { output.push(1 + Math.floor(Math.random() * (numSides || 6))); @@ -106,23 +106,25 @@ console.log('Running a GraphQL API server at localhost:4000/graphql'); ```javascript var dice = 3; var sides = 6; -var xhr = new XMLHttpRequest(); -xhr.responseType = 'json'; -xhr.open("POST", "/graphql"); -xhr.setRequestHeader("Content-Type", "application/json"); -xhr.setRequestHeader("Accept", "application/json"); -xhr.onload = function () { - console.log('data returned:', xhr.response); -} var query = `query RollDice($dice: Int!, $sides: Int) { rollDice(numDice: $dice, numSides: $sides) }`; -xhr.send(JSON.stringify({ - query: query, - variables: { dice: dice, sides: sides }, -})); + +fetch('http://github.com/graphql', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'Accept': 'application/json', + }, + body: JSON.stringify({ + query, + variables: { dice, sides }, + }) +}) + .then(r => r.json()) + .then(data => console.log('data returned:', data)); ``` ไฝฟ็”จ `$dice` ๅ’Œ `$sides` ไฝœไธบ GraphQL ไธญ็š„ๅ˜้‡๏ผŒๆˆ‘ไปฌๆ— ้œ€ๅœจๅฎขๆˆท็ซฏๅฏนๅฎƒไปฌ่ฟ›่กŒ่ฝฌไน‰ใ€‚ -้€š่ฟ‡ๅŸบ็ก€็ฑปๅž‹ๅ’Œๅ‚ๆ•ฐไผ ้€’๏ผŒไฝ ๅฏไปฅๅฎšไน‰ไปปๆ„ไฝ "่ƒฝๅคŸ"ๅœจ REST API ไธญๅฎšไน‰็š„ๅ†…ๅฎนใ€‚ไฝ† GraphQL ๆ”ฏๆŒๆ›ดๅผบๅคง็š„ๆŸฅ่ฏขใ€‚ๅฆ‚ๆžœไฝ ๅญฆไน ไบ† [ๅฎšไน‰ไฝ ่‡ชๅทฑ็š„ๅฏน่ฑก็ฑปๅž‹](/graphql-js/object-types/)๏ผŒไฝ ๅฏไปฅ็”จๅ•ไธช API ่ฐƒ็”จๆฅไปฃๆ›ฟๅคšไธช API ่ฐƒ็”จใ€‚ \ No newline at end of file +้€š่ฟ‡ๅŸบๆœฌ็ฑปๅž‹ๅ’Œๅ‚ๆ•ฐไผ ้€’๏ผŒไฝ ๅฏไปฅๅฎšไน‰ไปปๆ„ไฝ "่ƒฝๅคŸ"ๅœจ REST API ไธญๅฎšไน‰็š„ๅ†…ๅฎนใ€‚ไฝ† GraphQL ๆ”ฏๆŒๆ›ดๅผบๅคง็š„ๆŸฅ่ฏขใ€‚ๅฆ‚ๆžœไฝ ๅญฆไน ไบ† [ๅฎšไน‰ไฝ ่‡ชๅทฑ็š„ๅฏน่ฑก็ฑปๅž‹](/graphql-js/object-types/)๏ผŒไฝ ๅฏไปฅ็”จๅ•ไธช API ่ฐƒ็”จๆฅไปฃๆ›ฟๅคšไธช API ่ฐƒ็”จใ€‚ diff --git a/site/learn/BestPractice-Authorization.md b/src/content/learn/BestPractice-Authorization.md similarity index 99% rename from site/learn/BestPractice-Authorization.md rename to src/content/learn/BestPractice-Authorization.md index 13ed4c94cf..9211caa22b 100644 --- a/site/learn/BestPractice-Authorization.md +++ b/src/content/learn/BestPractice-Authorization.md @@ -1,6 +1,6 @@ --- title: ๆŽˆๆƒ -layout: ../_core/DocsLayout +layout: docs category: ๆœ€ไฝณๅฎž่ทต permalink: /learn/authorization/ next: /learn/pagination/ diff --git a/site/learn/BestPractice-Caching.md b/src/content/learn/BestPractice-Caching.md similarity index 95% rename from site/learn/BestPractice-Caching.md rename to src/content/learn/BestPractice-Caching.md index 5260717e29..c3f8615888 100644 --- a/site/learn/BestPractice-Caching.md +++ b/src/content/learn/BestPractice-Caching.md @@ -1,6 +1,6 @@ --- title: ็ผ“ๅญ˜ -layout: ../_core/DocsLayout +layout: docs category: ๆœ€ไฝณๅฎž่ทต permalink: /learn/caching/ --- @@ -35,6 +35,8 @@ permalink: /learn/caching/ ๅฆ‚ๆžœๅŽ็ซฏไฝฟ็”จ็ฑปไผผ UUID ็š„ๆ ‡่ฏ†็ฌฆ๏ผŒ้‚ฃไนˆๆšด้œฒ่ฟ™ไธชๅ…จๅฑ€ๅ”ฏไธ€ ID ๅฏ่ƒฝ้žๅธธ็ฎ€ๅ•๏ผๅฆ‚ๆžœๅŽ็ซฏๅฏนไบŽๆฏไธชๅฏน่ฑกๅนถๆœชๅˆ†้…ๅ…จๅฑ€ๅ”ฏไธ€ ID๏ผŒๅˆ™ GraphQL ๅฑ‚ๅฏ่ƒฝ้œ€่ฆๆž„้€ ๆญค IDใ€‚้€šๅธธๆฅ่ฏด๏ผŒๅฐ†็ฑปๅž‹็š„ๅ็งฐ้™„ๅŠ ๅˆฐ ID ๅนถๅฐ†ๅ…ถ็”จไฝœๆ ‡่ฏ†็ฌฆ้ƒฝๅพˆ็ฎ€ๅ•๏ผ›ๆœๅŠกๅ™จๅฏ่ƒฝไผš้€š่ฟ‡ base64 ็ผ–็ ไฝฟ่ฏฅ ID ไธ้€ๆ˜Žใ€‚ +ๅฏ้€‰ๅœฐ๏ผŒๆญค ID ไน‹ๅŽๅฏไปฅๅ’Œ [ๅ…จๅฑ€ๅฏน่ฑกๆ ‡่ฏ†](/learn/global-object-identification) ็š„ `node` ๆจกๅผไธ€่ตทไฝฟ็”จใ€‚ + ## ไธŽ็Žฐๆœ‰ API ็š„ๅ…ผๅฎน ไธบไบ†่ฟ™ไธ€็›ฎ็š„่€Œไฝฟ็”จ `id` ๅญ—ๆฎต็š„ไธ€ไธช้—ฎ้ข˜ๆ˜ฏๅฆ‚ไฝ•่ฎฉไฝฟ็”จ GraphQL API ็š„ๅฎขๆˆท็ซฏ่ƒฝๅคŸไธŽ็Žฐๆœ‰็š„ API ๅนถๅญ˜ใ€‚ไพ‹ๅฆ‚๏ผŒๅฆ‚ๆžœๆˆ‘ไปฌ็Žฐๆœ‰็š„ API ๆŽฅๅ—ไบ†็‰นๅฎš็ฑปๅž‹็š„ ID๏ผŒไฝ†ๆ˜ฏๆˆ‘ไปฌ็š„ GraphQL API ไฝฟ็”จไบ†ๅ…จๅฑ€ๅ”ฏไธ€ ID๏ผŒ้‚ฃไนˆๅŒๆ—ถไฝฟ็”จไธค่€…ๅฏ่ƒฝๆฏ”่พƒๆฃ˜ๆ‰‹ใ€‚ diff --git a/site/learn/BestPractice-Introduction.md b/src/content/learn/BestPractice-Introduction.md similarity index 92% rename from site/learn/BestPractice-Introduction.md rename to src/content/learn/BestPractice-Introduction.md index 1782689c6f..12713faf46 100644 --- a/site/learn/BestPractice-Introduction.md +++ b/src/content/learn/BestPractice-Introduction.md @@ -1,7 +1,7 @@ --- title: GraphQL ๆœ€ไฝณๅฎž่ทต sidebarTitle: ไป‹็ป -layout: ../_core/DocsLayout +layout: docs category: ๆœ€ไฝณๅฎž่ทต permalink: /learn/best-practices/ next: /learn/thinking-in-graphs/ @@ -16,14 +16,14 @@ GraphQL ่ง„่Œƒ็‰นๆ„ๅฟฝ็•ฅไบ†ไธ€ไบ›้ขๅ‘ API ็š„้‡่ฆ้—ฎ้ข˜๏ผŒไพ‹ๅฆ‚ๅค„็†็ฝ‘ ### HTTP -GraphQL ้€šๅธธ้€š่ฟ‡ๅ•ๅ…ฅๅฃๆฅๆไพ› HTTP ๆœๅŠก็š„ๅฎŒๆ•ดๅŠŸ่ƒฝ๏ผŒ่ฟ™ไธ€ๅฎž็Žฐๆ–นๅผไธŽๆšด้œฒไธ€็ป„ URL ไธ”ๆฏไธช URL ๅชๆšด้œฒไธ€ไธช่ต„ๆบ็š„ REST API ไธๅŒใ€‚่™ฝ็„ถ GraphQL ไนŸๅฏไปฅๆšด้œฒๅคšไธช่ต„ๆบ URL ๆฅไฝฟ็”จ๏ผŒไฝ†่ฟ™ๅฏ่ƒฝๅฏผ่‡ดๆ‚จๅœจไฝฟ็”จ GraphiQL ็ญ‰ๅทฅๅ…ทๆ—ถ้‡ๅˆฐๅ›ฐ้šพใ€‚ +GraphQL ้€šๅธธ้€š่ฟ‡ๅ•ๅ…ฅๅฃๆฅๆไพ› HTTP ๆœๅŠก็š„ๅฎŒๆ•ดๅŠŸ่ƒฝ๏ผŒ่ฟ™ไธ€ๅฎž็Žฐๆ–นๅผไธŽๆšด้œฒไธ€็ป„ URL ไธ”ๆฏไธช URL ๅชๆšด้œฒไธ€ไธช่ต„ๆบ็š„ REST API ไธๅŒใ€‚่™ฝ็„ถ GraphQL ไนŸๅฏไปฅๆšด้œฒๅคšไธช่ต„ๆบ URL ๆฅไฝฟ็”จ๏ผŒไฝ†่ฟ™ๅฏ่ƒฝๅฏผ่‡ดๆ‚จๅœจไฝฟ็”จ [GraphiQL](https://github.com/graphql/graphiql) ็ญ‰ๅทฅๅ…ทๆ—ถ้‡ๅˆฐๅ›ฐ้šพใ€‚ ไบ†่งฃๆ›ดๅคš๏ผš[ๆไพ› HTTP ๆœๅŠก](/learn/serving-over-http/)ใ€‚ ### JSON๏ผˆไฝฟ็”จ GZIP ๅŽ‹็ผฉ๏ผ‰ -GraphQL ๆœๅŠก้€šๅธธ่ฟ”ๅ›ž JSON ๆ ผๅผ็š„ๆ•ฐๆฎ๏ผŒไฝ† GraphQL ่ง„่Œƒ [ๅนถๆœช่ฆๆฑ‚่ฟ™ไธ€็‚น](http://spec.graphql.cn/#sec-Serialization-Format-)ใ€‚ๅฏนไบŽๆœŸๆœ›ๆ›ดๅฅฝ็š„็ฝ‘็ปœๆ€ง่ƒฝ็š„ API ๅฑ‚ๆฅ่ฏด๏ผŒไฝฟ็”จ JSON ไผผไนŽๆ˜ฏไธ€ไธชๅฅ‡ๆ€ช็š„้€‰ๆ‹ฉ๏ผŒไฝ†็”ฑไบŽๅฎƒไธป่ฆๆ˜ฏๆ–‡ๆœฌ๏ผŒๅ› ่€Œๅœจ GZIP ๅŽ‹็ผฉๅŽ่กจ็Žฐ้žๅธธๅฅฝใ€‚ +GraphQL ๆœๅŠก้€šๅธธ่ฟ”ๅ›ž JSON ๆ ผๅผ็š„ๆ•ฐๆฎ๏ผŒไฝ† GraphQL ่ง„่Œƒ [ๅนถๆœช่ฆๆฑ‚่ฟ™ไธ€็‚น](http://spec.graphql.org/draft/#sec-Serialization-Format)ใ€‚ๅฏนไบŽๆœŸๆœ›ๆ›ดๅฅฝ็š„็ฝ‘็ปœๆ€ง่ƒฝ็š„ API ๅฑ‚ๆฅ่ฏด๏ผŒไฝฟ็”จ JSON ไผผไนŽๆ˜ฏไธ€ไธชๅฅ‡ๆ€ช็š„้€‰ๆ‹ฉ๏ผŒไฝ†็”ฑไบŽๅฎƒไธป่ฆๆ˜ฏๆ–‡ๆœฌ๏ผŒๅ› ่€Œๅœจ GZIP ๅŽ‹็ผฉๅŽ่กจ็Žฐ้žๅธธๅฅฝใ€‚ ๆŽจ่ไปปไฝ•ๅœจ็”Ÿไบง็Žฏๅขƒไธ‹็š„ GraphQL ๆœๅŠก้ƒฝๅฏ็”จ GZIP๏ผŒๅนถๆŽจ่ๅœจๅฎขๆˆท็ซฏ่ฏทๆฑ‚ๅคดไธญๅŠ ๅ…ฅ๏ผš diff --git a/src/content/learn/BestPractice-NodeInterface.md b/src/content/learn/BestPractice-NodeInterface.md new file mode 100644 index 0000000000..62a3c288f0 --- /dev/null +++ b/src/content/learn/BestPractice-NodeInterface.md @@ -0,0 +1,314 @@ +--- +title: ๅ…จๅฑ€ๅฏน่ฑก่ฏ†ๅˆซ +layout: docs +category: ๆœ€ไฝณๅฎž่ทต +permalink: /learn/global-object-identification/ +next: /learn/caching/ +--- + +> ไธ€่‡ด็š„ๅฏน่ฑก่ฎฟ้—ฎๅฎž็Žฐไบ†็ฎ€ๅ•็š„็ผ“ๅญ˜ๅ’Œๅฏน่ฑกๆŸฅๆ‰พ + +ไธบไบ†ๆไพ›็ป™ GraphQL ๅฎขๆˆท็ซฏ้€‰้กนไปฅไผ˜้›…ๅœฐๅค„็†็ผ“ๅญ˜ๅ’Œๆ•ฐๆฎ้‡ๆ–ฐ่Žทๅ–๏ผŒGraphQL ๆœๅŠก็ซฏ้œ€่ฆไปฅๆ ‡ๅ‡†ๅŒ–็š„ๆ–นๅผๅ…ฌๅผ€ๅฏน่ฑกๆ ‡่ฏ†็ฌฆใ€‚ + +ไธบๆญคๅฎขๆˆท็ซฏ้œ€่ฆ้€š่ฟ‡ไปฅ ID ่ฏทๆฑ‚ๅฏน่ฑก็š„ๆ ‡ๅ‡†ๆœบๅˆถ่ฟ›่กŒๆŸฅ่ฏขใ€‚็„ถๅŽๅœจๅ“ๅบ”ไธญ๏ผŒschema ๅฐ†้œ€่ฆๆไพ›ไธ€็งๆไพ›่ฟ™ไบ› ID ็š„ๆ ‡ๅ‡†ๆ–นๅผใ€‚ + +ๅ› ไธบ้™คไบ† ID ไน‹ๅค–๏ผŒๅฏนๅฏน่ฑก็Ÿฅไน‹็”šๅฐ‘๏ผŒๆ‰€ไปฅๆˆ‘ไปฌ็งฐๅฎƒไปฌไธบๅฏน่ฑกโ€œ่Š‚็‚นโ€ใ€‚่ฟ™ๆ˜ฏไธ€ไธชๆŸฅ่ฏข่Š‚็‚น็š„็คบไพ‹๏ผš + +```graphql +{ + node(id: "4") { + id + ... on User { + name + } + } +``` + +- GraphQL schema ็š„ๆ ผๅผๅ…่ฎธ้€š่ฟ‡ๆ นๆŸฅ่ฏขๅฏน่ฑกไธŠ็š„ `node` ๅญ—ๆฎต่Žทๅ–ไปปไฝ•ๅฏน่ฑกใ€‚่ฟ”ๅ›ž็š„ๅฏน่ฑก็ฌฆๅˆ โ€œNodeโ€ [ๆŽฅๅฃ](/learn/schema/#interfaces)ใ€‚ +- ๅฏไปฅๅฎ‰ๅ…จๅœฐไปŽๅ“ๅบ”ไธญๆๅ–ๅ‡บ `id` ๅญ—ๆฎต๏ผŒๅนถๅฏไปฅ้€š่ฟ‡็ผ“ๅญ˜ๅ’Œ้‡ๆ–ฐ่Žทๅ–ๅฐ†ๅ…ถๅญ˜ๅ‚จไปฅไพ›้‡็”จใ€‚ +- ๅฎขๆˆท็ซฏๅฏไปฅไฝฟ็”จๆŽฅๅฃ็‰‡ๆฎตๆฅๆๅ–็‰นๅฎšไบŽ็ฑปๅž‹็š„ใ€็ฌฆๅˆ่Š‚็‚นๆŽฅๅฃ็š„ๅ…ถไป–ไฟกๆฏใ€‚ๅœจๆœฌ็คบไพ‹ไธญไธบ โ€œUserโ€ใ€‚ + +Node ๆŽฅๅฃๅฆ‚ไธ‹๏ผš + +```graphql +# ๅ…ทๆœ‰ๅ…จๅฑ€ๅ”ฏไธ€ ID ็š„ๅฏน่ฑก +interface Node { + # ๅฏน่ฑก็š„ ID + id: ID! +} +``` + +User ้€š่ฟ‡ไปฅไธ‹ๆ–นๅผ็ฌฆๅˆๆŽฅๅฃ๏ผš + +```graphql +type User implements Node { + id: ID! + # ๅ…จๅ + name: String! +} +``` + +# ่ง„่Œƒ + +ไธ‹้ข็š„ๆ‰€ๆœ‰ๅ†…ๅฎนไปฅๆ›ดๅŠ ๆญฃๅผ็š„่ฆๆฑ‚ๆ่ฟฐไบ†ๅ›ด็ป•ๅฏน่ฑกๆ ‡่ฏ†็š„่ง„่Œƒ๏ผŒไปฅ็กฎไฟๅœจๆœๅŠก็ซฏๅฎž็Žฐไน‹้—ด็š„ไธ€่‡ดๆ€งใ€‚ +่ฟ™ไบ›่ง„่Œƒๆ˜ฏๅŸบไบŽๆœๅŠก็ซฏๅฆ‚ไฝ•ไธŽ [Relay][relay] API ๅฎขๆˆท็ซฏๅ…ผๅฎนๆฅๅ†™็š„๏ผŒไฝ†ๆ˜ฏๅฏนไปปไฝ•ๅฎขๆˆท็ซฏ้ƒฝๆœ‰็”จใ€‚ + +# ไฟ็•™็ฑปๅž‹ + +ไธŽๆญค่ง„่Œƒๅ…ผๅฎน็š„ GraphQL ๆœๅŠก็ซฏๅฟ…้กปไฟ็•™ๆŸไบ›็ฑปๅž‹ๅ’Œ็ฑปๅž‹ๅ็งฐ๏ผŒไปฅๆ”ฏๆŒไธ€่‡ด็š„ๅฏน่ฑกๆ ‡่ฏ†ๆจกๅž‹ใ€‚็‰นๅˆซๅœฐ๏ผŒๆญค่ง„่Œƒไธบไปฅไธ‹็ฑปๅž‹ๅˆ›ๅปบไบ†ๅ‡†ๅˆ™๏ผš + + - ไธ€ไธชๅไธบ `Node` ็š„ๆŽฅๅฃใ€‚ + - ๆ นๆŸฅ่ฏข็ฑปๅž‹ไธŠ็š„ `node` ๅญ—ๆฎตใ€‚ + +# Node ๆŽฅๅฃ + +ๆœๅŠก็ซฏๅฟ…้กปๆไพ›ไธ€ไธชๅไธบ `Node` ็š„ๆŽฅๅฃใ€‚่ฏฅๆŽฅๅฃๅฟ…้กปๆœ‰ไธ”ไป…ๆœ‰ไธ€ไธชๅไธบ `id` ็š„ๅญ—ๆฎต๏ผŒ่ฏฅๅญ—ๆฎต่ฟ”ๅ›ž้ž็ฉบ็š„ `ID`ใ€‚ + +่ฟ™ไธช `id` ๅบ”ๅฝ“ๆ˜ฏ่ฏฅๅฏน่ฑก็š„ๅ…จๅฑ€ๅ”ฏไธ€ๆ ‡่ฏ†็ฌฆ๏ผŒๅนถไธ”ๅช่ฆ็ป™ๅ‡บ่ฟ™ไธช `id`๏ผŒๆœๅŠก็ซฏๅฐฑๅบ”่ฏฅ่ƒฝๅคŸ้‡ๆ–ฐ่Žทๅ–่ฏฅๅฏน่ฑกใ€‚ + +## ๅ†…็œ + +ๆญฃ็กฎๅฎž็ŽฐไธŠ่ฟฐๆŽฅๅฃ็š„ๆœๅŠก็ซฏๅฐ†ๆŽฅๅ—ๅฆ‚ไธ‹็š„ๅ†…็œๆŸฅ่ฏข๏ผŒๅนถ่ฟ”ๅ›žๆไพ›็š„ๅ“ๅบ”๏ผš + +```graphql +{ + __type(name: "Node") { + name + kind + fields { + name + type { + kind + ofType { + name + kind + } + } + } + } +} +``` + +่ฟ”ๅ›ž + +```json +{ + "__type": { + "name": "Node", + "kind": "INTERFACE", + "fields": [ + { + "name": "id", + "type": { + "kind": "NON_NULL", + "ofType": { + "name": "ID", + "kind": "SCALAR" + } + } + } + ] + } +} +``` + +# Node ๆ นๅญ—ๆฎต + +ๆœๅŠก็ซฏๅฟ…้กปๆไพ›ไธ€ไธชๅไธบ `node`๏ผŒไธ”่ฟ”ๅ›ž `Node` ๆŽฅๅฃ็š„ๆ นๅญ—ๆฎตใ€‚่ฏฅๆ นๅญ—ๆฎตๅฟ…้กปๆœ‰ไธ”ไป…ๆœ‰ไธ€ไธชๅ‚ๆ•ฐ๏ผŒๅณๅไธบ `id` ็š„้ž็ฉบIDใ€‚ + +ๅฆ‚ๆžœไธ€ไธชๆŸฅ่ฏข่ฟ”ๅ›ž็š„ๅฏน่ฑกๅฎž็Žฐไบ† `Node`๏ผŒ้‚ฃไนˆๅฝ“ๆœๅŠก็ซฏๅœจ `Node` ็š„ `id` ๅญ—ๆฎตไธญ่ฟ”ๅ›ž็š„ๅ€ผไฝœไธบ `id` ๅ‚ๆ•ฐไผ ้€’็ป™ `node` ็š„ๆ นๅญ—ๆฎตๆ—ถ๏ผŒ่ฏฅๆ นๅญ—ๆฎตๅบ”่ฏฅ้‡ๆ–ฐ่Žทๅ–็›ธๅŒ็š„ๅฏน่ฑกใ€‚ + +ๆœๅŠก็ซฏๅฟ…้กปๅฐฝๆœ€ๅคงๅŠชๅŠ›ๆฅ่Žทๅ–ๆญคๆ•ฐๆฎ๏ผŒไฝ†ๅนถ้žๆ€ป่ƒฝๆˆๅŠŸใ€‚ไพ‹ๅฆ‚๏ผŒๆœๅŠก็ซฏๅฏ่ƒฝไผš่ฟ”ๅ›žไธ€ไธชๅธฆๆœ‰ๆœ‰ๆ•ˆ `id` ็š„ `User`๏ผŒไฝ†ๆ˜ฏๅฝ“ๅ‘ๅ‡บไฝฟ็”จ `node` ๆ นๅญ—ๆฎต้‡ๆ–ฐ่Žทๅ–่ฏฅ็”จๆˆท็š„่ฏทๆฑ‚ๆ—ถ๏ผŒ่ฏฅ็”จๆˆท็š„ๆ•ฐๆฎๅบ“ๅฏ่ƒฝไธๅฏ็”จ๏ผŒๆˆ–่€…่ฏฅ็”จๆˆทๅฏ่ƒฝๅทฒๅˆ ้™คไบ†ไป–็š„ +ๅธๆˆทใ€‚ๅœจ่ฟ™็งๆƒ…ๅ†ตไธ‹๏ผŒๆŸฅ่ฏข่ฏฅๅญ—ๆฎต็š„็ป“ๆžœๅบ”ไธบ `null`ใ€‚ + +## ๅ†…็œ + +ๆญฃ็กฎๅฎž็ŽฐไธŠ่ฟฐ้œ€ๆฑ‚็š„ๆœๅŠก็ซฏๅฐ†ๆŽฅๅ—ๅฆ‚ไธ‹็š„ๅ†…็œๆŸฅ่ฏข๏ผŒๅนถ่ฟ”ๅ›žๅŒ…ๅซๆ‰€ๆไพ›ๅ“ๅบ”็š„ๅ“ๅบ”๏ผš + +```graphql +{ + __schema { + queryType { + fields { + name + type { + name + kind + } + args { + name + type { + kind + ofType { + name + kind + } + } + } + } + } + } +} +``` + +่ฟ”ๅ›ž + +```json +{ + "__schema": { + "queryType": { + "fields": [ + // ่ฏฅๆ•ฐ็ป„ๅฏ่ƒฝ่ฟ˜ๆœ‰ๅ…ถไป–ๆก็›ฎ + { + "name": "node", + "type": { + "name": "Node", + "kind": "INTERFACE" + }, + "args": [ + { + "name": "id", + "type": { + "kind": "NON_NULL", + "ofType": { + "name": "ID", + "kind": "SCALAR" + } + } + } + ] + } + ] + } + } +} +``` + +# ๅญ—ๆฎต็จณๅฎšๆ€ง + +ๅฆ‚ๆžœไธ€ไธชๆŸฅ่ฏขไธญๅ‡บ็Žฐไธคไธชๅฏน่ฑก๏ผŒๅนถไธ”้ƒฝไฝฟ็”จ็›ธๅŒ็š„IDๆฅๅฎž็Žฐ `Node`๏ผŒๅˆ™่ฟ™ไธคไธชๅฏน่ฑกๅฟ…้กป็›ธ็ญ‰ใ€‚ + +ๅ‡บไบŽๆญคๅฎšไน‰็š„็›ฎ็š„๏ผŒๅฏน่ฑก็›ธ็ญ‰ๆ€งๅฎšไน‰ๅฆ‚ไธ‹๏ผš +ย  + - ๅฆ‚ๆžœๅœจไธคไธชๅฏน่ฑกไธŠ้ƒฝๆŸฅ่ฏขไบ†ไธ€ไธชๅญ—ๆฎต๏ผŒๅˆ™ๅœจ็ฌฌไธ€ไธชๅฏน่ฑกไธŠๆŸฅ่ฏข่ฏฅๅญ—ๆฎต็š„็ป“ๆžœๅฟ…้กป็ญ‰ไบŽๅœจ็ฌฌไบŒไธชๅฏน่ฑกไธŠๆŸฅ่ฏข่ฏฅๅญ—ๆฎต็š„็ป“ๆžœใ€‚ + - ๅฆ‚ๆžœ่ฏฅๅญ—ๆฎต่ฟ”ๅ›žไธ€ไธชๆ ‡้‡๏ผŒๅˆ™็›ธ็ญ‰ๆ€งๅฎšไน‰ไธบ่ฏฅๆ ‡้‡็š„็›ธ็ญ‰ๆ€งใ€‚ + - ๅฆ‚ๆžœ่ฏฅๅญ—ๆฎต่ฟ”ๅ›žไธ€ไธชๆžšไธพ๏ผŒๅˆ™็›ธ็ญ‰ๆ€งๅฎšไน‰ไธบไธคไธชๅญ—ๆฎต้ƒฝ่ฟ”ๅ›ž็›ธๅŒ็š„ๆžšไธพๅ€ผใ€‚ + - ๅฆ‚ๆžœ่ฏฅๅญ—ๆฎต่ฟ”ๅ›žไธ€ไธชๅฏน่ฑก๏ผŒๅˆ™ๆŒ‰็…งไธŠ่ฟฐๆ–นๆณ•้€’ๅฝ’ๅฎšไน‰็›ธ็ญ‰ๆ€งใ€‚ + +ไพ‹ๅฆ‚๏ผš + +```graphql +{ + fourNode: node(id: "4") { + id + ... on User { + name + userWithIdOneGreater { + id + name + } + } + } + fiveNode: node(id: "5") { + id + ... on User { + name + userWithIdOneLess { + id + name + } + } + } +} +``` + +ๅฏ่ƒฝไผš่ฟ”ๅ›ž๏ผš + +```json +{ + "fourNode": { + "id": "4", + "name": "Mark Zuckerberg", + "userWithIdOneGreater": { + "id": "5", + "name": "Chris Hughes" + } + }, + "fiveNode": { + "id": "5", + "name": "Chris Hughes", + "userWithIdOneLess": { + "id": "4", + "name": "Mark Zuckerberg", + } + } +} +``` + +็”ฑไบŽ `fourNode.id` ไธŽ `fiveNode.userWithIdOneLess.id` ็›ธๅŒ๏ผŒๆˆ‘ไปฌๅฏไปฅ้€š่ฟ‡ไธŠ่ฟฐๆกไปถไฟ่ฏ `fourNode.name` ๅฟ…้กปไธŽ `fiveNode.userWithIdOneLess.name` ็›ธๅŒ๏ผŒๅนถไธ”็กฎๅฎžๅฆ‚ๆญคใ€‚ + +# ๅคๆ•ฐ่ฏ†ๅˆซๆ นๅญ—ๆฎต + +ๆƒณ่ฑกไธ€ไธ‹ไธ€ไธชๅไธบ `username` ็š„ๆ นๅญ—ๆฎต๏ผŒ่ฏฅๆ นๅญ—ๆฎตไฝฟ็”จ็”จๆˆท็š„็”จๆˆทๅไธบๅ‚ๆ•ฐๅนถ่ฟ”ๅ›žๅฏนๅบ”็š„็”จๆˆท๏ผš + +```graphql +{ + username(username: "zuck") { + id + } +} +``` + +ๅฏ่ƒฝไผš่ฟ”ๅ›ž๏ผš + +```json +{ + "username": { + "id": "4", + } +} +``` + +ๆ˜พ็„ถ๏ผŒๆˆ‘ไปฌๅฏไปฅๅฐ†ๅ“ๅบ”ไธญ็š„ๅฏน่ฑก๏ผˆID ไธบ 4 ็š„็”จๆˆท๏ผ‰ไธŽ่ฏทๆฑ‚้“พๆŽฅ่ตทๆฅ๏ผŒไปฅ็”จๆˆทๅ โ€œzuckโ€ ่ฏ†ๅˆซๅฏน่ฑกใ€‚็Žฐๅœจๆƒณ่ฑกไธ€ไธ‹ไธ€ไธชๅไธบ `usernames` ็š„ๆ นๅญ—ๆฎต๏ผŒๅฎƒๅŒ…ๅซไธ€ไธช็”จๆˆทๅๅˆ—่กจๅนถ่ฟ”ๅ›žไธ€ไธชๅฏน่ฑกๅˆ—่กจ๏ผš + +```graphql +{ + usernames(usernames: ["zuck", "moskov"]) { + id + } +} +``` + +ๅฏ่ƒฝไผš่ฟ”ๅ›ž๏ผš + +```json +{ + "usernames": [ + { + "id": "4", + }, + { + "id": "6" + } + ] +} +``` + +ไธบไบ†ไฝฟๅฎขๆˆท็ซฏ่ƒฝๅคŸๅฐ†็”จๆˆทๅ้“พๆŽฅๅˆฐๅ“ๅบ”๏ผŒๅฎƒ้œ€่ฆ็Ÿฅ้“ๅ“ๅบ”ไธญ็š„ๆ•ฐ็ป„ๅฐ†ไธŽไฝœไธบๅ‚ๆ•ฐไผ ้€’็š„ๆ•ฐ็ป„ๅคงๅฐ็›ธๅŒ๏ผŒๅนถไธ”ๅ“ๅบ”ไธญ็š„้กบๅบๅฐ†ไธŽๅ‚ๆ•ฐไธญ็š„้กบๅบๅŒน้…ใ€‚ๆˆ‘ไปฌ็งฐ่ฟ™ไบ›ไธบ**ๅคๆ•ฐ่ฏ†ๅˆซๆ นๅญ—ๆฎต**๏ผŒๅ…ถ่ฆๆฑ‚ๅฆ‚ไธ‹ๆ‰€่ฟฐใ€‚ + +## ๅญ—ๆฎต + +็ฌฆๅˆๆญค่ง„่Œƒ็š„ๆœๅŠก็ซฏๅฏ่ƒฝไผšๅ…ฌๅผ€ๆŽฅๅ—่พ“ๅ…ฅๅ‚ๆ•ฐๅˆ—่กจ็š„ๆ นๅญ—ๆฎต๏ผŒๅนถ่ฟ”ๅ›žๅ“ๅบ”ๅˆ—่กจใ€‚ไธบไบ†ไฝฟ็ฌฆๅˆ่ง„่Œƒ็š„ๅฎขๆˆท็ซฏไฝฟ็”จ่ฟ™ไบ›ๅญ—ๆฎต๏ผŒ่ฟ™ไบ›ๅญ—ๆฎตๅฟ…้กปๆ˜ฏ**ๅคๆ•ฐ่ฏ†ๅˆซๆ นๅญ—ๆฎต**๏ผŒๅนถไธ”ๅฟ…้กปๆปก่ถณไปฅไธ‹่ฆๆฑ‚ใ€‚ + +ๆณจๆ„๏ผš็ฌฆๅˆ่ง„่Œƒ็š„ๆœๅŠก็ซฏไนŸๅฏ่ƒฝไผšๅ…ฌๅผ€ไธๆ˜ฏ**ๅคๆ•ฐ่ฏ†ๅˆซๆ นๅญ—ๆฎต**็š„ๆ นๅญ—ๆฎตใ€‚็ฌฆๅˆ่ง„่Œƒ็š„ๅฎขๆˆท็ซฏๅฐ†ๆ— ๆณ•ๅœจๅ…ถๆŸฅ่ฏขไธญๅฐ†่ฟ™ไบ›ๅญ—ๆฎต็”จไฝœๆ นๅญ—ๆฎตใ€‚ + +**ๅคๆ•ฐ่ฏ†ๅˆซๆ นๅญ—ๆฎต**ๅฟ…้กปๆœ‰ไธ”ไป…ๆœ‰ไธ€ไธชๅ‚ๆ•ฐใ€‚่ฏฅๅ‚ๆ•ฐ็š„็ฑปๅž‹ๅฟ…้กปๆ˜ฏ้ž็ฉบ็š„้ž็ฉบๅ€ผๅˆ—่กจใ€‚ๅœจๆˆ‘ไปฌ็š„ `usernames` ็คบไพ‹ไธญ๏ผŒ่ฏฅๅญ—ๆฎตๅฐ†ไฝฟ็”จๅไธบ `usernames` ็š„ๅ•ไธ€ๅ‚ๆ•ฐ๏ผŒๅ…ถ็ฑปๅž‹๏ผˆไฝฟ็”จๆˆ‘ไปฌ็š„็ฑปๅž‹็ณป็ปŸ้€Ÿ่ฎฐ๏ผ‰ๅฐ†ไธบ `[String!]!`ใ€‚ + +**ๅคๆ•ฐ่ฏ†ๅˆซๆ นๅญ—ๆฎต**็š„่ฟ”ๅ›ž็ฑปๅž‹ๅฟ…้กปๆ˜ฏๅˆ—่กจ๏ผŒๆˆ–่€…ๅŒ…ๅซไธ€ไธชๅˆ—่กจ็š„้ž็ฉบๅŒ…่ฃ…ๅ™จใ€‚่ฏฅๅˆ—่กจๅฟ…้กปๅŒ…่ฃ… `Node` ๆŽฅๅฃ๏ผŒไธ€ไธชๅฎž็Žฐ `Node` ๆŽฅๅฃ็š„ๅฏน่ฑกๆˆ–ๆ˜ฏๅŒ…ๅซ่ฟ™ไบ›็ฑปๅž‹็š„้ž็ฉบๅŒ…่ฃ…ๅ™จใ€‚ + +ๆฏๅฝ“ไฝฟ็”จ**ๅคๆ•ฐ่ฏ†ๅˆซๆ นๅญ—ๆฎต**ๆ—ถ๏ผŒๅ“ๅบ”ไธญๅˆ—่กจ็š„้•ฟๅบฆๅฟ…้กปไธŽๅ‚ๆ•ฐไธญๅˆ—่กจ็š„้•ฟๅบฆ็›ธๅŒใ€‚ๅ“ๅบ”ไธญ็š„ๆฏไธช้กน็›ฎ้ƒฝๅฟ…้กปไธŽ่พ“ๅ…ฅไธญ็š„้กน็›ฎ็›ธๅฏนๅบ”ใ€‚ +ๆ›ดๆญฃๅผๅœฐๆฅ่ฏด๏ผŒๅฆ‚ๆžœไผ ้€’็ป™ๆ นๅญ—ๆฎตไธ€ไธช่พ“ๅ…ฅๅˆ—่กจ `Lin` ไฝฟๅพ—่พ“ๅ‡บๅ€ผไธบ `Lout`๏ผŒ้‚ฃไนˆๅฏนไบŽไปปๆ„็ฝฎๆข `P`๏ผŒไผ ้€’ๆ นๅญ—ๆฎต `P(Lin)` ๅฟ…้กปไฝฟๅพ—่พ“ๅ‡บๅ€ผไธบ `P(Lout)`ใ€‚ + +ๅ› ๆญค๏ผŒๅปบ่ฎฎๆœๅŠก็ซฏไธ่ฆๅฐ†ไธบๅ“ๅบ”็ฑปๅž‹ๆทปๅŠ ้ž็ฉบๅŒ…่ฃ…ๅ™จ๏ผŒๅ› ไธบๅฆ‚ๆžœๆ— ๆณ•ไธบ่พ“ๅ…ฅไธญ็š„็ป™ๅฎšๆก็›ฎ่Žทๅ–ๅฏน่ฑก๏ผŒๅฎƒไป็„ถๅฟ…้กปๅœจ่พ“ๅ‡บไธญไธบ่ฏฅ่พ“ๅ…ฅๆก็›ฎๆไพ›ไธ€ไธชๅ€ผ๏ผ›ๅฏน่ฟ™็งๆƒ…ๅ†ตๆฅ่ฏด `null` ๆ˜ฏไธ€ไธชๆœ‰็”จ็š„ๅ€ผใ€‚ + +[relay]: https://facebook.github.io/relay/ \ No newline at end of file diff --git a/site/learn/BestPractice-Pagination.md b/src/content/learn/BestPractice-Pagination.md similarity index 88% rename from site/learn/BestPractice-Pagination.md rename to src/content/learn/BestPractice-Pagination.md index 8f2ddee889..ffcdfd65ca 100644 --- a/site/learn/BestPractice-Pagination.md +++ b/src/content/learn/BestPractice-Pagination.md @@ -1,14 +1,14 @@ --- title: ๅˆ†้กต -layout: ../_core/DocsLayout +layout: docs category: ๆœ€ไฝณๅฎž่ทต permalink: /learn/pagination/ -next: /learn/caching/ +next: /learn/global-object-identification/ --- > ไธๅŒ็š„ๅˆ†้กตๆจกๅž‹ๅฏไปฅๅฎž็ŽฐไธๅŒ็š„ๅฎขๆˆท็ซฏๅŠŸ่ƒฝ -ๅœจ GraphQL ไธญไธ€ไธชๅธธ่ง็š„็”จไพ‹ๆ˜ฏ้ๅކๅฏน่ฑก้›†ๅˆไน‹้—ด็š„่ฟžๆŽฅ๏ผˆconnection๏ผ‰ใ€‚ๅœจ GraphQL ไธญๆœ‰่ฎธๅคšไธๅŒ็š„ๆ–นๅผๆฅๅฑ•็คบ่ฟ™ไบ›่ฟžๆŽฅ๏ผŒไธบๅฎขๆˆท็ซฏๅผ€ๅ‘ไบบๅ‘˜ๆไพ›ไบ†ไธ€็ป„ไธๅŒ็š„ๅŠŸ่ƒฝใ€‚ +ๅœจ GraphQL ไธญไธ€ไธชๅธธ่ง็š„็”จไพ‹ๆ˜ฏ้ๅކๅฏน่ฑก้›†ๅˆไน‹้—ด็š„ๅ…ณ็ณปใ€‚ๅœจ GraphQL ไธญๆœ‰่ฎธๅคšไธๅŒ็š„ๆ–นๅผๆฅๅฑ•็คบ่ฟ™ไบ›ๅ…ณ็ณป๏ผŒไธบๅฎขๆˆท็ซฏๅผ€ๅ‘ไบบๅ‘˜ๆไพ›ไบ†ไธ€็ป„ไธๅŒ็š„ๅŠŸ่ƒฝใ€‚ ## ๅคๆ•ฐ @@ -78,7 +78,7 @@ next: /learn/caching/ ็Žฐๅœจๆˆ‘ไปฌๆœ‰่ƒฝๅŠ›ไฝฟ็”จๆธธๆ ‡ๅฏน่ฟžๆŽฅ่ฟ›่กŒๅˆ†้กต๏ผŒไฝ†ๆ˜ฏๆˆ‘ไปฌๅฆ‚ไฝ•็Ÿฅ้“ไฝ•ๆ—ถๅˆฐ่พพ่ฟžๆŽฅ็š„็ป“ๅฐพ๏ผŸๆˆ‘ไปฌๅฟ…้กป็ปง็ปญๆŸฅ่ฏข๏ผŒ็›ดๅˆฐๆˆ‘ไปฌๆ”ถๅˆฐไธ€ไธช็ฉบๅˆ—่กจ๏ผŒไฝ†ๆ˜ฏๆˆ‘ไปฌ็œŸ็š„ๅธŒๆœ›่ฟžๆŽฅ่ƒฝๅคŸๅ‘Š่ฏ‰ๆˆ‘ไปฌไป€ไนˆๆ—ถๅ€™ๅˆฐ่พพ็ป“ๅฐพ๏ผŒ่ฟ™ๆ ทๆˆ‘ไปฌไธ้œ€่ฆ้ขๅค–็š„่ฏทๆฑ‚ใ€‚ๅŒๆ ท็š„๏ผŒๅฆ‚ๆžœๆˆ‘ไปฌๆƒณ็Ÿฅ้“ๅ…ณไบŽ่ฟžๆŽฅๆœฌ่บซ็š„้™„ๅŠ ไฟกๆฏๆ€ŽไนˆๅŠž๏ผ›ไพ‹ๅฆ‚๏ผŒR2-D2 ๆœ‰ๅคšๅฐ‘ไธชๆœ‹ๅ‹๏ผŸ -ไธบไบ†่งฃๅ†ณ่ฟ™ไธคไธช้—ฎ้ข˜๏ผŒๆˆ‘ไปฌ็š„ `friends` ๅญ—ๆฎตๅฏไปฅ่ฟ”ๅ›žไธ€ไธช่ฟžๆŽฅๅฏน่ฑกใ€‚็„ถๅŽ๏ผŒ่ฟžๆŽฅๅฏน่ฑกๅฐ†ๅ…ทๆœ‰่พนๅ…ถไธญ็š„ๅญ—ๆฎตไปฅๅŠๅ…ถไป–ไฟกๆฏ๏ผˆๅฆ‚ๆ€ป่ฎกๆ•ฐๅ’Œๆœ‰ๅ…ณไธ‹ไธ€้กตๆ˜ฏๅฆๅญ˜ๅœจ็š„ไฟกๆฏ๏ผ‰ใ€‚ๆ‰€ไปฅๆˆ‘ไปฌ็š„ๆœ€็ปˆๆŸฅ่ฏขๅฏ่ƒฝ็œ‹่ตทๆฅๅƒ่ฟ™ๆ ท๏ผš +ไธบไบ†่งฃๅ†ณ่ฟ™ไธคไธช้—ฎ้ข˜๏ผŒๆˆ‘ไปฌ็š„ `friends` ๅญ—ๆฎตๅฏไปฅ่ฟ”ๅ›žไธ€ไธช่ฟžๆŽฅๅฏน่ฑกใ€‚่ฟžๆŽฅๅฏน่ฑกๅฐ†ๆ‹ฅๆœ‰ไธ€ไธชๅญ˜ๆ”พ่พน็š„ๅญ—ๆฎตไปฅๅŠๅ…ถไป–ไฟกๆฏ๏ผˆๅฆ‚ๆ€ป่ฎกๆ•ฐๅ’Œๆœ‰ๅ…ณไธ‹ไธ€้กตๆ˜ฏๅฆๅญ˜ๅœจ็š„ไฟกๆฏ๏ผ‰ใ€‚ๆ‰€ไปฅๆˆ‘ไปฌ็š„ๆœ€็ปˆๆŸฅ่ฏขๅฏ่ƒฝ็œ‹่ตทๆฅๅƒ่ฟ™ๆ ท๏ผš ```graphql @@ -136,3 +136,7 @@ next: /learn/caching/ } } ``` + +## ่ฟžๆŽฅ่ง„่Œƒ + +ไธบไบ†็กฎไฟ่ฏฅๆจกๅผ็š„ไธ€่‡ดๅฎž็Žฐ๏ผŒRelay ้กน็›ฎๅ…ทๆœ‰ๆญฃๅผ็š„[่ง„่Œƒ](https://facebook.github.io/relay/graphql/connections.htm)๏ผŒไฝ ๅฏไปฅ้ตๅพช่ฏฅ่ง„่Œƒๆฅๆž„ๅปบไฝฟ็”จๅŸบไบŽๆธธๆ ‡็š„่ฟžๆŽฅๆจกๅผ็š„ GraphQL APIใ€‚ diff --git a/site/learn/BestPractice-ServingOverHTTP.md b/src/content/learn/BestPractice-ServingOverHTTP.md similarity index 95% rename from site/learn/BestPractice-ServingOverHTTP.md rename to src/content/learn/BestPractice-ServingOverHTTP.md index 11c49066bf..ae48f9f256 100644 --- a/site/learn/BestPractice-ServingOverHTTP.md +++ b/src/content/learn/BestPractice-ServingOverHTTP.md @@ -1,6 +1,6 @@ --- title: ้€š่ฟ‡ HTTP ๆไพ›ๆœๅŠก -layout: ../_core/DocsLayout +layout: docs category: ๆœ€ไฝณๅฎž่ทต permalink: /learn/serving-over-http/ next: /learn/authorization/ @@ -82,4 +82,4 @@ app.use('/graphql', graphqlHTTP({ ``` ## Node -ๅฆ‚ๆžœไฝ ๆญฃๅœจไฝฟ็”จ NodeJS๏ผŒๆˆ‘ไปฌๆŽจ่ไฝฟ็”จ [express-graphql](https://github.com/graphql/express-graphql) ๆˆ– [graphql-server](https://github.com/apollostack/graphql-server)ใ€‚ +ๅฆ‚ๆžœไฝ ๆญฃๅœจไฝฟ็”จ NodeJS๏ผŒๆˆ‘ไปฌๆŽจ่ไฝฟ็”จ [express-graphql](https://github.com/graphql/express-graphql) ๆˆ– [apollo-server](https://github.com/apollographql/apollo-server)ใ€‚ diff --git a/site/learn/BestPractice-ThinkingInGraphs.md b/src/content/learn/BestPractice-ThinkingInGraphs.md similarity index 87% rename from site/learn/BestPractice-ThinkingInGraphs.md rename to src/content/learn/BestPractice-ThinkingInGraphs.md index de16fae276..f417869f48 100644 --- a/site/learn/BestPractice-ThinkingInGraphs.md +++ b/src/content/learn/BestPractice-ThinkingInGraphs.md @@ -1,6 +1,6 @@ --- title: ๅ…ณไบŽ Graphs ็š„ๆ€่€ƒ -layout: ../_core/DocsLayout +layout: docs category: ๆœ€ไฝณๅฎž่ทต permalink: /learn/thinking-in-graphs/ next: /learn/serving-over-http/ @@ -9,7 +9,7 @@ next: /learn/serving-over-http/ ## ไธ€ๅˆ‡็š†ๆ˜ฏๅ›พ [\*](https://en.wikipedia.org/wiki/Turtles_all_the_way_down) > ไฝฟ็”จ GraphQL๏ผŒไฝ ๅฏไปฅๅฐ†ไฝ ๆ‰€ๆœ‰็š„ไธšๅŠกๅปบๆจกไธบๅ›พ -ๅ›พๆ˜ฏๅฐ†ๅพˆๅคš็œŸๅฎžไธ–็•Œ็Žฐ่ฑกๅ˜ๆˆๆจกๅž‹็š„ๅผบๅคงๅทฅๅ…ท๏ผŒๅ› ไธบๅฎƒไปฌๅ’Œๆˆ‘ไปฌ่‡ช็„ถ็š„ๅฟƒ็†ๆจกๅž‹ๅ’ŒๅŸบๆœฌ่ฟ‡็จ‹็š„ๅฃๅคดๆ่ฟฐๅพˆ็›ธไผผใ€‚้€š่ฟ‡ GraphQL๏ผŒไฝ ไผšๆŠŠ่‡ชๅทฑ็š„ไธšๅŠก้ข†ๅŸŸ้€š่ฟ‡ๅฎšไน‰ schema ๅปบๆจกๆˆไธ€ๅผ ๅ›พ๏ผ›ๅœจไฝ ็š„ schema ้‡Œ๏ผŒไฝ ๅฎšไน‰ไธๅŒ็ฑปๅž‹็š„่Š‚็‚นไปฅๅŠๅฎƒไปฌไน‹้—ดๆ˜ฏๅฆ‚ไฝ•่ฟžๆŽฅ็š„ใ€‚ๅœจๅฎขๆˆท็ซฏ่ฟ™่พน๏ผŒ่ฟ™ๅˆ›ๅปบไบ†ไธ€็ง็ฑปไผผไบŽ้ขๅ‘ๅฏน่ฑก็ผ–็จ‹็š„ๆจกๅผ๏ผšๅผ•็”จๅ…ถไป–็ฑปๅž‹็š„็ฑปๅž‹ใ€‚ๅœจๆœๅŠกๅ™จ็ซฏ๏ผŒ็”ฑไบŽ GraphQL ๅฎšไน‰ไบ†ๆŽฅๅฃ๏ผŒไฝ ๅฏไปฅๅœจไปปไฝ•ๅŽ็ซฏ่‡ช็”ฑ็š„ไฝฟ็”จๅฎƒ๏ผˆๆ— ่ฎบๆ–ฐๆ—ง๏ผ๏ผ‰ใ€‚ +ๅ›พๆ˜ฏๅฐ†ๅพˆๅคš็œŸๅฎžไธ–็•Œ็Žฐ่ฑกๅ˜ๆˆๆจกๅž‹็š„ๅผบๅคงๅทฅๅ…ท๏ผŒๅ› ไธบๅฎƒไปฌๅ’Œๆˆ‘ไปฌ่‡ช็„ถ็š„ๅฟƒๆ™บๆจกๅž‹ๅ’ŒๅŸบๆœฌ่ฟ‡็จ‹็š„ๅฃๅคดๆ่ฟฐๅพˆ็›ธไผผใ€‚้€š่ฟ‡ GraphQL๏ผŒไฝ ไผšๆŠŠ่‡ชๅทฑ็š„ไธšๅŠก้ข†ๅŸŸ้€š่ฟ‡ๅฎšไน‰ schema ๅปบๆจกๆˆไธ€ๅผ ๅ›พ๏ผ›ๅœจไฝ ็š„ schema ้‡Œ๏ผŒไฝ ๅฎšไน‰ไธๅŒ็ฑปๅž‹็š„่Š‚็‚นไปฅๅŠๅฎƒไปฌไน‹้—ดๆ˜ฏๅฆ‚ไฝ•่ฟžๆŽฅ็š„ใ€‚ๅœจๅฎขๆˆท็ซฏ่ฟ™่พน๏ผŒ่ฟ™ๅˆ›ๅปบไบ†ไธ€็ง็ฑปไผผไบŽ้ขๅ‘ๅฏน่ฑก็ผ–็จ‹็š„ๆจกๅผ๏ผšๅผ•็”จๅ…ถไป–็ฑปๅž‹็š„็ฑปๅž‹ใ€‚ๅœจๆœๅŠกๅ™จ็ซฏ๏ผŒ็”ฑไบŽ GraphQL ๅฎšไน‰ไบ†ๆŽฅๅฃ๏ผŒไฝ ๅฏไปฅๅœจไปปไฝ•ๅŽ็ซฏ่‡ช็”ฑ็š„ไฝฟ็”จๅฎƒ๏ผˆๆ— ่ฎบๆ–ฐๆ—ง๏ผ๏ผ‰ใ€‚ ## ๅ…ฑๅŒ่ฏญ่จ€ > ๅ‘ฝๅๆ˜ฏๆž„ๅปบ็›ด่ง‚ๆŽฅๅฃไธญไธ€ไธชๅ›ฐ้šพไฝ†้‡่ฆ็š„้ƒจๅˆ† @@ -62,11 +62,11 @@ fragment previewInfo on Email { ### ไฝฟ็”จๆ—งๆœ‰็š„ๆ•ฐๆฎ > ๅธŒๆœ›ๆž„ๅปบไธ€ไธชๆ่ฟฐๅฎขๆˆท็ซฏๅฆ‚ไฝ•ไฝฟ็”จๆ•ฐๆฎ็š„ GraphQL schema๏ผŒ่€Œไธๆ˜ฏ้•œๅƒๆ—งๆœ‰็š„ๆ•ฐๆฎๅบ“ schemaใ€‚ -ๆœ‰ๆ—ถๅ€™๏ผŒไฝ ไผšๅ‘็Žฐ่‡ชๅทฑๆญฃๅœจไฝฟ็”จไธ่ƒฝๅฎŒๅ…จๅๆ˜ ๅฎขๆˆท็ซฏๆถˆ่ดนๆ•ฐๆฎ็š„ๆ—งๆœ‰็š„ๆ•ฐๆฎๆบใ€‚ๅœจ่ฟ™็งๆƒ…ๅ†ตไธ‹๏ผŒๆ›ดๅ€พๅ‘ไบŽๆž„ๅปบไธ€ไธชๆ่ฟฐๅฎขๆˆท็ซฏๅฆ‚ไฝ•ไฝฟ็”จๆ•ฐๆฎ็š„ GraphQL schema๏ผŒ่€Œไธๆ˜ฏ้•œๅƒๆ—งๆœ‰็š„ๆ•ฐๆฎๅบ“ schemaใ€‚ +ๆœ‰ๆ—ถๅ€™๏ผŒไฝ ไผšๅ‘็Žฐ่‡ชๅทฑๆญฃๅœจไฝฟ็”จไธ่ƒฝๅฎŒๅ…จๅๆ˜ ๅฎขๆˆท็ซฏๆถˆ่ดนๆ•ฐๆฎ็š„ๆ—งๆœ‰็š„ๆ•ฐๆฎๆบใ€‚ๅœจ่ฟ™็งๆƒ…ๅ†ตไธ‹๏ผŒๆ›ดๅ€พๅ‘ไบŽๆž„ๅปบไธ€ไธชๆ่ฟฐๅฎขๆˆท็ซฏๅฆ‚ไฝ•ไฝฟ็”จๆ•ฐๆฎ็š„ GraphQL schema๏ผŒ่€Œไธๆ˜ฏ้•œๅƒๆ—งๆœ‰็š„ๆ•ฐๆฎๅบ“ schemaใ€‚ -ๆž„ๅปบไธ€ไธช่กจ่พพโ€œๆ˜ฏไป€ไนˆโ€่€Œไธๆ˜ฏโ€œๆ€Žไนˆๅšโ€็š„ GraphQL schemaใ€‚็„ถๅŽ๏ผŒๆ‚จๅฏไปฅๆ”น่ฟ›ๆ‰ง่กŒ็š„ๅ…ทไฝ“็ป†่Š‚๏ผŒ่€Œไธไผš็ ดๅไธŽๆ—งๅฎขๆˆท็ซฏ็š„ๆŽฅๅฃใ€‚ +ๆž„ๅปบไธ€ไธช่กจ่พพโ€œๆ€Žไนˆๅšโ€่€Œไธๆ˜ฏโ€œๆ˜ฏไป€ไนˆโ€็š„ GraphQL schemaใ€‚็„ถๅŽ๏ผŒๆ‚จๅฏไปฅๆ”น่ฟ›ๆ‰ง่กŒ็š„ๅ…ทไฝ“็ป†่Š‚๏ผŒ่€Œไธไผš็ ดๅไธŽๆ—งๅฎขๆˆท็ซฏ็š„ๆŽฅๅฃใ€‚ ## ไธ€ๆฌกไธ€ๆญฅ > ๆ›ด้ข‘็นๅœฐ่ฟ›่กŒ้ชŒ่ฏๅ’Œ่Žทๅพ—ๅ้ฆˆ -ไธ่ฆ่ฏ•ๅ›พไธ€ๆฌกๅฐฑๅšไธ€ไธชๆจกๅž‹ๆฅๆž„ๅปบๆ•ดไธชไธšๅŠกๅŸŸใ€‚ ่€Œๆ˜ฏไธ€ๆฌกๅชๆž„ๅปบไธ€ไธชๅœบๆ™ฏๆ‰€้œ€็š„้ƒจๅˆ† schemaใ€‚ๆธๆธๅœฐๆ‹“ๅฑ• schema๏ผŒไฝ ่ฆๆ›ด้ข‘็นๅœฐ่ฟ›่กŒ้ชŒ่ฏๅ’Œ่Žทๅพ—ๅ้ฆˆ๏ผŒไปฅไพฟๅฏปๆ‰พๅˆฐๆž„ๅปบ็š„ๆญฃ็กฎ่งฃๅ†ณๆ–นๆกˆใ€‚ +ไธ่ฆ่ฏ•ๅ›พไธ€ๆฌกๅฐฑๅšไธ€ไธชๆจกๅž‹ๆฅๆž„ๅปบๆ•ดไธชไธšๅŠกๅŸŸ๏ผŒ่€Œๆ˜ฏไธ€ๆฌกๅชๆž„ๅปบไธ€ไธชๅœบๆ™ฏๆ‰€้œ€็š„้ƒจๅˆ† schemaใ€‚ๆธๆธๅœฐๆ‹“ๅฑ• schema๏ผŒไฝ ่ฆๆ›ด้ข‘็นๅœฐ่ฟ›่กŒ้ชŒ่ฏๅ’Œ่Žทๅพ—ๅ้ฆˆ๏ผŒไปฅไพฟๅฏปๆ‰พๅˆฐๆž„ๅปบ็š„ๆญฃ็กฎ่งฃๅ†ณๆ–นๆกˆใ€‚ diff --git a/site/learn/Introduction.md b/src/content/learn/Introduction.md similarity index 88% rename from site/learn/Introduction.md rename to src/content/learn/Introduction.md index 67224f827f..5bfebc03d7 100644 --- a/site/learn/Introduction.md +++ b/src/content/learn/Introduction.md @@ -1,13 +1,13 @@ --- title: GraphQL ๅ…ฅ้—จ sidebarTitle: ๅ…ฅ้—จ -layout: ../_core/DocsLayout +layout: docs category: ๅญฆไน  permalink: /learn/ next: /learn/queries/ --- -> ๅœจๆŽฅไธ‹ๆฅ็š„ไธ€็ณปๅˆ—ๆ–‡็ซ ไธญ๏ผŒๆˆ‘ไปฌไผšไบ†่งฃ GraphQL ๆ˜ฏไป€ไนˆ๏ผŒๅฎƒๆ˜ฏๅฆ‚ไฝ•่ฟไฝœไปฅๅŠๅฆ‚ไฝ•ไฝฟ็”จๅฎƒใ€‚ๅœจๆ‰พๅฆ‚ไฝ•ๆญๅปบ GraphQL ๆœๅŠก็š„ๆ–‡ๆกฃ๏ผŸ่ฟ™ๆœ‰ไธ€ไบ›็ฑปๅบ“ๅฏไปฅๅธฎไฝ ็”จ[ๅคš็งไธๅŒ่ฏญ่จ€](/code/)ๅฎž็Žฐ GraphQLใ€‚้€š่ฟ‡ๅฎž็”จๆ•™็จ‹ๆทฑๅ…ฅๅญฆไน ไฝ“้ชŒ๏ผŒ่ฏท่ฎฟ้—ฎ [How to GraphQL](https://www.howtographql.com) ๅ…จๆ ˆๆ•™็จ‹็ฝ‘็ซ™ใ€‚ +> ๅœจๆŽฅไธ‹ๆฅ็š„ไธ€็ณปๅˆ—ๆ–‡็ซ ไธญ๏ผŒๆˆ‘ไปฌไผšไบ†่งฃ GraphQL ๆ˜ฏไป€ไนˆ๏ผŒๅฎƒๆ˜ฏๅฆ‚ไฝ•่ฟไฝœไปฅๅŠๅฆ‚ไฝ•ไฝฟ็”จๅฎƒใ€‚ๅœจๆ‰พๅฆ‚ไฝ•ๆญๅปบ GraphQL ๆœๅŠก็š„ๆ–‡ๆกฃ๏ผŸ่ฟ™ๆœ‰ไธ€ไบ›็ฑปๅบ“ๅฏไปฅๅธฎไฝ ็”จ[ๅคš็งไธๅŒ่ฏญ่จ€](/code/)ๅฎž็Žฐ GraphQLใ€‚้€š่ฟ‡ๅฎž็”จๆ•™็จ‹ๆทฑๅ…ฅๅญฆไน ไฝ“้ชŒ๏ผŒ่ฏท่ฎฟ้—ฎ [How to GraphQL](https://www.howtographql.com) ๅ…จๆ ˆๆ•™็จ‹็ฝ‘็ซ™ใ€‚ๆˆ‘ไปฌ่ฟ˜ไธŽ edX ๅˆไฝœๅˆ›ๅปบไบ†ๅ…่ดน็š„ๅœจ็บฟ่ฏพ็จ‹๏ผŒ[ๆŽข็ดข GraphQL๏ผšไธ€็ง็”จไบŽ API ็š„ๆŸฅ่ฏข่ฏญ่จ€](https://www.edx.org/course/exploring-graphql-a-query-language-for-apis)ใ€‚ GraphQL ๆ˜ฏไธ€ไธช็”จไบŽ API ็š„ๆŸฅ่ฏข่ฏญ่จ€๏ผŒๆ˜ฏไธ€ไธชไฝฟ็”จๅŸบไบŽ็ฑปๅž‹็ณป็ปŸๆฅๆ‰ง่กŒๆŸฅ่ฏข็š„ๆœๅŠก็ซฏ่ฟ่กŒๆ—ถ๏ผˆ็ฑปๅž‹็ณป็ปŸ็”ฑไฝ ็š„ๆ•ฐๆฎๅฎšไน‰๏ผ‰ใ€‚GraphQL ๅนถๆฒกๆœ‰ๅ’Œไปปไฝ•็‰นๅฎšๆ•ฐๆฎๅบ“ๆˆ–่€…ๅญ˜ๅ‚จๅผ•ๆ“Ž็ป‘ๅฎš๏ผŒ่€Œๆ˜ฏไพ้ ไฝ ็Žฐๆœ‰็š„ไปฃ็ ๅ’Œๆ•ฐๆฎๆ”ฏๆ’‘ใ€‚ diff --git a/site/learn/Learn-Execution.md b/src/content/learn/Learn-Execution.md similarity index 94% rename from site/learn/Learn-Execution.md rename to src/content/learn/Learn-Execution.md index 02b6472e8e..9512b4046d 100644 --- a/site/learn/Learn-Execution.md +++ b/src/content/learn/Learn-Execution.md @@ -1,6 +1,6 @@ --- title: ๆ‰ง่กŒ -layout: ../_core/DocsLayout +layout: docs category: ๅญฆไน  permalink: /learn/execution/ next: /learn/introspection/ @@ -59,7 +59,7 @@ type Starship { ```js Query: { - human(obj, args, context) { + human(obj, args, context, info) { return context.db.loadHumanByID(args.id).then( userData => new Human(userData) ) @@ -67,18 +67,19 @@ Query: { } ``` -่ฟ™ไธชไพ‹ๅญไฝฟ็”จไบ† JavaScript ่ฏญ่จ€๏ผŒไฝ† GraphQL ๆœๅŠก็ซฏๅบ”็”จๅฏไปฅ่ขซ [ๅคš็ง่ฏญ่จ€ๅฎž็Žฐ](/code/)ใ€‚่งฃๆžๅ™จๅ‡ฝๆ•ฐๆŽฅๆ”ถ 3 ไธชๅ‚ๆ•ฐ๏ผš +่ฟ™ไธชไพ‹ๅญไฝฟ็”จไบ† JavaScript ่ฏญ่จ€๏ผŒไฝ† GraphQL ๆœๅŠก็ซฏๅบ”็”จๅฏไปฅ่ขซ [ๅคš็ง่ฏญ่จ€ๅฎž็Žฐ](/code/)ใ€‚่งฃๆžๅ™จๅ‡ฝๆ•ฐๆŽฅๆ”ถ 4 ไธชๅ‚ๆ•ฐ๏ผš - `obj` ไธŠไธ€็บงๅฏน่ฑก๏ผŒๅฆ‚ๆžœๅญ—ๆฎตๅฑžไบŽๆ น่Š‚็‚นๆŸฅ่ฏข็ฑปๅž‹้€šๅธธไธไผš่ขซไฝฟ็”จใ€‚ - `args` ๅฏไปฅๆไพ›ๅœจ GraphQL ๆŸฅ่ฏขไธญไผ ๅ…ฅ็š„ๅ‚ๆ•ฐใ€‚ - `context` ไผš่ขซๆไพ›็ป™ๆ‰€ๆœ‰่งฃๆžๅ™จ๏ผŒๅนถไธ”ๆŒๆœ‰้‡่ฆ็š„ไธŠไธ‹ๆ–‡ไฟกๆฏๆฏ”ๅฆ‚ๅฝ“ๅ‰็™ปๅ…ฅ็š„็”จๆˆทๆˆ–่€…ๆ•ฐๆฎๅบ“่ฎฟ้—ฎๅฏน่ฑกใ€‚ +- `info` ไธ€ไธชไฟๅญ˜ไธŽๅฝ“ๅ‰ๆŸฅ่ฏข็›ธๅ…ณ็š„ๅญ—ๆฎต็‰นๅฎšไฟกๆฏไปฅๅŠ schema ่ฏฆ็ป†ไฟกๆฏ็š„ๅ€ผ๏ผŒ[ๆ›ดๅคš่ฏฆๆƒ…่ฏทๅ‚่€ƒ็ฑปๅž‹ GraphQLResolveInfo](/graphql-js/type/#graphqlobjecttype). ## ๅผ‚ๆญฅ่งฃๆžๅ™จ ่ฎฉๆˆ‘ไปฌๆฅๅˆ†ๆžไธ€ไธ‹ๅœจ่ฟ™ไธช่งฃๆžๅ™จๅ‡ฝๆ•ฐไธญๅ‘็”Ÿไบ†ไป€ไนˆใ€‚ ```js -human(obj, args, context) { +human(obj, args, context, info) { return context.db.loadHumanByID(args.id).then( userData => new Human(userData) ) @@ -95,7 +96,7 @@ human(obj, args, context) { ```js Human: { - name(obj, args, context) { + name(obj, args, context, info) { return obj.name } } @@ -129,7 +130,7 @@ Human: { ```js Human: { - starships(obj, args, context) { + starships(obj, args, context, info) { return obj.starshipIDs.map( id => context.db.loadStarshipByID(id).then( shipData => new Starship(shipData) @@ -145,7 +146,7 @@ GraphQL ๅฐ†ๅนถๅ‘ๆ‰ง่กŒ่ฟ™ไบ› Promise๏ผŒๅฝ“ๆ‰ง่กŒ็ป“ๆŸ่ฟ”ๅ›žไธ€ไธชๅฏน่ฑกๅˆ—่กจ ## ไบง็”Ÿ็ป“ๆžœ -ๅฝ“ๆฏไธชๅญ—ๆฎต่ขซ่งฃๆžๆ—ถ๏ผŒ็ป“ๆžœ่ขซๆ”พ็ฝฎๅˆฐ้”ฎๅ€ผๆ˜ ๅฐ„ไธญ๏ผŒๅญ—ๆฎตๅ็งฐ๏ผˆๆˆ–ๅˆซๅ๏ผ‰ไฝœไธบ้”ฎๅ€ผๆ˜ ๅฐ„็š„้”ฎ๏ผŒ่งฃๆžๅ™จ็š„ๅ€ผไฝœไธบ้”ฎๅ€ผๆ˜ ๅฐ„็š„ๅ€ผ๏ผŒ่ฟ™ไธช่ฟ‡็จ‹ไปŽๆŸฅ่ฏขๅญ—ๆฎต็š„ๅบ•้ƒจๅถๅญ่Š‚็‚นๅผ€ๅง‹่ฟ”ๅ›ž๏ผŒ็›ดๅˆฐๆ น Query ็ฑปๅž‹็š„่ตทๅง‹่Š‚็‚นใ€‚ๆœ€ๅŽๅˆๅนถๆˆไธบ่ƒฝๅคŸ้•œๅƒๅˆฐๅŽŸๅง‹ๆŸฅ่ฏข็ป“ๆž„็š„็ป“ๆžœ๏ผŒ็„ถๅŽๅฏไปฅๅฐ†ๅ…ถๅ‘้€๏ผˆ้€šๅธธไธบ JSON ๆ ผๅผ๏ผ‰ๅˆฐ่ฏทๆฑ‚็š„ๅฎขๆˆท็ซฏใ€‚ +ๅฝ“ๆฏไธชๅญ—ๆฎต่ขซ่งฃๆžๆ—ถ๏ผŒ็ป“ๆžœ่ขซๆ”พ็ฝฎๅˆฐ้”ฎๅ€ผๆ˜ ๅฐ„ไธญ๏ผŒๅญ—ๆฎตๅ็งฐ๏ผˆๆˆ–ๅˆซๅ๏ผ‰ไฝœไธบ้”ฎๅ€ผๆ˜ ๅฐ„็š„้”ฎ๏ผŒ่งฃๆžๅ™จ็š„ๅ€ผไฝœไธบ้”ฎๅ€ผๆ˜ ๅฐ„็š„ๅ€ผใ€‚่ฟ™ไธช่ฟ‡็จ‹ไปŽๆŸฅ่ฏขๅญ—ๆฎต็š„ๅบ•้ƒจๅถๅญ่Š‚็‚นๅผ€ๅง‹่ฟ”ๅ›ž๏ผŒ็›ดๅˆฐๆ น Query ็ฑปๅž‹็š„่ตทๅง‹่Š‚็‚นใ€‚ๆœ€ๅŽๅˆๅนถๆˆไธบ่ƒฝๅคŸ้•œๅƒๅˆฐๅŽŸๅง‹ๆŸฅ่ฏข็ป“ๆž„็š„็ป“ๆžœ๏ผŒ็„ถๅŽๅฏไปฅๅฐ†ๅ…ถๅ‘้€๏ผˆ้€šๅธธไธบ JSON ๆ ผๅผ๏ผ‰ๅˆฐ่ฏทๆฑ‚็š„ๅฎขๆˆท็ซฏใ€‚ ่ฎฉๆˆ‘ไปฌๆœ€ๅŽไธ€็œผ็œ‹็œ‹ๅŽŸๆฅ็š„ๆŸฅ่ฏข๏ผŒ็œ‹็œ‹่ฟ™ไบ›่งฃๆžๅ‡ฝๆ•ฐๅฆ‚ไฝ•ไบง็”Ÿไธ€ไธช็ป“ๆžœ๏ผš diff --git a/site/learn/Learn-Introspection.md b/src/content/learn/Learn-Introspection.md similarity index 98% rename from site/learn/Learn-Introspection.md rename to src/content/learn/Learn-Introspection.md index 59eee8d5bf..15050c0949 100644 --- a/site/learn/Learn-Introspection.md +++ b/src/content/learn/Learn-Introspection.md @@ -1,6 +1,6 @@ --- title: ๅ†…็œ -layout: ../_core/DocsLayout +layout: docs category: ๅญฆไน  permalink: /learn/introspection/ next: /learn/best-practices/ @@ -24,13 +24,6 @@ next: /learn/best-practices/ } } } - - - - - - - ``` ๅ“‡๏ผŒๆœ‰ๅฅฝๅคš็ฑปๅž‹๏ผๅฎƒไปฌ้ƒฝๆ˜ฏไป€ไนˆ๏ผŸๆˆ‘ไปฌๆฅๆ€ป็ป“ไธ€ไธ‹๏ผš @@ -106,10 +99,6 @@ next: /learn/best-practices/ } } } - - - - ``` ่ฟ™ไบ›ๆญฃๆ˜ฏๆˆ‘ไปฌไธบ `Droid` ๅฎšไน‰็š„ๅญ—ๆฎต๏ผ @@ -137,11 +126,6 @@ next: /learn/best-practices/ } } } - - - - - ``` ๆœ€ๅŽๆˆ‘ไปฌๆฅ็œ‹็œ‹ๅ†…็œ็ณป็ปŸ็‰นๅˆซ้€‚ๅˆ็”จๆฅๅผ€ๅ‘ๅทฅๅ…ท็š„็‰นๆ€ง๏ผŒๆˆ‘ไปฌๆฅๅ‘ๅ†…็œ็ณป็ปŸ่ฏทๆฑ‚ๆ–‡ๆกฃ๏ผ diff --git a/site/learn/Learn-Queries.md b/src/content/learn/Learn-Queries.md similarity index 92% rename from site/learn/Learn-Queries.md rename to src/content/learn/Learn-Queries.md index 4a1a5386d2..c5d6410c74 100644 --- a/site/learn/Learn-Queries.md +++ b/src/content/learn/Learn-Queries.md @@ -1,6 +1,6 @@ --- title: ๆŸฅ่ฏขๅ’Œๅ˜ๆ›ด -layout: ../_core/DocsLayout +layout: docs category: ๅญฆไน  permalink: /learn/queries/ next: /learn/schema/ @@ -100,7 +100,7 @@ sublinks: ๅญ—ๆฎต๏ผˆFields๏ผ‰,ๅ‚ๆ•ฐ๏ผˆArguments๏ผ‰,ๅˆซๅ๏ผˆAliases๏ผ‰,็‰‡ๆฎต๏ผˆ ๅ‡่ฎพๆˆ‘ไปฌ็š„ app ๆœ‰ๆฏ”่พƒๅคๆ‚็š„้กต้ข๏ผŒๅฐ†ๆญฃๅๆดพไธป่ง’ๅŠๅ…ถๅ‹ๅ†›ๅˆ†ไธบไธคๆ‹จใ€‚ไฝ ็ซ‹้ฉฌๅฐฑ่ƒฝๆƒณๅˆฐๅฏนๅบ”็š„ๆŸฅ่ฏขไผšๅ˜ๅพ—ๅคๆ‚๏ผŒๅ› ไธบๆˆ‘ไปฌ้œ€่ฆๅฐ†ไธ€ไบ›ๅญ—ๆฎต้‡ๅค่‡ณๅฐ‘ไธ€ๆฌก โ€”โ€” ไธคๆ–นๅ„ไธ€ๆฌกไปฅไฝœๆฏ”่พƒใ€‚ -่ฟ™ๅฐฑๆ˜ฏไธบไฝ• GraphQL ๅŒ…ๅซไบ†็งฐไฝœ**็‰‡ๆฎต**็š„ๅฏๅค็”จๅ•ๅ…ƒใ€‚็‰‡ๆฎตไฝฟไฝ ่ƒฝๅคŸ็ป„็ป‡ไธ€็ป„ๅญ—ๆฎต๏ผŒ็„ถๅŽๅœจ้œ€่ฆๅฎƒไปฌ็š„็š„ๅœฐๆ–นๅผ•ๅ…ฅใ€‚ไธ‹้ขไพ‹ๅญๅฑ•็คบไบ†ๅฆ‚ไฝ•ไฝฟ็”จ็‰‡ๆฎต่งฃๅ†ณไธŠ่ฟฐๅœบๆ™ฏ๏ผš +่ฟ™ๅฐฑๆ˜ฏไธบไฝ• GraphQL ๅŒ…ๅซไบ†็งฐไฝœ**็‰‡ๆฎต**็š„ๅฏๅค็”จๅ•ๅ…ƒใ€‚็‰‡ๆฎตไฝฟไฝ ่ƒฝๅคŸ็ป„็ป‡ไธ€็ป„ๅญ—ๆฎต๏ผŒ็„ถๅŽๅœจ้œ€่ฆๅฎƒไปฌ็š„ๅœฐๆ–นๅผ•ๅ…ฅใ€‚ไธ‹้ขไพ‹ๅญๅฑ•็คบไบ†ๅฆ‚ไฝ•ไฝฟ็”จ็‰‡ๆฎต่งฃๅ†ณไธŠ่ฟฐๅœบๆ™ฏ๏ผš ```graphql # { "graphiql": true } @@ -124,11 +124,37 @@ fragment comparisonFields on Character { ไฝ ๅฏไปฅ็œ‹ๅˆฐไธŠ้ข็š„ๆŸฅ่ฏขๅฆ‚ไฝ•ๆผ‚ไบฎๅœฐ้‡ๅคไบ†ๅญ—ๆฎตใ€‚็‰‡ๆฎต็š„ๆฆ‚ๅฟต็ปๅธธ็”จไบŽๅฐ†ๅคๆ‚็š„ๅบ”็”จๆ•ฐๆฎ้œ€ๆฑ‚ๅˆ†ๅ‰ฒๆˆๅฐๅ—๏ผŒ็‰นๅˆซๆ˜ฏไฝ ่ฆๅฐ†ๅคง้‡ไธๅŒ็‰‡ๆฎต็š„ UI ็ป„ไปถ็ป„ๅˆๆˆไธ€ไธชๅˆๅง‹ๆ•ฐๆฎ่Žทๅ–็š„ๆ—ถๅ€™ใ€‚ +### ๅœจ็‰‡ๆฎตๅ†…ไฝฟ็”จๅ˜้‡ + +็‰‡ๆฎตๅฏไปฅ่ฎฟ้—ฎๆŸฅ่ฏขๆˆ–ๅ˜ๆ›ดไธญๅฃฐๆ˜Ž็š„ๅ˜้‡ใ€‚่ฏฆ่ง [ๅ˜้‡](#variables)ใ€‚ + +```graphql +# { "graphiql": true } +query HeroComparison($first: Int = 3) { + leftComparison: hero(episode: EMPIRE) { + ...comparisonFields + } + rightComparison: hero(episode: JEDI) { + ...comparisonFields + } +} + +fragment comparisonFields on Character { + name + friendsConnection(first: $first) { + totalCount + edges { + node { + name + } + } + } +} +``` ## ๆ“ไฝœๅ็งฐ๏ผˆOperation name๏ผ‰ ่ฟ™ไน‹ๅ‰๏ผŒๆˆ‘ไปฌ้ƒฝไฝฟ็”จไบ†็ฎ€ๅ†™ๅฅๆณ•๏ผŒ็œ็•ฅไบ† `query` ๅ…ณ้”ฎๅญ—ๅ’ŒๆŸฅ่ฏขๅ็งฐ๏ผŒไฝ†ๆ˜ฏ็”Ÿไบงไธญไฝฟ็”จ่ฟ™ไบ›ๅฏไปฅไฝฟๆˆ‘ไปฌไปฃ็ ๅ‡ๅฐ‘ๆญงไน‰ใ€‚ -ๅฆ‚ๆžœไฝ ๆƒณ่ฆๆ‰ง่กŒๆŸฅ่ฏขไปฅๅค–็š„ๆ“ไฝœๆˆ–ไผ ้€’ๅŠจๆ€ๅ˜้‡๏ผŒๅˆ™้œ€่ฆๅฐ†่ฟ™ไบ›ๅฏ้€‰้ƒจๅˆ†็”จไบŽ GraphQL ๆ“ไฝœใ€‚ ไธ‹้ข็š„็คบไพ‹ๅŒ…ๅซไบ†ไฝœไธบ**ๆ“ไฝœ็ฑปๅž‹**็š„ๅ…ณ้”ฎๅญ— `query` ไปฅๅŠ**ๆ“ไฝœๅ็งฐ** `HeroNameAndFriends`๏ผš @@ -144,10 +170,10 @@ query HeroNameAndFriends { } ``` -**ๆ“ไฝœ็ฑปๅž‹**ๅฏไปฅๆ˜ฏ _query_ใ€_mutation_ ๆˆ– _subscription_๏ผŒๆ่ฟฐไฝ ๆ‰“็ฎ—ๅšไป€ไนˆ็ฑปๅž‹็š„ๆ“ไฝœใ€‚ +**ๆ“ไฝœ็ฑปๅž‹**ๅฏไปฅๆ˜ฏ _query_ใ€_mutation_ ๆˆ– _subscription_๏ผŒๆ่ฟฐไฝ ๆ‰“็ฎ—ๅšไป€ไนˆ็ฑปๅž‹็š„ๆ“ไฝœใ€‚ๆ“ไฝœ็ฑปๅž‹ๆ˜ฏๅฟ…้œ€็š„๏ผŒ้™ค้žไฝ ไฝฟ็”จๆŸฅ่ฏข็ฎ€ๅ†™่ฏญๆณ•๏ผŒๅœจ่ฟ™็งๆƒ…ๅ†ตไธ‹๏ผŒไฝ ๆ— ๆณ•ไธบๆ“ไฝœๆไพ›ๅ็งฐๆˆ–ๅ˜้‡ๅฎšไน‰ใ€‚ -**ๆ“ไฝœๅ็งฐ**ๆ˜ฏไฝ ็š„ๆ“ไฝœ็š„ๆœ‰ๆ„ไน‰ๅ’Œๆ˜Ž็กฎ็š„ๅ็งฐใ€‚่ฟ™ๅฏนไบŽ่ฐƒ่ฏ•ๅ’ŒๆœๅŠกๅ™จ็ซฏๆ—ฅๅฟ—่ฎฐๅฝ•็š„ๅŽŸๅ› ๅฏ่ƒฝ้žๅธธๆœ‰็”จใ€‚ -ๅฝ“ๅœจไฝ ็š„็ฝ‘็ปœๆ—ฅๅฟ—ๆˆ–ๆ˜ฏ GraphQL ๆœๅŠกๅ™จไธญๅ‡บ็Žฐ้—ฎ้ข˜ๆ—ถ๏ผŒ้€š่ฟ‡ๅ็งฐๆฅไปŽไฝ ็š„ไปฃ็ ๅบ“ไธญๆ‰พๅˆฐไธ€ไธชๆŸฅ่ฏขๆฏ”ๅฐ่ฏ•ๅŽป็ ด่ฏ‘ๅ†…ๅฎนๆ›ดๅŠ ๅฎนๆ˜“ใ€‚ +**ๆ“ไฝœๅ็งฐ**ๆ˜ฏไฝ ็š„ๆ“ไฝœ็š„ๆœ‰ๆ„ไน‰ๅ’Œๆ˜Ž็กฎ็š„ๅ็งฐใ€‚ๅฎƒไป…ๅœจๆœ‰ๅคšไธชๆ“ไฝœ็š„ๆ–‡ๆกฃไธญๆ˜ฏๅฟ…้œ€็š„๏ผŒไฝ†ๆˆ‘ไปฌ้ผ“ๅŠฑไฝฟ็”จๅฎƒ๏ผŒๅ› ไธบๅฎƒๅฏนไบŽ่ฐƒ่ฏ•ๅ’ŒๆœๅŠกๅ™จ็ซฏๆ—ฅๅฟ—่ฎฐๅฝ•้žๅธธๆœ‰็”จใ€‚ +ๅฝ“ๅœจไฝ ็š„็ฝ‘็ปœๆˆ–ๆ˜ฏ GraphQL ๆœๅŠกๅ™จ็š„ๆ—ฅๅฟ—ไธญๅ‡บ็Žฐ้—ฎ้ข˜ๆ—ถ๏ผŒ้€š่ฟ‡ๅ็งฐๆฅไปŽไฝ ็š„ไปฃ็ ๅบ“ไธญๆ‰พๅˆฐไธ€ไธชๆŸฅ่ฏขๆฏ”ๅฐ่ฏ•ๅŽป็ ด่ฏ‘ๅ†…ๅฎนๆ›ดๅŠ ๅฎนๆ˜“ใ€‚ ๅฐฑๆŠŠๅฎƒๆƒณๆˆไฝ ๅ–œๆฌข็š„็จ‹ๅบ่ฏญ่จ€ไธญ็š„ๅ‡ฝๆ•ฐๅใ€‚ไพ‹ๅฆ‚๏ผŒๅœจ JavaScript ไธญ๏ผŒๆˆ‘ไปฌๅช็”จๅŒฟๅๅ‡ฝๆ•ฐๅฐฑๅฏไปฅๅทฅไฝœ๏ผŒไฝ†ๆ˜ฏๅฝ“ๆˆ‘ไปฌ็ป™ไบ†ๅ‡ฝๆ•ฐๅไน‹ๅŽ๏ผŒๅฐฑๆ›ดๅŠ ๅฎนๆ˜“่ฟฝ่ธชใ€่ฐƒ่ฏ•ๆˆ‘ไปฌ็š„ไปฃ็ ๏ผŒๅนถๅœจๅ…ถ่ขซ่ฐƒ็”จ็š„ๆ—ถๅ€™ๅšๆ—ฅๅฟ—ใ€‚ๅŒ็†๏ผŒGraphQL ็š„ๆŸฅ่ฏขๅ’Œๅ˜ๆ›ดๅ็งฐ๏ผŒไปฅๅŠ็‰‡ๆฎตๅ็งฐ๏ผŒ้ƒฝๅฏไปฅๆˆไธบๆœๅŠก็ซฏไพง็”จๆฅ่ฏ†ๅˆซไธๅŒ GraphQL ่ฏทๆฑ‚็š„ๆœ‰ๆ•ˆ่ฐƒ่ฏ•ๅทฅๅ…ทใ€‚ @@ -166,7 +192,7 @@ query HeroNameAndFriends { ๅ…จ้ƒจๅšๅฎŒไน‹ๅŽๅฐฑๅƒ่ฟ™ไธชๆ ทๅญ๏ผš ```graphql -# { "graphiql": true, "variables": { "episode": "JEDI" } } +# { "graphiql": true, "variables": { "episode": JEDI } } query HeroNameAndFriends($episode: Episode) { hero(episode: $episode) { name diff --git a/site/learn/Learn-Schema.md b/src/content/learn/Learn-Schema.md similarity index 91% rename from site/learn/Learn-Schema.md rename to src/content/learn/Learn-Schema.md index cbc125b662..a851ed924f 100644 --- a/site/learn/Learn-Schema.md +++ b/src/content/learn/Learn-Schema.md @@ -1,6 +1,6 @@ --- title: Schema ๅ’Œ็ฑปๅž‹ -layout: ../_core/DocsLayout +layout: docs category: ๅญฆไน  permalink: /learn/schema/ next: /learn/validation/ @@ -42,7 +42,7 @@ GraphQL ๆœๅŠกๅฏไปฅ็”จไปปไฝ•่ฏญ่จ€็ผ–ๅ†™๏ผŒๅ› ไธบๆˆ‘ไปฌๅนถไธไพ่ต–ไบŽไปปไฝ•็‰น ```graphql type Character { name: String! - appearsIn: [Episode]! + appearsIn: [Episode!]! } ``` @@ -52,7 +52,7 @@ type Character { - `name` ๅ’Œ `appearsIn` ๆ˜ฏ `Character` ็ฑปๅž‹ไธŠ็š„**ๅญ—ๆฎต**ใ€‚่ฟ™ๆ„ๅ‘ณ็€ๅœจไธ€ไธชๆ“ไฝœ `Character` ็ฑปๅž‹็š„ GraphQL ๆŸฅ่ฏขไธญ็š„ไปปไฝ•้ƒจๅˆ†๏ผŒ้ƒฝๅช่ƒฝๅ‡บ็Žฐ `name` ๅ’Œ `appearsIn` ๅญ—ๆฎตใ€‚ - `String` ๆ˜ฏๅ†…็ฝฎ็š„**ๆ ‡้‡**็ฑปๅž‹ไน‹ไธ€ โ€”โ€” ๆ ‡้‡็ฑปๅž‹ๆ˜ฏ่งฃๆžๅˆฐๅ•ไธชๆ ‡้‡ๅฏน่ฑก็š„็ฑปๅž‹๏ผŒๆ— ๆณ•ๅœจๆŸฅ่ฏขไธญๅฏนๅฎƒ่ฟ›่กŒๆฌก็บง้€‰ๆ‹ฉใ€‚ๅŽ้ขๆˆ‘ไปฌๅฐ†็ป†่ฟฐๆ ‡้‡็ฑปๅž‹ใ€‚ - `String!` ่กจ็คบ่ฟ™ไธชๅญ—ๆฎตๆ˜ฏ**้ž็ฉบ็š„**๏ผŒGraphQL ๆœๅŠกไฟ่ฏๅฝ“ไฝ ๆŸฅ่ฏข่ฟ™ไธชๅญ—ๆฎตๅŽๆ€ปไผš็ป™ไฝ ่ฟ”ๅ›žไธ€ไธชๅ€ผใ€‚ๅœจ็ฑปๅž‹่ฏญ่จ€้‡Œ้ข๏ผŒๆˆ‘ไปฌ็”จไธ€ไธชๆ„Ÿๅนๅทๆฅ่กจ็คบ่ฟ™ไธช็‰นๆ€งใ€‚ -- `[Episode]!` ่กจ็คบไธ€ไธช `Episode` **ๆ•ฐ็ป„**ใ€‚ๅ› ไธบๅฎƒไนŸๆ˜ฏ**้ž็ฉบ็š„**๏ผŒๆ‰€ไปฅๅฝ“ไฝ ๆŸฅ่ฏข `appearsIn` ๅญ—ๆฎต็š„ๆ—ถๅ€™๏ผŒไฝ ไนŸๆ€ป่ƒฝๅพ—ๅˆฐไธ€ไธชๆ•ฐ็ป„๏ผˆ้›ถไธชๆˆ–่€…ๅคšไธชๅ…ƒ็ด ๏ผ‰ใ€‚ +- `[Episode!]!` ่กจ็คบไธ€ไธช `Episode` **ๆ•ฐ็ป„**ใ€‚ๅ› ไธบๅฎƒไนŸๆ˜ฏ**้ž็ฉบ็š„**๏ผŒๆ‰€ไปฅๅฝ“ไฝ ๆŸฅ่ฏข `appearsIn` ๅญ—ๆฎต็š„ๆ—ถๅ€™๏ผŒไฝ ไนŸๆ€ป่ƒฝๅพ—ๅˆฐไธ€ไธชๆ•ฐ็ป„๏ผˆ้›ถไธชๆˆ–่€…ๅคšไธชๅ…ƒ็ด ๏ผ‰ใ€‚ไธ”็”ฑไบŽ `Episode!` ไนŸๆ˜ฏ**้ž็ฉบ็š„**๏ผŒไฝ ๆ€ปๆ˜ฏๅฏไปฅ้ข„ๆœŸๅˆฐๆ•ฐ็ป„ไธญ็š„ๆฏไธช้กน็›ฎ้ƒฝๆ˜ฏไธ€ไธช `Episode` ๅฏน่ฑกใ€‚ ็Žฐๅœจไฝ ็Ÿฅ้“ไธ€ไธช GraphQL ๅฏน่ฑก็ฑปๅž‹็œ‹ไธŠๅŽปๆ˜ฏๆ€Žๆ ท๏ผŒไนŸ็Ÿฅ้“ๅฆ‚ไฝ•้˜…่ฏปๅŸบ็ก€็š„ GraphQL ็ฑปๅž‹่ฏญ่จ€ไบ†ใ€‚ @@ -114,7 +114,7 @@ type Query { ไธ€ไธชๅฏน่ฑก็ฑปๅž‹ๆœ‰่‡ชๅทฑ็š„ๅๅญ—ๅ’Œๅญ—ๆฎต๏ผŒ่€ŒๆŸไบ›ๆ—ถๅ€™๏ผŒ่ฟ™ไบ›ๅญ—ๆฎตๅฟ…็„ถไผš่งฃๆžๅˆฐๅ…ทไฝ“ๆ•ฐๆฎใ€‚่ฟ™ๅฐฑๆ˜ฏๆ ‡้‡็ฑปๅž‹็š„ๆฅๆบ๏ผšๅฎƒไปฌ่กจ็คบๅฏนๅบ” GraphQL ๆŸฅ่ฏข็š„ๅถๅญ่Š‚็‚นใ€‚ -ไธ‹ๅˆ—ๆŸฅ่ฏขไธญ๏ผŒ`name` ๅ’Œ `appearsIn` ๅฐ†่งฃๆžๅˆฐๆ ‡้‡็ฑปๅž‹๏ผš +ไธ‹ๅˆ—ๆŸฅ่ฏขไธญ๏ผŒ`name` ๅ’Œ `appearsIn` ๅญ—ๆฎตๅฐ†่งฃๆžๅˆฐๆ ‡้‡็ฑปๅž‹๏ผš ```graphql # { "graphiql": true } @@ -148,7 +148,7 @@ scalar Date ไนŸ็งฐไฝœ**ๆžšไธพ๏ผˆenum๏ผ‰**๏ผŒๆžšไธพ็ฑปๅž‹ๆ˜ฏไธ€็ง็‰นๆฎŠ็š„ๆ ‡้‡๏ผŒๅฎƒ้™ๅˆถๅœจไธ€ไธช็‰นๆฎŠ็š„ๅฏ้€‰ๅ€ผ้›†ๅˆๅ†…ใ€‚่ฟ™่ฎฉไฝ ่ƒฝๅคŸ๏ผš -1. ้ชŒ่ฏ่ฟ™ไธช็ฑปๅž‹็š„ไปปไฝ•ๅ‚ๆ•ฐๆ˜ฏๅฏ้€‰ๅ€ผ็š„็š„ๆŸไธ€ไธช +1. ้ชŒ่ฏ่ฟ™ไธช็ฑปๅž‹็š„ไปปไฝ•ๅ‚ๆ•ฐๆ˜ฏๅฏ้€‰ๅ€ผ็š„ๆŸไธ€ไธช 2. ไธŽ็ฑปๅž‹็ณป็ปŸๆฒŸ้€š๏ผŒไธ€ไธชๅญ—ๆฎตๆ€ปๆ˜ฏไธ€ไธชๆœ‰้™ๅ€ผ้›†ๅˆ็š„ๅ…ถไธญไธ€ไธชๅ€ผใ€‚ ไธ‹้ขๆ˜ฏไธ€ไธช็”จ GraphQL schema ่ฏญ่จ€่กจ็คบ็š„ enum ๅฎšไน‰๏ผš @@ -305,12 +305,13 @@ union SearchResult = Human | Droid | Starship ๅœจๆˆ‘ไปฌ็š„schemaไธญ๏ผŒไปปไฝ•่ฟ”ๅ›žไธ€ไธช `SearchResult` ็ฑปๅž‹็š„ๅœฐๆ–น๏ผŒ้ƒฝๅฏ่ƒฝๅพ—ๅˆฐไธ€ไธช `Human`ใ€`Droid` ๆˆ–่€… `Starship`ใ€‚ๆณจๆ„๏ผŒ่”ๅˆ็ฑปๅž‹็š„ๆˆๅ‘˜้œ€่ฆๆ˜ฏๅ…ทไฝ“ๅฏน่ฑก็ฑปๅž‹๏ผ›ไฝ ไธ่ƒฝไฝฟ็”จๆŽฅๅฃๆˆ–่€…ๅ…ถไป–่”ๅˆ็ฑปๅž‹ๆฅๅˆ›้€ ไธ€ไธช่”ๅˆ็ฑปๅž‹ใ€‚ -่ฟ™ๆ—ถๅ€™๏ผŒๅฆ‚ๆžœไฝ ้œ€่ฆๆŸฅ่ฏขไธ€ไธช่ฟ”ๅ›ž `SearchResult` ่”ๅˆ็ฑปๅž‹็š„ๅญ—ๆฎต๏ผŒ้‚ฃไนˆไฝ ๅพ—ไฝฟ็”จๆกไปถ็‰‡ๆฎตๆ‰่ƒฝๆŸฅ่ฏขไปปๆ„ๅญ—ๆฎตใ€‚ +่ฟ™ๆ—ถๅ€™๏ผŒๅฆ‚ๆžœไฝ ้œ€่ฆๆŸฅ่ฏขไธ€ไธช่ฟ”ๅ›ž `SearchResult` ่”ๅˆ็ฑปๅž‹็š„ๅญ—ๆฎต๏ผŒ้‚ฃไนˆไฝ ๅพ—ไฝฟ็”จๅ†…่”็‰‡ๆฎตๆ‰่ƒฝๆŸฅ่ฏขไปปๆ„ๅญ—ๆฎตใ€‚ ```graphql # { "graphiql": true} { search(text: "an") { + __typename ... on Human { name height @@ -327,6 +328,33 @@ union SearchResult = Human | Droid | Starship } ``` +`_typename` ๅญ—ๆฎต่งฃๆžไธบ `String`๏ผŒๅฎƒๅ…่ฎธไฝ ๅœจๅฎขๆˆท็ซฏๅŒบๅˆ†ไธๅŒ็š„ๆ•ฐๆฎ็ฑปๅž‹ใ€‚ + +ๆญคๅค–๏ผŒๅœจ่ฟ™็งๆƒ…ๅ†ตไธ‹๏ผŒ็”ฑไบŽ `Human` ๅ’Œ `Droid` ๅ…ฑไบซไธ€ไธชๅ…ฌๅ…ฑๆŽฅๅฃ๏ผˆ`Character`๏ผ‰๏ผŒไฝ ๅฏไปฅๅœจไธ€ไธชๅœฐๆ–นๆŸฅ่ฏขๅฎƒไปฌ็š„ๅ…ฌๅ…ฑๅญ—ๆฎต๏ผŒ่€Œไธๅฟ…ๅœจๅคšไธช็ฑปๅž‹ไธญ้‡ๅค็›ธๅŒ็š„ๅญ—ๆฎต๏ผš + +```graphql +{ + search(text: "an") { + __typename + ... on Character { + name + } + ... on Human { + height + } + ... on Droid { + primaryFunction + } + ... on Starship { + name + length + } + } +} +``` + +ๆณจๆ„ `name` ไป็„ถ้œ€่ฆๆŒ‡ๅฎšๅœจ `Starship` ไธŠ๏ผŒๅฆๅˆ™ๅฎƒไธไผšๅ‡บ็Žฐๅœจ็ป“ๆžœไธญ๏ผŒๅ› ไธบ `Starship` ๅนถไธๆ˜ฏไธ€ไธช `Character`๏ผ + ### ่พ“ๅ…ฅ็ฑปๅž‹๏ผˆInput Types๏ผ‰ ็›ฎๅ‰ไธบๆญข๏ผŒๆˆ‘ไปฌๅช่ฎจ่ฎบ่ฟ‡ๅฐ†ไพ‹ๅฆ‚ๆžšไธพๅ’Œๅญ—็ฌฆไธฒ็ญ‰ๆ ‡้‡ๅ€ผไฝœไธบๅ‚ๆ•ฐไผ ้€’็ป™ๅญ—ๆฎต๏ผŒไฝ†ๆ˜ฏไฝ ไนŸ่ƒฝๅพˆๅฎนๆ˜“ๅœฐไผ ้€’ๅคๆ‚ๅฏน่ฑกใ€‚่ฟ™ๅœจๅ˜ๆ›ด๏ผˆmutation๏ผ‰ไธญ็‰นๅˆซๆœ‰็”จ๏ผŒๅ› ไธบๆœ‰ๆ—ถๅ€™ไฝ ้œ€่ฆไผ ้€’ไธ€ๆ•ดไธชๅฏน่ฑกไฝœไธบๆ–ฐๅปบๅฏน่ฑกใ€‚ๅœจ GraphQL schema language ไธญ๏ผŒ่พ“ๅ…ฅๅฏน่ฑก็œ‹ไธŠๅŽปๅ’Œๅธธ่ง„ๅฏน่ฑกไธ€ๆจกไธ€ๆ ท๏ผŒ้™คไบ†ๅ…ณ้”ฎๅญ—ๆ˜ฏ `input` ่€Œไธๆ˜ฏ `type`๏ผš diff --git a/site/learn/Learn-Validation.md b/src/content/learn/Learn-Validation.md similarity index 99% rename from site/learn/Learn-Validation.md rename to src/content/learn/Learn-Validation.md index 44e8d5b7f4..3659feee59 100644 --- a/site/learn/Learn-Validation.md +++ b/src/content/learn/Learn-Validation.md @@ -1,6 +1,6 @@ --- title: ้ชŒ่ฏ -layout: ../_core/DocsLayout +layout: docs category: ๅญฆไน  permalink: /learn/validation/ next: /learn/execution/ diff --git a/src/pages/blog.tsx b/src/pages/blog.tsx new file mode 100644 index 0000000000..b6d553b727 --- /dev/null +++ b/src/pages/blog.tsx @@ -0,0 +1,90 @@ +import React from "react" +import Layout from "../components/Layout" +import BlogPost from "../components/BlogPost" +import BlogSidebar from "../components/BlogSidebar" +import { graphql } from "gatsby" + +export default ({ pageContext, data }: any) => { + const posts = data.allMarkdownRemark.edges + .map((e: any) => e.node) + .sort((a: any, b: any) => { + const aDate = new Date(a.frontmatter.date) + const bDate = new Date(b.frontmatter.date) + if (aDate > bDate) { + return -1 + } else if (aDate < bDate) { + return 1 + } + return 0 + }) + + return ( + +
    +
    +
    + {posts.map( + ( + { + frontmatter: { + title, + date, + permalink, + byline, + guestBio, + tags, + }, + rawMarkdownBody, + excerpt, + }: any, + i + ) => ( + + ) + )} +
    + +
    +
    +
    + ) +} + +export const query = graphql` + query getAllBlogPosts { + allMarkdownRemark( + filter: { frontmatter: { permalink: { regex: "/blog/" } } } + ) { + edges { + node { + frontmatter { + title + date + permalink + byline + guestBio + sublinks + layout + tags + } + id + excerpt + rawMarkdownBody + } + } + } + } +` diff --git a/src/pages/code.tsx b/src/pages/code.tsx new file mode 100644 index 0000000000..1b9e0ca9c0 --- /dev/null +++ b/src/pages/code.tsx @@ -0,0 +1,258 @@ +import { AnchorLink } from "gatsby-plugin-anchor-links" +import React, { useState } from "react" +import Layout from "../components/Layout" +import Marked from "../components/Marked" +import { toSlug } from "../utils/slug" + +export function buildLanguagesMenu(pageContext: any) { + return ( +
    + {pageContext.languageList.map(({ name: languageName }) => { + const slug = toSlug(languageName) + return ( + + {languageName} + + ) + })} +
    + ) +} + +export function buildLibraryContent(library: any, pageContext: any) { + const [ overflown, setOverflown ] = useState(false); + const [ expanded, setExpanded ] = useState(false); + return ( +
    +
    + +

    {library.name}

    +
    + {library.github && ( + + )} + {library.npm && ( + + )} + {library.gem && ( + + )} + {library.lastRelease && ( +
    + Last Release + {library.formattedLastRelease} +
    + )} + {library.stars && ( +
    + Stars + {library.formattedStars} +
    + )} + {library.license && ( +
    + License + {library.license} +
    + )} + {library.howto ? ( +
    + {library.description} +
    + ) : ( +
    + )} +
    +
    +
    { + if (el && !overflown) { + setOverflown(el.clientHeight < el.scrollHeight) + } + }} + > + + {library.howto || library.description} + +
    + {overflown && ( +
    setExpanded(true)}> + +
    + )} +
    +
    + ) +} + +export function buildLibraryList(libraries: any[], pageContext: any) { + return ( +
    + {libraries.map(library => buildLibraryContent(library, pageContext))} +
    + ) +} + +export function buildLibraryCategoryContent( + libraryCategories: any[], + libraryCategoryName: string, + slug: string, + pageContext: any +) { + if (libraryCategoryName in libraryCategories) { + const libraries = libraryCategories[libraryCategoryName as any] + return ( +
    +

    {libraryCategoryName}

    + {buildLibraryList(libraries, pageContext)} +
    + ) + } + return +} + +const categorySlugMap = [ + ["Server", toSlug("Server")], + ["Client", toSlug("Client")], + ["Tools", toSlug("Tools")], +] + +export function buildLanguagesContent(pageContext: any) { + const elements = [] + for (const languageObj of pageContext.languageList) { + const languageName = languageObj.name + const libraryCategories = languageObj.categoryMap + const filteredCategorySlugMap = categorySlugMap.filter( + ([libraryCategoryName]) => + libraryCategories[libraryCategoryName as any]?.length + ) + const languageSlug = toSlug(languageName) + elements.push( +
    +
    +

    {languageName}

    + {filteredCategorySlugMap.length > 1 && ( +

    + {filteredCategorySlugMap.map( + ([libraryCategoryName, categorySlug], i) => ( + <> + + {libraryCategoryName} + + {i < filteredCategorySlugMap.length - 1 && " / "} + + ) + )} +

    + )} +
    +
    + {filteredCategorySlugMap.map(([categoryName, categorySlug]) => + buildLibraryCategoryContent( + libraryCategories, + categoryName, + `${languageSlug}-${categorySlug}`, + pageContext + ) + )} +
    +
    + ) + } + return
    {elements}
    +} + +export default ({ pageContext }: any) => { + return ( + +
    +
    +

    Code

    +

    using GraphQL

    +
    +
    +
    +
    +
    +
    +

    + Because GraphQL is a communication pattern, there are many tools + to help you get started working which support GraphQL in all + sorts of languages. +

    +
    +

    Go to

    +
    + +

    Language Support

    +
    + +

    Tools

    +
    + +

    Services

    +
    +
    +
    +
    + +

    + Language Support +

    + {buildLanguagesMenu(pageContext)} + {buildLanguagesContent(pageContext)} +

    + + Tools + + # + +

    + {buildLibraryList(pageContext.otherLibraries.Tools, pageContext)} +

    + + Services + + # + +

    + {buildLibraryList(pageContext.otherLibraries.Services, pageContext)} +
    +
    +

    Want to improve this page? See the docs here.

    +
    +
    + ) +} diff --git a/src/pages/faq.tsx b/src/pages/faq.tsx new file mode 100644 index 0000000000..9b0b9530c2 --- /dev/null +++ b/src/pages/faq.tsx @@ -0,0 +1,70 @@ +import React from "react" +import Layout from "../components/Layout" +import FAQSection from "../components/FAQSection" +import { graphql } from "gatsby" +import { useFAQAccordion } from "../utils/useFAQAccordion" + +export default ({ pageContext, data }: any) => { + useFAQAccordion() + + const sections = data.allMarkdownRemark.edges + .map((e: any) => e.node) + .sort((a: any, b: any) => { + const aPosition = a.frontmatter.position + const bPosition = b.frontmatter.position + if (aPosition < bPosition) { + return -1 + } + return 1 + }) + + return ( + +
    +
    +
    +

    Frequently Asked Questions (FAQ)

    +
    + {sections.map( + ( + { + frontmatter: { title, permalink }, + rawMarkdownBody, + }: any, + i + ) => ( + + ) + )} +
    +
    +
    +
    +
    + ) +} + +export const query = graphql` + query getAllFAQSections { + allMarkdownRemark( + filter: { frontmatter: { permalink: { regex: "/faq/" } } } + ) { + edges { + node { + frontmatter { + title + position + } + id + rawMarkdownBody + } + } + } + } +` diff --git a/src/pages/foundation/members.tsx b/src/pages/foundation/members.tsx new file mode 100644 index 0000000000..a8badf01a6 --- /dev/null +++ b/src/pages/foundation/members.tsx @@ -0,0 +1,41 @@ +import React from "react" +import Layout from "../../components/Layout" + +export default ({ pageContext }) => { + return ( + +
    +
    +

    GraphQL Foundation members

    +

    + The GraphQL Foundation is the primary way in which funding is + raised and distributed to support essential GraphQL community programs. The members + listed on this page are directly invested in the success and long-term sustainability of + the GraphQL community. +

    +

    + To learn more about the GraphQL Foundation and becoming a + member, please see our FAQ, + reach out to membership@graphql.org, or complete a membership application. +

    +
    + + +
    +
    + ) +} diff --git a/src/pages/index.tsx b/src/pages/index.tsx new file mode 100644 index 0000000000..43700c6e03 --- /dev/null +++ b/src/pages/index.tsx @@ -0,0 +1,30 @@ +import React from "react" +import Layout from "../components/Layout" + +import Hero from "../Containers/Sections/Hero" +import SingleRequest from "../Containers/Sections/SingleRequest" +import TypeSystem from "../Containers/Sections/TypeSystem" +import PredictableResults from "../Containers/Sections/PredictableResults" +import BringYourOwnData from "../Containers/Sections/BringYourOwnCode" +import WithoutVersions from "../Containers/Sections/WithoutVersion" +import PowerFulTools from "../Containers/Sections/PowerFulTools" +import WhosUsing from "../Containers/Sections/WhosUsing" + +export default ({ pageContext }) => { + return ( + + +
    +

    ไธ€็ง็”จไบŽ API ็š„ๆŸฅ่ฏข่ฏญ่จ€

    +

    GraphQL ๆ—ขๆ˜ฏไธ€็ง็”จไบŽ API ็š„ๆŸฅ่ฏข่ฏญ่จ€ไนŸๆ˜ฏไธ€ไธชๆปก่ถณไฝ ๆ•ฐๆฎๆŸฅ่ฏข็š„่ฟ่กŒๆ—ถใ€‚ GraphQL ๅฏนไฝ ็š„ API ไธญ็š„ๆ•ฐๆฎๆไพ›ไบ†ไธ€ๅฅ—ๆ˜“ไบŽ็†่งฃ็š„ๅฎŒๆ•ดๆ่ฟฐ๏ผŒไฝฟๅพ—ๅฎขๆˆท็ซฏ่ƒฝๅคŸๅ‡†็กฎๅœฐ่Žทๅพ—ๅฎƒ้œ€่ฆ็š„ๆ•ฐๆฎ๏ผŒ่€Œไธ”ๆฒกๆœ‰ไปปไฝ•ๅ†—ไฝ™๏ผŒไนŸ่ฎฉ API ๆ›ดๅฎนๆ˜“ๅœฐ้š็€ๆ—ถ้—ดๆŽจ็งป่€Œๆผ”่ฟ›๏ผŒ่ฟ˜่ƒฝ็”จไบŽๆž„ๅปบๅผบๅคง็š„ๅผ€ๅ‘่€…ๅทฅๅ…ทใ€‚

    +
    + + + + + + + +
    + ) + } diff --git a/src/pages/users.tsx b/src/pages/users.tsx new file mode 100644 index 0000000000..0c9ed32879 --- /dev/null +++ b/src/pages/users.tsx @@ -0,0 +1,36 @@ +import React from "react" +import Layout from "../components/Layout" + +export default ({ pageContext }) => { + return ( + +
    +
    +

    ่ฐๅœจไฝฟ็”จ GraphQL๏ผŸ

    +

    + GraphQL ๅทฒ็ป่ขซๅ„็งไฝ“้‡็š„ๅ›ข้˜Ÿๆ‰€ไฝฟ็”จ๏ผŒๅœจไธๅŒ็š„็Žฏๅขƒใ€ไธๅŒ็š„่ฏญ่จ€ไธ‹๏ผŒ็”จไบŽๅขžๅผบ็งปๅŠจๅบ”็”จใ€็ฝ‘็ซ™ๅ’Œ APIใ€‚ +

    +

    + ไฝ ็š„ๅ…ฌๅธไนŸๅœจไฝฟ็”จ GraphQL ๅ—๏ผŸ
    + ่ฏทๅ‚่€ƒ ่ฏดๆ˜Žๆ–‡ๆกฃ ๆฅๅ‘ GraphQL Landscape ๆไบคไฝ ็š„ๆ‹‰ๅ–่ฏทๆฑ‚ๅงใ€‚ +

    +
    + + +
    +
    + ) +} diff --git a/src/templates/doc.tsx b/src/templates/doc.tsx new file mode 100644 index 0000000000..7d25d05d51 --- /dev/null +++ b/src/templates/doc.tsx @@ -0,0 +1,88 @@ +import React from "react" +import { graphql } from "gatsby" +import Layout from "../components/Layout" +import DocsLayout from "../components/DocsLayout" +import FoundationLayout from "../components/FoundationLayout" +import BlogLayout from "../components/BlogLayout" +import CodeLayout from "../components/CodeLayout" +import FAQLayout from "../components/FAQLayout" + +interface Props { + data: any + pageContext: any +} + +const layoutMap: any = { + docs: DocsLayout, + foundation: FoundationLayout, + blog: BlogLayout, + code: CodeLayout, + faq: FAQLayout, +} + +const Blog = ({ data, pageContext }: Props) => { + const { + doc: { + frontmatter: { + title, + date, + heroText, + permalink, + byline, + guestBio, + layout, + tags, + }, + rawMarkdownBody, + }, + nextDoc, + } = data + const InnerLayout = layoutMap[layout] + return ( + + + + ) +} + +export const query = graphql` + query LearnQuery($permalink: String!, $nextPermalink: String) { + doc: markdownRemark(frontmatter: { permalink: { eq: $permalink } }) { + frontmatter { + title + heroText + date + permalink + byline + guestBio + sublinks + layout + tags + } + id + rawMarkdownBody + } + nextDoc: markdownRemark( + frontmatter: { permalink: { eq: $nextPermalink } } + ) { + frontmatter { + title + permalink + } + } + } +` + +export default Blog diff --git a/src/templates/tags.tsx b/src/templates/tags.tsx new file mode 100644 index 0000000000..1730241da4 --- /dev/null +++ b/src/templates/tags.tsx @@ -0,0 +1,95 @@ +import React from "react" +import Layout from "../components/Layout" +import BlogPost from "../components/BlogPost" +import BlogSidebar from "../components/BlogSidebar" +import { graphql } from "gatsby" + +export default ({ pageContext, data }: any) => { + const { tag } = pageContext + const allPosts = data.allMarkdownRemark.edges + .map((e: any) => e.node) + .sort((a: any, b: any) => { + const aDate = new Date(a.frontmatter.date) + const bDate = new Date(b.frontmatter.date) + if (aDate > bDate) { + return -1 + } else if (aDate < bDate) { + return 1 + } + return 0 + }) + + const taggedPosts = allPosts.filter((post: any) => + post.frontmatter.tags.includes(tag) + ) + + return ( + +
    +
    +
    + {taggedPosts.map( + ( + { + frontmatter: { + title, + date, + permalink, + byline, + guestBio, + tags, + }, + rawMarkdownBody, + excerpt, + }: any, + i + ) => ( + + ) + )} +
    + +
    +
    +
    + ) +} + +export const query = graphql` + query { + allMarkdownRemark( + filter: { frontmatter: { permalink: { regex: "/blog/" } } } + ) { + edges { + node { + frontmatter { + title + date + permalink + byline + guestBio + sublinks + layout + tags + } + id + excerpt + rawMarkdownBody + } + } + } + } +` diff --git a/src/utils/slug.ts b/src/utils/slug.ts new file mode 100644 index 0000000000..080eaf1823 --- /dev/null +++ b/src/utils/slug.ts @@ -0,0 +1,30 @@ +export const toSlug = (string: string) => { + // var accents = "ร รกรครขรจรฉรซรชรฌรญรฏรฎรฒรณรถรดรนรบรผรปรฑรง"; + var accents = + "\u00e0\u00e1\u00e4\u00e2\u00e8" + + "\u00e9\u00eb\u00ea\u00ec\u00ed\u00ef" + + "\u00ee\u00f2\u00f3\u00f6\u00f4\u00f9" + + "\u00fa\u00fc\u00fb\u00f1\u00e7" + + var without = "aaaaeeeeiiiioooouuuunc" + + return ( + String(string) + // Handle uppercase characters + .toLowerCase() + + // Handle accentuated characters + .replace(new RegExp("[" + accents + "]", "g"), function (c) { + return without.charAt(accents.indexOf(c)) + }) + + // Dash special characters + .replace(/[^a-z0-9]/g, "-") + + // Compress multiple dash + .replace(/-+/g, "-") + + // Trim dashes + .replace(/^-|-$/g, "") + ) +} diff --git a/src/utils/useFAQAccordion.ts b/src/utils/useFAQAccordion.ts new file mode 100644 index 0000000000..73452c0abb --- /dev/null +++ b/src/utils/useFAQAccordion.ts @@ -0,0 +1,83 @@ +import React, { useEffect, useState } from "react" + +const nextUntil = (elem: any, selector: string) => { + const siblings = [] + let nextElement = elem.nextElementSibling + + while (nextElement) { + if (nextElement.matches(selector)) break + + siblings.push(nextElement) + + nextElement = nextElement.nextElementSibling + } + + return siblings +} + +export const useFAQAccordion = () => { + const [buttonCreated, setButtonCreated] = useState(false) + const toggleChildrenClass = (element: React.ReactNode) => { + Array.from(nextUntil(element, "button")).map(p => + p.classList.toggle("show") + ) + } + + useEffect(() => { + const hash = window.location.hash ? window.location.hash.split("#")[1] : "" + + if (hash && buttonCreated) { + const anchor = document && document.getElementById(hash) + const heading: any = anchor && anchor.parentNode + + if (heading) { + heading.parentNode.classList.toggle("open") + heading.classList.toggle("open") + toggleChildrenClass(heading.parentNode) + } + } + }, [buttonCreated]) + + useEffect(() => { + const allH3 = document.querySelectorAll("h3") + + Array.from(allH3).forEach(h3 => { + const button = document.createElement("button") + button.classList.add("faq-button-question") + h3.parentNode?.insertBefore(button, h3) + button.appendChild(h3) + setButtonCreated(true) + }) + }, []) + + useEffect(() => { + const toggleClasses = (e: any) => { + if (e.target.localName !== "button" && e.target.localName !== "h3") return + + const element = + e.target.localName === "button" ? e.target : e.target.parentNode + + + window.history.replaceState( + {}, + "", + "#" + e.target.getElementsByTagName("a")[0].id + ) + window.history.scrollRestoration = "manual" + + if (e.target.localName === "button") { + e.target.classList.toggle("open") + e.target.getElementsByTagName("h3")[0].classList.toggle("open") + } else { + e.target.classList.toggle("open") + e.target.parentNode.classList.toggle("open") + } + + toggleChildrenClass(element) + } + + document.addEventListener("click", toggleClasses) + + return () => document.removeEventListener("click", toggleClasses) + }, [typeof window !== 'undefined' ? window.location.hash : null]) +} \ No newline at end of file diff --git a/site/CNAME b/static/CNAME similarity index 100% rename from site/CNAME rename to static/CNAME diff --git a/static/_redirects b/static/_redirects new file mode 100644 index 0000000000..ca92c9f573 --- /dev/null +++ b/static/_redirects @@ -0,0 +1,25 @@ +# 200 = reverse proxy rules +# https://www.netlify.com/docs/redirects/#rewrites-and-proxying + +/swapi-graphql https://graphql.github.io/swapi-graphql/ 200 +/swapi-graphql/* https://graphql.github.io/swapi-graphql/:splat 200 + +# 301 = permanent redirects +# https://www.netlify.com/docs/redirects/#http-status-codes + +/docs/api-reference-errors /graphql-js/error/ 301 +/docs/api-reference-execution /graphql-js/execution/ 301 +/docs/api-reference-express-graphql /graphql-js/express-graphql/ 301 +/docs/api-reference-graphql /graphql-js/graphql/ 301 +/docs/api-reference-language /graphql-js/language/ 301 +/docs/api-reference-type-system /graphql-js/type/ 301 +/docs/api-reference-type-utilities /graphql-js/utilities/ 301 +/docs/api-reference-type-validation /graphql-js/validation/ 301 +/docs/getting-started /learn/ 301 +/docs/intro /learn/ 301 +/docs/introspection /learn/introspection/ 301 +/docs/queries /learn/queries/ 301 +/docs/typesystem /learn/schema/ 301 +/docs/validation /learn/validation/ 301 +/docs/videos /community/#videos 301 +/help /community/ 301 diff --git a/site/favicon.ico b/static/favicon.ico similarity index 100% rename from site/favicon.ico rename to static/favicon.ico diff --git a/static/files/GraphQL_Foundation-Participation_Agreement-Preview.pdf b/static/files/GraphQL_Foundation-Participation_Agreement-Preview.pdf new file mode 100644 index 0000000000..5977e7cac7 Binary files /dev/null and b/static/files/GraphQL_Foundation-Participation_Agreement-Preview.pdf differ diff --git a/static/files/LF_Membership-Preview.pdf b/static/files/LF_Membership-Preview.pdf new file mode 100644 index 0000000000..f8526705c2 Binary files /dev/null and b/static/files/LF_Membership-Preview.pdf differ diff --git a/static/img/blog/20160502-rest-api-graphql-wrapper/dataloader-query.png b/static/img/blog/20160502-rest-api-graphql-wrapper/dataloader-query.png new file mode 100644 index 0000000000..8da76bae52 Binary files /dev/null and b/static/img/blog/20160502-rest-api-graphql-wrapper/dataloader-query.png differ diff --git a/static/img/blog/20160502-rest-api-graphql-wrapper/pathological-query.png b/static/img/blog/20160502-rest-api-graphql-wrapper/pathological-query.png new file mode 100644 index 0000000000..67ca988f18 Binary files /dev/null and b/static/img/blog/20160502-rest-api-graphql-wrapper/pathological-query.png differ diff --git a/static/img/blog/20160502-rest-api-graphql-wrapper/rest-api-people.png b/static/img/blog/20160502-rest-api-graphql-wrapper/rest-api-people.png new file mode 100644 index 0000000000..ebe9cffd31 Binary files /dev/null and b/static/img/blog/20160502-rest-api-graphql-wrapper/rest-api-people.png differ diff --git a/static/img/diagrams/business_layer.png b/static/img/diagrams/business_layer.png new file mode 100644 index 0000000000..87470e271c Binary files /dev/null and b/static/img/diagrams/business_layer.png differ diff --git a/static/img/downarrow.svg b/static/img/downarrow.svg new file mode 100644 index 0000000000..66d1586245 --- /dev/null +++ b/static/img/downarrow.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/favicon.png b/static/img/favicon.png new file mode 100644 index 0000000000..c803c5c397 Binary files /dev/null and b/static/img/favicon.png differ diff --git a/static/img/graph-wash.png b/static/img/graph-wash.png new file mode 100644 index 0000000000..678844a070 Binary files /dev/null and b/static/img/graph-wash.png differ diff --git a/static/img/graphal_foundation-logo-stacked.svg b/static/img/graphal_foundation-logo-stacked.svg new file mode 100644 index 0000000000..bf782aa9fc --- /dev/null +++ b/static/img/graphal_foundation-logo-stacked.svg @@ -0,0 +1,193 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/site/img/graphiql.mp4 b/static/img/graphiql.mp4 similarity index 100% rename from site/img/graphiql.mp4 rename to static/img/graphiql.mp4 diff --git a/static/img/graphql_foundation-hero.jpg b/static/img/graphql_foundation-hero.jpg new file mode 100644 index 0000000000..b9ecc462fe Binary files /dev/null and b/static/img/graphql_foundation-hero.jpg differ diff --git a/static/img/graphql_foundation-logo-white.svg b/static/img/graphql_foundation-logo-white.svg new file mode 100644 index 0000000000..ba2e3a2c42 --- /dev/null +++ b/static/img/graphql_foundation-logo-white.svg @@ -0,0 +1,229 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/graphql_foundation-logo.svg b/static/img/graphql_foundation-logo.svg new file mode 100644 index 0000000000..9e88049d2c --- /dev/null +++ b/static/img/graphql_foundation-logo.svg @@ -0,0 +1,197 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/hello.png b/static/img/hello.png new file mode 100644 index 0000000000..e1d56100da Binary files /dev/null and b/static/img/hello.png differ diff --git a/static/img/logo-gray.svg b/static/img/logo-gray.svg new file mode 100644 index 0000000000..a61c0167ab --- /dev/null +++ b/static/img/logo-gray.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/logo.svg b/static/img/logo.svg new file mode 100644 index 0000000000..e46a30b59a --- /dev/null +++ b/static/img/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/logos/gsoc.svg b/static/img/logos/gsoc.svg new file mode 100644 index 0000000000..d8bc8cd4e8 --- /dev/null +++ b/static/img/logos/gsoc.svg @@ -0,0 +1,41 @@ + + + + logo_lockup_summer_of_code_horizontal_Roboto + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/static/img/news/annual-report-1.png b/static/img/news/annual-report-1.png new file mode 100644 index 0000000000..2acb7e540b Binary files /dev/null and b/static/img/news/annual-report-1.png differ diff --git a/static/img/news/annual-report-2.png b/static/img/news/annual-report-2.png new file mode 100644 index 0000000000..8cc7554213 Binary files /dev/null and b/static/img/news/annual-report-2.png differ diff --git a/static/img/news/annual-report-3.png b/static/img/news/annual-report-3.png new file mode 100644 index 0000000000..6600d67828 Binary files /dev/null and b/static/img/news/annual-report-3.png differ diff --git a/static/img/news/annual-report-4.png b/static/img/news/annual-report-4.png new file mode 100644 index 0000000000..ed6e80dee7 Binary files /dev/null and b/static/img/news/annual-report-4.png differ diff --git a/static/img/news/graphiql-parser.png b/static/img/news/graphiql-parser.png new file mode 100644 index 0000000000..44be5b6d25 Binary files /dev/null and b/static/img/news/graphiql-parser.png differ diff --git a/static/img/news/playground-transition-banner.png b/static/img/news/playground-transition-banner.png new file mode 100644 index 0000000000..e5258341f2 Binary files /dev/null and b/static/img/news/playground-transition-banner.png differ diff --git a/static/img/og_image.png b/static/img/og_image.png new file mode 100644 index 0000000000..6cd0d29f7d Binary files /dev/null and b/static/img/og_image.png differ diff --git a/static/img/oss_logo.png b/static/img/oss_logo.png new file mode 100644 index 0000000000..726ccdd9bd Binary files /dev/null and b/static/img/oss_logo.png differ diff --git a/static/img/phone.svg b/static/img/phone.svg new file mode 100644 index 0000000000..194c827b44 --- /dev/null +++ b/static/img/phone.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/report/amazon-web-services.svg b/static/img/report/amazon-web-services.svg new file mode 100644 index 0000000000..4760c9b813 --- /dev/null +++ b/static/img/report/amazon-web-services.svg @@ -0,0 +1 @@ +Amazon Web Services logo \ No newline at end of file diff --git a/static/img/report/apollo-graphql.svg b/static/img/report/apollo-graphql.svg new file mode 100644 index 0000000000..3ba8f37b61 --- /dev/null +++ b/static/img/report/apollo-graphql.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/report/expedia-group.svg b/static/img/report/expedia-group.svg new file mode 100644 index 0000000000..aa42b07ba8 --- /dev/null +++ b/static/img/report/expedia-group.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + diff --git a/static/img/report/facebook.svg b/static/img/report/facebook.svg new file mode 100644 index 0000000000..8bed232831 --- /dev/null +++ b/static/img/report/facebook.svg @@ -0,0 +1 @@ +facebook \ No newline at end of file diff --git a/static/img/report/hasura.svg b/static/img/report/hasura.svg new file mode 100644 index 0000000000..c17349e8cf --- /dev/null +++ b/static/img/report/hasura.svg @@ -0,0 +1 @@ +Hasura Technologies (member) logo \ No newline at end of file diff --git a/static/img/report/ibm.svg b/static/img/report/ibm.svg new file mode 100644 index 0000000000..08bbfc7a58 --- /dev/null +++ b/static/img/report/ibm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/report/novvum.svg b/static/img/report/novvum.svg new file mode 100644 index 0000000000..f92e564e5c --- /dev/null +++ b/static/img/report/novvum.svg @@ -0,0 +1,15 @@ + + + + Novvum SQUARED + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/static/img/report/paypal.svg b/static/img/report/paypal.svg new file mode 100644 index 0000000000..150f7badbc --- /dev/null +++ b/static/img/report/paypal.svg @@ -0,0 +1,39 @@ + +image/svg+xml \ No newline at end of file diff --git a/static/img/report/salsify.svg b/static/img/report/salsify.svg new file mode 100644 index 0000000000..b52588935f --- /dev/null +++ b/static/img/report/salsify.svg @@ -0,0 +1,669 @@ + +image/svg+xml \ No newline at end of file diff --git a/static/img/search.png b/static/img/search.png new file mode 100644 index 0000000000..1701b1acb3 Binary files /dev/null and b/static/img/search.png differ diff --git a/static/img/search.svg b/static/img/search.svg new file mode 100644 index 0000000000..3eb4c178c5 --- /dev/null +++ b/static/img/search.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/server.svg b/static/img/server.svg new file mode 100644 index 0000000000..8c305d15bf --- /dev/null +++ b/static/img/server.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/twitter_image.png b/static/img/twitter_image.png new file mode 100644 index 0000000000..2f882ed5ae Binary files /dev/null and b/static/img/twitter_image.png differ diff --git a/static/users/logos/1stdibs.png b/static/users/logos/1stdibs.png new file mode 100644 index 0000000000..fd8b9a8119 Binary files /dev/null and b/static/users/logos/1stdibs.png differ diff --git a/static/users/logos/20minutes.png b/static/users/logos/20minutes.png new file mode 100644 index 0000000000..88d22b9f7d Binary files /dev/null and b/static/users/logos/20minutes.png differ diff --git a/static/users/logos/adayroi.png b/static/users/logos/adayroi.png new file mode 100644 index 0000000000..39ab693ba4 Binary files /dev/null and b/static/users/logos/adayroi.png differ diff --git a/static/users/logos/airbnb.png b/static/users/logos/airbnb.png new file mode 100644 index 0000000000..1ad1f2672a Binary files /dev/null and b/static/users/logos/airbnb.png differ diff --git a/static/users/logos/alembic.png b/static/users/logos/alembic.png new file mode 100644 index 0000000000..4a4de76564 Binary files /dev/null and b/static/users/logos/alembic.png differ diff --git a/static/users/logos/allocine.png b/static/users/logos/allocine.png new file mode 100644 index 0000000000..fb0f927aed Binary files /dev/null and b/static/users/logos/allocine.png differ diff --git a/static/users/logos/alphasights.png b/static/users/logos/alphasights.png new file mode 100644 index 0000000000..17fa070c46 Binary files /dev/null and b/static/users/logos/alphasights.png differ diff --git a/site/users/logos/amplitude.png b/static/users/logos/amplitude.png similarity index 100% rename from site/users/logos/amplitude.png rename to static/users/logos/amplitude.png diff --git a/static/users/logos/ants.png b/static/users/logos/ants.png new file mode 100644 index 0000000000..0c3f948671 Binary files /dev/null and b/static/users/logos/ants.png differ diff --git a/static/users/logos/appier.png b/static/users/logos/appier.png new file mode 100644 index 0000000000..7716581171 Binary files /dev/null and b/static/users/logos/appier.png differ diff --git a/static/users/logos/arangodb.png b/static/users/logos/arangodb.png new file mode 100644 index 0000000000..00934e72b5 Binary files /dev/null and b/static/users/logos/arangodb.png differ diff --git a/static/users/logos/artsy.png b/static/users/logos/artsy.png new file mode 100644 index 0000000000..9f8597702f Binary files /dev/null and b/static/users/logos/artsy.png differ diff --git a/static/users/logos/atlassian.png b/static/users/logos/atlassian.png new file mode 100644 index 0000000000..e83a4bff3d Binary files /dev/null and b/static/users/logos/atlassian.png differ diff --git a/static/users/logos/attendify.png b/static/users/logos/attendify.png new file mode 100644 index 0000000000..fe86e546ac Binary files /dev/null and b/static/users/logos/attendify.png differ diff --git a/static/users/logos/bazinga.png b/static/users/logos/bazinga.png new file mode 100644 index 0000000000..870c3a6654 Binary files /dev/null and b/static/users/logos/bazinga.png differ diff --git a/static/users/logos/blenderbottle.png b/static/users/logos/blenderbottle.png new file mode 100644 index 0000000000..485687b87e Binary files /dev/null and b/static/users/logos/blenderbottle.png differ diff --git a/static/users/logos/brewerybuddy.png b/static/users/logos/brewerybuddy.png new file mode 100644 index 0000000000..3b58610a4a Binary files /dev/null and b/static/users/logos/brewerybuddy.png differ diff --git a/static/users/logos/bright.png b/static/users/logos/bright.png new file mode 100644 index 0000000000..c19d918a35 Binary files /dev/null and b/static/users/logos/bright.png differ diff --git a/static/users/logos/buildkite.png b/static/users/logos/buildkite.png new file mode 100644 index 0000000000..d38d6dd2b1 Binary files /dev/null and b/static/users/logos/buildkite.png differ diff --git a/static/users/logos/bynder.png b/static/users/logos/bynder.png new file mode 100644 index 0000000000..90c240ac3f Binary files /dev/null and b/static/users/logos/bynder.png differ diff --git a/static/users/logos/cheddar.png b/static/users/logos/cheddar.png new file mode 100644 index 0000000000..5a8efe2fa2 Binary files /dev/null and b/static/users/logos/cheddar.png differ diff --git a/static/users/logos/circlehd.png b/static/users/logos/circlehd.png new file mode 100644 index 0000000000..9976dbc96a Binary files /dev/null and b/static/users/logos/circlehd.png differ diff --git a/static/users/logos/cloverleaf.png b/static/users/logos/cloverleaf.png new file mode 100644 index 0000000000..82b73ba55c Binary files /dev/null and b/static/users/logos/cloverleaf.png differ diff --git a/site/users/logos/clubmed.png b/static/users/logos/clubmed.png similarity index 100% rename from site/users/logos/clubmed.png rename to static/users/logos/clubmed.png diff --git a/static/users/logos/colectica.png b/static/users/logos/colectica.png new file mode 100644 index 0000000000..ca19452994 Binary files /dev/null and b/static/users/logos/colectica.png differ diff --git a/static/users/logos/commercetools.png b/static/users/logos/commercetools.png new file mode 100644 index 0000000000..d5020ee3e3 Binary files /dev/null and b/static/users/logos/commercetools.png differ diff --git a/static/users/logos/comparaonline.png b/static/users/logos/comparaonline.png new file mode 100644 index 0000000000..e866eb1d4e Binary files /dev/null and b/static/users/logos/comparaonline.png differ diff --git a/static/users/logos/conduit.png b/static/users/logos/conduit.png new file mode 100644 index 0000000000..38d2bf4284 Binary files /dev/null and b/static/users/logos/conduit.png differ diff --git a/static/users/logos/coursera.png b/static/users/logos/coursera.png new file mode 100644 index 0000000000..056f8d9252 Binary files /dev/null and b/static/users/logos/coursera.png differ diff --git a/static/users/logos/creditkarma.png b/static/users/logos/creditkarma.png new file mode 100644 index 0000000000..0c45e8a983 Binary files /dev/null and b/static/users/logos/creditkarma.png differ diff --git a/static/users/logos/curio.png b/static/users/logos/curio.png new file mode 100644 index 0000000000..d68e7a9f6a Binary files /dev/null and b/static/users/logos/curio.png differ diff --git a/static/users/logos/dailymotion.png b/static/users/logos/dailymotion.png new file mode 100644 index 0000000000..97fd2745ec Binary files /dev/null and b/static/users/logos/dailymotion.png differ diff --git a/static/users/logos/digitransit.png b/static/users/logos/digitransit.png new file mode 100644 index 0000000000..bb9d338f77 Binary files /dev/null and b/static/users/logos/digitransit.png differ diff --git a/static/users/logos/directlyrics.png b/static/users/logos/directlyrics.png new file mode 100644 index 0000000000..77f56af00e Binary files /dev/null and b/static/users/logos/directlyrics.png differ diff --git a/static/users/logos/drift.png b/static/users/logos/drift.png new file mode 100644 index 0000000000..4283b6bc40 Binary files /dev/null and b/static/users/logos/drift.png differ diff --git a/static/users/logos/duedil.png b/static/users/logos/duedil.png new file mode 100644 index 0000000000..9154b9a76c Binary files /dev/null and b/static/users/logos/duedil.png differ diff --git a/static/users/logos/eastview.png b/static/users/logos/eastview.png new file mode 100644 index 0000000000..5241bfd920 Binary files /dev/null and b/static/users/logos/eastview.png differ diff --git a/static/users/logos/easycarros.png b/static/users/logos/easycarros.png new file mode 100644 index 0000000000..0d963e5120 Binary files /dev/null and b/static/users/logos/easycarros.png differ diff --git a/static/users/logos/ediket.png b/static/users/logos/ediket.png new file mode 100644 index 0000000000..1abfa48105 Binary files /dev/null and b/static/users/logos/ediket.png differ diff --git a/static/users/logos/etmdb.png b/static/users/logos/etmdb.png new file mode 100644 index 0000000000..f2beadce9d Binary files /dev/null and b/static/users/logos/etmdb.png differ diff --git a/static/users/logos/expert360.png b/static/users/logos/expert360.png new file mode 100644 index 0000000000..bd976f6de5 Binary files /dev/null and b/static/users/logos/expert360.png differ diff --git a/static/users/logos/facebook.png b/static/users/logos/facebook.png new file mode 100644 index 0000000000..fc9906b062 Binary files /dev/null and b/static/users/logos/facebook.png differ diff --git a/static/users/logos/fairfaxmedia.png b/static/users/logos/fairfaxmedia.png new file mode 100644 index 0000000000..4fd8ed02ce Binary files /dev/null and b/static/users/logos/fairfaxmedia.png differ diff --git a/static/users/logos/filejet.png b/static/users/logos/filejet.png new file mode 100644 index 0000000000..b6e9a8e3cb Binary files /dev/null and b/static/users/logos/filejet.png differ diff --git a/static/users/logos/gentux.png b/static/users/logos/gentux.png new file mode 100644 index 0000000000..3ea9ec943b Binary files /dev/null and b/static/users/logos/gentux.png differ diff --git a/site/users/logos/getninjas.png b/static/users/logos/getninjas.png similarity index 100% rename from site/users/logos/getninjas.png rename to static/users/logos/getninjas.png diff --git a/static/users/logos/github.png b/static/users/logos/github.png new file mode 100644 index 0000000000..a118935cc1 Binary files /dev/null and b/static/users/logos/github.png differ diff --git a/site/users/logos/goalify.png b/static/users/logos/goalify.png similarity index 58% rename from site/users/logos/goalify.png rename to static/users/logos/goalify.png index 8cf0707905..1171922c45 100644 Binary files a/site/users/logos/goalify.png and b/static/users/logos/goalify.png differ diff --git a/static/users/logos/graphcms.png b/static/users/logos/graphcms.png new file mode 100644 index 0000000000..ce378c5253 Binary files /dev/null and b/static/users/logos/graphcms.png differ diff --git a/static/users/logos/graphcool.png b/static/users/logos/graphcool.png new file mode 100644 index 0000000000..fc63f6bc85 Binary files /dev/null and b/static/users/logos/graphcool.png differ diff --git a/static/users/logos/hackages.png b/static/users/logos/hackages.png new file mode 100644 index 0000000000..7827a0d7f8 Binary files /dev/null and b/static/users/logos/hackages.png differ diff --git a/static/users/logos/hasura.png b/static/users/logos/hasura.png new file mode 100644 index 0000000000..ecef5aa62d Binary files /dev/null and b/static/users/logos/hasura.png differ diff --git a/static/users/logos/hijup.png b/static/users/logos/hijup.png new file mode 100644 index 0000000000..6a83973874 Binary files /dev/null and b/static/users/logos/hijup.png differ diff --git a/static/users/logos/housinganywhere.png b/static/users/logos/housinganywhere.png new file mode 100644 index 0000000000..d885e8cb15 Binary files /dev/null and b/static/users/logos/housinganywhere.png differ diff --git a/static/users/logos/hsl.png b/static/users/logos/hsl.png new file mode 100644 index 0000000000..08e970f09a Binary files /dev/null and b/static/users/logos/hsl.png differ diff --git a/static/users/logos/hudl.png b/static/users/logos/hudl.png new file mode 100644 index 0000000000..f3d1b8f4b1 Binary files /dev/null and b/static/users/logos/hudl.png differ diff --git a/static/users/logos/icon-systems.png b/static/users/logos/icon-systems.png new file mode 100644 index 0000000000..f13d5b65bf Binary files /dev/null and b/static/users/logos/icon-systems.png differ diff --git a/static/users/logos/idobata.png b/static/users/logos/idobata.png new file mode 100644 index 0000000000..2b82bf45db Binary files /dev/null and b/static/users/logos/idobata.png differ diff --git a/static/users/logos/indonesiax.png b/static/users/logos/indonesiax.png new file mode 100644 index 0000000000..6bc8e3de14 Binary files /dev/null and b/static/users/logos/indonesiax.png differ diff --git a/static/users/logos/inerva.png b/static/users/logos/inerva.png new file mode 100644 index 0000000000..b67ef4820c Binary files /dev/null and b/static/users/logos/inerva.png differ diff --git a/static/users/logos/intuit.png b/static/users/logos/intuit.png new file mode 100644 index 0000000000..b1cfa115d9 Binary files /dev/null and b/static/users/logos/intuit.png differ diff --git a/static/users/logos/jusbrasil.png b/static/users/logos/jusbrasil.png new file mode 100644 index 0000000000..de410a9e20 Binary files /dev/null and b/static/users/logos/jusbrasil.png differ diff --git a/static/users/logos/klm.png b/static/users/logos/klm.png new file mode 100644 index 0000000000..cf10edcad5 Binary files /dev/null and b/static/users/logos/klm.png differ diff --git a/static/users/logos/leanix.png b/static/users/logos/leanix.png new file mode 100644 index 0000000000..132289835e Binary files /dev/null and b/static/users/logos/leanix.png differ diff --git a/static/users/logos/legendsoflearning.png b/static/users/logos/legendsoflearning.png new file mode 100644 index 0000000000..eb9fa1ad57 Binary files /dev/null and b/static/users/logos/legendsoflearning.png differ diff --git a/static/users/logos/lelivrescolaire.png b/static/users/logos/lelivrescolaire.png new file mode 100644 index 0000000000..d7ee53ac2b Binary files /dev/null and b/static/users/logos/lelivrescolaire.png differ diff --git a/static/users/logos/letsevents.png b/static/users/logos/letsevents.png new file mode 100644 index 0000000000..197980ed90 Binary files /dev/null and b/static/users/logos/letsevents.png differ diff --git a/static/users/logos/loggi.png b/static/users/logos/loggi.png new file mode 100644 index 0000000000..f782f604d0 Binary files /dev/null and b/static/users/logos/loggi.png differ diff --git a/static/users/logos/m1finance.png b/static/users/logos/m1finance.png new file mode 100644 index 0000000000..667d5de5dd Binary files /dev/null and b/static/users/logos/m1finance.png differ diff --git a/static/users/logos/make-school.png b/static/users/logos/make-school.png new file mode 100644 index 0000000000..5d92bee84e Binary files /dev/null and b/static/users/logos/make-school.png differ diff --git a/static/users/logos/medallia.png b/static/users/logos/medallia.png new file mode 100644 index 0000000000..d476f41b97 Binary files /dev/null and b/static/users/logos/medallia.png differ diff --git a/static/users/logos/meteor.png b/static/users/logos/meteor.png new file mode 100644 index 0000000000..08a5d70843 Binary files /dev/null and b/static/users/logos/meteor.png differ diff --git a/static/users/logos/metric-ai.png b/static/users/logos/metric-ai.png new file mode 100644 index 0000000000..6fabe07e3e Binary files /dev/null and b/static/users/logos/metric-ai.png differ diff --git a/static/users/logos/mixcloud.png b/static/users/logos/mixcloud.png new file mode 100644 index 0000000000..afe0cb9b9f Binary files /dev/null and b/static/users/logos/mixcloud.png differ diff --git a/static/users/logos/mojilala.png b/static/users/logos/mojilala.png new file mode 100644 index 0000000000..0a5c6e746a Binary files /dev/null and b/static/users/logos/mojilala.png differ diff --git a/static/users/logos/myheritage.png b/static/users/logos/myheritage.png new file mode 100644 index 0000000000..b68d1546f8 Binary files /dev/null and b/static/users/logos/myheritage.png differ diff --git a/static/users/logos/myntra.png b/static/users/logos/myntra.png new file mode 100644 index 0000000000..756bac1254 Binary files /dev/null and b/static/users/logos/myntra.png differ diff --git a/static/users/logos/nbc-news-digital.png b/static/users/logos/nbc-news-digital.png new file mode 100644 index 0000000000..6b42b5d4d1 Binary files /dev/null and b/static/users/logos/nbc-news-digital.png differ diff --git a/static/users/logos/neo4j_logo.png b/static/users/logos/neo4j_logo.png new file mode 100644 index 0000000000..6389fe0964 Binary files /dev/null and b/static/users/logos/neo4j_logo.png differ diff --git a/static/users/logos/newspring.png b/static/users/logos/newspring.png new file mode 100644 index 0000000000..d872e21d98 Binary files /dev/null and b/static/users/logos/newspring.png differ diff --git a/static/users/logos/ningensoft.png b/static/users/logos/ningensoft.png new file mode 100644 index 0000000000..9a98274254 Binary files /dev/null and b/static/users/logos/ningensoft.png differ diff --git a/static/users/logos/nova-ideo.png b/static/users/logos/nova-ideo.png new file mode 100644 index 0000000000..c8506e92d9 Binary files /dev/null and b/static/users/logos/nova-ideo.png differ diff --git a/static/users/logos/nyt.png b/static/users/logos/nyt.png new file mode 100644 index 0000000000..fa109d199f Binary files /dev/null and b/static/users/logos/nyt.png differ diff --git a/static/users/logos/okgrow.png b/static/users/logos/okgrow.png new file mode 100644 index 0000000000..33c8862533 Binary files /dev/null and b/static/users/logos/okgrow.png differ diff --git a/static/users/logos/ovos.png b/static/users/logos/ovos.png new file mode 100644 index 0000000000..da946937b3 Binary files /dev/null and b/static/users/logos/ovos.png differ diff --git a/static/users/logos/paypal.png b/static/users/logos/paypal.png new file mode 100644 index 0000000000..69ef56acc8 Binary files /dev/null and b/static/users/logos/paypal.png differ diff --git a/static/users/logos/persado.png b/static/users/logos/persado.png new file mode 100644 index 0000000000..90a7e67d80 Binary files /dev/null and b/static/users/logos/persado.png differ diff --git a/static/users/logos/pinterest.png b/static/users/logos/pinterest.png new file mode 100644 index 0000000000..275c8eb206 Binary files /dev/null and b/static/users/logos/pinterest.png differ diff --git a/static/users/logos/product-hunt.png b/static/users/logos/product-hunt.png new file mode 100644 index 0000000000..93dd571042 Binary files /dev/null and b/static/users/logos/product-hunt.png differ diff --git a/static/users/logos/project-september.png b/static/users/logos/project-september.png new file mode 100644 index 0000000000..d64b9cd8c8 Binary files /dev/null and b/static/users/logos/project-september.png differ diff --git a/static/users/logos/protel.png b/static/users/logos/protel.png new file mode 100644 index 0000000000..f1f850c57d Binary files /dev/null and b/static/users/logos/protel.png differ diff --git a/static/users/logos/prowl.png b/static/users/logos/prowl.png new file mode 100644 index 0000000000..84ebdde065 Binary files /dev/null and b/static/users/logos/prowl.png differ diff --git a/static/users/logos/quri.png b/static/users/logos/quri.png new file mode 100644 index 0000000000..f55d1045af Binary files /dev/null and b/static/users/logos/quri.png differ diff --git a/static/users/logos/redbubble.png b/static/users/logos/redbubble.png new file mode 100644 index 0000000000..53e806759f Binary files /dev/null and b/static/users/logos/redbubble.png differ diff --git a/static/users/logos/reindex.png b/static/users/logos/reindex.png new file mode 100644 index 0000000000..4874260400 Binary files /dev/null and b/static/users/logos/reindex.png differ diff --git a/static/users/logos/restorando.png b/static/users/logos/restorando.png new file mode 100644 index 0000000000..822725ca8b Binary files /dev/null and b/static/users/logos/restorando.png differ diff --git a/static/users/logos/salestock.png b/static/users/logos/salestock.png new file mode 100644 index 0000000000..7aa55d2b58 Binary files /dev/null and b/static/users/logos/salestock.png differ diff --git a/static/users/logos/scaphold.png b/static/users/logos/scaphold.png new file mode 100644 index 0000000000..c2a45b771c Binary files /dev/null and b/static/users/logos/scaphold.png differ diff --git a/static/users/logos/serverless.png b/static/users/logos/serverless.png new file mode 100644 index 0000000000..183a923689 Binary files /dev/null and b/static/users/logos/serverless.png differ diff --git a/static/users/logos/shopify.png b/static/users/logos/shopify.png new file mode 100644 index 0000000000..24311dd489 Binary files /dev/null and b/static/users/logos/shopify.png differ diff --git a/static/users/logos/sky.png b/static/users/logos/sky.png new file mode 100644 index 0000000000..ab70c0bd80 Binary files /dev/null and b/static/users/logos/sky.png differ diff --git a/static/users/logos/skyarchnetworks.png b/static/users/logos/skyarchnetworks.png new file mode 100644 index 0000000000..36e31c2aa7 Binary files /dev/null and b/static/users/logos/skyarchnetworks.png differ diff --git a/static/users/logos/smarkets.png b/static/users/logos/smarkets.png new file mode 100644 index 0000000000..e13b077856 Binary files /dev/null and b/static/users/logos/smarkets.png differ diff --git a/static/users/logos/stackshare.png b/static/users/logos/stackshare.png new file mode 100644 index 0000000000..ab53088d05 Binary files /dev/null and b/static/users/logos/stackshare.png differ diff --git a/static/users/logos/startupsco.png b/static/users/logos/startupsco.png new file mode 100644 index 0000000000..95119563d9 Binary files /dev/null and b/static/users/logos/startupsco.png differ diff --git a/static/users/logos/stem.png b/static/users/logos/stem.png new file mode 100644 index 0000000000..1e870dd99a Binary files /dev/null and b/static/users/logos/stem.png differ diff --git a/static/users/logos/swapcard.png b/static/users/logos/swapcard.png new file mode 100644 index 0000000000..cda2f4f452 Binary files /dev/null and b/static/users/logos/swapcard.png differ diff --git a/static/users/logos/syzygy.png b/static/users/logos/syzygy.png new file mode 100644 index 0000000000..8d0e010867 Binary files /dev/null and b/static/users/logos/syzygy.png differ diff --git a/static/users/logos/taller.png b/static/users/logos/taller.png new file mode 100644 index 0000000000..2633c5e4ab Binary files /dev/null and b/static/users/logos/taller.png differ diff --git a/static/users/logos/teacherspayteachers.png b/static/users/logos/teacherspayteachers.png new file mode 100644 index 0000000000..c4119aa30b Binary files /dev/null and b/static/users/logos/teacherspayteachers.png differ diff --git a/static/users/logos/teselagen_logo.png b/static/users/logos/teselagen_logo.png new file mode 100644 index 0000000000..307e21eef4 Binary files /dev/null and b/static/users/logos/teselagen_logo.png differ diff --git a/static/users/logos/thehunt.png b/static/users/logos/thehunt.png new file mode 100644 index 0000000000..380ae4182d Binary files /dev/null and b/static/users/logos/thehunt.png differ diff --git a/static/users/logos/trove.png b/static/users/logos/trove.png new file mode 100644 index 0000000000..773bbb4016 Binary files /dev/null and b/static/users/logos/trove.png differ diff --git a/static/users/logos/twitter.png b/static/users/logos/twitter.png new file mode 100644 index 0000000000..7fac8c5141 Binary files /dev/null and b/static/users/logos/twitter.png differ diff --git a/static/users/logos/uctrends.png b/static/users/logos/uctrends.png new file mode 100644 index 0000000000..357df76d3b Binary files /dev/null and b/static/users/logos/uctrends.png differ diff --git a/static/users/logos/unigraph.png b/static/users/logos/unigraph.png new file mode 100644 index 0000000000..28eb1faf95 Binary files /dev/null and b/static/users/logos/unigraph.png differ diff --git a/static/users/logos/universe.png b/static/users/logos/universe.png new file mode 100644 index 0000000000..69470596a2 Binary files /dev/null and b/static/users/logos/universe.png differ diff --git a/static/users/logos/ustglobal.png b/static/users/logos/ustglobal.png new file mode 100644 index 0000000000..5c435e71b2 Binary files /dev/null and b/static/users/logos/ustglobal.png differ diff --git a/static/users/logos/vanilaio.png b/static/users/logos/vanilaio.png new file mode 100644 index 0000000000..7ff0070850 Binary files /dev/null and b/static/users/logos/vanilaio.png differ diff --git a/static/users/logos/waitlessq.png b/static/users/logos/waitlessq.png new file mode 100644 index 0000000000..16a2432a58 Binary files /dev/null and b/static/users/logos/waitlessq.png differ diff --git a/static/users/logos/waldo-photos.png b/static/users/logos/waldo-photos.png new file mode 100644 index 0000000000..aefe652058 Binary files /dev/null and b/static/users/logos/waldo-photos.png differ diff --git a/static/users/logos/wayfair.png b/static/users/logos/wayfair.png new file mode 100644 index 0000000000..58173ab72a Binary files /dev/null and b/static/users/logos/wayfair.png differ diff --git a/static/users/logos/whitescape.png b/static/users/logos/whitescape.png new file mode 100644 index 0000000000..231169d22c Binary files /dev/null and b/static/users/logos/whitescape.png differ diff --git a/static/users/logos/wirtualnapolska.png b/static/users/logos/wirtualnapolska.png new file mode 100644 index 0000000000..6327946d68 Binary files /dev/null and b/static/users/logos/wirtualnapolska.png differ diff --git a/static/users/logos/wishlife.png b/static/users/logos/wishlife.png new file mode 100644 index 0000000000..5139d194eb Binary files /dev/null and b/static/users/logos/wishlife.png differ diff --git a/static/users/logos/workflowgen.png b/static/users/logos/workflowgen.png new file mode 100644 index 0000000000..5f3d0bf850 Binary files /dev/null and b/static/users/logos/workflowgen.png differ diff --git a/static/users/logos/wowair.png b/static/users/logos/wowair.png new file mode 100644 index 0000000000..be0c04c101 Binary files /dev/null and b/static/users/logos/wowair.png differ diff --git a/static/users/logos/yelp.png b/static/users/logos/yelp.png new file mode 100644 index 0000000000..911172698c Binary files /dev/null and b/static/users/logos/yelp.png differ diff --git a/static/users/logos/zlyde.png b/static/users/logos/zlyde.png new file mode 100644 index 0000000000..4c2979d2a9 Binary files /dev/null and b/static/users/logos/zlyde.png differ diff --git a/static/users/logos/zzish.png b/static/users/logos/zzish.png new file mode 100644 index 0000000000..e23d0b5a39 Binary files /dev/null and b/static/users/logos/zzish.png differ diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000000..4e6519fe90 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "module": "commonjs", + "target": "esnext", + "jsx": "preserve", + "lib": ["dom", "es2015", "es2017"], + "strict": true, + "noEmit": true, + "isolatedModules": true, + "esModuleInterop": true, + "skipLibCheck": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "removeComments": false, + "preserveConstEnums": true + }, + "include": ["./src/**/*"] + } \ No newline at end of file diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000000..9a10779fd7 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,12636 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@ardatan/aggregate-error@0.0.6": + version "0.0.6" + resolved "https://registry.yarnpkg.com/@ardatan/aggregate-error/-/aggregate-error-0.0.6.tgz#fe6924771ea40fc98dc7a7045c2e872dc8527609" + integrity sha512-vyrkEHG1jrukmzTPtyWB4NLPauUw5bQeg4uhn8f+1SSynmrOcyvlb1GKQjjgoBzElLdfXCRYX8UnBlhklOHYRQ== + dependencies: + tslib "~2.0.1" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" + integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/compat-data@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.12.1.tgz#d7386a689aa0ddf06255005b4b991988021101a0" + integrity sha512-725AQupWJZ8ba0jbKceeFblZTY90McUBWMwHhkFQ9q1zKPJ95GUktljFcgcsIVwRnTnRKlcYzfiNImg5G9m6ZQ== + +"@babel/core@7.10.5": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.10.5.tgz#1f15e2cca8ad9a1d78a38ddba612f5e7cdbbd330" + integrity sha512-O34LQooYVDXPl7QWCdW9p4NR+QlzOr7xShPPJz8GsuCU3/8ua/wqTr7gmnxXv+WBESiGU/G5s16i6tUvHkNb+w== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.10.5" + "@babel/helper-module-transforms" "^7.10.5" + "@babel/helpers" "^7.10.4" + "@babel/parser" "^7.10.5" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.5" + "@babel/types" "^7.10.5" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/core@^7.11.6": + version "7.12.3" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.3.tgz#1b436884e1e3bff6fb1328dc02b208759de92ad8" + integrity sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.1" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helpers" "^7.12.1" + "@babel/parser" "^7.12.3" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.1" + "@babel/types" "^7.12.1" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/generator@^7.10.5", "@babel/generator@^7.11.6", "@babel/generator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.1.tgz#0d70be32bdaa03d7c51c8597dda76e0df1f15468" + integrity sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg== + dependencies: + "@babel/types" "^7.12.1" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-annotate-as-pure@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3" + integrity sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz#bb0b75f31bf98cbf9ff143c1ae578b87274ae1a3" + integrity sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-builder-react-jsx-experimental@^7.12.1": + version "7.12.4" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.12.4.tgz#55fc1ead5242caa0ca2875dcb8eed6d311e50f48" + integrity sha512-AjEa0jrQqNk7eDQOo0pTfUOwQBMF+xVqrausQwT9/rTKy0g04ggFNaJpaE09IQMn9yExluigWMJcj0WC7bq+Og== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-module-imports" "^7.12.1" + "@babel/types" "^7.12.1" + +"@babel/helper-builder-react-jsx@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.4.tgz#8095cddbff858e6fa9c326daee54a2f2732c1d5d" + integrity sha512-5nPcIZ7+KKDxT1427oBivl9V9YTal7qk0diccnh7RrcgrT/pGFOjgGw1dgryyx1GvHEpXVfoDF6Ak3rTiWh8Rg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-compilation-targets@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.1.tgz#310e352888fbdbdd8577be8dfdd2afb9e7adcf50" + integrity sha512-jtBEif7jsPwP27GPHs06v4WBV0KrE8a/P7n0N0sSvHn2hwUCYnolP/CLmz51IzAW4NlN+HuoBtb9QcwnRo9F/g== + dependencies: + "@babel/compat-data" "^7.12.1" + "@babel/helper-validator-option" "^7.12.1" + browserslist "^4.12.0" + semver "^5.5.0" + +"@babel/helper-create-class-features-plugin@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz#3c45998f431edd4a9214c5f1d3ad1448a6137f6e" + integrity sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-member-expression-to-functions" "^7.12.1" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-replace-supers" "^7.12.1" + "@babel/helper-split-export-declaration" "^7.10.4" + +"@babel/helper-create-regexp-features-plugin@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.1.tgz#18b1302d4677f9dc4740fe8c9ed96680e29d37e8" + integrity sha512-rsZ4LGvFTZnzdNZR5HZdmJVuXK8834R5QkF3WvcnBhrlVtF0HSIUC6zbreL9MgjTywhKokn8RIYRiq99+DLAxA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-regex" "^7.10.4" + regexpu-core "^4.7.1" + +"@babel/helper-define-map@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz#b53c10db78a640800152692b13393147acb9bb30" + integrity sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/types" "^7.10.5" + lodash "^4.17.19" + +"@babel/helper-explode-assignable-expression@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz#8006a466695c4ad86a2a5f2fb15b5f2c31ad5633" + integrity sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA== + dependencies: + "@babel/types" "^7.12.1" + +"@babel/helper-function-name@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" + integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== + dependencies: + "@babel/helper-get-function-arity" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-get-function-arity@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" + integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-hoist-variables@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e" + integrity sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-member-expression-to-functions@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz#fba0f2fcff3fba00e6ecb664bb5e6e26e2d6165c" + integrity sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ== + dependencies: + "@babel/types" "^7.12.1" + +"@babel/helper-module-imports@^7.0.0-beta.49", "@babel/helper-module-imports@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.1.tgz#1644c01591a15a2f084dd6d092d9430eb1d1216c" + integrity sha512-ZeC1TlMSvikvJNy1v/wPIazCu3NdOwgYZLIkmIyAsGhqkNpiDoQQRmaCK8YP4Pq3GPTLPV9WXaPCJKvx06JxKA== + dependencies: + "@babel/types" "^7.12.1" + +"@babel/helper-module-transforms@^7.10.5", "@babel/helper-module-transforms@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz#7954fec71f5b32c48e4b303b437c34453fd7247c" + integrity sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w== + dependencies: + "@babel/helper-module-imports" "^7.12.1" + "@babel/helper-replace-supers" "^7.12.1" + "@babel/helper-simple-access" "^7.12.1" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/helper-validator-identifier" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.1" + "@babel/types" "^7.12.1" + lodash "^4.17.19" + +"@babel/helper-optimise-call-expression@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673" + integrity sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg== + dependencies: + "@babel/types" "^7.10.4" + +"@babel/helper-plugin-utils@7.10.4", "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" + integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== + +"@babel/helper-regex@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.5.tgz#32dfbb79899073c415557053a19bd055aae50ae0" + integrity sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg== + dependencies: + lodash "^4.17.19" + +"@babel/helper-remap-async-to-generator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz#8c4dbbf916314f6047dc05e6a2217074238347fd" + integrity sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-wrap-function" "^7.10.4" + "@babel/types" "^7.12.1" + +"@babel/helper-replace-supers@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.1.tgz#f15c9cc897439281891e11d5ce12562ac0cf3fa9" + integrity sha512-zJjTvtNJnCFsCXVi5rUInstLd/EIVNmIKA1Q9ynESmMBWPWd+7sdR+G4/wdu+Mppfep0XLyG2m7EBPvjCeFyrw== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.12.1" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/traverse" "^7.12.1" + "@babel/types" "^7.12.1" + +"@babel/helper-simple-access@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz#32427e5aa61547d38eb1e6eaf5fd1426fdad9136" + integrity sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA== + dependencies: + "@babel/types" "^7.12.1" + +"@babel/helper-skip-transparent-expression-wrappers@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf" + integrity sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA== + dependencies: + "@babel/types" "^7.12.1" + +"@babel/helper-split-export-declaration@^7.10.4", "@babel/helper-split-export-declaration@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f" + integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg== + dependencies: + "@babel/types" "^7.11.0" + +"@babel/helper-validator-identifier@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" + integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== + +"@babel/helper-validator-option@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz#175567380c3e77d60ff98a54bb015fe78f2178d9" + integrity sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A== + +"@babel/helper-wrap-function@^7.10.4": + version "7.12.3" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz#3332339fc4d1fbbf1c27d7958c27d34708e990d9" + integrity sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helpers@^7.10.4", "@babel/helpers@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.1.tgz#8a8261c1d438ec18cb890434df4ec768734c1e79" + integrity sha512-9JoDSBGoWtmbay98efmT2+mySkwjzeFeAL9BuWNoVQpkPFQF8SIIFUfY5os9u8wVzglzoiPRSW7cuJmBDUt43g== + dependencies: + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.1" + "@babel/types" "^7.12.1" + +"@babel/highlight@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" + integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.10.4", "@babel/parser@^7.10.5", "@babel/parser@^7.11.5", "@babel/parser@^7.12.1", "@babel/parser@^7.12.3", "@babel/parser@^7.7.0": + version "7.12.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.3.tgz#a305415ebe7a6c7023b40b5122a0662d928334cd" + integrity sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw== + +"@babel/plugin-proposal-async-generator-functions@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz#dc6c1170e27d8aca99ff65f4925bd06b1c90550e" + integrity sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.12.1" + "@babel/plugin-syntax-async-generators" "^7.8.0" + +"@babel/plugin-proposal-class-properties@^7.10.4", "@babel/plugin-proposal-class-properties@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz#a082ff541f2a29a4821065b8add9346c0c16e5de" + integrity sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-dynamic-import@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz#43eb5c2a3487ecd98c5c8ea8b5fdb69a2749b2dc" + integrity sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + +"@babel/plugin-proposal-export-namespace-from@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz#8b9b8f376b2d88f5dd774e4d24a5cc2e3679b6d4" + integrity sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz#d45423b517714eedd5621a9dfdc03fa9f4eb241c" + integrity sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.0" + +"@babel/plugin-proposal-logical-assignment-operators@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz#f2c490d36e1b3c9659241034a5d2cd50263a2751" + integrity sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.10.4", "@babel/plugin-proposal-nullish-coalescing-operator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz#3ed4fff31c015e7f3f1467f190dbe545cd7b046c" + integrity sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + +"@babel/plugin-proposal-numeric-separator@^7.10.4", "@babel/plugin-proposal-numeric-separator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.1.tgz#0e2c6774c4ce48be412119b4d693ac777f7685a6" + integrity sha512-MR7Ok+Af3OhNTCxYVjJZHS0t97ydnJZt/DbR4WISO39iDnhiD8XHrY12xuSJ90FFEGjir0Fzyyn7g/zY6hxbxA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.4.tgz#50129ac216b9a6a55b3853fdd923e74bf553a4c0" + integrity sha512-6vh4SqRuLLarjgeOf4EaROJAHjvu9Gl+/346PbDH9yWbJyfnJ/ah3jmYKYtswEyCoWZiidvVHjHshd4WgjB9BA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-transform-parameters" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz#def9bd03cea0f9b72283dac0ec22d289c7691069" + integrity sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-transform-parameters" "^7.12.1" + +"@babel/plugin-proposal-optional-catch-binding@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz#ccc2421af64d3aae50b558a71cede929a5ab2942" + integrity sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + +"@babel/plugin-proposal-optional-chaining@^7.11.0", "@babel/plugin-proposal-optional-chaining@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.1.tgz#cce122203fc8a32794296fc377c6dedaf4363797" + integrity sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + +"@babel/plugin-proposal-private-methods@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz#86814f6e7a21374c980c10d38b4493e703f4a389" + integrity sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-unicode-property-regex@^7.12.1", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz#2a183958d417765b9eae334f47758e5d6a82e072" + integrity sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-async-generators@^7.8.0": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz#bcb297c5366e79bebadef509549cd93b04f19978" + integrity sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-dynamic-import@^7.8.0", "@babel/plugin-syntax-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-json-strings@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz#39abaae3cbf710c4373d8429484e6ba21340166c" + integrity sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-jsx@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz#9d9d357cc818aa7ae7935917c1257f67677a0926" + integrity sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-top-level-await@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz#dd6c0b357ac1bb142d98537450a319625d13d2a0" + integrity sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-typescript@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.1.tgz#460ba9d77077653803c3dd2e673f76d66b4029e5" + integrity sha512-UZNEcCY+4Dp9yYRCAHrHDU+9ZXLYaY9MgBXSRLkB9WjYFRR6quJBumfVrEkUxrePPBwFcpWfNKXqVRQQtm7mMA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-arrow-functions@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz#8083ffc86ac8e777fbe24b5967c4b2521f3cb2b3" + integrity sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-async-to-generator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz#3849a49cc2a22e9743cbd6b52926d30337229af1" + integrity sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A== + dependencies: + "@babel/helper-module-imports" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.12.1" + +"@babel/plugin-transform-block-scoped-functions@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz#f2a1a365bde2b7112e0a6ded9067fdd7c07905d9" + integrity sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-block-scoping@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz#f0ee727874b42a208a48a586b84c3d222c2bbef1" + integrity sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-classes@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz#65e650fcaddd3d88ddce67c0f834a3d436a32db6" + integrity sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-define-map" "^7.10.4" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.12.1" + "@babel/helper-split-export-declaration" "^7.10.4" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz#d68cf6c9b7f838a8a4144badbe97541ea0904852" + integrity sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-destructuring@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz#b9a570fe0d0a8d460116413cb4f97e8e08b2f847" + integrity sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-dotall-regex@^7.12.1", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz#a1d16c14862817b6409c0a678d6f9373ca9cd975" + integrity sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-duplicate-keys@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz#745661baba295ac06e686822797a69fbaa2ca228" + integrity sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-exponentiation-operator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz#b0f2ed356ba1be1428ecaf128ff8a24f02830ae0" + integrity sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-for-of@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz#07640f28867ed16f9511c99c888291f560921cfa" + integrity sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-function-name@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz#2ec76258c70fe08c6d7da154003a480620eba667" + integrity sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-literals@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz#d73b803a26b37017ddf9d3bb8f4dc58bfb806f57" + integrity sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-member-expression-literals@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz#496038602daf1514a64d43d8e17cbb2755e0c3ad" + integrity sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-modules-amd@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz#3154300b026185666eebb0c0ed7f8415fefcf6f9" + integrity sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ== + dependencies: + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-commonjs@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz#fa403124542636c786cf9b460a0ffbb48a86e648" + integrity sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag== + dependencies: + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-simple-access" "^7.12.1" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-systemjs@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz#663fea620d593c93f214a464cd399bf6dc683086" + integrity sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q== + dependencies: + "@babel/helper-hoist-variables" "^7.10.4" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-validator-identifier" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-umd@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz#eb5a218d6b1c68f3d6217b8fa2cc82fec6547902" + integrity sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q== + dependencies: + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz#b407f5c96be0d9f5f88467497fa82b30ac3e8753" + integrity sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.1" + +"@babel/plugin-transform-new-target@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz#80073f02ee1bb2d365c3416490e085c95759dec0" + integrity sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-object-super@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz#4ea08696b8d2e65841d0c7706482b048bed1066e" + integrity sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.12.1" + +"@babel/plugin-transform-parameters@^7.10.4", "@babel/plugin-transform-parameters@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz#d2e963b038771650c922eff593799c96d853255d" + integrity sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-property-literals@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz#41bc81200d730abb4456ab8b3fbd5537b59adecd" + integrity sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-react-display-name@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.1.tgz#1cbcd0c3b1d6648c55374a22fc9b6b7e5341c00d" + integrity sha512-cAzB+UzBIrekfYxyLlFqf/OagTvHLcVBb5vpouzkYkBclRPraiygVnafvAoipErZLI8ANv8Ecn6E/m5qPXD26w== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-react-jsx-development@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.1.tgz#0b8f8cd531dcf7991f1e5f2c10a2a4f1cfc78e36" + integrity sha512-IilcGWdN1yNgEGOrB96jbTplRh+V2Pz1EoEwsKsHfX1a/L40cUYuD71Zepa7C+ujv7kJIxnDftWeZbKNEqZjCQ== + dependencies: + "@babel/helper-builder-react-jsx-experimental" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-jsx" "^7.12.1" + +"@babel/plugin-transform-react-jsx-self@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.12.1.tgz#ef43cbca2a14f1bd17807dbe4376ff89d714cf28" + integrity sha512-FbpL0ieNWiiBB5tCldX17EtXgmzeEZjFrix72rQYeq9X6nUK38HCaxexzVQrZWXanxKJPKVVIU37gFjEQYkPkA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-react-jsx-source@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.12.1.tgz#d07de6863f468da0809edcf79a1aa8ce2a82a26b" + integrity sha512-keQ5kBfjJNRc6zZN1/nVHCd6LLIHq4aUKcVnvE/2l+ZZROSbqoiGFRtT5t3Is89XJxBQaP7NLZX2jgGHdZvvFQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-react-jsx@^7.10.4", "@babel/plugin-transform-react-jsx@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.1.tgz#c2d96c77c2b0e4362cc4e77a43ce7c2539d478cb" + integrity sha512-RmKejwnT0T0QzQUzcbP5p1VWlpnP8QHtdhEtLG55ZDQnJNalbF3eeDyu3dnGKvGzFIQiBzFhBYTwvv435p9Xpw== + dependencies: + "@babel/helper-builder-react-jsx" "^7.10.4" + "@babel/helper-builder-react-jsx-experimental" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-jsx" "^7.12.1" + +"@babel/plugin-transform-react-pure-annotations@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.12.1.tgz#05d46f0ab4d1339ac59adf20a1462c91b37a1a42" + integrity sha512-RqeaHiwZtphSIUZ5I85PEH19LOSzxfuEazoY7/pWASCAIBuATQzpSVD+eT6MebeeZT2F4eSL0u4vw6n4Nm0Mjg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-regenerator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz#5f0a28d842f6462281f06a964e88ba8d7ab49753" + integrity sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng== + dependencies: + regenerator-transform "^0.14.2" + +"@babel/plugin-transform-reserved-words@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz#6fdfc8cc7edcc42b36a7c12188c6787c873adcd8" + integrity sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-runtime@^7.11.5": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.1.tgz#04b792057eb460389ff6a4198e377614ea1e7ba5" + integrity sha512-Ac/H6G9FEIkS2tXsZjL4RAdS3L3WHxci0usAnz7laPWUmFiGtj7tIASChqKZMHTSQTQY6xDbOq+V1/vIq3QrWg== + dependencies: + "@babel/helper-module-imports" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + resolve "^1.8.1" + semver "^5.5.1" + +"@babel/plugin-transform-shorthand-properties@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz#0bf9cac5550fce0cfdf043420f661d645fdc75e3" + integrity sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-spread@^7.11.0", "@babel/plugin-transform-spread@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz#527f9f311be4ec7fdc2b79bb89f7bf884b3e1e1e" + integrity sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + +"@babel/plugin-transform-sticky-regex@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.1.tgz#5c24cf50de396d30e99afc8d1c700e8bce0f5caf" + integrity sha512-CiUgKQ3AGVk7kveIaPEET1jNDhZZEl1RPMWdTBE1799bdz++SwqDHStmxfCtDfBhQgCl38YRiSnrMuUMZIWSUQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-regex" "^7.10.4" + +"@babel/plugin-transform-template-literals@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz#b43ece6ed9a79c0c71119f576d299ef09d942843" + integrity sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-typeof-symbol@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.1.tgz#9ca6be343d42512fbc2e68236a82ae64bc7af78a" + integrity sha512-EPGgpGy+O5Kg5pJFNDKuxt9RdmTgj5sgrus2XVeMp/ZIbOESadgILUbm50SNpghOh3/6yrbsH+NB5+WJTmsA7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-typescript@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.12.1.tgz#d92cc0af504d510e26a754a7dbc2e5c8cd9c7ab4" + integrity sha512-VrsBByqAIntM+EYMqSm59SiMEf7qkmI9dqMt6RbD/wlwueWmYcI0FFK5Fj47pP6DRZm+3teXjosKlwcZJ5lIMw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-typescript" "^7.12.1" + +"@babel/plugin-transform-unicode-escapes@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz#5232b9f81ccb07070b7c3c36c67a1b78f1845709" + integrity sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-unicode-regex@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz#cc9661f61390db5c65e3febaccefd5c6ac3faecb" + integrity sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/preset-env@^7.11.5": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.1.tgz#9c7e5ca82a19efc865384bb4989148d2ee5d7ac2" + integrity sha512-H8kxXmtPaAGT7TyBvSSkoSTUK6RHh61So05SyEbpmr0MCZrsNYn7mGMzzeYoOUCdHzww61k8XBft2TaES+xPLg== + dependencies: + "@babel/compat-data" "^7.12.1" + "@babel/helper-compilation-targets" "^7.12.1" + "@babel/helper-module-imports" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-validator-option" "^7.12.1" + "@babel/plugin-proposal-async-generator-functions" "^7.12.1" + "@babel/plugin-proposal-class-properties" "^7.12.1" + "@babel/plugin-proposal-dynamic-import" "^7.12.1" + "@babel/plugin-proposal-export-namespace-from" "^7.12.1" + "@babel/plugin-proposal-json-strings" "^7.12.1" + "@babel/plugin-proposal-logical-assignment-operators" "^7.12.1" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.12.1" + "@babel/plugin-proposal-numeric-separator" "^7.12.1" + "@babel/plugin-proposal-object-rest-spread" "^7.12.1" + "@babel/plugin-proposal-optional-catch-binding" "^7.12.1" + "@babel/plugin-proposal-optional-chaining" "^7.12.1" + "@babel/plugin-proposal-private-methods" "^7.12.1" + "@babel/plugin-proposal-unicode-property-regex" "^7.12.1" + "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-class-properties" "^7.12.1" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-syntax-top-level-await" "^7.12.1" + "@babel/plugin-transform-arrow-functions" "^7.12.1" + "@babel/plugin-transform-async-to-generator" "^7.12.1" + "@babel/plugin-transform-block-scoped-functions" "^7.12.1" + "@babel/plugin-transform-block-scoping" "^7.12.1" + "@babel/plugin-transform-classes" "^7.12.1" + "@babel/plugin-transform-computed-properties" "^7.12.1" + "@babel/plugin-transform-destructuring" "^7.12.1" + "@babel/plugin-transform-dotall-regex" "^7.12.1" + "@babel/plugin-transform-duplicate-keys" "^7.12.1" + "@babel/plugin-transform-exponentiation-operator" "^7.12.1" + "@babel/plugin-transform-for-of" "^7.12.1" + "@babel/plugin-transform-function-name" "^7.12.1" + "@babel/plugin-transform-literals" "^7.12.1" + "@babel/plugin-transform-member-expression-literals" "^7.12.1" + "@babel/plugin-transform-modules-amd" "^7.12.1" + "@babel/plugin-transform-modules-commonjs" "^7.12.1" + "@babel/plugin-transform-modules-systemjs" "^7.12.1" + "@babel/plugin-transform-modules-umd" "^7.12.1" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.1" + "@babel/plugin-transform-new-target" "^7.12.1" + "@babel/plugin-transform-object-super" "^7.12.1" + "@babel/plugin-transform-parameters" "^7.12.1" + "@babel/plugin-transform-property-literals" "^7.12.1" + "@babel/plugin-transform-regenerator" "^7.12.1" + "@babel/plugin-transform-reserved-words" "^7.12.1" + "@babel/plugin-transform-shorthand-properties" "^7.12.1" + "@babel/plugin-transform-spread" "^7.12.1" + "@babel/plugin-transform-sticky-regex" "^7.12.1" + "@babel/plugin-transform-template-literals" "^7.12.1" + "@babel/plugin-transform-typeof-symbol" "^7.12.1" + "@babel/plugin-transform-unicode-escapes" "^7.12.1" + "@babel/plugin-transform-unicode-regex" "^7.12.1" + "@babel/preset-modules" "^0.1.3" + "@babel/types" "^7.12.1" + core-js-compat "^3.6.2" + semver "^5.5.0" + +"@babel/preset-modules@^0.1.3": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" + integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/preset-react@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.12.1.tgz#7f022b13f55b6dd82f00f16d1c599ae62985358c" + integrity sha512-euCExymHCi0qB9u5fKw7rvlw7AZSjw/NaB9h7EkdTt5+yHRrXdiRTh7fkG3uBPpJg82CqLfp1LHLqWGSCrab+g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-react-display-name" "^7.12.1" + "@babel/plugin-transform-react-jsx" "^7.12.1" + "@babel/plugin-transform-react-jsx-development" "^7.12.1" + "@babel/plugin-transform-react-jsx-self" "^7.12.1" + "@babel/plugin-transform-react-jsx-source" "^7.12.1" + "@babel/plugin-transform-react-pure-annotations" "^7.12.1" + +"@babel/preset-typescript@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.12.1.tgz#86480b483bb97f75036e8864fe404cc782cc311b" + integrity sha512-hNK/DhmoJPsksdHuI/RVrcEws7GN5eamhi28JkO52MqIxU8Z0QpmiSOQxZHWOHV7I3P4UjHV97ay4TcamMA6Kw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-typescript" "^7.12.1" + +"@babel/runtime-corejs3@^7.10.2": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.12.1.tgz#51b9092befbeeed938335a109dbe0df51451e9dc" + integrity sha512-umhPIcMrlBZ2aTWlWjUseW9LjQKxi1dpFlQS8DzsxB//5K+u6GLTC/JliPKHsd5kJVPIU6X/Hy0YvWOYPcMxBw== + dependencies: + core-js-pure "^3.0.0" + regenerator-runtime "^0.13.4" + +"@babel/runtime@^7.10.0", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.1.tgz#b4116a6b6711d010b2dad3b7b6e43bf1b9954740" + integrity sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/standalone@^7.11.6": + version "7.12.4" + resolved "https://registry.yarnpkg.com/@babel/standalone/-/standalone-7.12.4.tgz#1493960e765308cc06e9a75ba1affbe65a11124b" + integrity sha512-9vw7RYK7CWh5MdTfLyC7j6hZmDYmm6DieFP4yetvpVftKQ+yrEY7ovhnhsVHznLqx5luU9Bx4k7xoEc3acrsow== + +"@babel/template@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" + integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/parser" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/traverse@^7.10.4", "@babel/traverse@^7.10.5", "@babel/traverse@^7.11.5", "@babel/traverse@^7.12.1", "@babel/traverse@^7.7.0": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.1.tgz#941395e0c5cc86d5d3e75caa095d3924526f0c1e" + integrity sha512-MA3WPoRt1ZHo2ZmoGKNqi20YnPt0B1S0GTZEPhhd+hw2KGUzBlHuVunj6K4sNuK+reEvyiPwtp0cpaqLzJDmAw== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.1" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/parser" "^7.12.1" + "@babel/types" "^7.12.1" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.19" + +"@babel/types@^7.0.0-beta.49", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.11.5", "@babel/types@^7.12.1", "@babel/types@^7.4.4", "@babel/types@^7.7.0": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.1.tgz#e109d9ab99a8de735be287ee3d6a9947a190c4ae" + integrity sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + lodash "^4.17.19" + to-fast-properties "^2.0.0" + +"@graphql-tools/batch-execute@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@graphql-tools/batch-execute/-/batch-execute-7.0.0.tgz#e79d11bd5b39f29172f6ec2eafa71103c6a6c85b" + integrity sha512-+ywPfK6N2Ddna6oOa5Qb1Mv7EA8LOwRNOAPP9dL37FEhksJM9pYqPSceUcqMqg7S9b0+Cgr78s408rgvurV3/Q== + dependencies: + "@graphql-tools/utils" "^7.0.0" + dataloader "2.0.0" + is-promise "4.0.0" + tslib "~2.0.1" + +"@graphql-tools/delegate@^7.0.0", "@graphql-tools/delegate@^7.0.1": + version "7.0.3" + resolved "https://registry.yarnpkg.com/@graphql-tools/delegate/-/delegate-7.0.3.tgz#d25028de64acc886be6e0514162aa6739d9acd51" + integrity sha512-BSRF/Wg9XNllWo3Kdt0QBBaFltexn3vAnTOWH1qLrNcmfQAvUMf17/TsAqH9ZLSKU1NW9XCOsd7YMHhhUuTCEg== + dependencies: + "@ardatan/aggregate-error" "0.0.6" + "@graphql-tools/batch-execute" "^7.0.0" + "@graphql-tools/schema" "^7.0.0" + "@graphql-tools/utils" "^7.0.2" + dataloader "2.0.0" + is-promise "4.0.0" + tslib "~2.0.1" + +"@graphql-tools/graphql-file-loader@^6.0.0": + version "6.2.5" + resolved "https://registry.yarnpkg.com/@graphql-tools/graphql-file-loader/-/graphql-file-loader-6.2.5.tgz#831289675e5f446baa19afbc0af8ea6bc94063bf" + integrity sha512-vYDn71FHqwCxWgw8swoVOsD5C0xGz/Lw4zUQnPcgZfAzhAAwl6e/rVWl/HF1UNNSf5CSZu+2oidjOWCI5Wl6Gg== + dependencies: + "@graphql-tools/import" "^6.2.4" + "@graphql-tools/utils" "^7.0.0" + fs-extra "9.0.1" + tslib "~2.0.1" + +"@graphql-tools/import@^6.2.4": + version "6.2.4" + resolved "https://registry.yarnpkg.com/@graphql-tools/import/-/import-6.2.4.tgz#0547f6d4754a924e80439d6af013577cdb617194" + integrity sha512-Q6fk6hbtDevoEVcgwb3WRn7XOqGY4MnX3Mvc+x8/b8k4RZ4wT+0WSLRDXGAKiVKRxGhgouU2lZVnGE/LDrGSCg== + dependencies: + fs-extra "9.0.1" + resolve-from "5.0.0" + tslib "~2.0.1" + +"@graphql-tools/json-file-loader@^6.0.0": + version "6.2.5" + resolved "https://registry.yarnpkg.com/@graphql-tools/json-file-loader/-/json-file-loader-6.2.5.tgz#1357d2efd2f416f44e0dd717da06463c29adbf60" + integrity sha512-9LS7WuQdSHlRUvXD7ixt5aDpr3hWsueURHOaWe7T0xZ+KWMTw+LIRtWIliCRzbjNmZ+4ZhwHB3Vc1SO2bfYLgg== + dependencies: + "@graphql-tools/utils" "^7.0.0" + fs-extra "9.0.1" + tslib "~2.0.1" + +"@graphql-tools/load@^6.0.0": + version "6.2.5" + resolved "https://registry.yarnpkg.com/@graphql-tools/load/-/load-6.2.5.tgz#7dd0d34c8ce2cfb24f61c6beba2817d9afdd7f2b" + integrity sha512-TpDgp+id0hhD1iMhdFSgWgWumdI/IpFWwouJeaEhEEAEBkdvH4W9gbBiJBSbPQwMPRNWx8/AZtry0cYKLW4lHg== + dependencies: + "@graphql-tools/merge" "^6.2.5" + "@graphql-tools/utils" "^7.0.0" + globby "11.0.1" + import-from "3.0.0" + is-glob "4.0.1" + p-limit "3.0.2" + tslib "~2.0.1" + unixify "1.0.0" + valid-url "1.0.9" + +"@graphql-tools/merge@^6.0.0", "@graphql-tools/merge@^6.2.5": + version "6.2.5" + resolved "https://registry.yarnpkg.com/@graphql-tools/merge/-/merge-6.2.5.tgz#a03d6711f2a468b8de97c0fe9092469280ca66c9" + integrity sha512-T2UEm7L5MeS1ggbGKBkdV9kTqLqSHQM13RrjPzIAYzkFL/mK837sf+oq8h2+R8B+senuHX8akUhMTcU85kcMvw== + dependencies: + "@graphql-tools/schema" "^7.0.0" + "@graphql-tools/utils" "^7.0.0" + tslib "~2.0.1" + +"@graphql-tools/schema@7.0.0", "@graphql-tools/schema@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@graphql-tools/schema/-/schema-7.0.0.tgz#f87e307d00a3d388f5c54d32f4697611396c0127" + integrity sha512-yDKgoT2+Uf3cdLYmiFB9lRIGsB6lZhILtCXHgZigYgURExrEPmfj3ZyszfEpPKYcPmKaO9FI4coDhIN0Toxl3w== + dependencies: + "@graphql-tools/utils" "^7.0.0" + tslib "~2.0.1" + +"@graphql-tools/schema@^6.0.14": + version "6.2.4" + resolved "https://registry.yarnpkg.com/@graphql-tools/schema/-/schema-6.2.4.tgz#cc4e9f5cab0f4ec48500e666719d99fc5042481d" + integrity sha512-rh+14lSY1q8IPbEv2J9x8UBFJ5NrDX9W5asXEUlPp+7vraLp/Tiox4GXdgyA92JhwpYco3nTf5Bo2JDMt1KnAQ== + dependencies: + "@graphql-tools/utils" "^6.2.4" + tslib "~2.0.1" + +"@graphql-tools/url-loader@^6.0.0": + version "6.3.2" + resolved "https://registry.yarnpkg.com/@graphql-tools/url-loader/-/url-loader-6.3.2.tgz#ed4e9dafcd83bda94ba7114629e712fc81a6a3ef" + integrity sha512-nrrZD33T7lFeOjIufCrwk2PAHYqFtdFcb1pe1ULWnvuFmFuhZnRCgIsfCsoy+WOMwmZHQ/eXBem//I/bewXlgw== + dependencies: + "@graphql-tools/delegate" "^7.0.1" + "@graphql-tools/utils" "^7.0.1" + "@graphql-tools/wrap" "^7.0.0" + "@types/websocket" "1.0.1" + cross-fetch "3.0.6" + subscriptions-transport-ws "0.9.18" + tslib "~2.0.1" + valid-url "1.0.9" + websocket "1.0.32" + +"@graphql-tools/utils@^6.0.0", "@graphql-tools/utils@^6.0.14", "@graphql-tools/utils@^6.2.4": + version "6.2.4" + resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-6.2.4.tgz#38a2314d2e5e229ad4f78cca44e1199e18d55856" + integrity sha512-ybgZ9EIJE3JMOtTrTd2VcIpTXtDrn2q6eiYkeYMKRVh3K41+LZa6YnR2zKERTXqTWqhobROwLt4BZbw2O3Aeeg== + dependencies: + "@ardatan/aggregate-error" "0.0.6" + camel-case "4.1.1" + tslib "~2.0.1" + +"@graphql-tools/utils@^7.0.0", "@graphql-tools/utils@^7.0.1", "@graphql-tools/utils@^7.0.2": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-7.0.2.tgz#1977d3277158bf32df792a5ff76d3fdc04647a64" + integrity sha512-VQQ7krHeoXO0FS3qbWsb/vZb8c8oyiCYPIH4RSgeK9SKOUpatWYt3DW4jmLmyHZLVVMk0yjUbsOhKTBEMejKSA== + dependencies: + "@ardatan/aggregate-error" "0.0.6" + camel-case "4.1.1" + tslib "~2.0.1" + +"@graphql-tools/wrap@^7.0.0": + version "7.0.1" + resolved "https://registry.yarnpkg.com/@graphql-tools/wrap/-/wrap-7.0.1.tgz#a93e548439d19a1be6f7a032c7561059ea589b70" + integrity sha512-0feqjgEJSRLm2V0kEUaV2dw7ukVPjRujYMqNdcqHsIyXmf0VO8PGF5hcva/+5U/9Yfbf3Fck+P5JTJ5MlXPlsQ== + dependencies: + "@graphql-tools/delegate" "^7.0.0" + "@graphql-tools/schema" "^7.0.0" + "@graphql-tools/utils" "^7.0.0" + is-promise "4.0.0" + tslib "~2.0.1" + +"@hapi/address@2.x.x": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5" + integrity sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ== + +"@hapi/bourne@1.x.x": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-1.3.2.tgz#0a7095adea067243ce3283e1b56b8a8f453b242a" + integrity sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA== + +"@hapi/hoek@8.x.x", "@hapi/hoek@^8.3.0": + version "8.5.1" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.5.1.tgz#fde96064ca446dec8c55a8c2f130957b070c6e06" + integrity sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow== + +"@hapi/hoek@^9.0.0": + version "9.1.0" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.1.0.tgz#6c9eafc78c1529248f8f4d92b0799a712b6052c6" + integrity sha512-i9YbZPN3QgfighY/1X1Pu118VUz2Fmmhd6b2n0/O8YVgGGfw0FbUYoA97k7FkpGJ+pLCFEDLUmAPPV4D1kpeFw== + +"@hapi/joi@^15.1.1": + version "15.1.1" + resolved "https://registry.yarnpkg.com/@hapi/joi/-/joi-15.1.1.tgz#c675b8a71296f02833f8d6d243b34c57b8ce19d7" + integrity sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ== + dependencies: + "@hapi/address" "2.x.x" + "@hapi/bourne" "1.x.x" + "@hapi/hoek" "8.x.x" + "@hapi/topo" "3.x.x" + +"@hapi/topo@3.x.x": + version "3.1.6" + resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-3.1.6.tgz#68d935fa3eae7fdd5ab0d7f953f3205d8b2bfc29" + integrity sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ== + dependencies: + "@hapi/hoek" "^8.3.0" + +"@hapi/topo@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.0.0.tgz#c19af8577fa393a06e9c77b60995af959be721e7" + integrity sha512-tFJlT47db0kMqVm3H4nQYgn6Pwg10GTZHb1pwmSiv1K4ks6drQOtfEF5ZnPjkvC+y4/bUPHK+bc87QvLcL+WMw== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@jest/types@^25.5.0": + version "25.5.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.5.0.tgz#4d6a4793f7b9599fc3680877b856a97dbccf2a9d" + integrity sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^1.1.1" + "@types/yargs" "^15.0.0" + chalk "^3.0.0" + +"@mdx-js/util@^2.0.0-next.8": + version "2.0.0-next.8" + resolved "https://registry.yarnpkg.com/@mdx-js/util/-/util-2.0.0-next.8.tgz#66ecc27b78e07a3ea2eb1a8fc5a99dfa0ba96690" + integrity sha512-T0BcXmNzEunFkuxrO8BFw44htvTPuAoKbLvTG41otyZBDV1Rs+JMddcUuaP5vXpTWtgD3grhcrPEwyx88RUumQ== + +"@mikaelkristiansson/domready@^1.0.10": + version "1.0.10" + resolved "https://registry.yarnpkg.com/@mikaelkristiansson/domready/-/domready-1.0.10.tgz#f6d69866c0857664e70690d7a0bfedb72143adb5" + integrity sha512-6cDuZeKSCSJ1KvfEQ25Y8OXUjqDJZ+HgUs6dhASWbAX8fxVraTfPsSeRe2bN+4QJDsgUaXaMWBYfRomCr04GGg== + +"@nodelib/fs.scandir@2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz#3a582bdb53804c6ba6d146579c46e52130cf4a3b" + integrity sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw== + dependencies: + "@nodelib/fs.stat" "2.0.3" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.3", "@nodelib/fs.stat@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz#34dc5f4cabbc720f4e60f75a747e7ecd6c175bd3" + integrity sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA== + +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.4": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz#011b9202a70a6366e436ca5c065844528ab04976" + integrity sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ== + dependencies: + "@nodelib/fs.scandir" "2.1.3" + fastq "^1.6.0" + +"@pieh/friendly-errors-webpack-plugin@1.7.0-chalk-2": + version "1.7.0-chalk-2" + resolved "https://registry.yarnpkg.com/@pieh/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.0-chalk-2.tgz#2e9da9d3ade9d18d013333eb408c457d04eabac0" + integrity sha512-65+vYGuDkHBCWWjqzzR/Ck318+d6yTI00EqII9qe3aPD1J3Olhvw0X38uM5moQb1PK/ksDXwSoPGt/5QhCiotw== + dependencies: + chalk "^2.4.2" + error-stack-parser "^2.0.0" + string-width "^2.0.0" + strip-ansi "^3" + +"@pmmmwh/react-refresh-webpack-plugin@^0.4.1": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.4.3.tgz#1eec460596d200c0236bf195b078a5d1df89b766" + integrity sha512-br5Qwvh8D2OQqSXpd1g/xqXKnK0r+Jz6qVKBbWmpUcrbGOxUrf39V5oZ1876084CGn18uMdR5uvPqBv9UqtBjQ== + dependencies: + ansi-html "^0.0.7" + error-stack-parser "^2.0.6" + html-entities "^1.2.1" + native-url "^0.2.6" + schema-utils "^2.6.5" + source-map "^0.7.3" + +"@reach/router@^1.3.4": + version "1.3.4" + resolved "https://registry.yarnpkg.com/@reach/router/-/router-1.3.4.tgz#d2574b19370a70c80480ed91f3da840136d10f8c" + integrity sha512-+mtn9wjlB9NN2CNnnC/BRYtwdKBfSyyasPYraNAyvaV1occr/5NnB4CVzjEZipNHwYebQwcndGUmpFzxAUoqSA== + dependencies: + create-react-context "0.3.0" + invariant "^2.2.3" + prop-types "^15.6.1" + react-lifecycles-compat "^3.0.4" + +"@sideway/address@^4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.0.tgz#0b301ada10ac4e0e3fa525c90615e0b61a72b78d" + integrity sha512-wAH/JYRXeIFQRsxerIuLjgUu2Xszam+O5xKeatJ4oudShOOirfmsQ1D6LL54XOU2tizpCYku+s1wmU0SYdpoSA== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@sideway/formula@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.0.tgz#fe158aee32e6bd5de85044be615bc08478a0a13c" + integrity sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg== + +"@sideway/pinpoint@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" + integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== + +"@sindresorhus/is@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" + integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== + +"@sindresorhus/is@^0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" + integrity sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow== + +"@sindresorhus/slugify@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/slugify/-/slugify-1.1.0.tgz#2f195365d9b953384305b62664b44b4036c49430" + integrity sha512-ujZRbmmizX26yS/HnB3P9QNlNa4+UvHh+rIse3RbOXLp8yl6n1TxB4t7NHggtVgS8QmmOtzXo48kCxZGACpkPw== + dependencies: + "@sindresorhus/transliterate" "^0.1.1" + escape-string-regexp "^4.0.0" + +"@sindresorhus/transliterate@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@sindresorhus/transliterate/-/transliterate-0.1.1.tgz#779b31244781d3c898f185b61d58c89e7c782674" + integrity sha512-QSdIQ5keUFAZ3KLbfbsntW39ox0Ym8183RqTwBq/ZEFoN3NQAtGV+qWaNdzKpIDHgj9J2CQ2iNDRVU11Zyr7MQ== + dependencies: + escape-string-regexp "^2.0.0" + lodash.deburr "^4.1.0" + +"@szmarczak/http-timer@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" + integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== + dependencies: + defer-to-connect "^1.0.1" + +"@turist/fetch@^7.1.7": + version "7.1.7" + resolved "https://registry.yarnpkg.com/@turist/fetch/-/fetch-7.1.7.tgz#a2b1f7ec0265e6fe0946c51eef34bad9b9efc865" + integrity sha512-XP20kvfyMNlWdPVQXyuzA40LoCHbbJptikt7W+TlZ5sS+NNjk70xjXCtHBLEudp7li3JldXEFSIUzpW1a0WEhA== + dependencies: + "@types/node-fetch" "2" + +"@turist/time@^0.0.1": + version "0.0.1" + resolved "https://registry.yarnpkg.com/@turist/time/-/time-0.0.1.tgz#57637d2a7d1860adb9f9cecbdcc966ce4f551d63" + integrity sha512-M2BiThcbxMxSKX8W4z5u9jKZn6datnM3+FpEU+eYw0//l31E2xhqi7vTAuJ/Sf0P3yhp66SDJgPu3bRRpvrdQQ== + +"@types/codemirror@0.0.98": + version "0.0.98" + resolved "https://registry.yarnpkg.com/@types/codemirror/-/codemirror-0.0.98.tgz#b35c7a4ab1fc1684b08a4e3eb65240020556ebfb" + integrity sha512-cbty5LPayy2vNSeuUdjNA9tggG+go5vAxmnLDRWpiZI5a+RDBi9dlozy4/jW/7P/gletbBWbQREEa7A81YxstA== + dependencies: + "@types/tern" "*" + +"@types/common-tags@^1.8.0": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@types/common-tags/-/common-tags-1.8.0.tgz#79d55e748d730b997be5b7fce4b74488d8b26a6b" + integrity sha512-htRqZr5qn8EzMelhX/Xmx142z218lLyGaeZ3YR8jlze4TATRU9huKKvuBmAJEW4LCC4pnY1N6JAm6p85fMHjhg== + +"@types/configstore@^2.1.1": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@types/configstore/-/configstore-2.1.1.tgz#cd1e8553633ad3185c3f2f239ecff5d2643e92b6" + integrity sha1-zR6FU2M60xhcPy8jns/10mQ+krY= + +"@types/debug@^0.0.30": + version "0.0.30" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-0.0.30.tgz#dc1e40f7af3b9c815013a7860e6252f6352a84df" + integrity sha512-orGL5LXERPYsLov6CWs3Fh6203+dXzJkR7OnddIr2514Hsecwc8xRpzCapshBbKFImCsvS/mk6+FWiN5LyZJAQ== + +"@types/eslint-visitor-keys@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" + integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== + +"@types/estree@*": + version "0.0.45" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.45.tgz#e9387572998e5ecdac221950dab3e8c3b16af884" + integrity sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g== + +"@types/events@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" + integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== + +"@types/get-port@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@types/get-port/-/get-port-3.2.0.tgz#f9e0a11443cc21336470185eae3dfba4495d29bc" + integrity sha512-TiNg8R1kjDde5Pub9F9vCwZA/BNW9HeXP5b9j7Qucqncy/McfPZ6xze/EyBdXS5FhMIGN6Fx3vg75l5KHy3V1Q== + +"@types/glob@*", "@types/glob@^7.1.1": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" + integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/glob@^5.0.34": + version "5.0.36" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-5.0.36.tgz#0c80a9c8664fc7d19781de229f287077fd622cb2" + integrity sha512-KEzSKuP2+3oOjYYjujue6Z3Yqis5HKA1BsIC+jZ1v3lrRNdsqyNNtX0rQf6LSuI4DJJ2z5UV//zBZCcvM0xikg== + dependencies: + "@types/events" "*" + "@types/minimatch" "*" + "@types/node" "*" + +"@types/history@*": + version "4.7.8" + resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.8.tgz#49348387983075705fe8f4e02fb67f7daaec4934" + integrity sha512-S78QIYirQcUoo6UJZx9CSP0O2ix9IaeAXwQi26Rhr/+mg7qqPy8TzaxHSUut7eGjL8WmLccT7/MXf304WjqHcA== + +"@types/http-proxy@^1.17.4": + version "1.17.4" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.4.tgz#e7c92e3dbe3e13aa799440ff42e6d3a17a9d045b" + integrity sha512-IrSHl2u6AWXduUaDLqYpt45tLVCtYv7o4Z0s1KghBCDgIIS9oW5K1H8mZG/A2CfeLdEa7rTd1ACOiHBc1EMT2Q== + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" + integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== + +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^1.1.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.2.tgz#e875cc689e47bce549ec81f3df5e6f6f11cfaeb2" + integrity sha512-P/W9yOX/3oPZSpaYOCQzGqgCQRXn0FFO/V8bWrCQs+wLmvVVxk6CRBXALEvNs9OHIatlnlFokfhuDo2ug01ciw== + dependencies: + "@types/istanbul-lib-coverage" "*" + "@types/istanbul-lib-report" "*" + +"@types/json-schema@^7.0.3", "@types/json-schema@^7.0.5": + version "7.0.6" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0" + integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw== + +"@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@^4.14.92": + version "4.14.164" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.164.tgz#52348bcf909ac7b4c1bcbeda5c23135176e5dfa0" + integrity sha512-fXCEmONnrtbYUc5014avwBeMdhHHO8YJCkOBflUL9EoJBSKZ1dei+VO74fA7JkTHZ1GvZack2TyIw5U+1lT8jg== + +"@types/mdast@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.3.tgz#2d7d671b1cd1ea3deb306ea75036c2a0407d2deb" + integrity sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw== + dependencies: + "@types/unist" "*" + +"@types/minimatch@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== + +"@types/mkdirp@^0.5.2": + version "0.5.2" + resolved "https://registry.yarnpkg.com/@types/mkdirp/-/mkdirp-0.5.2.tgz#503aacfe5cc2703d5484326b1b27efa67a339c1f" + integrity sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg== + dependencies: + "@types/node" "*" + +"@types/node-fetch@2": + version "2.5.7" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.7.tgz#20a2afffa882ab04d44ca786449a276f9f6bbf3c" + integrity sha512-o2WVNf5UhWRkxlf6eq+jMZDu7kjgpgJfl4xVNlvryc95O/6F2ld8ztKX+qu+Rjyet93WAWm5LjeX9H5FGkODvw== + dependencies: + "@types/node" "*" + form-data "^3.0.0" + +"@types/node@*": + version "14.14.6" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.6.tgz#146d3da57b3c636cc0d1769396ce1cfa8991147f" + integrity sha512-6QlRuqsQ/Ox/aJEQWBEJG7A9+u7oSYl3mem/K8IzxXG/kAGbV1YPD9Bg9Zw3vyxC/YP+zONKwy8hGkSt1jxFMw== + +"@types/node@^8.5.7": + version "8.10.66" + resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.66.tgz#dd035d409df322acc83dff62a602f12a5783bbb3" + integrity sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw== + +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + +"@types/prismjs@1.16.2": + version "1.16.2" + resolved "https://registry.yarnpkg.com/@types/prismjs/-/prismjs-1.16.2.tgz#c130c977191c988cb35e97585da5d580948cc2d2" + integrity sha512-1M/j21xgTde7RPtpJVQebW5rzrquj7S+wnqt4x9uWrIPpr0Ya/uXypcqC2aUQL5gtLXFCKSH7GnjfAijMdfbuA== + +"@types/prop-types@*": + version "15.7.3" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" + integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== + +"@types/q@^1.5.1": + version "1.5.4" + resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24" + integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug== + +"@types/reach__router@^1.3.6": + version "1.3.6" + resolved "https://registry.yarnpkg.com/@types/reach__router/-/reach__router-1.3.6.tgz#413417ce74caab331c70ce6a03a4c825188e4709" + integrity sha512-RHYataCUPQnt+GHoASyRLq6wmZ0n8jWlBW8Lxcwd30NN6vQfbmTeoSDfkgxO0S1lEzArp8OFDsq5KIs7FygjtA== + dependencies: + "@types/history" "*" + "@types/react" "*" + +"@types/react-helmet@6.1.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@types/react-helmet/-/react-helmet-6.1.0.tgz#af586ed685f4905e2adc7462d1d65ace52beee7a" + integrity sha512-PYRoU1XJFOzQ3BHvWL1T8iDNbRjdMDJMT5hFmZKGbsq09kbSqJy61uwEpTrbTNWDopVphUT34zUSVLK9pjsgYQ== + dependencies: + "@types/react" "*" + +"@types/react@*": + version "16.9.55" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.55.tgz#47078587f5bfe028a23b6b46c7b94ac0d436acff" + integrity sha512-6KLe6lkILeRwyyy7yG9rULKJ0sXplUsl98MGoCfpteXf9sPWFWWMknDcsvubcpaTdBuxtsLF6HDUwdApZL/xIg== + dependencies: + "@types/prop-types" "*" + csstype "^3.0.2" + +"@types/rimraf@^2.0.2": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/rimraf/-/rimraf-2.0.4.tgz#403887b0b53c6100a6c35d2ab24f6ccc042fec46" + integrity sha512-8gBudvllD2A/c0CcEX/BivIDorHFt5UI5m46TsNj8DjWCCTTZT74kEe4g+QsY7P/B9WdO98d82zZgXO/RQzu2Q== + dependencies: + "@types/glob" "*" + "@types/node" "*" + +"@types/tern@*": + version "0.23.3" + resolved "https://registry.yarnpkg.com/@types/tern/-/tern-0.23.3.tgz#4b54538f04a88c9ff79de1f6f94f575a7f339460" + integrity sha512-imDtS4TAoTcXk0g7u4kkWqedB3E4qpjXzCpD2LU5M5NAXHzCDsypyvXSaG7mM8DKYkCRa7tFp4tS/lp/Wo7Q3w== + dependencies: + "@types/estree" "*" + +"@types/tmp@^0.0.33": + version "0.0.33" + resolved "https://registry.yarnpkg.com/@types/tmp/-/tmp-0.0.33.tgz#1073c4bc824754ae3d10cfab88ab0237ba964e4d" + integrity sha1-EHPEvIJHVK49EM+riKsCN7qWTk0= + +"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2", "@types/unist@^2.0.3": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e" + integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ== + +"@types/vfile-message@*": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@types/vfile-message/-/vfile-message-2.0.0.tgz#690e46af0fdfc1f9faae00cd049cc888957927d5" + integrity sha512-GpTIuDpb9u4zIO165fUy9+fXcULdD8HFRNli04GehoMVbeNq7D6OBnqSmg3lxZnC+UvgUhEWKxdKiwYUkGltIw== + dependencies: + vfile-message "*" + +"@types/vfile@^3.0.0": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@types/vfile/-/vfile-3.0.2.tgz#19c18cd232df11ce6fa6ad80259bc86c366b09b9" + integrity sha512-b3nLFGaGkJ9rzOcuXRfHkZMdjsawuDD0ENL9fzTophtBg8FJHSGbH7daXkEpcwy3v7Xol3pAvsmlYyFhR4pqJw== + dependencies: + "@types/node" "*" + "@types/unist" "*" + "@types/vfile-message" "*" + +"@types/websocket@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/websocket/-/websocket-1.0.1.tgz#039272c196c2c0e4868a0d8a1a27bbb86e9e9138" + integrity sha512-f5WLMpezwVxCLm1xQe/kdPpQIOmL0TXYx2O15VYfYzc7hTIdxiOoOvez+McSIw3b7z/1zGovew9YSL7+h4h7/Q== + dependencies: + "@types/node" "*" + +"@types/yargs-parser@*": + version "15.0.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" + integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== + +"@types/yargs@^15.0.0": + version "15.0.9" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.9.tgz#524cd7998fe810cdb02f26101b699cccd156ff19" + integrity sha512-HmU8SeIRhZCWcnRskCs36Q1Q00KBV6Cqh/ora8WN1+22dY07AZdn6Gel8QZ3t26XYPImtcL8WV/eqjhVmMEw4g== + dependencies: + "@types/yargs-parser" "*" + +"@types/yoga-layout@1.9.2": + version "1.9.2" + resolved "https://registry.yarnpkg.com/@types/yoga-layout/-/yoga-layout-1.9.2.tgz#efaf9e991a7390dc081a0b679185979a83a9639a" + integrity sha512-S9q47ByT2pPvD65IvrWp7qppVMpk9WGMbVq9wbWZOHg6tnXSD4vyhao6nOSBwwfDdV2p3Kx9evA9vI+XWTfDvw== + +"@typescript-eslint/eslint-plugin@^2.24.0": + version "2.34.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz#6f8ce8a46c7dea4a6f1d171d2bb8fbae6dac2be9" + integrity sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ== + dependencies: + "@typescript-eslint/experimental-utils" "2.34.0" + functional-red-black-tree "^1.0.1" + regexpp "^3.0.0" + tsutils "^3.17.1" + +"@typescript-eslint/experimental-utils@2.34.0": + version "2.34.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz#d3524b644cdb40eebceca67f8cf3e4cc9c8f980f" + integrity sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA== + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/typescript-estree" "2.34.0" + eslint-scope "^5.0.0" + eslint-utils "^2.0.0" + +"@typescript-eslint/parser@^2.24.0": + version "2.34.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.34.0.tgz#50252630ca319685420e9a39ca05fe185a256bc8" + integrity sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA== + dependencies: + "@types/eslint-visitor-keys" "^1.0.0" + "@typescript-eslint/experimental-utils" "2.34.0" + "@typescript-eslint/typescript-estree" "2.34.0" + eslint-visitor-keys "^1.1.0" + +"@typescript-eslint/typescript-estree@2.34.0": + version "2.34.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz#14aeb6353b39ef0732cc7f1b8285294937cf37d5" + integrity sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg== + dependencies: + debug "^4.1.1" + eslint-visitor-keys "^1.1.0" + glob "^7.1.6" + is-glob "^4.0.1" + lodash "^4.17.15" + semver "^7.3.2" + tsutils "^3.17.1" + +"@webassemblyjs/ast@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" + integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== + dependencies: + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + +"@webassemblyjs/floating-point-hex-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" + integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== + +"@webassemblyjs/helper-api-error@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" + integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== + +"@webassemblyjs/helper-buffer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" + integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== + +"@webassemblyjs/helper-code-frame@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" + integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== + dependencies: + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/helper-fsm@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" + integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== + +"@webassemblyjs/helper-module-context@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" + integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== + dependencies: + "@webassemblyjs/ast" "1.9.0" + +"@webassemblyjs/helper-wasm-bytecode@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" + integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== + +"@webassemblyjs/helper-wasm-section@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" + integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + +"@webassemblyjs/ieee754@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" + integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" + integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" + integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== + +"@webassemblyjs/wasm-edit@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" + integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/helper-wasm-section" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-opt" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/wasm-gen@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" + integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wasm-opt@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" + integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + +"@webassemblyjs/wasm-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" + integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wast-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" + integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/floating-point-hex-parser" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-code-frame" "1.9.0" + "@webassemblyjs/helper-fsm" "1.9.0" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/wast-printer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" + integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + "@xtuc/long" "4.2.2" + +"@weknow/gatsby-remark-twitter@^0.2.3": + version "0.2.3" + resolved "https://registry.npmmirror.com/@weknow/gatsby-remark-twitter/download/@weknow/gatsby-remark-twitter-0.2.3.tgz#2b9292cc077196ebc6fbacf2af30bfe82f1f0f2e" + integrity sha1-K5KSzAdxluvG+6zyrzC/6C8fDy4= + dependencies: + babel-runtime "^6.26.0" + node-fetch "^2.3.0" + unist-util-visit "^1.1.3" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +accepts@^1.3.7, accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + +acorn-jsx@^5.2.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" + integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== + +acorn@^6.4.1: + version "6.4.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" + integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== + +acorn@^7.1.1: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +address@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/address/-/address-1.0.3.tgz#b5f50631f8d6cec8bd20c963963afb55e06cbce9" + integrity sha512-z55ocwKBRLryBs394Sm3ushTtBeg6VAeuku7utSoSnsJKvKcnXFIyC6vh27n3rXyxSgkJBBCAvyOn7gSUcTYjg== + +address@1.1.2, address@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" + integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA== + +after@0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" + integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8= + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv-errors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" + integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== + +ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +alphanum-sort@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" + integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= + +ansi-align@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" + integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== + dependencies: + string-width "^3.0.0" + +ansi-colors@^3.0.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" + integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== + +ansi-escapes@^3.0.0, ansi-escapes@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== + +ansi-escapes@^4.2.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" + integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== + dependencies: + type-fest "^0.11.0" + +ansi-html@0.0.7, ansi-html@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +application-config-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/application-config-path/-/application-config-path-0.1.0.tgz#193c5f0a86541a4c66fba1e2dc38583362ea5e8f" + integrity sha1-GTxfCoZUGkxm+6Hi3DhYM2LqXo8= + +aproba@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +arch@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11" + integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +aria-query@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" + integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== + dependencies: + "@babel/runtime" "^7.10.2" + "@babel/runtime-corejs3" "^7.10.2" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-filter@~0.0.0: + version "0.0.1" + resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" + integrity sha1-fajPLiZijtcygDWB/SH2fKzS7uw= + +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + +array-flatten@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + +array-includes@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348" + integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0" + is-string "^1.0.5" + +array-iterate@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/array-iterate/-/array-iterate-1.1.4.tgz#add1522e9dd9749bb41152d08b845bd08d6af8b7" + integrity sha512-sNRaPGh9nnmdC8Zf+pT3UqP8rnWj5Hf9wiFGsX3wUQ2yVSIhO2ShFwCoceIPpB41QF6i2OEmrHmCo36xronCVA== + +array-map@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" + integrity sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI= + +array-reduce@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" + integrity sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys= + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +array.prototype.flat@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b" + integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +array.prototype.flatmap@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.3.tgz#1c13f84a178566042dd63de4414440db9222e443" + integrity sha512-OOEk+lkePcg+ODXIpvuU9PAryCikCJyo7GlDG1upleEpQRx6mzL9puEBkozQ5iAx20KV0l3DbyQwqciJtqe5Pg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + +arraybuffer.slice@~0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" + integrity sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog== + +asn1.js@^5.2.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" + integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + safer-buffer "^2.1.0" + +assert@^1.1.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== + dependencies: + object-assign "^4.1.1" + util "0.10.3" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +ast-types-flow@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= + +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + +async-cache@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/async-cache/-/async-cache-1.1.0.tgz#4a9a5a89d065ec5d8e5254bd9ee96ba76c532b5a" + integrity sha1-SppaidBl7F2OUlS9nulrp2xTK1o= + dependencies: + lru-cache "^4.0.0" + +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +async-retry-ng@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/async-retry-ng/-/async-retry-ng-2.0.1.tgz#f5285ec1c52654a2ba6a505d0c18b1eadfaebd41" + integrity sha512-iitlc2murdQ3/A5Re3CcplQBEf7vOmFrFQ6RFn3+/+zZUyIHYkZnnEziMSa6YIb2Bs2EJEPZWReTxjHqvQbDbw== + +async@1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= + +async@^2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + dependencies: + lodash "^4.17.14" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +autoprefixer@^9.8.4: + version "9.8.6" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.6.tgz#3b73594ca1bf9266320c5acf1588d74dea74210f" + integrity sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg== + dependencies: + browserslist "^4.12.0" + caniuse-lite "^1.0.30001109" + colorette "^1.2.1" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^7.0.32" + postcss-value-parser "^4.1.0" + +axe-core@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.0.2.tgz#c7cf7378378a51fcd272d3c09668002a4990b1cb" + integrity sha512-arU1h31OGFu+LPrOLGZ7nB45v940NMDMEJeNmbutu57P+UFDVnkZg3e+J1I2HJRZ9hT7gO8J91dn/PMrAiKakA== + +axios@^0.19.0: + version "0.19.2" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27" + integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA== + dependencies: + follow-redirects "1.5.10" + +axios@^0.20.0: + version "0.20.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.20.0.tgz#057ba30f04884694993a8cd07fa394cff11c50bd" + integrity sha512-ANA4rr2BDcmmAQLOKft2fufrtuvlqR+cXNNinUmvfeSNCOF98PZL+7M/v1zIdGo7OLjEA9J2gXJL+j4zGsl0bA== + dependencies: + follow-redirects "^1.10.0" + +axobject-query@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be" + integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA== + +babel-code-frame@6.26.0, babel-code-frame@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-core@7.0.0-bridge.0: + version "7.0.0-bridge.0" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece" + integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg== + +babel-eslint@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232" + integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.7.0" + "@babel/traverse" "^7.7.0" + "@babel/types" "^7.7.0" + eslint-visitor-keys "^1.0.0" + resolve "^1.12.0" + +babel-loader@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.1.0.tgz#c611d5112bd5209abe8b9fa84c3e4da25275f1c3" + integrity sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw== + dependencies: + find-cache-dir "^2.1.0" + loader-utils "^1.4.0" + mkdirp "^0.5.3" + pify "^4.0.1" + schema-utils "^2.6.5" + +babel-plugin-add-module-exports@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-0.3.3.tgz#b9f7c0a93b989170dce07c3e97071a905a13fc29" + integrity sha512-hC37mm7aAdEb1n8SgggG8a1QuhZapsY/XLCi4ETSH6AVjXBCWEa50CXlOsAMPPWLnSx5Ns6mzz39uvuseh0Xjg== + optionalDependencies: + chokidar "^2.0.4" + +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== + dependencies: + object.assign "^4.1.0" + +babel-plugin-lodash@3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/babel-plugin-lodash/-/babel-plugin-lodash-3.3.4.tgz#4f6844358a1340baed182adbeffa8df9967bc196" + integrity sha512-yDZLjK7TCkWl1gpBeBGmuaDIFhZKmkoL+Cu2MUUjv5VxUZx/z7tBGBCBcQs5RI1Bkz5LLmNdjx7paOyQtMovyg== + dependencies: + "@babel/helper-module-imports" "^7.0.0-beta.49" + "@babel/types" "^7.0.0-beta.49" + glob "^7.1.1" + lodash "^4.17.10" + require-package-name "^2.0.1" + +babel-plugin-macros@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138" + integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg== + dependencies: + "@babel/runtime" "^7.7.2" + cosmiconfig "^6.0.0" + resolve "^1.12.0" + +babel-plugin-remove-graphql-queries@^2.9.20: + version "2.9.20" + resolved "https://registry.yarnpkg.com/babel-plugin-remove-graphql-queries/-/babel-plugin-remove-graphql-queries-2.9.20.tgz#69ad42efdb3b4340992080afba101d2d1a2843b2" + integrity sha512-FB4tIvdXaGFBFhHAzlqB0NxVA5BcjzVYbY8ut7ProStW3cjv208ADMlfzmPdSP/I1Z0wl2MrXgHNCrL1TQ/Mew== + +babel-plugin-transform-react-remove-prop-types@^0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz#f2edaf9b4c6a5fbe5c1d678bfb531078c1555f3a" + integrity sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA== + +babel-preset-gatsby@^0.5.15: + version "0.5.15" + resolved "https://registry.yarnpkg.com/babel-preset-gatsby/-/babel-preset-gatsby-0.5.15.tgz#03b25bd6a12bbd4267612dd9425bc38ec106bd4c" + integrity sha512-0eno/GAvzmaLW/s+RzsLXrZVQwBMZYU/zMv1HpArGlYbNCon/fK53/Bz3pklJDq1pNAybXQ2RROpPHDyJM2EGA== + dependencies: + "@babel/plugin-proposal-class-properties" "^7.10.4" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.4" + "@babel/plugin-proposal-optional-chaining" "^7.11.0" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-transform-runtime" "^7.11.5" + "@babel/plugin-transform-spread" "^7.11.0" + "@babel/preset-env" "^7.11.5" + "@babel/preset-react" "^7.10.4" + "@babel/runtime" "^7.11.2" + babel-plugin-dynamic-import-node "^2.3.3" + babel-plugin-macros "^2.8.0" + babel-plugin-transform-react-remove-prop-types "^0.4.24" + gatsby-core-utils "^1.3.23" + gatsby-legacy-polyfills "^0.0.6" + +babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +backo2@1.0.2, backo2@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" + integrity sha1-MasayLEpNjRj41s+u2n038+6eUc= + +bail@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776" + integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ== + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base64-arraybuffer@0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz#9818c79e059b1355f97e0428a017c838e90ba812" + integrity sha1-mBjHngWbE1X5fgQooBfIOOkLqBI= + +base64-arraybuffer@0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" + integrity sha1-c5JncZI7Whl0etZmqlzUv5xunOg= + +base64-js@^1.0.2, base64-js@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" + integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== + +base64id@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" + integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= + +better-assert@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" + integrity sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI= + dependencies: + callsite "1.0.0" + +better-opn@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/better-opn/-/better-opn-2.1.1.tgz#94a55b4695dc79288f31d7d0e5f658320759f7c6" + integrity sha512-kIPXZS5qwyKiX/HcRvDYfmBQUa8XP17I0mYZZ0y4UhpYOSvtsLHDYqmomS+Mj20aDvD3knEiQ0ecQy2nhio3yA== + dependencies: + open "^7.0.3" + +better-queue-memory@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/better-queue-memory/-/better-queue-memory-1.0.4.tgz#f390d6b30bb3b36aaf2ce52b37a483e8a7a81a22" + integrity sha512-SWg5wFIShYffEmJpI6LgbL8/3Dqhku7xI1oEiy6FroP9DbcZlG0ZDjxvPdP9t7hTGW40IpIcC6zVoGT1oxjOuA== + +better-queue@^3.8.10: + version "3.8.10" + resolved "https://registry.yarnpkg.com/better-queue/-/better-queue-3.8.10.tgz#1c93b9ec4cb3d1b72eb91d0efcb84fc80e8c6835" + integrity sha512-e3gwNZgDCnNWl0An0Tz6sUjKDV9m6aB+K9Xg//vYeo8+KiH8pWhLFxkawcXhm6FpM//GfD9IQv/kmvWCAVVpKA== + dependencies: + better-queue-memory "^1.0.1" + node-eta "^0.9.0" + uuid "^3.0.0" + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +bignumber.js@^8.1.1: + version "8.1.1" + resolved "https://registry.nlark.com/bignumber.js/download/bignumber.js-8.1.1.tgz#4b072ae5aea9c20f6730e4e5d529df1271c4d885" + integrity sha1-Swcq5a6pwg9nMOTl1SnfEnHE2IU= + +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + +binary-extensions@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" + integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +bl@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.3.tgz#12d6287adc29080e22a705e5764b2a9522cdc489" + integrity sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +blob@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683" + integrity sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig== + +bluebird@^3.5.5, bluebird@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.4.0: + version "4.11.9" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" + integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== + +bn.js@^5.1.1: + version "5.1.3" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.3.tgz#beca005408f642ebebea80b042b4d18d2ac0ee6b" + integrity sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ== + +body-parser@1.19.0, body-parser@^1.19.0: + version "1.19.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + dependencies: + bytes "3.1.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" + +bonjour@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" + integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= + dependencies: + array-flatten "^2.1.0" + deep-equal "^1.0.1" + dns-equal "^1.0.0" + dns-txt "^2.0.2" + multicast-dns "^6.0.1" + multicast-dns-service-types "^1.1.0" + +boolbase@^1.0.0, boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + +boxen@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" + integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ== + dependencies: + ansi-align "^3.0.0" + camelcase "^5.3.1" + chalk "^3.0.0" + cli-boxes "^2.2.0" + string-width "^4.1.0" + term-size "^2.1.0" + type-fest "^0.8.1" + widest-line "^3.1.0" + +brace-expansion@^1.0.0, brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@^3.0.1, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" + integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== + dependencies: + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.3" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + +browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.12.2, browserslist@^4.8.5: + version "4.14.6" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.6.tgz#97702a9c212e0c6b6afefad913d3a1538e348457" + integrity sha512-zeFYcUo85ENhc/zxHbiIp0LGzzTrE2Pv2JhxvS7kpUb9Q9D38kUX6Bie7pGutJ/5iF5rOxE7CepAuWD56xJ33A== + dependencies: + caniuse-lite "^1.0.30001154" + electron-to-chromium "^1.3.585" + escalade "^3.1.1" + node-releases "^1.1.65" + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +buffer-indexof@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" + integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer@^4.3.0: + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +buffer@^5.5.0: + version "5.7.0" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.0.tgz#88afbd29fc89fa7b58e82b39206f31f2cf34feed" + integrity sha512-cd+5r1VLBwUqTrmnzW+D7ABkJUM6mr7uv1dv+6jRw4Rcl7tFIFHDqHPL98LhpGFn3dbAt3gtLxtrWp4m1kFrqg== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +bufferutil@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.2.tgz#79f68631910f6b993d870fc77dc0a2894eb96cd5" + integrity sha512-AtnG3W6M8B2n4xDQ5R+70EXvOpnXsFYg/AK2yTZd+HQ/oxAdz+GI+DvjmhBw3L0ole+LJ0ngqY4JMbDzkfNzhA== + dependencies: + node-gyp-build "^4.2.0" + +builtin-modules@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.1.0.tgz#aad97c15131eb76b65b50ef208e7584cd76a7484" + integrity sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw== + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + +cacache@^12.0.2: + version "12.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" + integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + infer-owner "^1.0.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + +cacache@^13.0.1: + version "13.0.1" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-13.0.1.tgz#a8000c21697089082f85287a1aec6e382024a71c" + integrity sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w== + dependencies: + chownr "^1.1.2" + figgy-pudding "^3.5.1" + fs-minipass "^2.0.0" + glob "^7.1.4" + graceful-fs "^4.2.2" + infer-owner "^1.0.4" + lru-cache "^5.1.1" + minipass "^3.0.0" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + p-map "^3.0.0" + promise-inflight "^1.0.1" + rimraf "^2.7.1" + ssri "^7.0.0" + unique-filename "^1.1.1" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +cache-manager-fs-hash@^0.0.9: + version "0.0.9" + resolved "https://registry.yarnpkg.com/cache-manager-fs-hash/-/cache-manager-fs-hash-0.0.9.tgz#a65bb7ca2c9f9f9cf7035945bbfab536c5aab340" + integrity sha512-G0RUUSMZADiMx/0tHjPa+uzJyjtVB/Xt9yuFm6g/rBpm0p/IMr4atUWX2G2f1yGCPmDnyUcFz4RlSpgNRgvldg== + dependencies: + lockfile "^1.0.4" + +cache-manager@^2.11.1: + version "2.11.1" + resolved "https://registry.yarnpkg.com/cache-manager/-/cache-manager-2.11.1.tgz#212e8c3db15288af653b029a1d9fe12f1fd9df61" + integrity sha512-XhUuc9eYwkzpK89iNewFwtvcDYMUsvtwzHeyEOPJna/WsVsXcrzsA1ft2M0QqPNunEzLhNCYPo05tEfG+YuNow== + dependencies: + async "1.5.2" + lodash.clonedeep "4.5.0" + lru-cache "4.0.0" + +cacheable-request@^2.1.1: + version "2.1.4" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-2.1.4.tgz#0d808801b6342ad33c91df9d0b44dc09b91e5c3d" + integrity sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0= + dependencies: + clone-response "1.0.2" + get-stream "3.0.0" + http-cache-semantics "3.8.1" + keyv "3.0.0" + lowercase-keys "1.0.0" + normalize-url "2.0.1" + responselike "1.0.2" + +cacheable-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" + integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^3.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^1.0.2" + +call-bind@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.0.tgz#24127054bb3f9bdcb4b1fb82418186072f77b8ce" + integrity sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.0" + +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + dependencies: + callsites "^2.0.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + dependencies: + caller-callsite "^2.0.0" + +callsite@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" + integrity sha1-KAOY5dZkvXQDi28JBRU+borxvCA= + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camel-case@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.1.tgz#1fc41c854f00e2f7d0139dfeba1542d6896fe547" + integrity sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q== + dependencies: + pascal-case "^3.1.1" + tslib "^1.10.0" + +camelcase-css@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" + integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== + +camelcase@^5.0.0, camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +caniuse-api@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" + integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== + dependencies: + browserslist "^4.0.0" + caniuse-lite "^1.0.0" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001154: + version "1.0.30001154" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001154.tgz#f3bbc245ce55e4c1cd20fa731b097880181a7f17" + integrity sha512-y9DvdSti8NnYB9Be92ddMZQrcOe04kcQtcxtBx4NkB04+qZ+JUWotnXBJTmxlKudhxNTQ3RRknMwNU2YQl/Org== + +ccount@^1.0.0, ccount@^1.0.3: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043" + integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg== + +chalk@1.1.3, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +character-entities-html4@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.4.tgz#0e64b0a3753ddbf1fdc044c5fd01d0199a02e125" + integrity sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g== + +character-entities-legacy@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" + integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA== + +character-entities@^1.0.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b" + integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw== + +character-reference-invalid@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" + integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== + +chardet@^0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" + integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I= + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +chokidar@^2.0.4, chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + +chokidar@^3.4.1, chokidar@^3.4.2, chokidar@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.3.tgz#c1df38231448e45ca4ac588e6c79573ba6a57d5b" + integrity sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.5.0" + optionalDependencies: + fsevents "~2.1.2" + +chownr@^1.1.1, chownr@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +chrome-trace-event@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" + integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== + dependencies: + tslib "^1.9.0" + +ci-info@2.0.0, ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-boxes@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" + integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== + +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= + dependencies: + restore-cursor "^2.0.0" + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-table3@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" + integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw== + dependencies: + object-assign "^4.1.0" + string-width "^2.1.1" + optionalDependencies: + colors "^1.1.2" + +cli-width@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" + integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + +clipboard@^2.0.0: + version "2.0.6" + resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.6.tgz#52921296eec0fdf77ead1749421b21c968647376" + integrity sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg== + dependencies: + good-listener "^1.2.2" + select "^1.1.2" + tiny-emitter "^2.0.0" + +clipboardy@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-2.3.0.tgz#3c2903650c68e46a91b388985bc2774287dba290" + integrity sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ== + dependencies: + arch "^2.1.1" + execa "^1.0.0" + is-wsl "^2.1.1" + +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + +clone-response@1.0.2, clone-response@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" + integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= + dependencies: + mimic-response "^1.0.0" + +clone@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= + +coa@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" + integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== + dependencies: + "@types/q" "^1.5.1" + chalk "^2.4.1" + q "^1.1.2" + +codemirror-graphql@0.12.3: + version "0.12.3" + resolved "https://registry.yarnpkg.com/codemirror-graphql/-/codemirror-graphql-0.12.3.tgz#8b76f59ea02ead356ca39c9574827396e4b4b454" + integrity sha512-u0TooVA2MWGNV+Bio89RCTRW9P5FqegB1V9rnz9I0QKoGXX/c9z9/Fc+nj18p8jxkWK8ii8d7hkz7vsNsHxdkw== + dependencies: + graphql-language-service-interface "^2.4.2" + graphql-language-service-parser "^1.6.4" + +codemirror@5.58.2: + version "5.58.2" + resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.58.2.tgz#ed54a1796de1498688bea1cdd4e9eeb187565d1b" + integrity sha512-K/hOh24cCwRutd1Mk3uLtjWzNISOkm4fvXiMO7LucCrqbh6aJDdtqUziim3MZUI6wOY0rvY1SlL1Ork01uMy6w== + +collapse-white-space@^1.0.0, collapse-white-space@^1.0.2: + version "1.0.6" + resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287" + integrity sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ== + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0, color-convert@^1.9.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@^1.0.0, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.4.tgz#dd51cd25cfee953d138fe4002372cc3d0e504cb6" + integrity sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^3.0.0: + version "3.1.3" + resolved "https://registry.yarnpkg.com/color/-/color-3.1.3.tgz#ca67fb4e7b97d611dcde39eceed422067d91596e" + integrity sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ== + dependencies: + color-convert "^1.9.1" + color-string "^1.5.4" + +colorette@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" + integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== + +colors@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +comma-separated-tokens@^1.0.0, comma-separated-tokens@^1.0.1: + version "1.0.8" + resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea" + integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== + +command-exists@^1.2.4: + version "1.2.9" + resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" + integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== + +commander@^2.20.0, commander@^2.20.3: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +common-tags@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" + integrity sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +component-bind@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" + integrity sha1-AMYIq33Nk4l8AAllGx06jh5zu9E= + +component-emitter@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= + +component-emitter@^1.2.1, component-emitter@~1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +component-inherit@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" + integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM= + +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.5.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +configstore@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" + integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== + dependencies: + dot-prop "^5.2.0" + graceful-fs "^4.1.2" + make-dir "^3.0.0" + unique-string "^2.0.0" + write-file-atomic "^3.0.0" + xdg-basedir "^4.0.0" + +confusing-browser-globals@^1.0.9: + version "1.0.10" + resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.10.tgz#30d1e7f3d1b882b25ec4933d1d1adac353d20a59" + integrity sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA== + +connect-history-api-fallback@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" + integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== + +console-browserify@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + +contains-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= + +content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" + +content-type@^1.0.4, content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +contentful-management@^5.26.3: + version "5.28.0" + resolved "https://registry.yarnpkg.com/contentful-management/-/contentful-management-5.28.0.tgz#f3b58d60400d66e42439bbd9085cecb0e486f0bb" + integrity sha512-o+qihN3zrD6+/BT/e8n26jl/zQvmV6+9S6NY5QDmzM+IaiSeCk6yvPMq74s+IZT9mOS54igl6qFTbeIpdJ9FDA== + dependencies: + axios "^0.19.0" + contentful-sdk-core "^6.4.0" + lodash "^4.17.11" + type-fest "0.15.1" + +contentful-sdk-core@^6.4.0: + version "6.4.6" + resolved "https://registry.yarnpkg.com/contentful-sdk-core/-/contentful-sdk-core-6.4.6.tgz#a94b1355afd292dfddb0cdc16b565980f9a03c47" + integrity sha512-6KVLeCdn1akqjGvVMUgMxQ3B+zNIYeq3MUlqWsSLLJozr++0ZYWU76XmHf4n5MPTMoX9RGbRSR8hJAaKcUNDFw== + dependencies: + lodash "^4.17.10" + qs "^6.5.2" + +convert-hrtime@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/convert-hrtime/-/convert-hrtime-3.0.0.tgz#62c7593f5809ca10be8da858a6d2f702bcda00aa" + integrity sha512-7V+KqSvMiHp8yWDuwfww06XleMWVVB9b9tURBx+G7UTADuo5hYPuowKloz4OzOqbPezxgo+fdQ1522WzPG4OeA== + +convert-source-map@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + dependencies: + safe-buffer "~5.1.1" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + +cookie@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" + integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s= + +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +copyfiles@^2.3.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/copyfiles/-/copyfiles-2.4.0.tgz#fcac72a4f2b882f021dd156b4bcf6d71315487bd" + integrity sha512-yGjpR3yjQdxccW8EcJ4a7ZCA6wGER6/Q2Y+b7bXbVxGeSHBf93i9d7MzTsx+VV1CpMKQa3v4ThZfXBcltMzl0w== + dependencies: + glob "^7.0.5" + minimatch "^3.0.3" + mkdirp "^1.0.4" + noms "0.0.0" + through2 "^2.0.1" + untildify "^4.0.0" + yargs "^15.3.1" + +core-js-compat@^3.6.2, core-js-compat@^3.6.5: + version "3.6.5" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.5.tgz#2a51d9a4e25dfd6e690251aa81f99e3c05481f1c" + integrity sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng== + dependencies: + browserslist "^4.8.5" + semver "7.0.0" + +core-js-pure@^3.0.0: + version "3.6.5" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.5.tgz#c79e75f5e38dbc85a662d91eea52b8256d53b813" + integrity sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA== + +core-js@^2.4.0: + version "2.6.11" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" + integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== + +core-js@^3.6.5: + version "3.6.5" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a" + integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA== + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cors@^2.8.5: + version "2.8.5" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== + dependencies: + object-assign "^4" + vary "^1" + +cosmiconfig@6.0.0, cosmiconfig@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" + integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.7.2" + +cosmiconfig@^5.0.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.1" + parse-json "^4.0.0" + +create-ecdh@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" + integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== + dependencies: + bn.js "^4.1.0" + elliptic "^6.5.3" + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +create-react-context@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/create-react-context/-/create-react-context-0.3.0.tgz#546dede9dc422def0d3fc2fe03afe0bc0f4f7d8c" + integrity sha512-dNldIoSuNSvlTJ7slIKC/ZFGKexBMBrrcc+TTe1NdmROnaASuLPvqpwj9v4XS4uXZ8+YPu0sNmShX2rXI5LNsw== + dependencies: + gud "^1.0.0" + warning "^4.0.3" + +cross-fetch@3.0.6: + version "3.0.6" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.0.6.tgz#3a4040bc8941e653e0e9cf17f29ebcd177d3365c" + integrity sha512-KBPUbqgFjzWlVcURG+Svp9TlhA5uliYtiNx/0r8nv0pdypeQCRJ9IaSIc3q/x3q8t3F75cHuwxVql1HFGHCNJQ== + dependencies: + node-fetch "2.6.1" + +cross-spawn@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^6.0.0, cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^7.0.0: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +crypto-random-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== + +css-color-names@0.0.4, css-color-names@^0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" + integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= + +css-declaration-sorter@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22" + integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA== + dependencies: + postcss "^7.0.1" + timsort "^0.3.0" + +css-loader@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-1.0.1.tgz#6885bb5233b35ec47b006057da01cc640b6b79fe" + integrity sha512-+ZHAZm/yqvJ2kDtPne3uX0C+Vr3Zn5jFn2N4HywtS5ujwvsVkyg0VArEXpl3BgczDA8anieki1FIzhchX4yrDw== + dependencies: + babel-code-frame "^6.26.0" + css-selector-tokenizer "^0.7.0" + icss-utils "^2.1.0" + loader-utils "^1.0.2" + lodash "^4.17.11" + postcss "^6.0.23" + postcss-modules-extract-imports "^1.2.0" + postcss-modules-local-by-default "^1.2.0" + postcss-modules-scope "^1.1.0" + postcss-modules-values "^1.3.0" + postcss-value-parser "^3.3.0" + source-list-map "^2.0.0" + +css-select-base-adapter@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" + integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== + +css-select@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" + integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= + dependencies: + boolbase "~1.0.0" + css-what "2.1" + domutils "1.5.1" + nth-check "~1.0.1" + +css-select@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" + integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== + dependencies: + boolbase "^1.0.0" + css-what "^3.2.1" + domutils "^1.7.0" + nth-check "^1.0.2" + +css-selector-parser@^1.1.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/css-selector-parser/-/css-selector-parser-1.4.1.tgz#03f9cb8a81c3e5ab2c51684557d5aaf6d2569759" + integrity sha512-HYPSb7y/Z7BNDCOrakL4raGO2zltZkbeXyAd6Tg9obzix6QhzxCotdBl6VT0Dv4vZfJGVz3WL/xaEI9Ly3ul0g== + +css-selector-tokenizer@^0.7.0: + version "0.7.3" + resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz#735f26186e67c749aaf275783405cf0661fae8f1" + integrity sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg== + dependencies: + cssesc "^3.0.0" + fastparse "^1.1.2" + +css-tree@1.0.0-alpha.37: + version "1.0.0-alpha.37" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" + integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== + dependencies: + mdn-data "2.0.4" + source-map "^0.6.1" + +css-tree@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0.tgz#21993fa270d742642a90409a2c0cb3ac0298adf6" + integrity sha512-CdVYz/Yuqw0VdKhXPBIgi8DO3NicJVYZNWeX9XcIuSp9ZoFT5IcleVRW07O5rMjdcx1mb+MEJPknTTEW7DdsYw== + dependencies: + mdn-data "2.0.12" + source-map "^0.6.1" + +css-what@2.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" + integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== + +css-what@^3.2.1: + version "3.4.2" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" + integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssfilter@0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/cssfilter/-/cssfilter-0.0.10.tgz#c6d2672632a2e5c83e013e6864a42ce8defd20ae" + integrity sha1-xtJnJjKi5cg+AT5oZKQs6N79IK4= + +cssnano-preset-default@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz#51ec662ccfca0f88b396dcd9679cdb931be17f76" + integrity sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA== + dependencies: + css-declaration-sorter "^4.0.1" + cssnano-util-raw-cache "^4.0.1" + postcss "^7.0.0" + postcss-calc "^7.0.1" + postcss-colormin "^4.0.3" + postcss-convert-values "^4.0.1" + postcss-discard-comments "^4.0.2" + postcss-discard-duplicates "^4.0.2" + postcss-discard-empty "^4.0.1" + postcss-discard-overridden "^4.0.1" + postcss-merge-longhand "^4.0.11" + postcss-merge-rules "^4.0.3" + postcss-minify-font-values "^4.0.2" + postcss-minify-gradients "^4.0.2" + postcss-minify-params "^4.0.2" + postcss-minify-selectors "^4.0.2" + postcss-normalize-charset "^4.0.1" + postcss-normalize-display-values "^4.0.2" + postcss-normalize-positions "^4.0.2" + postcss-normalize-repeat-style "^4.0.2" + postcss-normalize-string "^4.0.2" + postcss-normalize-timing-functions "^4.0.2" + postcss-normalize-unicode "^4.0.1" + postcss-normalize-url "^4.0.1" + postcss-normalize-whitespace "^4.0.2" + postcss-ordered-values "^4.1.2" + postcss-reduce-initial "^4.0.3" + postcss-reduce-transforms "^4.0.2" + postcss-svgo "^4.0.2" + postcss-unique-selectors "^4.0.1" + +cssnano-util-get-arguments@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" + integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= + +cssnano-util-get-match@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" + integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= + +cssnano-util-raw-cache@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282" + integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA== + dependencies: + postcss "^7.0.0" + +cssnano-util-same-parent@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" + integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== + +cssnano@^4.1.10: + version "4.1.10" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.10.tgz#0ac41f0b13d13d465487e111b778d42da631b8b2" + integrity sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ== + dependencies: + cosmiconfig "^5.0.0" + cssnano-preset-default "^4.0.7" + is-resolvable "^1.0.0" + postcss "^7.0.0" + +csso@^4.0.2: + version "4.1.0" + resolved "https://registry.yarnpkg.com/csso/-/csso-4.1.0.tgz#1d31193efa99b87aa6bad6c0cef155e543d09e8b" + integrity sha512-h+6w/W1WqXaJA4tb1dk7r5tVbOm97MsKxzwnvOR04UQ6GILroryjMWu3pmCCtL2mLaEStQ0fZgeGiy99mo7iyg== + dependencies: + css-tree "^1.0.0" + +csstype@^3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.4.tgz#b156d7be03b84ff425c9a0a4b1e5f4da9c5ca888" + integrity sha512-xc8DUsCLmjvCfoD7LTGE0ou2MIWLx0K9RCZwSHMOdynqRsP4MtUcLeqh1HcQ2dInwDTqn+3CE0/FZh1et+p4jA== + +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= + dependencies: + array-find-index "^1.0.1" + +cyclist@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" + integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= + +d@1, d@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== + dependencies: + es5-ext "^0.10.50" + type "^1.0.1" + +damerau-levenshtein@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz#143c1641cb3d85c60c32329e26899adea8701791" + integrity sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug== + +dataloader@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-2.0.0.tgz#41eaf123db115987e21ca93c005cd7753c55fe6f" + integrity sha512-YzhyDAwA4TaQIhM5go+vCLmU0UikghC/t9DTQYZR2M/UvZ1MdOhPezSDZcjj9uqQJOMqjLcpWtyW2iNINdlatQ== + +date-fns@^2.14.0: + version "2.16.1" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.16.1.tgz#05775792c3f3331da812af253e1a935851d3834b" + integrity sha512-sAJVKx/FqrLYHAQeN7VpJrPhagZc9R4ImZIWYRFZaaohR3KzmuK88touwsSwSVT8Qcbd4zoDsnGfX4GFB4imyQ== + +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.6, debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@=3.1.0, debug@~3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + +debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.5, debug@^3.2.6: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1" + integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg== + dependencies: + ms "2.1.2" + +debug@~4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= + dependencies: + mimic-response "^1.0.0" + +deep-equal@^1.0.1, deep-equal@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" + integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== + dependencies: + is-arguments "^1.0.4" + is-date-object "^1.0.1" + is-regex "^1.0.4" + object-is "^1.0.1" + object-keys "^1.1.1" + regexp.prototype.flags "^1.2.0" + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +default-gateway@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" + integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== + dependencies: + execa "^1.0.0" + ip-regex "^2.1.0" + +defer-to-connect@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" + integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== + +define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +del@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" + integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== + dependencies: + "@types/glob" "^7.1.1" + globby "^6.1.0" + is-path-cwd "^2.0.0" + is-path-in-cwd "^2.0.0" + p-map "^2.0.0" + pify "^4.0.1" + rimraf "^2.6.3" + +del@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/del/-/del-5.1.0.tgz#d9487c94e367410e6eff2925ee58c0c84a75b3a7" + integrity sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA== + dependencies: + globby "^10.0.1" + graceful-fs "^4.2.2" + is-glob "^4.0.1" + is-path-cwd "^2.2.0" + is-path-inside "^3.0.1" + p-map "^3.0.0" + rimraf "^3.0.0" + slash "^3.0.0" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +delegate@^3.1.2: + version "3.2.0" + resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166" + integrity sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw== + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + +detab@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/detab/-/detab-2.0.4.tgz#b927892069aff405fbb9a186fe97a44a92a94b43" + integrity sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g== + dependencies: + repeat-string "^1.5.4" + +detect-indent@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.0.0.tgz#0abd0f549f69fc6659a254fe96786186b6f528fd" + integrity sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA== + +detect-newline@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-1.0.3.tgz#e97b1003877d70c09af1af35bfadff168de4920d" + integrity sha1-6XsQA4d9cMCa8a81v63/Fo3kkg0= + dependencies: + get-stdin "^4.0.1" + minimist "^1.1.0" + +detect-node@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" + integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== + +detect-port-alt@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.3.tgz#a4d2f061d757a034ecf37c514260a98750f2b131" + integrity sha1-pNLwYddXoDTs83xRQmCph1DysTE= + dependencies: + address "^1.0.1" + debug "^2.6.0" + +detect-port@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.3.0.tgz#d9c40e9accadd4df5cac6a782aefd014d573d1f1" + integrity sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ== + dependencies: + address "^1.0.1" + debug "^2.6.0" + +devcert@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/devcert/-/devcert-1.1.3.tgz#ff8119efae52ebf2449531b7482ae0f7211542e9" + integrity sha512-7/nIzKdQ8y2K0imjIP7dyg2GJ2h38Ps6VOMXWZHIarNDV3p6mTXyEugKFnkmsZ2DD58JEG34ILyVb3qdOMmP9w== + dependencies: + "@types/configstore" "^2.1.1" + "@types/debug" "^0.0.30" + "@types/get-port" "^3.2.0" + "@types/glob" "^5.0.34" + "@types/lodash" "^4.14.92" + "@types/mkdirp" "^0.5.2" + "@types/node" "^8.5.7" + "@types/rimraf" "^2.0.2" + "@types/tmp" "^0.0.33" + application-config-path "^0.1.0" + command-exists "^1.2.4" + debug "^3.1.0" + eol "^0.9.1" + get-port "^3.2.0" + glob "^7.1.2" + lodash "^4.17.4" + mkdirp "^0.5.1" + password-prompt "^1.0.4" + rimraf "^2.6.2" + sudo-prompt "^8.2.0" + tmp "^0.0.33" + tslib "^1.10.0" + +diff-sequences@^25.2.6: + version "25.2.6" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd" + integrity sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg== + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= + +dns-packet@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" + integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg== + dependencies: + ip "^1.1.0" + safe-buffer "^5.0.1" + +dns-txt@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" + integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= + dependencies: + buffer-indexof "^1.0.0" + +doctrine@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dom-converter@^0.2: + version "0.2.0" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== + dependencies: + utila "~0.4" + +dom-serializer@0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" + integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" + +dom-serializer@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.1.0.tgz#5f7c828f1bfc44887dc2a315ab5c45691d544b58" + integrity sha512-ox7bvGXt2n+uLWtCRLybYx60IrOlWL/aCebWJk1T0d4m3y2tzf4U3ij9wBMUb6YJZpz06HCCYuyCDveE2xXmzQ== + dependencies: + domelementtype "^2.0.1" + domhandler "^3.0.0" + entities "^2.0.0" + +dom-walk@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" + integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== + +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== + +domelementtype@1, domelementtype@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + +domelementtype@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.2.tgz#f3b6e549201e46f588b59463dd77187131fe6971" + integrity sha512-wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA== + +domhandler@^2.3.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" + integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== + dependencies: + domelementtype "1" + +domhandler@^3.0.0, domhandler@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.3.0.tgz#6db7ea46e4617eb15cf875df68b2b8524ce0037a" + integrity sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA== + dependencies: + domelementtype "^2.0.1" + +domutils@1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@^1.5.1, domutils@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@^2.0.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.4.2.tgz#7ee5be261944e1ad487d9aa0616720010123922b" + integrity sha512-NKbgaM8ZJOecTZsIzW5gSuplsX2IWW2mIK7xVr8hTQF2v1CJWTmLZ1HOCh5sH+IzVPAGE5IucooOkvwBRAdowA== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.0.1" + domhandler "^3.3.0" + +dot-prop@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +dotenv@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" + integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== + +duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= + +duplexer@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +electron-to-chromium@^1.3.585: + version "1.3.585" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.585.tgz#71cdb722c73488b9475ad1c572cf43a763ef9081" + integrity sha512-xoeqjMQhgHDZM7FiglJAb2aeOxHZWFruUc3MbAGTgE7GB8rr5fTn1Sdh5THGuQtndU3GuXlu91ZKqRivxoCZ/A== + +elliptic@^6.5.3: + version "6.5.3" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" + integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + +"emoji-regex@>=6.0.0 <=6.1.1": + version "6.1.1" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.1.1.tgz#c6cd0ec1b0642e2a3c67a1137efc5e796da4f88e" + integrity sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4= + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.0.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.0.tgz#a26da8e832b16a9753309f25e35e3c0efb9a066a" + integrity sha512-DNc3KFPK18bPdElMJnf/Pkv5TXhxFU3YFDEuGLDRtPmV4rkmCjBkCSEp22u6rBHdSN9Vlp/GK7k98prmE1Jgug== + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +engine.io-client@~3.4.0: + version "3.4.4" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.4.4.tgz#77d8003f502b0782dd792b073a4d2cf7ca5ab967" + integrity sha512-iU4CRr38Fecj8HoZEnFtm2EiKGbYZcPn3cHxqNGl/tmdWRf60KhK+9vE0JeSjgnlS/0oynEfLgKbT9ALpim0sQ== + dependencies: + component-emitter "~1.3.0" + component-inherit "0.0.3" + debug "~3.1.0" + engine.io-parser "~2.2.0" + has-cors "1.1.0" + indexof "0.0.1" + parseqs "0.0.6" + parseuri "0.0.6" + ws "~6.1.0" + xmlhttprequest-ssl "~1.5.4" + yeast "0.1.2" + +engine.io-parser@~2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.2.1.tgz#57ce5611d9370ee94f99641b589f94c97e4f5da7" + integrity sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg== + dependencies: + after "0.8.2" + arraybuffer.slice "~0.0.7" + base64-arraybuffer "0.1.4" + blob "0.0.5" + has-binary2 "~1.0.2" + +engine.io@~3.4.0: + version "3.4.2" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.4.2.tgz#8fc84ee00388e3e228645e0a7d3dfaeed5bd122c" + integrity sha512-b4Q85dFkGw+TqgytGPrGgACRUhsdKc9S9ErRAXpPGy/CXKs4tYoHDkvIRdsseAF7NjfVwjRFIn6KTnbw7LwJZg== + dependencies: + accepts "~1.3.4" + base64id "2.0.0" + cookie "0.3.1" + debug "~4.1.0" + engine.io-parser "~2.2.0" + ws "^7.1.2" + +enhanced-resolve@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz#3b806f3bfafc1ec7de69551ef93cca46c1704126" + integrity sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.5.0" + tapable "^1.0.0" + +entities@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" + integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== + +entities@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5" + integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w== + +envinfo@^7.7.3: + version "7.7.3" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.7.3.tgz#4b2d8622e3e7366afb8091b23ed95569ea0208cc" + integrity sha512-46+j5QxbPWza0PB1i15nZx0xQ4I/EfQxg9J8Had3b408SV63nEtor2e+oiY63amTo9KTuh2a3XLObNwduxYwwA== + +eol@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/eol/-/eol-0.9.1.tgz#f701912f504074be35c6117a5c4ade49cd547acd" + integrity sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg== + +errno@^0.1.1, errno@^0.1.3, errno@~0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== + dependencies: + prr "~1.0.1" + +error-ex@^1.2.0, error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +error-stack-parser@^2.0.0, error-stack-parser@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.6.tgz#5a99a707bd7a4c58a797902d48d82803ede6aad8" + integrity sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ== + dependencies: + stackframe "^1.1.1" + +es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.5: + version "1.17.7" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.7.tgz#a4de61b2f66989fc7421676c1cb9787573ace54c" + integrity sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.2.2" + is-regex "^1.1.1" + object-inspect "^1.8.0" + object-keys "^1.1.1" + object.assign "^4.1.1" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" + +es-abstract@^1.18.0-next.0, es-abstract@^1.18.0-next.1: + version "1.18.0-next.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.1.tgz#6e3a0a4bda717e5023ab3b8e90bec36108d22c68" + integrity sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.2.2" + is-negative-zero "^2.0.0" + is-regex "^1.1.1" + object-inspect "^1.8.0" + object-keys "^1.1.1" + object.assign "^4.1.1" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es5-ext@^0.10.35, es5-ext@^0.10.50: + version "0.10.53" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" + integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== + dependencies: + es6-iterator "~2.0.3" + es6-symbol "~3.1.3" + next-tick "~1.0.0" + +es6-iterator@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-symbol@^3.1.1, es6-symbol@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + dependencies: + d "^1.0.1" + ext "^1.1.2" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-goat@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" + integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-config-react-app@^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" + integrity sha512-pGIZ8t0mFLcV+6ZirRgYK6RVqUIKRIi9MmgzUEmrIknsn3AdO0I32asO86dJgloHq+9ZPl8UIg8mYrvgP5u2wQ== + dependencies: + confusing-browser-globals "^1.0.9" + +eslint-import-resolver-node@^0.3.4: + version "0.3.4" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717" + integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== + dependencies: + debug "^2.6.9" + resolve "^1.13.1" + +eslint-loader@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-2.2.1.tgz#28b9c12da54057af0845e2a6112701a2f6bf8337" + integrity sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg== + dependencies: + loader-fs-cache "^1.0.0" + loader-utils "^1.0.2" + object-assign "^4.0.1" + object-hash "^1.1.4" + rimraf "^2.6.1" + +eslint-module-utils@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6" + integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA== + dependencies: + debug "^2.6.9" + pkg-dir "^2.0.0" + +eslint-plugin-flowtype@^3.13.0: + version "3.13.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-3.13.0.tgz#e241ebd39c0ce519345a3f074ec1ebde4cf80f2c" + integrity sha512-bhewp36P+t7cEV0b6OdmoRWJCBYRiHFlqPZAG1oS3SF+Y0LQkeDvFSM4oxoxvczD1OdONCXMlJfQFiWLcV9urw== + dependencies: + lodash "^4.17.15" + +eslint-plugin-graphql@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-graphql/-/eslint-plugin-graphql-4.0.0.tgz#d238ff2baee4d632cfcbe787a7a70a1f50428358" + integrity sha512-d5tQm24YkVvCEk29ZR5ScsgXqAGCjKlMS8lx3mS7FS/EKsWbkvXQImpvic03EpMIvNTBW5e+2xnHzXB/VHNZJw== + dependencies: + "@babel/runtime" "^7.10.0" + graphql-config "^3.0.2" + lodash.flatten "^4.4.0" + lodash.without "^4.4.0" + +eslint-plugin-import@^2.22.0: + version "2.22.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz#0896c7e6a0cf44109a2d97b95903c2bb689d7702" + integrity sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw== + 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.4" + 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.3.1: + version "6.4.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.4.1.tgz#a2d84caa49756942f42f1ffab9002436391718fd" + integrity sha512-0rGPJBbwHoGNPU73/QCLP/vveMlM1b1Z9PponxO87jfr6tuH5ligXbDT6nHSSzBC8ovX2Z+BQu7Bk5D/Xgq9zg== + dependencies: + "@babel/runtime" "^7.11.2" + aria-query "^4.2.2" + array-includes "^3.1.1" + ast-types-flow "^0.0.7" + axe-core "^4.0.2" + axobject-query "^2.2.0" + damerau-levenshtein "^1.0.6" + emoji-regex "^9.0.0" + has "^1.0.3" + jsx-ast-utils "^3.1.0" + language-tags "^1.0.5" + +eslint-plugin-react-hooks@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.7.0.tgz#6210b6d5a37205f0b92858f895a4e827020a7d04" + integrity sha512-iXTCFcOmlWvw4+TOE8CLWj6yX1GwzT0Y6cUfHHZqWnSk144VmVIRcVGtUAzrLES7C798lmvnt02C7rxaOX1HNA== + +eslint-plugin-react@^7.20.6: + version "7.21.5" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.21.5.tgz#50b21a412b9574bfe05b21db176e8b7b3b15bff3" + integrity sha512-8MaEggC2et0wSF6bUeywF7qQ46ER81irOdWS4QWxnnlAEsnzeBevk1sWh7fhpCghPpXb+8Ks7hvaft6L/xsR6g== + dependencies: + array-includes "^3.1.1" + array.prototype.flatmap "^1.2.3" + doctrine "^2.1.0" + has "^1.0.3" + jsx-ast-utils "^2.4.1 || ^3.0.0" + object.entries "^1.1.2" + object.fromentries "^2.0.2" + object.values "^1.1.1" + prop-types "^15.7.2" + resolve "^1.18.1" + string.prototype.matchall "^4.0.2" + +eslint-scope@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-scope@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-utils@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" + integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-utils@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint@^6.8.0: + version "6.8.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" + integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== + dependencies: + "@babel/code-frame" "^7.0.0" + ajv "^6.10.0" + chalk "^2.1.0" + cross-spawn "^6.0.5" + debug "^4.0.1" + doctrine "^3.0.0" + eslint-scope "^5.0.0" + eslint-utils "^1.4.3" + eslint-visitor-keys "^1.1.0" + espree "^6.1.2" + esquery "^1.0.1" + 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.3.0" + lodash "^4.17.14" + minimatch "^3.0.4" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.3" + progress "^2.0.0" + regexpp "^2.0.1" + semver "^6.1.2" + strip-ansi "^5.2.0" + strip-json-comments "^3.0.1" + table "^5.2.3" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^6.1.2: + version "6.2.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" + integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw== + dependencies: + acorn "^7.1.1" + acorn-jsx "^5.2.0" + eslint-visitor-keys "^1.1.0" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.0.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" + integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.1.0, esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +event-source-polyfill@^1.0.15: + version "1.0.21" + resolved "https://registry.yarnpkg.com/event-source-polyfill/-/event-source-polyfill-1.0.21.tgz#6b11b1299517a48e04540748b7c23f5a7620155b" + integrity sha512-Mz8LO8hPgg2X6VcSXmq7gvgFU3kUnTZb4zU3tTYDx8cJHRXP15tjdpGUiP2IUUwOqAGZ1TEfe+KagjMXfFgwLA== + +eventemitter3@^3.1.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" + integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== + +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +events@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379" + integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg== + +eventsource@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz#0acede849ed7dd1ccc32c811bb11b944d4f29232" + integrity sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI= + dependencies: + original ">=0.0.5" + +eventsource@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0" + integrity sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ== + dependencies: + original "^1.0.0" + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89" + integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + p-finally "^2.0.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +execa@^4.0.2, execa@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +expand-tilde@^2.0.0, expand-tilde@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= + dependencies: + homedir-polyfill "^1.0.1" + +express-graphql@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/express-graphql/-/express-graphql-0.9.0.tgz#00fd8552f866bac5c9a4612b2c4c82076107b3c2" + integrity sha512-wccd9Lb6oeJ8yHpUs/8LcnGjFUUQYmOG9A5BNLybRdCzGw0PeUrtBxsIR8bfiur6uSW4OvPkVDoYH06z6/N9+w== + dependencies: + accepts "^1.3.7" + content-type "^1.0.4" + http-errors "^1.7.3" + raw-body "^2.4.1" + +express@^4.17.1: + version "4.17.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + dependencies: + accepts "~1.3.7" + array-flatten "1.1.1" + body-parser "1.19.0" + content-disposition "0.5.3" + content-type "~1.0.4" + cookie "0.4.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.1.2" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" + safe-buffer "5.1.2" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +ext@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" + integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A== + dependencies: + type "^2.0.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@^3.0.0, extend@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +external-editor@^2.0.4: + version "2.2.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" + integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A== + dependencies: + chardet "^0.4.0" + iconv-lite "^0.4.17" + tmp "^0.0.33" + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.0.3, fast-glob@^3.1.1: + version "3.2.4" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.4.tgz#d20aefbf99579383e7f3cc66529158c9b98554d3" + integrity sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.0" + merge2 "^1.3.0" + micromatch "^4.0.2" + picomatch "^2.2.1" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +fastest-levenshtein@^1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2" + integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== + +fastparse@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" + integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== + +fastq@^1.6.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.9.0.tgz#e16a72f338eaca48e91b5c23593bcc2ef66b7947" + integrity sha512-i7FVWL8HhVY+CTkwFxkN2mk3h+787ixS5S63eb78diVRc1MCssarHq3W5cj0av7YDSwmaV928RNag+U1etRQ7w== + dependencies: + reusify "^1.0.4" + +faye-websocket@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" + integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ= + dependencies: + websocket-driver ">=0.5.1" + +faye-websocket@~0.11.0, faye-websocket@~0.11.1: + version "0.11.3" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" + integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== + dependencies: + websocket-driver ">=0.5.1" + +fd@~0.0.2: + version "0.0.3" + resolved "https://registry.yarnpkg.com/fd/-/fd-0.0.3.tgz#b3240de86dbf5a345baae7382a07d4713566ff0c" + integrity sha512-iAHrIslQb3U68OcMSP0kkNWabp7sSN6d2TBSb2JO3gcLJVDd4owr/hKM4SFJovFOUeeXeItjYgouEDTMWiVAnA== + +figgy-pudding@^3.5.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" + integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== + +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= + dependencies: + escape-string-regexp "^1.0.5" + +figures@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" + integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== + dependencies: + flat-cache "^2.0.1" + +file-is-binary@^1.0.0: + version "1.0.0" + resolved "https://registry.nlark.com/file-is-binary/download/file-is-binary-1.0.0.tgz#5e41806d1bcae458c8fec32fe3ce122dbbbc4356" + integrity sha1-XkGAbRvK5FjI/sMv484SLbu8Q1Y= + dependencies: + is-binary-buffer "^1.0.0" + isobject "^3.0.0" + +file-loader@^1.1.11: + version "1.1.11" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.11.tgz#6fe886449b0f2a936e43cabaac0cdbfb369506f8" + integrity sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg== + dependencies: + loader-utils "^1.0.2" + schema-utils "^0.4.5" + +file-type@^12.4.2: + version "12.4.2" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-12.4.2.tgz#a344ea5664a1d01447ee7fb1b635f72feb6169d9" + integrity sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg== + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + +filesize@3.5.11: + version "3.5.11" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.11.tgz#1919326749433bb3cf77368bd158caabcc19e9ee" + integrity sha512-ZH7loueKBoDb7yG9esn1U+fgq7BzlzW6NRi5/rMdxIZ05dj7GFD/Xc5rq2CDt5Yq86CyfSYVyx4242QQNZbx1g== + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + +find-cache-dir@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" + integrity sha1-yN765XyKUqinhPnjHFfHQumToLk= + dependencies: + commondir "^1.0.1" + mkdirp "^0.5.1" + pkg-dir "^1.0.0" + +find-cache-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== + dependencies: + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^3.0.0" + +find-cache-dir@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" + integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +flat-cache@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" + integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== + dependencies: + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" + +flatted@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" + integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== + +flush-write-stream@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" + +follow-redirects@1.5.10: + version "1.5.10" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" + integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== + dependencies: + debug "=3.1.0" + +follow-redirects@^1.0.0, follow-redirects@^1.10.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.0.tgz#b42e8d93a2a7eea5ed88633676d6597bc8e384db" + integrity sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA== + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +form-data@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.0.tgz#31b7e39c85f1355b7139ee0c647cf0de7f83c682" + integrity sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + +from2@^2.1.0, from2@^2.1.1: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fs-exists-cached@1.0.0, fs-exists-cached@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-exists-cached/-/fs-exists-cached-1.0.0.tgz#cf25554ca050dc49ae6656b41de42258989dcbce" + integrity sha1-zyVVTKBQ3EmuZla0HeQiWJidy84= + +fs-extra@9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" + integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^1.0.0" + +fs-extra@^8.0.1, fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^1.2.7: + version "1.2.13" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== + dependencies: + bindings "^1.5.0" + nan "^2.12.1" + +fsevents@~2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + +gatsby-cli@^2.12.114: + version "2.12.114" + resolved "https://registry.yarnpkg.com/gatsby-cli/-/gatsby-cli-2.12.114.tgz#49019eeb4b11a9fb0514eb3a2f1d89c584c03025" + integrity sha512-5VH1GUvdrDkjAHjWN8H+xzCdbkCZjuTDeqXXaXoH3e4MnTjb1YAiX+RrQqJY9fhUVo51hdCGlddWZwANdYoWog== + dependencies: + "@babel/code-frame" "^7.10.4" + "@hapi/joi" "^15.1.1" + "@types/common-tags" "^1.8.0" + better-opn "^2.0.0" + chalk "^2.4.2" + clipboardy "^2.3.0" + common-tags "^1.8.0" + configstore "^5.0.1" + convert-hrtime "^3.0.0" + envinfo "^7.7.3" + execa "^3.4.0" + fs-exists-cached "^1.0.0" + fs-extra "^8.1.0" + gatsby-core-utils "^1.3.23" + gatsby-recipes "^0.2.35" + gatsby-telemetry "^1.3.38" + hosted-git-info "^3.0.6" + is-valid-path "^0.1.1" + lodash "^4.17.20" + meant "^1.0.2" + node-fetch "^2.6.1" + opentracing "^0.14.4" + pretty-error "^2.1.1" + progress "^2.0.3" + prompts "^2.3.2" + redux "^4.0.5" + resolve-cwd "^3.0.0" + semver "^7.3.2" + signal-exit "^3.0.3" + source-map "0.7.3" + stack-trace "^0.0.10" + strip-ansi "^5.2.0" + update-notifier "^4.1.3" + uuid "3.4.0" + yargs "^15.4.1" + yoga-layout-prebuilt "^1.9.6" + yurnalist "^1.1.2" + +gatsby-core-utils@^1.3.23: + version "1.3.23" + resolved "https://registry.yarnpkg.com/gatsby-core-utils/-/gatsby-core-utils-1.3.23.tgz#5d99e86178b2aa3561f58fde4fdffbebecb0dd0c" + integrity sha512-H6n6dDeRZ22HAJaBUIt5YjB/BSaE8Jq+kayMUv/YzL1RL2yFZ5lqcLwIL1OE2vWk1mQjMUBZCRxLODU0q1i3bQ== + 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" + tmp "^0.2.1" + xdg-basedir "^4.0.0" + +gatsby-graphiql-explorer@^0.4.15: + version "0.4.15" + resolved "https://registry.yarnpkg.com/gatsby-graphiql-explorer/-/gatsby-graphiql-explorer-0.4.15.tgz#3a2a8d09cba4bdd1c37695b80f71b9ef9983206e" + integrity sha512-Mo6wo6EX3pIL7ErKI0yJIfJw9iYDZyPyEsCQJDhcxymhqf1x0d8DRGDjyJDndDBiSuSUfgdBrHz/MKh3ZOZnAg== + dependencies: + "@babel/runtime" "^7.11.2" + +gatsby-legacy-polyfills@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/gatsby-legacy-polyfills/-/gatsby-legacy-polyfills-0.0.6.tgz#7a28e8a01c3e5aaa9aed8a23e10d3d3ae5bd3453" + integrity sha512-23O0orFhu1zkCluIFBs8pu8psfyyWquczfRk2NNdT2x4wW/HkZEjonWM5AkM6kjzZL9JrVCAZEgL4qf9OjgUoA== + dependencies: + core-js-compat "^3.6.5" + +gatsby-link@^2.4.16: + version "2.4.16" + resolved "https://registry.yarnpkg.com/gatsby-link/-/gatsby-link-2.4.16.tgz#e0dda6c6e8450412dca94989f8d3d583d3734b83" + integrity sha512-wsccuSOIAjhRDQRKmIj2+FUNR94QEBnELki0giN+lLKvWB3EO8mXjTIccXC0bMpe8VQcBlv3DHpUo72EAkkFAg== + dependencies: + "@babel/runtime" "^7.11.2" + "@types/reach__router" "^1.3.6" + prop-types "^15.7.2" + +gatsby-page-utils@^0.2.29: + version "0.2.29" + resolved "https://registry.yarnpkg.com/gatsby-page-utils/-/gatsby-page-utils-0.2.29.tgz#eadaa4c57a7a281d53fc9236272e16c718edc8e5" + integrity sha512-0xN3kBNd7PNwsJB1lJrsy7hEJbIIBcvnmbxGTplGenmGnOMoJqK6kEfM5Ru5dWBdSmwHrS+kcihFi0ZiGxpoww== + dependencies: + "@babel/runtime" "^7.11.2" + bluebird "^3.7.2" + chokidar "^3.4.3" + fs-exists-cached "^1.0.0" + gatsby-core-utils "^1.3.23" + glob "^7.1.6" + lodash "^4.17.20" + micromatch "^4.0.2" + +gatsby-plugin-anchor-links@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/gatsby-plugin-anchor-links/-/gatsby-plugin-anchor-links-1.1.1.tgz#6a04441f5acc42768447dc6c12474630520a9f90" + integrity sha512-mgSHUAEa7RRWD/lcmJVUWD9mIT14EIJvMPcxJ1W2Ev+rNuqBBpk1j4vDWy1uxas+qusi0vrtZ4HdU7mse12qDw== + dependencies: + scroll-to-element "^2.0.3" + +gatsby-plugin-feed@2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/gatsby-plugin-feed/-/gatsby-plugin-feed-2.6.0.tgz#b5b1cf428011b457e31419e978614c6436740921" + integrity sha512-BxsFwp5tJVew4Asf6NOP2ebhonjBDL0CuQT5HaRzuDjBj9N1/Bc5VRfYQpFy25wj+qQ5CMm5rJWkNGVVwl9//A== + dependencies: + "@babel/runtime" "^7.11.2" + "@hapi/joi" "^15.1.1" + common-tags "^1.8.0" + fs-extra "^8.1.0" + gatsby-plugin-utils "^0.2.40" + lodash.merge "^4.6.2" + rss "^1.2.2" + +gatsby-plugin-google-analytics@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/gatsby-plugin-google-analytics/-/gatsby-plugin-google-analytics-2.4.0.tgz#7c2d0dbb93910129518d325083ac740b756e2819" + integrity sha512-NKgYyICCo94OZ8SxoBEMxfRiJTRLBTYDIGkzhS+Dlzqt46T5UZARNcaPFqARw9/OdMf7FDUJ+6FSUqJoLKLNbg== + dependencies: + "@babel/runtime" "^7.11.2" + minimatch "3.0.4" + +gatsby-plugin-less@4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/gatsby-plugin-less/-/gatsby-plugin-less-4.0.6.tgz#58d0d4e6a34bf3971b865a0dac3cee09734656da" + integrity sha512-82tCyb+AkseoPqQSaVvBPzNb2pNccP6jmp22yvIMFRi4P2dO4kxIOcl0zio27J7+1f4kqSSQla8bZTDxoQoISw== + dependencies: + "@babel/runtime" "^7.11.2" + less-loader "^6.2.0" + +gatsby-plugin-page-creator@^2.3.34: + version "2.3.34" + resolved "https://registry.yarnpkg.com/gatsby-plugin-page-creator/-/gatsby-plugin-page-creator-2.3.34.tgz#4b76a63e3c68d0b8b4901cd778dff37d29f3813b" + integrity sha512-/rFG/ye4m0JJ8NAxTObkKKD8098KOVGE+dZrgBx9I3VN1TcKru0HprVe1xj679HBgKjjNUvchXZbhLl5I+2o4A== + dependencies: + "@babel/traverse" "^7.11.5" + "@sindresorhus/slugify" "^1.1.0" + chokidar "^3.4.2" + fs-exists-cached "^1.0.0" + gatsby-page-utils "^0.2.29" + globby "^11.0.1" + graphql "^14.7.0" + lodash "^4.17.20" + +gatsby-plugin-react-helmet@3.3.14: + version "3.3.14" + resolved "https://registry.yarnpkg.com/gatsby-plugin-react-helmet/-/gatsby-plugin-react-helmet-3.3.14.tgz#6eac5854e24d008352742783fe68817b18e24151" + integrity sha512-5GsIVZIVOax2V9g1UL8row1TG3p2zPY2I+8Rq52H0R5xD9QoMTPde2Q4N0Y2td+qzfRdcfkbSj/kokK2I5owPw== + dependencies: + "@babel/runtime" "^7.11.2" + +gatsby-plugin-typescript@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/gatsby-plugin-typescript/-/gatsby-plugin-typescript-2.5.0.tgz#b7daacff18da2926bf7f6a3251785356bec20c52" + integrity sha512-AGsUvjh/iiX5zo5cR88Rsj0da20oOVgzQK9bidMoDa42tjbskiu7oq6hl6NBo8TCuLeoHvf/enxXF1aByU7JGw== + dependencies: + "@babel/core" "^7.11.6" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.4" + "@babel/plugin-proposal-numeric-separator" "^7.10.4" + "@babel/plugin-proposal-optional-chaining" "^7.11.0" + "@babel/preset-typescript" "^7.10.4" + "@babel/runtime" "^7.11.2" + babel-plugin-remove-graphql-queries "^2.9.20" + +gatsby-plugin-utils@^0.2.40: + version "0.2.40" + resolved "https://registry.yarnpkg.com/gatsby-plugin-utils/-/gatsby-plugin-utils-0.2.40.tgz#20e997d10efb9a0368270f79ce2e6001346f6336" + integrity sha512-RKjmpPhmi8TDR9hAKxmD4ZJMje3BLs6nt6mxMWT0F8gf5giCYEywplJikyCvaPfuyaFlq1hMmFaVvzmeZNussg== + dependencies: + joi "^17.2.1" + +gatsby-plugin-webfonts@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/gatsby-plugin-webfonts/-/gatsby-plugin-webfonts-1.1.3.tgz#429bed411e1be861920cb0963f2376fc75aa4b4f" + integrity sha512-L9BwptbT1i3bBv4ZAgDt10br/cpdosecRttm1TLzsQdiqt02uKjaP2tr4qLjUlEzu4YQQ8d8394Rm3ZCnvO8cA== + dependencies: + axios "^0.19.0" + cssnano "^4.1.10" + fs-extra "^8.0.1" + lodash.isempty "^4.4.0" + postcss "^7.0.17" + postcss-js "^2.0.1" + +gatsby-react-router-scroll@^3.0.15: + version "3.0.15" + resolved "https://registry.yarnpkg.com/gatsby-react-router-scroll/-/gatsby-react-router-scroll-3.0.15.tgz#0d081941f63894a3b6f2e7c2986091e187875bbd" + integrity sha512-7tmpFuRZhP3QnONC4bMmV9lA032J2aYms5MkcAUVP6EGY3ZCNqbod+EFBECJS1R3tkqhtQLKWmooFSGxPulxog== + dependencies: + "@babel/runtime" "^7.11.2" + +gatsby-recipes@^0.2.35: + version "0.2.35" + resolved "https://registry.yarnpkg.com/gatsby-recipes/-/gatsby-recipes-0.2.35.tgz#e123c837010f191b6c42a28f222211ddfded76ce" + integrity sha512-qAddi9cZoDSYnwgII3NSuQ7LvF3oVguucKtxu6xa8LO3iEMhb/8XW9eIMmrANRpICxRvAaIUpeQO28+Yql3gRQ== + dependencies: + "@babel/core" "^7.11.6" + "@babel/generator" "^7.11.6" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-proposal-optional-chaining" "^7.11.0" + "@babel/plugin-transform-react-jsx" "^7.10.4" + "@babel/standalone" "^7.11.6" + "@babel/template" "^7.10.4" + "@babel/types" "^7.11.5" + "@graphql-tools/schema" "^6.0.14" + "@graphql-tools/utils" "^6.0.14" + "@hapi/hoek" "8.x.x" + "@hapi/joi" "^15.1.1" + better-queue "^3.8.10" + chokidar "^3.4.2" + contentful-management "^5.26.3" + cors "^2.8.5" + debug "^4.1.1" + detect-port "^1.3.0" + dotenv "^8.2.0" + execa "^4.0.2" + express "^4.17.1" + express-graphql "^0.9.0" + fs-extra "^8.1.0" + gatsby-core-utils "^1.3.23" + gatsby-telemetry "^1.3.38" + glob "^7.1.6" + graphql "^14.6.0" + graphql-compose "^6.3.8" + graphql-subscriptions "^1.1.0" + graphql-type-json "^0.3.2" + hicat "^0.7.0" + is-binary-path "^2.1.0" + is-url "^1.2.4" + jest-diff "^25.5.0" + lock "^1.0.0" + lodash "^4.17.20" + mitt "^1.2.0" + mkdirp "^0.5.1" + node-fetch "^2.5.0" + pkg-dir "^4.2.0" + prettier "^2.0.5" + prop-types "^15.6.1" + remark-mdx "^2.0.0-next.4" + remark-mdxjs "^2.0.0-next.4" + remark-parse "^6.0.3" + remark-stringify "^8.1.0" + resolve-cwd "^3.0.0" + resolve-from "^5.0.0" + semver "^7.3.2" + single-trailing-newline "^1.0.0" + strip-ansi "^6.0.0" + style-to-object "^0.3.0" + unified "^8.4.2" + unist-util-remove "^2.0.0" + unist-util-visit "^2.0.2" + uuid "3.4.0" + ws "^7.3.0" + xstate "^4.9.1" + yoga-layout-prebuilt "^1.9.6" + +gatsby-source-filesystem@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/gatsby-source-filesystem/-/gatsby-source-filesystem-2.4.0.tgz#6401d03684977a5a2239c67b6be717358f6efd89" + integrity sha512-YfWSsF1x7vjj2uk3XI9Qldo+iO0TmbcgwX5XBEJJgIg8p3v43EZ1gCj0JGIyYyhvfmUaf5SQgFH03Yt3GURRyQ== + dependencies: + "@babel/runtime" "^7.11.2" + better-queue "^3.8.10" + chokidar "^3.4.2" + file-type "^12.4.2" + fs-extra "^8.1.0" + gatsby-core-utils "^1.3.23" + got "^9.6.0" + md5-file "^5.0.0" + mime "^2.4.6" + pretty-bytes "^5.4.1" + progress "^2.0.3" + read-chunk "^3.2.0" + valid-url "^1.0.9" + xstate "^4.13.0" + +gatsby-telemetry@^1.3.38: + version "1.3.38" + resolved "https://registry.yarnpkg.com/gatsby-telemetry/-/gatsby-telemetry-1.3.38.tgz#1c6a81ac8cca7117c09577fa2f4c8dd12573c14e" + integrity sha512-8AoSNzVgrtPJ0Jgd+cPSuVGj2uBCXI2aJ2ANokOVjPbZO/Z+Z9hcOFdU+AkeBdZWCHaJaX0+qpE6KbgkwBoWPA== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/runtime" "^7.11.2" + "@turist/fetch" "^7.1.7" + "@turist/time" "^0.0.1" + async-retry-ng "^2.0.1" + boxen "^4.2.0" + configstore "^5.0.1" + envinfo "^7.7.3" + fs-extra "^8.1.0" + gatsby-core-utils "^1.3.23" + git-up "^4.0.2" + is-docker "^2.1.1" + lodash "^4.17.20" + node-fetch "^2.6.1" + uuid "3.4.0" + +gatsby-transformer-remark@2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/gatsby-transformer-remark/-/gatsby-transformer-remark-2.9.0.tgz#0c460e1eebdd0926219ed906a71f0f0bd7521c23" + integrity sha512-9dahd3SZ7R+wcURPEWQ8DmYqiTwzJ66ikW9O2G/HVRVF3Nu64GdegiKMretjR2lY6P9OBWZovjUUGpFPTbejkQ== + dependencies: + "@babel/runtime" "^7.11.2" + bluebird "^3.7.2" + gatsby-core-utils "^1.3.23" + gray-matter "^4.0.2" + hast-util-raw "^4.0.0" + hast-util-to-html "^4.0.1" + lodash "^4.17.20" + mdast-util-to-hast "^3.0.4" + mdast-util-to-string "^1.1.0" + mdast-util-toc "^5.0" + remark "^10.0.1" + remark-parse "^6.0.3" + remark-retext "^3.1.3" + remark-stringify "6.0.4" + retext-english "^3.0.4" + sanitize-html "^1.27.5" + underscore.string "^3.3.5" + unified "^6.2.0" + unist-util-remove-position "^1.1.4" + unist-util-select "^1.5.0" + unist-util-visit "^1.4.1" + +gatsby@2.25.0: + version "2.25.0" + resolved "https://registry.yarnpkg.com/gatsby/-/gatsby-2.25.0.tgz#9ea8a3d52c1377a3443427303ed8be2595109b8a" + integrity sha512-rOmxdcGkiVB48ClYFHYsGHp/SvW8spHX9gsEjwMU/HLcVMhLoyKZgcOyaWDRpq1IPNKMjMVWAHngsPJGdAp8fw== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/core" "^7.11.6" + "@babel/parser" "^7.11.5" + "@babel/runtime" "^7.11.2" + "@babel/traverse" "^7.11.5" + "@babel/types" "^7.11.5" + "@hapi/joi" "^15.1.1" + "@mikaelkristiansson/domready" "^1.0.10" + "@nodelib/fs.walk" "^1.2.4" + "@pieh/friendly-errors-webpack-plugin" "1.7.0-chalk-2" + "@pmmmwh/react-refresh-webpack-plugin" "^0.4.1" + "@reach/router" "^1.3.4" + "@types/http-proxy" "^1.17.4" + "@typescript-eslint/eslint-plugin" "^2.24.0" + "@typescript-eslint/parser" "^2.24.0" + address "1.1.2" + autoprefixer "^9.8.4" + axios "^0.20.0" + babel-core "7.0.0-bridge.0" + babel-eslint "^10.1.0" + babel-loader "^8.1.0" + babel-plugin-add-module-exports "^0.3.3" + babel-plugin-dynamic-import-node "^2.3.3" + babel-plugin-lodash "3.3.4" + babel-plugin-remove-graphql-queries "^2.9.20" + babel-preset-gatsby "^0.5.15" + better-opn "^2.0.0" + better-queue "^3.8.10" + bluebird "^3.7.2" + body-parser "^1.19.0" + browserslist "^4.12.2" + cache-manager "^2.11.1" + cache-manager-fs-hash "^0.0.9" + chalk "^2.4.2" + chokidar "^3.4.2" + common-tags "^1.8.0" + compression "^1.7.4" + convert-hrtime "^3.0.0" + copyfiles "^2.3.0" + core-js "^3.6.5" + cors "^2.8.5" + css-loader "^1.0.1" + date-fns "^2.14.0" + debug "^3.2.6" + del "^5.1.0" + detect-port "^1.3.0" + devcert "^1.1.3" + dotenv "^8.2.0" + eslint "^6.8.0" + eslint-config-react-app "^5.2.1" + eslint-loader "^2.2.1" + eslint-plugin-flowtype "^3.13.0" + eslint-plugin-graphql "^4.0.0" + eslint-plugin-import "^2.22.0" + eslint-plugin-jsx-a11y "^6.3.1" + eslint-plugin-react "^7.20.6" + eslint-plugin-react-hooks "^1.7.0" + event-source-polyfill "^1.0.15" + execa "^4.0.3" + express "^4.17.1" + express-graphql "^0.9.0" + fastest-levenshtein "^1.0.12" + file-loader "^1.1.11" + find-cache-dir "^3.3.1" + fs-exists-cached "1.0.0" + fs-extra "^8.1.0" + gatsby-cli "^2.12.114" + gatsby-core-utils "^1.3.23" + gatsby-graphiql-explorer "^0.4.15" + gatsby-legacy-polyfills "^0.0.6" + gatsby-link "^2.4.16" + gatsby-plugin-page-creator "^2.3.34" + gatsby-plugin-typescript "^2.5.0" + gatsby-plugin-utils "^0.2.40" + gatsby-react-router-scroll "^3.0.15" + gatsby-telemetry "^1.3.38" + glob "^7.1.6" + got "8.3.2" + graphql "^14.6.0" + graphql-compose "^6.3.8" + graphql-playground-middleware-express "^1.7.18" + hasha "^5.2.0" + http-proxy "^1.18.1" + invariant "^2.2.4" + is-relative "^1.0.0" + is-relative-url "^3.0.0" + jest-worker "^24.9.0" + joi "^17.2.1" + json-loader "^0.5.7" + json-stringify-safe "^5.0.1" + latest-version "5.1.0" + lodash "^4.17.20" + md5-file "^5.0.0" + meant "^1.0.1" + micromatch "^4.0.2" + mime "^2.4.6" + mini-css-extract-plugin "^0.11.2" + mitt "^1.2.0" + mkdirp "^0.5.1" + moment "^2.27.0" + name-all-modules-plugin "^1.0.1" + normalize-path "^3.0.0" + null-loader "^3.0.0" + opentracing "^0.14.4" + optimize-css-assets-webpack-plugin "^5.0.3" + p-defer "^3.0.0" + parseurl "^1.3.3" + physical-cpu-count "^2.0.0" + pnp-webpack-plugin "^1.6.4" + postcss-flexbugs-fixes "^4.2.1" + postcss-loader "^3.0.0" + prompts "^2.3.2" + prop-types "^15.7.2" + query-string "^6.13.1" + raw-loader "^0.5.1" + react-dev-utils "^4.2.3" + react-error-overlay "^6.0.7" + react-hot-loader "^4.12.21" + react-refresh "^0.8.3" + redux "^4.0.5" + redux-thunk "^2.3.0" + semver "^7.3.2" + shallow-compare "^1.2.2" + signal-exit "^3.0.3" + slugify "^1.4.4" + socket.io "^2.3.0" + socket.io-client "2.3.0" + st "^2.0.0" + stack-trace "^0.0.10" + string-similarity "^1.2.2" + style-loader "^0.23.1" + terser-webpack-plugin "^2.3.8" + tmp "^0.2.1" + "true-case-path" "^2.2.1" + type-of "^2.0.1" + url-loader "^1.1.2" + util.promisify "^1.0.1" + uuid "3.4.0" + v8-compile-cache "^1.1.2" + webpack "^4.44.1" + webpack-dev-middleware "^3.7.2" + webpack-dev-server "^3.11.0" + webpack-hot-middleware "^2.25.0" + webpack-merge "^4.2.2" + webpack-stats-plugin "^0.3.2" + webpack-virtual-modules "^0.2.2" + xstate "^4.11.0" + yaml-loader "^0.6.0" + +gensync@^1.0.0-beta.1: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.0.1.tgz#94a9768fcbdd0595a1c9273aacf4c89d075631be" + integrity sha512-ZnWP+AmS1VUaLgTRy47+zKtjTxz+0xMpx3I52i+aalBK1QP19ggLF3Db89KJX7kjfOfP2eoa01qc++GwPgufPg== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + +get-port@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" + integrity sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw= + +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= + +get-stream@3.0.0, get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= + +get-stream@^4.0.0, get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.0.0, get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +git-up@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/git-up/-/git-up-4.0.2.tgz#10c3d731051b366dc19d3df454bfca3f77913a7c" + integrity sha512-kbuvus1dWQB2sSW4cbfTeGpCMd8ge9jx9RKnhXhuJ7tnvT+NIrTVfYZxjtflZddQYcmdOTlkAcjmx7bor+15AQ== + dependencies: + is-ssh "^1.3.0" + parse-url "^5.0.0" + +github-slugger@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.3.0.tgz#9bd0a95c5efdfc46005e82a906ef8e2a059124c9" + integrity sha512-gwJScWVNhFYSRDvURk/8yhcFBee6aFjye2a7Lhb2bUyRulpIoek9p0I9Kt7PT67d/nUlZbFu8L9RLiA0woQN8Q== + dependencies: + emoji-regex ">=6.0.0 <=6.1.1" + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + dependencies: + is-glob "^4.0.1" + +glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-dirs@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.0.1.tgz#acdf3bb6685bcd55cb35e8a052266569e9469201" + integrity sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A== + dependencies: + ini "^1.3.5" + +global-modules@1.0.0, global-modules@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== + dependencies: + global-prefix "^1.0.1" + is-windows "^1.0.1" + resolve-dir "^1.0.0" + +global-prefix@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= + dependencies: + expand-tilde "^2.0.2" + homedir-polyfill "^1.0.1" + ini "^1.3.4" + is-windows "^1.0.1" + which "^1.2.14" + +global@^4.3.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" + integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== + dependencies: + min-document "^2.19.0" + process "^0.11.10" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^12.1.0: + version "12.4.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" + integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== + dependencies: + type-fest "^0.8.1" + +globby@11.0.1, globby@^11.0.1: + version "11.0.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.1.tgz#9a2bf107a068f3ffeabc49ad702c79ede8cfd357" + integrity sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" + +globby@^10.0.1: + version "10.0.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543" + integrity sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg== + dependencies: + "@types/glob" "^7.1.1" + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.0.3" + glob "^7.1.3" + ignore "^5.1.1" + merge2 "^1.2.3" + slash "^3.0.0" + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +good-listener@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50" + integrity sha1-1TswzfkxPf+33JoNR3CWqm0UXFA= + dependencies: + delegate "^3.1.2" + +got@8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/got/-/got-8.3.2.tgz#1d23f64390e97f776cac52e5b936e5f514d2e937" + integrity sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw== + dependencies: + "@sindresorhus/is" "^0.7.0" + cacheable-request "^2.1.1" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + into-stream "^3.1.0" + is-retry-allowed "^1.1.0" + isurl "^1.0.0-alpha5" + lowercase-keys "^1.0.0" + mimic-response "^1.0.0" + p-cancelable "^0.4.0" + p-timeout "^2.0.1" + pify "^3.0.0" + safe-buffer "^5.1.1" + timed-out "^4.0.1" + url-parse-lax "^3.0.0" + url-to-options "^1.0.1" + +got@^9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" + integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== + dependencies: + "@sindresorhus/is" "^0.14.0" + "@szmarczak/http-timer" "^1.1.2" + cacheable-request "^6.0.0" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^4.1.0" + lowercase-keys "^1.0.1" + mimic-response "^1.0.1" + p-cancelable "^1.0.0" + to-readable-stream "^1.0.0" + url-parse-lax "^3.0.0" + +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.3: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +graphql-compose@^6.3.8: + version "6.3.8" + resolved "https://registry.yarnpkg.com/graphql-compose/-/graphql-compose-6.3.8.tgz#9f82a85d5001a83adf1f7c4d3b5e5f72c432a062" + integrity sha512-o0/jzQEMIpSjryLKwmD1vGrCubiPxD0LxlGTgWDSu38TBepu2GhugC9gYgTEbtiCZAHPtvkZ90SzzABOWZyQLA== + dependencies: + graphql-type-json "^0.2.4" + object-path "^0.11.4" + +graphql-config@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/graphql-config/-/graphql-config-3.0.3.tgz#58907c65ed7d6e04132321450b60e57863ea9a5f" + integrity sha512-MBY0wEjvcgJtZUyoqpPvOE1e5qPI0hJaa1gKTqjonSFiCsNHX2lykNjpOPcodmAgH1V06ELxhGnm9kcVzqvi/g== + dependencies: + "@graphql-tools/graphql-file-loader" "^6.0.0" + "@graphql-tools/json-file-loader" "^6.0.0" + "@graphql-tools/load" "^6.0.0" + "@graphql-tools/merge" "^6.0.0" + "@graphql-tools/url-loader" "^6.0.0" + "@graphql-tools/utils" "^6.0.0" + cosmiconfig "6.0.0" + minimatch "3.0.4" + string-env-interpolation "1.0.1" + tslib "^2.0.0" + +graphql-language-service-interface@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/graphql-language-service-interface/-/graphql-language-service-interface-2.4.2.tgz#77b868c0dad8f18908ff5c6a7a1706d43370bd40" + integrity sha512-iFLMz51cA2L5Tu7/mP19++bRGUuIe2J9ekQZrcJ6sMYStsF60x5eNu3JqheduYTLhQaSdKN55jX7RlLeIDUhQA== + dependencies: + graphql-language-service-parser "^1.6.4" + graphql-language-service-types "^1.6.3" + graphql-language-service-utils "^2.4.3" + vscode-languageserver-types "^3.15.1" + +graphql-language-service-parser@^1.6.4: + version "1.6.4" + resolved "https://registry.yarnpkg.com/graphql-language-service-parser/-/graphql-language-service-parser-1.6.4.tgz#d5b92db1e50a91cdcf7f54f79253e13455e20257" + integrity sha512-Y365zUFfJ1GJ9NeRHb5Z/HBo6EnbuTi187Gkuldwd1YIDc0QcD7kqz6U5g043zd7BI/UZQth13Zd7pElvbb2zw== + dependencies: + graphql-language-service-types "^1.6.3" + typescript "^3.9.5" + +graphql-language-service-types@^1.6.3: + version "1.6.3" + resolved "https://registry.yarnpkg.com/graphql-language-service-types/-/graphql-language-service-types-1.6.3.tgz#1a6ba25140ec9ffc6d7f36eca7a4069e91500f3d" + integrity sha512-VDtBhdan1iSe7ad7+eBbsO5rrzWQpC6aV4SxSHEi8AtEQOFXpnL9Lq5jSaN8O02pGvAUr4wNUPu0oRU5g2XmVA== + +graphql-language-service-utils@^2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/graphql-language-service-utils/-/graphql-language-service-utils-2.4.3.tgz#e4f4d1a7e950dcc5ada2456096c88ad5b2bab9f2" + integrity sha512-XSCMKsV4GuVSGdW8RJTpO/IJDMXgESDJLu67SAuXFXwfel84j1gWrsmBAUeu6Di6NUEoM9NOCEtJv3LbU+/8qw== + dependencies: + graphql-language-service-types "^1.6.3" + +graphql-playground-html@^1.6.29: + version "1.6.29" + resolved "https://registry.yarnpkg.com/graphql-playground-html/-/graphql-playground-html-1.6.29.tgz#5b0c60a0161cc0f3116085f64c5a16cb3b2d9a16" + integrity sha512-fbF/zZKuw2sdfKp8gjTORJ/I9xBsqeEYRseWxBzuR15NHMptRTT9414IyRCs3ognZzUDr5MDJgx97SlLZCtQyA== + dependencies: + xss "^1.0.6" + +graphql-playground-middleware-express@^1.7.18: + version "1.7.22" + resolved "https://registry.yarnpkg.com/graphql-playground-middleware-express/-/graphql-playground-middleware-express-1.7.22.tgz#e4bbe4faaa56b48e95769c8b87b65e53355d91a4" + integrity sha512-PJLiCxLmN6Dp+dHGyHU92m9y3hB/RAkcUBWcqYl2fiP+EbpDDgNfElrsVzW60MhJe+LTV1PFqiInH2d3KNvlCQ== + dependencies: + graphql-playground-html "^1.6.29" + +graphql-subscriptions@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/graphql-subscriptions/-/graphql-subscriptions-1.1.0.tgz#5f2fa4233eda44cf7570526adfcf3c16937aef11" + integrity sha512-6WzlBFC0lWmXJbIVE8OgFgXIP4RJi3OQgTPa0DVMsDXdpRDjTsM1K9wfl5HSYX7R87QAGlvcv2Y4BIZa/ItonA== + dependencies: + iterall "^1.2.1" + +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" + integrity sha512-/tq02ayMQjrG4oDFDRLLrPk0KvJXue0nVXoItBe7uAdbNXjQUu+HYCBdAmPLQoseVzUKKMzrhq2P/sfI76ON6w== + +graphql-type-json@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/graphql-type-json/-/graphql-type-json-0.3.2.tgz#f53a851dbfe07bd1c8157d24150064baab41e115" + integrity sha512-J+vjof74oMlCWXSvt0DOf2APEdZOCdubEvGDUAlqH//VBYcOYsGgRW7Xzorr44LvkjiuvecWc8fChxuZZbChtg== + +graphql@15.4.0: + version "15.4.0" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.4.0.tgz#e459dea1150da5a106486ba7276518b5295a4347" + integrity sha512-EB3zgGchcabbsU9cFe1j+yxdzKQKAbGUWRb13DsrsMN1yyfmmIq+2+L5MqVWcDCE4V89R5AyUOi7sMOGxdsYtA== + +graphql@^14.6.0, graphql@^14.7.0: + version "14.7.0" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-14.7.0.tgz#7fa79a80a69be4a31c27dda824dc04dac2035a72" + integrity sha512-l0xWZpoPKpppFzMfvVyFmp9vLN7w/ZZJPefUicMCepfJeQ8sMcztloGYY9DfjVPo6tIUDzU5Hw3MUbIjj9AVVA== + dependencies: + iterall "^1.2.2" + +gray-matter@^3.0.2: + version "3.1.1" + resolved "https://registry.nlark.com/gray-matter/download/gray-matter-3.1.1.tgz#101f80d9e69eeca6765cdce437705b18f40876ac" + integrity sha1-EB+A2eae7KZ2XNzkN3BbGPQIdqw= + dependencies: + extend-shallow "^2.0.1" + js-yaml "^3.10.0" + kind-of "^5.0.2" + strip-bom-string "^1.0.0" + +gray-matter@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.2.tgz#9aa379e3acaf421193fce7d2a28cebd4518ac454" + integrity sha512-7hB/+LxrOjq/dd8APlK0r24uL/67w7SkYnfwhNFwg/VDIGWGmduTDYf3WNstLW2fbbmRwrDGCVSJ2isuf2+4Hw== + dependencies: + js-yaml "^3.11.0" + kind-of "^6.0.2" + section-matter "^1.0.0" + strip-bom-string "^1.0.0" + +gud@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0" + integrity sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw== + +gzip-size@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520" + integrity sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA= + dependencies: + duplexer "^0.1.1" + +handle-thing@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + +has-binary2@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d" + integrity sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw== + dependencies: + isarray "2.0.1" + +has-cors@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" + integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk= + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbol-support-x@^1.4.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" + integrity sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw== + +has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== + +has-to-string-tag-x@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" + integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw== + dependencies: + has-symbol-support-x "^1.4.1" + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has-yarn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" + integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== + +has@^1.0.0, has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hasha@^5.2.0: + version "5.2.2" + resolved "https://registry.yarnpkg.com/hasha/-/hasha-5.2.2.tgz#a48477989b3b327aea3c04f53096d816d97522a1" + integrity sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ== + dependencies: + is-stream "^2.0.0" + type-fest "^0.8.0" + +hast-to-hyperscript@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/hast-to-hyperscript/-/hast-to-hyperscript-5.0.0.tgz#5106cbba78edb7c95e2e8a49079371eb196c1ced" + integrity sha512-DLl3eYTz8uwwzEubDUdCChsR5t5b2ne+yvHrA2h58Suq/JnN3+Gsb9Tc4iZoCCsykmFUc6UUpwxTmQXs0akSeg== + dependencies: + comma-separated-tokens "^1.0.0" + property-information "^4.0.0" + space-separated-tokens "^1.0.0" + style-to-object "^0.2.1" + unist-util-is "^2.0.0" + web-namespaces "^1.1.2" + +hast-util-from-parse5@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-4.0.2.tgz#b7164a7ffc88da4f751dc7c2f801ff8d7c143bab" + integrity sha512-I6dtjsGtDqz4fmGSiFClFyiXdKhj5bPceS6intta7k/VDuiKz9P61C6hO6WMiNNmEm1b/EtBH8f+juvz4o0uwQ== + dependencies: + ccount "^1.0.3" + hastscript "^4.0.0" + property-information "^4.0.0" + web-namespaces "^1.1.2" + xtend "^4.0.1" + +hast-util-is-element@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/hast-util-is-element/-/hast-util-is-element-1.1.0.tgz#3b3ed5159a2707c6137b48637fbfe068e175a425" + integrity sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ== + +hast-util-parse-selector@^2.2.0: + version "2.2.5" + resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz#d57c23f4da16ae3c63b3b6ca4616683313499c3a" + integrity sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ== + +hast-util-raw@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-4.0.0.tgz#2dc10c9facd9b810ea6ac51df251e6f87c2ed5b5" + integrity sha512-5xYHyEJMCf8lX/NT4iA5z6N43yoFsrJqXJ5GWwAbLn815URbIz+UNNFEgid33F9paZuDlqVKvB+K3Aqu5+DdSw== + dependencies: + hast-util-from-parse5 "^4.0.2" + hast-util-to-parse5 "^4.0.1" + html-void-elements "^1.0.1" + parse5 "^5.0.0" + unist-util-position "^3.0.0" + web-namespaces "^1.0.0" + xtend "^4.0.1" + zwitch "^1.0.0" + +hast-util-to-html@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/hast-util-to-html/-/hast-util-to-html-4.0.1.tgz#3666b05afb62bd69f8f5e6c94db04dea19438e2a" + integrity sha512-2emzwyf0xEsc4TBIPmDJmBttIw8R4SXAJiJZoiRR/s47ODYWgOqNoDbf2SJAbMbfNdFWMiCSOrI3OVnX6Qq2Mg== + dependencies: + ccount "^1.0.0" + comma-separated-tokens "^1.0.1" + hast-util-is-element "^1.0.0" + hast-util-whitespace "^1.0.0" + html-void-elements "^1.0.0" + property-information "^4.0.0" + space-separated-tokens "^1.0.0" + stringify-entities "^1.0.1" + unist-util-is "^2.0.0" + xtend "^4.0.1" + +hast-util-to-parse5@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-4.0.1.tgz#e52534b4bf40dc4e7d0428fcaf6d32bc75c62ee5" + integrity sha512-U/61W+fsNfBpCyJBB5Pt3l5ypIfgXqEyW9pyrtxF7XrqDJHzcFrYpnC94d0JDYjvobLpYCzcU9srhMRPEO1YXw== + dependencies: + hast-to-hyperscript "^5.0.0" + property-information "^4.0.0" + web-namespaces "^1.0.0" + xtend "^4.0.1" + zwitch "^1.0.0" + +hast-util-whitespace@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-1.0.4.tgz#e4fe77c4a9ae1cb2e6c25e02df0043d0164f6e41" + integrity sha512-I5GTdSfhYfAPNztx2xJRQpG8cuDSNt599/7YUn7Gx/WxNMsG+a835k97TDkFgk123cwjfwINaZknkKkphx/f2A== + +hastscript@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-4.1.0.tgz#ea5593fa6f6709101fc790ced818393ddaa045ce" + integrity sha512-bOTn9hEfzewvHyXdbYGKqOr/LOz+2zYhKbC17U2YAjd16mnjqB1BQ0nooM/RdMy/htVyli0NAznXiBtwDi1cmQ== + dependencies: + comma-separated-tokens "^1.0.0" + hast-util-parse-selector "^2.2.0" + property-information "^4.0.0" + space-separated-tokens "^1.0.0" + +hex-color-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" + integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== + +hicat@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/hicat/-/hicat-0.7.0.tgz#a704cb3f57e49fbd7d38c2edd7aba38ff0b35263" + integrity sha1-pwTLP1fkn719OMLt16ujj/CzUmM= + dependencies: + highlight.js "^8.1.0" + minimist "^0.2.0" + +highlight.js@^8.1.0: + version "8.9.1" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-8.9.1.tgz#b8a9c5493212a9392f0222b649c9611497ebfb88" + integrity sha1-uKnFSTISqTkvAiK2SclhFJfr+4g= + +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +hoist-non-react-statics@^3.3.0: + 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" + +homedir-polyfill@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" + integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== + dependencies: + parse-passwd "^1.0.0" + +hosted-git-info@^2.1.4: + version "2.8.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + +hosted-git-info@^3.0.6: + version "3.0.7" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.7.tgz#a30727385ea85acfcee94e0aad9e368c792e036c" + integrity sha512-fWqc0IcuXs+BmE9orLDyVykAG9GJtGLGuZAAqgcckPgv5xad4AcXGIv8galtQvlwutxSlaMcdw7BUtq2EIvqCQ== + dependencies: + lru-cache "^6.0.0" + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +hsl-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" + integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= + +hsla-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" + integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= + +html-comment-regex@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" + integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ== + +html-entities@^1.2.0, html-entities@^1.2.1, html-entities@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz#fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44" + integrity sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA== + +html-void-elements@^1.0.0, html-void-elements@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-1.0.5.tgz#ce9159494e86d95e45795b166c2021c2cfca4483" + integrity sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w== + +htmlparser2@^3.3.0: + version "3.10.1" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" + integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== + dependencies: + domelementtype "^1.3.1" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^3.1.1" + +htmlparser2@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-4.1.0.tgz#9a4ef161f2e4625ebf7dfbe6c0a2f52d18a59e78" + integrity sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q== + dependencies: + domelementtype "^2.0.1" + domhandler "^3.0.0" + domutils "^2.0.0" + entities "^2.0.0" + +http-cache-semantics@3.8.1: + version "3.8.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" + integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== + +http-cache-semantics@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= + +http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@1.7.3, http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@^1.7.3: + version "1.8.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.0.tgz#75d1bbe497e1044f51e4ee9e704a62f28d336507" + integrity sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-parser-js@>=0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.2.tgz#da2e31d237b393aae72ace43882dd7e270a8ff77" + integrity sha512-opCO9ASqg5Wy2FNo7A0sxy71yGbbkJJXLdgMK04Tcypw9jr2MgWbyubb0+WdmDmGnFflO7fRbqbaihh/ENDlRQ== + +http-proxy-middleware@0.19.1: + version "0.19.1" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" + integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== + dependencies: + http-proxy "^1.17.0" + is-glob "^4.0.0" + lodash "^4.17.11" + micromatch "^3.1.10" + +http-proxy@^1.17.0, http-proxy@^1.18.1: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + +iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +icss-replace-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" + integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0= + +icss-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-2.1.0.tgz#83f0a0ec378bf3246178b6c2ad9136f135b1c962" + integrity sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI= + dependencies: + postcss "^6.0.1" + +ieee754@^1.1.13, ieee754@^1.1.4: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= + +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +ignore@^5.1.1, ignore@^5.1.4: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + +image-size@~0.5.0: + version "0.5.5" + resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" + integrity sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w= + +import-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" + integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= + dependencies: + import-from "^2.1.0" + +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" + +import-fresh@^3.0.0, import-fresh@^3.1.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.2.tgz#fc129c160c5d68235507f4331a6baad186bdbc3e" + integrity sha512-cTPNrlvJT6twpYy+YmKUKrTSjWFs3bjYjAhCwm+z4EOCubZxAuO+hHpRN64TqjEaYSHs7tJAE0w1CKMGmsG/lw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-from@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/import-from/-/import-from-3.0.0.tgz#055cfec38cd5a27d8057ca51376d7d3bf0891966" + integrity sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ== + dependencies: + resolve-from "^5.0.0" + +import-from@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" + integrity sha1-M1238qev/VOqpHHUuAId7ja387E= + dependencies: + resolve-from "^3.0.0" + +import-lazy@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= + +import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== + dependencies: + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= + +indexof@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= + +infer-owner@^1.0.3, infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + +inline-style-parser@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" + integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== + +inquirer@3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" + integrity sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ== + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.0" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^2.0.4" + figures "^2.0.0" + lodash "^4.3.0" + mute-stream "0.0.7" + run-async "^2.2.0" + rx-lite "^4.0.8" + rx-lite-aggregates "^4.0.8" + string-width "^2.1.0" + strip-ansi "^4.0.0" + through "^2.3.6" + +inquirer@^7.0.0: + version "7.3.3" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" + integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.19" + mute-stream "0.0.8" + run-async "^2.4.0" + rxjs "^6.6.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + +internal-ip@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" + integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== + dependencies: + default-gateway "^4.2.0" + ipaddr.js "^1.9.0" + +internal-slot@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.2.tgz#9c2e9fb3cd8e5e4256c6f45fe310067fcfa378a3" + integrity sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g== + dependencies: + es-abstract "^1.17.0-next.1" + has "^1.0.3" + side-channel "^1.0.2" + +into-stream@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-3.1.0.tgz#96fb0a936c12babd6ff1752a17d05616abd094c6" + integrity sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY= + dependencies: + from2 "^2.1.1" + p-is-promise "^1.1.0" + +invariant@^2.2.0, invariant@^2.2.3, invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + +ip@^1.1.0, ip@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + +ipaddr.js@1.9.1, ipaddr.js@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-absolute-url@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" + integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= + +is-absolute-url@^3.0.0, is-absolute-url@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" + integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-alphabetical@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" + integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== + +is-alphanumeric@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz#4a9cef71daf4c001c1d81d63d140cf53fd6889f4" + integrity sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ= + +is-alphanumerical@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf" + integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A== + dependencies: + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + +is-arguments@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" + integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA== + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + +is-binary-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.nlark.com/is-binary-buffer/download/is-binary-buffer-1.0.0.tgz#bc6031290b65cbf799b9d9502b50fd5375524007" + integrity sha1-vGAxKQtly/eZudlQK1D9U3VSQAc= + dependencies: + is-buffer "^1.1.5" + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + +is-binary-path@^2.1.0, is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-buffer@^1.1.4, is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-buffer@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" + integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A== + +is-builtin-module@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.0.0.tgz#137d3d2425023a19a660fb9dd6ddfabe52c03466" + integrity sha512-/93sDihsAD652hrMEbJGbMAVBf1qc96kyThHQ0CAOONHaE3aROLpTjDe4WQ5aoC5ITHFxEq1z8XqSU7km+8amw== + dependencies: + builtin-modules "^3.0.0" + +is-callable@^1.1.4, is-callable@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" + integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA== + +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +is-color-stop@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" + integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= + dependencies: + css-color-names "^0.0.4" + hex-color-regex "^1.1.0" + hsl-regex "^1.0.0" + hsla-regex "^1.0.0" + rgb-regex "^1.0.1" + rgba-regex "^1.0.0" + +is-core-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.0.0.tgz#58531b70aed1db7c0e8d4eb1a0a2d1ddd64bd12d" + integrity sha512-jq1AH6C8MuteOoBPwkxHafmByhL9j5q4OaPGdbuD+ZtQJVzH+i6E3BJDQcBA09k57i2Hh2yQbEG8yObZ0jdlWw== + dependencies: + has "^1.0.3" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + +is-decimal@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" + integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= + +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.1.1.tgz#4125a88e44e450d384e09047ede71adc2d144156" + integrity sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw== + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA= + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@4.0.1, is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-glob@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM= + dependencies: + is-extglob "^1.0.0" + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + +is-hexadecimal@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" + integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== + +is-installed-globally@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.3.2.tgz#fd3efa79ee670d1187233182d5b0a1dd00313141" + integrity sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g== + dependencies: + global-dirs "^2.0.1" + is-path-inside "^3.0.1" + +is-invalid-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-invalid-path/-/is-invalid-path-0.1.0.tgz#307a855b3cf1a938b44ea70d2c61106053714f34" + integrity sha1-MHqFWzzxqTi0TqcNLGEQYFNxTzQ= + dependencies: + is-glob "^2.0.0" + +is-negative-zero@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.0.tgz#9553b121b0fac28869da9ed459e20c7543788461" + integrity sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE= + +is-npm@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d" + integrity sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig== + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470" + integrity sha1-iVJojF7C/9awPsyF52ngKQMINHA= + +is-path-cwd@^2.0.0, is-path-cwd@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + +is-path-in-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" + integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== + dependencies: + is-path-inside "^2.1.0" + +is-path-inside@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" + integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== + dependencies: + path-is-inside "^1.0.2" + +is-path-inside@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017" + integrity sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg== + +is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + +is-plain-obj@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +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-regex@^1.0.4, is-regex@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" + integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== + dependencies: + has-symbols "^1.0.1" + +is-relative-url@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-relative-url/-/is-relative-url-3.0.0.tgz#f623c8e26baa5bd3742b3b7ec074f50f3b45b3f3" + integrity sha512-U1iSYRlY2GIMGuZx7gezlB5dp1Kheaym7zKzO1PV06mOihiWTXejLwm4poEJysPyXF+HtK/BEd0DVlcCh30pEA== + dependencies: + is-absolute-url "^3.0.0" + +is-relative@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" + integrity sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA== + dependencies: + is-unc-path "^1.0.0" + +is-resolvable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" + integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== + +is-retry-allowed@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" + integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== + +is-root@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-root/-/is-root-1.0.0.tgz#07b6c233bc394cd9d02ba15c966bd6660d6342d5" + integrity sha1-B7bCM7w5TNnQK6FclmvWZg1jQtU= + +is-ssh@^1.3.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.3.2.tgz#a4b82ab63d73976fd8263cceee27f99a88bdae2b" + integrity sha512-elEw0/0c2UscLrNG+OAorbP539E3rhliKPg+hDMWN9VwrDXfYK+4PBEykDPfxlYYtQvl84TascnQyobfQLHEhQ== + dependencies: + protocols "^1.1.0" + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + +is-string@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" + integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== + +is-svg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75" + integrity sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ== + dependencies: + html-comment-regex "^1.1.0" + +is-symbol@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + dependencies: + has-symbols "^1.0.1" + +is-typedarray@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-unc-path@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d" + integrity sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ== + dependencies: + unc-path-regex "^0.1.2" + +is-url@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" + integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww== + +is-valid-path@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-valid-path/-/is-valid-path-0.1.1.tgz#110f9ff74c37f663e1ec7915eb451f2db93ac9df" + integrity sha1-EQ+f90w39mPh7HkV60UfLbk6yd8= + dependencies: + is-invalid-path "^0.1.0" + +is-whitespace-character@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz#0858edd94a95594c7c9dd0b5c174ec6e45ee4aa7" + integrity sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w== + +is-whitespace@^0.3.0: + version "0.3.0" + resolved "https://registry.nlark.com/is-whitespace/download/is-whitespace-0.3.0.tgz#1639ecb1be036aec69a54cbb401cfbed7114ab7f" + integrity sha1-Fjnssb4DauxppUy7QBz77XEUq38= + +is-windows@^1.0.1, is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-word-character@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.4.tgz#ce0e73216f98599060592f62ff31354ddbeb0230" + integrity sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA== + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + +is-wsl@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +is-yarn-global@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" + integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isarray@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" + integrity sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +isurl@^1.0.0-alpha5: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" + integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w== + dependencies: + has-to-string-tag-x "^1.2.0" + is-object "^1.0.1" + +iterall@^1.2.1, iterall@^1.2.2: + version "1.3.0" + resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.3.0.tgz#afcb08492e2915cbd8a0884eb93a8c94d0d72fea" + integrity sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg== + +jest-diff@^25.5.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.5.0.tgz#1dd26ed64f96667c068cef026b677dfa01afcfa9" + integrity sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A== + dependencies: + chalk "^3.0.0" + diff-sequences "^25.2.6" + jest-get-type "^25.2.6" + pretty-format "^25.5.0" + +jest-get-type@^25.2.6: + version "25.2.6" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.2.6.tgz#0b0a32fab8908b44d508be81681487dbabb8d877" + integrity sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig== + +jest-worker@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" + integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw== + dependencies: + merge-stream "^2.0.0" + supports-color "^6.1.0" + +jest-worker@^25.4.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.5.0.tgz#2611d071b79cea0f43ee57a3d118593ac1547db1" + integrity sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw== + dependencies: + merge-stream "^2.0.0" + supports-color "^7.0.0" + +joi@^17.2.1: + version "17.3.0" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.3.0.tgz#f1be4a6ce29bc1716665819ac361dfa139fff5d2" + integrity sha512-Qh5gdU6niuYbUIUV5ejbsMiiFmBdw8Kcp8Buj2JntszCkCfxJ9Cz76OtHxOZMPXrt5810iDIXs+n1nNVoquHgg== + dependencies: + "@hapi/hoek" "^9.0.0" + "@hapi/topo" "^5.0.0" + "@sideway/address" "^4.1.0" + "@sideway/formula" "^3.0.0" + "@sideway/pinpoint" "^2.0.0" + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= + +js-yaml@^3.10.0: + version "3.14.1" + resolved "https://registry.nlark.com/js-yaml/download/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha1-2ugS/bOCX6MGYJqHFzg8UMNqBTc= + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@^3.11.0, js-yaml@^3.13.1: + version "3.14.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" + integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= + +json-loader@^0.5.7: + version "0.5.7" + resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" + integrity sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w== + +json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +json-stringify-safe@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +json3@^3.3.2: + version "3.3.3" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" + integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +json5@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" + integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== + dependencies: + minimist "^1.2.5" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= + +"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.1.0.tgz#642f1d7b88aa6d7eb9d8f2210e166478444fa891" + integrity sha512-d4/UOjg+mxAWxCiF0c5UTSwyqbchkbqCvK87aBovhnh8GtysTjWmgC63tY0cJx/HzGgm9qnA147jVBdpOiQ2RA== + dependencies: + array-includes "^3.1.1" + object.assign "^4.1.1" + +keyv@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.0.0.tgz#44923ba39e68b12a7cec7df6c3268c031f2ef373" + integrity sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA== + dependencies: + json-buffer "3.0.0" + +keyv@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" + integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== + dependencies: + json-buffer "3.0.0" + +killable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" + integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0, kind-of@^5.0.2: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +language-subtag-registry@~0.3.2: + version "0.3.21" + resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz#04ac218bea46f04cb039084602c6da9e788dd45a" + integrity sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg== + +language-tags@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" + integrity sha1-0yHbxNowuovzAk4ED6XBRmH5GTo= + dependencies: + language-subtag-registry "~0.3.2" + +last-call-webpack-plugin@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz#9742df0e10e3cf46e5c0381c2de90d3a7a2d7555" + integrity sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w== + dependencies: + lodash "^4.17.5" + webpack-sources "^1.1.0" + +latest-version@5.1.0, latest-version@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" + integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== + dependencies: + package-json "^6.3.0" + +lazy-cache@^2.0.2: + version "2.0.2" + resolved "https://registry.nlark.com/lazy-cache/download/lazy-cache-2.0.2.tgz#b9190a4f913354694840859f8a8f7084d8822264" + integrity sha1-uRkKT5EzVGlIQIWfio9whNiCImQ= + dependencies: + set-getter "^0.1.0" + +less-loader@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-6.2.0.tgz#8b26f621c155b342eefc24f5bd6e9dc40c42a719" + integrity sha512-Cl5h95/Pz/PWub/tCBgT1oNMFeH1WTD33piG80jn5jr12T4XbxZcjThwNXDQ7AG649WEynuIzO4b0+2Tn9Qolg== + dependencies: + clone "^2.1.2" + less "^3.11.3" + loader-utils "^2.0.0" + schema-utils "^2.7.0" + +less@^3.11.3: + version "3.12.2" + resolved "https://registry.yarnpkg.com/less/-/less-3.12.2.tgz#157e6dd32a68869df8859314ad38e70211af3ab4" + integrity sha512-+1V2PCMFkL+OIj2/HrtrvZw0BC0sYLMICJfbQjuj/K8CEnlrFX6R5cKKgzzttsZDHyxQNL1jqMREjKN3ja/E3Q== + dependencies: + tslib "^1.10.0" + optionalDependencies: + errno "^0.1.1" + graceful-fs "^4.1.2" + image-size "~0.5.0" + make-dir "^2.1.0" + mime "^1.4.1" + native-request "^1.0.5" + source-map "~0.6.0" + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levn@^0.3.0, levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +lines-and-columns@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" + integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +loader-fs-cache@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz#f08657646d607078be2f0a032f8bd69dd6f277d9" + integrity sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA== + dependencies: + find-cache-dir "^0.1.1" + mkdirp "^0.5.1" + +loader-runner@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" + integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== + +loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + +loader-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" + integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lock@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/lock/-/lock-1.1.0.tgz#53157499d1653b136ca66451071fca615703fa55" + integrity sha1-UxV0mdFlOxNspmRRBx/KYVcD+lU= + +lockfile@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.4.tgz#07f819d25ae48f87e538e6578b6964a4981a5609" + integrity sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA== + dependencies: + signal-exit "^3.0.2" + +lodash.clonedeep@4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= + +lodash.deburr@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/lodash.deburr/-/lodash.deburr-4.1.0.tgz#ddb1bbb3ef07458c0177ba07de14422cb033ff9b" + integrity sha1-3bG7s+8HRYwBd7oH3hRCLLAz/5s= + +lodash.every@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.every/-/lodash.every-4.6.0.tgz#eb89984bebc4364279bb3aefbbd1ca19bfa6c6a7" + integrity sha1-64mYS+vENkJ5uzrvu9HKGb+mxqc= + +lodash.flatten@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= + +lodash.flattendeep@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" + integrity sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI= + +lodash.foreach@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" + integrity sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM= + +lodash.isempty@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.isempty/-/lodash.isempty-4.4.0.tgz#6f86cbedd8be4ec987be9aaf33c9684db1b31e7e" + integrity sha1-b4bL7di+TsmHvpqvM8loTbGzHn4= + +lodash.map@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" + integrity sha1-dx7Hg540c9nEzeKLGTlMNWL09tM= + +lodash.maxby@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.maxby/-/lodash.maxby-4.6.0.tgz#082240068f3c7a227aa00a8380e4f38cf0786e3d" + integrity sha1-CCJABo88eiJ6oAqDgOTzjPB4bj0= + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.toarray@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" + integrity sha1-JMS/zWsvuji/0FlNsRedjptlZWE= + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + +lodash.without@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.without/-/lodash.without-4.4.0.tgz#3cd4574a00b67bae373a94b748772640507b7aac" + integrity sha1-PNRXSgC2e643OpS3SHcmQFB7eqw= + +lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0: + version "4.17.20" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== + +loglevel@^1.6.8: + version "1.7.0" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.0.tgz#728166855a740d59d38db01cf46f042caa041bb0" + integrity sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ== + +longest-streak@^2.0.1: + version "2.0.4" + resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.4.tgz#b8599957da5b5dab64dee3fe316fa774597d90e4" + integrity sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg== + +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +loud-rejection@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-2.2.0.tgz#4255eb6e9c74045b0edc021fa7397ab655a8517c" + integrity sha512-S0FayMXku80toa5sZ6Ro4C+s+EtFDCsyJNG/AzFMfX3AxD5Si4dZsgzm/kKnbOxHl5Cv8jBlno8+3XYIh2pNjQ== + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.2" + +lower-case@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.1.tgz#39eeb36e396115cc05e29422eaea9e692c9408c7" + integrity sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ== + dependencies: + tslib "^1.10.0" + +lowercase-keys@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" + integrity sha1-TjNms55/VFfjXxMkvfb4jQv8cwY= + +lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +lru-cache@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.0.tgz#b5cbf01556c16966febe54ceec0fb4dc90df6c28" + integrity sha1-tcvwFVbBaWb+vlTO7A+03JDfbCg= + dependencies: + pseudomap "^1.0.1" + yallist "^2.0.0" + +lru-cache@^4.0.0, lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +make-dir@^2.0.0, make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-dir@^3.0.0, make-dir@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +markdown-escapes@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535" + integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg== + +markdown-table@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.3.tgz#9fcb69bcfdb8717bfd0398c6ec2d93036ef8de60" + integrity sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q== + +markdown-table@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-2.0.0.tgz#194a90ced26d31fe753d8b9434430214c011865b" + integrity sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A== + dependencies: + repeat-string "^1.0.0" + +marked@1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/marked/-/marked-1.2.2.tgz#5d77ffb789c4cb0ae828bfe76250f7140b123f70" + integrity sha512-5jjKHVl/FPo0Z6ocP3zYhKiJLzkwJAw4CZoLjv57FkvbUuwOX4LIBBGGcXjAY6ATcd1q9B8UTj5T9Umauj0QYQ== + +md5-file@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/md5-file/-/md5-file-5.0.0.tgz#e519f631feca9c39e7f9ea1780b63c4745012e20" + integrity sha512-xbEFXCYVWrSx/gEKS1VPlg84h/4L20znVIulKw6kMfmBUAZNAnF00eczz9ICMl+/hjQGo5KSXRxbL/47X3rmMw== + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +mdast-util-compact@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mdast-util-compact/-/mdast-util-compact-1.0.4.tgz#d531bb7667b5123abf20859be086c4d06c894593" + integrity sha512-3YDMQHI5vRiS2uygEFYaqckibpJtKq5Sj2c8JioeOQBU6INpKbdWzfyLqFFnDwEcEnRFIdMsguzs5pC1Jp4Isg== + dependencies: + unist-util-visit "^1.1.0" + +mdast-util-compact@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-compact/-/mdast-util-compact-2.0.1.tgz#cabc69a2f43103628326f35b1acf735d55c99490" + integrity sha512-7GlnT24gEwDrdAwEHrU4Vv5lLWrEer4KOkAiKT9nYstsTad7Oc1TwqT2zIMKRdZF7cTuaf+GA1E4Kv7jJh8mPA== + dependencies: + unist-util-visit "^2.0.0" + +mdast-util-definitions@^1.2.0: + version "1.2.5" + resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-1.2.5.tgz#3fe622a4171c774ebd06f11e9f8af7ec53ea5c74" + integrity sha512-CJXEdoLfiISCDc2JB6QLb79pYfI6+GcIH+W2ox9nMc7od0Pz+bovcHsiq29xAQY6ayqe/9CsK2VzkSJdg1pFYA== + dependencies: + unist-util-visit "^1.0.0" + +mdast-util-to-hast@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-3.0.4.tgz#132001b266031192348d3366a6b011f28e54dc40" + integrity sha512-/eIbly2YmyVgpJNo+bFLLMCI1XgolO/Ffowhf+pHDq3X4/V6FntC9sGQCDLM147eTS+uSXv5dRzJyFn+o0tazA== + dependencies: + collapse-white-space "^1.0.0" + detab "^2.0.0" + mdast-util-definitions "^1.2.0" + mdurl "^1.0.1" + trim "0.0.1" + trim-lines "^1.0.0" + unist-builder "^1.0.1" + unist-util-generated "^1.1.0" + unist-util-position "^3.0.0" + unist-util-visit "^1.1.0" + xtend "^4.0.1" + +mdast-util-to-nlcst@^3.2.0: + version "3.2.3" + resolved "https://registry.yarnpkg.com/mdast-util-to-nlcst/-/mdast-util-to-nlcst-3.2.3.tgz#dcd0f51b59515b11a0700aeb40f168ed7ba9ed3d" + integrity sha512-hPIsgEg7zCvdU6/qvjcR6lCmJeRuIEpZGY5xBV+pqzuMOvQajyyF8b6f24f8k3Rw8u40GwkI3aAxUXr3bB2xag== + dependencies: + nlcst-to-string "^2.0.0" + repeat-string "^1.5.2" + unist-util-position "^3.0.0" + vfile-location "^2.0.0" + +mdast-util-to-string@^1.0.5, mdast-util-to-string@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz#27055500103f51637bd07d01da01eb1967a43527" + integrity sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A== + +mdast-util-toc@^5.0: + version "5.0.4" + resolved "https://registry.yarnpkg.com/mdast-util-toc/-/mdast-util-toc-5.0.4.tgz#5c7bc8ff64914546384d81ea155478ba34802c12" + integrity sha512-JjLlJfcnsQlAJKWCY8CfTp9gA5A2Mk5PeDmPmCLLvq+2SjlJKyGUQTiDdSO5WvPRzpwnghO3ByyJc4OngadB3w== + dependencies: + "@types/mdast" "^3.0.3" + "@types/unist" "^2.0.3" + extend "^3.0.2" + github-slugger "^1.2.1" + mdast-util-to-string "^1.0.5" + unist-util-is "^4.0.0" + unist-util-visit "^2.0.0" + +mdn-data@2.0.12: + version "2.0.12" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.12.tgz#bbb658d08b38f574bbb88f7b83703defdcc46844" + integrity sha512-ULbAlgzVb8IqZ0Hsxm6hHSlQl3Jckst2YEQS7fODu9ilNWy2LvcoSY7TRFIktABP2mdppBioc66va90T+NUs8Q== + +mdn-data@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" + integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== + +mdurl@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" + integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= + +meant@^1.0.1, meant@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/meant/-/meant-1.0.2.tgz#5d0c78310a3d8ae1408a16be0fe0bd42a969f560" + integrity sha512-KN+1uowN/NK+sT/Lzx7WSGIj2u+3xe5n2LbwObfjOhPZiA+cCfCm6idVl0RkEfjThkw5XJ96CyRcanq6GmKtUg== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + +memory-fs@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +memory-fs@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" + integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.2.3, merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + +micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +micromatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" + integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== + dependencies: + braces "^3.0.1" + picomatch "^2.0.5" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@1.44.0: + version "1.44.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" + integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== + +"mime-db@>= 1.43.0 < 2": + version "1.45.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea" + integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w== + +mime-db@~1.25.0: + version "1.25.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.25.0.tgz#c18dbd7c73a5dbf6f44a024dc0d165a1e7b1c392" + integrity sha1-wY29fHOl2/b0SgJNwNFloeexw5I= + +mime-types@2.1.13: + version "2.1.13" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.13.tgz#e07aaa9c6c6b9a7ca3012c69003ad25a39e92a88" + integrity sha1-4HqqnGxrmnyjASxpADrSWjnpKog= + dependencies: + mime-db "~1.25.0" + +mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.24: + version "2.1.27" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" + integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== + dependencies: + mime-db "1.44.0" + +mime@1.6.0, mime@^1.4.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mime@^2.0.3, mime@^2.4.4, mime@^2.4.6: + version "2.4.6" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" + integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA== + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-response@^1.0.0, mimic-response@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +min-document@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU= + dependencies: + dom-walk "^0.1.0" + +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + +mini-css-extract-plugin@^0.11.2: + version "0.11.3" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.11.3.tgz#15b0910a7f32e62ffde4a7430cfefbd700724ea6" + integrity sha512-n9BA8LonkOkW1/zn+IbLPQmovsL0wMb9yx75fMJQZf2X1Zoec9yTZtyMePcyu19wPkmFbzZZA6fLTotpFhQsOA== + dependencies: + loader-utils "^1.1.0" + normalize-url "1.9.1" + schema-utils "^1.0.0" + webpack-sources "^1.1.0" + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + +minimatch@3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" + integrity sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q= + dependencies: + brace-expansion "^1.0.0" + +minimatch@3.0.4, minimatch@^3.0.3, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.2.1.tgz#827ba4e7593464e7c221e8c5bed930904ee2c455" + integrity sha512-GY8fANSrTMfBVfInqJAY41QkOM+upUTytK1jZ0c8+3HdHrJxBJ3rF5i9moClXTE8uUSnUo8cAsCoxDXvSY4DHg== + +minimist@^1.1.0, minimist@^1.2.0, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.2: + version "1.2.4" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass@^3.0.0, minipass@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" + integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== + dependencies: + yallist "^4.0.0" + +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^3.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + +mitt@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mitt/-/mitt-1.2.0.tgz#cb24e6569c806e31bd4e3995787fe38a04fdf90d" + integrity sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw== + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +moment@^2.27.0: + version "2.29.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3" + integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ== + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +ms@2.1.2, ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +multicast-dns-service-types@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" + integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= + +multicast-dns@^6.0.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" + integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== + dependencies: + dns-packet "^1.3.1" + thunky "^1.0.2" + +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= + +mute-stream@0.0.8, mute-stream@~0.0.4: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +name-all-modules-plugin@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/name-all-modules-plugin/-/name-all-modules-plugin-1.0.1.tgz#0abfb6ad835718b9fb4def0674e06657a954375c" + integrity sha1-Cr+2rYNXGLn7Te8GdOBmV6lUN1w= + +nan@^2.12.1: + version "2.14.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" + integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +native-request@^1.0.5: + version "1.0.8" + resolved "https://registry.yarnpkg.com/native-request/-/native-request-1.0.8.tgz#8f66bf606e0f7ea27c0e5995eb2f5d03e33ae6fb" + integrity sha512-vU2JojJVelUGp6jRcLwToPoWGxSx23z/0iX+I77J3Ht17rf2INGjrhOoQnjVo60nQd8wVsgzKkPfRXBiVdD2ag== + +native-url@^0.2.6: + version "0.2.6" + resolved "https://registry.yarnpkg.com/native-url/-/native-url-0.2.6.tgz#ca1258f5ace169c716ff44eccbddb674e10399ae" + integrity sha512-k4bDC87WtgrdD362gZz6zoiXQrl40kYlBmpfmSjwRO1VU0V5ccwJTlxuE72F6m3V0vc1xOf6n3UCP9QyerRqmA== + dependencies: + querystring "^0.2.0" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +negotiator@0.6.2, negotiator@~0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + +neo-async@^2.5.0, neo-async@^2.6.1: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +next-tick@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" + integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +nlcst-to-string@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/nlcst-to-string/-/nlcst-to-string-2.0.4.tgz#9315dfab80882bbfd86ddf1b706f53622dc400cc" + integrity sha512-3x3jwTd6UPG7vi5k4GEzvxJ5rDA7hVUIRNHPblKuMVP9Z3xmlsd9cgLcpAMkc5uPOBna82EeshROFhsPkbnTZg== + +no-case@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.3.tgz#c21b434c1ffe48b39087e86cfb4d2582e9df18f8" + integrity sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw== + dependencies: + lower-case "^2.0.1" + tslib "^1.10.0" + +node-emoji@^1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.10.0.tgz#8886abd25d9c7bb61802a658523d1f8d2a89b2da" + integrity sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw== + dependencies: + lodash.toarray "^4.4.0" + +node-eta@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/node-eta/-/node-eta-0.9.0.tgz#9fb0b099bcd2a021940e603c64254dc003d9a7a8" + integrity sha1-n7CwmbzSoCGUDmA8ZCVNwAPZp6g= + +node-fetch@2.6.1, node-fetch@^2.5.0, node-fetch@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" + integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== + +node-fetch@^2.3.0: + version "2.6.6" + resolved "https://registry.npmmirror.com/node-fetch/download/node-fetch-2.6.6.tgz#1751a7c01834e8e1697758732e9efb6eeadfaf89" + integrity sha1-F1GnwBg06OFpd1hzLp77burfr4k= + dependencies: + whatwg-url "^5.0.0" + +node-forge@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" + integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== + +node-gyp-build@^4.2.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.2.3.tgz#ce6277f853835f718829efb47db20f3e4d9c4739" + integrity sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg== + +node-libs-browser@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^3.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.1" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.11.0" + vm-browserify "^1.0.1" + +node-object-hash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/node-object-hash/-/node-object-hash-2.0.0.tgz#9971fcdb7d254f05016bd9ccf508352bee11116b" + integrity sha512-VZR0zroAusy1ETZMZiGeLkdu50LGjG5U1KHZqTruqtTyQ2wfWhHG2Ow4nsUbfTFGlaREgNHcCWoM/OzEm6p+NQ== + +node-releases@^1.1.65: + version "1.1.65" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.65.tgz#52d9579176bd60f23eba05c4438583f341944b81" + integrity sha512-YpzJOe2WFIW0V4ZkJQd/DGR/zdVwc/pI4Nl1CZrBO19FdRcSTmsuhdttw9rsTzzJLrNcSloLiBbEYx1C4f6gpA== + +noms@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/noms/-/noms-0.0.0.tgz#da8ebd9f3af9d6760919b27d9cdc8092a7332859" + integrity sha1-2o69nzr51nYJGbJ9nNyAkqczKFk= + dependencies: + inherits "^2.0.1" + readable-stream "~1.0.31" + +normalize-package-data@^2.3.2: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= + +normalize-url@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" + integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= + dependencies: + object-assign "^4.0.1" + prepend-http "^1.0.0" + query-string "^4.1.0" + sort-keys "^1.0.0" + +normalize-url@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-2.0.1.tgz#835a9da1551fa26f70e92329069a23aa6574d7e6" + integrity sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw== + dependencies: + prepend-http "^2.0.0" + query-string "^5.0.1" + sort-keys "^2.0.0" + +normalize-url@^3.0.0, normalize-url@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" + integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== + +normalize-url@^4.1.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" + integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +npm-run-path@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +nth-check@^1.0.1, nth-check@^1.0.2, nth-check@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" + integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== + dependencies: + boolbase "~1.0.0" + +null-loader@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/null-loader/-/null-loader-3.0.0.tgz#3e2b6c663c5bda8c73a54357d8fa0708dc61b245" + integrity sha512-hf5sNLl8xdRho4UPBOOeoIwT3WhjYcMUQm0zj44EhD6UscMAz72o2udpoDFBgykucdEDGIcd6SXbc/G6zssbzw== + dependencies: + loader-utils "^1.2.3" + schema-utils "^1.0.0" + +num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= + +numbro@2.3.2: + version "2.3.2" + resolved "https://registry.nlark.com/numbro/download/numbro-2.3.2.tgz#4967c631b0ea99b17dd7f88cdd1eaa4ace4d4971" + integrity sha1-SWfGMbDqmbF91/iM3R6qSs5NSXE= + dependencies: + bignumber.js "^8.1.1" + +object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-component@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" + integrity sha1-8MaapQ78lbhmwYb0AKM3acsvEpE= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-hash@^1.1.4: + version "1.3.1" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df" + integrity sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA== + +object-inspect@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" + integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== + +object-is@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.3.tgz#2e3b9e65560137455ee3bd62aec4d90a2ea1cc81" + integrity sha512-teyqLvFWzLkq5B9ki8FVWA902UER2qkxmdA4nLf+wjOLAWgxzCWZNCxpDq9MvE8MmhWNr+I8w3BN49Vx36Y6Xg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + +object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-path@^0.11.2, object-path@^0.11.4: + version "0.11.5" + resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.11.5.tgz#d4e3cf19601a5140a55a16ad712019a9c50b577a" + integrity sha512-jgSbThcoR/s+XumvGMTMf81QVBmah+/Q7K7YduKeKVWL7N111unR2d6pZZarSk6kY/caeNxUDyxOvMWyzoU2eg== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.0, object.assign@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + +object.entries@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.2.tgz#bc73f00acb6b6bb16c203434b10f9a7e797d3add" + integrity sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + has "^1.0.3" + +object.fromentries@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.2.tgz#4a09c9b9bb3843dd0f89acdb517a794d4f355ac9" + integrity sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + has "^1.0.3" + +object.getownpropertydescriptors@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" + integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +object.values@^1.1.0, object.values@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e" + integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + function-bind "^1.1.1" + has "^1.0.3" + +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= + dependencies: + mimic-fn "^1.0.0" + +onetime@^5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +open@^7.0.3: + version "7.3.0" + resolved "https://registry.yarnpkg.com/open/-/open-7.3.0.tgz#45461fdee46444f3645b6e14eb3ca94b82e1be69" + integrity sha512-mgLwQIx2F/ye9SmbrUkurZCnkoXyXyu9EbHtJZrICjVAJfyMArdHp3KkixGdZx1ZHFPNIwl0DDM1dFFqXbTLZw== + dependencies: + is-docker "^2.0.0" + is-wsl "^2.1.1" + +opentracing@^0.14.4: + version "0.14.4" + resolved "https://registry.yarnpkg.com/opentracing/-/opentracing-0.14.4.tgz#a113408ea740da3a90fde5b3b0011a375c2e4268" + integrity sha512-nNnZDkUNExBwEpb7LZaeMeQgvrlO8l4bgY/LvGNZCR0xG/dGWqHqjKrAmR5GUoYo0FIz38kxasvA1aevxWs2CA== + +opn@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.1.0.tgz#72ce2306a17dbea58ff1041853352b4a8fc77519" + integrity sha512-iPNl7SyM8L30Rm1sjGdLLheyHVw5YXVfi3SKWJzBI7efxRwHojfRFjwE/OLM6qp9xJYMgab8WicTU1cPoY+Hpg== + dependencies: + is-wsl "^1.1.0" + +opn@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" + integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== + dependencies: + is-wsl "^1.1.0" + +optimize-css-assets-webpack-plugin@^5.0.3: + version "5.0.4" + resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.4.tgz#85883c6528aaa02e30bbad9908c92926bb52dc90" + integrity sha512-wqd6FdI2a5/FdoiCNNkEvLeA//lHHfG24Ln2Xm2qqdIk4aOlsR18jwpyOihqQ8849W3qu2DX8fOYxpvTMj+93A== + dependencies: + cssnano "^4.1.10" + last-call-webpack-plugin "^3.0.0" + +optionator@^0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +original@>=0.0.5, original@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" + integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== + dependencies: + url-parse "^1.4.3" + +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +p-cancelable@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.4.1.tgz#35f363d67d52081c8d9585e37bcceb7e0bbcb2a0" + integrity sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ== + +p-cancelable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" + integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== + +p-defer@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-3.0.0.tgz#d1dceb4ee9b2b604b1d94ffec83760175d4e6f83" + integrity sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw== + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-finally@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" + integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== + +p-is-promise@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e" + integrity sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4= + +p-limit@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.0.2.tgz#1664e010af3cadc681baafd3e2a437be7b0fb5fe" + integrity sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg== + dependencies: + p-try "^2.0.0" + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.0.0, p-limit@^2.2.0, p-limit@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-map@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + +p-map@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" + integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== + dependencies: + aggregate-error "^3.0.0" + +p-retry@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" + integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== + dependencies: + retry "^0.12.0" + +p-timeout@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-2.0.1.tgz#d8dd1979595d2dc0139e1fe46b8b646cb3cdf038" + integrity sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA== + dependencies: + p-finally "^1.0.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +p-try@^2.0.0, p-try@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +package-json@^6.3.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" + integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== + dependencies: + got "^9.6.0" + registry-auth-token "^4.0.0" + registry-url "^5.0.0" + semver "^6.2.0" + +pako@~1.0.5: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + +parallel-transform@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" + integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== + dependencies: + cyclist "^1.0.1" + inherits "^2.0.3" + readable-stream "^2.1.5" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.6" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" + integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== + dependencies: + asn1.js "^5.2.0" + browserify-aes "^1.0.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + +parse-english@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/parse-english/-/parse-english-4.2.0.tgz#037b68f34d1a1bdf3d33668b87791bdfc1f01e1e" + integrity sha512-jw5N6wZUZViIw3VLG/FUSeL3vDhfw5Q2g4E3nYC69Mm5ANbh9ZWd+eligQbeUoyObZM8neynTn3l14e09pjEWg== + dependencies: + nlcst-to-string "^2.0.0" + parse-latin "^4.0.0" + unist-util-modify-children "^2.0.0" + unist-util-visit-children "^1.0.0" + +parse-entities@^1.0.2, parse-entities@^1.1.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.2.tgz#c31bf0f653b6661354f8973559cb86dd1d5edf50" + integrity sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg== + dependencies: + character-entities "^1.0.0" + character-entities-legacy "^1.0.0" + character-reference-invalid "^1.0.0" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.0" + is-hexadecimal "^1.0.0" + +parse-entities@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" + integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ== + dependencies: + character-entities "^1.0.0" + character-entities-legacy "^1.0.0" + character-reference-invalid "^1.0.0" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.0" + is-hexadecimal "^1.0.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-json@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.1.0.tgz#f96088cdf24a8faa9aea9a009f2d9d942c999646" + integrity sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse-latin@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/parse-latin/-/parse-latin-4.3.0.tgz#1a70fc5601743baa06c5f12253c334fc94b4a917" + integrity sha512-TYKL+K98dcAWoCw/Ac1yrPviU8Trk+/gmjQVaoWEFDZmVD4KRg6c/80xKqNNFQObo2mTONgF8trzAf2UTwKafw== + dependencies: + nlcst-to-string "^2.0.0" + unist-util-modify-children "^2.0.0" + unist-util-visit-children "^1.0.0" + +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= + +parse-path@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-4.0.2.tgz#ef14f0d3d77bae8dd4bc66563a4c151aac9e65aa" + integrity sha512-HSqVz6iuXSiL8C1ku5Gl1Z5cwDd9Wo0q8CoffdAghP6bz8pJa1tcMC+m4N+z6VAS8QdksnIGq1TB6EgR4vPR6w== + dependencies: + is-ssh "^1.3.0" + protocols "^1.4.0" + +parse-srcset@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/parse-srcset/-/parse-srcset-1.0.2.tgz#f2bd221f6cc970a938d88556abc589caaaa2bde1" + integrity sha1-8r0iH2zJcKk42IVWq8WJyqqiveE= + +parse-url@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-5.0.2.tgz#856a3be1fcdf78dc93fc8b3791f169072d898b59" + integrity sha512-Czj+GIit4cdWtxo3ISZCvLiUjErSo0iI3wJ+q9Oi3QuMYTI6OZu+7cewMWZ+C1YAnKhYTk6/TLuhIgCypLthPA== + dependencies: + is-ssh "^1.3.0" + normalize-url "^3.3.0" + parse-path "^4.0.0" + protocols "^1.4.0" + +parse5@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== + +parseqs@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" + integrity sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0= + dependencies: + better-assert "~1.0.0" + +parseqs@0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.6.tgz#8e4bb5a19d1cdc844a08ac974d34e273afa670d5" + integrity sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w== + +parser-front-matter@1.6.4: + version "1.6.4" + resolved "https://registry.nlark.com/parser-front-matter/download/parser-front-matter-1.6.4.tgz#71fe3288a51c7b8734163f3793f3fdc24b0a8a90" + integrity sha1-cf4yiKUce4c0Fj83k/P9wksKipA= + dependencies: + extend-shallow "^2.0.1" + file-is-binary "^1.0.0" + gray-matter "^3.0.2" + isobject "^3.0.1" + lazy-cache "^2.0.2" + mixin-deep "^1.2.0" + trim-leading-lines "^0.1.1" + +parseuri@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" + integrity sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo= + dependencies: + better-assert "~1.0.0" + +parseuri@0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.6.tgz#e1496e829e3ac2ff47f39a4dd044b32823c4a25a" + integrity sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow== + +parseurl@^1.3.3, parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascal-case@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.1.tgz#5ac1975133ed619281e88920973d2cd1f279de5f" + integrity sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA== + dependencies: + no-case "^3.0.3" + tslib "^1.10.0" + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +password-prompt@^1.0.4: + version "1.1.2" + resolved "https://registry.yarnpkg.com/password-prompt/-/password-prompt-1.1.2.tgz#85b2f93896c5bd9e9f2d6ff0627fa5af3dc00923" + integrity sha512-bpuBhROdrhuN3E7G/koAju0WjVw9/uQOG5Co5mokNj0MiOSBVZS1JTwM4zl55hu0WFmIEFvO9cU9sJQiBIYeIA== + dependencies: + ansi-escapes "^3.1.0" + cross-spawn "^6.0.5" + +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= + dependencies: + pify "^2.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pbkdf2@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" + integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +physical-cpu-count@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/physical-cpu-count/-/physical-cpu-count-2.0.0.tgz#18de2f97e4bf7a9551ad7511942b5496f7aba660" + integrity sha1-GN4vl+S/epVRrXURlCtUlverpmA= + +picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +pkg-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" + integrity sha1-ektQio1bstYp1EcFb/TpyTFM89Q= + dependencies: + find-up "^1.0.0" + +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= + dependencies: + find-up "^2.1.0" + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +pkg-dir@^4.1.0, pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +pnp-webpack-plugin@^1.6.4: + version "1.6.4" + resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz#c9711ac4dc48a685dabafc86f8b6dd9f8df84149" + integrity sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg== + dependencies: + ts-pnp "^1.1.6" + +portfinder@^1.0.26: + version "1.0.28" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778" + integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA== + dependencies: + async "^2.6.2" + debug "^3.1.1" + mkdirp "^0.5.5" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +postcss-calc@^7.0.1: + version "7.0.5" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.5.tgz#f8a6e99f12e619c2ebc23cf6c486fdc15860933e" + integrity sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg== + dependencies: + postcss "^7.0.27" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.0.2" + +postcss-colormin@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381" + integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw== + dependencies: + browserslist "^4.0.0" + color "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-convert-values@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" + integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-discard-comments@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033" + integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg== + dependencies: + postcss "^7.0.0" + +postcss-discard-duplicates@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" + integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ== + dependencies: + postcss "^7.0.0" + +postcss-discard-empty@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" + integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w== + dependencies: + postcss "^7.0.0" + +postcss-discard-overridden@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" + integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg== + dependencies: + postcss "^7.0.0" + +postcss-flexbugs-fixes@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz#9218a65249f30897deab1033aced8578562a6690" + integrity sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ== + dependencies: + postcss "^7.0.26" + +postcss-js@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-2.0.3.tgz#a96f0f23ff3d08cec7dc5b11bf11c5f8077cdab9" + integrity sha512-zS59pAk3deu6dVHyrGqmC3oDXBdNdajk4k1RyxeVXCrcEDBUBHoIhE4QTsmhxgzXxsaqFDAkUZfmMa5f/N/79w== + dependencies: + camelcase-css "^2.0.1" + postcss "^7.0.18" + +postcss-load-config@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.2.tgz#c5ea504f2c4aef33c7359a34de3573772ad7502a" + integrity sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw== + dependencies: + cosmiconfig "^5.0.0" + import-cwd "^2.0.0" + +postcss-loader@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d" + integrity sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA== + dependencies: + loader-utils "^1.1.0" + postcss "^7.0.0" + postcss-load-config "^2.0.0" + schema-utils "^1.0.0" + +postcss-merge-longhand@^4.0.11: + version "4.0.11" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24" + integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw== + dependencies: + css-color-names "0.0.4" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + stylehacks "^4.0.0" + +postcss-merge-rules@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650" + integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + cssnano-util-same-parent "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + vendors "^1.0.0" + +postcss-minify-font-values@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" + integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-gradients@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471" + integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + is-color-stop "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-params@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874" + integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg== + dependencies: + alphanum-sort "^1.0.0" + browserslist "^4.0.0" + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + uniqs "^2.0.0" + +postcss-minify-selectors@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8" + integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g== + dependencies: + alphanum-sort "^1.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + +postcss-modules-extract-imports@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz#dc87e34148ec7eab5f791f7cd5849833375b741a" + integrity sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw== + dependencies: + postcss "^6.0.1" + +postcss-modules-local-by-default@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" + integrity sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk= + dependencies: + css-selector-tokenizer "^0.7.0" + postcss "^6.0.1" + +postcss-modules-scope@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" + integrity sha1-1upkmUx5+XtipytCb75gVqGUu5A= + dependencies: + css-selector-tokenizer "^0.7.0" + postcss "^6.0.1" + +postcss-modules-values@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" + integrity sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA= + dependencies: + icss-replace-symbols "^1.1.0" + postcss "^6.0.1" + +postcss-normalize-charset@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" + integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g== + dependencies: + postcss "^7.0.0" + +postcss-normalize-display-values@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a" + integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-positions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f" + integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA== + dependencies: + cssnano-util-get-arguments "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-repeat-style@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c" + integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-string@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c" + integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA== + dependencies: + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-timing-functions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9" + integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-unicode@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" + integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-url@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" + integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA== + dependencies: + is-absolute-url "^2.0.0" + normalize-url "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-whitespace@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82" + integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-ordered-values@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee" + integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw== + dependencies: + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-reduce-initial@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df" + integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + +postcss-reduce-transforms@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29" + integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg== + dependencies: + cssnano-util-get-match "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-selector-parser@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270" + integrity sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA== + dependencies: + dot-prop "^5.2.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-selector-parser@^6.0.2: + version "6.0.4" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz#56075a1380a04604c38b063ea7767a129af5c2b3" + integrity sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw== + dependencies: + cssesc "^3.0.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + util-deprecate "^1.0.2" + +postcss-svgo@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.2.tgz#17b997bc711b333bab143aaed3b8d3d6e3d38258" + integrity sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw== + dependencies: + is-svg "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + svgo "^1.0.0" + +postcss-unique-selectors@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" + integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg== + dependencies: + alphanum-sort "^1.0.0" + postcss "^7.0.0" + uniqs "^2.0.0" + +postcss-value-parser@^3.0.0, postcss-value-parser@^3.3.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" + integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== + +postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" + integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== + +postcss@^6.0.1, postcss@^6.0.23: + version "6.0.23" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" + integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag== + dependencies: + chalk "^2.4.1" + source-map "^0.6.1" + supports-color "^5.4.0" + +postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.17, postcss@^7.0.18, postcss@^7.0.26, postcss@^7.0.27, postcss@^7.0.32: + version "7.0.35" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.35.tgz#d2be00b998f7f211d8a276974079f2e92b970e24" + integrity sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +prepend-http@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= + +prettier@2.1.2, prettier@^2.0.5: + version "2.1.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.1.2.tgz#3050700dae2e4c8b67c4c3f666cdb8af405e1ce5" + integrity sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg== + +pretty-bytes@^5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.4.1.tgz#cd89f79bbcef21e3d21eb0da68ffe93f803e884b" + integrity sha512-s1Iam6Gwz3JI5Hweaz4GoCD1WUNUIyzePFy5+Js2hjwGVt2Z79wNN+ZKOZ2vB6C+Xs6njyB84Z1IthQg8d9LxA== + +pretty-error@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.2.tgz#be89f82d81b1c86ec8fdfbc385045882727f93b6" + integrity sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw== + dependencies: + lodash "^4.17.20" + renderkid "^2.0.4" + +pretty-format@^25.5.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.5.0.tgz#7873c1d774f682c34b8d48b6743a2bf2ac55791a" + integrity sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ== + dependencies: + "@jest/types" "^25.5.0" + ansi-regex "^5.0.0" + ansi-styles "^4.0.0" + react-is "^16.12.0" + +prism-react-renderer@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-1.1.1.tgz#1c1be61b1eb9446a146ca7a50b7bcf36f2a70a44" + integrity sha512-MgMhSdHuHymNRqD6KM3eGS0PNqgK9q4QF5P0yoQQvpB6jNjeSAi3jcSAz0Sua/t9fa4xDOMar9HJbLa08gl9ug== + +prismjs@1.22.0: + version "1.22.0" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.22.0.tgz#73c3400afc58a823dd7eed023f8e1ce9fd8977fa" + integrity sha512-lLJ/Wt9yy0AiSYBf212kK3mM5L8ycwlyTlSxHBAneXLR0nzFMlZ5y7riFPF3E33zXOF2IH95xdY5jIyZbM9z/w== + optionalDependencies: + clipboard "^2.0.0" + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + +progress@^2.0.0, progress@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + +prompts@^2.3.2: + version "2.4.0" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.0.tgz#4aa5de0723a231d1ee9121c40fdf663df73f61d7" + integrity sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +prop-types@^15.6.1, prop-types@^15.7.2: + version "15.7.2" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" + integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.8.1" + +proper-lockfile@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/proper-lockfile/-/proper-lockfile-4.1.1.tgz#284cf9db9e30a90e647afad69deb7cb06881262c" + integrity sha512-1w6rxXodisVpn7QYvLk706mzprPTAPCYAqxMvctmPN3ekuRk/kuGkGc82pangZiAt4R3lwSuUzheTTn0/Yb7Zg== + dependencies: + graceful-fs "^4.1.11" + retry "^0.12.0" + signal-exit "^3.0.2" + +property-information@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-4.2.0.tgz#f0e66e07cbd6fed31d96844d958d153ad3eb486e" + integrity sha512-TlgDPagHh+eBKOnH2VYvk8qbwsCG/TAJdmTL7f1PROUcSO8qt/KSmShEQ/OKvock8X9tFjtqjCScyOkkkvIKVQ== + dependencies: + xtend "^4.0.1" + +protocols@^1.1.0, protocols@^1.4.0: + version "1.4.8" + resolved "https://registry.yarnpkg.com/protocols/-/protocols-1.4.8.tgz#48eea2d8f58d9644a4a32caae5d5db290a075ce8" + integrity sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg== + +proxy-addr@~2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" + integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.9.1" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + +pseudomap@^1.0.1, pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@^1.2.4: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +pupa@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" + integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== + dependencies: + escape-goat "^2.0.0" + +q@^1.1.2: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + +qs@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + +qs@^6.5.2: + version "6.9.4" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.4.tgz#9090b290d1f91728d3c22e54843ca44aea5ab687" + integrity sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ== + +query-string@^4.1.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" + integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= + dependencies: + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +query-string@^5.0.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" + integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== + dependencies: + decode-uri-component "^0.2.0" + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +query-string@^6.13.1: + version "6.13.6" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.13.6.tgz#e5ac7c74f2a5da43fbca0b883b4f0bafba439966" + integrity sha512-/WWZ7d9na6s2wMEGdVCVgKWE9Rt7nYyNIf7k8xmHXcesPMlEzicWo3lbYwHyA4wBktI2KrXxxZeACLbE84hvSQ== + dependencies: + decode-uri-component "^0.2.0" + split-on-first "^1.0.0" + strict-uri-encode "^2.0.0" + +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + +querystring@0.2.0, querystring@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + +raf@^3.4.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" + integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== + dependencies: + performance-now "^2.1.0" + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + +raw-body@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c" + integrity sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA== + dependencies: + bytes "3.1.0" + http-errors "1.7.3" + iconv-lite "0.4.24" + unpipe "1.0.0" + +raw-loader@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-0.5.1.tgz#0c3d0beaed8a01c966d9787bf778281252a979aa" + integrity sha1-DD0L6u2KAclm2Xh793goElKpeao= + +rc@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +react-dev-utils@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-4.2.3.tgz#5b42d9ea58d5e9e017a2f57a40a8af408a3a46fb" + integrity sha512-uvmkwl5uMexCmC0GUv1XGQP0YjfYePJufGg4YYiukhqk2vN1tQxwWJIBERqhOmSi80cppZg8mZnPP/kOMf1sUQ== + dependencies: + address "1.0.3" + babel-code-frame "6.26.0" + chalk "1.1.3" + cross-spawn "5.1.0" + detect-port-alt "1.1.3" + escape-string-regexp "1.0.5" + filesize "3.5.11" + global-modules "1.0.0" + gzip-size "3.0.0" + inquirer "3.3.0" + is-root "1.0.0" + opn "5.1.0" + react-error-overlay "^3.0.0" + recursive-readdir "2.2.1" + shell-quote "1.6.1" + sockjs-client "1.1.4" + strip-ansi "3.0.1" + text-table "0.2.0" + +react-dom@17.0.1: + version "17.0.1" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.1.tgz#1de2560474ec9f0e334285662ede52dbc5426fc6" + integrity sha512-6eV150oJZ9U2t9svnsspTMrWNyHc6chX0KzDeAOXftRa8bNeOKTTfCJ7KorIwenkHd2xqVTBTCZd79yk/lx/Ug== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + scheduler "^0.20.1" + +react-error-overlay@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-3.0.0.tgz#c2bc8f4d91f1375b3dad6d75265d51cd5eeaf655" + integrity sha512-XzgvowFrwDo6TWcpJ/WTiarb9UI6lhA4PMzS7n1joK3sHfBBBOQHUc0U4u57D6DWO9vHv6lVSWx2Q/Ymfyv4hw== + +react-error-overlay@^6.0.7: + version "6.0.8" + resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.8.tgz#474ed11d04fc6bda3af643447d85e9127ed6b5de" + integrity sha512-HvPuUQnLp5H7TouGq3kzBeioJmXms1wHy9EGjz2OURWBp4qZO6AfGEcnxts1D/CbwPLRAgTMPCEgYhA3sEM4vw== + +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-helmet@6.1.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: + version "4.13.0" + resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-4.13.0.tgz#c27e9408581c2a678f5316e69c061b226dc6a202" + integrity sha512-JrLlvUPqh6wIkrK2hZDfOyq/Uh/WeVEr8nc7hkn2/3Ul0sx1Kr5y4kOGNacNRoj7RhwLNcQ3Udf1KJXrqc0ZtA== + dependencies: + fast-levenshtein "^2.0.6" + global "^4.3.0" + hoist-non-react-statics "^3.3.0" + loader-utils "^1.1.0" + prop-types "^15.6.1" + react-lifecycles-compat "^3.0.4" + shallowequal "^1.1.0" + source-map "^0.7.3" + +react-is@^16.12.0, react-is@^16.7.0, react-is@^16.8.1: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-lifecycles-compat@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" + integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== + +react-refresh@^0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.8.3.tgz#721d4657672d400c5e3c75d063c4a85fb2d5d68f" + integrity sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg== + +react-side-effect@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/react-side-effect/-/react-side-effect-2.1.1.tgz#66c5701c3e7560ab4822a4ee2742dee215d72eb3" + integrity sha512-2FoTQzRNTncBVtnzxFOk2mCpcfxQpenBMbk5kSVBg5UcPqV9fRbgY2zhb7GTWWOlpFmAxhClBDlIq8Rsubz1yQ== + +react@17.0.1: + version "17.0.1" + resolved "https://registry.yarnpkg.com/react/-/react-17.0.1.tgz#6e0600416bd57574e3f86d92edba3d9008726127" + integrity sha512-lG9c9UuMHdcAexXtigOZLX8exLWkW0Ku29qPRU8uhF2R9BN96dLCt0psvzPLlHc5OWkgymP3qwTRgbnw5BKx3w== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +read-chunk@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/read-chunk/-/read-chunk-3.2.0.tgz#2984afe78ca9bfbbdb74b19387bf9e86289c16ca" + integrity sha512-CEjy9LCzhmD7nUpJ1oVOE6s/hBkejlcJEgLQHVnQznOSilOPb+kpKktlLfFDK3/WP43+F80xkUTM2VOkYoSYvQ== + dependencies: + pify "^4.0.1" + with-open-file "^0.1.6" + +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + +read@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" + integrity sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ= + dependencies: + mute-stream "~0.0.4" + +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@~1.0.31: + version "1.0.34" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw= + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== + dependencies: + picomatch "^2.2.1" + +recursive-readdir@2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.1.tgz#90ef231d0778c5ce093c9a48d74e5c5422d13a99" + integrity sha1-kO8jHQd4xc4JPJpI105cVCLROpk= + dependencies: + minimatch "3.0.3" + +redux-thunk@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622" + integrity sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw== + +redux@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.5.tgz#4db5de5816e17891de8a80c424232d06f051d93f" + integrity sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w== + dependencies: + loose-envify "^1.4.0" + symbol-observable "^1.2.0" + +regenerate-unicode-properties@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" + integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== + dependencies: + regenerate "^1.4.0" + +regenerate@^1.4.0: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== + +regenerator-runtime@^0.13.4: + version "0.13.7" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" + integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== + +regenerator-transform@^0.14.2: + version "0.14.5" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" + integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== + dependencies: + "@babel/runtime" "^7.8.4" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" + integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +regexpp@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" + integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== + +regexpp@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" + integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== + +regexpu-core@^4.7.1: + version "4.7.1" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" + integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.2.0" + regjsgen "^0.5.1" + regjsparser "^0.6.4" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.2.0" + +registry-auth-token@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.0.tgz#1d37dffda72bbecd0f581e4715540213a65eb7da" + integrity sha512-P+lWzPrsgfN+UEpDS3U8AQKg/UjZX6mQSJueZj3EK+vNESoqBSpBUD3gmu4sF9lOsjXWjF11dQKUqemf3veq1w== + dependencies: + rc "^1.2.8" + +registry-url@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" + integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== + dependencies: + rc "^1.2.8" + +regjsgen@^0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" + integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== + +regjsparser@^0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" + integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== + dependencies: + jsesc "~0.5.0" + +remark-mdx@^2.0.0-next.4: + version "2.0.0-next.8" + resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-2.0.0-next.8.tgz#db1c3cbc606ea0d01526242199bb134d99020363" + integrity sha512-mjP0yo6BgjYrx5a+gKWYRFWbGnRiWi4Fdf17xGCr9VkSMnG4Dyo06spqbaLfHwl0KkQ/RQZlR2sn1mKnYduJdw== + dependencies: + parse-entities "^2.0.0" + remark-stringify "^8.1.0" + stringify-entities "^3.0.1" + strip-indent "^3.0.0" + unist-util-stringify-position "^2.0.3" + +remark-mdxjs@^2.0.0-next.4: + version "2.0.0-next.8" + resolved "https://registry.yarnpkg.com/remark-mdxjs/-/remark-mdxjs-2.0.0-next.8.tgz#ff603ebfcb17f19503ee3fab78447445eaa08783" + integrity sha512-Z/+0eWc7pBEABwg3a5ptL+vCTWHYMFnYzpLoJxTm2muBSk8XyB/CL+tEJ6SV3Q/fScHX2dtG4JRcGSpbZFLazQ== + dependencies: + "@babel/core" "7.10.5" + "@babel/helper-plugin-utils" "7.10.4" + "@babel/plugin-proposal-object-rest-spread" "7.10.4" + "@babel/plugin-syntax-jsx" "7.10.4" + "@mdx-js/util" "^2.0.0-next.8" + +remark-parse@^6.0.0, remark-parse@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-6.0.3.tgz#c99131052809da482108413f87b0ee7f52180a3a" + integrity sha512-QbDXWN4HfKTUC0hHa4teU463KclLAnwpn/FBn87j9cKYJWWawbiLgMfP2Q4XwhxxuuuOxHlw+pSN0OKuJwyVvg== + dependencies: + collapse-white-space "^1.0.2" + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + is-whitespace-character "^1.0.0" + is-word-character "^1.0.0" + markdown-escapes "^1.0.0" + parse-entities "^1.1.0" + repeat-string "^1.5.4" + state-toggle "^1.0.0" + trim "0.0.1" + trim-trailing-lines "^1.0.0" + unherit "^1.0.4" + unist-util-remove-position "^1.0.0" + vfile-location "^2.0.0" + xtend "^4.0.1" + +remark-retext@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/remark-retext/-/remark-retext-3.1.3.tgz#77173b1d9d13dab15ce5b38d996195fea522ee7f" + integrity sha512-UujXAm28u4lnUvtOZQFYfRIhxX+auKI9PuA2QpQVTT7gYk1OgX6o0OUrSo1KOa6GNrFX+OODOtS5PWIHPxM7qw== + dependencies: + mdast-util-to-nlcst "^3.2.0" + +remark-stringify@6.0.4, remark-stringify@^6.0.0: + version "6.0.4" + resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-6.0.4.tgz#16ac229d4d1593249018663c7bddf28aafc4e088" + integrity sha512-eRWGdEPMVudijE/psbIDNcnJLRVx3xhfuEsTDGgH4GsFF91dVhw5nhmnBppafJ7+NWINW6C7ZwWbi30ImJzqWg== + dependencies: + ccount "^1.0.0" + is-alphanumeric "^1.0.0" + is-decimal "^1.0.0" + is-whitespace-character "^1.0.0" + longest-streak "^2.0.1" + markdown-escapes "^1.0.0" + markdown-table "^1.1.0" + mdast-util-compact "^1.0.0" + parse-entities "^1.0.2" + repeat-string "^1.5.4" + state-toggle "^1.0.0" + stringify-entities "^1.0.1" + unherit "^1.0.4" + xtend "^4.0.1" + +remark-stringify@^8.1.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-8.1.1.tgz#e2a9dc7a7bf44e46a155ec78996db896780d8ce5" + integrity sha512-q4EyPZT3PcA3Eq7vPpT6bIdokXzFGp9i85igjmhRyXWmPs0Y6/d2FYwUNotKAWyLch7g0ASZJn/KHHcHZQ163A== + dependencies: + ccount "^1.0.0" + is-alphanumeric "^1.0.0" + is-decimal "^1.0.0" + is-whitespace-character "^1.0.0" + longest-streak "^2.0.1" + markdown-escapes "^1.0.0" + markdown-table "^2.0.0" + mdast-util-compact "^2.0.0" + parse-entities "^2.0.0" + repeat-string "^1.5.4" + state-toggle "^1.0.0" + stringify-entities "^3.0.0" + unherit "^1.0.4" + xtend "^4.0.1" + +remark@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/remark/-/remark-10.0.1.tgz#3058076dc41781bf505d8978c291485fe47667df" + integrity sha512-E6lMuoLIy2TyiokHprMjcWNJ5UxfGQjaMSMhV+f4idM625UjjK4j798+gPs5mfjzDE6vL0oFKVeZM6gZVSVrzQ== + dependencies: + remark-parse "^6.0.0" + remark-stringify "^6.0.0" + unified "^7.0.0" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +renderkid@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.4.tgz#d325e532afb28d3f8796ffee306be8ffd6fc864c" + integrity sha512-K2eXrSOJdq+HuKzlcjOlGoOarUu5SDguDEhE7+Ah4zuOWL40j8A/oHvLlLob9PSTNvVnBd+/q0Er1QfpEuem5g== + dependencies: + css-select "^1.1.0" + dom-converter "^0.2" + htmlparser2 "^3.3.0" + lodash "^4.17.20" + strip-ansi "^3.0.0" + +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + +repeat-string@^1.0.0, repeat-string@^1.5.2, repeat-string@^1.5.4, repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +replace-ext@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" + integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs= + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +require-package-name@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/require-package-name/-/require-package-name-2.0.1.tgz#c11e97276b65b8e2923f75dabf5fb2ef0c3841b9" + integrity sha1-wR6XJ2tluOKSP3Xav1+y7ww4Qbk= + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= + dependencies: + resolve-from "^3.0.0" + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-dir@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= + dependencies: + expand-tilde "^2.0.0" + global-modules "^1.0.0" + +resolve-from@5.0.0, resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.3.2, resolve@^1.8.1: + version "1.18.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.18.1.tgz#018fcb2c5b207d2a6424aee361c5a266da8f4130" + integrity sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA== + dependencies: + is-core-module "^2.0.0" + path-parse "^1.0.6" + +responselike@1.0.2, responselike@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= + dependencies: + lowercase-keys "^1.0.0" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +retext-english@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/retext-english/-/retext-english-3.0.4.tgz#f978828d51fbcee842bc3807a45b7f709822ea8d" + integrity sha512-yr1PgaBDde+25aJXrnt3p1jvT8FVLVat2Bx8XeAWX13KXo8OT+3nWGU3HWxM4YFJvmfqvJYJZG2d7xxaO774gw== + dependencies: + parse-english "^4.0.0" + unherit "^1.0.4" + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rgb-regex@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" + integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= + +rgba-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" + integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= + +rimraf@2.6.3: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + +rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +rss@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/rss/-/rss-1.2.2.tgz#50a1698876138133a74f9a05d2bdc8db8d27a921" + integrity sha1-UKFpiHYTgTOnT5oF0r3I240nqSE= + dependencies: + mime-types "2.1.13" + xml "1.0.1" + +run-async@^2.2.0, run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +run-parallel@^1.1.9: + version "1.1.10" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.10.tgz#60a51b2ae836636c81377df16cb107351bcd13ef" + integrity sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw== + +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + dependencies: + aproba "^1.1.1" + +rx-lite-aggregates@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" + integrity sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74= + dependencies: + rx-lite "*" + +rx-lite@*, rx-lite@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" + integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ= + +rxjs@^6.6.0: + version "6.6.3" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" + integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ== + dependencies: + tslib "^1.9.0" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sanitize-html@^1.27.5: + version "1.27.5" + resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-1.27.5.tgz#6c8149462adb23e360e1bb71cc0bae7f08c823c7" + integrity sha512-M4M5iXDAUEcZKLXkmk90zSYWEtk5NH3JmojQxKxV371fnMh+x9t1rqdmXaGoyEHw3z/X/8vnFhKjGL5xFGOJ3A== + dependencies: + htmlparser2 "^4.1.0" + lodash "^4.17.15" + parse-srcset "^1.0.2" + postcss "^7.0.27" + +sax@~1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +scheduler@^0.20.1: + version "0.20.1" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.1.tgz#da0b907e24026b01181ecbc75efdc7f27b5a000c" + integrity sha512-LKTe+2xNJBNxu/QhHvDR14wUXHRQbVY5ZOYpOGWRzhydZUqrLb2JBvLPY7cAqFmqrWuDED0Mjk7013SZiOz6Bw== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +schema-utils@^0.4.5: + version "0.4.7" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187" + integrity sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ== + dependencies: + ajv "^6.1.0" + ajv-keywords "^3.1.0" + +schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" + +schema-utils@^2.6.5, schema-utils@^2.6.6, schema-utils@^2.7.0: + version "2.7.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" + integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== + dependencies: + "@types/json-schema" "^7.0.5" + ajv "^6.12.4" + ajv-keywords "^3.5.2" + +scroll-to-element@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/scroll-to-element/-/scroll-to-element-2.0.3.tgz#99b404fc6a09fe73f3c062cd5b8a14efb6404e4d" + integrity sha512-5herPcm9jMfQgRwu94lH5mei+2YhipR4RQ2nAvnBxJb2tG+P7O0ctOKAaAZBXbBejnn+MImh3wrAUA5EcLnjEQ== + dependencies: + raf "^3.4.0" + +section-matter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167" + integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA== + dependencies: + extend-shallow "^2.0.1" + kind-of "^6.0.0" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= + +select@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d" + integrity sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0= + +selfsigned@^1.10.7: + version "1.10.8" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.8.tgz#0d17208b7d12c33f8eac85c41835f27fc3d81a30" + integrity sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w== + dependencies: + node-forge "^0.10.0" + +semver-diff@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" + integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== + dependencies: + semver "^6.3.0" + +"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +semver@^6.0.0, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.3.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + +send@0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + +serialize-javascript@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" + integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== + dependencies: + randombytes "^2.1.0" + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-getter@^0.1.0: + version "0.1.1" + resolved "https://registry.nlark.com/set-getter/download/set-getter-0.1.1.tgz#a3110e1b461d31a9cfc8c5c9ee2e9737ad447102" + integrity sha1-oxEOG0YdManPyMXJ7i6XN61EcQI= + dependencies: + to-object-path "^0.3.0" + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shallow-compare@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/shallow-compare/-/shallow-compare-1.2.2.tgz#fa4794627bf455a47c4f56881d8a6132d581ffdb" + integrity sha512-LUMFi+RppPlrHzbqmFnINTrazo0lPNwhcgzuAXVVcfy/mqPDrQmHAyz5bvV0gDAuRFrk804V0HpQ6u9sZ0tBeg== + +shallowequal@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" + integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" + integrity sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c= + dependencies: + array-filter "~0.0.0" + array-map "~0.0.0" + array-reduce "~0.0.0" + jsonify "~0.0.0" + +side-channel@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.3.tgz#cdc46b057550bbab63706210838df5d4c19519c3" + integrity sha512-A6+ByhlLkksFoUepsGxfj5x1gTSrs+OydsRptUxeNCabQpCFUvcwIczgOigI8vhY/OJCnPnyE9rGiwgvr9cS1g== + dependencies: + es-abstract "^1.18.0-next.0" + object-inspect "^1.8.0" + +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= + dependencies: + is-arrayish "^0.3.1" + +single-trailing-newline@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/single-trailing-newline/-/single-trailing-newline-1.0.0.tgz#81f0ad2ad645181945c80952a5c1414992ee9664" + integrity sha1-gfCtKtZFGBlFyAlSpcFBSZLulmQ= + dependencies: + detect-newline "^1.0.3" + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" + +slugify@^1.4.4: + version "1.4.6" + resolved "https://registry.yarnpkg.com/slugify/-/slugify-1.4.6.tgz#ef288d920a47fb01c2be56b3487b6722f5e34ace" + integrity sha512-ZdJIgv9gdrYwhXqxsH9pv7nXxjUEyQ6nqhngRxoAAOlmMGA28FDq5O4/5US4G2/Nod7d1ovNcgURQJ7kHq50KQ== + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +socket.io-adapter@~1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz#ab3f0d6f66b8fc7fca3959ab5991f82221789be9" + integrity sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g== + +socket.io-client@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.3.0.tgz#14d5ba2e00b9bcd145ae443ab96b3f86cbcc1bb4" + integrity sha512-cEQQf24gET3rfhxZ2jJ5xzAOo/xhZwK+mOqtGRg5IowZsMgwvHwnf/mCRapAAkadhM26y+iydgwsXGObBB5ZdA== + dependencies: + backo2 "1.0.2" + base64-arraybuffer "0.1.5" + component-bind "1.0.0" + component-emitter "1.2.1" + debug "~4.1.0" + engine.io-client "~3.4.0" + has-binary2 "~1.0.2" + has-cors "1.1.0" + indexof "0.0.1" + object-component "0.0.3" + parseqs "0.0.5" + parseuri "0.0.5" + socket.io-parser "~3.3.0" + to-array "0.1.4" + +socket.io-parser@~3.3.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.3.1.tgz#f07d9c8cb3fb92633aa93e76d98fd3a334623199" + integrity sha512-1QLvVAe8dTz+mKmZ07Swxt+LAo4Y1ff50rlyoEx00TQmDFVQYPfcqGvIDJLGaBdhdNCecXtyKpD+EgKGcmmbuQ== + dependencies: + component-emitter "~1.3.0" + debug "~3.1.0" + isarray "2.0.1" + +socket.io-parser@~3.4.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.4.1.tgz#b06af838302975837eab2dc980037da24054d64a" + integrity sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A== + dependencies: + component-emitter "1.2.1" + debug "~4.1.0" + isarray "2.0.1" + +socket.io@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.3.0.tgz#cd762ed6a4faeca59bc1f3e243c0969311eb73fb" + integrity sha512-2A892lrj0GcgR/9Qk81EaY2gYhCBxurV0PfmmESO6p27QPrUK1J3zdns+5QPqvUYK2q657nSj0guoIil9+7eFg== + dependencies: + debug "~4.1.0" + engine.io "~3.4.0" + has-binary2 "~1.0.2" + socket.io-adapter "~1.1.0" + socket.io-client "2.3.0" + socket.io-parser "~3.4.0" + +sockjs-client@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.4.tgz#5babe386b775e4cf14e7520911452654016c8b12" + integrity sha1-W6vjhrd15M8U51IJEUUmVAFsixI= + dependencies: + debug "^2.6.6" + eventsource "0.1.6" + faye-websocket "~0.11.0" + inherits "^2.0.1" + json3 "^3.3.2" + url-parse "^1.1.8" + +sockjs-client@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5" + integrity sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g== + dependencies: + debug "^3.2.5" + eventsource "^1.0.7" + faye-websocket "~0.11.1" + inherits "^2.0.3" + json3 "^3.3.2" + url-parse "^1.4.3" + +sockjs@0.3.20: + version "0.3.20" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.20.tgz#b26a283ec562ef8b2687b44033a4eeceac75d855" + integrity sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA== + dependencies: + faye-websocket "^0.10.0" + uuid "^3.4.0" + websocket-driver "0.6.5" + +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= + dependencies: + is-plain-obj "^1.0.0" + +sort-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" + integrity sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg= + dependencies: + is-plain-obj "^1.0.0" + +source-list-map@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@~0.5.12: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + +source-map@0.7.3, source-map@^0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + +source-map@^0.5.0, source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +space-separated-tokens@^1.0.0: + version "1.1.5" + resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899" + integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA== + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.6" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz#c80757383c28abf7296744998cbc106ae8b854ce" + integrity sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw== + +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== + dependencies: + debug "^4.1.0" + detect-node "^2.0.4" + hpack.js "^2.1.6" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" + +spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== + dependencies: + debug "^4.1.0" + handle-thing "^2.0.0" + http-deceiver "^1.2.7" + select-hose "^2.0.0" + spdy-transport "^3.0.0" + +split-on-first@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" + integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +sprintf-js@^1.0.3: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" + integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +ssri@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" + integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== + dependencies: + figgy-pudding "^3.5.1" + +ssri@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-7.1.0.tgz#92c241bf6de82365b5c7fb4bd76e975522e1294d" + integrity sha512-77/WrDZUWocK0mvA5NTRQyveUf+wsrIc6vyrxpS8tVvYBcX215QbafrJR3KtkpskIzoFLqqNuuYQvxaMjXJ/0g== + dependencies: + figgy-pudding "^3.5.1" + minipass "^3.1.1" + +st@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/st/-/st-2.0.0.tgz#eabd11e7722863b8ee8cfbdd027cb25e76ff35e9" + integrity sha512-drN+aGYnrZPNYIymmNwIY7LXYJ8MqsqXj4fMRue3FOgGMdGjSX10fhJ3qx0sVQPhcWxhEaN4U/eWM4O4dbYNAw== + dependencies: + async-cache "^1.1.0" + bl "^4.0.0" + fd "~0.0.2" + mime "^2.4.4" + negotiator "~0.6.2" + optionalDependencies: + graceful-fs "^4.2.3" + +stable@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + +stack-trace@^0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" + integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA= + +stackframe@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.0.tgz#52429492d63c62eb989804c11552e3d22e779303" + integrity sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA== + +state-toggle@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.3.tgz#e123b16a88e143139b09c6852221bc9815917dfe" + integrity sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ== + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +stream-browserify@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-each@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= + +strict-uri-encode@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" + integrity sha1-ucczDHBChi9rFC3CdLvMWGbONUY= + +string-env-interpolation@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/string-env-interpolation/-/string-env-interpolation-1.0.1.tgz#ad4397ae4ac53fe6c91d1402ad6f6a52862c7152" + integrity sha512-78lwMoCcn0nNu8LszbP1UA7g55OeE4v7rCeWnM5B453rnNr4aq+5it3FEYtZrSEiMvHZOZ9Jlqb0OD0M2VInqg== + +string-similarity@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/string-similarity/-/string-similarity-1.2.2.tgz#99b2c20a3c9bbb3903964eae1d89856db3d8db9b" + integrity sha512-IoHUjcw3Srl8nsPlW04U3qwWPk3oG2ffLM0tN853d/E/JlIvcmZmDY2Kz5HzKp4lEi2T7QD7Zuvjq/1rDw+XcQ== + dependencies: + lodash.every "^4.6.0" + lodash.flattendeep "^4.4.0" + lodash.foreach "^4.5.0" + lodash.map "^4.6.0" + lodash.maxby "^4.6.0" + +string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + +string.prototype.matchall@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz#48bb510326fb9fdeb6a33ceaa81a6ea04ef7648e" + integrity sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0" + has-symbols "^1.0.1" + internal-slot "^1.0.2" + regexp.prototype.flags "^1.3.0" + side-channel "^1.0.2" + +string.prototype.trimend@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.2.tgz#6ddd9a8796bc714b489a3ae22246a208f37bfa46" + integrity sha512-8oAG/hi14Z4nOVP0z6mdiVZ/wqjDtWSLygMigTzAb+7aPEDTleeFf+WrF+alzecxIRkckkJVn+dTlwzJXORATw== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + +string.prototype.trimstart@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.2.tgz#22d45da81015309cd0cdd79787e8919fc5c613e7" + integrity sha512-7F6CdBTl5zyu30BJFdzSTlSlLPwODC23Od+iLoVH8X6+3fvDPPuBVVj9iaB1GOsSTSIgVfsfm27R2FGrAPznWg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + +string_decoder@^1.0.0, string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +stringify-entities@^1.0.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-1.3.2.tgz#a98417e5471fd227b3e45d3db1861c11caf668f7" + integrity sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A== + dependencies: + character-entities-html4 "^1.0.0" + character-entities-legacy "^1.0.0" + is-alphanumerical "^1.0.0" + is-hexadecimal "^1.0.0" + +stringify-entities@^3.0.0, stringify-entities@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-3.1.0.tgz#b8d3feac256d9ffcc9fa1fefdcf3ca70576ee903" + integrity sha512-3FP+jGMmMV/ffZs86MoghGqAoqXAdxLrJP4GUdrDN1aIScYih5tuIO3eF4To5AJZ79KDZ8Fpdy7QJnK8SsL1Vg== + dependencies: + character-entities-html4 "^1.0.0" + character-entities-legacy "^1.0.0" + xtend "^4.0.0" + +strip-ansi@3.0.1, strip-ansi@^3, strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + +strip-bom-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" + integrity sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI= + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + +strip-json-comments@^3.0.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + +style-loader@^0.23.1: + version "0.23.1" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.23.1.tgz#cb9154606f3e771ab6c4ab637026a1049174d925" + integrity sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg== + dependencies: + loader-utils "^1.1.0" + schema-utils "^1.0.0" + +style-to-object@^0.2.1: + version "0.2.3" + resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.2.3.tgz#afcf42bc03846b1e311880c55632a26ad2780bcb" + integrity sha512-1d/k4EY2N7jVLOqf2j04dTc37TPOv/hHxZmvpg8Pdh8UYydxeu/C1W1U4vD8alzf5V2Gt7rLsmkr4dxAlDm9ng== + dependencies: + inline-style-parser "0.1.1" + +style-to-object@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.3.0.tgz#b1b790d205991cc783801967214979ee19a76e46" + integrity sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA== + dependencies: + inline-style-parser "0.1.1" + +stylehacks@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" + integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + +subscriptions-transport-ws@0.9.18: + version "0.9.18" + resolved "https://registry.yarnpkg.com/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.18.tgz#bcf02320c911fbadb054f7f928e51c6041a37b97" + integrity sha512-tztzcBTNoEbuErsVQpTN2xUNN/efAZXyCyL5m3x4t6SKrEiTL2N8SaKWBFWM4u56pL79ULif3zjyeq+oV+nOaA== + dependencies: + backo2 "^1.0.2" + eventemitter3 "^3.1.0" + iterall "^1.2.1" + symbol-observable "^1.0.4" + ws "^5.2.0" + +sudo-prompt@^8.2.0: + version "8.2.5" + resolved "https://registry.yarnpkg.com/sudo-prompt/-/sudo-prompt-8.2.5.tgz#cc5ef3769a134bb94b24a631cc09628d4d53603e" + integrity sha512-rlBo3HU/1zAJUrkY6jNxDOC9eVYliG6nS4JA8u8KAshITd07tafMc/Br7xQwCSseXwJ2iCcHCE8SNWX3q8Z+kw== + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^5.3.0, supports-color@^5.4.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.0.0, supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +svgo@^1.0.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" + integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== + dependencies: + chalk "^2.4.1" + coa "^2.0.2" + css-select "^2.0.0" + css-select-base-adapter "^0.1.1" + css-tree "1.0.0-alpha.37" + csso "^4.0.2" + js-yaml "^3.13.1" + mkdirp "~0.5.1" + object.values "^1.1.0" + sax "~1.2.4" + stable "^0.1.8" + unquote "~1.1.1" + util.promisify "~1.0.0" + +symbol-observable@^1.0.4, symbol-observable@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" + integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== + +table@^5.2.3: + version "5.4.6" + resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" + integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== + dependencies: + ajv "^6.10.2" + lodash "^4.17.14" + slice-ansi "^2.1.0" + string-width "^3.0.0" + +tapable@^1.0.0, tapable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + +term-size@^2.1.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" + integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== + +terser-webpack-plugin@^1.4.3: + version "1.4.5" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b" + integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw== + dependencies: + cacache "^12.0.2" + find-cache-dir "^2.1.0" + is-wsl "^1.1.0" + schema-utils "^1.0.0" + serialize-javascript "^4.0.0" + source-map "^0.6.1" + terser "^4.1.2" + webpack-sources "^1.4.0" + worker-farm "^1.7.0" + +terser-webpack-plugin@^2.3.8: + version "2.3.8" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-2.3.8.tgz#894764a19b0743f2f704e7c2a848c5283a696724" + integrity sha512-/fKw3R+hWyHfYx7Bv6oPqmk4HGQcrWLtV3X6ggvPuwPNHSnzvVV51z6OaaCOus4YLjutYGOz3pEpbhe6Up2s1w== + dependencies: + cacache "^13.0.1" + find-cache-dir "^3.3.1" + jest-worker "^25.4.0" + p-limit "^2.3.0" + schema-utils "^2.6.6" + serialize-javascript "^4.0.0" + source-map "^0.6.1" + terser "^4.6.12" + webpack-sources "^1.4.3" + +terser@^4.1.2, terser@^4.6.12: + version "4.8.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" + integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + +text-table@0.2.0, text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +through2@^2.0.0, through2@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== + +timeago.js@4.0.2: + version "4.0.2" + resolved "https://registry.nlark.com/timeago.js/download/timeago.js-4.0.2.tgz#724e8c8833e3490676c7bb0a75f5daf20e558028" + integrity sha1-ck6MiDPjSQZ2x7sKdfXa8g5VgCg= + +timed-out@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= + +timers-browserify@^2.0.4: + version "2.0.12" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" + integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== + dependencies: + setimmediate "^1.0.4" + +timsort@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" + integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= + +tiny-emitter@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423" + integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q== + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +tmp@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== + dependencies: + rimraf "^3.0.0" + +to-array@0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" + integrity sha1-F+bBH3PdTz10zaek/zI46a2b+JA= + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-readable-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" + integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.npmmirror.com/tr46/download/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= + +trim-leading-lines@^0.1.1: + version "0.1.1" + resolved "https://registry.nlark.com/trim-leading-lines/download/trim-leading-lines-0.1.1.tgz#0e7cac3e83042dcf95a74ed36966f17744d5c169" + integrity sha1-DnysPoMELc+Vp07TaWbxd0TVwWk= + dependencies: + is-whitespace "^0.3.0" + +trim-lines@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-1.1.3.tgz#839514be82428fd9e7ec89e35081afe8f6f93115" + integrity sha512-E0ZosSWYK2mkSu+KEtQ9/KqarVjA9HztOSX+9FDdNacRAq29RRV6ZQNgob3iuW8Htar9vAfEa6yyt5qBAHZDBA== + +trim-trailing-lines@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz#bd4abbec7cc880462f10b2c8b5ce1d8d1ec7c2c0" + integrity sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ== + +trim@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" + integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0= + +trough@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" + integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== + +"true-case-path@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-2.2.1.tgz#c5bf04a5bbec3fd118be4084461b3a27c4d796bf" + integrity sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q== + +ts-pnp@^1.1.6: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" + 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.10.0, tslib@^1.8.1, tslib@^1.9.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.0.0, tslib@~2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.3.tgz#8e0741ac45fc0c226e58a17bfc3e64b9bc6ca61c" + integrity sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ== + +tsutils@^3.17.1: + version "3.17.1" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" + integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g== + dependencies: + tslib "^1.8.1" + +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +type-fest@0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.15.1.tgz#d2c4e73d3e4a53cf1a906396dd460a1c5178ca00" + integrity sha512-n+UXrN8i5ioo7kqT/nF8xsEzLaqFra7k32SEsSPwvXVGyAcRgV/FUQN/sgfptJTR1oRmmq7z4IXMFSM7im7C9A== + +type-fest@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" + integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== + +type-fest@^0.8.0, type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +type-is@~1.6.17, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +type-of@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/type-of/-/type-of-2.0.1.tgz#e72a1741896568e9f628378d816d6912f7f23972" + integrity sha1-5yoXQYllaOn2KDeNgW1pEvfyOXI= + +type@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" + integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== + +type@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/type/-/type-2.1.0.tgz#9bdc22c648cf8cf86dd23d32336a41cfb6475e3f" + integrity sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA== + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +typescript@^3.9.5: + version "3.9.7" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa" + integrity sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw== + +unc-path-regex@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" + integrity sha1-5z3T17DXxe2G+6xrCufYxqadUPo= + +underscore.string@^3.3.5: + version "3.3.5" + resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-3.3.5.tgz#fc2ad255b8bd309e239cbc5816fd23a9b7ea4023" + integrity sha512-g+dpmgn+XBneLmXXo+sGlW5xQEt4ErkS3mgeN2GFbremYeMBSJKr9Wf2KJplQVaiPY/f7FN6atosWYNm9ovrYg== + dependencies: + sprintf-js "^1.0.3" + util-deprecate "^1.0.2" + +unherit@^1.0.4: + version "1.1.3" + resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.3.tgz#6c9b503f2b41b262330c80e91c8614abdaa69c22" + integrity sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ== + dependencies: + inherits "^2.0.0" + xtend "^4.0.0" + +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== + +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" + +unicode-match-property-value-ecmascript@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" + integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== + +unicode-property-aliases-ecmascript@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" + integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== + +unified@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/unified/-/unified-6.2.0.tgz#7fbd630f719126d67d40c644b7e3f617035f6dba" + integrity sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA== + dependencies: + bail "^1.0.0" + extend "^3.0.0" + is-plain-obj "^1.1.0" + trough "^1.0.0" + vfile "^2.0.0" + x-is-string "^0.1.0" + +unified@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/unified/-/unified-7.1.0.tgz#5032f1c1ee3364bd09da12e27fdd4a7553c7be13" + integrity sha512-lbk82UOIGuCEsZhPj8rNAkXSDXd6p0QLzIuSsCdxrqnqU56St4eyOB+AlXsVgVeRmetPTYydIuvFfpDIed8mqw== + dependencies: + "@types/unist" "^2.0.0" + "@types/vfile" "^3.0.0" + bail "^1.0.0" + extend "^3.0.0" + is-plain-obj "^1.1.0" + trough "^1.0.0" + vfile "^3.0.0" + x-is-string "^0.1.0" + +unified@^8.4.2: + version "8.4.2" + resolved "https://registry.yarnpkg.com/unified/-/unified-8.4.2.tgz#13ad58b4a437faa2751a4a4c6a16f680c500fff1" + integrity sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA== + dependencies: + bail "^1.0.0" + extend "^3.0.0" + is-plain-obj "^2.0.0" + trough "^1.0.0" + vfile "^4.0.0" + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= + +uniqs@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" + integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +unique-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== + dependencies: + crypto-random-string "^2.0.0" + +unist-builder@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-1.0.4.tgz#e1808aed30bd72adc3607f25afecebef4dd59e17" + integrity sha512-v6xbUPP7ILrT15fHGrNyHc1Xda8H3xVhP7/HAIotHOhVPjH5dCXA097C3Rry1Q2O+HbOLCao4hfPB+EYEjHgVg== + dependencies: + object-assign "^4.1.0" + +unist-util-generated@^1.1.0: + version "1.1.5" + resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-1.1.5.tgz#1e903e68467931ebfaea386dae9ea253628acd42" + integrity sha512-1TC+NxQa4N9pNdayCYA1EGUOCAO0Le3fVp7Jzns6lnua/mYgwHo0tz5WUAfrdpNch1RZLHc61VZ1SDgrtNXLSw== + +unist-util-is@^2.0.0: + version "2.1.3" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-2.1.3.tgz#459182db31f4742fceaea88d429693cbf0043d20" + integrity sha512-4WbQX2iwfr/+PfM4U3zd2VNXY+dWtZsN1fLnWEi2QQXA4qyDYAZcDMfXUX0Cu6XZUHHAO9q4nyxxLT4Awk1qUA== + +unist-util-is@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-3.0.0.tgz#d9e84381c2468e82629e4a5be9d7d05a2dd324cd" + integrity sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A== + +unist-util-is@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.0.3.tgz#e8b44db55fc20c43752b3346c116344d45d7c91d" + integrity sha512-bTofCFVx0iQM8Jqb1TBDVRIQW03YkD3p66JOd/aCWuqzlLyUtx1ZAGw/u+Zw+SttKvSVcvTiKYbfrtLoLefykw== + +unist-util-modify-children@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unist-util-modify-children/-/unist-util-modify-children-2.0.0.tgz#9c9c30d4e32502aabb3fde10d7872a17c86801e2" + integrity sha512-HGrj7JQo9DwZt8XFsX8UD4gGqOsIlCih9opG6Y+N11XqkBGKzHo8cvDi+MfQQgiZ7zXRUiQREYHhjOBHERTMdg== + dependencies: + array-iterate "^1.0.0" + +unist-util-position@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-3.1.0.tgz#1c42ee6301f8d52f47d14f62bbdb796571fa2d47" + integrity sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA== + +unist-util-remove-position@^1.0.0, unist-util-remove-position@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz#ec037348b6102c897703eee6d0294ca4755a2020" + integrity sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A== + dependencies: + unist-util-visit "^1.1.0" + +unist-util-remove@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unist-util-remove/-/unist-util-remove-2.0.1.tgz#fa13c424ff8e964f3aa20d1098b9a690c6bfaa39" + integrity sha512-YtuetK6o16CMfG+0u4nndsWpujgsHDHHLyE0yGpJLLn5xSjKeyGyzEBOI2XbmoUHCYabmNgX52uxlWoQhcvR7Q== + dependencies: + unist-util-is "^4.0.0" + +unist-util-select@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/unist-util-select/-/unist-util-select-1.5.0.tgz#a93c2be8c0f653827803b81331adec2aa24cd933" + integrity sha1-qTwr6MD2U4J4A7gTMa3sKqJM2TM= + dependencies: + css-selector-parser "^1.1.0" + debug "^2.2.0" + nth-check "^1.0.1" + +unist-util-stringify-position@^1.0.0, unist-util-stringify-position@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz#3f37fcf351279dcbca7480ab5889bb8a832ee1c6" + integrity sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ== + +unist-util-stringify-position@^2.0.0, unist-util-stringify-position@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da" + integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g== + dependencies: + "@types/unist" "^2.0.2" + +unist-util-visit-children@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/unist-util-visit-children/-/unist-util-visit-children-1.1.4.tgz#e8a087e58a33a2815f76ea1901c15dec2cb4b432" + integrity sha512-sA/nXwYRCQVRwZU2/tQWUqJ9JSFM1X3x7JIOsIgSzrFHcfVt6NkzDtKzyxg2cZWkCwGF9CO8x4QNZRJRMK8FeQ== + +unist-util-visit-parents@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz#25e43e55312166f3348cae6743588781d112c1e9" + integrity sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g== + dependencies: + unist-util-is "^3.0.0" + +unist-util-visit-parents@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz#65a6ce698f78a6b0f56aa0e88f13801886cdaef6" + integrity sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^4.0.0" + +unist-util-visit@^1.0.0, unist-util-visit@^1.1.0, unist-util-visit@^1.1.3, unist-util-visit@^1.4.1: + version "1.4.1" + resolved "https://registry.npmmirror.com/unist-util-visit/download/unist-util-visit-1.4.1.tgz?cache=0&sync_timestamp=1632406737779&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Funist-util-visit%2Fdownload%2Funist-util-visit-1.4.1.tgz#4724aaa8486e6ee6e26d7ff3c8685960d560b1e3" + integrity sha1-RySqqEhububibX/zyGhZYNVgseM= + dependencies: + unist-util-visit-parents "^2.0.0" + +unist-util-visit@^2.0.0, unist-util-visit@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.3.tgz#c3703893146df47203bb8a9795af47d7b971208c" + integrity sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^4.0.0" + unist-util-visit-parents "^3.0.0" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +universalify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" + integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +unixify@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unixify/-/unixify-1.0.0.tgz#3a641c8c2ffbce4da683a5c70f03a462940c2090" + integrity sha1-OmQcjC/7zk2mg6XHDwOkYpQMIJA= + dependencies: + normalize-path "^2.1.1" + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +unquote@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" + integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +untildify@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" + integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== + +upath@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +update-notifier@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.3.tgz#be86ee13e8ce48fb50043ff72057b5bd598e1ea3" + integrity sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A== + dependencies: + boxen "^4.2.0" + chalk "^3.0.0" + configstore "^5.0.1" + has-yarn "^2.1.0" + import-lazy "^2.1.0" + is-ci "^2.0.0" + is-installed-globally "^0.3.1" + is-npm "^4.0.0" + is-yarn-global "^0.3.0" + latest-version "^5.0.0" + pupa "^2.0.1" + semver-diff "^3.1.1" + xdg-basedir "^4.0.0" + +uri-js@^4.2.2: + version "4.4.0" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" + integrity sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +url-loader@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-1.1.2.tgz#b971d191b83af693c5e3fea4064be9e1f2d7f8d8" + integrity sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg== + dependencies: + loader-utils "^1.1.0" + mime "^2.0.3" + schema-utils "^1.0.0" + +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= + dependencies: + prepend-http "^2.0.0" + +url-parse@^1.1.8, url-parse@^1.4.3: + version "1.4.7" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" + integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +url-to-options@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" + integrity sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k= + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +utf-8-validate@^5.0.2: + version "5.0.3" + resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.3.tgz#3b64e418ad2ff829809025fdfef595eab2f03a27" + integrity sha512-jtJM6fpGv8C1SoH4PtG22pGto6x+Y8uPprW0tw3//gGFhDDTiuksgradgFN6yRayDP4SyZZa6ZMGHLIa17+M8A== + dependencies: + node-gyp-build "^4.2.0" + +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util.promisify@^1.0.1, util.promisify@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" + integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.2" + has-symbols "^1.0.1" + object.getownpropertydescriptors "^2.1.0" + +util@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + dependencies: + inherits "2.0.1" + +util@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + dependencies: + inherits "2.0.3" + +utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +uuid@3.4.0, uuid@^3.0.0, uuid@^3.3.2, uuid@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +v8-compile-cache@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-1.1.2.tgz#8d32e4f16974654657e676e0e467a348e89b0dc4" + integrity sha512-ejdrifsIydN1XDH7EuR2hn8ZrkRKUYF7tUcBjBy/lhrCvs2K+zRlbW9UHc0IQ9RsYFZJFqJrieoIHfkCa0DBRA== + +v8-compile-cache@^2.0.3: + version "2.2.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132" + integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== + +valid-url@1.0.9, valid-url@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/valid-url/-/valid-url-1.0.9.tgz#1c14479b40f1397a75782f115e4086447433a200" + integrity sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA= + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +vary@^1, vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + +vendors@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" + integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== + +vfile-location@^2.0.0: + version "2.0.6" + resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.6.tgz#8a274f39411b8719ea5728802e10d9e0dff1519e" + integrity sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA== + +vfile-message@*, vfile-message@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a" + integrity sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ== + dependencies: + "@types/unist" "^2.0.0" + unist-util-stringify-position "^2.0.0" + +vfile-message@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-1.1.1.tgz#5833ae078a1dfa2d96e9647886cd32993ab313e1" + integrity sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA== + dependencies: + unist-util-stringify-position "^1.1.1" + +vfile@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-2.3.0.tgz#e62d8e72b20e83c324bc6c67278ee272488bf84a" + integrity sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w== + dependencies: + is-buffer "^1.1.4" + replace-ext "1.0.0" + unist-util-stringify-position "^1.0.0" + vfile-message "^1.0.0" + +vfile@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-3.0.1.tgz#47331d2abe3282424f4a4bb6acd20a44c4121803" + integrity sha512-y7Y3gH9BsUSdD4KzHsuMaCzRjglXN0W2EcMf0gpvu6+SbsGhMje7xDc8AEoeXy6mIwCKMI6BkjMsRjzQbhMEjQ== + dependencies: + is-buffer "^2.0.0" + replace-ext "1.0.0" + unist-util-stringify-position "^1.0.0" + vfile-message "^1.0.0" + +vfile@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.2.0.tgz#26c78ac92eb70816b01d4565e003b7e65a2a0e01" + integrity sha512-a/alcwCvtuc8OX92rqqo7PflxiCgXRFjdyoGVuYV+qbgCb0GgZJRvIgCD4+U/Kl1yhaRsaTwksF88xbPyGsgpw== + dependencies: + "@types/unist" "^2.0.0" + is-buffer "^2.0.0" + replace-ext "1.0.0" + unist-util-stringify-position "^2.0.0" + vfile-message "^2.0.0" + +vm-browserify@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== + +vscode-languageserver-types@^3.15.1: + version "3.15.1" + resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.15.1.tgz#17be71d78d2f6236d414f0001ce1ef4d23e6b6de" + integrity sha512-+a9MPUQrNGRrGU630OGbYVQ+11iOIovjCkqxajPa9w57Sd5ruK8WQNsslzpa0x/QJqC8kRc2DUxWjIFwoNm4ZQ== + +warning@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" + integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== + dependencies: + loose-envify "^1.0.0" + +watchpack-chokidar2@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz#9948a1866cbbd6cb824dea13a7ed691f6c8ddff0" + integrity sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA== + dependencies: + chokidar "^2.1.8" + +watchpack@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.4.tgz#6e9da53b3c80bb2d6508188f5b200410866cd30b" + integrity sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg== + dependencies: + graceful-fs "^4.1.2" + neo-async "^2.5.0" + optionalDependencies: + chokidar "^3.4.1" + watchpack-chokidar2 "^2.0.0" + +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + dependencies: + minimalistic-assert "^1.0.0" + +web-namespaces@^1.0.0, web-namespaces@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.4.tgz#bc98a3de60dadd7faefc403d1076d529f5e030ec" + integrity sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw== + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.nlark.com/webidl-conversions/download/webidl-conversions-3.0.1.tgz?cache=0&sync_timestamp=1631408600646&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fwebidl-conversions%2Fdownload%2Fwebidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= + +webpack-dev-middleware@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3" + integrity sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw== + dependencies: + memory-fs "^0.4.1" + mime "^2.4.4" + mkdirp "^0.5.1" + range-parser "^1.2.1" + webpack-log "^2.0.0" + +webpack-dev-server@^3.11.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz#8f154a3bce1bcfd1cc618ef4e703278855e7ff8c" + integrity sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg== + dependencies: + ansi-html "0.0.7" + bonjour "^3.5.0" + chokidar "^2.1.8" + compression "^1.7.4" + connect-history-api-fallback "^1.6.0" + debug "^4.1.1" + del "^4.1.1" + express "^4.17.1" + html-entities "^1.3.1" + http-proxy-middleware "0.19.1" + import-local "^2.0.0" + internal-ip "^4.3.0" + ip "^1.1.5" + is-absolute-url "^3.0.3" + killable "^1.0.1" + loglevel "^1.6.8" + opn "^5.5.0" + p-retry "^3.0.1" + portfinder "^1.0.26" + schema-utils "^1.0.0" + selfsigned "^1.10.7" + semver "^6.3.0" + serve-index "^1.9.1" + sockjs "0.3.20" + sockjs-client "1.4.0" + spdy "^4.0.2" + strip-ansi "^3.0.1" + supports-color "^6.1.0" + url "^0.11.0" + webpack-dev-middleware "^3.7.2" + webpack-log "^2.0.0" + ws "^6.2.1" + yargs "^13.3.2" + +webpack-hot-middleware@^2.25.0: + version "2.25.0" + resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.25.0.tgz#4528a0a63ec37f8f8ef565cf9e534d57d09fe706" + integrity sha512-xs5dPOrGPCzuRXNi8F6rwhawWvQQkeli5Ro48PRuQh8pYPCPmNnltP9itiUPT4xI8oW+y0m59lyyeQk54s5VgA== + dependencies: + ansi-html "0.0.7" + html-entities "^1.2.0" + querystring "^0.2.0" + strip-ansi "^3.0.0" + +webpack-log@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" + integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== + dependencies: + ansi-colors "^3.0.0" + uuid "^3.3.2" + +webpack-merge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.2.tgz#a27c52ea783d1398afd2087f547d7b9d2f43634d" + integrity sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g== + dependencies: + lodash "^4.17.15" + +webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack-stats-plugin@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/webpack-stats-plugin/-/webpack-stats-plugin-0.3.2.tgz#c06b185aa5dcc93b3f0c3a7891d24a111f849740" + integrity sha512-kxEtPQ6lBBik2qtJlsZkiaDMI6rGXe9w1kLH9ZCdt0wgCGVnbwwPlP60cMqG6tILNFYqXDxNt4+c4OIIuE+Fnw== + +webpack-virtual-modules@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.2.2.tgz#20863dc3cb6bb2104729fff951fbe14b18bd0299" + integrity sha512-kDUmfm3BZrei0y+1NTHJInejzxfhtU8eDj2M7OKb2IWrPFAeO1SOH2KuQ68MSZu9IGEHcxbkKKR1v18FrUSOmA== + dependencies: + debug "^3.0.0" + +webpack@^4.44.1: + version "4.44.2" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.44.2.tgz#6bfe2b0af055c8b2d1e90ed2cd9363f841266b72" + integrity sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/wasm-edit" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + acorn "^6.4.1" + ajv "^6.10.2" + ajv-keywords "^3.4.1" + chrome-trace-event "^1.0.2" + enhanced-resolve "^4.3.0" + eslint-scope "^4.0.3" + json-parse-better-errors "^1.0.2" + loader-runner "^2.4.0" + loader-utils "^1.2.3" + memory-fs "^0.4.1" + micromatch "^3.1.10" + mkdirp "^0.5.3" + neo-async "^2.6.1" + node-libs-browser "^2.2.1" + schema-utils "^1.0.0" + tapable "^1.1.3" + terser-webpack-plugin "^1.4.3" + watchpack "^1.7.4" + webpack-sources "^1.4.1" + +websocket-driver@0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36" + integrity sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY= + dependencies: + websocket-extensions ">=0.1.1" + +websocket-driver@>=0.5.1: + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + +websocket@1.0.32: + version "1.0.32" + resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.32.tgz#1f16ddab3a21a2d929dec1687ab21cfdc6d3dbb1" + integrity sha512-i4yhcllSP4wrpoPMU2N0TQ/q0O94LRG/eUQjEAamRltjQ1oT1PFFKOG4i877OlJgCG8rw6LrrowJp+TYCEWF7Q== + dependencies: + bufferutil "^4.0.1" + debug "^2.2.0" + es5-ext "^0.10.50" + typedarray-to-buffer "^3.1.5" + utf-8-validate "^5.0.2" + yaeti "^0.0.6" + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.npmmirror.com/whatwg-url/download/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@^1.2.14, which@^1.2.9: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== + dependencies: + string-width "^4.0.0" + +with-open-file@^0.1.6: + version "0.1.7" + resolved "https://registry.yarnpkg.com/with-open-file/-/with-open-file-0.1.7.tgz#e2de8d974e8a8ae6e58886be4fe8e7465b58a729" + integrity sha512-ecJS2/oHtESJ1t3ZfMI3B7KIDKyfN0O16miWxdn30zdh66Yd3LsRFebXZXq6GU4xfxLf6nVxp9kIqElb5fqczA== + dependencies: + p-finally "^1.0.0" + p-try "^2.1.0" + pify "^4.0.1" + +word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +worker-farm@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" + integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== + dependencies: + errno "~0.1.7" + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +write@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" + integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== + dependencies: + mkdirp "^0.5.1" + +ws@^5.2.0: + version "5.2.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" + integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA== + dependencies: + async-limiter "~1.0.0" + +ws@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" + integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== + dependencies: + async-limiter "~1.0.0" + +ws@^7.1.2, ws@^7.3.0: + version "7.3.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.1.tgz#d0547bf67f7ce4f12a72dfe31262c68d7dc551c8" + integrity sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA== + +ws@~6.1.0: + version "6.1.4" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.1.4.tgz#5b5c8800afab925e94ccb29d153c8d02c1776ef9" + integrity sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA== + dependencies: + async-limiter "~1.0.0" + +x-is-string@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/x-is-string/-/x-is-string-0.1.0.tgz#474b50865af3a49a9c4657f05acd145458f77d82" + integrity sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI= + +xdg-basedir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" + integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== + +xml@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/xml/-/xml-1.0.1.tgz#78ba72020029c5bc87b8a81a3cfcd74b4a2fc1e5" + integrity sha1-eLpyAgApxbyHuKgaPPzXS0ovweU= + +xmlhttprequest-ssl@~1.5.4: + version "1.5.5" + resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" + integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4= + +xss@^1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/xss/-/xss-1.0.8.tgz#32feb87feb74b3dcd3d404b7a68ababf10700535" + integrity sha512-3MgPdaXV8rfQ/pNn16Eio6VXYPTkqwa0vc7GkiymmY/DqR1SE/7VPAAVZz1GJsJFrllMYO3RHfEaiUGjab6TNw== + dependencies: + commander "^2.20.3" + cssfilter "0.0.10" + +xstate@^4.11.0, xstate@^4.13.0, xstate@^4.9.1: + version "4.13.0" + resolved "https://registry.yarnpkg.com/xstate/-/xstate-4.13.0.tgz#0be22ceb8bae2bc6a025fab330fe44204d76771c" + integrity sha512-UnUJJzP2KTPqnmxIoD/ymXtpy/hehZnUlO6EXqWC/72XkPb15p9Oz/X4WhS3QE+by7NP+6b5bCi/GTGFzm5D+A== + +xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + +yaeti@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" + integrity sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc= + +yallist@^2.0.0, yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml-loader@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/yaml-loader/-/yaml-loader-0.6.0.tgz#fe1c48b9f4803dace55a59a1474e790ba6ab1b48" + integrity sha512-1bNiLelumURyj+zvVHOv8Y3dpCri0F2S+DCcmps0pA1zWRLjS+FhZQg4o3aUUDYESh73+pKZNI18bj7stpReow== + dependencies: + loader-utils "^1.4.0" + yaml "^1.8.3" + +yaml@^1.7.2, yaml@^1.8.3: + version "1.10.0" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" + integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== + +yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@^13.3.2: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" + +yargs@^15.3.1, yargs@^15.4.1: + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" + +yeast@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" + integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk= + +yoga-layout-prebuilt@^1.9.6: + version "1.10.0" + resolved "https://registry.yarnpkg.com/yoga-layout-prebuilt/-/yoga-layout-prebuilt-1.10.0.tgz#2936fbaf4b3628ee0b3e3b1df44936d6c146faa6" + integrity sha512-YnOmtSbv4MTf7RGJMK0FvZ+KD8OEe/J5BNnR0GHhD8J/XcG/Qvxgszm0Un6FTHWW4uHlTgP0IztiXQnGyIR45g== + dependencies: + "@types/yoga-layout" "1.9.2" + +yurnalist@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/yurnalist/-/yurnalist-1.1.2.tgz#0fce283f1c53ea25ec278e2d1ab58537323b63e0" + integrity sha512-y7bsTXqL+YMJQ2De2CBtSftJNLQnB7gWIzzKm10GDyC8Fg4Dsmd2LG5YhT8pudvUiuotic80WVXt/g1femRVQg== + dependencies: + babel-runtime "^6.26.0" + chalk "^2.4.2" + cli-table3 "^0.5.1" + debug "^4.1.1" + deep-equal "^1.1.0" + detect-indent "^6.0.0" + inquirer "^7.0.0" + invariant "^2.2.0" + is-builtin-module "^3.0.0" + is-ci "^2.0.0" + leven "^3.1.0" + loud-rejection "^2.2.0" + node-emoji "^1.10.0" + object-path "^0.11.2" + read "^1.0.7" + rimraf "^3.0.0" + semver "^6.3.0" + strip-ansi "^5.2.0" + strip-bom "^4.0.0" + +zwitch@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-1.0.5.tgz#d11d7381ffed16b742f6af7b3f223d5cd9fe9920" + integrity sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==