diff --git a/docs/components/RelatedContent.tsx b/docs/components/RelatedContent.tsx
new file mode 100644
index 00000000000..425b4cc882b
--- /dev/null
+++ b/docs/components/RelatedContent.tsx
@@ -0,0 +1,24 @@
+/** @jsx jsx */
+import { jsx } from '@emotion/react';
+import { ReactNode } from 'react';
+
+import { useMediaQuery } from '../lib/media';
+
+export function RelatedContent({ children }: { children: ReactNode }) {
+ const mq = useMediaQuery();
+
+ return (
+
a > p > p > code': {
+ textDecoration: 'none',
+ },
+ })}
+ >
+ {children}
+
+ );
+}
diff --git a/docs/components/docs/Navigation.tsx b/docs/components/docs/Navigation.tsx
index f854aea01c7..75264b6f4b6 100644
--- a/docs/components/docs/Navigation.tsx
+++ b/docs/components/docs/Navigation.tsx
@@ -10,6 +10,7 @@ import { useMediaQuery } from '../../lib/media';
import { useHeaderContext } from '../Header';
import { Badge } from '../primitives/Badge';
import { Type } from '../primitives/Type';
+import { Emoji } from '../primitives/Emoji';
type SectionProps = { label: string; children: ReactNode };
export function Section({ label, children }: SectionProps) {
@@ -133,7 +134,6 @@ export function DocsNavigation() {
WalkthroughsExamples
- Keystone 5 vs 6Command LineRelationships
@@ -214,6 +214,36 @@ export function UpdatesNavigation({ releases = [] }: { releases: string[] }) {
))}
) : null}
+
+
+
+ New GraphQL API
+
+
+
+ Customisable Admin UI
+
+
+
+ Jed’s Prisma Day Talk
+
+
+
+ New Core
+
+
+
+ New Examples Collection
+
+
+
+ Keystone 5 vs 6
+
+
);
}
diff --git a/docs/components/primitives/Well.tsx b/docs/components/primitives/Well.tsx
index a08cff47dee..c087f5b7213 100644
--- a/docs/components/primitives/Well.tsx
+++ b/docs/components/primitives/Well.tsx
@@ -27,6 +27,7 @@ export function Well({ grad = 'grad1', heading, href, children, ...props }: Well
color: 'var(--text)',
overflow: 'hidden',
transition: 'box-shadow 0.2s ease, transform 0.2s ease, padding 0.2s ease',
+ textDecoration: 'none !important',
':before': {
content: '""',
position: 'absolute',
@@ -47,8 +48,9 @@ export function Well({ grad = 'grad1', heading, href, children, ...props }: Well
as="h2"
look="heading20bold"
css={{
- margin: '0 0 1rem 0',
+ margin: '0 0 1rem 0 !important',
paddingRight: '2rem',
+ fontSize: '1.25rem !important',
}}
>
{heading} →
diff --git a/docs/lib/prose-lite.ts b/docs/lib/prose-lite.ts
index d96b0595a7c..fbf5edd053d 100644
--- a/docs/lib/prose-lite.ts
+++ b/docs/lib/prose-lite.ts
@@ -7,15 +7,15 @@ export const proseStyles = {
content: '""',
},
a: {
- color: 'var(--text)',
textDecoration: 'underline',
fontWeight: 500,
+ color: 'inherit',
},
'a:hover': {
color: 'var(--link)',
},
strong: {
- color: 'var(--text)',
+ color: 'inherit',
fontWeight: 600,
},
'ol[type="A"], ol[type="A" s]': {
diff --git a/docs/next-env.d.ts b/docs/next-env.d.ts
index f87ea7fa66a..6ab0ecc22f4 100644
--- a/docs/next-env.d.ts
+++ b/docs/next-env.d.ts
@@ -2,3 +2,6 @@
///
///
///
+
+// NOTE: This file should not be edited
+// see https://nextjs.org/docs/basic-features/typescript for more information.
diff --git a/docs/pages/docs/apis/auth.mdx b/docs/pages/docs/apis/auth.mdx
index 98a96d5a746..cd2c77ff6ab 100644
--- a/docs/pages/docs/apis/auth.mdx
+++ b/docs/pages/docs/apis/auth.mdx
@@ -1,4 +1,6 @@
import { Markdown } from '../../../components/Markdown';
+import { Well } from '../../../components/primitives/Well';
+import { RelatedContent } from '../../../components/RelatedContent';
# Authentication API
@@ -475,4 +477,15 @@ If the token has expired the value `{ code: TOKEN_EXPIRED, message: 'The auth to
If the token is valid then the session handler will start a new session and return the encoded session cookie data as `sessionToken`.
The authenticated item will be returned as `item`.
+## Related resources
+
+
+
+ Adds password-based authentication to the Task Manager starter project.
+
+
+
export default ({ children }) => {children};
diff --git a/docs/pages/docs/apis/config.mdx b/docs/pages/docs/apis/config.mdx
index a88be185166..f6c774576f1 100644
--- a/docs/pages/docs/apis/config.mdx
+++ b/docs/pages/docs/apis/config.mdx
@@ -1,4 +1,7 @@
import { Markdown } from '../../../components/Markdown';
+import { Well } from '../../../components/primitives/Well';
+import { RelatedContent } from '../../../components/RelatedContent';
+import { InlineCode } from '../../../components/primitives/Code';
# System Configuration API
@@ -405,4 +408,15 @@ Options:
- `generateNextGraphqlAPI`: Creates a file at `node_modules/.keystone/next/graphql-api` with `default` and `config` exports that can be re-exported in a Next API route
- `generateNodeAPI`: Creates a file at `node_modules/.keystone/api` with a `lists` export
+## Related resources
+
+
+
+ The API to configure your options used with the list function.
+
+
+
export default ({ children }) => {children};
diff --git a/docs/pages/docs/apis/context.mdx b/docs/pages/docs/apis/context.mdx
index e075db84568..381fc080bf4 100644
--- a/docs/pages/docs/apis/context.mdx
+++ b/docs/pages/docs/apis/context.mdx
@@ -1,4 +1,7 @@
import { Markdown } from '../../../components/Markdown';
+import { Well } from '../../../components/primitives/Well';
+import { RelatedContent } from '../../../components/RelatedContent';
+import { InlineCode } from '../../../components/primitives/Code';
# Context API
@@ -161,4 +164,21 @@ They will be removed in future releases.
`gqlNames`: A function which takes a `listKey` and returns an object containing the GraphQL query, mutation and type names related to that list.
+## Related resources
+
+
+
+ A programmatic API for running CRUD operations against your GraphQL API. For each list in your system you get an API at context.lists.<listName>
+
+
+ The API for running CRUD operations against the internal GraphQL resolvers in your system. It returns internal item objects, which can be returned from GraphQL resolvers.
+
+
+
export default ({ children }) => {children};
diff --git a/docs/pages/docs/apis/db-items.mdx b/docs/pages/docs/apis/db-items.mdx
index e857f995535..375ebabca99 100644
--- a/docs/pages/docs/apis/db-items.mdx
+++ b/docs/pages/docs/apis/db-items.mdx
@@ -1,4 +1,7 @@
import { Markdown } from '../../../components/Markdown';
+import { Well } from '../../../components/primitives/Well';
+import { RelatedContent } from '../../../components/RelatedContent';
+import { InlineCode } from '../../../components/primitives/Code';
# Database Items API
@@ -140,4 +143,21 @@ const users = await context.db.lists.User.deleteMany({
});
```
+## Related resources
+
+
+
+ A programmatic API for running CRUD operations against your GraphQL API. For each list in your system you get an API at context.lists.<listName>.
+
+
+ The API for run-time functionality in your Keystone system. Use it to write business logic for access control, hooks, testing, GraphQL schema extensions, and more.
+
+
+
export default ({ children }) => {children};
diff --git a/docs/pages/docs/apis/fields.mdx b/docs/pages/docs/apis/fields.mdx
index a5b16a48791..9bbd12cb497 100644
--- a/docs/pages/docs/apis/fields.mdx
+++ b/docs/pages/docs/apis/fields.mdx
@@ -1,4 +1,7 @@
import { Markdown } from '../../../components/Markdown';
+import { Well } from '../../../components/primitives/Well';
+import { RelatedContent } from '../../../components/RelatedContent';
+import { InlineCode } from '../../../components/primitives/Code';
# Fields API
@@ -731,4 +734,21 @@ export default config({
});
```
-export default ({ children }) => {children};
+## Related resources
+
+
+
+ The API to configure your options used with the list() function.
+
+
+ A complete CRUD (create, read, update, delete) GraphQL API derived from the list and field names you configure in your system.
+
+
+
+export default ({ children }) => {children}
diff --git a/docs/pages/docs/apis/filters.mdx b/docs/pages/docs/apis/filters.mdx
index 5e58fc12cad..dabc8c8c8c9 100644
--- a/docs/pages/docs/apis/filters.mdx
+++ b/docs/pages/docs/apis/filters.mdx
@@ -1,7 +1,11 @@
import { Markdown } from '../../../components/Markdown';
+import { Well } from '../../../components/primitives/Well';
+import { RelatedContent } from '../../../components/RelatedContent';
# Query Filter API
+?> We recently improved this API so it’s easier to program and reason about. If you were using it prior to August 17th 2021, [read this guide](/updates/new-graphql-api) for info on how to upgrade.
+
Each field type provides its own set of filters which can be used with [queries](./graphql#all-users).
This page lists all the filters available for each field type.
For more details on how to use filters in queries please consult to the [GraphQL Queries - Filters](../guides/filters) guide.
@@ -147,4 +151,15 @@ The `file` field type does not support filters.
The `image` field type does not support filters.
+## Related resources
+
+
+
+ Query filters are an integral part of Keystone’s powerful GraphQL APIs. This guide will show you how to use filters to get the data you need from your system.
+
+
+
export default ({ children }) => {children};
diff --git a/docs/pages/docs/apis/graphql.mdx b/docs/pages/docs/apis/graphql.mdx
index c3a2ca5ffb6..5692f5e1635 100644
--- a/docs/pages/docs/apis/graphql.mdx
+++ b/docs/pages/docs/apis/graphql.mdx
@@ -1,7 +1,12 @@
import { Markdown } from '../../../components/Markdown';
+import { Well } from '../../../components/primitives/Well';
+import { RelatedContent } from '../../../components/RelatedContent';
+import { InlineCode } from '../../../components/primitives/Code';
# GraphQL API
+?> We recently improved this API so it’s easier to program and reason about. If you were using it prior to August 17th 2021, [read this guide](/updates/new-graphql-api) for info on how to upgrade.
+
Keystone generates a CRUD (create, read, update, delete) GraphQL API based on the [schema](./schema) definition provided in the system [config](./config).
Consider the following system definition:
@@ -407,4 +412,21 @@ type User {
}
```
+## Related resources
+
+
+
+ The API to configure your options used with the list() function.
+
+
+ The API to configure all the parts parts of your Keystone system.
+
+
+
export default ({ children }) => {children};
diff --git a/docs/pages/docs/apis/hooks.mdx b/docs/pages/docs/apis/hooks.mdx
index c14c16234ba..e622bd8100c 100644
--- a/docs/pages/docs/apis/hooks.mdx
+++ b/docs/pages/docs/apis/hooks.mdx
@@ -1,4 +1,6 @@
import { Markdown } from '../../../components/Markdown';
+import { Well } from '../../../components/primitives/Well';
+import { RelatedContent } from '../../../components/RelatedContent';
# Hooks API
@@ -438,4 +440,15 @@ The data resolving steps are applied in the following order:
5. Field hooks (user defined): A `resolveInput` field hook can return a new value for its field, which will the current field value on `resolvedData`.
6. List hooks (user defined): A `resolveInput` list hook can return a new value for the entire `resolvedData` object.
+## Related resources
+
+
+
+ Learn how to use Hooks within your schema to extend Keystone’s powerful CRUD GraphQL APIs with your own business logic.
+
+
+
export default ({ children }) => {children};
diff --git a/docs/pages/docs/apis/list-items.mdx b/docs/pages/docs/apis/list-items.mdx
index 12630497fd1..b0006bf5a1f 100644
--- a/docs/pages/docs/apis/list-items.mdx
+++ b/docs/pages/docs/apis/list-items.mdx
@@ -1,4 +1,6 @@
import { Markdown } from '../../../components/Markdown';
+import { Well } from '../../../components/primitives/Well';
+import { RelatedContent } from '../../../components/RelatedContent';
# List Items API
@@ -144,4 +146,21 @@ const users = await context.lists.User.deleteMany({
});
```
+## Related resources
+
+
+
+ The API for run-time functionality in your Keystone system. Use it to write business logic for access control, hooks, testing, GraphQL schema extensions, and more.
+
+
+ The API for running CRUD operations against the internal GraphQL resolvers in your system. It returns internal item objects, which can be returned from GraphQL resolvers.
+
+
+
export default ({ children }) => {children};
diff --git a/docs/pages/docs/apis/schema.mdx b/docs/pages/docs/apis/schema.mdx
index 9e98cf21fe6..bb153ecab99 100644
--- a/docs/pages/docs/apis/schema.mdx
+++ b/docs/pages/docs/apis/schema.mdx
@@ -1,4 +1,6 @@
import { Markdown } from '../../../components/Markdown';
+import { Well } from '../../../components/primitives/Well';
+import { RelatedContent } from '../../../components/RelatedContent';
# Schema API
@@ -207,4 +209,29 @@ export default config({
The `description` option defines a string which will be used as a description in the Admin UI and GraphQL API docs.
This option can be individually overridden by the `graphql.description` or `ui.description` options.
+## Related resources
+
+
+
+ Defines the names, types, and configuration of Keystone fields. See all the fields and the configuration options they accept.
+
+
+ The API to configure all the parts parts of your Keystone system.
+
+
+ A basic Blog schema with Posts and Authors. Use this as a starting place for learning how to use Keystone. It’s also a starter for other feature projects.
+
+
+
export default ({ children }) => {children};
diff --git a/docs/pages/docs/apis/session.mdx b/docs/pages/docs/apis/session.mdx
index 4fb33c01333..b860e00e9aa 100644
--- a/docs/pages/docs/apis/session.mdx
+++ b/docs/pages/docs/apis/session.mdx
@@ -1,4 +1,6 @@
import { Markdown } from '../../../components/Markdown';
+import { Well } from '../../../components/primitives/Well';
+import { RelatedContent } from '../../../components/RelatedContent';
# Session API
@@ -122,4 +124,23 @@ If you configure your Keystone session with session management then the [`Keysto
The `startSession` and `endSession` functions will be used by [authentication mutations](./auth) to start and end authenticated sessions.
These mutations will set the value of `session` to include the values `{ listKey, itemId }`.
+## Related resources
+
+
+
+ The API to configure all the parts parts of your Keystone system.
+
+
+ Adds password-based authentication to the Task Manager starter project.
+
+
+
export default ({ children }) => {children};
diff --git a/docs/pages/docs/guides/cli.mdx b/docs/pages/docs/guides/cli.mdx
index be2393cfa40..4419dcac954 100644
--- a/docs/pages/docs/guides/cli.mdx
+++ b/docs/pages/docs/guides/cli.mdx
@@ -1,4 +1,6 @@
import { Markdown } from '../../../components/Markdown';
+import { Well } from '../../../components/primitives/Well';
+import { RelatedContent } from '../../../components/RelatedContent';
# Command Line
@@ -186,4 +188,15 @@ yarn keystone-next start
- If you promote your build through separate environments in a pipeline (e.g testing → staging → production) you should run migrations during the **promote** step and **not** as part of the build script.
- It is important you do **not run migrations against your production database from staging builds**. If you have staging or preview environments set up in production, make sure they are not pointed to your production database.
+## Related resources
+
+
+
+ How to use Keystone's CLI app to standup a new local project with an Admin UI & the GraphQL API playground.
+
+
+
export default ({ children }) => {children};
diff --git a/docs/pages/docs/guides/custom-admin-ui-logo.mdx b/docs/pages/docs/guides/custom-admin-ui-logo.mdx
index 00c11d9d90e..e363a2cec0c 100644
--- a/docs/pages/docs/guides/custom-admin-ui-logo.mdx
+++ b/docs/pages/docs/guides/custom-admin-ui-logo.mdx
@@ -1,6 +1,8 @@
import { ComingSoon } from '../../../components/docs/ComingSoon';
import { Markdown } from '../../../components/Markdown';
import { Alert } from '../../../components/primitives/Alert'
+import { Well } from '../../../components/primitives/Well';
+import { RelatedContent } from '../../../components/RelatedContent';
# Custom Admin UI Logo
@@ -46,4 +48,30 @@ Of course this is purely a recommendation, if you would prefer to roll your own
Once you've added your custom logo component you should see it rendered out in the Admin UI.
![image of Admin UI with custom logo](/assets/guides/custom-admin-ui-logo/custom-logo-result.png)
+## Related resources
+
+
+
+ Adds a custom logo component in the Admin UI. Builds on the Task Manager starter project.
+
+
+ Learn how to create your own custom Navigation components in Keytone’s Admin UI.
+
+
+ Learn how to add your own custom pages to Keystone’s Admin UI.
+
+
+
+
export default ({ children }) => {children};
diff --git a/docs/pages/docs/guides/custom-admin-ui-navigation.mdx b/docs/pages/docs/guides/custom-admin-ui-navigation.mdx
index 1ed9376ef94..56482dcfcfe 100644
--- a/docs/pages/docs/guides/custom-admin-ui-navigation.mdx
+++ b/docs/pages/docs/guides/custom-admin-ui-navigation.mdx
@@ -1,4 +1,6 @@
import { Markdown } from '../../../components/Markdown';
+import { Well } from '../../../components/primitives/Well';
+import { RelatedContent } from '../../../components/RelatedContent';
# Custom Admin UI Navigation
@@ -304,4 +306,29 @@ type NavItemProps = {
By default the `isSelected` value will be evaluated by the condition `router.pathname === href`.
Pass in `isSelected` if you have a custom condition or would like more granular control over the "selected" state of Navigation items.
+## Related resources
+
+
+
+ Adds a custom navigation component to the Admin UI. Builds on the Task Manager starter project.
+
+
+ Learn how to add your own custom logo to Keystone’s Admin UI.
+
+
+ Learn how to add your own custom pages to Keystone’s Admin UI.
+
+
+
export default ({ children }) => {children}
diff --git a/docs/pages/docs/guides/custom-admin-ui-pages.mdx b/docs/pages/docs/guides/custom-admin-ui-pages.mdx
index b587f0c4f83..d11de9a0bf3 100644
--- a/docs/pages/docs/guides/custom-admin-ui-pages.mdx
+++ b/docs/pages/docs/guides/custom-admin-ui-pages.mdx
@@ -1,6 +1,8 @@
import { ComingSoon } from '../../../components/docs/ComingSoon';
import { Markdown } from '../../../components/Markdown';
import { Alert } from '../../../components/primitives/Alert';
+import { Well } from '../../../components/primitives/Well';
+import { RelatedContent } from '../../../components/RelatedContent';
# Custom Admin UI Pages
@@ -9,6 +11,8 @@ import { Alert } from '../../../components/primitives/Alert';
In this guide we'll show you how to add custom pages to the Keystone Admin UI.
As the Admin UI is built on top of [Next.js](https://nextjs.org/docs/basic-features/pages), it exposes the same pages directory for adding custom pages.
+## Getting started
+
To create a custom page, ensure that the `admin/pages` directory exists in the root of your Keystone Project.
Much like with Next.js, all files in this directory will be added as routes to the Admin UI.
The default export of every file in this directory is expected to be a valid React Component rendered out as the contents of the route.
@@ -173,4 +177,29 @@ export default function CustomPage () {
Using `emotion` for styling is purely a recommendation, if you would prefer to use another css-in-js or css solution for your custom component please feel free to. This may require additional configuration currently outside of the scope of this guide.
+## Related resources
+
+
+
+ Adds a custom page in the Admin UI. Builds on the Task Manager starter project.
+
+
+ Learn how to add your own custom logo to Keystone’s Admin UI.
+
+
+ Learn how to create your own custom Navigation components in Keytone’s Admin UI.
+
+
+
export default ({ children }) => {children};
diff --git a/docs/pages/docs/guides/custom-fields.mdx b/docs/pages/docs/guides/custom-fields.mdx
index 60acc7995f5..910f91588c4 100644
--- a/docs/pages/docs/guides/custom-fields.mdx
+++ b/docs/pages/docs/guides/custom-fields.mdx
@@ -1,5 +1,7 @@
-import { ComingSoon } from '../../../components/docs/ComingSoon';
import { Markdown } from '../../../components/Markdown';
+import { Well } from '../../../components/primitives/Well';
+import { RelatedContent } from '../../../components/RelatedContent';
+import { InlineCode } from '../../../components/primitives/Code';
# Custom Fields
@@ -223,4 +225,17 @@ export const CardValue: CardValueComponent = ({ item, field }) => {
};
```
+## Related resources
+
+
+
+ Adds a custom field type based on the integer field type which lets users rate items on a 5-star scale. Builds on the Blog starter project.
+
+
+
export default ({ children }) => {children};
diff --git a/docs/pages/docs/guides/document-field-demo.mdx b/docs/pages/docs/guides/document-field-demo.mdx
index 5f906a89733..d80abb27b26 100644
--- a/docs/pages/docs/guides/document-field-demo.mdx
+++ b/docs/pages/docs/guides/document-field-demo.mdx
@@ -9,6 +9,9 @@ import {
DocumentFeaturesProvider,
} from '../../../components/docs/DocumentEditorDemo';
import Intro from './_doc-field-intro.mdx';
+import { Well } from '../../../components/primitives/Well';
+import { RelatedContent } from '../../../components/RelatedContent';
+import { InlineCode } from '../../../components/primitives/Code';
## Configure the demo
@@ -51,3 +54,22 @@ export default ({ children }) => {
);
};
+
+## Related resources
+
+
+
+ Keystone’s document field is a highly customisable rich text editor that stores content as structured JSON. Learn how to configure it and incorporate your own custom React components.
+
+
+ Illustrates how to configure document fields in your Keystone system and render their data in a frontend application. Builds on the Blog starter project.
+
+
diff --git a/docs/pages/docs/guides/document-fields.mdx b/docs/pages/docs/guides/document-fields.mdx
index 5038fdcd3bc..b167b735d1d 100644
--- a/docs/pages/docs/guides/document-fields.mdx
+++ b/docs/pages/docs/guides/document-fields.mdx
@@ -1,4 +1,7 @@
import { Markdown } from '../../../components/Markdown';
+import { Well } from '../../../components/primitives/Well';
+import { RelatedContent } from '../../../components/RelatedContent';
+import { InlineCode } from '../../../components/primitives/Code';
# How To Use Document Fields
@@ -676,4 +679,23 @@ const componentBlockRenderers: InferRenderersForComponentBlocks;
```
+## Related resources
+
+
+
+ Illustrates how to configure document fields in your Keystone system and render their data in a frontend application. Builds on the Blog starter project.
+
+
+ Test drive the many features of Keystone’s Document field on this website.
+
+
+
export default ({ children }) => {children};
diff --git a/docs/pages/docs/guides/filters.mdx b/docs/pages/docs/guides/filters.mdx
index 869cb8acfe3..bca50788605 100644
--- a/docs/pages/docs/guides/filters.mdx
+++ b/docs/pages/docs/guides/filters.mdx
@@ -1,7 +1,11 @@
import { Markdown } from '../../../components/Markdown';
+import { Well } from '../../../components/primitives/Well';
+import { RelatedContent } from '../../../components/RelatedContent';
# GraphQL Queries - Filters
+?> We recently improved our GraphQL API so it’s easier to program and reason about. If you were using it prior to August 17th 2021, [read this guide](/updates/new-graphql-api) for info on how to upgrade.
+
Keystone provides a powerful GraphQL API for querying the data in your system.
At the core of this API are **query filters**.
This guide will show you how to use filters to get data you need.
@@ -171,4 +175,15 @@ For example, to find all the people which have `some` posts with the label `"Hel
}
```
+## Related resources
+
+
+
+ The complete list of filters available to Keystone field types.
+
+
+
export default ({ children }) => {children};
diff --git a/docs/pages/docs/guides/hooks.mdx b/docs/pages/docs/guides/hooks.mdx
index c6a6f1ddd40..685e5ad9925 100644
--- a/docs/pages/docs/guides/hooks.mdx
+++ b/docs/pages/docs/guides/hooks.mdx
@@ -1,4 +1,6 @@
import { Markdown } from '../../../components/Markdown';
+import { Well } from '../../../components/primitives/Well';
+import { RelatedContent } from '../../../components/RelatedContent';
# Hooks
@@ -222,4 +224,12 @@ export default config({
See the [Hooks API](../apis/hooks) for the details of all the arguments available for all the different hook functions.
+## Related resources
+
+
+
+ The complete reference for executing code at different stages of the mutation lifecycle
+
+
+
export default ({ children }) => {children};
diff --git a/docs/pages/docs/guides/index.tsx b/docs/pages/docs/guides/index.tsx
index 57c52da5d11..2da2b2dc68d 100644
--- a/docs/pages/docs/guides/index.tsx
+++ b/docs/pages/docs/guides/index.tsx
@@ -35,14 +35,6 @@ export default function Docs() {
gap: 'var(--space-xlarge)',
})}
>
-
- We’re transitioning to Keystone 6 soon. If you’re wondering which version to start a new
- project with today, this guide is for you.
-
Keystone’s CLI helps you develop, build, and deploy projects. This guide explains all you
need to standup a new backend in the terminal.
@@ -55,14 +47,60 @@ export default function Docs() {
Query filters are an integral part of Keystone’s powerful GraphQL APIs. This guide will
show you how to use filters to get the data you need from your system.
+
+ Learn how to use Hooks within your schema to extend Keystone’s powerful CRUD GraphQL APIs
+ with your own business logic.
+
Keystone’s document field is a highly customisable rich text editor that stores content as
structured JSON. Learn how to configure it and incorporate your own custom React
components.
-
- Learn how to use Hooks within your schema to extend Keystone’s powerful CRUD GraphQL APIs
- with your own business logic.
+
+ Test drive the many features of Keystone’s Document field on this website.
+
+
+ Learn how to define your own custom field types in Keystone, with customisable backend
+ data structure, and Admin UI appearance.
+
+
+ Learn how to test the behaviour of your Keystone system to ensure it does what you expect.
+
+
+ Virtual fields offer a powerful way to extend your GraphQL API. This guide introduces the
+ syntax and shows you how start simply and end up with a complex result.
+
+
+
+ Admin UI Customisation
+
+
+
+ Learn how to add your own custom logo to Keystone’s Admin UI.
+
+
+ Learn how to create your own custom Navigation components in Keytone’s Admin UI.
+
+
+ Learn how to add your own custom pages to Keystone’s Admin UI.
diff --git a/docs/pages/docs/guides/relationships.mdx b/docs/pages/docs/guides/relationships.mdx
index 621ce1597bb..09ce5b98126 100644
--- a/docs/pages/docs/guides/relationships.mdx
+++ b/docs/pages/docs/guides/relationships.mdx
@@ -1,5 +1,7 @@
import { Emoji } from '../../../components/primitives/Emoji';
import { Markdown } from '../../../components/Markdown';
+import { Well } from '../../../components/primitives/Well';
+import { RelatedContent } from '../../../components/RelatedContent';
# Understanding Relationships
@@ -314,4 +316,15 @@ export default config({
Keystone relationships are managed using the [relationship](../apis/fields#relationship) field type. They can be configured as one-sided or two-sided by the `ref` config option. Their cardinality can be set using the `many` flag. Keystone gives you the flexibility to choose what you want based on what you need to achieve.
+## Related resources
+
+
+
+ Defines the names, types, and configuration of Keystone fields. See all the fields and the configuration options they accept.
+
+
+
export default ({ children }) => {children};
diff --git a/docs/pages/docs/guides/testing.mdx b/docs/pages/docs/guides/testing.mdx
index 1efad75ee7a..325010c37da 100644
--- a/docs/pages/docs/guides/testing.mdx
+++ b/docs/pages/docs/guides/testing.mdx
@@ -1,4 +1,7 @@
import { Markdown } from '../../../components/Markdown';
+import { Well } from '../../../components/primitives/Well';
+import { RelatedContent } from '../../../components/RelatedContent';
+import { InlineCode } from '../../../components/primitives/Code';
# Testing
@@ -234,4 +237,29 @@ describe('Example tests using test environment', () => {
});
```
-export default ({ children }) => {children};
+## Related resources
+
+
+
+ Shows you how to write tests against the GraphQL API to your Keystone system. Builds on the Authentication example project.
+
+
+ The API for run-time functionality in your Keystone system. Use it to write business logic for access control, hooks, testing, GraphQL schema extensions, and more.
+
+
+ A programmatic API for running CRUD operations against your GraphQL API. For each list in your system you get an API at context.lists.<listName>.
+
+
+
+export default ({ children }) => {children};
diff --git a/docs/pages/docs/guides/virtual-fields.mdx b/docs/pages/docs/guides/virtual-fields.mdx
index d96a87b590c..df452fe9bc5 100644
--- a/docs/pages/docs/guides/virtual-fields.mdx
+++ b/docs/pages/docs/guides/virtual-fields.mdx
@@ -1,4 +1,6 @@
import { Markdown } from '../../../components/Markdown';
+import { Well } from '../../../components/primitives/Well';
+import { RelatedContent } from '../../../components/RelatedContent';
# Virtual Fields
@@ -314,4 +316,23 @@ Another way to address this is to use a [scalar field](../apis/fields#scalar-typ
The other main consideration is that it is not possible to filter on a virtual field, as each item calcutes its value dynamically, rather than having it stored in the database.
Using a pre-calculated scalar field is the best solution to use if you need filtering for your field.
+## Related resources
+
+
+
+ A demo project that shows you how to add virtual fields to a Keystone list.
+
+
+ A virtual field represents a value which is computed a read time, rather than stored in the database.
+
+
+
export default ({ children }) => {children};
diff --git a/docs/pages/docs/index.tsx b/docs/pages/docs/index.tsx
index cc10a6895c2..09f26a516a4 100644
--- a/docs/pages/docs/index.tsx
+++ b/docs/pages/docs/index.tsx
@@ -101,7 +101,7 @@ export default function Docs() {
We’re graduating Keystone 6 soon. If you’re wondering which version to start a new project
with today, this guide is for you.
diff --git a/docs/pages/docs/walkthroughs/embedded-mode-with-sqlite-nextjs.mdx b/docs/pages/docs/walkthroughs/embedded-mode-with-sqlite-nextjs.mdx
index 1dbf8e24da5..48e3ee4f8f2 100644
--- a/docs/pages/docs/walkthroughs/embedded-mode-with-sqlite-nextjs.mdx
+++ b/docs/pages/docs/walkthroughs/embedded-mode-with-sqlite-nextjs.mdx
@@ -1,4 +1,6 @@
import { Markdown } from '../../../components/Markdown';
+import { Well } from '../../../components/primitives/Well';
+import { RelatedContent } from '../../../components/RelatedContent';
# How to embed Keystone + SQLite in a Next.js app
@@ -38,13 +40,19 @@ Here's what we're going to do:
## Setup a Next.js app
-Create a basic Next.js project with the `--typescript` option in an empty directory.
+x> **Warning:** We normally advise to set up a new Next.js app with `yarn create next-app --typescript my-project`, however this will install Next.js `11.x`. This version isn't compatible with this guide until we upgrade Keystone's Next.js internals to `11.x`.
+
+x> To continue, you'll need to use Next.js `10.x` until this upgrade is completed. We've set up a repository below using Next.js `10.x` you can clone in the mean time.
+
+Clone the basic Next.js project below.
```bash
-yarn create next-app --typescript my-project
-cd my-project
+git clone https://github.com/keystonejs/embedded-mode-with-sqlite-nextjs
+cd embedded-mode-with-sqlite-nextjs
```
+Then run `yarn` to install the dependencies.
+
!> Keystone 6 has great TypeScript support. Including it in your project will make it easier to use Keystone’s APIs later.
Delete the `/pages/api` directory. We’ll add a GraphQL API later in the tutorial. Your `/pages` directory should now look like this:
@@ -256,7 +264,7 @@ export async function getStaticProps({
params,
}: GetStaticPropsContext) {
const [post] = await lists.Post.findMany({
- where: { slug: params!.slug as string },
+ where: { slug: { equals: params!.slug as string } },
query: 'id title content',
});
return { props: { post } };
@@ -317,4 +325,15 @@ Embedded mode is a great way to operate a personal Next.js blog or portfolio wit
Keystone’s Embedded mode and SQLite support gives you the option to run a self contained CMS from the same place you keep your frontend code. While this option restricts read-write access to people who can run the project in local development, it has advantages with ease of setup, security, and web deployment. This is also a great way to deploy a read-only API on the web for content you manage on your computer.
+## Related resources
+
+
+
+ How to use Keystone's CLI app to standup a new local project with an Admin UI & the GraphQL API playground.
+
+
+
export default ({ children }) => {children};
diff --git a/docs/pages/docs/walkthroughs/getting-started-with-create-keystone-app.mdx b/docs/pages/docs/walkthroughs/getting-started-with-create-keystone-app.mdx
index 28005d1e5c8..07efdebe3e7 100644
--- a/docs/pages/docs/walkthroughs/getting-started-with-create-keystone-app.mdx
+++ b/docs/pages/docs/walkthroughs/getting-started-with-create-keystone-app.mdx
@@ -1,4 +1,7 @@
import { Markdown } from '../../../components/Markdown';
+import { Well } from '../../../components/primitives/Well';
+import { RelatedContent } from '../../../components/RelatedContent';
+import { InlineCode } from '../../../components/primitives/Code';
![A terminal with the output of create-keystone-app](/assets/walkthroughs/getting-started/cover.svg)
@@ -120,4 +123,27 @@ Read more about the cli in our [command line guides](/guides/cli).
- Customise Keystone with the [System Configuration API](/apis/config).
- Add fields and relationships using [Schema API](/apis/schema).
+## Related resources
+
+
+
+ Keystone’s CLI helps you develop, build, and deploy projects. This guide explains all you need to standup a new backend in the terminal.
+
+
+ The API to configure your options used with the list() function.
+
+
+ The API to configure all the parts parts of your Keystone system.
+
+
+
export default ({ children }) => {children}
diff --git a/docs/pages/for-developers.tsx b/docs/pages/for-developers.tsx
index 9a8d63884a5..5f2df11ab01 100644
--- a/docs/pages/for-developers.tsx
+++ b/docs/pages/for-developers.tsx
@@ -463,12 +463,29 @@ export default function ForDevelopers() {
gridTemplateRows: 'masonry', // experimental and hopefully supported soon
})}
>
+
+ How good is Keystone support! The answers are fast, thought through, technical when
+ needed, and always gentle... Kudos to the Keystone team, thank you very much!{' '}
+
+
+
+ I love how Keystone’s access control lets me declare every single Create, Read,
+ Update, and Delete operation at both the model and{' '}
+ field level. It’s my favorite way of implementing Auth.
+
Working with Keystone is a very satisfying experience. I wrapped up 50% of my app’s
- schema, API and seed data in a day . The dev
+ schema, API and seed data in a day The dev
experience feels too good to be true {' '}
+
+
+ @KeystoneJS
+ {' '}
+ is almost too good to be open source. I can’t stress enough how awesome the dev
+ experience is. This is what I wish Wordpress was.
+
I think I'm in love. Keystone‘s just what I needed: a dashboard & GraphQL API that
works like a charm. As a frontend dev with skills in node and elastic search, Keystone
diff --git a/docs/pages/releases/2021-08-17.mdx b/docs/pages/releases/2021-08-17.mdx
new file mode 100644
index 00000000000..fff504f9081
--- /dev/null
+++ b/docs/pages/releases/2021-08-17.mdx
@@ -0,0 +1,74 @@
+import { Markdown, getStaticProps } from '../../components/Markdown';
+import { Emoji } from '../../components/primitives/Emoji';
+
+# Release: 17th August 2021
+
+A major milestone in the path to a `General Availability` status for **Keystone 6**, this release includes:
+
+- **A new and improved GraphQL API**
+- Enhancements to Custom Admin UI Pages
+- Better deletion notifications
+- And more…
+
+**⚠️ This release contains breaking changes, please see below!**
+
+```json
+"@keystone-ui/notice": "4.0.1",
+"@keystone-ui/segmented-control": "4.0.2",
+"@keystone-ui/toast": "4.0.2",
+"@keystone-next/admin-ui-utils": "5.0.6",
+"@keystone-next/auth": "31.0.0",
+"@keystone-next/cloudinary": "6.0.6",
+"@keystone-next/fields": "14.0.0",
+"@keystone-next/fields-document": "8.0.0",
+"@keystone-next/keystone": "24.0.0",
+"@keystone-next/testing": "1.1.1",
+"@keystone-next/types": "24.0.0",
+"@keystone-next/utils": "1.0.4",
+```
+
+## A new & improved GraphQL API
+
+We’ve made the experience of working with Keystone’s GraphQL API easier to program and reason about:
+
+- **Queries:** the names of top-level queries are now easier to understand. We also removed deprecated and unused legacy features.
+- **Filters:** the arguments used in queries have been updated to accept a filter object for each field, rather than having all the filter options available at the top level.
+- **Mutations:** all generated CRUD mutations have the same names and return types, but their inputs have changed.
+- **Input Types:** we’ve updated the input types used for relationship fields in `update` and `create` operations, removing obsolete options and making the syntax between the two operations easier to differentiate.
+
+#### Upgrade guidance
+
+We've [written a complete guide](https://keystonejs.com/updates/new-graphql-api) to the improvements we've made, and it includes [a checklist of the steps you need to take to upgrade your Keystone projects](https://keystonejs.com/updates/new-graphql-api#upgrade-checklist). Be sure to check it out!
+
+!> While there are a lot of changes to this API, we've put a lot of effort into making the upgrade process as smooth as possible. If you get stuck or have questions, reach out to us in the [Keystone community slack](https://community.keystonejs.com) to get the help you need.
+
+
+
+## Custom Admin UI Pages
+
+Our [Custom Admin UI Pages](https://keystonejs.com/docs/guides/custom-admin-ui-pages) guide has been expanded, with an example to make your custom pages look more like the Admin UI, as well as adding links to your custom pages from the Admin UI Navigation!
+
+
+
+## Improved Deletion Notifications
+
+When items are deleted via the Admin UI, we now display all the items that were successfully deleted, and any that failed, instead of displaying multiple notifications without any context.
+
+
+
+## Deeper GraphQL Errors
+
+A `config.graphql.debug` option has been added, which can be used to control whether debug information such as stack traces are included in the errors returned by the GraphQL API.
+
+## Prisma Update
+
+Updated Prisma dependencies from `2.27.0` to `2.29.0`, check out the [Prisma releases page](https://github.com/prisma/prisma/releases/tag/2.29.0) for more details.
+
+## Credits
+
+Added option for `Bearer` token auth when using session, thanks to [@gautamsi](https://github.com/gautamsi)!
+
+You can also view the [verbose release notes](https://github.com/keystonejs/keystone/releases/tag/2021-08-17) on GitHub.
+
+export default ({ children, ...props }) => {children};
+export { getStaticProps }
diff --git a/docs/pages/releases/index.mdx b/docs/pages/releases/index.mdx
index 538727144f1..bc09fae72e6 100644
--- a/docs/pages/releases/index.mdx
+++ b/docs/pages/releases/index.mdx
@@ -4,75 +4,79 @@ import { Status } from '../../components/primitives/Status';
# Release Notes
-## 29th July 2021
+## 17th August 2021
-Custom **navigation**, **pages** and **logo** in this big **Admin UI** themed release! — [read more](/releases/2021-07-29)
+A **major milestone** in the path to a General Availability status for Keystone 6 this release includes **new and improved GraphQL API** and more. — [Read more](/releases/2021-08-17)
+
+## 29th July 2021
+
+Custom **navigation**, **pages** and **logo** in this big **Admin UI** themed release! — [Read more](/releases/2021-07-29)
## 13th July 2021
-More examples, types, and UI rendering tweaks as we push forward towards a general availability release! — [read more](/releases/2021-07-13)
+More examples, types, and UI rendering tweaks as we push forward towards a general availability release! — [Read more](/releases/2021-07-13)
## 30th June 2021
-We fixed an issue with `cloudinaryImage` and `relationship` fields. — [read more](/releases/2021-06-30)
+We fixed an issue with `cloudinaryImage` and `relationship` fields. — [Read more](/releases/2021-06-30)
## 29th June 2021
-The ID Field option has been revamped with `cuid`, `uuid` and `autoincrement` options! — [read more](/releases/2021-06-29)
+The ID Field option has been revamped with `cuid`, `uuid` and `autoincrement` options! — [Read more](/releases/2021-06-29)
## 28th June 2021
-A new package to help test the behaviour of your GraphQL API, a document field example, better error messages, accessibility updates and another Prisma update! — [read more](/releases/2021-06-28)
+A new package to help test the behaviour of your GraphQL API, a document field example, better error messages, accessibility updates and another Prisma update! — [Read more](/releases/2021-06-28)
## 15th June 2021
-Keystone Next now has a new core , unblocking many of the features you’ve been waiting for! — [read more](/releases/2021-06-15)
+Keystone Next now has a new core , unblocking many of the features you’ve been waiting for! — [Read more](/releases/2021-06-15)
## 2nd June 2021
-We have a new JSON field , a bunch of new learning resources, and plenty of under the hood optimisations in this big release. — [read more](/releases/2021-06-02)
+We have a new JSON field , a bunch of new learning resources, and plenty of under the hood optimisations in this big release. — [Read more](/releases/2021-06-02)
## 19th May 2021
-Node updates and Admin UI has moved! — [read more](/releases/2021-05-19)
+Node updates and Admin UI has moved! — [Read more](/releases/2021-05-19)
## 17th May 2021
-Apollo caching can now be configured for performance and a basic authentication example to get your started — [read more](/releases/2021-05-17)
+Apollo caching can now be configured for performance and a basic authentication example to get your started — [Read more](/releases/2021-05-17)
## 11th May 2021
-A bunch of admin UI tweaks in this release , among other minor fixes — [read more](/releases/2021-05-11)
+A bunch of admin UI tweaks in this release , among other minor fixes — [Read more](/releases/2021-05-11)
## 5th May 2021
-Aside from dependency updates , we added an `isIndexed` config option to the `text`, `integer`, `float`, `select`, and `timestamp` field types — [read more](/releases/2021-05-05)
+Aside from dependency updates , we added an `isIndexed` config option to the `text`, `integer`, `float`, `select`, and `timestamp` field types — [Read more](/releases/2021-05-05)
## 3rd May 2021
-Files in Keystone Next ! This release involved a bunch of busywork behind the scenes in Keystone Next — [read more](/releases/2021-05-03)
+Files in Keystone Next ! This release involved a bunch of busywork behind the scenes in Keystone Next — [Read more](/releases/2021-05-03)
## 20th April 2021
-Improvements to the Lists API, deprecating `resolveFields` — [read more](/releases/2021-04-20)
+Improvements to the Lists API, deprecating `resolveFields` — [Read more](/releases/2021-04-20)
## 6th April 2021
-Controlled code demolition , Better pagination in Admin UI — [read more](/releases/2021-04-06)
+Controlled code demolition , Better pagination in Admin UI — [Read more](/releases/2021-04-06)
## 30th March 2021
-Goodbye legacy code , Improved `select` field type , Squashed bugs — [read more](/releases/2021-03-30)
+Goodbye legacy code , Improved `select` field type , Squashed bugs — [Read more](/releases/2021-03-30)
## 23rd March 2021
-Added support for SQLite with Prisma , Noteworthy bug-squashing — [read more](/releases/2021-03-23)
+Added support for SQLite with Prisma , Noteworthy bug-squashing — [Read more](/releases/2021-03-23)
## 22nd March 2021
-Prisma migrations , Noteworthy bug-squashing — [read more](/releases/2021-03-22)
+Prisma migrations , Noteworthy bug-squashing — [Read more](/releases/2021-03-22)
diff --git a/docs/pages/updates/index.tsx b/docs/pages/updates/index.tsx
index 92518a0fdd8..e10cf09a19b 100644
--- a/docs/pages/updates/index.tsx
+++ b/docs/pages/updates/index.tsx
@@ -10,6 +10,7 @@ import { Alert } from '../../components/primitives/Alert';
import { Type } from '../../components/primitives/Type';
import { DocsPage } from '../../components/Page';
import { ArrowR } from '../../components/icons/ArrowR';
+import { Emoji } from '../../components/primitives/Emoji';
import { useMediaQuery } from '../../lib/media';
type TimelineProps = {
@@ -165,7 +166,26 @@ export default function WhatsNew() {
gap: 0,
})}
>
-
+
+
+ A major milestone in the path to a General Availability status
+ for Keystone 6, we've just released a new and improved GraphQL API.{' '}
+
+
+
+ We’ve made the experience of working with Keystone’s GraphQL API easier to program and
+ reason about: We've{' '}
+ written a complete guide to
+ the improvements we've made, and it includes a{' '}
+
+ checklist of the steps you need to take to upgrade your Keystone projects
+
+ .
+
+
+ Be sure to check it out!
+
+
We're opening Admin UI up to support a more personal content experience. Now you can:
@@ -392,7 +412,7 @@ export default function WhatsNew() {
Keystone 5 is now in maintenance mode while we focus all our efforts on building Keystone
diff --git a/docs/pages/docs/guides/keystone-5-vs-keystone-6-preview.mdx b/docs/pages/updates/keystone-5-vs-keystone-6-preview.mdx
similarity index 98%
rename from docs/pages/docs/guides/keystone-5-vs-keystone-6-preview.mdx
rename to docs/pages/updates/keystone-5-vs-keystone-6-preview.mdx
index 0ded46e55ad..75bae6756d5 100644
--- a/docs/pages/docs/guides/keystone-5-vs-keystone-6-preview.mdx
+++ b/docs/pages/updates/keystone-5-vs-keystone-6-preview.mdx
@@ -1,4 +1,4 @@
-import { Markdown } from '../../../components/Markdown';
+import { Markdown } from '../../components/Markdown';
# Keystone 5 vs 6, which should you use?
diff --git a/docs/pages/updates/new-graphql-api.mdx b/docs/pages/updates/new-graphql-api.mdx
index 47c6b0afc89..bb1b40223af 100644
--- a/docs/pages/updates/new-graphql-api.mdx
+++ b/docs/pages/updates/new-graphql-api.mdx
@@ -48,7 +48,7 @@ export const lists = createSchema({
## Query
-We’ve changed the names of our top-level queries easier understand.
+We’ve changed the names of our top-level queries so they’re easier to understand.
We also took this opportunity to remove deprecated and unused legacy features.
### Changes
@@ -138,11 +138,12 @@ tasks(
) { id }
```
-There is a one-to-one correspondence between the old filters and the new filters, so you can make a simple systematic set of changes to bring your filters up to date.
+There is a one-to-one correspondence between the old filters and the new filters.
+No filter functionality has been removed or added, however the individual filters are now in a nested object, and the names have changed from `snake_case` to `camelCase`.
?> **Note:** The old filter syntax used `{ fieldName: value }` to test for equality. The new syntax requires you to make this explicit, and write `{ fieldName: { equals: value} }`.
-!> See the [Filters Guide](/docs/guides/filters) for a detailed walk through the new filtering syntex.
+!> See the [Filters Guide](/docs/guides/filters) for a detailed walk through the new filtering syntax.
!> See the [API docs](/docs/apis/filters) for a comprehensive list of all the new filters for each field type.
@@ -386,7 +387,7 @@ input TagRelateToManyForCreateInput {
## Upgrade Checklist
-While there are a lot of changes to this API, if you approach the upgrade process systematically your experience should be pretty smooth. If you get stuck or have questions, reach out to us in the [Keystone community slack](https://community.keystonejs.com/) to get the help you need.
+While there are a lot of changes to this API, we've put a lot of effort into making the upgrade process as smooth as possible. If you get stuck or have questions, reach out to us in the [Keystone community slack](https://community.keystonejs.com/) to get the help you need.
?> Before you begin: check that your project doesn't rely on any of the features we've marked as deprecated in this document, or the `search` argument to filters. If you do, apply the recommended substitute.
diff --git a/docs/pages/updates/roadmap.tsx b/docs/pages/updates/roadmap.tsx
index 6a66741b49b..a469b123120 100644
--- a/docs/pages/updates/roadmap.tsx
+++ b/docs/pages/updates/roadmap.tsx
@@ -240,7 +240,7 @@ export default function Roadmap() {
{/*
If you're assessing whether to start a project today on Keystone 5 or 6, check our{' '}
-
+
Comparison Page */}
diff --git a/docs/public/assets/benoit-richert.jpg b/docs/public/assets/benoit-richert.jpg
new file mode 100644
index 00000000000..8264538c5fc
Binary files /dev/null and b/docs/public/assets/benoit-richert.jpg differ
diff --git a/docs/public/assets/divslingerx.jpg b/docs/public/assets/divslingerx.jpg
new file mode 100644
index 00000000000..e0cc3fc6b72
Binary files /dev/null and b/docs/public/assets/divslingerx.jpg differ
diff --git a/docs/redirects.js b/docs/redirects.js
index 52a8281777f..e4beb19507c 100644
--- a/docs/redirects.js
+++ b/docs/redirects.js
@@ -106,7 +106,12 @@ const ORIGINAL_NEXT = [
const CURRENT = [
{
source: '/docs/guides/keystone-5-vs-keystone-next',
- destination: '/docs/guides/keystone-5-vs-keystone-6-preview',
+ destination: '/updates/keystone-5-vs-keystone-6-preview',
+ permanent: true,
+ },
+ {
+ source: '/docs/guides/keystone-5-vs-keystone-6-preview',
+ destination: '/updates/keystone-5-vs-keystone-6-preview',
permanent: true,
},
];
diff --git a/tests/test-projects/crud-notifications/CHANGELOG.md b/tests/test-projects/crud-notifications/CHANGELOG.md
index 4315359a821..d1ab06577e5 100644
--- a/tests/test-projects/crud-notifications/CHANGELOG.md
+++ b/tests/test-projects/crud-notifications/CHANGELOG.md
@@ -1,6 +1,7 @@
# @keystone-next/test-projects-crud-notifications
## 0.0.3
+
### Patch Changes
- Updated dependencies [[`e9f3c42d5`](https://github.com/keystonejs/keystone/commit/e9f3c42d5b9d42872cecbd18fbe9bf9d7d53ed82), [`5cd8ffd6c`](https://github.com/keystonejs/keystone/commit/5cd8ffd6cb822dbee8555b47846a5019c4d2b1c3), [`1cbcf54cb`](https://github.com/keystonejs/keystone/commit/1cbcf54cb1206461866b582865e3b1a8fc728f18), [`a92169d04`](https://github.com/keystonejs/keystone/commit/a92169d04e5a1a98deb8e757b8eae3b06fc66450), [`5cd8ffd6c`](https://github.com/keystonejs/keystone/commit/5cd8ffd6cb822dbee8555b47846a5019c4d2b1c3), [`b696a9579`](https://github.com/keystonejs/keystone/commit/b696a9579b503db86f42776381e247c4e1a7409f), [`f3014a627`](https://github.com/keystonejs/keystone/commit/f3014a627060c7cd86440a6937da5caecfd023a0), [`092df6678`](https://github.com/keystonejs/keystone/commit/092df6678cea18d639be16ad250ec4ecc9250f5a), [`5cd8ffd6c`](https://github.com/keystonejs/keystone/commit/5cd8ffd6cb822dbee8555b47846a5019c4d2b1c3), [`6da56b80e`](https://github.com/keystonejs/keystone/commit/6da56b80e03c748a621afcca6c1ec2887fef7271), [`4f4f0351a`](https://github.com/keystonejs/keystone/commit/4f4f0351a056dea9d1614aa2a3a4789d66bb402d), [`697efa354`](https://github.com/keystonejs/keystone/commit/697efa354b1066b3d4b6eb757ca704b458f45e93), [`c7e331d90`](https://github.com/keystonejs/keystone/commit/c7e331d90a28b2ed8236100097cb8d34a11fabe2), [`3a7a06b2c`](https://github.com/keystonejs/keystone/commit/3a7a06b2cc6b5ea157d34d925b15494b471899eb), [`272b97b3a`](https://github.com/keystonejs/keystone/commit/272b97b3a10c0dfada782171d55ef7ac6f47c98f), [`78dac764e`](https://github.com/keystonejs/keystone/commit/78dac764e1860b33f9e2bd8cee6015abeaaa5ec4), [`399561b27`](https://github.com/keystonejs/keystone/commit/399561b2769ddd8f3d3fdf29838f5784404bb053), [`9d361c1c8`](https://github.com/keystonejs/keystone/commit/9d361c1c8625e1390f837b7318b63547d686a63b), [`0dcb1c95b`](https://github.com/keystonejs/keystone/commit/0dcb1c95b5200750cc8649485425f2ae40d023a3), [`94435ffee`](https://github.com/keystonejs/keystone/commit/94435ffee765824091899242e4a2f73c7356b524), [`5cd8ffd6c`](https://github.com/keystonejs/keystone/commit/5cd8ffd6cb822dbee8555b47846a5019c4d2b1c3), [`56044e2a4`](https://github.com/keystonejs/keystone/commit/56044e2a425f4256b66475fd3b1a6342cd6c3bf9), [`f46fd32b7`](https://github.com/keystonejs/keystone/commit/f46fd32b7047dbb5ea2566859f7ecee8db5b0b15), [`874f2c405`](https://github.com/keystonejs/keystone/commit/874f2c4058c9cf006213e84b9ffcf39c5bf144e8), [`8ea4eed55`](https://github.com/keystonejs/keystone/commit/8ea4eed55367aaa213f6b4ffb7473087498e39ae), [`e3fe6498d`](https://github.com/keystonejs/keystone/commit/e3fe6498dc36203d8080dff3c2e0c25f6c98733e), [`1030296d1`](https://github.com/keystonejs/keystone/commit/1030296d1f304dc44246e895089ac1f992e80590), [`3564b342d`](https://github.com/keystonejs/keystone/commit/3564b342d6dc2127ae591d7ac055af9eae90543c), [`8b2d179b2`](https://github.com/keystonejs/keystone/commit/8b2d179b2463d78b082182ca9afa8233109e0ba3), [`e3fefafcc`](https://github.com/keystonejs/keystone/commit/e3fefafcce6f8bf836c9bf0f4d931b8200ba41c7), [`4d9f89f88`](https://github.com/keystonejs/keystone/commit/4d9f89f884e2bf984fdd74ca2cbb7874b25b9cda), [`686c0f1c4`](https://github.com/keystonejs/keystone/commit/686c0f1c4a1feb609e1584aa71738709bbbf984e), [`d214e2f72`](https://github.com/keystonejs/keystone/commit/d214e2f72bae1c798e2415a38410d6063c333e2e), [`f5e64af37`](https://github.com/keystonejs/keystone/commit/f5e64af37df2eb460c89d89fa3c8924fb34970ed)]: