diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md index 90cff75711..13ade362dc 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.md +++ b/.github/ISSUE_TEMPLATE/bug-report.md @@ -14,19 +14,19 @@ labels: bug -### Expected Result +### Expected Result -### Actual 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 index ad751612cd..a8e5849bd3 100644 --- a/.github/ISSUE_TEMPLATE/code-changes.md +++ b/.github/ISSUE_TEMPLATE/code-changes.md @@ -20,4 +20,4 @@ labels: enhancement ### Additional Context - \ No newline at end of file + diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 9b9f5e0d5f..8c623d5fb9 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,10 +1,10 @@ @@ -12,4 +12,4 @@ Closes # ## Description - \ No newline at end of file + diff --git a/.github/workflows/prettier.yml b/.github/workflows/prettier.yml new file mode 100644 index 0000000000..0e1d034712 --- /dev/null +++ b/.github/workflows/prettier.yml @@ -0,0 +1,13 @@ +name: Prettier Check + +on: pull_request + +jobs: + prettier-check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Install Dependencies + run: yarn + - name: Run Prettier Check + run: yarn format:check diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c3afcd0cb8..28da1c5161 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,25 +2,25 @@ > 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 🎉 +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) + - [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) + - [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) + - [Browser support](#browser-support) - [Contributing something else](#contributing-something-else) - [Asking questions](#asking-questions) @@ -28,7 +28,7 @@ There are many ways to get involved. Follow this guide and feel free to [reach o ### Running the site locally -First, clone this repository and move into the directory: +First, clone this repository and move into the directory: ```bash git clone https://github.com/graphql/graphql.github.io.git @@ -38,7 +38,7 @@ cd graphql.github.io Then, use [Yarn](https://yarnpkg.com/getting-started/install) to install and load all the necessary dependencies: ```bash -yarn +yarn ``` > Note: [Yarn is currently the only way to run the site locally](https://github.com/graphql/graphql.github.io/issues/946). @@ -51,22 +51,22 @@ 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. +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`. +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`. +- `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. + - `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 @@ -76,7 +76,7 @@ Your changes will be merged into the `source` branch. Then, the CI will automati ### 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. +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/). @@ -87,23 +87,25 @@ The [Code page](https://graphql.org/code/) is a collection of libraries, tools, #### 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 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. +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). +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/). @@ -111,7 +113,7 @@ The content for this page is located in [various directories under `src/content/ 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). +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/). @@ -129,7 +131,7 @@ When your answer is ready, [open a pull request](https://github.com/graphql/grap 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/). +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/). @@ -141,7 +143,7 @@ If you're working off an [existing issue](https://github.com/graphql/graphql.git ### Browser support -We aim to support the latest stable versions of Chrome, Edge, Firefox, Safari, and Safari on mobile. +We aim to support the latest stable versions of Chrome, Edge, Firefox, Safari, and Safari on mobile. ## Contributing something else @@ -149,7 +151,7 @@ Interested in adding something not covered in this guide? Please [open an issue] ## 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). +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 @@ -161,4 +163,4 @@ To initiate the signature process please open a PR against this repo. The EasyCL 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). +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 40bd41af3d..f214113d6f 100644 --- a/README.md +++ b/README.md @@ -2,12 +2,12 @@ This repository contains the source code for the [GraphQL website](https://graphql.org). -> You can find more discussions on the [#website channel on the GraphQL Slack](https://graphql.slack.com/messages/website/). [Get your invite here!](https://graphql-slack.herokuapp.com/) +> You can find more discussions on the [#website channel on the GraphQL Slack](https://graphql.slack.com/messages/website/). [Get your invite here!](https://graphql-slack.herokuapp.com/) - -A brief overview: **GraphQL** is a query language for APIs and a runtime for fulfilling those queries with your existing data. It provides a complete and understandable description of the data in your API, gives clients the power to ask for exactly what they need, and enables powerful developer tools. The [specification](https://spec.graphql.org/) is open source and governed by the [GraphQL Foundation](https://foundation.graphql.org/). +A brief overview: **GraphQL** is a query language for APIs and a runtime for fulfilling those queries with your existing data. It provides a complete and understandable description of the data in your API, gives clients the power to ask for exactly what they need, and enables powerful developer tools. The [specification](https://spec.graphql.org/) is open source and governed by the [GraphQL Foundation](https://foundation.graphql.org/). ## Documentation + - [Site](https://graphql.org/) - [Reference documentation](https://graphql.org/learn/) - [Language support, tools, and services](https://graphql.org/code/) @@ -19,6 +19,7 @@ A brief overview: **GraphQL** is a query language for APIs and a runtime for ful The site is deployed via Netlify on merges to the source branch, you can see the [builds here](https://app.netlify.com/teams/graphql-org/builds). ## How to contribute + Check out our [contributing guide](./CONTRIBUTING.md) for detailed instructions on how to make changes to the GraphQL website 🎉 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/). @@ -27,4 +28,4 @@ To initiate the signature process please open a PR against this repo. The EasyCL 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). \ No newline at end of file +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/notes/ContributingToCodePage.md b/notes/ContributingToCodePage.md index 4858474c34..24dff39f60 100644 --- a/notes/ContributingToCodePage.md +++ b/notes/ContributingToCodePage.md @@ -1,6 +1,6 @@ ## Contributing to the Code Page -Hi, thanks for reading the docs! +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. @@ -52,27 +52,29 @@ 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 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')); +`) + +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/notes/NewSiteArchitecture.md b/notes/NewSiteArchitecture.md index f933f1a3e5..3fd8ea4290 100644 --- a/notes/NewSiteArchitecture.md +++ b/notes/NewSiteArchitecture.md @@ -2,172 +2,173 @@ ## Index -*Goal:* This is the landing page and is our opportunity to quickly capture attention and explain what GraphQL is and why you should care. +_Goal:_ This is the landing page and is our opportunity to quickly capture attention and explain what GraphQL is and why you should care. -*Timeframe:* Launch Mon, Sept 12th +_Timeframe:_ Launch Mon, Sept 12th This page is effectively a marketing page for GraphQL and should be the visual, scrollable version of the "Introducing GraphQL" conference talks and should be rich with visual metaphor and illustration and take advantage of whitespace to make individual salient points. Above the fold, this page should succinctly explain what GraphQL is and illustrate with a simple (editable) query/response example. Before scrolling, you should understand the following: -* GraphQL solves the same problem as REST. -* GraphQL is a query language for APIs (and not Databases). -* GraphQL is sent by client applications, such as an iOS app. -* GraphQL is evaluated by a web service and often returned as JSON. -* GraphQL services provide a complete description of your data with a type system. -* It's easy to build powerful tools for your data using GraphQL. +- GraphQL solves the same problem as REST. +- GraphQL is a query language for APIs (and not Databases). +- GraphQL is sent by client applications, such as an iOS app. +- GraphQL is evaluated by a web service and often returned as JSON. +- GraphQL services provide a complete description of your data with a type system. +- It's easy to build powerful tools for your data using GraphQL. Below the fold we should introduce concepts one at a time, each with visual metaphor and take-aways: -1) GraphQL clients describe what they need in terms of how client developers think about data. +1. GraphQL clients describe what they need in terms of how client developers think about data. -* If you're familiar with JSON, GraphQL is easy to learn and understand. -* GraphQL only sends what you ask for, nothing more or less, making your app faster and more stable. -* It's easy to anticipate the shape of the result of any query. +- If you're familiar with JSON, GraphQL is easy to learn and understand. +- GraphQL only sends what you ask for, nothing more or less, making your app faster and more stable. +- It's easy to anticipate the shape of the result of any query. -2) GraphQL queries can access many "resources" in a single network request. +2. GraphQL queries can access many "resources" in a single network request. -* A query can access properties of not just one object, but of many related objects. -* A query can access multiple unrelated objects at once. -* Compared to REST, GraphQL collects all the data needed for your app with much less network activity, making your app faster. +- A query can access properties of not just one object, but of many related objects. +- A query can access multiple unrelated objects at once. +- Compared to REST, GraphQL collects all the data needed for your app with much less network activity, making your app faster. -3) GraphQL services describes what's possible with a strong type system. +3. GraphQL services describes what's possible with a strong type system. -* GraphQL services provide a complete description of your data. -* Every `{ }` corresponds to an object of a particular type, and every type describes the fields available. -* GraphQL only runs queries that make sense and provides helpful error messages. -* Tools and IDEs can make editing queries easy via type-aheads. - * GraphiQL is a free tool that you can use. -* Type system defines descriptions, making it easy to keep documentation up to date. -* Every query guarantees the shape and type of its response. +- GraphQL services provide a complete description of your data. +- Every `{ }` corresponds to an object of a particular type, and every type describes the fields available. +- GraphQL only runs queries that make sense and provides helpful error messages. +- Tools and IDEs can make editing queries easy via type-aheads. + - GraphiQL is a free tool that you can use. +- Type system defines descriptions, making it easy to keep documentation up to date. +- Every query guarantees the shape and type of its response. -4) GraphQL is composable via fragments. +4. GraphQL is composable via fragments. -* Fragments describe a portion of some Type to be queried. -* Fragments are often used next to View code where data is used. -* Fragments are composed together to create full queries. +- Fragments describe a portion of some Type to be queried. +- Fragments are often used next to View code where data is used. +- Fragments are composed together to create full queries. -5) GraphQL makes backwards-compatible APIs easy. +5. GraphQL makes backwards-compatible APIs easy. -* Server does not need to worry about concerns of any particular client, only the complete set of capabilities. Clients are responsible for the data they receive. -* Because GraphQL only sends what you ask for, new capabilities can be introduced via new fields on types with no impact on existing queries. -* Old capabilities can be marked "deprecated" with no impact on existing queries. -* No versioning your API when using GraphQL leads to cleaner code on the server. +- Server does not need to worry about concerns of any particular client, only the complete set of capabilities. Clients are responsible for the data they receive. +- Because GraphQL only sends what you ask for, new capabilities can be introduced via new fields on types with no impact on existing queries. +- Old capabilities can be marked "deprecated" with no impact on existing queries. +- No versioning your API when using GraphQL leads to cleaner code on the server. -6) GraphQL queries are answered by simple functions on your server. +6. GraphQL queries are answered by simple functions on your server. -* GraphQL is not backed by any database technology, just like REST. -* Every field on each type is represented by a function for retrieving that data. -* GraphQL will call your functions and execute a query with optimal concurrency. -* It's easy to write a GraphQL API using your existing data model. +- GraphQL is not backed by any database technology, just like REST. +- Every field on each type is represented by a function for retrieving that data. +- GraphQL will call your functions and execute a query with optimal concurrency. +- It's easy to write a GraphQL API using your existing data model. Finally, there will be a set of links for learning more (diving into `Learn`) and for getting started (in `Code`). As well as a wall-o-logo for companies using GraphQL. ## Learn -*Goal:* Introduce GraphQL, one concept at a time, covering both primary concepts and best practices. +_Goal:_ Introduce GraphQL, one concept at a time, covering both primary concepts and best practices. -*Timeframe:* Basic primary concepts by Sept 12th, advanced primary concepts by Sept 30th, best practices as ready over Q3/Q4. +_Timeframe:_ Basic primary concepts by Sept 12th, advanced primary concepts by Sept 30th, best practices as ready over Q3/Q4. Where "GraphQL the Spec" is designed for a specific audience of those building GraphQL servers, this represents "GraphQL the Book" and is designed for the audience of anyone who wishes to use GraphQL. It should cover both GraphQL core concepts in addition to best practices and further topics, and it should range from introductory concepts through advanced concepts. The landing page for this section should begin as a more information-rich introduction to GraphQL, explaining why you might use it, and give a brief overview of the constituent parts. Take-aways from this introduction page: -* GraphQL is a query language. -* GraphQL servers describe a type system, called a "schema". -* Clients can access a GraphQL server's type system to learn about what's possible. -* Clients send queries to servers and typically get back JSON. -* GraphQL servers validate and execute GraphQL queries. +- GraphQL is a query language. +- GraphQL servers describe a type system, called a "schema". +- Clients can access a GraphQL server's type system to learn about what's possible. +- Clients send queries to servers and typically get back JSON. +- GraphQL servers validate and execute GraphQL queries. There is then a TOC through the sections and chapters (this is a straw-man list, open to reordering and addition) -* Introducing GraphQL (this initial page) -* Core Concepts: - * Requests: - * Basics (queries & mutations, fields, arguments, aliases, comments) - * Variables - * Fragments - * Values - * Directives (skip & include) - * Type System: - * Basics (Schema, Objects & Fields) - * Scalars & Enums - * Lists & NonNull (mention error handling) - * Interfaces & Unions - * How GraphQL Works: - * Validation - * Execution & Error Handling - * Introspection -* Best Practices: - * Servers: - * Serving over HTTP - * Authentication & Authorization - * Mutations - * Paginating Lists - * Schema Changes & Versioning - * Query Performance (Batching & Caching) - * Security & Rate Limiting - * Schema Design Guidelines - * Clients: - * Using Variables - * Co-locating Fragments - * Caching Results - * Persisted Queries - * Generating Models - * Migrating from REST +- Introducing GraphQL (this initial page) +- Core Concepts: + - Requests: + - Basics (queries & mutations, fields, arguments, aliases, comments) + - Variables + - Fragments + - Values + - Directives (skip & include) + - Type System: + - Basics (Schema, Objects & Fields) + - Scalars & Enums + - Lists & NonNull (mention error handling) + - Interfaces & Unions + - How GraphQL Works: + - Validation + - Execution & Error Handling + - Introspection +- Best Practices: + - Servers: + - Serving over HTTP + - Authentication & Authorization + - Mutations + - Paginating Lists + - Schema Changes & Versioning + - Query Performance (Batching & Caching) + - Security & Rate Limiting + - Schema Design Guidelines + - Clients: + - Using Variables + - Co-locating Fragments + - Caching Results + - Persisted Queries + - Generating Models + - Migrating from REST ## Code -*Goal:* Introduce open source GraphQL tools along with quick getting started guidelines for each. +_Goal:_ Introduce open source GraphQL tools along with quick getting started guidelines for each. -*Timeframe:* At least 3 servers described by Sept 12th, remainder by Sept 30th. +_Timeframe:_ At least 3 servers described by Sept 12th, remainder by Sept 30th. This page is all about fulfilling the "Ok I'm sold! Now what?" conundrum. It should first very quickly reintroduce the elements of GraphQL you would expect to see software for as well as offer a quick path towards getting something working. -1) Servers +1. Servers Explain the purpose of a GraphQL server, that there are servers written for many different languages and environments, and that graphql-js is the reference implementation operated by Facebook. Each server should contain the following: -* Logo -* Name of Project -* Language/Environment -* Link to website -* Getting started (e.g. npm install + code sample) -2) Clients +- Logo +- Name of Project +- Language/Environment +- Link to website +- Getting started (e.g. npm install + code sample) + +2. Clients Explain the purpose of a GraphQL client, that it's okay to just use curl/XHR/fetch, and that clients can offer more value via smart caches and integration with UI frameworks. Each client should contain similar set of info as servers. -3) Services +3. Services Hosted GraphQL-as-a-service have an opportunity to pitch themselves here. -4) Tools +4. Tools Common tools used by GraphQL community, e.g. GraphiQL. ## Community -*Goal:* Central dispatch for finding help for GraphQL questions, learning about conferences and meetups, and connecting with the community. +_Goal:_ Central dispatch for finding help for GraphQL questions, learning about conferences and meetups, and connecting with the community. -*Timeframe:* Simple version by Sept 12th, evolve over time. +_Timeframe:_ Simple version by Sept 12th, evolve over time. This page should serve as a high-level view of what resources are available and what's going on in the community. It should encourage pull-requests to facilitate being updated by the community over time. -* Links out to: - * Stack Overflow topic - * Slack/Discord channels - * Popular blogs - * Twitter feed -* Calendar of upcoming meetups or conference talks related to GraphQL (encourage edits by community) -* Grid of recorded videos about GraphQL (conf talks, etc). +- Links out to: + - Stack Overflow topic + - Slack/Discord channels + - Popular blogs + - Twitter feed +- Calendar of upcoming meetups or conference talks related to GraphQL (encourage edits by community) +- Grid of recorded videos about GraphQL (conf talks, etc). ## Blog -*Goal:* GraphQL core team's blog, signal-boosting popular articles written elsewhere. +_Goal:_ GraphQL core team's blog, signal-boosting popular articles written elsewhere. While any evergreen content typically belongs as chapters in the "Learn" section, the Blog is an opportunity for GraphQL core team members or occasional invited contributors to discuss experiments, interesting applications, or signal-boost things like new releases of the GraphQL spec, the reference implementation, upcoming events, or links out to interesting articles. diff --git a/package.json b/package.json index fa653af835..2c207d7f78 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "build": "gatsby build", "develop": "gatsby develop", "format": "prettier --write \"**/*.{js,jsx,ts,tsx,json,md}\"", + "format:check": "prettier --check \"**/*.{js,jsx,ts,tsx,json,md}\"", "start": "npm run develop", "serve": "gatsby serve", "clean": "gatsby clean", diff --git a/renovate.json b/renovate.json index f45d8f110c..4f39080e47 100644 --- a/renovate.json +++ b/renovate.json @@ -1,5 +1,3 @@ { - "extends": [ - "config:base" - ] + "extends": ["config:base"] } diff --git a/src/Containers/Sections/BringYourOwnCode/index.tsx b/src/Containers/Sections/BringYourOwnCode/index.tsx index b6964cd687..d3217bf05a 100644 --- a/src/Containers/Sections/BringYourOwnCode/index.tsx +++ b/src/Containers/Sections/BringYourOwnCode/index.tsx @@ -2,7 +2,6 @@ import React, { useEffect } from "react" import Prism from "../../../components/Prism" const Index = (): JSX.Element => { - useEffect(() => { let i = 0 var inView = document.getElementById("leverageCodeView") @@ -15,7 +14,7 @@ const Index = (): JSX.Element => { } step() return () => clearTimeout(timer) - },[]) + }, []) return (
@@ -38,8 +37,7 @@ const Index = (): JSX.Element => {
{ /> {
{" "} -
diff --git a/src/Containers/Sections/PredictableResults/index.tsx b/src/Containers/Sections/PredictableResults/index.tsx index 5a38cf75d1..e2da1bea7e 100644 --- a/src/Containers/Sections/PredictableResults/index.tsx +++ b/src/Containers/Sections/PredictableResults/index.tsx @@ -84,8 +84,7 @@ const PredictableResults = () => {
{
{
{ - return ( -
-
-
-

- Get many resources -
- in a single request -

- {/*Illustration: a query 2 or 3 levels deep]*/} -

- GraphQL queries access not just the properties of one resource but - also smoothly follow references between them. While typical REST - APIs require loading from multiple URLs, GraphQL APIs get all the - data your app needs in a single request. Apps using GraphQL can be - quick even on slow mobile network connections. -

-
-
- -
- +
+
+

+ Get many resources +
+ in a single request +

+ {/*Illustration: a query 2 or 3 levels deep]*/} +

+ GraphQL queries access not just the properties of one resource but + also smoothly follow references between them. While typical REST + APIs require loading from multiple URLs, GraphQL APIs get all the + data your app needs in a single request. Apps using GraphQL can be + quick even on slow mobile network connections. +

+
+
+ +
+ -
-
- +
+
+ { { "name": "Leia Organa" } ] } -}`} language="json" /> -
-
-
-
- ); -}; + +
+
+
+ ) +} -export default SingleRequest; +export default SingleRequest diff --git a/src/Containers/Sections/TypeSystem/index.tsx b/src/Containers/Sections/TypeSystem/index.tsx index 2b1e60ebcb..7a08e8daa0 100644 --- a/src/Containers/Sections/TypeSystem/index.tsx +++ b/src/Containers/Sections/TypeSystem/index.tsx @@ -42,8 +42,7 @@ const TypeSysyem = () => {
{
{
{
{
{
(
@@ -10,4 +10,4 @@ export default ({ title, rawMarkdownBody, pageContext }: any) => (
-) \ No newline at end of file +) diff --git a/src/components/Conf/Pricing/index.tsx b/src/components/Conf/Pricing/index.tsx index c746397464..a80f837214 100644 --- a/src/components/Conf/Pricing/index.tsx +++ b/src/components/Conf/Pricing/index.tsx @@ -109,19 +109,9 @@ const PricingConf = () => { Need assistance?

- Apply for a{" "} - - Visa - {" "} - or{" "} - - Scholarship - {" "} - or find more help in our{" "} - - FAQ - - . + Apply for a Visa or{" "} + Scholarship or find more + help in our FAQ.

diff --git a/src/components/Conf/Section/index.tsx b/src/components/Conf/Section/index.tsx index cf8446e3a4..e1df75589f 100644 --- a/src/components/Conf/Section/index.tsx +++ b/src/components/Conf/Section/index.tsx @@ -11,7 +11,9 @@ const SectionConf = ({ id, title, children }: Props): JSX.Element => ( // Padding down so hash-links to this id display below the header menu

- {title} + + {title} +

{children}
diff --git a/src/components/Conf/Seo/index.tsx b/src/components/Conf/Seo/index.tsx index 6d8fc2c84e..bce0aa805f 100644 --- a/src/components/Conf/Seo/index.tsx +++ b/src/components/Conf/Seo/index.tsx @@ -27,7 +27,10 @@ export default function SeoConf(props: { - + diff --git a/src/components/Conf/Speakers/index.tsx b/src/components/Conf/Speakers/index.tsx index 314eff707e..a1946e480f 100644 --- a/src/components/Conf/Speakers/index.tsx +++ b/src/components/Conf/Speakers/index.tsx @@ -64,7 +64,11 @@ const SpeakersConf = () => { className="shrink-0 rounded-full h-36 w-36 object-cover object-center" />
- +
@@ -88,10 +92,7 @@ const SpeakersConf = () => { something worth sharing, submit an application to speak!

- + Submit to Speak
diff --git a/src/components/ConfLayout/index.tsx b/src/components/ConfLayout/index.tsx index a8bf9a8f88..26ad18fa4e 100644 --- a/src/components/ConfLayout/index.tsx +++ b/src/components/ConfLayout/index.tsx @@ -1,7 +1,7 @@ import React from "react" import { Link } from "gatsby" import DocsSidebar from "../DocsSidebar" -import Marked from '../Marked' +import Marked from "../Marked" interface Props { title: string @@ -13,14 +13,21 @@ interface Props { pageContext: any } -const Index = ({ title, heroText, nextDoc, sideBarData, rawMarkdownBody, pageContext }: Props) => { +const Index = ({ + title, + heroText, + nextDoc, + sideBarData, + rawMarkdownBody, + pageContext, +}: Props) => { return (
- GraphQLConf logo -
{heroText}
+ GraphQLConf logo +
{heroText}
diff --git a/src/components/DocsLayout/index.tsx b/src/components/DocsLayout/index.tsx index f0d6e9b321..d364cb8f1c 100644 --- a/src/components/DocsLayout/index.tsx +++ b/src/components/DocsLayout/index.tsx @@ -1,7 +1,7 @@ import React from "react" import { Link } from "gatsby" import DocsSidebar from "../DocsSidebar" -import Marked from '../Marked' +import Marked from "../Marked" interface Props { title: string @@ -12,7 +12,13 @@ interface Props { pageContext: any } -const index = ({ title, nextDoc, sideBarData, rawMarkdownBody, pageContext }: Props) => { +const index = ({ + title, + nextDoc, + sideBarData, + rawMarkdownBody, + pageContext, +}: Props) => { return (
diff --git a/src/components/DocsSidebar/index.tsx b/src/components/DocsSidebar/index.tsx index 24920f80f9..12c374ef50 100644 --- a/src/components/DocsSidebar/index.tsx +++ b/src/components/DocsSidebar/index.tsx @@ -16,16 +16,18 @@ const SidebarForCategory = ({ category }: any) => { {page.frontmatter.sublinks && (
    - {page.frontmatter.sublinks.split(",").map((sublink: any, i: number) => ( -
  • - - {sublink} - -
  • - ))} + {page.frontmatter.sublinks + .split(",") + .map((sublink: any, i: number) => ( +
  • + + {sublink} + +
  • + ))}
)} diff --git a/src/components/FAQLayout/index.tsx b/src/components/FAQLayout/index.tsx index d3f3df6f71..0c87814937 100644 --- a/src/components/FAQLayout/index.tsx +++ b/src/components/FAQLayout/index.tsx @@ -7,11 +7,7 @@ interface Props { pageContext: any } -const index = ({ - title, - rawMarkdownBody, - pageContext -}: Props) => { +const index = ({ title, rawMarkdownBody, pageContext }: Props) => { return (
@@ -25,4 +21,4 @@ const index = ({ ) } -export default index \ No newline at end of file +export default index diff --git a/src/components/FAQSection/index.tsx b/src/components/FAQSection/index.tsx index 9c23d26c38..5c506ab7ba 100644 --- a/src/components/FAQSection/index.tsx +++ b/src/components/FAQSection/index.tsx @@ -7,11 +7,7 @@ interface Props { pageContext: any } -const FAQSection = ({ - title, - rawMarkdownBody, - pageContext -}: Props) => ( +const FAQSection = ({ title, rawMarkdownBody, pageContext }: Props) => (

{title}

{rawMarkdownBody} diff --git a/src/components/Footer/index.tsx b/src/components/Footer/index.tsx index f3bcbe1f6f..a20a7d4edb 100644 --- a/src/components/Footer/index.tsx +++ b/src/components/Footer/index.tsx @@ -103,7 +103,11 @@ const Footer = ({ sourcePath }: { sourcePath?: string }) => { )} {section.subsections.map((subsection, i) => ( - + {subsection.icon && } {subsection.text} diff --git a/src/components/FoundationLayout/index.tsx b/src/components/FoundationLayout/index.tsx index 19d164b877..4a58e7e6ce 100644 --- a/src/components/FoundationLayout/index.tsx +++ b/src/components/FoundationLayout/index.tsx @@ -1,7 +1,7 @@ import React from "react" import { Link } from "gatsby" import DocsSidebar from "../DocsSidebar" -import Marked from '../Marked' +import Marked from "../Marked" interface Props { title: string @@ -13,14 +13,24 @@ interface Props { pageContext: any } -const Index = ({ title, heroText, nextDoc, sideBarData, rawMarkdownBody, pageContext }: Props) => { +const Index = ({ + title, + heroText, + nextDoc, + sideBarData, + rawMarkdownBody, + pageContext, +}: Props) => { return (
- GraphQL Foundation logo -
{heroText}
+ GraphQL Foundation logo +
{heroText}
diff --git a/src/components/Link/index.tsx b/src/components/Link/index.tsx index 58aef00f64..ceacf22c58 100644 --- a/src/components/Link/index.tsx +++ b/src/components/Link/index.tsx @@ -3,15 +3,22 @@ import { Link } from "gatsby" interface Props { children?: React.ReactNode - href: string, - className?:string + href: string + className?: string } -const LinkWrapped = ({ href, children,className,...props }: Props) => { +const LinkWrapped = ({ href, children, className, ...props }: Props) => { const isExternalUrl = href.slice(0, 4) === "http" return isExternalUrl ? ( - + {children} ) : ( diff --git a/src/components/Marked/Header.tsx b/src/components/Marked/Header.tsx index 3ef9da7c9c..81783d8f88 100644 --- a/src/components/Marked/Header.tsx +++ b/src/components/Marked/Header.tsx @@ -1,24 +1,24 @@ -import React from 'react'; -import {toSlug} from '../../utils/slug'; +import React from "react" +import { toSlug } from "../../utils/slug" -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 || ''; - - //id is required for gatsby's anchor tags to work - return React.createElement(Heading, null, [ - , - props.children, - # - ]); - } - \ No newline at end of file +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 || "" + + //id is required for gatsby's anchor tags to work + return React.createElement(Heading, null, [ + , + props.children, + + # + , + ]) +} diff --git a/src/components/Marked/index.tsx b/src/components/Marked/index.tsx index 3c95bd5bbb..a4f6db273b 100644 --- a/src/components/Marked/index.tsx +++ b/src/components/Marked/index.tsx @@ -11,7 +11,7 @@ import Header from "./Header" import MiniGraphiQL from "./MiniGraphiQL" import { StarWarsSchema } from "./swapiSchema" -import { UsersSchema } from './usersSchema'; +import { UsersSchema } from "./usersSchema" export default function Marked(props: { children: string }) { return
{props.children && marked(props.children, props)}
@@ -78,7 +78,8 @@ block.normal = merge({}, block) 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+|$)/, + fences: + /^ *(`{3,}|~{3,}) *([^\s{]+)?(?: *\{ *((?:\d+(?: *- *\d+)?(?: *, *\d+(?: *- *\d+)?)*) *)?\})? *\n([\s\S]+?)\s*\1 *(?:\n+|$)/, paragraph: /^/, }) @@ -569,7 +570,13 @@ InlineLexer.prototype.output = function (src) { href = text } - out.push(React.createElement("a", { href: this.sanitizeUrl(href), key:href }, text)) + out.push( + React.createElement( + "a", + { href: this.sanitizeUrl(href), key: href }, + text + ) + ) continue } @@ -578,7 +585,13 @@ InlineLexer.prototype.output = function (src) { src = src.substring(cap[0].length) text = cap[1] href = text - out.push(React.createElement("a", { href: this.sanitizeUrl(href), key:href }, text)) + out.push( + React.createElement( + "a", + { href: this.sanitizeUrl(href), key: href }, + text + ) + ) continue } @@ -861,7 +874,7 @@ Parser.prototype.tok = function () { StarWars: StarWarsSchema, Users: UsersSchema, } - const schema = schemaMap[metaData.schema || 'StarWars']; + const schema = schemaMap[metaData.schema || "StarWars"] return ( { - humanData[ship.id] = ship; -}); +const humanData = {} +humans.forEach(ship => { + humanData[ship.id] = ship +}) const droids = [ { - id: '2000', - name: 'C-3PO', - friends: [ '1000', '1002', '1003', '2001' ], - appearsIn: [ 'NEWHOPE', 'EMPIRE', 'JEDI' ], - primaryFunction: 'Protocol', + id: "2000", + name: "C-3PO", + friends: ["1000", "1002", "1003", "2001"], + appearsIn: ["NEWHOPE", "EMPIRE", "JEDI"], + primaryFunction: "Protocol", }, { - id: '2001', - name: 'R2-D2', - friends: [ '1000', '1002', '1003' ], - appearsIn: [ 'NEWHOPE', 'EMPIRE', 'JEDI' ], - primaryFunction: 'Astromech', + id: "2001", + name: "R2-D2", + friends: ["1000", "1002", "1003"], + appearsIn: ["NEWHOPE", "EMPIRE", "JEDI"], + primaryFunction: "Astromech", }, -]; +] -const droidData = {}; -droids.forEach((ship) => { - droidData[ship.id] = ship; -}); +const droidData = {} +droids.forEach(ship => { + droidData[ship.id] = ship +}) const starships = [ { - id: '3000', - name: 'Millenium Falcon', + id: "3000", + name: "Millenium Falcon", length: 34.37, }, { - id: '3001', - name: 'X-Wing', + id: "3001", + name: "X-Wing", length: 12.5, }, { - id: '3002', - name: 'TIE Advanced x1', + id: "3002", + name: "TIE Advanced x1", length: 9.2, }, { - id: '3003', - name: 'Imperial shuttle', + id: "3003", + name: "Imperial shuttle", length: 20, }, -]; +] -const starshipData = {}; -starships.forEach((ship) => { - starshipData[ship.id] = ship; -}); +const starshipData = {} +starships.forEach(ship => { + starshipData[ship.id] = ship +}) /** * Helper function to get a character by ID. */ function getCharacter(id) { // Returning a promise just to illustrate GraphQL.js's support. - return Promise.resolve(humanData[id] || droidData[id]); + return Promise.resolve(humanData[id] || droidData[id]) } /** * Allows us to query for a character's friends. */ function getFriends(character) { - return character.friends.map(id => getCharacter(id)); + return character.friends.map(id => getCharacter(id)) } /** * Allows us to fetch the undisputed hero of the Star Wars trilogy, R2-D2. */ function getHero(episode) { - if (episode === 'EMPIRE') { + if (episode === "EMPIRE") { // Luke is the hero of Episode V. - return humanData['1000']; + return humanData["1000"] } // Artoo is the hero otherwise. - return droidData['2001']; + return droidData["2001"] } /** * Allows us to query for the human with the given id. */ function getHuman(id) { - return humanData[id]; + return humanData[id] } /** * Allows us to query for the droid with the given id. */ function getDroid(id) { - return droidData[id]; + return droidData[id] } function getStarship(id) { - return starshipData[id]; + return starshipData[id] } function toCursor(str) { - return Buffer("cursor" + str).toString('base64'); + return Buffer("cursor" + str).toString("base64") } function fromCursor(str) { - return Buffer.from(str, 'base64').toString().slice(6); + return Buffer.from(str, "base64").toString().slice(6) } const resolvers = { @@ -366,58 +366,56 @@ const resolvers = { starship: (root, { id }) => getStarship(id), reviews: () => null, search: (root, { text }) => { - const re = new RegExp(text, 'i'); + const re = new RegExp(text, "i") - const allData = [ - ...humans, - ...droids, - ...starships, - ]; + const allData = [...humans, ...droids, ...starships] - return allData.filter((obj) => re.test(obj.name)); + return allData.filter(obj => re.test(obj.name)) }, }, Mutation: { createReview: (root, { episode, review }) => review, }, Character: { - __resolveType(data, context, info){ - if(humanData[data.id]){ - return 'Human'; + __resolveType(data, context, info) { + if (humanData[data.id]) { + return "Human" } - if(droidData[data.id]){ - return 'Droid'; + if (droidData[data.id]) { + return "Droid" } - return null; + return null }, }, Human: { height: ({ height }, { unit }) => { - if (unit === 'FOOT') { - return height * 3.28084; + if (unit === "FOOT") { + return height * 3.28084 } - return height; + return height }, friends: ({ friends }) => friends.map(getCharacter), friendsConnection: ({ friends }, { first, after }) => { - first = first || friends.length; - after = after ? parseInt(fromCursor(after), 10) : 0; - const edges = friends.map((friend, i) => ({ - cursor: toCursor(i+1), - node: getCharacter(friend) - })).slice(after, first + after); - const slicedFriends = edges.map(({ node }) => node); + first = first || friends.length + after = after ? parseInt(fromCursor(after), 10) : 0 + const edges = friends + .map((friend, i) => ({ + cursor: toCursor(i + 1), + node: getCharacter(friend), + })) + .slice(after, first + after) + const slicedFriends = edges.map(({ node }) => node) return { edges, friends: slicedFriends, pageInfo: { startCursor: edges.length > 0 ? edges[0].cursor : null, hasNextPage: first + after < friends.length, - endCursor: edges.length > 0 ? edges[edges.length - 1].cursor : null + endCursor: edges.length > 0 ? edges[edges.length - 1].cursor : null, }, - totalCount: friends.length - }; + totalCount: friends.length, + } }, starships: ({ starships }) => starships.map(getStarship), appearsIn: ({ appearsIn }) => appearsIn, @@ -425,23 +423,25 @@ const resolvers = { Droid: { friends: ({ friends }) => friends.map(getCharacter), friendsConnection: ({ friends }, { first, after }) => { - first = first || friends.length; - after = after ? parseInt(fromCursor(after), 10) : 0; - const edges = friends.map((friend, i) => ({ - cursor: toCursor(i+1), - node: getCharacter(friend) - })).slice(after, first + after); - const slicedFriends = edges.map(({ node }) => node); + first = first || friends.length + after = after ? parseInt(fromCursor(after), 10) : 0 + const edges = friends + .map((friend, i) => ({ + cursor: toCursor(i + 1), + node: getCharacter(friend), + })) + .slice(after, first + after) + const slicedFriends = edges.map(({ node }) => node) return { edges, friends: slicedFriends, pageInfo: { startCursor: edges.length > 0 ? edges[0].cursor : null, hasNextPage: first + after < friends.length, - endCursor: edges.length > 0 ? edges[edges.length - 1].cursor : null + endCursor: edges.length > 0 ? edges[edges.length - 1].cursor : null, }, - totalCount: friends.length - }; + totalCount: friends.length, + } }, appearsIn: ({ appearsIn }) => appearsIn, }, @@ -457,25 +457,25 @@ const resolvers = { }, Starship: { length: ({ length }, { unit }) => { - if (unit === 'FOOT') { - return length * 3.28084; + if (unit === "FOOT") { + return length * 3.28084 } - return length; - } + return length + }, }, SearchResult: { - __resolveType(data, context, info){ - if(humanData[data.id]){ - return 'Human'; + __resolveType(data, context, info) { + if (humanData[data.id]) { + return "Human" } - if(droidData[data.id]){ - return 'Droid'; + if (droidData[data.id]) { + return "Droid" } - if(starshipData[data.id]){ - return 'Starship'; + if (starshipData[data.id]) { + return "Starship" } - return null; + return null }, }, } @@ -486,5 +486,5 @@ const resolvers = { */ export const StarWarsSchema = makeExecutableSchema({ typeDefs, - resolvers -}); + resolvers, +}) diff --git a/src/components/Prism/Prism.tsx b/src/components/Prism/Prism.tsx index 82739d6a51..d075d64e84 100644 --- a/src/components/Prism/Prism.tsx +++ b/src/components/Prism/Prism.tsx @@ -5,69 +5,81 @@ * @author Lea Verou http://lea.verou.me */ -var Prism; +var Prism // Private helper vars -var lang = /\blang(?:uage)?-(\w+)\b/i; -var uniqueId = 0; +var lang = /\blang(?:uage)?-(\w+)\b/i +var uniqueId = 0 -var _ = Prism = { +var _ = (Prism = { util: { encode: function (tokens) { if (tokens instanceof Token) { - return new Token(tokens.type, _.util.encode(tokens.content), tokens.alias); - } else if (_.util.type(tokens) === 'Array') { - return tokens.map(_.util.encode); + return new Token( + tokens.type, + _.util.encode(tokens.content), + tokens.alias + ) + } else if (_.util.type(tokens) === "Array") { + return tokens.map(_.util.encode) } else { - return tokens.replace(/&/g, '&').replace(/ text.length) { // Something went terribly wrong, ABORT, ABORT! - break tokenloop; + break tokenloop } if (str instanceof Token) { - continue; + continue } - pattern.lastIndex = 0; + pattern.lastIndex = 0 var match = pattern.exec(str), - delNum = 1; + delNum = 1 // Greedy patterns can override/remove up to two previously matched tokens if (!match && greedy && i != strarr.length - 1) { - pattern.lastIndex = pos; - match = pattern.exec(text); + pattern.lastIndex = pos + match = pattern.exec(text) if (!match) { - break; + break } var from = match.index + (lookbehind ? match[1].length : 0), - to = match.index + match[0].length, - k = i, - p = pos; + to = match.index + match[0].length, + k = i, + p = pos for (var len = strarr.length; k < len && p < to; ++k) { - p += (strarr[k].matchedStr || strarr[k]).length; + p += (strarr[k].matchedStr || strarr[k]).length // Move the index i to the element in strarr that is closest to from if (from >= p) { - ++i; - pos = p; + ++i + pos = p } } @@ -327,323 +350,350 @@ var _ = Prism = { * If strarr[k - 1] is greedy we are in conflict with another greedy pattern */ if (strarr[i] instanceof Token || strarr[k - 1].greedy) { - continue; + continue } // Number of tokens to delete and replace with the new match - delNum = k - i; - str = text.slice(pos, p); - match.index -= pos; + delNum = k - i + str = text.slice(pos, p) + match.index -= pos } if (!match) { - continue; + continue } - if(lookbehind) { - lookbehindLength = match[1].length; + if (lookbehind) { + lookbehindLength = match[1].length } var from = match.index + lookbehindLength, - match = match[0].slice(lookbehindLength), - to = from + match.length, - before = str.slice(0, from), - after = str.slice(to); + match = match[0].slice(lookbehindLength), + to = from + match.length, + before = str.slice(0, from), + after = str.slice(to) - var args = [i, delNum]; + var args = [i, delNum] if (before) { - args.push(before); + args.push(before) } - var wrapped = new Token(token, inside? _.tokenize(match, inside) : match, alias, match, greedy); + var wrapped = new Token( + token, + inside ? _.tokenize(match, inside) : match, + alias, + match, + greedy + ) - args.push(wrapped); + args.push(wrapped) if (after) { - args.push(after); + args.push(after) } - Array.prototype.splice.apply(strarr, args); + Array.prototype.splice.apply(strarr, args) } } } - return strarr; + return strarr }, hooks: { all: {}, add: function (name, callback) { - var hooks = _.hooks.all; + var hooks = _.hooks.all - hooks[name] = hooks[name] || []; + hooks[name] = hooks[name] || [] - hooks[name].push(callback); + hooks[name].push(callback) }, run: function (name, env) { - var callbacks = _.hooks.all[name]; + var callbacks = _.hooks.all[name] if (!callbacks || !callbacks.length) { - return; + return } - for (var i=0, callback; callback = callbacks[i++];) { - callback(env); + for (var i = 0, callback; (callback = callbacks[i++]); ) { + callback(env) } - } - } -}; + }, + }, +}) -var Token = _.Token = function(type, content, alias, matchedStr, greedy) { - this.type = type; - this.content = content; - this.alias = alias; +var Token = (_.Token = function (type, content, alias, matchedStr, greedy) { + this.type = type + this.content = content + this.alias = alias // Copy of the full string this token was created from - this.matchedStr = matchedStr || null; - this.greedy = !!greedy; -}; + this.matchedStr = matchedStr || null + this.greedy = !!greedy +}) -Token.stringify = function(o, language, parent) { - if (typeof o == 'string') { - return o; +Token.stringify = function (o, language, parent) { + if (typeof o == "string") { + return o } - if (_.util.type(o) === 'Array') { - return o.map(function(element) { - return Token.stringify(element, language, o); - }).join(''); + if (_.util.type(o) === "Array") { + return o + .map(function (element) { + return Token.stringify(element, language, o) + }) + .join("") } var env = { type: o.type, content: Token.stringify(o.content, language, parent), - tag: 'span', - classes: ['token', o.type], + tag: "span", + classes: ["token", o.type], attributes: {}, language: language, - parent: parent - }; + parent: parent, + } - if (env.type == 'comment') { - env.attributes['spellcheck'] = 'true'; + if (env.type == "comment") { + env.attributes["spellcheck"] = "true" } if (o.alias) { - var aliases = _.util.type(o.alias) === 'Array' ? o.alias : [o.alias]; - Array.prototype.push.apply(env.classes, aliases); + var aliases = _.util.type(o.alias) === "Array" ? o.alias : [o.alias] + Array.prototype.push.apply(env.classes, aliases) } - _.hooks.run('wrap', env); + _.hooks.run("wrap", env) - var attributes = ''; + var attributes = "" for (var name in env.attributes) { - attributes += (attributes ? ' ' : '') + name + '="' + (env.attributes[name] || '') + '"'; + attributes += + (attributes ? " " : "") + name + '="' + (env.attributes[name] || "") + '"' } - return '<' + env.tag + ' class="' + env.classes.join(' ') + '"' + (attributes ? ' ' + attributes : '') + '>' + env.content + ''; - -}; + return ( + "<" + + env.tag + + ' class="' + + env.classes.join(" ") + + '"' + + (attributes ? " " + attributes : "") + + ">" + + env.content + + "" + ) +} -Token.reactify = function(o, language, parent, key) { - if (typeof o == 'string') { - return o; +Token.reactify = function (o, language, parent, key) { + if (typeof o == "string") { + return o } - if (_.util.type(o) === 'Array') { - return o.map(function(element, i) { - return Token.reactify(element, language, o, i); - }); + if (_.util.type(o) === "Array") { + return o.map(function (element, i) { + return Token.reactify(element, language, o, i) + }) } var env = { type: o.type, content: Token.reactify(o.content, language, parent), - tag: 'span', + tag: "span", classes: [o.type], - attributes: {key: key}, + attributes: { key: key }, language: language, - parent: parent - }; + parent: parent, + } - if (env.type == 'comment') { - env.attributes.spellCheck = true; + if (env.type == "comment") { + env.attributes.spellCheck = true } if (o.alias) { - var aliases = _.util.type(o.alias) === 'Array' ? o.alias : [o.alias]; - Array.prototype.push.apply(env.classes, aliases); + var aliases = _.util.type(o.alias) === "Array" ? o.alias : [o.alias] + Array.prototype.push.apply(env.classes, aliases) } - _.hooks.run('wrap', env); + _.hooks.run("wrap", env) - env.attributes.className = env.classes.join(' '); + env.attributes.className = env.classes.join(" ") - return React.DOM[env.tag](env.attributes, env.content); -}; + return React.DOM[env.tag](env.attributes, env.content) +} Prism.languages.markup = { - 'comment': //, - 'prolog': /<\?[\w\W]+?\?>/, - 'doctype': //, - 'cdata': //i, - 'tag': { - pattern: /<\/?[^\s>\/]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\\1|\\?(?!\1)[\w\W])*\1|[^\s'">=]+))?)*\s*\/?>/i, + comment: //, + prolog: /<\?[\w\W]+?\?>/, + doctype: //, + cdata: //i, + tag: { + pattern: + /<\/?[^\s>\/]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\\1|\\?(?!\1)[\w\W])*\1|[^\s'">=]+))?)*\s*\/?>/i, inside: { - 'tag': { + tag: { pattern: /^<\/?[^\s>\/]+/i, inside: { - 'punctuation': /^<\/?/, - 'namespace': /^[^\s>\/:]+:/ - } + punctuation: /^<\/?/, + namespace: /^[^\s>\/:]+:/, + }, }, - 'attr-value': { + "attr-value": { pattern: /=(?:('|")[\w\W]*?(\1)|[^\s>]+)/i, inside: { - 'punctuation': /[=>"']/ - } + punctuation: /[=>"']/, + }, }, - 'punctuation': /\/?>/, - 'attr-name': { + punctuation: /\/?>/, + "attr-name": { pattern: /[^\s>\/]+/, inside: { - 'namespace': /^[^\s>\/:]+:/ - } - } - - } + namespace: /^[^\s>\/:]+:/, + }, + }, + }, }, - 'entity': /&#?[\da-z]{1,8};/i -}; + entity: /&#?[\da-z]{1,8};/i, +} // Plugin to make entity title show the real entity, idea by Roman Komarov -Prism.hooks.add('wrap', function(env) { - - if (env.type === 'entity') { - env.attributes['title'] = env.content.replace(/&/, '&'); +Prism.hooks.add("wrap", function (env) { + if (env.type === "entity") { + env.attributes["title"] = env.content.replace(/&/, "&") } -}); -; +}) Prism.languages.clike = { - 'comment': [ + comment: [ { pattern: /(^|[^\\])\/\*[\w\W]*?\*\//, - lookbehind: true + lookbehind: true, }, { pattern: /(^|[^\\:])\/\/.*/, - lookbehind: true - } + lookbehind: true, + }, ], - 'string': /("|')(\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/, - 'class-name': { - pattern: /((?:(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/i, + string: /("|')(\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/, + "class-name": { + pattern: + /((?:(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/i, lookbehind: true, inside: { - punctuation: /(\.|\\)/ - } + punctuation: /(\.|\\)/, + }, }, - 'keyword': /\b(if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/, - 'boolean': /\b(true|false)\b/, - 'function': /[a-z0-9_]+(?=\()/i, - 'number': /\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?)\b/, - 'operator': /[-+]{1,2}|!|<=?|>=?|={1,3}|&{1,2}|\|?\||\?|\*|\/|~|\^|%/, - 'punctuation': /[{}[\];(),.:]/ -}; - -Prism.languages.javascript = Prism.languages.extend('clike', { - 'keyword': /\b(as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|false|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\b/, - 'number': /\b-?(0x[\dA-Fa-f]+|0b[01]+|0o[0-7]+|\d*\.?\d+([Ee][+-]?\d+)?|NaN|Infinity)\b/, - 'function': /(?!\d)[a-z0-9_$]+(?=\()/i -}); - -Prism.languages.insertBefore('javascript', 'keyword', { - 'regex': { - pattern: /(^|[^/])\/(?!\/)(\[.+?]|\\.|[^/\\\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})]))/, - lookbehind: true - } -}); + keyword: + /\b(if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/, + boolean: /\b(true|false)\b/, + function: /[a-z0-9_]+(?=\()/i, + number: /\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?)\b/, + operator: /[-+]{1,2}|!|<=?|>=?|={1,3}|&{1,2}|\|?\||\?|\*|\/|~|\^|%/, + punctuation: /[{}[\];(),.:]/, +} + +Prism.languages.javascript = Prism.languages.extend("clike", { + keyword: + /\b(as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|false|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\b/, + number: + /\b-?(0x[\dA-Fa-f]+|0b[01]+|0o[0-7]+|\d*\.?\d+([Ee][+-]?\d+)?|NaN|Infinity)\b/, + function: /(?!\d)[a-z0-9_$]+(?=\()/i, +}) + +Prism.languages.insertBefore("javascript", "keyword", { + regex: { + pattern: + /(^|[^/])\/(?!\/)(\[.+?]|\\.|[^/\\\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})]))/, + lookbehind: true, + }, +}) -Prism.languages.insertBefore('javascript', 'class-name', { - 'template-string': { +Prism.languages.insertBefore("javascript", "class-name", { + "template-string": { pattern: /`(?:\\`|\\?[^`])*`/, inside: { - 'interpolation': { + interpolation: { pattern: /\$\{[^}]+\}/, inside: { - 'interpolation-punctuation': { + "interpolation-punctuation": { pattern: /^\$\{|\}$/, - alias: 'punctuation' + alias: "punctuation", }, - rest: Prism.languages.javascript - } + rest: Prism.languages.javascript, + }, }, - 'string': /[\s\S]+/ - } - } -}); + string: /[\s\S]+/, + }, + }, +}) if (Prism.languages.markup) { - Prism.languages.insertBefore('markup', 'tag', { - 'script': { + Prism.languages.insertBefore("markup", "tag", { + script: { pattern: /[\w\W]*?<\/script>/i, inside: { - 'tag': { + tag: { pattern: /|<\/script>/i, - inside: Prism.languages.markup.tag.inside + inside: Prism.languages.markup.tag.inside, }, - rest: Prism.languages.javascript + rest: Prism.languages.javascript, }, - alias: 'language-javascript' - } - }); + alias: "language-javascript", + }, + }) } -; -(function(Prism) { - -var javascript = Prism.util.clone(Prism.languages.javascript); +;(function (Prism) { + var javascript = Prism.util.clone(Prism.languages.javascript) -Prism.languages.jsx = Prism.languages.extend('markup', javascript); -Prism.languages.jsx.tag.pattern= /<\/?[\w:-]+\s*(?:\s+[\w:-]+(?:=(?:("|')(\\?[\w\W])*?\1|[^\s'">=]+|(\{[\w\W]*?\})))?\s*)*\/?>/i; + Prism.languages.jsx = Prism.languages.extend("markup", javascript) + Prism.languages.jsx.tag.pattern = + /<\/?[\w:-]+\s*(?:\s+[\w:-]+(?:=(?:("|')(\\?[\w\W])*?\1|[^\s'">=]+|(\{[\w\W]*?\})))?\s*)*\/?>/i -Prism.languages.jsx.tag.inside['attr-value'].pattern = /=[^\{](?:('|")[\w\W]*?(\1)|[^\s>]+)/i; + Prism.languages.jsx.tag.inside["attr-value"].pattern = + /=[^\{](?:('|")[\w\W]*?(\1)|[^\s>]+)/i -Prism.languages.insertBefore('inside', 'attr-value',{ - 'script': { - pattern: /=(\{[\w\W]*?\})/i, - inside: { - 'function' : Prism.languages.javascript.function, - 'punctuation': /[={}[\];(),.:]/, - 'keyword': Prism.languages.javascript.keyword + Prism.languages.insertBefore( + "inside", + "attr-value", + { + script: { + pattern: /=(\{[\w\W]*?\})/i, + inside: { + function: Prism.languages.javascript.function, + punctuation: /[={}[\];(),.:]/, + keyword: Prism.languages.javascript.keyword, + }, + alias: "language-javascript", + }, }, - 'alias': 'language-javascript' - } -}, Prism.languages.jsx.tag); - -}(Prism)); + Prism.languages.jsx.tag + ) +})(Prism) var graphqlComment = { pattern: /#.*/, - greedy: true -}; + greedy: true, +} var graphqlCommon = { string: { pattern: /"(?:\\.|[^\\"])*"/, - greedy: true + greedy: true, }, number: /(?:\B-|\b)\d+(?:\.\d+)?(?:[eE][+-]?\d+)?\b/, boolean: /\b(?:true|false)\b/, variable: { pattern: /\$[a-z_]\w*/i, - greedy: true + greedy: true, }, operator: /!|=|\.{3}/, - punctuation: /[!(){|}[\]:=,]/ -}; + punctuation: /[!(){|}[\]:=,]/, +} var graphqlDirective = { pattern: /@[a-z_]\w*(\([\w\W]*?\))?/i, @@ -653,79 +703,81 @@ var graphqlDirective = { pattern: /\([\w\W]*?\)/, inside: { arg: /[a-z_]\w*(?=\s*:)/i, - ...graphqlCommon - } - } - } -}; + ...graphqlCommon, + }, + }, + }, +} Prism.languages.graphql = { comment: graphqlComment, - 'schema-def': { + "schema-def": { pattern: /\bschema\b[^{]*{[^{}]*}/, inside: { comment: graphqlComment, keyword: /\bschema\b|[a-zA-Z_]\w*(?=\s*:)/, - 'type-name': { + "type-name": { pattern: /(:[\s\[]*)[a-z_]\w*/i, - lookbehind: true + lookbehind: true, }, directive: graphqlDirective, - punctuation: graphqlCommon.punctuation - } + punctuation: graphqlCommon.punctuation, + }, }, - 'union-def': { + "union-def": { pattern: /\bunion\b[^=]+=\s*[a-zA-Z_]\w*(?:\s*\|\s*[a-zA-Z_]\w*)*/, inside: { comment: graphqlComment, keyword: /\bunion\b/, - 'type-name': { + "type-name": { pattern: /([=|]\s*)[a-z_]\w*/i, - lookbehind: true + lookbehind: true, }, directive: graphqlDirective, - punctuation: graphqlCommon.punctuation - } + punctuation: graphqlCommon.punctuation, + }, }, - 'type-def': { - pattern: /\b(?:type|interface|input|enum)\b[\w\W]+?{(?:[^{}]*|[^{}]*{[^{}]*}[^{}]*|[^{}]*{[^{}]*[^{}]*{[^{}]*}[^{}]*}[^{}]*)}/, + "type-def": { + pattern: + /\b(?:type|interface|input|enum)\b[\w\W]+?{(?:[^{}]*|[^{}]*{[^{}]*}[^{}]*|[^{}]*{[^{}]*[^{}]*{[^{}]*}[^{}]*}[^{}]*)}/, inside: { comment: graphqlComment, fields: { - pattern: /{(?:[^{}]*|[^{}]*{[^{}]*}[^{}]*|[^{}]*{[^{}]*[^{}]*{[^{}]*}[^{}]*}[^{}]*)}/, + pattern: + /{(?:[^{}]*|[^{}]*{[^{}]*}[^{}]*|[^{}]*{[^{}]*[^{}]*{[^{}]*}[^{}]*}[^{}]*)}/, inside: { comment: graphqlComment, argDefs: { pattern: /\([\w\W]*?\)/, inside: { comment: graphqlComment, - 'attr-name': /[a-z_]\w*(?=\s*:)/i, - 'type-name': { + "attr-name": /[a-z_]\w*(?=\s*:)/i, + "type-name": { pattern: /(:[\s\[]*)[a-z_]\w*/i, - lookbehind: true + lookbehind: true, }, directive: graphqlDirective, - ...graphqlCommon - } + ...graphqlCommon, + }, }, directive: graphqlDirective, - 'attr-name': { + "attr-name": { pattern: /[a-z_]\w*(?=\s*[:\(])/i, greedy: true, }, - 'type-name': { + "type-name": { pattern: /(:[\s\[]*)[a-z_]\w*/i, - lookbehind: true + lookbehind: true, }, punctuation: /[!{}\[\]:=,]/, - } + }, }, keyword: /\b(?:type|interface|implements|input|enum)\b/, directive: graphqlDirective, ...graphqlCommon, // 'type-name': /[a-z_]\w*/i, - } + }, }, // string: /"(?:\\.|[^\\"])*"/, // number: /(?:\B-|\b)\d+(?:\.\d+)?(?:[eE][+-]?\d+)?\b/, @@ -736,35 +788,34 @@ Prism.languages.graphql = { // alias: 'function' // }, directive: graphqlDirective, - 'attr-name': /[a-z_]\w*(?=\s*:)/i, - 'keyword': [ + "attr-name": /[a-z_]\w*(?=\s*:)/i, + keyword: [ { pattern: /(fragment\s+(?!on)[a-z_]\w*\s+|\.\.\.\s*)on\b/, - lookbehind: true + lookbehind: true, }, - /\b(?:query|mutation|subscription|fragment|extend|scalar)\b/ + /\b(?:query|mutation|subscription|fragment|extend|scalar)\b/, ], ...graphqlCommon, // 'operator': /!|=|\.{3}/, // 'punctuation': /[!(){}\[\]:=,]/, // comment: /#.*/, // 'enum': /[a-z_]\w*/i -}; +} Prism.languages.json = { - 'attr-name': { + "attr-name": { pattern: /"(?:\\.|[^\\"])*"(?=\s*:)/i, - greedy: true + greedy: true, }, string: { pattern: /"(?:\\.|[^\\"])*"/, - greedy: true + greedy: true, }, boolean: /\b(?:true|false)\b/, keyword: /\bnull\b/, number: /(?:\B-|\b)\d+(?:\.\d+)?(?:[eE][+-]?\d+)?\b/, punctuation: /[{}[\],:]/, -}; - +} -export default Prism; \ No newline at end of file +export default Prism diff --git a/src/components/Search/index.tsx b/src/components/Search/index.tsx index 5aeef48ddd..52ec007ec9 100644 --- a/src/components/Search/index.tsx +++ b/src/components/Search/index.tsx @@ -1,27 +1,25 @@ -import React, {useEffect} from "react" +import React, { useEffect } from "react" // Added to the global runtime by the script tag further down the file. declare const docsearch: any | undefined - - // Runs the new docsearch function over possible search inputs const runDocsearchIfPossible = () => { - if (typeof docsearch !== 'undefined') { - const searches = ["algolia-search-input", "hero-search-input"] - for (const searchID of searches) { - if (!document.getElementById(searchID)) continue + if (typeof docsearch !== "undefined") { + const searches = ["algolia-search-input", "hero-search-input"] + for (const searchID of searches) { + if (!document.getElementById(searchID)) continue - docsearch({ - apiKey: 'd103541f3e6041148aade2e746ed4d61', - indexName: 'graphql', - inputSelector: `#${searchID}` - }); - } + docsearch({ + apiKey: "d103541f3e6041148aade2e746ed4d61", + indexName: "graphql", + inputSelector: `#${searchID}`, + }) } + } } -const Search = ({searchID}: { searchID?: string}): JSX.Element => { +const Search = ({ searchID }: { searchID?: string }): JSX.Element => { const searchInputID = searchID || "algolia-search-input" // This extra bit of mis-direction ensures that non-essential code runs after @@ -31,26 +29,27 @@ const Search = ({searchID}: { searchID?: string}): JSX.Element => { if (document.getElementById("algolia-search")) return - const searchScript = document.createElement('script'); + const searchScript = document.createElement("script") searchScript.id = "algolia-search" - const searchCSS = document.createElement('link'); + const searchCSS = document.createElement("link") - searchScript.src = "https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js"; - searchScript.async = true; + searchScript.src = + "https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.js" + searchScript.async = true searchScript.onload = () => { - if (typeof docsearch !== 'undefined') { + if (typeof docsearch !== "undefined") { runDocsearchIfPossible() - searchCSS.rel = 'stylesheet'; - searchCSS.href = 'https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css' - searchCSS.type = 'text/css'; - document.body.appendChild(searchCSS); + searchCSS.rel = "stylesheet" + searchCSS.href = + "https://cdn.jsdelivr.net/docsearch.js/1/docsearch.min.css" + searchCSS.type = "text/css" + document.body.appendChild(searchCSS) } } - document.body.appendChild(searchScript); - }, []); - + document.body.appendChild(searchScript) + }, []) return (
diff --git a/src/content/blog/2015-09-14-graphql.md b/src/content/blog/2015-09-14-graphql.md index f5c0bb9ec6..762849340a 100644 --- a/src/content/blog/2015-09-14-graphql.md +++ b/src/content/blog/2015-09-14-graphql.md @@ -2,7 +2,7 @@ title: "GraphQL: A data query language" layout: blog permalink: /blog/graphql-a-query-language/ -tags: ["blog","spec"] +tags: ["blog", "spec"] date: 2015-09-14 byline: "Lee Byron" --- @@ -30,7 +30,7 @@ A GraphQL query is a string that is sent to a server to be interpreted and fulfi id name isViewerFriend - profilePicture(size: 50) { + profilePicture(size: 50) { uri width height @@ -78,7 +78,7 @@ With GraphQL, we were able to build full-featured native News Feed on iOS in 201 When we built GraphQL in 2012 we had no idea how important it would become to how we build things at Facebook and didn't anticipate its value beyond Facebook. However earlier this year we announced Relay, our application framework for the web and React Native built atop GraphQL. The community excitement for Relay inspired us to revisit GraphQL to evaluate every detail, make improvements, fix inconsistencies, and write a specification describing GraphQL and how it works. -Two months ago, we [made our progress public](https://www.youtube.com/watch?v=WQLzZf34FJ8) and released a working draft of the [GraphQL spec](http://facebook.github.io/graphql/) and a reference implementation: [GraphQL.js](https://github.com/graphql/graphql-js). Since then, a community has started to form around GraphQL, and versions of the GraphQL runtime are being [built in many languages](https://github.com/chentsulin/awesome-graphql), including Go, Ruby, Scala, Java, .Net, and Python. We've also begun to share some of the tools we use internally, like [GraphiQL](https://github.com/graphql/graphiql), an in-browser IDE, documentation browser, and query runner. GraphQL has also seen production usage outside Facebook, in a project for the [*Financial Times*](https://www.youtube.com/watch?v=S0s935RKKB4) by consultancy [Red Badger](http://red-badger.com/). +Two months ago, we [made our progress public](https://www.youtube.com/watch?v=WQLzZf34FJ8) and released a working draft of the [GraphQL spec](http://facebook.github.io/graphql/) and a reference implementation: [GraphQL.js](https://github.com/graphql/graphql-js). Since then, a community has started to form around GraphQL, and versions of the GraphQL runtime are being [built in many languages](https://github.com/chentsulin/awesome-graphql), including Go, Ruby, Scala, Java, .Net, and Python. We've also begun to share some of the tools we use internally, like [GraphiQL](https://github.com/graphql/graphiql), an in-browser IDE, documentation browser, and query runner. GraphQL has also seen production usage outside Facebook, in a project for the [_Financial Times_](https://www.youtube.com/watch?v=S0s935RKKB4) by consultancy [Red Badger](http://red-badger.com/). “GraphQL makes orchestrating data fetching so much simpler and it pretty much functions as a perfect isolation point between the front end and the back end” — Viktor Charypar, software engineer at Red Badger diff --git a/src/content/blog/2015-10-16-subscriptions.md b/src/content/blog/2015-10-16-subscriptions.md index 0610233bae..cef11c752b 100644 --- a/src/content/blog/2015-10-16-subscriptions.md +++ b/src/content/blog/2015-10-16-subscriptions.md @@ -39,7 +39,6 @@ subscription StoryLikeSubscription($input: StoryLikeSubscribeInput) { } ``` - The client would then send this subscription to the server, along with the value for the `$input` variable, which would contain information like the story ID to which we are subscribing: ```graphql @@ -70,13 +69,13 @@ fragment StoryLikeData on Story { What events could trigger that a change to the data fetched in that fragment? -* Someone likes the post. -* Someone unlikes the post. -* Someone who had liked the post deactivates their account (changes the like count down one, changes the like sentence to decrement the translated count). -* Someone who had liked the post reactivates their account (changes the like count up one, changes the like sentence to increment the translated count). -* Someone who had liked the post blocks you (cannot show them in the like sentence). -* Someone who had liked the post changes their name (need to update the text of the like sentence). -* Our internal ranking model for the ordering of names in the like sentence updates, and we should be listing a different person first (want to update the text of the like sentence). +- Someone likes the post. +- Someone unlikes the post. +- Someone who had liked the post deactivates their account (changes the like count down one, changes the like sentence to decrement the translated count). +- Someone who had liked the post reactivates their account (changes the like count up one, changes the like sentence to increment the translated count). +- Someone who had liked the post blocks you (cannot show them in the like sentence). +- Someone who had liked the post changes their name (need to update the text of the like sentence). +- Our internal ranking model for the ordering of names in the like sentence updates, and we should be listing a different person first (want to update the text of the like sentence). And that’s just the tip of the iceberg in terms of events; each of those events also becomes tricky when there are thousands of people subscribed, and millions of people who liked the post. Implementing live queries for this set of data proved to be immensely complicated. diff --git a/src/content/blog/2016-04-19-mocking.md b/src/content/blog/2016-04-19-mocking.md index 845b1cb1a0..daf7717ce8 100644 --- a/src/content/blog/2016-04-19-mocking.md +++ b/src/content/blog/2016-04-19-mocking.md @@ -45,16 +45,16 @@ Here’s how easy it is to create a mocked backend that will accept any valid Gr ```js // > npm install graphql-tools -import { mockServer } from 'graphql-tools'; -import schema from './mySchema.graphql'; +import { mockServer } from "graphql-tools" +import schema from "./mySchema.graphql" -const myMockServer = mockServer(schema); +const myMockServer = mockServer(schema) myMockServer.query(`{ allUsers: { id name } -}`); +}`) // returns // { @@ -128,11 +128,10 @@ 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" -import { mockServer, MockList } from 'graphql-tools'; -import casual from 'casual-browserify'; - -// The GraphQL schema. Described in more detail here: +// The GraphQL schema. Described in more detail here: // https://medium.com/apollo-stack/the-apollo-server-bc68762e93b const schema = ` type User { @@ -159,7 +158,7 @@ const schema = ` schema { query: RootQuery } -`; +` // Mock functions are defined per type and return an // object with some or all of the fields of that type. @@ -175,7 +174,7 @@ const server = mockServer(schema, { }), Task: () => ({ text: casual.words(10) }), User: () => ({ name: casual.name }), -}); +}) mockServer.query(` query tasksForUser{ @@ -198,16 +197,17 @@ query tasksForUser{ } } } -}`); +}`) ``` ## 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! If you want to fiddle around with the example, just click the "Download" button in the Launchpad UI. If you’re curious about how it works or want to see what other tools we’re building for GraphQL, then head over to [apollostack/graphql-tools](https://github.com/apollostack/graphql-tools). Pretty cool, right? All of that becomes possible by using a type system. And that’s only just the beginning — we‘re working on bridging the gap between mocking and the real thing so that your mock server can gradually turn into your real server as you add more functionality to it. -- - - +--- -*This post was originally published on [the Apollo Blog](https://medium.com/apollo-stack). We publish one or two posts every week, about the stuff we’re working on and thinking about.* +_This post was originally published on [the Apollo Blog](https://medium.com/apollo-stack). We publish one or two posts every week, about the stuff we’re working on and thinking about._ diff --git a/src/content/blog/2016-05-02-rest-api-graphql-wrapper.md b/src/content/blog/2016-05-02-rest-api-graphql-wrapper.md index 99006133d5..4469ecbcc6 100644 --- a/src/content/blog/2016-05-02-rest-api-graphql-wrapper.md +++ b/src/content/blog/2016-05-02-rest-api-graphql-wrapper.md @@ -34,19 +34,19 @@ npm install --save graphql Ultimately we will want to export a `GraphQLSchema` that we can use to resolve queries. ```js -import { GraphQLSchema } from 'graphql'; +import { GraphQLSchema } from "graphql" export default new GraphQLSchema({ query: QueryType, -}); +}) ``` At the root of all GraphQL schemas is a type called `query` whose definition we provide, and have specified here as `QueryType`. Let's build `QueryType` now – a type on which we will define all the possible things one might want to fetch. To replicate all of the functionality of our REST API, let's expose two fields on `QueryType`: -* an `allPeople` field – analogous to `/people/` -* a `person(id: String)` field – analogous to `/people/{ID}/` +- an `allPeople` field – analogous to `/people/` +- a `person(id: String)` field – analogous to `/people/{ID}/` Each field will consist of a return type, optional argument definitions, and a JavaScript method that resolves the data being queried for. @@ -169,7 +169,6 @@ export default new GraphQLSchema({ }); ``` - ### Using a client-side schema with Relay Normally, Relay will send its GraphQL queries to a server over HTTP. We can inject [@taion](https://github.com/taion/)'s custom `relay-local-schema` network layer to resolve queries using the schema we just built. Put this code wherever it's guaranteed to be executed before you mount your Relay app. @@ -219,18 +218,16 @@ npm install --save graphql-relay First, let's change the `id` field of `PersonType` into a GUID. To do this, we'll use the `globalIdField` helper from `graphql-relay`. ```js -import { - globalIdField, -} from 'graphql-relay'; +import { globalIdField } from "graphql-relay" const PersonType = new GraphQLObjectType({ - name: 'Person', - description: 'Somebody that you used to know', + name: "Person", + description: "Somebody that you used to know", fields: () => ({ - id: globalIdField('Person'), + id: globalIdField("Person"), /* ... */ }), -}); +}) ``` Behind the scenes `globalIdField` returns a field definition that resolves `id` to a `GraphQLString` by hashing together the typename `'Person'` and the id returned by the REST API. We can later use `fromGlobalId` to convert the result of this field back into `'Person'` and the REST API's id. @@ -239,28 +236,25 @@ Behind the scenes `globalIdField` returns a field definition that resolves `id` Another set of helpers from `graphql-relay` will give us a hand developing the node field. Your job is to supply the helper two functions: -* One function that can resolve an object given a GUID. -* One function that can resolve a typename given an object. +- One function that can resolve an object given a GUID. +- One function that can resolve a typename given an object. ```js -import { - fromGlobalId, - nodeDefinitions, -} from 'graphql-relay'; +import { fromGlobalId, nodeDefinitions } from "graphql-relay" const { nodeInterface, nodeField } = nodeDefinitions( globalId => { - const { type, id } = fromGlobalId(globalId); - if (type === 'Person') { - return fetchPersonByURL(`/people/${id}/`); + const { type, id } = fromGlobalId(globalId) + if (type === "Person") { + return fetchPersonByURL(`/people/${id}/`) } }, object => { - if (object.hasOwnProperty('username')) { - return 'Person'; + if (object.hasOwnProperty("username")) { + return "Person" } - }, -); + } +) ``` The object-to-typename resolver above is no marvel of engineering, but you get the idea. @@ -395,9 +389,9 @@ As a special note, make sure that your runtime offers native or polyfilled versi To create a `DataLoader` you supply a method that can resolve a list of objects given a list of keys. In our example, the keys are URLs at which we access our REST API. ```js -const personLoader = new DataLoader( - urls => Promise.all(urls.map(fetchPersonByURL)) -); +const personLoader = new DataLoader(urls => + Promise.all(urls.map(fetchPersonByURL)) +) ``` If this data loader sees a key more than once in its lifetime, it will return a memoized (cached) version of the response. diff --git a/src/content/blog/2017-11-08-programmable-web.md b/src/content/blog/2017-11-08-programmable-web.md index a482bcc091..46a2bdbe23 100644 --- a/src/content/blog/2017-11-08-programmable-web.md +++ b/src/content/blog/2017-11-08-programmable-web.md @@ -7,6 +7,6 @@ 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. +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 +[Read More »](https://www.programmableweb.com/news/graphql-moving-to-neutral-open-source-foundation/brief/2018/11/08) diff --git a/src/content/blog/2018-11-06-eweek.md b/src/content/blog/2018-11-06-eweek.md index 9b847d6bd9..8213189476 100644 --- a/src/content/blog/2018-11-06-eweek.md +++ b/src/content/blog/2018-11-06-eweek.md @@ -7,6 +7,6 @@ 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. +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 +[Read more »](https://www.eweek.com/development/graphql-api-specification-moving-forward-with-independent-foundation) diff --git a/src/content/blog/2018-11-06-infoworld.md b/src/content/blog/2018-11-06-infoworld.md index 7059d04f1c..6e6d4c951e 100644 --- a/src/content/blog/2018-11-06-infoworld.md +++ b/src/content/blog/2018-11-06-infoworld.md @@ -11,4 +11,4 @@ The Linux Foundation plans to host a foundation to support the GraphQL API proje 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 +[Read more »](https://www.infoworld.com/article/3318255/apis/graphql-gets-its-own-foundation.html) diff --git a/src/content/blog/2018-11-07-the-register.md b/src/content/blog/2018-11-07-the-register.md index e674b64824..53fdb49d6d 100644 --- a/src/content/blog/2018-11-07-the-register.md +++ b/src/content/blog/2018-11-07-the-register.md @@ -7,6 +7,6 @@ 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. +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 +[Read more »](https://www.theregister.co.uk/2018/11/07/graphql_on_linux/) diff --git a/src/content/blog/2018-11-12-channel-futures.md b/src/content/blog/2018-11-12-channel-futures.md index 68ac1f29f9..d9436165ff 100644 --- a/src/content/blog/2018-11-12-channel-futures.md +++ b/src/content/blog/2018-11-12-channel-futures.md @@ -13,5 +13,4 @@ The growing popularity and use of the open-source GraphQL API language by softwa 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 +[Read more »](https://www.channelfutures.com/open-source/graphql-api-query-language-growing-gets-own-support-foundation) diff --git a/src/content/blog/2019-03-12-joint-development-foundation.md b/src/content/blog/2019-03-12-joint-development-foundation.md index c4c864fe44..f96f7d3a21 100644 --- a/src/content/blog/2019-03-12-joint-development-foundation.md +++ b/src/content/blog/2019-03-12-joint-development-foundation.md @@ -7,11 +7,11 @@ 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/). +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 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. @@ -35,7 +35,7 @@ GraphQL is important for API development as it allows nested objects in a single “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 +“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. @@ -55,6 +55,6 @@ GraphQL is important for API development as it allows nested objects in a single “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 +“[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 +“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 index c1926bf58f..bbb1a6ac21 100644 --- a/src/content/blog/2019-10-28-interactive-landscape.md +++ b/src/content/blog/2019-10-28-interactive-landscape.md @@ -6,45 +6,45 @@ 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." +"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/). +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_ -## Member Quotes +"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)_ -"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 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._ -"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)* +"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_ -"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* +"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](/). +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.* +\# \# \# +_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 index c8205a956d..92eca22d0b 100644 --- a/src/content/blog/2019-10-31-linux-foundation-training.md +++ b/src/content/blog/2019-10-31-linux-foundation-training.md @@ -13,7 +13,7 @@ permalink: /blog/2019-10-31-linux-foundation-training-announces-free-online-cour 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* +"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. @@ -36,4 +36,4 @@ Linux is a registered trademark of Linus Torvalds. Clyde Seepersad The Linux Foundation 404-964-6973 -cseepersad@linuxfoundation.org +cseepersad@linuxfoundation.org diff --git a/src/content/blog/2020-06-13-season-of-docs.md b/src/content/blog/2020-06-13-season-of-docs.md index 83e2abc1e0..467be007b9 100644 --- a/src/content/blog/2020-06-13-season-of-docs.md +++ b/src/content/blog/2020-06-13-season-of-docs.md @@ -3,37 +3,31 @@ title: "GraphQL joins Google Season of Docs" tags: ["announcements"] layout: blog date: 2020-06-13 -byline: Obinna Ekwuno +byline: Obinna Ekwuno permalink: /blog/2020-06-13-graphql-joins-google-season-of-docs --- -# **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 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. +**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. -# **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 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?** - -## **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). +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) - - +Check out the [official technical writer guide.](https://developers.google.com/season-of-docs/docs/tech-writer-guide) ## **How long is this program?** diff --git a/src/content/blog/2020-06-30-gsoc-2020-naman.md b/src/content/blog/2020-06-30-gsoc-2020-naman.md index c685fc272f..dbc186ec8a 100644 --- a/src/content/blog/2020-06-30-gsoc-2020-naman.md +++ b/src/content/blog/2020-06-30-gsoc-2020-naman.md @@ -6,7 +6,9 @@ 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. diff --git a/src/content/blog/2020-09-11-newsletter-august-2020.md b/src/content/blog/2020-09-11-newsletter-august-2020.md index 7e252fc79e..82c51b596e 100644 --- a/src/content/blog/2020-09-11-newsletter-august-2020.md +++ b/src/content/blog/2020-09-11-newsletter-august-2020.md @@ -16,10 +16,11 @@ Many of these items are just in beginning discussions while some are further alo ## 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 +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. @@ -29,10 +30,10 @@ If you have use-cases for input polymorphism, please take a look - feedback is v ### [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. @@ -43,13 +44,13 @@ You can learn more by reading about it on his [blog post](https://the-guild.dev/ ## 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). +- 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! diff --git a/src/content/blog/2020-09-21-gsod-2020-carolyn.md b/src/content/blog/2020-09-21-gsod-2020-carolyn.md index a4cdc2f3e3..9b28fcf27d 100644 --- a/src/content/blog/2020-09-21-gsod-2020-carolyn.md +++ b/src/content/blog/2020-09-21-gsod-2020-carolyn.md @@ -7,26 +7,26 @@ 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. +> [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. +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. +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. +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. +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. +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). +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! diff --git a/src/content/blog/2020-10-15-newsletter-september-2020.md b/src/content/blog/2020-10-15-newsletter-september-2020.md index 2321a47875..3c15fc6f4c 100644 --- a/src/content/blog/2020-10-15-newsletter-september-2020.md +++ b/src/content/blog/2020-10-15-newsletter-september-2020.md @@ -18,8 +18,9 @@ Many of these items are just in beginning discussions while some are further alo ### 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. + +- 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 @@ -31,10 +32,10 @@ The issue was first raised around the ambiguity of the term "query" as used in t ### 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 +- [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: @@ -42,16 +43,16 @@ Vscode-graphql, which uses the official GraphQL Language Server, has now become ## 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. +- 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! diff --git a/src/content/blog/2020-11-12-newsletter-october-2020.md b/src/content/blog/2020-11-12-newsletter-october-2020.md index 145d595450..46e6791826 100644 --- a/src/content/blog/2020-11-12-newsletter-october-2020.md +++ b/src/content/blog/2020-11-12-newsletter-october-2020.md @@ -23,7 +23,7 @@ The WG discussed the best way to remove this ambiguity and how to move forward. 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) +### [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. @@ -33,23 +33,22 @@ The aim of the Tagged type is to introduce a form of polymorphism in GraphQL tha ## 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? +- [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). +- **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 index 0aceaa61a9..5186f6cb25 100644 --- a/src/content/blog/2020-12-08-defer-stream.md +++ b/src/content/blog/2020-12-08-defer-stream.md @@ -11,9 +11,9 @@ permalink: /blog/2020-12-08-improving-latency-with-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. +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. +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: @@ -28,9 +28,9 @@ query { } fragment HomeworldFragment on Person { - homeworld { - name - } + homeworld { + name + } } ``` @@ -40,7 +40,7 @@ fragment HomeworldFragment on Person { ```json { - "data": { + "data": { "person": { "name": "Luke Skywalker" } @@ -55,7 +55,7 @@ fragment HomeworldFragment on Person { { "label": "homeworldDefer", "path": ["person"], - "data": { + "data": { "homeworld": { "name": "Tatooine" } @@ -86,7 +86,7 @@ query { ```json { - "data": { + "data": { "person": { "name": "Luke Skywalker", "films": [ @@ -105,7 +105,7 @@ query { { "label": "filmsStream", "path": ["person", "films", 2], - "data": { + "data": { "title": "Return of the Jedi" }, "hasNext": true @@ -118,22 +118,22 @@ query { { "label": "filmsStream", "path": ["person", "films", 3], - "data": { + "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. +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-wg/blob/main/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) +- [The @defer/@stream RFC](https://github.com/graphql/graphql-wg/blob/main/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 index c61dc30593..6a2bf49611 100644 --- a/src/content/blog/2021-02-15-newsletter-february-2021.md +++ b/src/content/blog/2021-02-15-newsletter-february-2021.md @@ -17,7 +17,7 @@ GraphQL reached new heights in 2020 and is only poised to continue it’s meteor 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) +### [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). @@ -29,34 +29,34 @@ The official experimental branch of graphql-js/express-graphql. The WG is workin 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 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 +### 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/) +- [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 +- Asia’s largest [GraphQL conference](https://graphql.asia/) is back! February 24th & 25th ## Get Involved! diff --git a/src/content/blog/2021-03-31-newsletter-march-2021.md b/src/content/blog/2021-03-31-newsletter-march-2021.md index ee57badfe0..26662f7c71 100644 --- a/src/content/blog/2021-03-31-newsletter-march-2021.md +++ b/src/content/blog/2021-03-31-newsletter-march-2021.md @@ -23,15 +23,15 @@ The meeting agendas and minutes are open and available in [meetings/](https://gi 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. +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. +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. +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** @@ -39,18 +39,18 @@ Oneof Input Objects are a special variant of Input Objects where the type system ## 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) +- 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 +- The GraphQL community will come together once again for [GraphQL Summit](https://summit.graphql.com/) April 7th & 8th ## Get Involved! diff --git a/src/content/blog/2021-04-30-newsletter-april-2021.md b/src/content/blog/2021-04-30-newsletter-april-2021.md index fe4631ef75..e52a5b819c 100644 --- a/src/content/blog/2021-04-30-newsletter-april-2021.md +++ b/src/content/blog/2021-04-30-newsletter-april-2021.md @@ -31,27 +31,26 @@ Representing almost 6 million downloads per week. TypeScript is in need of addit ### 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. +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/) +- [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. +- [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! diff --git a/src/content/blog/2021-06-30-newsletter-june-2021.md b/src/content/blog/2021-06-30-newsletter-june-2021.md index a19421f16e..46d328a097 100644 --- a/src/content/blog/2021-06-30-newsletter-june-2021.md +++ b/src/content/blog/2021-06-30-newsletter-june-2021.md @@ -25,15 +25,13 @@ The meeting agendas and minutes are open and available in [meetings/](https://gi The next release is in the final stages of review and is anticipated to be released soon. Details on the release are TBD. - ## Schema Coordinates update -The WG is evaluating how to use Schema Coordinates (e.g. what can we improve by using schema coordinates, and is Looking for support in advancing from Draft to Accepted. - +The WG is evaluating how to use Schema Coordinates (e.g. what can we improve by using schema coordinates, and is Looking for support in advancing from Draft to Accepted. ## Full unicode support -The WG is looking for support in advancing this iteration from Proposal to Draft. Most notably full unicode is already supported today, albeit without having explicit tests for it. +The WG is looking for support in advancing this iteration from Proposal to Draft. Most notably full unicode is already supported today, albeit without having explicit tests for it. The only new code that is added is the verification of the surrogate pairs. The current implementation allows for invalid surrogate pairs. @@ -43,7 +41,6 @@ For the past 5+ years, Relay has had the [@arguments directive](https://relay.de This means Relay can get away with having user-written fragments that are freed from operation-defined knowledge: Relay's fragments can be provided with variable values that were never defined at the operation level, to use when resolving arguments. - ## Roundtable discussion on @defer/@stream Read the lengthy and informative conversation [here](https://github.com/graphql/graphql-wg/blob/main/notes/2021-06-03.md), or watch on Youtube [here](https://www.youtube.com/watch?v=d4HhIo82Whg&list=PLP1igyLx8foH30_sDnEZnxV_8pYW3SDtb&index=1). @@ -54,7 +51,7 @@ The working group will be converting as much of graphql-js to TypeScript as poss ### Default Value Coercion RFC -The WG has spent several weeks working to integrate the default value changes into GraphQL Ruby, which has resulted in several architectural discussions and some bug reports. +The WG has spent several weeks working to integrate the default value changes into GraphQL Ruby, which has resulted in several architectural discussions and some bug reports. ### Glossary RFC @@ -64,23 +61,18 @@ The purpose of this RFC is to add clarity and precision, especially after the ma Used by many including Yelp and Netflix, the proposal is to allow queries that can include a non-null designator (!) to indicate that a field should be treated non-nullable and if it returns null it should escalate following the standard GraphQL error bubbling. - ## In Other News... -* Database, Trends & Applications: [Hasura Adds the Ability to Access Existing Data and Move it with GraphQL API](https://www.dbta.com/Editorial/News-Flashes/Hasura-Adds-the-Ability-to-Access-Existing-Data-and-Move-it-with-GraphQL-API-147680.aspx) -* InfoQ: [Rebuilding Twitter's Public API](https://www.infoq.com/presentations/twitter-public-api/) -* ZDNet: [MuleSoft adds DataGraph to Anypoint Platform to streamline API requests](https://www.zdnet.com/article/mulesoft-adds-datagraph-to-anypoint-platform-streamlining-api-requests/) - +- Database, Trends & Applications: [Hasura Adds the Ability to Access Existing Data and Move it with GraphQL API](https://www.dbta.com/Editorial/News-Flashes/Hasura-Adds-the-Ability-to-Access-Existing-Data-and-Move-it-with-GraphQL-API-147680.aspx) +- InfoQ: [Rebuilding Twitter's Public API](https://www.infoq.com/presentations/twitter-public-api/) +- ZDNet: [MuleSoft adds DataGraph to Anypoint Platform to streamline API requests](https://www.zdnet.com/article/mulesoft-adds-datagraph-to-anypoint-platform-streamlining-api-requests/) ## Upcoming Events: -* [GraphQL Conf. 2021](https://graphqlconf.org/) - September 29th - +- [GraphQL Conf. 2021](https://graphqlconf.org/) - September 29th ## 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://graphql.org/foundation/join). If you have questions about membership, please send an email to membership@graphql.org. - - diff --git a/src/content/code/language-support/ballerina/client/ballerina-graphql.md b/src/content/code/language-support/ballerina/client/ballerina-graphql.md index 4c0b88a027..404990ac3f 100644 --- a/src/content/code/language-support/ballerina/client/ballerina-graphql.md +++ b/src/content/code/language-support/ballerina/client/ballerina-graphql.md @@ -27,5 +27,6 @@ public function main() returns error? { ``` ## Features + - Dependently-typed response retrieval with Ballerina type inferring - Custom client generation support diff --git a/src/content/code/language-support/ballerina/server/ballerina-graphql.md b/src/content/code/language-support/ballerina/server/ballerina-graphql.md index 94777f7100..b1010190a8 100644 --- a/src/content/code/language-support/ballerina/server/ballerina-graphql.md +++ b/src/content/code/language-support/ballerina/server/ballerina-graphql.md @@ -21,6 +21,7 @@ service /graphql on new graphql:Listener(9090) { ``` ## Features + - Built with Ballerina `service` and `listener` model, which are first-class citizens in Ballerina - Supports subscriptions over websocket (No additional libraries needed) - Supports file upload diff --git a/src/content/code/language-support/c-c/tools/libgraphqlparser.md b/src/content/code/language-support/c-c/tools/libgraphqlparser.md index e3681c82fa..c64299f523 100644 --- a/src/content/code/language-support/c-c/tools/libgraphqlparser.md +++ b/src/content/code/language-support/c-c/tools/libgraphqlparser.md @@ -4,5 +4,3 @@ 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 index df6e016432..dba3ece524 100644 --- a/src/content/code/language-support/c-net/client/graphql-client.md +++ b/src/content/code/language-support/c-net/client/graphql-client.md @@ -4,5 +4,3 @@ 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 index 5042b5859c..bf6207842a 100644 --- 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 @@ -4,5 +4,3 @@ 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 index 2fa58640f7..c591e715de 100644 --- a/src/content/code/language-support/c-net/client/sahb-graphqlclient.md +++ b/src/content/code/language-support/c-net/client/sahb-graphqlclient.md @@ -4,5 +4,3 @@ 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 index b54c164cfa..f18451aae7 100644 --- a/src/content/code/language-support/c-net/client/strawberry-shake.md +++ b/src/content/code/language-support/c-net/client/strawberry-shake.md @@ -1,6 +1,6 @@ --- name: Strawberry Shake -description: Strawberry Shake is a open-source reactive GraphQL client for .NET +description: Strawberry Shake is a open-source reactive GraphQL client for .NET url: https://chillicream.com/docs/strawberryshake/ github: ChilliCream/hotchocolate --- @@ -16,7 +16,7 @@ You can use Strawberry Shake to: ```csharp client.GetHero .Watch(ExecutionStrategy.CacheFirst) - .Subscribe(result => + .Subscribe(result => { Console.WriteLine(result.Data.Name); }) diff --git a/src/content/code/language-support/c-net/client/zeroql.md b/src/content/code/language-support/c-net/client/zeroql.md index dbe5ab4fa1..d56c694596 100644 --- a/src/content/code/language-support/c-net/client/zeroql.md +++ b/src/content/code/language-support/c-net/client/zeroql.md @@ -1,6 +1,6 @@ --- name: ZeroQL -description: ZeroQL is a open-source GraphQL client for C# +description: ZeroQL is a open-source GraphQL client for C# url: https://github.com/byme8/ZeroQL github: byme8/ZeroQL --- 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 index d7d391c19e..e5a3438a7e 100644 --- a/src/content/code/language-support/c-net/server/entity-graphql.md +++ b/src/content/code/language-support/c-net/server/entity-graphql.md @@ -17,7 +17,7 @@ public class Startup { // modify the schema (add/remove fields or types), add other services }); } - + public void Configure(IApplicationBuilder app, DemoContext db) { app.UseRouting(); 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 index 6ac2e840bb..a117030ede 100644 --- a/src/content/code/language-support/c-net/server/graphql-dotnet.md +++ b/src/content/code/language-support/c-net/server/graphql-dotnet.md @@ -30,5 +30,5 @@ public class Program 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 index 9c5d76e671..e778b26279 100644 --- a/src/content/code/language-support/c-net/server/graphql-net.md +++ b/src/content/code/language-support/c-net/server/graphql-net.md @@ -4,5 +4,3 @@ 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/ngraphql.md b/src/content/code/language-support/c-net/server/ngraphql.md index f9a94187b0..dfa47c31a3 100644 --- a/src/content/code/language-support/c-net/server/ngraphql.md +++ b/src/content/code/language-support/c-net/server/ngraphql.md @@ -1,6 +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. +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 index 2c8b73838a..a825d815ca 100644 --- a/src/content/code/language-support/clojure/client/regraph.md +++ b/src/content/code/language-support/clojure/client/regraph.md @@ -4,5 +4,3 @@ description: A GraphQL client implemented in Clojurescript with support for webs url: https://github.com/oliyh/re-graph/ github: oliyh/re-graph --- - - diff --git a/src/content/code/language-support/clojure/server/graphql-clj.md b/src/content/code/language-support/clojure/server/graphql-clj.md index e7baeea859..eb76c7ed59 100644 --- a/src/content/code/language-support/clojure/server/graphql-clj.md +++ b/src/content/code/language-support/clojure/server/graphql-clj.md @@ -6,6 +6,7 @@ github: tendant/graphql-clj --- Code that executes a hello world GraphQL query with `graphql-clj`: + ```clojure (def schema "type QueryRoot { diff --git a/src/content/code/language-support/clojure/server/lacinia.md b/src/content/code/language-support/clojure/server/lacinia.md index 0bb3f22aed..c4e3a1243f 100644 --- a/src/content/code/language-support/clojure/server/lacinia.md +++ b/src/content/code/language-support/clojure/server/lacinia.md @@ -4,5 +4,3 @@ description: A full implementation of the GraphQL specification that aims to mai 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 index da50567414..f7fd34a6aa 100644 --- a/src/content/code/language-support/d/server/graphqld.md +++ b/src/content/code/language-support/d/server/graphqld.md @@ -4,5 +4,3 @@ 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 index ec360e651f..c73b9464b7 100644 --- a/src/content/code/language-support/elixir/client/common-graphql-client.md +++ b/src/content/code/language-support/elixir/client/common-graphql-client.md @@ -4,5 +4,3 @@ 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 index c77f230742..1c3e7a6ec0 100644 --- a/src/content/code/language-support/elixir/client/neuron.md +++ b/src/content/code/language-support/elixir/client/neuron.md @@ -4,5 +4,3 @@ 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 index bc657a90b8..ab928cfeb4 100644 --- a/src/content/code/language-support/elixir/server/absinthe.md +++ b/src/content/code/language-support/elixir/server/absinthe.md @@ -4,5 +4,3 @@ 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 index 4ec2bf84b1..bbab442504 100644 --- a/src/content/code/language-support/elixir/server/graphql-elixir.md +++ b/src/content/code/language-support/elixir/server/graphql-elixir.md @@ -4,5 +4,3 @@ 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 index 0850dba825..2f7e7ab328 100644 --- a/src/content/code/language-support/elm/client/dillonkearns-elm-graphql.md +++ b/src/content/code/language-support/elm/client/dillonkearns-elm-graphql.md @@ -4,5 +4,3 @@ description: Library and command-line code generator to create type-safe Elm cod 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 index 9bb34ad549..74f8cc0a21 100644 --- a/src/content/code/language-support/erlang/server/graphql-erlang.md +++ b/src/content/code/language-support/erlang/server/graphql-erlang.md @@ -4,5 +4,3 @@ 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 index ffaa019b6b..f821eb1a4a 100644 --- a/src/content/code/language-support/flutter/client/ferry.md +++ b/src/content/code/language-support/flutter/client/ferry.md @@ -4,5 +4,3 @@ 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 index fa0eb8e3aa..ebdfb17a74 100644 --- a/src/content/code/language-support/flutter/client/graphql.md +++ b/src/content/code/language-support/flutter/client/graphql.md @@ -4,5 +4,3 @@ 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 index 35bdad9438..4c4e4e8fac 100644 --- a/src/content/code/language-support/go/client/go-graphql-client.md +++ b/src/content/code/language-support/go/client/go-graphql-client.md @@ -4,5 +4,3 @@ 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 index 3e778eac5d..a79b4284f4 100644 --- a/src/content/code/language-support/go/client/graphql.md +++ b/src/content/code/language-support/go/client/graphql.md @@ -4,5 +4,3 @@ 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 index a2f35489d8..650a581c7a 100644 --- a/src/content/code/language-support/go/client/machinebox-graphql.md +++ b/src/content/code/language-support/go/client/machinebox-graphql.md @@ -4,5 +4,3 @@ 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 index 80b2f9d0f2..89638698fd 100644 --- a/src/content/code/language-support/go/server/99designs-gqlgen.md +++ b/src/content/code/language-support/go/server/99designs-gqlgen.md @@ -4,5 +4,3 @@ 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/andrewwphillips-eggql.md b/src/content/code/language-support/go/server/andrewwphillips-eggql.md index 0cfcbebdb7..881fe1c00d 100644 --- a/src/content/code/language-support/go/server/andrewwphillips-eggql.md +++ b/src/content/code/language-support/go/server/andrewwphillips-eggql.md @@ -5,7 +5,7 @@ url: https://github.com/AndrewWPhillips/eggql github: andrewwphillips/eggql --- -The purpose of Eggql is to make it as simple as possible to create a GraphQL server. You don't need to create GraphQL schema (though you can view the schema that is created if interested). It is currently in beta release but is a complete implementation of a GraphQL server apart from subscriptions. +The purpose of Eggql is to make it as simple as possible to create a GraphQL server. You don't need to create GraphQL schema (though you can view the schema that is created if interested). It is currently in beta release but is a complete implementation of a GraphQL server apart from subscriptions. Just to be clear it supports all of these GraphQL features: arguments (including defaults), objects/lists/enums/input/interface/union types, aliases, fragments, variables, directives, mutations, inline fragments, descriptions, introspection and custom scalars. @@ -13,7 +13,6 @@ Tests (jMeter) show that it is as fast or faster than other Go implementations f To run an `eggql` hello world server just build and run this Go program: - ```Go package main @@ -25,7 +24,7 @@ func main() { } ``` -This creates a root Query object with a single `message` field. To test it send a query with curl: +This creates a root Query object with a single `message` field. To test it send a query with curl: ```sh $ curl -XPOST -d '{"query": "{ message }"}' localhost:80/graphql diff --git a/src/content/code/language-support/go/server/appointy-jaal.md b/src/content/code/language-support/go/server/appointy-jaal.md index 28095e284e..547800e08d 100644 --- a/src/content/code/language-support/go/server/appointy-jaal.md +++ b/src/content/code/language-support/go/server/appointy-jaal.md @@ -4,5 +4,3 @@ 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 index 7bedb66292..2ef840d12b 100644 --- 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 @@ -4,5 +4,3 @@ description: GraphQL server with a focus on ease of use. 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 index 6ef7da936f..b92f8a5460 100644 --- a/src/content/code/language-support/go/server/graphql-go.md +++ b/src/content/code/language-support/go/server/graphql-go.md @@ -4,5 +4,3 @@ 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 index 423b01719d..58a2298613 100644 --- a/src/content/code/language-support/go/server/graphql-relay-go.md +++ b/src/content/code/language-support/go/server/graphql-relay-go.md @@ -4,5 +4,3 @@ description: A Go/Golang library to help construct a graphql-go server supportin 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 index 370cd634e2..d05700c46c 100644 --- a/src/content/code/language-support/go/server/samsarahq-thunder.md +++ b/src/content/code/language-support/go/server/samsarahq-thunder.md @@ -4,5 +4,3 @@ description: A GraphQL implementation with easy schema building, live queries, a url: https://github.com/samsarahq/thunder github: samsarahq/thunder --- - - diff --git a/src/content/code/language-support/go/server/wundergraph-graphql-go-tools.md b/src/content/code/language-support/go/server/wundergraph-graphql-go-tools.md index a17a46ee8f..40c713dc1f 100644 --- a/src/content/code/language-support/go/server/wundergraph-graphql-go-tools.md +++ b/src/content/code/language-support/go/server/wundergraph-graphql-go-tools.md @@ -4,22 +4,20 @@ description: A collection of tools for building GraphQL Servers, Gateways, Proxy url: https://github.com/wundergraph/graphql-go-tools github: wundergraph/graphql-go-tools --- + graphql-go-tools implements all basic blocks for building GraphQL Servers, Gateways and Proxy Servers. From lexing, parsing, validation, normalization, all the way up to query planning and execution. - It can also be understood as a GraphQL Compiler, with the ability to add your own backends. Just by implementing a few interfaces, you're able to teach the compiler how to talk GraphQL to any backend. - The following backends are already implemented: -[GraphQL](https://github.com/wundergraph/graphql-go-tools/tree/master/pkg/engine/datasource/graphql_datasource), with support for Apollo Federation / Supergraph. +[GraphQL](https://github.com/wundergraph/graphql-go-tools/tree/master/pkg/engine/datasource/graphql_datasource), with support for Apollo Federation / Supergraph. [Databases](https://github.com/wundergraph/wundergraph/tree/main/pkg/datasources/database): PostgreSQL, MySQL, SQLite, CockroachDB, MongoDB, SQLServer, [OpenAPI / REST](https://github.com/wundergraph/wundergraph/tree/main/pkg/datasources/oas) and [Kafka](https://github.com/wundergraph/graphql-go-tools/tree/master/pkg/engine/datasource/kafka_datasource). - To get a sense on how to implement a new backend, check out the [Static Data Source](https://github.com/wundergraph/graphql-go-tools/tree/master/pkg/engine/datasource/staticdatasource), as it's the simplest one. -It's used in production by many enterprises for multiple years now, battle tested and actively maintained. \ No newline at end of file +It's used in production by many enterprises for multiple years now, battle tested and actively maintained. diff --git a/src/content/code/language-support/go/tools/graphjin.md b/src/content/code/language-support/go/tools/graphjin.md index 464e5bac94..00dedd49ee 100644 --- a/src/content/code/language-support/go/tools/graphjin.md +++ b/src/content/code/language-support/go/tools/graphjin.md @@ -4,5 +4,3 @@ description: An instant GraphQL to SQL compiler. Use as a standalone service or url: https://github.com/dosco/graphjin github: dosco/graphjin --- - - diff --git a/src/content/code/language-support/groovy/server/gql.md b/src/content/code/language-support/groovy/server/gql.md index fa32e99e5a..7d1cfa2810 100644 --- a/src/content/code/language-support/groovy/server/gql.md +++ b/src/content/code/language-support/groovy/server/gql.md @@ -4,5 +4,3 @@ 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 index cec77a5e8e..2da8c6cde5 100644 --- a/src/content/code/language-support/haskell/client/morpheus-graphql-client.md +++ b/src/content/code/language-support/haskell/client/morpheus-graphql-client.md @@ -4,5 +4,3 @@ 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/graphql-w-persistent.md b/src/content/code/language-support/haskell/server/graphql-w-persistent.md index 38114183d0..afea3da582 100644 --- a/src/content/code/language-support/haskell/server/graphql-w-persistent.md +++ b/src/content/code/language-support/haskell/server/graphql-w-persistent.md @@ -1,5 +1,5 @@ --- -name: graphql-w-persistent +name: graphql-w-persistent description: Complete set of library tools to abstract relational database schemas with SQL, query with GraphQL, and return GraphQL results url: https://hackage.haskell.org/package/graphql-w-persistent github: jasonsychau/graphql-w-persistent diff --git a/src/content/code/language-support/haskell/server/morpheus-graphql.md b/src/content/code/language-support/haskell/server/morpheus-graphql.md index a53e7216ea..b274a09b99 100644 --- a/src/content/code/language-support/haskell/server/morpheus-graphql.md +++ b/src/content/code/language-support/haskell/server/morpheus-graphql.md @@ -21,7 +21,6 @@ type Query { } ``` - ```haskell {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DuplicateRecordFields #-} diff --git a/src/content/code/language-support/java-kotlin-android/client/apollo-kotlin.md b/src/content/code/language-support/java-kotlin-android/client/apollo-kotlin.md index dc225f787d..2fc12654ca 100644 --- a/src/content/code/language-support/java-kotlin-android/client/apollo-kotlin.md +++ b/src/content/code/language-support/java-kotlin-android/client/apollo-kotlin.md @@ -7,16 +7,16 @@ github: apollographql/apollo-kotlin Apollo Kotlin (formerly known as Apollo Android) is a GraphQL client with support for Android, Java8+, iOS and Kotlin multiplatform in general. It features: -* Java and Kotlin Multiplatform code generation -* Queries, Mutations and Subscriptions -* Reflection-free parsing -* Normalized cache -* Custom scalar types -* HTTP cache -* Auto Persisted Queries -* Query batching -* File uploads -* Espresso IdlingResource -* Fake models for tests -* AppSync and graphql-ws websockets -* GraphQL AST parser +- Java and Kotlin Multiplatform code generation +- Queries, Mutations and Subscriptions +- Reflection-free parsing +- Normalized cache +- Custom scalar types +- HTTP cache +- Auto Persisted Queries +- Query batching +- File uploads +- Espresso IdlingResource +- Fake models for tests +- AppSync and graphql-ws websockets +- GraphQL AST parser 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 index 7bb48c96ee..420653643a 100644 --- 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 @@ -39,7 +39,7 @@ query HelloWorldQuery { } ``` -Plugin will generate classes that are simple POJOs implementing GraphQLClientRequest interface and represent a GraphQL request. +Plugin will generate classes that are simple POJOs implementing GraphQLClientRequest interface and represent a GraphQL request. ```kotlin package com.example.generated 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 index 2840e6a29a..f44da30b93 100644 --- a/src/content/code/language-support/java-kotlin-android/client/nodes.md +++ b/src/content/code/language-support/java-kotlin-android/client/nodes.md @@ -4,5 +4,3 @@ description: A GraphQL JVM Client designed for constructing queries from standar 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 index 7f0dd48ca3..d0226d7bb6 100644 --- 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 @@ -5,60 +5,54 @@ url: https://github.com/graphql-calculator/graphql-calculator github: graphql-calculator/graphql-calculator --- -GraphQL Calculator is a lightweight graphql calculation engine, +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 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 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 - } +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-kickstart.md b/src/content/code/language-support/java-kotlin-android/server/graphql-java-kickstart.md index 78d3dd62ec..bcae677e63 100644 --- a/src/content/code/language-support/java-kotlin-android/server/graphql-java-kickstart.md +++ b/src/content/code/language-support/java-kotlin-android/server/graphql-java-kickstart.md @@ -5,16 +5,14 @@ url: https://www.graphql-java-kickstart.com/ github: graphql-java-kickstart/graphql-spring-boot --- -The GraphQL Spring Boot turns any Spring Boot application into a GraphQL Server - +The GraphQL Spring Boot turns any Spring Boot application into a GraphQL Server Started includes features such as: -* Use a schema-driven API with the help of [GraphQL Java Tools](https://github.com/graphql-java-kickstart/graphql-java-tools) -* Optionally choose to use an annotation driven schema with the help of [GraphQL-Java Annotations](https://github.com/Enigmatis/graphql-java-annotations) -* Embedded [GraphiQL](https://github.com/graphql/graphiql) tool for schema introspection and query debugging -* Embedded [GraphQL Playground](https://github.com/prisma/graphql-playground) tool for schema introspection and query debugging -* Embedded the [GraphQL Voyager](https://github.com/APIs-guru/graphql-voyager) tool to represent your GraphQL API as an interactive graph - +- Use a schema-driven API with the help of [GraphQL Java Tools](https://github.com/graphql-java-kickstart/graphql-java-tools) +- Optionally choose to use an annotation driven schema with the help of [GraphQL-Java Annotations](https://github.com/Enigmatis/graphql-java-annotations) +- Embedded [GraphiQL](https://github.com/graphql/graphiql) tool for schema introspection and query debugging +- Embedded [GraphQL Playground](https://github.com/prisma/graphql-playground) tool for schema introspection and query debugging +- Embedded the [GraphQL Voyager](https://github.com/APIs-guru/graphql-voyager) tool to represent your GraphQL API as an interactive graph -See [GraphQL Java Kickstart Getting Started](https://www.graphql-java-kickstart.com/spring-boot/getting-started/) for how to get started. \ No newline at end of file +See [GraphQL Java Kickstart Getting Started](https://www.graphql-java-kickstart.com/spring-boot/getting-started/) for how to get started. diff --git a/src/content/code/language-support/java-kotlin-android/server/jimmer.md b/src/content/code/language-support/java-kotlin-android/server/jimmer.md index ea81a9ab77..c7ac57e176 100644 --- a/src/content/code/language-support/java-kotlin-android/server/jimmer.md +++ b/src/content/code/language-support/java-kotlin-android/server/jimmer.md @@ -17,11 +17,11 @@ github: babyfish-ct/jimmer 5. More powerful than other popular ORM solutions. - Three aspects should be considered in ORM design: + Three aspects should be considered in ORM design: a. Query. b. Update. - c. Cache. + c. Cache. Each aspect is aimed at object trees with arbitrary depth rather than simple objects. This distinctive design brings convenience unmatched by other popular solutions. @@ -35,4 +35,4 @@ github: babyfish-ct/jimmer - GraphQL example for Java: https://github.com/babyfish-ct/jimmer/tree/main/example/java/jimmer-sql-graphql -- GraphQL example for Kotlin: https://github.com/babyfish-ct/jimmer/tree/main/example/kotlin/jimmer-sql-graphql-kt \ No newline at end of file +- GraphQL example for Kotlin: https://github.com/babyfish-ct/jimmer/tree/main/example/kotlin/jimmer-sql-graphql-kt 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 index bd73f061f1..c664f126c9 100644 --- a/src/content/code/language-support/java-kotlin-android/server/kgraphql.md +++ b/src/content/code/language-support/java-kotlin-android/server/kgraphql.md @@ -48,7 +48,7 @@ KGraphQL has a Ktor plugin which gives you a fully functional GraphQL server wit ```kotlin fun Application.module() { install(GraphQL) { - playground = true + playground = true schema { query("hello") { resolver { -> "World!" } diff --git a/src/content/code/language-support/java-kotlin-android/server/mp-graphql.md b/src/content/code/language-support/java-kotlin-android/server/mp-graphql.md index c37a8fe52e..c05a9333a4 100644 --- a/src/content/code/language-support/java-kotlin-android/server/mp-graphql.md +++ b/src/content/code/language-support/java-kotlin-android/server/mp-graphql.md @@ -5,30 +5,29 @@ url: https://github.com/eclipse/microprofile-graphql github: eclipse/microprofile-graphql --- -MicroProfile GraphQL is a GraphQL server and client specification for building GraphQL applications. It's unique -annotation-based API approach enables rapid application development. Applications coded to the MP GraphQL APIs are -portable, and can be deployed into Java server runtimes such as [Open Liberty](https://openliberty.io/), +MicroProfile GraphQL is a GraphQL server and client specification for building GraphQL applications. It's unique +annotation-based API approach enables rapid application development. Applications coded to the MP GraphQL APIs are +portable, and can be deployed into Java server runtimes such as [Open Liberty](https://openliberty.io/), [Quarkus](https://quarkus.io/), [Helidon](https://helidon.io/) and [Wildfly](https://www.wildfly.org/). This means that your applications can make use of other [Jakarta](https://jakarta.ee/) and [MicroProfile](https://microprofile.io/) technologies. MP GraphQL features include: -* Annotation-based APIs -* Integration with Jakarta CDI -* Type-safe and dynamic client APIs -* Exception handling -* Easy integration with Jakarta and MicroProfile technologies +- Annotation-based APIs +- Integration with Jakarta CDI +- Type-safe and dynamic client APIs +- Exception handling +- Easy integration with Jakarta and MicroProfile technologies Want to get started? Check out these resouces: -* Learn how to [create and deploy a server side app in Open Liberty](https://openliberty.io/guides/microprofile-graphql.html). -* Learn how to [create a client application in Open Liberty](https://openliberty.io/guides/graphql-client.html). -* Learn how to [create and deploy a server side app in Quarkus](https://quarkus.io/guides/smallrye-graphql). -* Quick tutorial to [build a simple sample weather application](https://dzone.com/articles/have-it-your-way-with-microprofile-graphql). +- Learn how to [create and deploy a server side app in Open Liberty](https://openliberty.io/guides/microprofile-graphql.html). +- Learn how to [create a client application in Open Liberty](https://openliberty.io/guides/graphql-client.html). +- Learn how to [create and deploy a server side app in Quarkus](https://quarkus.io/guides/smallrye-graphql). +- Quick tutorial to [build a simple sample weather application](https://dzone.com/articles/have-it-your-way-with-microprofile-graphql). Or these videos: -* [Integrating GraphQL and JPA](https://www.youtube.com/watch?v=RzrkjuA3LvU) -* [Writing Queryable APIs with MP GraphQL](https://www.youtube.com/watch?v=OOnpUeblVPM) - +- [Integrating GraphQL and JPA](https://www.youtube.com/watch?v=RzrkjuA3LvU) +- [Writing Queryable APIs with MP GraphQL](https://www.youtube.com/watch?v=OOnpUeblVPM) diff --git a/src/content/code/language-support/java-kotlin-android/server/netflix-dgs.md b/src/content/code/language-support/java-kotlin-android/server/netflix-dgs.md index 5b281b8d5f..9eb2dc4fb5 100644 --- a/src/content/code/language-support/java-kotlin-android/server/netflix-dgs.md +++ b/src/content/code/language-support/java-kotlin-android/server/netflix-dgs.md @@ -7,17 +7,16 @@ github: netflix/dgs-framework The DGS Framework (Domain Graph Service) is a GraphQL server framework for Spring Boot, developed by Netflix. - Features include: -* Annotation based Spring Boot programming model -* Test framework for writing query tests as unit tests -* Gradle Code Generation plugin to create types from schema -* Easy integration with GraphQL Federation -* Integration with Spring Security -* GraphQL subscriptions (WebSockets and SSE) -* File uploads -* Error handling -* Many extension points +- Annotation based Spring Boot programming model +- Test framework for writing query tests as unit tests +- Gradle Code Generation plugin to create types from schema +- Easy integration with GraphQL Federation +- Integration with Spring Security +- GraphQL subscriptions (WebSockets and SSE) +- File uploads +- Error handling +- Many extension points See [DGS Framework Getting Started](https://netflix.github.io/dgs/getting-started/) for how to get started. diff --git a/src/content/code/language-support/java-kotlin-android/server/spring-graphql.md b/src/content/code/language-support/java-kotlin-android/server/spring-graphql.md index 1b2bc2f63f..a239979514 100644 --- a/src/content/code/language-support/java-kotlin-android/server/spring-graphql.md +++ b/src/content/code/language-support/java-kotlin-android/server/spring-graphql.md @@ -4,17 +4,18 @@ description: Spring for GraphQL provides support for Spring applications built o url: https://spring.io/projects/spring-graphql github: spring-projects/spring-graphql --- + Spring for GraphQL provides support for Spring applications built on [GraphQL Java](https://www.graphql-java.com/). See the official [Spring guide](https://spring.io/guides/gs/graphql-server/) for how to build a GraphQL service in 15 minutes. -* It is a joint collaboration between the GraphQL Java team and Spring engineering. -* Our shared philosophy is to provide as little opinion as we can while focusing on comprehensive support for a wide range of use cases. -* It aims to be the foundation for all Spring, GraphQL applications. +- It is a joint collaboration between the GraphQL Java team and Spring engineering. +- Our shared philosophy is to provide as little opinion as we can while focusing on comprehensive support for a wide range of use cases. +- It aims to be the foundation for all Spring, GraphQL applications. Features: -* Server handling of GraphQL requests over HTTP, WebSocket, and RSocket. -* An annotation-based programming model where @Controller components use annotations to declare handler methods with flexible method signatures to fetch the data for specific GraphQL fields. For example: +- Server handling of GraphQL requests over HTTP, WebSocket, and RSocket. +- An annotation-based programming model where @Controller components use annotations to declare handler methods with flexible method signatures to fetch the data for specific GraphQL fields. For example: ```java @Controller @@ -28,8 +29,8 @@ public class GreetingController { } ``` -* Client support for executing GraphQL requests over HTTP, WebSocket, and RSocket. -* Dedicated support for testing GraphQL requests over HTTP, WebSocket, and RSocket, as well as for testing directly against a server. +- Client support for executing GraphQL requests over HTTP, WebSocket, and RSocket. +- Dedicated support for testing GraphQL requests over HTTP, WebSocket, and RSocket, as well as for testing directly against a server. To get started, check the Spring GraphQL starter on https://start.spring.io and the [samples](https://docs.spring.io/spring-graphql/docs/current/reference/html/#samples) in this repository. 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 index 04f6855ad0..25d7b10a45 100644 --- 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 @@ -5,12 +5,12 @@ 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. +- 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 index 2de76d9c45..3d2a1193b1 100644 --- a/src/content/code/language-support/javascript/client/apollo-client.md +++ b/src/content/code/language-support/javascript/client/apollo-client.md @@ -5,5 +5,3 @@ 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 index 1588f72758..cda313166a 100644 --- a/src/content/code/language-support/javascript/client/aws-amplify.md +++ b/src/content/code/language-support/javascript/client/aws-amplify.md @@ -5,5 +5,3 @@ 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 index 40a76b1b1a..b1cffeb120 100644 --- a/src/content/code/language-support/javascript/client/gq-loader.md +++ b/src/content/code/language-support/javascript/client/gq-loader.md @@ -5,5 +5,3 @@ 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 index 792facaee3..25b1ee601d 100644 --- a/src/content/code/language-support/javascript/client/grafoo.md +++ b/src/content/code/language-support/javascript/client/grafoo.md @@ -5,5 +5,3 @@ url: https://github.com/grafoojs/grafoo github: grafoojs/grafoo npm: "@grafoo/core" --- - - diff --git a/src/content/code/language-support/javascript/client/graphql-box.md b/src/content/code/language-support/javascript/client/graphql-box.md index 7f731a59e2..bc0b8cae12 100644 --- a/src/content/code/language-support/javascript/client/graphql-box.md +++ b/src/content/code/language-support/javascript/client/graphql-box.md @@ -13,21 +13,21 @@ npm install @graphql-box/core @graphql-box/client @graphql-box/request-parser @g ``` ```javascript -import Cachemap from "@cachemap/core"; -import indexedDB from "@cachemap/indexed-db"; -import reaper from "@cachemap/reaper"; -import CacheManager from "@graphql-box/cache-manager"; -import Client from "@graphql-box/client"; -import DebugManager from "@graphql-box/debug-manager"; -import FetchManager from "@graphql-box/fetch-manager"; -import RequestParser from "@graphql-box/request-parser"; -import introspection from "./introspection-query"; +import Cachemap from "@cachemap/core" +import indexedDB from "@cachemap/indexed-db" +import reaper from "@cachemap/reaper" +import CacheManager from "@graphql-box/cache-manager" +import Client from "@graphql-box/client" +import DebugManager from "@graphql-box/debug-manager" +import FetchManager from "@graphql-box/fetch-manager" +import RequestParser from "@graphql-box/request-parser" +import introspection from "./introspection-query" const requestManager = new FetchManager({ apiUrl: "/api/graphql", batchRequests: true, logUrl: "/log/graphql", -}); +}) const client = new Client({ cacheManager: new CacheManager({ @@ -45,16 +45,16 @@ const client = new Client({ debugManager: new DebugManager({ environment: "client", log: (message, data, logLevel) => { - requestManager.log(message, data, logLevel); + requestManager.log(message, data, logLevel) }, name: "CLIENT", performance: self.performance, }), requestManager, requestParser: new RequestParser({ introspection }), -}); +}) // Meanwhile... somewhere else in your code -const { data, errors } = await client.request(queryOrMutation); +const { data, errors } = await client.request(queryOrMutation) ``` diff --git a/src/content/code/language-support/javascript/client/graphql-hooks.md b/src/content/code/language-support/javascript/client/graphql-hooks.md index 0ae88803ac..b2164fc793 100644 --- a/src/content/code/language-support/javascript/client/graphql-hooks.md +++ b/src/content/code/language-support/javascript/client/graphql-hooks.md @@ -22,10 +22,10 @@ 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' +import { GraphQLClient, ClientContext } from "graphql-hooks" const client = new GraphQLClient({ - url: '/graphql' + url: "/graphql", }) function App() { @@ -40,7 +40,7 @@ function App() { Now in your child components you can make use of `useQuery`: ```js -import { useQuery } from 'graphql-hooks' +import { useQuery } from "graphql-hooks" const HOMEPAGE_QUERY = `query HomePage($limit: Int) { users(limit: $limit) { @@ -52,12 +52,12 @@ const HOMEPAGE_QUERY = `query HomePage($limit: Int) { function MyComponent() { const { loading, error, data } = useQuery(HOMEPAGE_QUERY, { variables: { - limit: 10 - } + limit: 10, + }, }) - if (loading) return 'Loading...' - if (error) return 'Something Bad Happened' + if (loading) return "Loading..." + if (error) return "Something Bad Happened" return (
    diff --git a/src/content/code/language-support/javascript/client/graphql-request.md b/src/content/code/language-support/javascript/client/graphql-request.md index 12e6d10d25..ccd74c967a 100644 --- a/src/content/code/language-support/javascript/client/graphql-request.md +++ b/src/content/code/language-support/javascript/client/graphql-request.md @@ -5,5 +5,3 @@ 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/graphql-ts-client.md b/src/content/code/language-support/javascript/client/graphql-ts-client.md index 62a0871347..b6267c663a 100644 --- a/src/content/code/language-support/javascript/client/graphql-ts-client.md +++ b/src/content/code/language-support/javascript/client/graphql-ts-client.md @@ -5,5 +5,3 @@ url: https://github.com/babyfish-ct/graphql-ts-client github: babyfish-ct/graphql-ts-client npm: "graphql-ts-client-api" --- - - diff --git a/src/content/code/language-support/javascript/client/graphqurl.md b/src/content/code/language-support/javascript/client/graphqurl.md index 8d9b83db99..39c08de9a9 100644 --- a/src/content/code/language-support/javascript/client/graphqurl.md +++ b/src/content/code/language-support/javascript/client/graphqurl.md @@ -5,5 +5,3 @@ 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 index 6f3c8d3277..c4f689f662 100644 --- a/src/content/code/language-support/javascript/client/lokka.md +++ b/src/content/code/language-support/javascript/client/lokka.md @@ -5,5 +5,3 @@ 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 index 14e6761774..6e1e6e6b9b 100644 --- a/src/content/code/language-support/javascript/client/nanogql.md +++ b/src/content/code/language-support/javascript/client/nanogql.md @@ -5,5 +5,3 @@ 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 index 709d49f723..353c12052e 100644 --- a/src/content/code/language-support/javascript/client/relay.md +++ b/src/content/code/language-support/javascript/client/relay.md @@ -8,9 +8,8 @@ npm: "react-relay" Relay is a JavaScript framework for building data-driven React applications. -* **Declarative:** Never again communicate with your data store using an imperative API. Simply declare your data requirements using GraphQL and let Relay figure out how and when to fetch your data. -* **Colocation:** Queries live next to the views that rely on them, so you can easily reason about your app. Relay aggregates queries into efficient network requests to fetch only what you need. -* **Mutations:** Relay lets you mutate data on the client and server using GraphQL mutations, and offers automatic data consistency, optimistic updates, and error handling. +- **Declarative:** Never again communicate with your data store using an imperative API. Simply declare your data requirements using GraphQL and let Relay figure out how and when to fetch your data. +- **Colocation:** Queries live next to the views that rely on them, so you can easily reason about your app. Relay aggregates queries into efficient network requests to fetch only what you need. +- **Mutations:** Relay lets you mutate data on the client and server using GraphQL mutations, and offers automatic data consistency, optimistic updates, and error handling. [See how to use Relay in your own project](https://relay.dev/docs/en/introduction-to-relay). - diff --git a/src/content/code/language-support/javascript/server/apollo-server.md b/src/content/code/language-support/javascript/server/apollo-server.md index 3a52436d3b..a41b5ee7a5 100644 --- a/src/content/code/language-support/javascript/server/apollo-server.md +++ b/src/content/code/language-support/javascript/server/apollo-server.md @@ -15,17 +15,17 @@ npm install @apollo/server graphql Then run `node server.js` with this code in `server.js`: ```js -import { ApolloServer } from '@apollo/server'; -import { startStandaloneServer } from '@apollo/server/standalone'; +import { ApolloServer } from "@apollo/server" +import { startStandaloneServer } from "@apollo/server/standalone" const server = new ApolloServer({ typeDefs, resolvers, -}); +}) -const { url } = await startStandaloneServer(server); - -console.log(`🚀 Server ready at ${url}`); +const { url } = await startStandaloneServer(server) + +console.log(`🚀 Server ready at ${url}`) ``` Apollo Server has a built in standalone HTTP server and middleware for Express, and has an framework integration API that supports all [Node.js HTTP server frameworks and serverless environments](https://www.apollographql.com/docs/apollo-server/integrations/integration-index) via community integrations. diff --git a/src/content/code/language-support/javascript/server/graphql-box.md b/src/content/code/language-support/javascript/server/graphql-box.md index db2bca7c95..f079b82ac3 100644 --- a/src/content/code/language-support/javascript/server/graphql-box.md +++ b/src/content/code/language-support/javascript/server/graphql-box.md @@ -13,21 +13,24 @@ npm install @graphql-box/core @graphql-box/server @graphql-box/client @graphql-b ``` ```javascript -import Cachemap from "@cachemap/core"; -import redis from "@cachemap/redis"; -import reaper from "@cachemap/reaper"; -import CacheManager from "@graphql-box/cache-manager"; -import Client from "@graphql-box/client"; -import DebugManager from "@graphql-box/debug-manager"; -import Execute from "@graphql-box/execute"; -import RequestParser from "@graphql-box/request-parser"; -import Server from "@graphql-box/server"; -import { makeExecutableSchema } from "@graphql-tools/schema"; -import { performance } from "perf_hooks"; -import { schemaResolvers, schemaTypeDefs } from "./schema"; -import logger from './logger'; +import Cachemap from "@cachemap/core" +import redis from "@cachemap/redis" +import reaper from "@cachemap/reaper" +import CacheManager from "@graphql-box/cache-manager" +import Client from "@graphql-box/client" +import DebugManager from "@graphql-box/debug-manager" +import Execute from "@graphql-box/execute" +import RequestParser from "@graphql-box/request-parser" +import Server from "@graphql-box/server" +import { makeExecutableSchema } from "@graphql-tools/schema" +import { performance } from "perf_hooks" +import { schemaResolvers, schemaTypeDefs } from "./schema" +import logger from "./logger" -const schema = makeExecutableSchema({ typeDefs: schemaTypeDefs, resolvers: schemaResolvers }); +const schema = makeExecutableSchema({ + typeDefs: schemaTypeDefs, + resolvers: schemaResolvers, +}) const server = new Server({ client: new Client({ @@ -46,7 +49,7 @@ const server = new Server({ debugManager: new DebugManager({ environment: "server", log: (...args) => { - logger.log(...args); + logger.log(...args) }, name: "SERVER", performance, @@ -54,9 +57,9 @@ const server = new Server({ requestManager: new Execute({ schema }), requestParser: new RequestParser({ schema }), }), -}); +}) // Meanwhile... somewhere else in your code -app.use("api/graphql", graphqlServer.request()); +app.use("api/graphql", graphqlServer.request()) ``` diff --git a/src/content/code/language-support/javascript/server/graphql-js.md b/src/content/code/language-support/javascript/server/graphql-js.md index 39e3e596e6..43225c9d4f 100644 --- a/src/content/code/language-support/javascript/server/graphql-js.md +++ b/src/content/code/language-support/javascript/server/graphql-js.md @@ -15,19 +15,19 @@ npm install graphql Then run `node hello.js` with this code in `hello.js`: ```js -var { graphql, buildSchema } = require('graphql'); +var { graphql, buildSchema } = require("graphql") var schema = buildSchema(` type Query { hello: String } -`); +`) -var rootValue = { hello: () => 'Hello world!' }; +var rootValue = { hello: () => "Hello world!" } -var source = '{ hello }'; +var source = "{ hello }" -graphql({ schema, source, rootValue }).then((response) => { - console.log(response); -}); +graphql({ schema, source, rootValue }).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 index 2d7aae9fc2..efa6a9ca51 100644 --- a/src/content/code/language-support/javascript/server/graphql-yoga.md +++ b/src/content/code/language-support/javascript/server/graphql-yoga.md @@ -22,8 +22,8 @@ npm install graphql-yoga graphql Then create a server using the `createServer` import: ```js -import { createServer } from 'http' -import { createSchema, createYoga } from 'graphql-yoga' +import { createServer } from "http" +import { createSchema, createYoga } from "graphql-yoga" createServer( createYoga({ @@ -35,13 +35,13 @@ createServer( `, resolvers: { Query: { - hello: () => 'Hello Hello Hello', + hello: () => "Hello Hello Hello", }, }, - }) + }), }) ).listen(4000, () => { - console.info('GraphQL Yoga is listening on http://localhost:4000/graphql') + console.info("GraphQL Yoga is listening on http://localhost:4000/graphql") }) ``` diff --git a/src/content/code/language-support/javascript/server/mercurius.md b/src/content/code/language-support/javascript/server/mercurius.md index 5575e63083..4f80d59c0a 100644 --- a/src/content/code/language-support/javascript/server/mercurius.md +++ b/src/content/code/language-support/javascript/server/mercurius.md @@ -15,8 +15,8 @@ npm install fastify mercurius Then run `node app.js` with this code in `app.js`: ```js -const Fastify = require('fastify') -const mercurius = require('mercurius') +const Fastify = require("fastify") +const mercurius = require("mercurius") const schema = ` type Query { @@ -26,14 +26,14 @@ const schema = ` const resolvers = { Query: { - hello: async (_, { name }) => `hello ${name || 'world'}` - } + hello: async (_, { name }) => `hello ${name || "world"}`, + }, } const app = Fastify() app.register(mercurius, { schema, - resolvers + resolvers, }) app.listen(3000) diff --git a/src/content/code/language-support/javascript/tools/graphiql.md b/src/content/code/language-support/javascript/tools/graphiql.md index b9c2b53ffe..80555a81f1 100644 --- a/src/content/code/language-support/javascript/tools/graphiql.md +++ b/src/content/code/language-support/javascript/tools/graphiql.md @@ -5,5 +5,3 @@ 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 index 3c7ff98d00..f5276a1bcd 100644 --- a/src/content/code/language-support/javascript/tools/graphql-cli.md +++ b/src/content/code/language-support/javascript/tools/graphql-cli.md @@ -5,5 +5,3 @@ 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 index ac5bf4fed5..1ba0a96afb 100644 --- a/src/content/code/language-support/javascript/tools/graphql-code-generator.md +++ b/src/content/code/language-support/javascript/tools/graphql-code-generator.md @@ -5,5 +5,3 @@ 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 index 8bc7db8659..05fb937d2c 100644 --- a/src/content/code/language-support/javascript/tools/graphql-config.md +++ b/src/content/code/language-support/javascript/tools/graphql-config.md @@ -5,5 +5,3 @@ 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 index 829e4c62eb..4e6e5772e7 100644 --- a/src/content/code/language-support/javascript/tools/graphql-eslint.md +++ b/src/content/code/language-support/javascript/tools/graphql-eslint.md @@ -5,5 +5,3 @@ 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 index 060c06929f..5a0ca86175 100644 --- a/src/content/code/language-support/javascript/tools/graphql-inspector.md +++ b/src/content/code/language-support/javascript/tools/graphql-inspector.md @@ -5,5 +5,3 @@ 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 index 443a090ce2..345dbb2b60 100644 --- a/src/content/code/language-support/javascript/tools/graphql-language-service.md +++ b/src/content/code/language-support/javascript/tools/graphql-language-service.md @@ -5,5 +5,3 @@ 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 index 59eaad5c56..71b6d48fd4 100644 --- a/src/content/code/language-support/javascript/tools/graphql-live-query.md +++ b/src/content/code/language-support/javascript/tools/graphql-live-query.md @@ -5,5 +5,3 @@ 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 index 8bf2de4398..323b5319be 100644 --- a/src/content/code/language-support/javascript/tools/graphql-mesh.md +++ b/src/content/code/language-support/javascript/tools/graphql-mesh.md @@ -5,5 +5,3 @@ 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 index c5ebf02d76..da383e75a9 100644 --- a/src/content/code/language-support/javascript/tools/graphql-middleware.md +++ b/src/content/code/language-support/javascript/tools/graphql-middleware.md @@ -17,8 +17,8 @@ GraphQL Middleware is a schema wrapper which allows you to manage additional fun ## Example ```ts -const { ApolloServer } = require('apollo-server') -const { makeExecutableSchema } = require('@graphql-tools/schema') +const { ApolloServer } = require("apollo-server") +const { makeExecutableSchema } = require("@graphql-tools/schema") const typeDefs = ` type Query { @@ -30,11 +30,11 @@ const resolvers = { Query: { hello: (root, args, context, info) => { console.log(`3. resolver: hello`) - return `Hello ${args.name ? args.name : 'world'}!` + return `Hello ${args.name ? args.name : "world"}!` }, bye: (root, args, context, info) => { console.log(`3. resolver: bye`) - return `Bye ${args.name ? args.name : 'world'}!` + return `Bye ${args.name ? args.name : "world"}!` }, }, } @@ -62,4 +62,4 @@ const server = new ApolloServer({ }) 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 index eeec6b18f6..d0d6270e44 100644 --- a/src/content/code/language-support/javascript/tools/graphql-modules.md +++ b/src/content/code/language-support/javascript/tools/graphql-modules.md @@ -5,5 +5,3 @@ 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 index fcbe9a2123..f10142b5cd 100644 --- a/src/content/code/language-support/javascript/tools/graphql-scalars.md +++ b/src/content/code/language-support/javascript/tools/graphql-scalars.md @@ -5,5 +5,3 @@ 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 index 282fde8515..43a14952c5 100644 --- a/src/content/code/language-support/javascript/tools/graphql-shield.md +++ b/src/content/code/language-support/javascript/tools/graphql-shield.md @@ -9,26 +9,26 @@ 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' +import { rule, shield, and, or, not } from "graphql-shield" // Rules -const isAuthenticated = rule({ cache: 'contextual' })( +const isAuthenticated = rule({ cache: "contextual" })( async (parent, args, ctx, info) => { return ctx.user !== null - }, + } ) -const isAdmin = rule({ cache: 'contextual' })( +const isAdmin = rule({ cache: "contextual" })( async (parent, args, ctx, info) => { - return ctx.user.role === 'admin' - }, + return ctx.user.role === "admin" + } ) -const isEditor = rule({ cache: 'contextual' })( +const isEditor = rule({ cache: "contextual" })( async (parent, args, ctx, info) => { - return ctx.user.role === 'editor' - }, + return ctx.user.role === "editor" + } ) // Permissions @@ -52,9 +52,9 @@ const server = new GraphQLServer({ typeDefs, resolvers, middlewares: [permissions], - context: (req) => ({ + context: req => ({ ...req, user: getUser(req), }), }) -``` \ No newline at end of file +``` diff --git a/src/content/code/language-support/javascript/tools/graphql-sse.md b/src/content/code/language-support/javascript/tools/graphql-sse.md index a75cb2910e..8e5a18b26a 100644 --- a/src/content/code/language-support/javascript/tools/graphql-sse.md +++ b/src/content/code/language-support/javascript/tools/graphql-sse.md @@ -5,5 +5,3 @@ url: https://github.com/enisdenjo/graphql-sse github: enisdenjo/graphql-sse npm: "graphql-sse" --- - - diff --git a/src/content/code/language-support/javascript/tools/graphql-tools.md b/src/content/code/language-support/javascript/tools/graphql-tools.md index 393b0568e4..af2e896ec7 100644 --- a/src/content/code/language-support/javascript/tools/graphql-tools.md +++ b/src/content/code/language-support/javascript/tools/graphql-tools.md @@ -5,5 +5,3 @@ 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 index 1f5222c55c..c5ecd502ab 100644 --- a/src/content/code/language-support/javascript/tools/graphql-ws.md +++ b/src/content/code/language-support/javascript/tools/graphql-ws.md @@ -5,5 +5,3 @@ url: https://github.com/enisdenjo/graphql-ws github: enisdenjo/graphql-ws npm: "graphql-ws" --- - - diff --git a/src/content/code/language-support/javascript/tools/microfiber.md b/src/content/code/language-support/javascript/tools/microfiber.md index cc5c20a7f0..1cb3f2e6ac 100644 --- a/src/content/code/language-support/javascript/tools/microfiber.md +++ b/src/content/code/language-support/javascript/tools/microfiber.md @@ -8,9 +8,9 @@ npm: "microfiber" Microfiber is a JavaScript library that allows: -* Digging through your Introspection Query Results for a specific Query, Mutation, Type, Field, Argument or Subscription. -* Removing a specific Query, Mutation, Type, Field/InputField, Argument or Subscription from your Introspection Query Results. -* Removing Queries, Mutations, Fields/InputFields or Arguments that refer to Type that does not exist in - or has been removed from - your Introspection Query Results. +- Digging through your Introspection Query Results for a specific Query, Mutation, Type, Field, Argument or Subscription. +- Removing a specific Query, Mutation, Type, Field/InputField, Argument or Subscription from your Introspection Query Results. +- Removing Queries, Mutations, Fields/InputFields or Arguments that refer to Type that does not exist in - or has been removed from - your Introspection Query Results. ```sh npm install microfiber diff --git a/src/content/code/language-support/javascript/tools/postgraphile.md b/src/content/code/language-support/javascript/tools/postgraphile.md index 79aedc83c7..2d25254918 100644 --- a/src/content/code/language-support/javascript/tools/postgraphile.md +++ b/src/content/code/language-support/javascript/tools/postgraphile.md @@ -5,5 +5,3 @@ 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 index becc69b471..4be7ae4ef3 100644 --- a/src/content/code/language-support/javascript/tools/sofa.md +++ b/src/content/code/language-support/javascript/tools/sofa.md @@ -5,5 +5,3 @@ url: https://sofa-api.com/ github: Urigo/SOFA npm: "sofa-api" --- - - diff --git a/src/content/code/language-support/javascript/tools/spectaql.md b/src/content/code/language-support/javascript/tools/spectaql.md index 6751a3a0f1..2d1c261e73 100644 --- a/src/content/code/language-support/javascript/tools/spectaql.md +++ b/src/content/code/language-support/javascript/tools/spectaql.md @@ -8,9 +8,9 @@ npm: "spectaql" SpectaQL is a Node.js library that generates static documentation for a GraphQL schema using a variety of options: -* From a live endpoint using the introspection query. -* From a file containing an introspection query result. -* From a file, files or glob leading to the schema definitions in SDL. +- From a live endpoint using the introspection query. +- From a file containing an introspection query result. +- From a file, files or glob leading to the schema definitions in SDL. Out of the box, SpectaQL generates a single 3-column HTML page and lets you choose between a couple built-in themes. A main goal of the project is to be easily and extremely customizable--it is themeable and just about everything can be overridden or customized. diff --git a/src/content/code/language-support/julia/client/diana-jl.md b/src/content/code/language-support/julia/client/diana-jl.md index 2def0c8952..2746976260 100644 --- a/src/content/code/language-support/julia/client/diana-jl.md +++ b/src/content/code/language-support/julia/client/diana-jl.md @@ -4,5 +4,3 @@ 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/julia/client/graphqlclient-jl.md b/src/content/code/language-support/julia/client/graphqlclient-jl.md index f4c8ad372a..a0062c6660 100644 --- a/src/content/code/language-support/julia/client/graphqlclient-jl.md +++ b/src/content/code/language-support/julia/client/graphqlclient-jl.md @@ -48,4 +48,4 @@ query_string = """ }""" response = GraphQLClient.execute(client, query_string) -``` \ No newline at end of file +``` 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 index 8826c9c9a4..c8032f79c3 100644 --- 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 @@ -4,5 +4,3 @@ 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 index f9f099c2a1..b6e627a10e 100644 --- a/src/content/code/language-support/perl/server/graphql-perl.md +++ b/src/content/code/language-support/perl/server/graphql-perl.md @@ -7,10 +7,8 @@ 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 + - [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 index 0f5cfd77d5..533db54b6c 100644 --- a/src/content/code/language-support/php/server/api-platform.md +++ b/src/content/code/language-support/php/server/api-platform.md @@ -37,5 +37,5 @@ class Greeting public $hello; } ``` -Other API Platform features include data validation, authentication, authorization, deprecations, cache and GraphiQL integration. +Other API Platform features include data validation, authentication, authorization, deprecations, cache and GraphiQL integration. diff --git a/src/content/code/language-support/php/server/graphpinator.md b/src/content/code/language-support/php/server/graphpinator.md index c9f058ddb6..96a361178d 100644 --- a/src/content/code/language-support/php/server/graphpinator.md +++ b/src/content/code/language-support/php/server/graphpinator.md @@ -1,23 +1,23 @@ --- name: GraPHPinator -description: A GraphQL implementation for modern PHP. Includes features from latest draft, middleware directives and modules with extra functionality. +description: A GraphQL implementation for modern PHP. Includes features from latest draft, middleware directives and modules with extra functionality. url: https://github.com/infinityloop-dev/graphpinator github: infinityloop-dev/graphpinator --- -GraPHPinator is feature complete PHP implementation of GraphQL server. Its job is transformation of query string into resolved Json result for a given Schema. +GraPHPinator is feature complete PHP implementation of GraphQL server. Its job is transformation of query string into resolved Json result for a given Schema. - Aims to be compliant with the latest draft of GraphQL specification. - Fully typesafe, and therefore minimum required PHP version is 8.0. Sacrafices a tiny bit of convenience for huge amount of clarity and safety - no random configuration `array`s, no mixed types, no variable function arguments - this library doesnt try to save you from verbosity, but makes sure you always know what you've got. - Code first. - Flexible. Easy to extend with extra functionality using Modules or middleware Directives. - Includes some opt-in extensions which are out of scope of official specs: - - [Printer](https://github.com/infinityloop-dev/graphpinator-printer) - Schema printing for GraPHPinator typesystem. - - [Extra types](https://github.com/infinityloop-dev/graphpinator-extra-types) - Some useful and commonly used types, both scalar or composite. - - [Constraint directives](https://github.com/infinityloop-dev/graphpinator-constraint-directives) - Typesystem directives to declare additional validation on top of GraphQL typesystem. - - [Where directives](https://github.com/infinityloop-dev/graphpinator-where-directives) - Executable directives to filter values in lists. - - File upload using [multipart-formdata](https://github.com/jaydenseric/graphql-multipart-request-spec) specs (currently bundled). - - [Query cost limit module](https://github.com/infinityloop-dev/graphpinator-query-cost) - Modules to limit query cost by restricting maximum depth or number of nodes. + - [Printer](https://github.com/infinityloop-dev/graphpinator-printer) - Schema printing for GraPHPinator typesystem. + - [Extra types](https://github.com/infinityloop-dev/graphpinator-extra-types) - Some useful and commonly used types, both scalar or composite. + - [Constraint directives](https://github.com/infinityloop-dev/graphpinator-constraint-directives) - Typesystem directives to declare additional validation on top of GraphQL typesystem. + - [Where directives](https://github.com/infinityloop-dev/graphpinator-where-directives) - Executable directives to filter values in lists. + - File upload using [multipart-formdata](https://github.com/jaydenseric/graphql-multipart-request-spec) specs (currently bundled). + - [Query cost limit module](https://github.com/infinityloop-dev/graphpinator-query-cost) - Modules to limit query cost by restricting maximum depth or number of nodes. - Project is composed from multiple smaller packages, which may be used standalone: - - [Tokenizer](https://github.com/infinityloop-dev/graphpinator-tokenizer) - Lexical analyzer of GraphQL document. - - [Parser](https://github.com/infinityloop-dev/graphpinator-parser) - Syntactic analyzer of GraphQL document. + - [Tokenizer](https://github.com/infinityloop-dev/graphpinator-tokenizer) - Lexical analyzer of GraphQL document. + - [Parser](https://github.com/infinityloop-dev/graphpinator-parser) - Syntactic analyzer of GraphQL document. diff --git a/src/content/code/language-support/php/server/graphql-api-for-wordpress.md b/src/content/code/language-support/php/server/graphql-api-for-wordpress.md index 7063c37635..60e8f061b4 100644 --- a/src/content/code/language-support/php/server/graphql-api-for-wordpress.md +++ b/src/content/code/language-support/php/server/graphql-api-for-wordpress.md @@ -4,5 +4,3 @@ description: A GraphQL server for WordPress. Based on GraphQL by PoP url: https://graphql-api.com github: leoloso/PoP --- - - diff --git a/src/content/code/language-support/php/server/graphql-by-pop.md b/src/content/code/language-support/php/server/graphql-by-pop.md index 5c4197ae4a..45be70e15e 100644 --- a/src/content/code/language-support/php/server/graphql-by-pop.md +++ b/src/content/code/language-support/php/server/graphql-by-pop.md @@ -106,7 +106,7 @@ class UserFieldResolver extends AbstractDBDataFieldResolver } ``` -The definition of a field for the GraphQL schema, and its resolution, is split into a multitude of functions from the `FieldResolver`: +The definition of a field for the GraphQL schema, and its resolution, is split into a multitude of functions from the `FieldResolver`: - `getSchemaFieldDescription` - `getSchemaFieldType` diff --git a/src/content/code/language-support/php/server/graphql-php.md b/src/content/code/language-support/php/server/graphql-php.md index b84b448c96..8e79239ffc 100644 --- a/src/content/code/language-support/php/server/graphql-php.md +++ b/src/content/code/language-support/php/server/graphql-php.md @@ -4,5 +4,3 @@ 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 index f35550c219..e0d3c31ee9 100644 --- a/src/content/code/language-support/php/server/graphql-relay-php.md +++ b/src/content/code/language-support/php/server/graphql-relay-php.md @@ -4,5 +4,3 @@ description: A library to help construct a graphql-php server supporting react-r 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 index 1a13a665ff..6f22b64677 100644 --- a/src/content/code/language-support/php/server/graphqlbundle.md +++ b/src/content/code/language-support/php/server/graphqlbundle.md @@ -4,5 +4,3 @@ 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 index 055e61dc6a..e52d94638b 100644 --- a/src/content/code/language-support/php/server/graphqlite.md +++ b/src/content/code/language-support/php/server/graphqlite.md @@ -7,6 +7,7 @@ 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 { @@ -34,4 +35,5 @@ class Product // ... } ``` + 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 index 33bfbf7450..d7b240239e 100644 --- a/src/content/code/language-support/php/server/lighthouse.md +++ b/src/content/code/language-support/php/server/lighthouse.md @@ -4,5 +4,3 @@ 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 index 0c4d999cff..12f871d955 100644 --- a/src/content/code/language-support/php/server/railt.md +++ b/src/content/code/language-support/php/server/railt.md @@ -4,5 +4,3 @@ 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 index e4a2a0fe96..b1ba50b83c 100644 --- a/src/content/code/language-support/php/server/serge.md +++ b/src/content/code/language-support/php/server/serge.md @@ -4,5 +4,3 @@ description: Use GraphQL to define your Domain Model for CQRS/ES and let serge g 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 index c947260c11..5abe714068 100644 --- a/src/content/code/language-support/php/server/siler.md +++ b/src/content/code/language-support/php/server/siler.md @@ -6,6 +6,7 @@ github: leocavalcante/siler --- To run a Siler hello world script: + ```graphql type Query { hello: String @@ -39,5 +40,5 @@ Httpserver(Graphqlpsr7($schema), function (Throwable $err) { ]); })()->run(); ``` -It also provides functionality for the construction of a WebSocket Subscriptions Server based on how Apollo works. +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 index 2fd292b5a5..b6d6a433f9 100644 --- a/src/content/code/language-support/php/server/wpgraphql.md +++ b/src/content/code/language-support/php/server/wpgraphql.md @@ -1,8 +1,6 @@ --- name: WPGraphQL -description: A free, open-source WordPress plugin that provides an extendable GraphQL schema and API for any WordPress site +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/ariadne-codegen.md b/src/content/code/language-support/python/client/ariadne-codegen.md index d78f317829..f962b746ff 100644 --- a/src/content/code/language-support/python/client/ariadne-codegen.md +++ b/src/content/code/language-support/python/client/ariadne-codegen.md @@ -15,13 +15,13 @@ Create `queries.graphql` file: ```graphql mutation CreateToken($username: String!, $password: String!) { - createToken(username: $username, password: $password) { - token - errors { - field - message - } + createToken(username: $username, password: $password) { + token + errors { + field + message } + } } ``` @@ -52,4 +52,4 @@ with Client("http://example.com/graphql/") as client: raise ValidationError({error.field: error.message}) auth_token = result.token -``` \ No newline at end of file +``` diff --git a/src/content/code/language-support/python/client/gql.md b/src/content/code/language-support/python/client/gql.md index 8cebdc4361..70f49af635 100644 --- a/src/content/code/language-support/python/client/gql.md +++ b/src/content/code/language-support/python/client/gql.md @@ -4,5 +4,3 @@ 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 index 960e042369..eb0c7979ef 100644 --- a/src/content/code/language-support/python/client/python-graphql-client.md +++ b/src/content/code/language-support/python/client/python-graphql-client.md @@ -4,5 +4,3 @@ 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/qlient.md b/src/content/code/language-support/python/client/qlient.md index 16f3630d4b..8ec8b4ded9 100644 --- a/src/content/code/language-support/python/client/qlient.md +++ b/src/content/code/language-support/python/client/qlient.md @@ -15,7 +15,7 @@ pip install qlient Create a `swapi_client_example.py` file with this content: -````python +```python from qlient.http import HTTPClient, GraphQLResponse client = HTTPClient("https://swapi-graphql.netlify.app/.netlify/functions/index") @@ -31,7 +31,7 @@ res: GraphQLResponse = client.query.film( print(res.request.query) # query film($id: ID) { film(id: $id) { id title episodeID } } print(res.request.variables) # {'id': 'ZmlsbXM6MQ=='} print(res.data) # {'film': {'id': 'ZmlsbXM6MQ==', 'title': 'A New Hope', 'episodeID': 4}} -```` +``` Close the file and run it using python: diff --git a/src/content/code/language-support/python/client/sgqlc.md b/src/content/code/language-support/python/client/sgqlc.md index 20ec654363..897bb840d4 100644 --- a/src/content/code/language-support/python/client/sgqlc.md +++ b/src/content/code/language-support/python/client/sgqlc.md @@ -4,5 +4,3 @@ description: A simple Python GraphQL client. Supports generating code generation url: https://github.com/profusion/sgqlc github: profusion/sgqlc --- - - diff --git a/src/content/code/language-support/python/server/tartiflette.md b/src/content/code/language-support/python/server/tartiflette.md index b9c78af3eb..2554612c79 100644 --- a/src/content/code/language-support/python/server/tartiflette.md +++ b/src/content/code/language-support/python/server/tartiflette.md @@ -6,10 +6,13 @@ 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 @@ -31,4 +34,5 @@ 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 index b832a4e73b..e22c9464b3 100644 --- a/src/content/code/language-support/r/server/ghql.md +++ b/src/content/code/language-support/r/server/ghql.md @@ -4,5 +4,3 @@ 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/graphql-ruby.md b/src/content/code/language-support/ruby/server/graphql-ruby.md index 41f2b4f566..de7a25dace 100644 --- a/src/content/code/language-support/ruby/server/graphql-ruby.md +++ b/src/content/code/language-support/ruby/server/graphql-ruby.md @@ -7,6 +7,7 @@ gem: graphql --- To run a hello world script with `graphql-ruby`: + ```bash gem install graphql ``` @@ -30,4 +31,5 @@ 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/gql_client.md b/src/content/code/language-support/rust/client/gql_client.md index bffd74c656..ffc56c15e7 100644 --- a/src/content/code/language-support/rust/client/gql_client.md +++ b/src/content/code/language-support/rust/client/gql_client.md @@ -6,6 +6,7 @@ github: arthurkhlghatyan/gql-client-rs --- Usage example + ```rust use gql_client::Client; diff --git a/src/content/code/language-support/rust/server/async-graphql.md b/src/content/code/language-support/rust/server/async-graphql.md index 77b29bc9c2..d355b49458 100644 --- a/src/content/code/language-support/rust/server/async-graphql.md +++ b/src/content/code/language-support/rust/server/async-graphql.md @@ -15,4 +15,4 @@ github: async-graphql/async-graphql 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 index 7cf7c961f5..c3a96721ea 100644 --- a/src/content/code/language-support/rust/server/graphql-rust-juniper.md +++ b/src/content/code/language-support/rust/server/graphql-rust-juniper.md @@ -4,5 +4,3 @@ 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 index 881e35a0d5..6713604fd2 100644 --- a/src/content/code/language-support/scala/client/caliban.md +++ b/src/content/code/language-support/scala/client/caliban.md @@ -4,5 +4,3 @@ description: Functional GraphQL library for Scala, with client code generation a 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 index 0644058584..83409d0a09 100644 --- a/src/content/code/language-support/scala/server/caliban.md +++ b/src/content/code/language-support/scala/server/caliban.md @@ -6,13 +6,14 @@ 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] = ??? +def getCharacters(): List[Character] = ??? // schema case class Queries(characters: List[Character]) diff --git a/src/content/code/language-support/scala/server/sangria.md b/src/content/code/language-support/scala/server/sangria.md index eabbfef6e5..63a94527a9 100644 --- a/src/content/code/language-support/scala/server/sangria.md +++ b/src/content/code/language-support/scala/server/sangria.md @@ -6,6 +6,7 @@ github: sangria-graphql/sangria --- An example of a hello world GraphQL schema and query with `sangria`: + ```scala import sangria.schema._ import sangria.execution._ 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 index 5bc1c64ac8..c000c73537 100644 --- 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 @@ -4,5 +4,3 @@ description: A GraphQL client for iOS that returns results as query-specific Swi 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 index 27167b6e00..bbe1a7d9a4 100644 --- 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 @@ -4,5 +4,3 @@ description: A Tool for Writing Declarative, Type-Safe and Data-Driven Applicati 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 index b4492cd232..2f3e7c7157 100644 --- 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 @@ -4,5 +4,3 @@ 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/graphqlite-ios.md b/src/content/code/language-support/swift-objective-c-ios/client/graphqlite-ios.md index 36ae4d06a5..242540c244 100644 --- a/src/content/code/language-support/swift-objective-c-ios/client/graphqlite-ios.md +++ b/src/content/code/language-support/swift-objective-c-ios/client/graphqlite-ios.md @@ -4,5 +4,3 @@ description: GraphQLite iOS SDK is a toolkit to work with GraphQL servers easily url: https://graphqlite.com/sdk-ios github: relatedcode/GraphQLite --- - - 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 index f6c4063245..67989649e7 100644 --- 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 @@ -5,7 +5,6 @@ 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: @@ -46,4 +45,4 @@ send(query, to: "http://swift-graphql.heroku.com") { result in 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 index f6a51dd945..6a626d9390 100644 --- 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 @@ -4,5 +4,3 @@ description: Swift library for building GraphQL schemas/types fast, safely and e 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 index dfacfe38aa..488553003c 100644 --- 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 @@ -4,5 +4,3 @@ description: Swift library for writing Declarative, Type-Safe GraphQL APIs with url: https://github.com/nerdsupremacist/GraphZahl github: nerdsupremacist/GraphZahl --- - - diff --git a/src/content/code/services/apollo-studio.md b/src/content/code/services/apollo-studio.md index 4fee0218b7..5807a1f694 100644 --- a/src/content/code/services/apollo-studio.md +++ b/src/content/code/services/apollo-studio.md @@ -4,5 +4,3 @@ description: A cloud service that helps you build, validate, monitor and secure url: https://www.apollographql.com/docs/studio/ github: apollographql/apollo-studio-community --- - - diff --git a/src/content/code/services/aws-appsync.md b/src/content/code/services/aws-appsync.md index 21fc42ae78..c489d392a9 100644 --- a/src/content/code/services/aws-appsync.md +++ b/src/content/code/services/aws-appsync.md @@ -3,5 +3,3 @@ 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/dgraph.md b/src/content/code/services/dgraph.md index 1612802556..524b2796c7 100644 --- a/src/content/code/services/dgraph.md +++ b/src/content/code/services/dgraph.md @@ -51,16 +51,13 @@ Fire up your favorite GraphQL Client pointed at `http://localhost:8080/graphql` ```graphql mutation { - addProduct(input: [ - { name: "Dgraph"}, - { name: "Dgraph Cloud"} - ]) { + addProduct(input: [{ name: "Dgraph" }, { name: "Dgraph Cloud" }]) { product { id name } } - addCustomer(input: [{ username: "TonyStark"}]) { + addCustomer(input: [{ username: "TonyStark" }]) { customer { username } @@ -70,18 +67,27 @@ mutation { ```graphql mutation { - addReview(input: [{ - by: { username: "TonyStark" }, - about: { name: "Dgraph" }, - comment: "Fantastic, easy to install, worked great. Best GraphQL server available", - rating: 10 - }]) { + addReview( + input: [ + { + by: { username: "TonyStark" } + about: { name: "Dgraph" } + comment: "Fantastic, easy to install, worked great. Best GraphQL server available" + rating: 10 + } + ] + ) { review { id comment rating - by { username } - about { id name } + by { + username + } + about { + id + name + } } } } @@ -111,4 +117,3 @@ query { } } ``` - diff --git a/src/content/code/services/escape.md b/src/content/code/services/escape.md index 0f4ba803f0..e9bf0b6f50 100644 --- a/src/content/code/services/escape.md +++ b/src/content/code/services/escape.md @@ -2,4 +2,4 @@ name: Escape – GraphQL Security description: Live GraphQL Security & Compliance. Ensure your GraphQL endpoints are production-ready. During development. Without needed configuration. Supports every language and framework. Free to get started. url: https://escape.tech/ ---- \ No newline at end of file +--- diff --git a/src/content/code/services/faunadb.md b/src/content/code/services/faunadb.md index decd136ab3..f966250dd3 100644 --- a/src/content/code/services/faunadb.md +++ b/src/content/code/services/faunadb.md @@ -3,5 +3,3 @@ 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/graphapi.md b/src/content/code/services/graphapi.md index debe87a581..eb469660f0 100644 --- a/src/content/code/services/graphapi.md +++ b/src/content/code/services/graphapi.md @@ -1,5 +1,5 @@ --- -name: graphapi® +name: graphapi® description: graphapi® is a secure low-code GraphQL-as-a-service platform. Based on the input data model, it auto-generates the GraphQL schema, all resolvers, and the database stack. Additionally, it provides a user interface allowing teams to manage their data. For more information, go to https://graphapi.com. url: https://graphapi.com/docs github: graphapi-io/resources diff --git a/src/content/code/services/graphql.security.md b/src/content/code/services/graphql.security.md index b90243550a..9f745d97ad 100644 --- a/src/content/code/services/graphql.security.md +++ b/src/content/code/services/graphql.security.md @@ -2,4 +2,4 @@ name: GraphQL.Security description: Fast and free security scan to run a dozen of tests on a GraphQL endpoint. No login is required. url: https://graphql.security/ ---- \ No newline at end of file +--- diff --git a/src/content/code/services/hasura.md b/src/content/code/services/hasura.md index dc72b4317f..56e9fd0d91 100644 --- a/src/content/code/services/hasura.md +++ b/src/content/code/services/hasura.md @@ -4,5 +4,3 @@ description: Hasura connects to your databases & microservices and instantly giv url: https://hasura.io github: hasura/graphql-engine --- - - diff --git a/src/content/code/services/hygraph.md b/src/content/code/services/hygraph.md index f670a2a3b2..09c79e592d 100644 --- a/src/content/code/services/hygraph.md +++ b/src/content/code/services/hygraph.md @@ -3,5 +3,3 @@ name: Hygraph description: Hygraph is the federated content platform that allows true composability of your stack. Integrate all your services with a unique content federation approach and distribute content from anywhere - to anywhere using a single, powerful GraphQL API. url: https://hygraph.com/ --- - - diff --git a/src/content/code/services/lexascms.md b/src/content/code/services/lexascms.md index 10907871c5..401ac753e8 100644 --- a/src/content/code/services/lexascms.md +++ b/src/content/code/services/lexascms.md @@ -3,5 +3,3 @@ 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 index 3c903be90d..267efe4a0d 100644 --- a/src/content/code/services/moesif-api-analytics.md +++ b/src/content/code/services/moesif-api-analytics.md @@ -3,5 +3,3 @@ 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/prisma.md b/src/content/code/services/prisma.md index ade889ad2e..9daa18587e 100644 --- a/src/content/code/services/prisma.md +++ b/src/content/code/services/prisma.md @@ -1,8 +1,6 @@ --- name: Prisma -description: Next-generation Node.js and TypeScript ORM with a built-in data loader, which can be used when building GraphQL backends. For more information, go to https://www.prisma.io/graphql +description: Next-generation Node.js and TypeScript ORM with a built-in data loader, which can be used when building GraphQL backends. For more information, go to https://www.prisma.io/graphql url: https://www.prisma.io github: prisma/prisma --- - - diff --git a/src/content/code/services/stepzen.md b/src/content/code/services/stepzen.md index 5ca67835c6..c5eebe3de1 100644 --- a/src/content/code/services/stepzen.md +++ b/src/content/code/services/stepzen.md @@ -4,5 +4,3 @@ description: Create a serverless GraphQL API based on your data sources (REST & url: https://stepzen.com/docs/ github: stepzen-dev/examples --- - - diff --git a/src/content/code/services/tipe.md b/src/content/code/services/tipe.md index eca017351a..21ab32e01f 100644 --- a/src/content/code/services/tipe.md +++ b/src/content/code/services/tipe.md @@ -4,5 +4,3 @@ description: A SaaS (Software as a Service) content management system that allow url: https://tipe.io github: tipeio/tipe --- - - diff --git a/src/content/code/tools/gqt/general/gqt.md b/src/content/code/tools/gqt/general/gqt.md index cb8e629231..a540b6fe7d 100644 --- a/src/content/code/tools/gqt/general/gqt.md +++ b/src/content/code/tools/gqt/general/gqt.md @@ -5,7 +5,7 @@ url: https://github.com/eerimoq/gqt github: eerimoq/gqt --- -Run ``gqt`` against your GraphQL endpoint. Build your query in an +Run `gqt` against your GraphQL endpoint. Build your query in an intuitive TUI and execute it. The response from the server is written to standard output. diff --git a/src/content/code/tools/graphql-code-generator/general/graphql-code-generator.md b/src/content/code/tools/graphql-code-generator/general/graphql-code-generator.md index ac5bf4fed5..1ba0a96afb 100644 --- a/src/content/code/tools/graphql-code-generator/general/graphql-code-generator.md +++ b/src/content/code/tools/graphql-code-generator/general/graphql-code-generator.md @@ -5,5 +5,3 @@ url: https://graphql-code-generator.com github: dotansimha/graphql-code-generator npm: "@graphql-codegen/cli" --- - - diff --git a/src/content/code/tools/microcks/general/microcks.md b/src/content/code/tools/microcks/general/microcks.md index c42110a927..20a3e02907 100644 --- a/src/content/code/tools/microcks/general/microcks.md +++ b/src/content/code/tools/microcks/general/microcks.md @@ -5,6 +5,6 @@ url: https://microcks.io github: microcks/microcks --- -Microcks is a platform for turning your API and microservices assets - *GraphQL schemas*, *OpenAPI specs*, *AsyncAPI specs*, *gRPC protobuf*, *Postman collections*, *SoapUI projects*_ - into live simulations in seconds. +Microcks is a platform for turning your API and microservices assets - _GraphQL schemas_, _OpenAPI specs_, _AsyncAPI specs_, _gRPC protobuf_, _Postman collections_, _SoapUI projects_\_ - into live simulations in seconds. -It also reuses these assets for running compliance and non-regression tests against your API implementation. We provide integrations with *Jenkins*, *GitHub Actions*, *Tekton* and many others through a simple CLI. \ No newline at end of file +It also reuses these assets for running compliance and non-regression tests against your API implementation. We provide integrations with _Jenkins_, _GitHub Actions_, _Tekton_ and many others through a simple CLI. diff --git a/src/content/code/tools/quicktype/general/quicktype.md b/src/content/code/tools/quicktype/general/quicktype.md index e5278b2798..d7a4ec4eff 100644 --- a/src/content/code/tools/quicktype/general/quicktype.md +++ b/src/content/code/tools/quicktype/general/quicktype.md @@ -5,5 +5,3 @@ url: https://quicktype.io/ github: quicktype/quicktype npm: "quicktype" --- - - diff --git a/src/content/codeofconduct/CodeOfConduct.md b/src/content/codeofconduct/CodeOfConduct.md index 9c4e9a828c..7ac5b6fad7 100644 --- a/src/content/codeofconduct/CodeOfConduct.md +++ b/src/content/codeofconduct/CodeOfConduct.md @@ -15,25 +15,25 @@ In the interest of fostering an open and welcoming environment, we as contributo Examples of behavior that contributes to creating a positive environment include: -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members +- Using welcoming and inclusive language +- Being respectful of differing viewpoints and experiences +- Gracefully accepting constructive criticism +- Focusing on what is best for the community +- Showing empathy towards other community members Examples of unacceptable behavior by participants include: -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others’ private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting +- The use of sexualized language or imagery and unwelcome sexual attention or advances +- Trolling, insulting/derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others’ private information, such as a physical or electronic address, without explicit permission +- Other conduct which could reasonably be considered inappropriate in a professional setting ## Our Responsibilities GraphQL Specification members, project participants and contributors (collectively, "participants") are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. -The steering committee of the GraphQL Specification has the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any participant for other behaviors that they deem inappropriate, threatening, offensive, or harmful. +The steering committee of the GraphQL Specification has the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any participant for other behaviors that they deem inappropriate, threatening, offensive, or harmful. All participants have determined that The Linux Foundation is the most optimal organization to shepherd the development of this project. Participants acknowledge and agree to The Linux Foundation's exclusive right to use "GraphQL" and any other names and trademarks associated with the GraphQL open source project and GraphQL Specification and to authorize others’ use of the marks, establish guidelines for such use, and to delegate these responsibilities. Participants agree not to take any action inconsistent with such rights and to cooperate in any action which The Linux Foundation deems necessary or desirable to prevent confusion or establish or preserve these rights. Participants will not independently adopt, use, or attempt to register any trademarks or trade names that are confusingly similar to these names. @@ -43,7 +43,7 @@ This Code of Conduct applies both within project spaces and in public spaces whe ## Enforcement -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the Executive Director, or, if the complaint involves the Executive Director, a member of the steering committee. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. Participants who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by the steering committee. +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the Executive Director, or, if the complaint involves the Executive Director, a member of the steering committee. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. Participants who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by the steering committee. ## Attribution diff --git a/src/content/community/Community-Developers.md b/src/content/community/Community-Developers.md index c116e851eb..4120dd1db0 100644 --- a/src/content/community/Community-Developers.md +++ b/src/content/community/Community-Developers.md @@ -11,15 +11,15 @@ The following resources are intended to describe how GraphQL development process ## 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 Discord](https://discord.graphql.org) - * We're in the process of moving our official chat to Discord, but you may still find historical discussion at ~~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) -* The [GraphQL Community Grant](/foundation/community-grant/) program +- 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 Discord](https://discord.graphql.org) + - We're in the process of moving our official chat to Discord, but you may still find historical discussion at ~~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) +- The [GraphQL Community Grant](/foundation/community-grant/) program ## How GraphQL is developed @@ -35,19 +35,19 @@ The GraphQL specification, sub-specifications, and official reference implementa 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) +- **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) +- **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. diff --git a/src/content/community/Community-Events.md b/src/content/community/Community-Events.md index 475c9b9a3b..ba3e530810 100644 --- a/src/content/community/Community-Events.md +++ b/src/content/community/Community-Events.md @@ -12,17 +12,17 @@ All GraphQL technical meetings are open to anyone who is interested, so long as All GraphQL project meetings should appear on the [GraphQL public calendar](https://calendar.graphql.org). If a project's meeting isn't on the calendar or is incorrect, please email [operations@graphql.org](mailto:operations@graphql.org). -* **Who can join GraphQL project meetings:** Anyone who has signed the free [GraphQL Specification Membership agreement](https://github.com/graphql/graphql-wg/tree/HEAD/membership). +- **Who can join GraphQL project meetings:** Anyone who has signed the free [GraphQL Specification Membership agreement](https://github.com/graphql/graphql-wg/tree/HEAD/membership). -* **How to join:** Each GraphQL project must maintain an agenda document for each meeting, and each attendee must add themselves to it prior to attending. To join, open a PR to add your name to the attendee list on an upcoming meeting's agenda (for example, the [GraphQL Working Group](https://github.com/graphql/graphql-wg/tree/HEAD/agendas) or [GraphQL.js](https://github.com/graphql/graphql-js-wg/tree/main/agendas)). The agenda document will have the date, time and Zoom links. +- **How to join:** Each GraphQL project must maintain an agenda document for each meeting, and each attendee must add themselves to it prior to attending. To join, open a PR to add your name to the attendee list on an upcoming meeting's agenda (for example, the [GraphQL Working Group](https://github.com/graphql/graphql-wg/tree/HEAD/agendas) or [GraphQL.js](https://github.com/graphql/graphql-js-wg/tree/main/agendas)). The agenda document will have the date, time and Zoom links. -*IMPORTANT: Your PR against the agenda* ***must*** *be merged before you can attend. If the EasyCLA bot says you are not covered, you need to follow the links in the bot's comment to sign the [GraphQL Specification Membership agreement](https://github.com/graphql/graphql-wg/tree/HEAD/membership) before you can attend.* +_IMPORTANT: Your PR against the agenda_ **_must_** _be merged before you can attend. If the EasyCLA bot says you are not covered, you need to follow the links in the bot's comment to sign the [GraphQL Specification Membership agreement](https://github.com/graphql/graphql-wg/tree/HEAD/membership) before you can attend._ If you have questions about this process, please ask [operations@graphql.org](mailto:operations@graphql.org). ### GraphQL Working Group / TSC meeting -The [GraphQL Working Group](https://github.com/graphql/graphql-wg) meets on the first Thursday of each month. When there are topics to address, the [GraphQL Technical Steering Committee (TSC)](https://github.com/graphql/graphql-wg/blob/HEAD/GraphQL-TSC.md) may meet briefly prior to the start of the Working Group meeting. +The [GraphQL Working Group](https://github.com/graphql/graphql-wg) meets on the first Thursday of each month. When there are topics to address, the [GraphQL Technical Steering Committee (TSC)](https://github.com/graphql/graphql-wg/blob/HEAD/GraphQL-TSC.md) may meet briefly prior to the start of the Working Group meeting. The goal of the working group meeting is to discuss current work and future plans for the GraphQL specification. The Working Group meeting is also the place to coordinate between other GraphQL working groups and reference implementations. @@ -34,10 +34,9 @@ The [GraphQL.js working group](https://github.com/graphql/graphql-js-wg) meets t To join, add yourself to an [upcoming meeting agenda](https://github.com/graphql/graphql-js-wg/tree/HEAD/agendas). - ## Events -*None currently scheduled* +_None currently scheduled_