Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update authorization and pagination docs #1814

Open
wants to merge 20 commits into
base: source
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 49 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,31 +1,66 @@
# Source Repository for graphql.org
# Source Repository for GraphQL.org

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 Discord](https://discord.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/).
## Table of Contents

- [Overview](#overview)
- [Documentation](#documentation)
- [Deployment](#deployment)
- [How to Contribute](#how-to-contribute)
- [CLA Process](#cla-process)
- [Financial Support](#financial-support)

## 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,
- support for powerful developer tooling, and
- precise querying, which offers several benefits:
- clients request only the data they need, improving efficiency;
- new fields and features can be added without impacting existing clients; and
- field-level usage can be tracked and monitored for insights and optimization.

The [GraphQL 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/)
- [GraphQL Website](https://graphql.org/)
- [Reference Documentation](https://graphql.org/learn/)
- [Language Support, Tools, and Services](https://graphql.org/code/)
- [Frequently Asked Questions (FAQ)](https://graphql.org/faq/)
- [Community resources](https://graphql.org/community/)
- [Community Resources](https://graphql.org/community/)

## Deployment

The site is deployed via Vercel on merges to the `source` branch.
The website is deployed via [Vercel](https://vercel.com) on merges to the `source` branch. To preview changes locally, follow these steps:

1. Clone the repository:
`git clone https://github.com/graphql/graphql.github.io.git`
`cd graphql.github.io`
2. Install dependencies:
`npm install`
3. Run the site locally:
`npm run dev`

## How to Contribute

We welcome contributions! 🎉 Please refer to our [contributing guide](./CONTRIBUTING.md) for detailed instructions on how to make changes to the GraphQL website.

### CLA Process

## How to contribute
Before contributing, all participants must sign the free [GraphQL Specification Membership Agreement](https://preview-spec-membership.graphql.org). You only need to do this once, and it can be signed by:

Check out our [contributing guide](./CONTRIBUTING.md) for detailed instructions on how to make changes to the GraphQL website 🎉.
- [Individual contributors](http://individual-spec-membership.graphql.org/)
- [Employers](http://corporate-spec-membership.graphql.org/)

This repository is managed by EasyCLA. Project participants must sign the free [GraphQL Specification Membership agreement](https://preview-spec-membership.graphql.org) before making a contribution. You only need to do this one time, and it can be signed by [individual contributors](http://individual-spec-membership.graphql.org/) or their [employers](http://corporate-spec-membership.graphql.org/).
To initiate the signature process, please open a PR against this repository. The EasyCLA bot will block the merge if the membership agreement has not been signed.

To initiate the signature process please open a PR against this repo. The EasyCLA bot will block the merge if we still need a membership agreement from you.
For more information on the CLA, check out the [detailed instructions here](https://github.com/graphql/graphql-wg/tree/main/membership). If you encounter any issues, please contact us at [[email protected]](mailto:[email protected]).

You can find [detailed information here](https://github.com/graphql/graphql-wg/tree/main/membership). If you have issues, please email [email protected].
## Join the Foundation!

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 consider becoming a member of the [GraphQL Foundation](https://foundation.graphql.org/join).
1 change: 1 addition & 0 deletions public/.well-known/atproto-did
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
did:plc:a65ga6opvhd2h453vwscrvil
10 changes: 8 additions & 2 deletions public/images/next-image-export-optimizer-hashes.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
"/8_53229629805_o.290e35be.jpg": "NfsXTg4KKkt1csv79IiZ3FyU3-CW1WTkp4883NgZam4=",
"/9.4a558c85.jpg": "-iUSFWjVs4vunEea7FxDeNMOOvUs4VOEpScXJAwi0DA=",
"/annual-report-1.5ebe2b34.png": "HmbFFbaUL79rvnCKQ-2oRSLETM2FFh5v5dZxwWquuVM=",
"/audience.f60c1c99.jpg": "pqx3E31xAO87mNEBlZKqCTX+LRiPlOuQThWQZf08A4A=",
"/banner.10d4d66b.jpg": "9UJqBQ9RQu2sxDdJ5uaQr3crx2ZXrlOKMAmY82R8ZBA=",
"/business_layer.68bf746f.png": "DwCtOs-q1Y-DgBxEj6NqyVaOAiq5zCB8xPF-rZ5Qe1U=",
"/coursera.968d6897.png": "FmQxkHPToU9hZQFvKVSRa6+-5xppLy6lJJhqCEIiCzk=",
Expand Down Expand Up @@ -133,19 +134,24 @@
"/graphqlconf-202395_53229430163_o.83d6ce30.jpg": "wGPGuLNhdPy1AKSdem7dB2U3hCnLNt0m7A697OKpMLA=",
"/graphqlconf-202396_53229628185_o.e02e8158.jpg": "CwcPIFPl3qMN77xrq3PNo3IDu2xdE5t-XAmqMN7vvrA=",
"/graphqlconf-2023graphqlconf-2023_53228255062_o.29b776c3.jpg": "iXr9Z8xwKZhM1pUZPRRTFEHbvwYlw81k6ZIqW5zh3x4=",
"/hero1.2c973c2e.jpg": "jY1RePeWthuOOa5c59Yl4TQD4J731poNxeaqzKDFmfg=",
"/hero2.fa425ea9.jpg": "siZR-Q3HPEB5l2gU0DAbheWVVUOCsrOuOv-Ch0xCR7M=",
"/idit.feda6f62.jpg": "9oybNQ8aiuV++33v8KDL8ZgIL0H2T5UF3EjnhsksM5g=",
"/intuit.04140a09.png": "m84fUDz2YQxlNNMmbthcNfYr3bWhp23zEPxvP5ruo9Q=",
"/layers-2x.9859cd12.png": "3D8k4Go-oWvQTcmIDFOwHTfm1eagZIqjwar3vFcoZY8=",
"/layers.ef6db872.png": "fbR0XaZWR0olI2fUKeOWruBZ6HxRDSEYGXCzktrW4XA=",
"/lee.dfa51298.png": "rG86vKMradTmaq1FH-F2-zwDzRkcw-qXK18Slp34VPs=",
"/leebyron.4adb0a93.jpg": "poBi-hIdozz-Mn2PIKun7ZpX9q200f7m-5SkUt1XU-0=",
"/marcandre.b8692933.jpg": "mUbreFySTVojHKZTl0VKcMQ9gHdSVCL47mSBnUYITBI=",
"/marker-icon.d577052a.png": "L15ETF3vWj9pjeLgXar+ibZOYNJYXoQal5lJmpTWTbA=",
"/pathological-query.2de43465.png": "Xoi58Mnu6FqfvNp4+gXgt-IyMDdMpdbqPUyNzlH5YJQ=",
"/pinterest.36b58187.png": "TlwGD0W-rRqoDgDND5x+cQrzz09xU+dmW6oP8+qSBug=",
"/playground-transition-banner.2458871d.png": "ffm4o7utOWkmwaWC2KVVHPOz9zsaD6fG2P269pHT8uQ=",
"/rest-api-people.c2b56e20.png": "KDbPJA1rAhVT43LeGLckdesx+bISV+6g0q9fJQNl5Tg=",
"/sf-city-view.d5d36dff.jpeg": "a-QVXW74jpiDFhmUOc9hZY10pGvmpSLSdM+u0EcuRac=",
"/shopify.2cb330ea.png": "LRiC9+uEG-gHl-XYi4qrSXMAlpFglZLNZj1kBGF-Cag=",
"/speaker.674c5b86.jpg": "ISlnB9At3nuMk70rfRuMAu+k9aEhUNSwp7XgFMx5Bls=",
"/unconf.651492c3.jpg": "mlpvU8glWqqsRn2n3-pgwRI+Jnk3sT7VQjsCL01e30c=",
"/uri.387cb001.jpg": "kSx4huEjQidwIg6bF8UEWLiPACDl0nQ0aqxA2R2LIe0=",
"/whiteboard.60eac8e3.jpg": "NodBqUaO+IanhuPaP9o5jCIe+gSrwyZ9TZ3QUdlWbBg="
"/whiteboard.60eac8e3.jpg": "NodBqUaO+IanhuPaP9o5jCIe+gSrwyZ9TZ3QUdlWbBg=",
"/workshop.e02e3501.jpg": "D9ON1z6-vKcjxv50gOH+5XS9HTEWUpc4UgIPW5OXHxE="
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
191 changes: 93 additions & 98 deletions src/app/conf/2024/schedule/[id]/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ const Tag = ({
<span
className={clsx(
"border border-solid border-[#333333] font-semibold text-sm px-3 py-1 h-max rounded-full whitespace-nowrap",
featured ? "bg-[#F8779D] border-[#F8779D] border-2 text-white" : "",
featured && "bg-[#F8779D] border-[#F8779D] border-2 text-white",
)}
>
{text}
Expand Down Expand Up @@ -100,111 +100,106 @@ export default function SessionPage({ params }: SessionProps) {
videos.map(e => e.title),
).bestMatch

const videoId = videos.find(e => e.title === recordingTitle.target)?.id

if (!videoId) {
throw new Error(`Video "${recordingTitle.target}" not found`)
}

return (
<div className="bg-[#f4f6f8]">
<div className="container">
<div className="py-10">
<section className="text-[#333333] min-h-[80vh] flex-col mx-auto px-2 xs:px-0 lg:justify-between justify-center md:container">
<div className="flex flex-col lg:px-0">
<BackLink year="2024" kind="schedule" />

{recordingTitle.rating > 0.5 && (
<iframe
className="aspect-video max-w-[1000px] mx-auto size-full rounded-md"
src={`https://youtube.com/embed/${
videos.find(e => e.title === recordingTitle.target)?.id
}`}
title={recordingTitle.target}
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
allowFullScreen
/>
)}

<div className="mt-10 flex flex-col self-center prose lg:prose-lg sm:space-y-4">
<div className="space-y-5">
<div className="flex gap-3 flex-wrap">
<Tag text={eventType} featured />
<Tag text={event.audience} />
<Tag text={event.event_subtype} />
</div>
<h1 className="mt-0 text-2xl lg:text-3xl font-medium">
{eventTitle}
</h1>
<span className="text-[#333333]">
{format(
parseISO(event.event_start),
"EEEE, MMMM d / hh:mmaaaa 'PDT'",
)}{" "}
- {format(parseISO(event.event_end), "hh:mmaaaa 'PDT'")}
</span>
</div>
<div className="flex flex-wrap lg:flex-row flex-col gap-5 mt-8">
{event.speakers!.map(speaker => (
<div
className={`flex items-center gap-3 w-full ${event?.speakers?.length || 0 > 1 ? "max-w-[320px]" : ""}`}
key={speaker.username}
>
<Avatar
className="lg:size-[120px] size-[100px] rounded-full"
avatar={speaker.avatar}
name={speaker.name}
/>

<div className="flex flex-col lg:gap-1 gap-1.5">
<a
href={`/conf/2024/speakers/${speaker.username}`}
className="text-xl mt-0 font-bold text-[#333333] underline"
>
{speaker.name}
</a>

<span className="font-normal">
<span className="font-semibold">
{speaker.company}
</span>
{speaker.company && ", "}
{speaker.position}
</span>
{speaker.socialurls?.length ? (
<div className="mt-0 text-[#333333]">
<div className="flex space-x-2">
{speaker.socialurls.map(social => (
<a
key={social.url}
href={social.url}
target="_blank"
rel="noreferrer"
className="flex items-center text-black"
>
<SocialMediaIcon
service={
social.service.toLowerCase() as SocialMediaIconServiceType
}
/>
</a>
))}
</div>
</div>
) : null}
</div>
</div>
))}
<BackLink year="2024" kind="schedule" />
<iframe
className="aspect-video w-full max-w-4xl mx-auto rounded-md mt-6"
src={`https://youtube.com/embed/${videoId}`}
title={recordingTitle.target}
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
allowFullScreen
/>

<div className="mt-10 flex flex-col self-center prose lg:prose-lg sm:space-y-4 mx-auto">
<div className="space-y-5">
<div className="flex gap-3 flex-wrap">
<Tag text={eventType} featured />
<Tag text={event.audience} />
<Tag text={event.event_subtype} />
</div>
<p>{event.description}</p>

<div className="py-8">
{event.files?.map(({ path }) => (
<div key={path}>
<a href={path} target="_blank" rel="noreferrer">
View Full PDF{" "}
<span className="font-sans font-light text-2xl">
</span>
<h1 className="mt-0 text-2xl lg:text-3xl font-medium">
{eventTitle}
</h1>
<span className="text-[#333333]">
{format(
parseISO(event.event_start),
"EEEE, MMMM d / hh:mmaaaa 'PDT'",
)}{" "}
- {format(parseISO(event.event_end), "hh:mmaaaa 'PDT'")}
</span>
</div>
<div className="flex flex-wrap lg:flex-row flex-col gap-5 mt-8">
{event.speakers!.map(speaker => (
<div
className={`flex items-center gap-3 w-full ${event?.speakers?.length || 0 > 1 ? "max-w-[320px]" : ""}`}
key={speaker.username}
>
<Avatar
className="lg:size-[120px] size-[100px] rounded-full"
avatar={speaker.avatar}
name={speaker.name}
/>

<div className="flex flex-col lg:gap-1 gap-1.5">
<a
href={`/conf/2024/speakers/${speaker.username}`}
className="text-xl mt-0 font-bold text-[#333333] underline"
>
{speaker.name}
</a>
<iframe src={path} className="aspect-video size-full" />

<span className="font-normal">
<span className="font-semibold">{speaker.company}</span>
{speaker.company && ", "}
{speaker.position}
</span>
{speaker.socialurls?.length ? (
<div className="mt-0 text-[#333333]">
<div className="flex space-x-2">
{speaker.socialurls.map(social => (
<a
key={social.url}
href={social.url}
target="_blank"
rel="noreferrer"
className="flex items-center text-black"
>
<SocialMediaIcon
service={
social.service.toLowerCase() as SocialMediaIconServiceType
}
/>
</a>
))}
</div>
</div>
) : null}
</div>
))}
</div>
</div>
))}
</div>
<p>{event.description}</p>

<div className="py-8">
{event.files?.map(({ path }) => (
<div key={path}>
<a href={path} target="_blank" rel="noreferrer">
View Full PDF{" "}
<span className="font-sans font-light text-2xl">↗</span>
</a>
<iframe src={path} className="aspect-video size-full" />
</div>
))}
</div>
</div>
</section>
Expand Down
6 changes: 6 additions & 0 deletions src/code/services/hive.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
name: Hive
description: Hive is a fully open-source schema registry, analytics and gateway for GraphQL federation and other GraphQL APIs.
url: https://the-guild.dev/graphql/hive
github: graphql-hive/platform
---
6 changes: 0 additions & 6 deletions src/code/services/prisma.md

This file was deleted.

5 changes: 0 additions & 5 deletions src/code/services/tipe.md

This file was deleted.

6 changes: 6 additions & 0 deletions src/code/tools/hive/gateways-supergraphs/hive.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
name: Hive Gateway
description: Hive Gateway can act as a GraphQL federation gateway or a proxy for any GraphQL service.
url: https://the-guild.dev/graphql/hive
github: graphql-hive/gateway
---
Loading