The superpowered headless CMS for Node.js — built with GraphQL and React
MIT License
Bot releases are hidden (Show)
Published by bladey almost 3 years ago
Expanded unique filters, customisable table and column names support and a new example featuring Nexus as we continue to finalise our GA release. 🪢
"@keystone-next/auth": "36.0.0",
"@keystone-next/cloudinary": "11.0.0",
"@keystone-next/fields-document": "13.0.0",
"@keystone-next/keystone": "28.0.0",
"@keystone-next/session-store-redis": "8.0.0",
Like this release? Give us a star on GitHub!
select
, timestamp
, float
and decimal
fields with isIndexed: 'unique'
now have unique filters via ListWhereUniqueInput
which text
, integer
and the id
field already support.
For example, if you added isIndexed: 'unique'
to a select field in a theoretical Settings list, you can now run the following query:
query {
setting ( where: { provider: "github" } ) {
id
token
}
}
This is instead of running a settings query where you would have received a list back, and have had to check for results and get the first element:
query {
settings ( where: { provider: { equals: "github" } } ) {
id
token
}
}
You may now use different table and column names to those automatically chosen by Keystone for your list and field keys. This is powered by Prisma's @map and @@map attributes. You can read more about this concept in Prisma's documentation.
This is useful if you do not want to modify your existing database (such as a read-only database) and use it with Keystone.
For example if you wanted to refer to a table named stories
but you refer to it in Keystone as Posts
provide config.db.map
to a list or field key such as:
Post: list({
db: {
map: 'stories',
},
fields: {
...
}
})
We've got a new example using Nexus, a declarative, code-first and strongly typed GraphQL schema construction for TypeScript & JavaScript.
Using Nexus you can extend the GraphQL API provided by Keystone with custom queries and mutations.
In the example below we expose a mutation called nexusPosts
which pulls out items from our Posts
list that have been published within the past 7 days (by default), with an optional author filter.
export const PostQuery = extendType({
type: "Query",
definition(t) {
t.field("nexusPosts", {
type: nonNull(list("NexusPost")),
args: {
authorId: stringArg(),
days: nonNull(intArg({ default: 7 })),
},
async resolve(root, { authorId, days }, context) {
const cutoff = new Date(
new Date().setUTCDate(new Date().getUTCDate() - days)
).toISOString();
return await context.prisma.post.findMany({
where: {
...(authorId ? { author: { id: authorId } } : null),
publishDate: { gt: cutoff },
},
});
},
});
},
});
Check out the example in Keystone's examples directory.
DatePicker
now uses the user's locale.sessionData
option is invalid, the error will now be thrown on startup instead of silently ignored.You can also the verbose changelog in the related PR (https://github.com/keystonejs/keystone/pull/6914) for this release.
Published by bladey almost 3 years ago
Patch release.
"@keystone-next/keystone": "27.0.2",
ui.isAccessAllowed
Star this repo 🌟 ☝️ or connect to Keystone on Twitter and in Slack.
You can also view the verbose changelog in the related PR (https://github.com/keystonejs/keystone/pull/6892) for this release.
Published by bladey almost 3 years ago
Patch release.
"@keystone-next/keystone": "27.0.1",
Star this repo 🌟 ☝️ or connect to Keystone on Twitter and in Slack.
You can also view the verbose changelog in the related PR (https://github.com/keystonejs/keystone/pull/6871) for this release.
Published by bladey almost 3 years ago
Server-side Live Reloading is here! 🚀 Plus more updates as we finalise the Keystone 6 GA release.
"keystone-next/auth": "35.0.0",
"keystone-next/cloudinary": "10.0.0",
"keystone-next/fields-document": "12.0.0",
"keystone-next/keystone": "27.0.0",
"keystone-next/session-store-redis": "7.0.0",
Like this release? Give us a star on GitHub!
Warning: ⚠️ This release contains breaking changes, please see below!
Keystone now supports live reloading with keystone-next dev
.
You can now update your GraphQL schema, change your hooks and access control, log errors and see how your data returns, then immediately use the playground to test it and iterate.
This is in addition to the current support for live reloading changes to custom views in the Admin UI.
When you run keystone-next dev
now, it will start watching for changes to your config and schema. When changes are detected, Keystone will reload your config and schema and hot-swap the GraphQL endpoint.
To balance performance and predictability, Keystone does not do a complete restart when changes are made. The things to know are:
The Prisma Client is not reloaded as you make changes to the Keystone Schema. If you make changes that affect your Prisma schema, Keystone will exit the process and wait for you to run keystone-next dev
again.
This is because making database schema changes involves generating database migrations, and can result in data loss if those migrations are automatically run against your current database.
When adding or removing lists and fields (except virtual fields), we recommend you finish making your changes then start the dev
process again. This will generate a single migration for all the changes you’ve made, and interactively prompt you to resolve any migrations that can't be run safely.
The db.onConnect
function (if specified) will only be run once when Keystone is started, and not when your config is hot reloaded.
This is because onConnect
is typically used to run data seeding and other once-off processes that should be executed once before the Keystone server comes online. Re-running it whenever a file is changed could result in a heavy database load, harming overall dev performance and introducing unpredictable behaviour.
If you make changes to the onConnect
function, you need to manually stop the dev
process and start it again for your changes to take effect.
In the last release we upgraded to Apollo Server 3 which brought Apollo Sandbox as the default development UI for testing your GraphQL queries.
This surfaced a number of issues as Apollo Sandbox is hosted remotely rather than locally, including CORS issues and security concerns, making it a bad default.
With this in mind, Keystone will now go back to using the GraphQL Playground by default instead of Apollo Sandbox as it did prior to updating to Apollo Server 3.
We have now introduced the graphql.playground
config option, with three possible settings:
true
will configure Apollo Server plugins to enable the GraphQL Playgroundfalse
will configure Apollo Server plugins to disable any GET
requests to the GraphQL endpoint'apollo'
will add no plugins to Apollo Server, enabling the new Apollo Sandbox behaviourgraphql.playground
defaults to process.env.NODE_ENV !== 'production'
which matches the previous Keystone 6 behaviour before the October update and Apollo Server 3.
We've updated our Next.js dependency from 11.x
to 12.x
! This latest release of Next.js includes a new Rust powered compiler with faster refresh and build rates, making your Keystone dev experience even faster.
Check out the Next.js blog for more details.
If you have hundreds of items in your relationship fields, the Admin UI was sometimes displaying duplicate entries and/or missing entries.
We've made a series of improvements to fetching data resulting in a performance boost, as well as filtering fixes. We also changed the way we detect when an ID is pasted into the field allowing you to select a related item quickly.
We've removed the graphql.cors
option, we had one too many ways to configure CORS and it was proving to be confusing.
You should now exclusively configure cors
with the server.cors
option.
src
in Image and File Fields 🗄️⚠️ Breaking Change
The src
field on the output of image
and file
fields has been renamed to url
.
Subsequently the getSrc
function on ImagesContext
and FilesContext
has been renamed to getUrl
.
resolveFields
🚧The deprecated resolveFields
from context.query
has been removed.
If you were still using it, you should switch to providing the query option
to context.query
or use context.db
if you were providing false
.
The context.query
functions will now also throw an error if an empty string is passed to query
rather than silently returning what the context.db
functions return, you must select at least one field or omit the query
option to default to selecting the id
.
We have updated @graphql-ts/schema
to 0.5.0
.
The __rootVal
properties on ObjectType
, InterfaceType
and UnionType
have been renamed to __source
, this is intended to be internal but you may have depended on it, if you were using it, rename __rootVal
to __source
.
In addition the fields
property on InterfaceType
has been renamed to __fields
and it will no longer exist at runtime like the other types.
We've made internal changes to the endSession
field on the Mutation
type and the keystone
field on the Query
type. This may result in re-ordering in your generated schema.graphql
file.
sessionSchema
export of @keystone-next/keystone/session
has been removed.context.session
no longer has a value if the session is invalid.text
, integer
, float
and decimal
on the item view now render correctly when using ui.itemView.fieldMode: 'read'
.ui.hideCreate
and won't show a plus button when create is disabled.as const
when writing an array and then passing it to various APIs in Keystone will now work.LinkToRelatedItems
button for double sided relationships.We've updated our Prisma dependency from 3.1.1
to 3.3.0
!
Check out the Prisma releases page for more details.
Added a short plain-text display to document
fields in the List
view as well as a rendered document view in CardValue
. Thanks @oplik0!
We now support extensions with numerical characters when generating safe filenames. Thanks @Zlitus!
You can view the verbose change log in the related PR (https://github.com/keystonejs/keystone/pull/6762) for this release.
Published by bladey about 3 years ago
We're nearly at Gold Master status for the Keystone 6 GA release! Here's what's new:
createContext
inside extendExpressApp
👩🏫We've got further improvements to error messaging and performance to come in the next release!
Warning: This release contains breaking changes, please see below!
"@keystone-next/auth": "33.0.0",
"@keystone-next/cloudinary": "8.0.0",
"@keystone-next/fields-document": "10.0.0",
"@keystone-next/keystone": "26.0.1",
"@keystone-next/session-store-redis": "5.0.0",
Be sure to read the entire release notes below for everything you need to know about this new release.
The main things to keep in mind are:
defaultValue
config is now static, if you have dynamic defaults, use the resolveInput
hookisRequired
for fields is now validation: { isRequired }
and we have new validation options such as min
and max
for some fieldshooks
API has new arguments, and we've consolidated update and delete events into beforeOperation
and afterOperation
context.lists
has been renamed to context.query
Keystone's field types have been given a big overhaul - including several breaking changes, read on to understand what has changed.
Warning: Some of these API changes are breaking and you will be required to update your project.
defaultValue
is now a static valueisRequired
has moved to validation.isRequired
validation.length.min
, validation.length.max
and validation.match
optionsdefaultValue
is now a static numberisRequired
has moved to validation.isRequired
validation.min
and validation.max
optionsdefaultValue
is now a static number or { kind: 'autoincrement' }
isRequired
has moved to validation.isRequired
validation.min
and validation.max
optionsThe autoIncrement
field has also been removed, use the integer field with a defaultValue
of { kind: 'autoincrement' }
.
defaultValue
is now a static number written as a stringisRequired
has moved to validation.isRequired
NaN
validation.min
and validation.max
optionsdefaultValue
is now a static date time value in an ISO8601 string or { kind: 'now' }
isRequired
has moved to validation.isRequired
The field can also be automatically set to the current time on a create/update by setting db.updatedAt: true
, this will add Prisma's @updatedAt
attribute to the field.
The timestamp
field also now uses a custom GraphQL scalar type named DateTime
which requires inputs as full ISO8601 date-time strings such as "2021-01-30T00:00:00.000Z"
. Using new Date().toISOString()
will give you a string in the correct format.
dataType
has been renamed to type
defaultValue
is now a static valueisRequired
has moved to validation.isRequired
The select
can now also be cleared in the Admin UI when ui.displayMode
is segmented-control
.
defaultValue
has been removedisRequired
has moved to validation.isRequired
rejectCommon
has moved to validation.rejectCommon
minLength
has moved to validation.length.min
validation.length.max
and validation.match
optionsvalidation.length.min
also must be 1
or above, though it still defaults to 8
.
If workFactor
is outside of the range of 6
to 31
, an error will now be thrown instead of the previous behaviour of clamping the value to 4
to 31
and warning if it's below 6
.
isRequired
defaultValue
If you were using these options, the same behaviour can be re-created with the validateInput
and resolveInput
hooks respectively.
isRequired
defaultValue
If you were using these options, the same behaviour can be re-created with the validateInput
and resolveInput
hooks respectively.
isRequired
defaultValue
If you were using these options, the same behaviour can be re-created with the validateInput
and resolveInput
hooks respectively.
isRequired
defaultValue
can no longer be dynamic in the json
fieldIf you were using isRequired
, the same behaviour can be re-created with the validateInput
hook.
defaultValue
withMeta
optionTo re-create defaultValue
, you can use resolveInput
though note that if you're using autoincrement ids, you need to return the id as number, not a string like you would provide to GraphQL, e.g. { connect: { id: 1 } }
rather than { connect: { id: "1" } }
.
If you were using withMeta: false
, please open an issue with your use case.
The checkbox
field is now non-nullable in the database, if you need three states, you should use the select
field.
The field no longer accepts dynamic default values and it will default to false
unless a different defaultValue
is specified.
If you're using SQLite, Prisma will generate a migration that makes the column non-nullable and sets any rows that have null values to the defaultValue
.
If you're using PostgreSQL, Prisma will generate a migration but you'll need to modify it if you have nulls in a checkbox field. Keystone will say that the migration cannot be executed:
✨ Starting Keystone
⭐️ Dev Server Ready on http://localhost:3000
✨ Generating GraphQL and Prisma schemas
✨ There has been a change to your Keystone schema that requires a migration
⚠️ We found changes that cannot be executed:
• Made the column `isAdmin` on table `User` required, but there are 1 existing NULL values.
✔ Name of migration … make-is-admin-non-null
✨ A migration has been created at migrations/20210906053141_make_is_admin_non_null
Please edit the migration and run keystone-next dev again to apply the migration
The generated migration will look like this:
/*
Warnings:
- Made the column `isAdmin` on table `User` required. This step will fail if there are existing NULL values in that column.
*/
-- AlterTable
ALTER TABLE "User" ALTER COLUMN "isAdmin" SET NOT NULL,
ALTER COLUMN "isAdmin" SET DEFAULT false;
To make it set any null values to false in your database, you need to modify it so that it looks like this but with the table and column names replaced.
ALTER TABLE "User" ALTER COLUMN "isAdmin" SET DEFAULT false;
UPDATE "User" SET "isAdmin" = DEFAULT WHERE "isAdmin" IS NULL;
ALTER TABLE "User" ALTER COLUMN "isAdmin" SET NOT NULL;
The document
field is now non-nullable in the database. The field no longer has defaultValue
or isRequired
options.
The same behaviour can be re-created with the validateInput
and resolveInput
hooks respectively.
The field will default to [{ "type": "paragraph", "children": [{ "text": "" }] }]
. The output type has also been renamed to ListKey_fieldKey_Document
If you're using SQLite, Prisma will generate a migration that makes the column non-nullable and sets any rows that have null values to an empty paragraph.
If you're using PostgreSQL, Prisma will generate a migration but you'll need to modify it if you have nulls in a document
field.
Keystone will say that the migration cannot be executed:
✨ Starting Keystone
⭐️ Dev Server Ready on http://localhost:3000
✨ Generating GraphQL and Prisma schemas
✨ There has been a change to your Keystone schema that requires a migration
⚠️ We found changes that cannot be executed:
• Made the column `content` on table `Post` required, but there are 1 existing NULL values.
✔ Name of migration … make_document_field_non_null
✨ A migration has been created at migrations/20210915050920_make_document_field_non_null
Please edit the migration and run keystone-next dev again to apply the migration
The generated migration will look like this:
/*
Warnings:
- Made the column `content` on table `Post` required. This step will fail if there are existing NULL values in that column.
*/
-- AlterTable
ALTER TABLE "Post" ALTER COLUMN "content" SET NOT NULL,
ALTER COLUMN "content" SET DEFAULT E'[{"type":"paragraph","children":[{"text":""}]}]';
To make it set any null values to an empty paragraph in your database, you need to modify it so that it looks like this but with the table and column names replaced.
ALTER TABLE "Post" ALTER COLUMN "content" SET DEFAULT E'[{"type":"paragraph","children":[{"text":""}]}]';
UPDATE "Post" SET "content" = DEFAULT WHERE "content" IS NULL;
ALTER TABLE "Post" ALTER COLUMN "content" SET NOT NULL;
text
, float
, integer
, decimal
, timestamp
, select
, password
can be made non-nullable at the database-level with the isNullable
option which defaults to true
, except for text
which defaults to false
.
All fields above except password
can also have:
graphql.read.isNonNull
set if the field has isNullable: false
and you have no read access control and you don't intend to add any in the future, it will make the GraphQL output field non-nullable.
graphql.create.isNonNull
set if you have no create access control and you don't intend to add any in the future, it will make the GraphQL create input field non-nullable.
Keep in mind, checkbox
is now always non-nullable.
We've consolidated the beforeChange
/beforeDelete
and afterChange
/afterDelete
hooks into beforeOperation
and afterOperation
.
Additionaly, we've renamed:
originalInput
for access control functions to inputData
originalInput
for hook functions to inputData
existingItem
for all hooks (except afterOperation
) to item
existingItem
for afterOperation
to originalItem
updatedItem
for afterOperation
to item
See the Hooks API docs for a complete reference for the updated API!
Some unused return types and unused values from enum definitions have been removed:
sendUserPasswordResetLink
and sendUserMagicAuthLink
only ever return null
, so now have return types of Boolean
.UserAuthenticationWithPasswordFailure
no longer has a code
value.MagicLinkRedemptionErrorCode
and PasswordResetRedemptionErrorCode
no longer have the values IDENTITY_NOT_FOUND
, MULTIPLE_IDENTITY_MATCHES
, TOKEN_NOT_SET
, or TOKEN_MISMATCH
.If you were using the createSchema
function, you can also remove the call to createSchema
and pass the lists directly to the lists
property.
Before:
import { config, createSchema, list } from '@keystone-next/keystone';
config({
lists: createSchema({
User: list({ ... }),
}),
})
After:
import { config, list } from '@keystone-next/keystone';
config({
lists: {
User: list({ ... }),
},
})
We've removed the deprecated config.db.adapter
option. Please use config.db.provider
to indicate the database provider for your system.
Finally, the internal protectIdentities
variable which was previously hardcoded to true
to protect user data, there are no immediate plans to implement this as a configurable option.
The API context.lists
has been renamed to context.query
, and context.db.lists
has been renamed to context.db
.
The skipAccessControl
argument to createContext
to sudo
for consistency with context.sudo()
.
When using the experimental option config.experimental.generateNodeAPI
, the api
module now exports query
rather than lists
.
Renamed graphQLReturnFragment
to ui.query
in the virtual field options. The virtual field now checks if ui.query
is required for the GraphQL output type, and throws an error if it is missing. If you don't want want the Admin UI to fetch the field, you can set ui.itemView.fieldMode
and ui.listView.fieldMode
to 'hidden'
instead of providing ui.query
.
Also, we've moved the graphql
export of @keystone-next/keystone/types
to @keystone-next/keystone
.
Error messages have been improved across the board, in summary:
We've optimised the itemView
field mode fetching - we now only fetch the item once to determine the field modes rather than once per field.
The Admin UI will also skip fetching fields that have a statically set itemView.fieldMode: 'hidden'
on the itemView
.
The id
argument to the KeystoneAdminUIFieldMeta.itemView
GraphQL field can now be omitted which will make KeystoneAdminUIFieldMetaItemView.fieldMode
return null when there isn't a static field mode.
The itemView
also no longer uses a sudo context when fetching the item in the KeystoneAdminUIFieldMetaItemView.fieldMode
. Previously, if someone had access to the Admin UI(ui.isAccessAllowed
) and a field had a itemView.fieldMode
function that used the item
argument, someone could bypass access control to determine whether or not an item with a given id exists.
Query generation performance has been improved when querying single relationships without filter-based access control.
When resolving related items, we often have a foreign key available to us that we can use to help optimise the subsequent related item query. If, on top of this, there are no filter-based access control rules in place, then we can use the Prisma findUnique operation, which will group all the operations into a single database query. This solves the GraphQL N+1 query problem in this specific instance.
This release also adds createContext
to the extendExpressApp
function giving you access to the full context API from Keystone.
In a new example we demonstate how to create REST endpoints by extending Keystone's express app and using the Query API to execute queries against the schema.
Note: You can find all of our examples in our examples folder on GitHub.
The KeystoneAdminUIFieldMeta.isOrderable
and KeystoneAdminUIFieldMeta.isFilterable
fields are no longer statically resolvable and will now take into account the context/session. This also means isOrderable
and isFilterable
are no longer accessible on useList().fields[fieldKey].isOrderable/isFilterable
, they can be fetched through GraphQL if you need them in the Admin UI.
The sendItemMagicAuthLink
and sendItemPasswordResetLink
mutations now always return true
instead of always returning null
Added support for dynamic isFilterable
and isOrderable
field config values. If a function is provided for these config option, it will be dynamically evaluated each time the field is used for filtering and ordering, and an error will be returned if the function returns false
.
Apollo Server has had a major upgrade to Version 3.
The Apollo documentation contains a full list of breaking changes introduced by this update.
You can configure the Apollo Server provided by Keystone using the graphql.apolloConfig
configuration option.
The most prominent change for most users will be that the GraphQL Playground has been replaced by the Apollo Sandbox.
If you prefer to keep the GraphQL Playground, you can configure your server by following these instructions.
We've updated our Prisma dependency from 2.30.2
to 3.1.1
!
Note that Keystone continues to use the "binary" query engine, rather than the new "node-API" query engine, which is now the Prisma default. We are still performing tests to ensure that the node-API query engine will work well with Keystone.
Check out the Prisma releases page for more details on this major update.
Exported Field types to help in updating contrib packages. Thanks @gautamsi!
Fixed remaining windows issue where it creates invalid import path. This removes some duplicate code which caused this. Thanks @gautamsi!
Added support for Prisma preview features via the config.db.prismaPreviewFeatures
configuration option. Thanks @Nikitoring!
You can view the verbose change log in the related PR (https://github.com/keystonejs/keystone/pull/6483) for this release.
Published by bladey about 3 years ago
Big strides towards our General Availability
release for Keystone 6 in the very near future⌛ this release includes:
⚠️ This release contains breaking changes, please see below!
"@keystone-next/admin-ui-utils": "6.0.0",
"@keystone-next/auth": "32.0.0",
"@keystone-next/cloudinary": "7.0.0",
"@keystone-next/fields": "15.0.0",
"@keystone-next/fields-document": "9.0.0",
"@keystone-next/keystone": "25.0.1",
"@keystone-next/session-store-redis": "4.0.0",
"@keystone-next/testing": "2.0.0",
"@keystone-next/types": "25.0.0",
"@keystone-next/utils": "2.0.0",
⚠️ This includes breaking changes which impact the security of all Keystone systems.
Access Control is now easier to program, and makes it harder to introduce security gaps in your system:
access denied
error from a query if an item couldn't be found, or explicitly had access denied. The improved API never returns that error type on a query.💡 If you get stuck or have questions, reach out to us in the Keystone community slack to get the help you need.
The GraphQL API endpoint now starts up significantly faster in development!
Often when you're working with the GraphQL API you'll be waiting around for it to start up, now you don't need to wait for the Admin UI to be ready before hitting the server. The process of creating of the Express Server + GraphQL API has been split from the Admin UI, which significantly speeds up boot time for the GraphQL API in development! 🎉
💡 To facilitate this,
createExpressServer
no longer includes the step of creating the Admin UI Middleware, which changes its signature.createAdminUIMiddleware
is now also exported from@keystone-next/keystone/system
.
We've updated the underlying Next.js server that Keystone uses under the hood from version 10
to 11
, which includes optimisations to improve cold startup time.
💡 If you've been using a custom Babel config, you'll need to remove this as it’s no longer supported in Next.js 11.
You can now add graphql.omit
to list and field level configuration to control which types and operations are excluded from the GraphQL API. This option accepts either true
, or an array of the values read, create, or update. If you specify true
then the field will be excluded from all input and output types in the GraphQL API. If you provide an array of read, create, or update the field will be omitted from the corresponding input and output types in the GraphQL API.
User: list({
fields: {
name: text({
graphql: {
omit: ['read', 'create', 'update'],
}
}),
},
})
A long awaited feature, the Express App that Keystone creates is now customisable with the new extendExpressApp
option!
Check out the Server Config docs for more information.
We've moved some packages around to make it easier for you to keep your project in sync with Keystone releases, in order to prevent mismatching versions of Keystone packages. The exports from the following packages now reside inside the @keystone-next/keystone/*
package:
@keystone-next/admin-ui-utils
@keystone-next/fields
@keystone-next/testing
@keystone-next/types
@keystone-next/utils
For example if you had:
import {
relationship,
} from '@keystone-next/fields';
This is now:
import {
relationship,
} from '@keystone-next/keystone/fields';
💡 For any affected package, you'll need to change your import references and remove deprecated packages from your
package.json
as they will no longer be updated.
isUnique
now isIndex
for unique fields 🗂Unique fields marked as isUnique: true
are now represented as isIndexed: 'unique'
. This ensures that regular indexes and unique indexes aren't enabled at the same time.
isIndexed
accepts the following options as per the Fields API docs -
true
then the field will be indexed by the database.'unique'
then all values of the field must be unique.fieldPath
now fieldKey
for field hooks 🪝The fieldPath
argument to field hooks has been renamed to fieldKey
. This makes the naming consistent with the Access Control APIs.
schema
now graphql
for virtual and custom fields 🥽If you've using Virtual fields or custom field types, or if constructing GraphQL types, we used to export schema
, this has been changed to graphql
.
Filtering and ordering is no longer enabled by default, as they have the potential to expose data which would otherwise be protected by access control. To enable filtering and ordering you can set isFilterable: true
and isOrderable: true
on specific fields, or set defaultIsFilterable: true
and defaultIsOrderable: true
at the list level.
Check out our Fields API docs for all field level options.
You can now enable introspection
in the Apollo Server config. Introspection enables you to query a GraphQL server for information about the underlying schema. Check out the GraphQL Config docs for more information.
The GraphQL endpoint accessible by default at /api/graphql
can now be customised with the new option config.graphql.path
. You can find this and all other options in our GraphQL API docs.
The Navigation component has been updated to show docs and playground links irrespective of authentication. The triple-dot menu is now available in the Admin UI even if authentication isn't being used.
Additionally, performance has been improved of the create item modal when many fields are configured. Thanks to Sam Lam for the heads up!
Updated Prisma dependencies from 2.29.0
to 2.30.2
, check out the Prisma releases page for more details.
count
, thanks to @gautamsi!Star this repo 🌟 ☝️ or connect to Keystone on Twitter and in Slack.
4f36a81af
Thanks @mitchellhamilton! - Moved @keystone-next/admin-ui-utils
to @keystone-next/keystone/admin-ui/utils
#6371 44f2ef60e
Thanks @mitchellhamilton! - Moved @keystone-next/types
to @keystone-next/keystone/types
#6367 4f36a81af
Thanks @mitchellhamilton! - Moved @keystone-next/admin-ui-utils
to @keystone-next/keystone/admin-ui/utils
#6414 32f024738
Thanks @mitchellhamilton! - Updated usages of jsx
from @keystone-ui/core
to explicitly use /** @jsxRuntime classic */
#6437 af5e59bf4
Thanks @mitchellhamilton! - Changed isUnique: true
config in fields to isIndexed: 'unique'
#6414 32f024738
Thanks @mitchellhamilton! - Changed the way the package directory for resolving views is obtained to use __dirname
rather than require.resolve('pkg/package.json')
because in Next.js 11 require.resolve
returns a numeric id instead of the path.
#6432 0a189d5d0
Thanks @renovate! - Updated typescript
dependency to ^4.4.2
.
Updated dependencies [2a901a121
, 3008c5110
, 3904a9cf7
, 32f024738
, 2e3f3666b
, 44f2ef60e
, 9651aff8e
, 9c5991f43
, 069265b9c
, 4f36a81af
, c76bfc0a2
, bc9088f05
, ee54522d5
, 32f024738
, bd120c7c2
, 595922b48
, 069265b9c
, 8f2786535
, b3eefc1c3
, 0aa02a333
, bf9b5605f
, 3957c0981
, af5e59bf4
, cbc5a68aa
, 32f024738
, 783290796
, 0a189d5d0
, 944bce1e8
, e0f935eb2
, 2324fa027
, f2311781a
, 88b03bd79
, 0aa02a333
, 5ceccd821
, fd744dcaa
, 489e128fe
, bb0c6c626
]:
#6323 3904a9cf7
Thanks @mitchellhamilton! - Removed unused legacy filter code
#6371 44f2ef60e
Thanks @mitchellhamilton! - Moved @keystone-next/types
to @keystone-next/keystone/types
#6426 8f2786535
Thanks @timleslie! - Update the Access Control API. This is a breaking change which impacts the security of all Keystone systems.
See the Access Control API for a full description of the new API.
#6414 32f024738
Thanks @mitchellhamilton! - Updated usages of jsx
from @keystone-ui/core
to explicitly use /** @jsxRuntime classic */
#6437 af5e59bf4
Thanks @mitchellhamilton! - Changed isUnique: true
config in fields to isIndexed: 'unique'
#6414 32f024738
Thanks @mitchellhamilton! - Changed the way the package directory for resolving views is obtained to use __dirname
rather than require.resolve('pkg/package.json')
because in Next.js 11 require.resolve
returns a numeric id instead of the path.
Updated dependencies [2a901a121
, 3008c5110
, 3904a9cf7
, 32f024738
, 2e3f3666b
, 44f2ef60e
, 9651aff8e
, 9c5991f43
, 069265b9c
, 4f36a81af
, c76bfc0a2
, bc9088f05
, ee54522d5
, 32f024738
, bd120c7c2
, 595922b48
, 069265b9c
, 8f2786535
, b3eefc1c3
, 0aa02a333
, bf9b5605f
, 3957c0981
, af5e59bf4
, cbc5a68aa
, 32f024738
, 783290796
, 0a189d5d0
, 944bce1e8
, e0f935eb2
, 2324fa027
, f2311781a
, 88b03bd79
, 0aa02a333
, 5ceccd821
, fd744dcaa
, 489e128fe
, bb0c6c626
]:
fd744dcaa
Thanks @mitchellhamilton! - Moved @keystone-next/fields
to @keystone-next/keystone/fields
#6371 44f2ef60e
Thanks @mitchellhamilton! - Moved @keystone-next/types
to @keystone-next/keystone/types
#6426 8f2786535
Thanks @timleslie! - Update the Access Control API. This is a breaking change which impacts the security of all Keystone systems.
See the Access Control API for a full description of the new API.
#6367 4f36a81af
Thanks @mitchellhamilton! - Moved @keystone-next/admin-ui-utils
to @keystone-next/keystone/admin-ui/utils
#6414 32f024738
Thanks @mitchellhamilton! - Updated usages of jsx
from @keystone-ui/core
to explicitly use /** @jsxRuntime classic */
#6437 af5e59bf4
Thanks @mitchellhamilton! - Changed isUnique: true
config in fields to isIndexed: 'unique'
#6414 32f024738
Thanks @mitchellhamilton! - Changed the way the package directory for resolving views is obtained to use __dirname
rather than require.resolve('pkg/package.json')
because in Next.js 11 require.resolve
returns a numeric id instead of the path.
#6432 0a189d5d0
Thanks @renovate! - Updated typescript
dependency to ^4.4.2
.
Updated dependencies [2a901a121
, 3008c5110
, 3904a9cf7
, 32f024738
, 2e3f3666b
, 44f2ef60e
, 9651aff8e
, 9c5991f43
, 069265b9c
, 4f36a81af
, c76bfc0a2
, bc9088f05
, ee54522d5
, 32f024738
, bd120c7c2
, 595922b48
, 069265b9c
, 8f2786535
, b3eefc1c3
, 0aa02a333
, bf9b5605f
, 3957c0981
, af5e59bf4
, cbc5a68aa
, 32f024738
, 783290796
, 0a189d5d0
, 944bce1e8
, e0f935eb2
, 2324fa027
, f2311781a
, 88b03bd79
, 0aa02a333
, 5ceccd821
, fd744dcaa
, 489e128fe
, bb0c6c626
]:
#6377 3008c5110
Thanks @mitchellhamilton! - Moved exports of @keystone-next/keystone
to @keystone-next/keystone/system
#6323 3904a9cf7
Thanks @mitchellhamilton! - Removed unused legacy filter code
#6414 32f024738
Thanks @mitchellhamilton! - Updated to Next.js 11. If you were using a custom Babel config, it will no longer be respected because of changes in Next.js.
#6393 ee54522d5
Thanks @mitchellhamilton! - Updated @graphql-ts/schema
to 0.3.0
and moved the schema
export to @keystone-next/keystone
entrypoint and renamed it to graphql
. bindSchemaAPIToContext
on the graphql
export has also been renamed to bindGraphQLSchemaAPIToContext
.
#6426 8f2786535
Thanks @timleslie! - Update the Access Control API. This is a breaking change which impacts the security of all Keystone systems.
See the Access Control API for a full description of the new API.
#6420 0aa02a333
Thanks @timleslie! - Added the config option graphql.omit
to list and field level configuration to control which types and operations are excluded from the GraphQL API. The use of a static false
value in access control definitions no longer excludes operations from the GraphQL API.
#6455 bf9b5605f
Thanks @timleslie! - The fieldPath
argument to field hooks has been renamed to fieldKey
. This makes the naming consistent with the Access Control APIs.
#6463 3957c0981
Thanks @JedWatson! - The GraphQL API endpoint now starts up significantly faster in Dev.
To facilitate this, createExpressServer
no longer includes the step of creating the Admin UI Middleware, which changes its signature. createAdminUIMiddleware
is now also exported from @keystone-next/keystone/system
.
#6437 af5e59bf4
Thanks @mitchellhamilton! - Changed isUnique: true
config in fields to isIndexed: 'unique'
#6420 0aa02a333
Thanks @timleslie! - Filtering and ordering is no longer enabled by default, as they have the potential to expose data which would otherwise be protected by access control. To enable filtering and ordering you can set isFilterable: true
and isOrderable: true
on specific fields, or set defaultIsFilterable: true
and defaultIsOrderable: true
at the list level.
#6378 489e128fe
Thanks @mitchellhamilton! - Moved exports of @keystone-next/keystone/schema
to @keystone-next/keystone
#6403 2a901a121
Thanks @timleslie! - Added the experimental config option config.experimental.contextInitialisedLists
, which adds the internal data structure experimental.initialisedLists
to the context
object. This is a temporary addition to the API which will be removed in a future release once a more controlled API is available. It should be used with caution, as it will contain breaking change in patch
level releases.
#6371 44f2ef60e
Thanks @mitchellhamilton! - Moved @keystone-next/types
to @keystone-next/keystone/types
#6367 4f36a81af
Thanks @mitchellhamilton! - Moved @keystone-next/admin-ui-utils
to @keystone-next/keystone/admin-ui/utils
#6361 595922b48
Thanks @mitchellhamilton! - Moved exports of @keystone-next/testing
to @keystone-next/keystone/testing
#6368 783290796
Thanks @mitchellhamilton! - Moved @keystone-next/utils
to @keystone-next/keystone/fields/types/image/utils
for image ref related utilities and @keystone-next/keystone/fields/types/file/utils
for file ref related utilities.
#6458 944bce1e8
Thanks @timleslie! - Added the config option config.graphql.path
to configure the endpoint of the GraphQL API (default '/api/graphql'
).
#6467 e0f935eb2
Thanks @JedWatson! - Add extendExpressApp config option for configuring the express app that Keystone creates
#6459 f2311781a
Thanks @timleslie! - Updated Navigation component to show docs and playground links irrespective of authentication.
#6362 fd744dcaa
Thanks @mitchellhamilton! - Moved @keystone-next/fields
to @keystone-next/keystone/fields
#6390 2e3f3666b
Thanks @mitchellhamilton! - Improved performance of create item modal with many fields
#6385 9651aff8e
Thanks @gautamsi! - Fixed issue in Relationship field display mode 'count'. It was using _fieldnameMeta.count
instead of fieldnameCount
#6422 9c5991f43
Thanks @timleslie! - Made cosmetic changes to the Admin UI code. No functional changes.
#6453 069265b9c
Thanks @gwyneplaine! - Dashboard cards now enclosed in unordered list, for clearer semantics.
#6397 c76bfc0a2
Thanks @mitchellhamilton! - Added a comment in the schema.prisma
and schema.graphql
files explaining that they're generated and should not be modified manually.
#6391 bc9088f05
Thanks @bladey! - Adds support for introspection
in the Apollo Server config. Introspection enables you to query a GraphQL server for information about the underlying schema. If the playground is enabled then introspection is automatically enabled - unless specifically disabled.
#6414 32f024738
Thanks @mitchellhamilton! - Updated usages of jsx
from @keystone-ui/core
to explicitly use /** @jsxRuntime classic */
#6392 bd120c7c2
Thanks @mitchellhamilton! - Fixed negative take
values above the list's graphql.queryLimits.maxResults
not causing an error before getting the values from the database.
#6381 b3eefc1c3
Thanks @mitchellhamilton! - Fixed error from prisma when using .keystone/api
from generateNodeAPI
in a API route (admin/pages/api/*
)
#6429 cbc5a68aa
Thanks @timleslie! - Update adminMeta fieldMode
resolvers to respect graphql.omit
configuration.
#6414 32f024738
Thanks @mitchellhamilton! - Changed the way the package directory for resolving views is obtained to use __dirname
rather than require.resolve('pkg/package.json')
because in Next.js 11 require.resolve
returns a numeric id instead of the path.
#6432 0a189d5d0
Thanks @renovate! - Updated typescript
dependency to ^4.4.2
.
#6412 2324fa027
Thanks @gwyneplaine! - Merged aria-description text for dialogs on list view in Admin UI into their respective aria-labels.
#6462 88b03bd79
Thanks @JedWatson! - Fixed crashing the process when createContext() fails for Admin UI requests
#6354 5ceccd821
Thanks @gwyneplaine! - Fixed Listview checkbox bug in a better way.
#6433 bb0c6c626
Thanks @renovate! - Updated Prisma dependencies to 2.30.2
.
Updated dependencies [32f024738
, 069265b9c
]:
44f2ef60e
Thanks @mitchellhamilton! - Moved @keystone-next/types
to @keystone-next/keystone/types
2a901a121
, 3008c5110
, 3904a9cf7
, 32f024738
, 2e3f3666b
, 44f2ef60e
, 9651aff8e
, 9c5991f43
, 069265b9c
, 4f36a81af
, c76bfc0a2
, bc9088f05
, ee54522d5
, 32f024738
, bd120c7c2
, 595922b48
, 8f2786535
, b3eefc1c3
, 0aa02a333
, bf9b5605f
, 3957c0981
, af5e59bf4
, cbc5a68aa
, 32f024738
, 783290796
, 0a189d5d0
, 944bce1e8
, e0f935eb2
, 2324fa027
, f2311781a
, 88b03bd79
, 0aa02a333
, 5ceccd821
, fd744dcaa
, 489e128fe
, bb0c6c626
]:
595922b48
Thanks @mitchellhamilton! - Moved exports of @keystone-next/testing
to @keystone-next/keystone/testing
44f2ef60e
Thanks @mitchellhamilton! - Moved @keystone-next/types
to @keystone-next/keystone/types
783290796
Thanks @mitchellhamilton! - Moved @keystone-next/utils
to @keystone-next/keystone/fields/types/image/utils
for image ref related utilities and @keystone-next/keystone/fields/types/file/utils
for file ref related utilities.069265b9c
Thanks @gwyneplaine! - Added functionality to ensure that Inline elements that are 'ul' or 'ol' automatically wrap children in 'li' rather than 'div'32f024738
Thanks @mitchellhamilton! - Updated usages of jsx
from @keystone-ui/core
to explicitly use /** @jsxRuntime classic */
#6414 32f024738
Thanks @mitchellhamilton! - Updated usages of jsx
from @keystone-ui/core
to explicitly use /** @jsxRuntime classic */
Updated dependencies [32f024738
, 069265b9c
]:
#6414 32f024738
Thanks @mitchellhamilton! - Updated usages of jsx
from @keystone-ui/core
to explicitly use /** @jsxRuntime classic */
Updated dependencies [32f024738
, 069265b9c
]:
#6414 32f024738
Thanks @mitchellhamilton! - Updated usages of jsx
from @keystone-ui/core
to explicitly use /** @jsxRuntime classic */
Updated dependencies [32f024738
, 069265b9c
]:
#6414 32f024738
Thanks @mitchellhamilton! - Updated usages of jsx
from @keystone-ui/core
to explicitly use /** @jsxRuntime classic */
Updated dependencies [32f024738
, 069265b9c
]:
#6414 32f024738
Thanks @mitchellhamilton! - Updated usages of jsx
from @keystone-ui/core
to explicitly use /** @jsxRuntime classic */
Updated dependencies [32f024738
, 069265b9c
]:
#6414 32f024738
Thanks @mitchellhamilton! - Updated usages of jsx
from @keystone-ui/core
to explicitly use /** @jsxRuntime classic */
Updated dependencies [32f024738
, 069265b9c
]:
#6414 32f024738
Thanks @mitchellhamilton! - Updated usages of jsx
from @keystone-ui/core
to explicitly use /** @jsxRuntime classic */
Updated dependencies [32f024738
, 069265b9c
]:
#6414 32f024738
Thanks @mitchellhamilton! - Updated usages of jsx
from @keystone-ui/core
to explicitly use /** @jsxRuntime classic */
Updated dependencies [32f024738
, 069265b9c
]:
#6414 32f024738
Thanks @mitchellhamilton! - Updated usages of jsx
from @keystone-ui/core
to explicitly use /** @jsxRuntime classic */
Updated dependencies [32f024738
, 069265b9c
]:
#6414 32f024738
Thanks @mitchellhamilton! - Updated usages of jsx
from @keystone-ui/core
to explicitly use /** @jsxRuntime classic */
Updated dependencies [32f024738
, 069265b9c
]:
#6414 32f024738
Thanks @mitchellhamilton! - Updated usages of jsx
from @keystone-ui/core
to explicitly use /** @jsxRuntime classic */
Updated dependencies [32f024738
, 069265b9c
]:
#6414 32f024738
Thanks @mitchellhamilton! - Updated usages of jsx
from @keystone-ui/core
to explicitly use /** @jsxRuntime classic */
Updated dependencies [32f024738
, 069265b9c
]:
#6443 b45536e22
Thanks @timleslie! - Removed unused dependency @types/webpack
.
#6432 0a189d5d0
Thanks @renovate! - Updated typescript
dependency to ^4.4.2
.
Updated dependencies [32f024738
, 069265b9c
]:
#6391 bc9088f05
Thanks @bladey! - Adds support for introspection
in the Apollo Server config. Introspection enables you to query a GraphQL server for information about the underlying schema. If the playground is enabled then introspection is automatically enabled - unless specifically disabled.
#6443 b45536e22
Thanks @timleslie! - Removed unused dependency @types/webpack
.
#6432 0a189d5d0
Thanks @renovate! - Updated typescript
dependency to ^4.4.2
.
#6467 e0f935eb2
Thanks @JedWatson! - Add extendExpressApp config option for configuring the express app that Keystone creates
Updated dependencies [44f2ef60e
, 4f36a81af
, 32f024738
, 8f2786535
, af5e59bf4
, 32f024738
, 0a189d5d0
]:
#6432 0a189d5d0
Thanks @renovate! - Updated typescript
dependency to ^4.4.2
.
Updated dependencies [2a901a121
, 3008c5110
, 3904a9cf7
, 32f024738
, 2e3f3666b
, 44f2ef60e
, 9651aff8e
, 9c5991f43
, 069265b9c
, 4f36a81af
, c76bfc0a2
, bc9088f05
, ee54522d5
, 32f024738
, bd120c7c2
, 595922b48
, 8f2786535
, b3eefc1c3
, 0aa02a333
, bf9b5605f
, 3957c0981
, af5e59bf4
, cbc5a68aa
, 32f024738
, 783290796
, 0a189d5d0
, 944bce1e8
, e0f935eb2
, 2324fa027
, f2311781a
, 88b03bd79
, 0aa02a333
, 5ceccd821
, fd744dcaa
, 489e128fe
, bb0c6c626
]:
#6432 0a189d5d0
Thanks @renovate! - Updated typescript
dependency to ^4.4.2
.
Updated dependencies [2a901a121
, 3008c5110
, 3904a9cf7
, 32f024738
, 2e3f3666b
, 44f2ef60e
, 9651aff8e
, 9c5991f43
, 069265b9c
, 4f36a81af
, c76bfc0a2
, bc9088f05
, ee54522d5
, 32f024738
, bd120c7c2
, 595922b48
, 8f2786535
, b3eefc1c3
, 0aa02a333
, bf9b5605f
, 3957c0981
, af5e59bf4
, cbc5a68aa
, 32f024738
, 783290796
, 0a189d5d0
, 944bce1e8
, e0f935eb2
, 2324fa027
, f2311781a
, 88b03bd79
, 0aa02a333
, 5ceccd821
, fd744dcaa
, 489e128fe
, bb0c6c626
]:
#6432 0a189d5d0
Thanks @renovate! - Updated typescript
dependency to ^4.4.2
.
Updated dependencies [2a901a121
, 3008c5110
, 3904a9cf7
, 32f024738
, 2e3f3666b
, 44f2ef60e
, 9651aff8e
, 9c5991f43
, 069265b9c
, 4f36a81af
, c76bfc0a2
, bc9088f05
, ee54522d5
, 32f024738
, bd120c7c2
, 595922b48
, 8f2786535
, b3eefc1c3
, 0aa02a333
, bf9b5605f
, 3957c0981
, af5e59bf4
, cbc5a68aa
, 32f024738
, 783290796
, 0a189d5d0
, 944bce1e8
, e0f935eb2
, 2324fa027
, f2311781a
, 88b03bd79
, 0aa02a333
, 5ceccd821
, fd744dcaa
, 489e128fe
, bb0c6c626
]:
#6432 0a189d5d0
Thanks @renovate! - Updated typescript
dependency to ^4.4.2
.
Updated dependencies [2a901a121
, 3008c5110
, 3904a9cf7
, 32f024738
, 2e3f3666b
, 44f2ef60e
, 9651aff8e
, 9c5991f43
, 069265b9c
, 4f36a81af
, c76bfc0a2
, bc9088f05
, ee54522d5
, 32f024738
, bd120c7c2
, 595922b48
, 069265b9c
, 8f2786535
, b3eefc1c3
, 0aa02a333
, bf9b5605f
, 3957c0981
, af5e59bf4
, cbc5a68aa
, 32f024738
, 783290796
, 0a189d5d0
, 944bce1e8
, e0f935eb2
, 2324fa027
, f2311781a
, 88b03bd79
, 0aa02a333
, 5ceccd821
, fd744dcaa
, 489e128fe
, bb0c6c626
]:
#6432 0a189d5d0
Thanks @renovate! - Updated typescript
dependency to ^4.4.2
.
Updated dependencies [2a901a121
, 3008c5110
, 3904a9cf7
, 32f024738
, 2e3f3666b
, 44f2ef60e
, 9651aff8e
, 9c5991f43
, 069265b9c
, 4f36a81af
, c76bfc0a2
, bc9088f05
, ee54522d5
, 32f024738
, bd120c7c2
, 595922b48
, 8f2786535
, b3eefc1c3
, 0aa02a333
, bf9b5605f
, 3957c0981
, af5e59bf4
, cbc5a68aa
, 32f024738
, 783290796
, 0a189d5d0
, 944bce1e8
, e0f935eb2
, 2324fa027
, f2311781a
, 88b03bd79
, 0aa02a333
, 5ceccd821
, fd744dcaa
, 489e128fe
, bb0c6c626
]:
#6432 0a189d5d0
Thanks @renovate! - Updated typescript
dependency to ^4.4.2
.
Updated dependencies [2a901a121
, 3008c5110
, 3904a9cf7
, 32f024738
, 2e3f3666b
, 44f2ef60e
, 9651aff8e
, 9c5991f43
, 069265b9c
, 4f36a81af
, c76bfc0a2
, bc9088f05
, ee54522d5
, 32f024738
, bd120c7c2
, 595922b48
, 8f2786535
, b3eefc1c3
, 0aa02a333
, bf9b5605f
, 3957c0981
, af5e59bf4
, cbc5a68aa
, 32f024738
, 783290796
, 0a189d5d0
, 944bce1e8
, e0f935eb2
, 2324fa027
, f2311781a
, 88b03bd79
, 0aa02a333
, 5ceccd821
, fd744dcaa
, 489e128fe
, bb0c6c626
]:
2a901a121
, 3008c5110
, 3904a9cf7
, 32f024738
, 2e3f3666b
, 44f2ef60e
, 9651aff8e
, 9c5991f43
, 069265b9c
, 4f36a81af
, c76bfc0a2
, bc9088f05
, ee54522d5
, 32f024738
, bd120c7c2
, 595922b48
, 8f2786535
, b3eefc1c3
, 0aa02a333
, bf9b5605f
, 3957c0981
, af5e59bf4
, cbc5a68aa
, 32f024738
, 783290796
, 0a189d5d0
, 944bce1e8
, e0f935eb2
, 2324fa027
, f2311781a
, 88b03bd79
, 0aa02a333
, 5ceccd821
, fd744dcaa
, 489e128fe
, bb0c6c626
]:
#6391 bc9088f05
Thanks @bladey! - Adds support for introspection
in the Apollo Server config. Introspection enables you to query a GraphQL server for information about the underlying schema. If the playground is enabled then introspection is automatically enabled - unless specifically disabled.
#6432 0a189d5d0
Thanks @renovate! - Updated typescript
dependency to ^4.4.2
.
Updated dependencies [2a901a121
, 3008c5110
, 3904a9cf7
, 32f024738
, 2e3f3666b
, 44f2ef60e
, 9651aff8e
, 9c5991f43
, 069265b9c
, 4f36a81af
, c76bfc0a2
, bc9088f05
, ee54522d5
, 32f024738
, bd120c7c2
, 595922b48
, 8f2786535
, b3eefc1c3
, 0aa02a333
, bf9b5605f
, 3957c0981
, af5e59bf4
, cbc5a68aa
, 32f024738
, 783290796
, 0a189d5d0
, 944bce1e8
, e0f935eb2
, 2324fa027
, f2311781a
, 88b03bd79
, 0aa02a333
, 5ceccd821
, fd744dcaa
, 489e128fe
, bb0c6c626
]:
#6432 0a189d5d0
Thanks @renovate! - Updated typescript
dependency to ^4.4.2
.
Updated dependencies [2a901a121
, 3008c5110
, 3904a9cf7
, 32f024738
, 2e3f3666b
, 44f2ef60e
, 9651aff8e
, 9c5991f43
, 069265b9c
, 4f36a81af
, c76bfc0a2
, bc9088f05
, ee54522d5
, 32f024738
, bd120c7c2
, 595922b48
, 8f2786535
, b3eefc1c3
, 0aa02a333
, bf9b5605f
, 3957c0981
, af5e59bf4
, cbc5a68aa
, 32f024738
, 783290796
, 0a189d5d0
, 944bce1e8
, e0f935eb2
, 2324fa027
, f2311781a
, 88b03bd79
, 0aa02a333
, 5ceccd821
, fd744dcaa
, 489e128fe
, bb0c6c626
]:
2a901a121
, 3008c5110
, 3904a9cf7
, 32f024738
, 2e3f3666b
, 44f2ef60e
, 9651aff8e
, 9c5991f43
, 069265b9c
, 4f36a81af
, c76bfc0a2
, bc9088f05
, ee54522d5
, 32f024738
, bd120c7c2
, 595922b48
, 8f2786535
, b3eefc1c3
, 0aa02a333
, bf9b5605f
, 3957c0981
, af5e59bf4
, cbc5a68aa
, 32f024738
, 783290796
, 0a189d5d0
, 944bce1e8
, e0f935eb2
, 2324fa027
, f2311781a
, 88b03bd79
, 0aa02a333
, 5ceccd821
, fd744dcaa
, 489e128fe
, bb0c6c626
]:
#6432 0a189d5d0
Thanks @renovate! - Updated typescript
dependency to ^4.4.2
.
#6370 9d8ae78ff
Thanks @bladey! - Adds ability to seed data for blog
and task-manager
examples. Use yarn seed-data
in either examples folder to create a set of example data.
Updated dependencies [2a901a121
, 3008c5110
, 3904a9cf7
, 32f024738
, 2e3f3666b
, 44f2ef60e
, 9651aff8e
, 9c5991f43
, 069265b9c
, 4f36a81af
, c76bfc0a2
, bc9088f05
, ee54522d5
, 32f024738
, bd120c7c2
, 595922b48
, 8f2786535
, b3eefc1c3
, 0aa02a333
, bf9b5605f
, 3957c0981
, af5e59bf4
, cbc5a68aa
, 32f024738
, 783290796
, 0a189d5d0
, 944bce1e8
, e0f935eb2
, 2324fa027
, f2311781a
, 88b03bd79
, 0aa02a333
, 5ceccd821
, fd744dcaa
, 489e128fe
, bb0c6c626
]:
#6432 0a189d5d0
Thanks @renovate! - Updated typescript
dependency to ^4.4.2
.
Updated dependencies [2a901a121
, 3008c5110
, 3904a9cf7
, 32f024738
, 2e3f3666b
, 44f2ef60e
, 9651aff8e
, 9c5991f43
, 069265b9c
, 4f36a81af
, c76bfc0a2
, bc9088f05
, ee54522d5
, 32f024738
, bd120c7c2
, 595922b48
, 069265b9c
, 8f2786535
, b3eefc1c3
, 0aa02a333
, bf9b5605f
, 3957c0981
, af5e59bf4
, cbc5a68aa
, 32f024738
, 783290796
, 0a189d5d0
, 944bce1e8
, e0f935eb2
, 2324fa027
, f2311781a
, 88b03bd79
, 0aa02a333
, 5ceccd821
, fd744dcaa
, 489e128fe
, bb0c6c626
]:
#6432 0a189d5d0
Thanks @renovate! - Updated typescript
dependency to ^4.4.2
.
Updated dependencies [2a901a121
, 3008c5110
, 3904a9cf7
, 32f024738
, 2e3f3666b
, 44f2ef60e
, 9651aff8e
, 9c5991f43
, 069265b9c
, 4f36a81af
, c76bfc0a2
, bc9088f05
, ee54522d5
, 32f024738
, bd120c7c2
, 595922b48
, 8f2786535
, b3eefc1c3
, 0aa02a333
, bf9b5605f
, 3957c0981
, af5e59bf4
, cbc5a68aa
, 32f024738
, 783290796
, 0a189d5d0
, 944bce1e8
, e0f935eb2
, 2324fa027
, f2311781a
, 88b03bd79
, 0aa02a333
, 5ceccd821
, fd744dcaa
, 489e128fe
, bb0c6c626
]:
#6432 0a189d5d0
Thanks @renovate! - Updated typescript
dependency to ^4.4.2
.
Updated dependencies [2a901a121
, 3008c5110
, 3904a9cf7
, 32f024738
, 2e3f3666b
, 44f2ef60e
, 9651aff8e
, 9c5991f43
, 069265b9c
, 4f36a81af
, c76bfc0a2
, bc9088f05
, ee54522d5
, 32f024738
, bd120c7c2
, 595922b48
, 069265b9c
, 8f2786535
, b3eefc1c3
, 0aa02a333
, bf9b5605f
, 3957c0981
, af5e59bf4
, cbc5a68aa
, 32f024738
, 783290796
, 0a189d5d0
, 944bce1e8
, e0f935eb2
, 2324fa027
, f2311781a
, 88b03bd79
, 0aa02a333
, 5ceccd821
, fd744dcaa
, 489e128fe
, bb0c6c626
]:
#6432 0a189d5d0
Thanks @renovate! - Updated typescript
dependency to ^4.4.2
.
Updated dependencies [2a901a121
, 3008c5110
, 3904a9cf7
, 32f024738
, 2e3f3666b
, 44f2ef60e
, 9651aff8e
, 9c5991f43
, 069265b9c
, 4f36a81af
, c76bfc0a2
, bc9088f05
, ee54522d5
, 32f024738
, bd120c7c2
, 595922b48
, 8f2786535
, b3eefc1c3
, 0aa02a333
, bf9b5605f
, 3957c0981
, af5e59bf4
, cbc5a68aa
, 32f024738
, 783290796
, 0a189d5d0
, 944bce1e8
, e0f935eb2
, 2324fa027
, f2311781a
, 88b03bd79
, 0aa02a333
, 5ceccd821
, fd744dcaa
, 489e128fe
, bb0c6c626
]:
Published by bladey about 3 years ago
A major milestone in the path to a General Availability
status for Keystone 6, this release includes:
⚠️ This release contains breaking changes, please see below!
"@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",
We’ve made the experience of working with Keystone’s GraphQL API easier to program and reason about:
update
and create
operations, removing obsolete options and making the syntax between the two operations easier to differentiate.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!
💡 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 to get the help you need.
Our 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!
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.
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.
Updated Prisma dependencies from 2.27.0
to 2.29.0
, check out the Prisma releases page for more details.
Added option for Bearer
token auth when using session, thanks to @gautamsi!
Star this repo 🌟 ☝️ or connect to Keystone on Twitter and in Slack.
#6211 d214e2f72
Thanks @mitchellhamilton! - The update mutations now accept where
unique inputs instead of only an id
and the where
and data
arguments are non-null.
If you have a list called Item
, the update mutations now look like this:
type Mutation {
updateItem(where: ItemWhereUniqueInput!, data: ItemUpdateInput!): Item
updateItems(data: [ItemUpdateArgs!]!): [Item]
}
input ItemUpdateArgs {
where: ItemWhereUniqueInput!
data: ItemUpdateInput!
}
#6310 399561b27
Thanks @timleslie! - Updated dependencies to use mergeSchemas
from @graphql-tools/schema
, rather than its old location in @graphql-tools/merge
. You might see a reordering of the contents of your graphql.schema
file.
Updated dependencies [e9f3c42d5
, 5cd8ffd6c
, 1cbcf54cb
, a92169d04
, 5cd8ffd6c
, b696a9579
, f3014a627
, 092df6678
, 5cd8ffd6c
, c2bb6a9a5
, 6da56b80e
, 4f4f0351a
, 697efa354
, c7e331d90
, 3a7a06b2c
, 272b97b3a
, 78dac764e
, 399561b27
, 9d361c1c8
, 0dcb1c95b
, 94435ffee
, 5cd8ffd6c
, 56044e2a4
, f46fd32b7
, 874f2c405
, 8ea4eed55
, e3fe6498d
, 1030296d1
, 3564b342d
, 8b2d179b2
, e3fefafcc
, 4d9f89f88
, 686c0f1c4
, 8187ea019
, d214e2f72
, f5e64af37
]:
#6280 e9f3c42d5
Thanks @mitchellhamilton! - Removed gqlType
option to autoIncrement
field type. The field type will now always be represented with an Int
in GraphQL
#6196 5cd8ffd6c
Thanks @mitchellhamilton! - Removed _ListKeyMeta
and _toManyRelationshipFieldMeta
fields. You should use listKeyCount
and toManyRelationshipFieldCount
instead
#6266 b696a9579
Thanks @mitchellhamilton! - Renamed first
argument in find many queries to take
to align with Prisma.
type Query {
users(
where: UserWhereInput! = {}
orderBy: [UserOrderByInput!]! = []
# previously was first: Int
take: Int
skip: Int! = 0
): [User!]
# ...
}
type User {
# ...
posts(
where: PostWhereInput! = {}
orderBy: [PostOrderByInput!]! = []
# previously was first: Int
take: Int
skip: Int! = 0
): [Post!]
# ...
}
#6196 5cd8ffd6c
Thanks @mitchellhamilton! - Removed search
argument from the GraphQL API for finding many items, Lists/DB API and to-many relationship fields. You should use contains
filters instead.
#6095 272b97b3a
Thanks @mitchellhamilton! - Updated filters to be nested instead of flattened and add top-level NOT
operator. See the Query Filter API docs and the upgrade guide for more information.
query {
posts(where: { title: { contains: "Something" } }) {
title
content
}
}
#6196 5cd8ffd6c
Thanks @mitchellhamilton! - Removed sortBy
argument from the GraphQL API for finding many items, Lists/DB API and to-many relationship fields. You should use orderBy
instead.
#6217 874f2c405
Thanks @mitchellhamilton! - disconnectAll
has been renamed to disconnect
in to-one relationship inputs and the old disconnect
field has been removed. There are also seperate input types for create and update where the input for create doesn't have disconnect
. It's also now required that if you provide a to-one relationship input, you must provide exactly one field to the input.
If you have a list called Item
, the to-one relationship inputs now look like this:
input ItemRelateToOneForCreateInput {
create: ItemCreateInput
connect: ItemWhereUniqueInput
}
input ItemRelateToOneForUpdateInput {
create: ItemCreateInput
connect: ItemWhereUniqueInput
disconnect: Boolean
}
#6224 3564b342d
Thanks @mitchellhamilton! - disconnectAll
has been replaced by set
in to-many relationship inputs, the equivalent to disconnectAll: true
is now set: []
. There are also seperate input types for create and update where the input for create doesn't have disconnect
or set
. The inputs in the lists in the input field are now also non-null.
If you have a list called Item
, the to-many relationship inputs now look like this:
input ItemRelateToManyForCreateInput {
create: [ItemCreateInput!]
connect: [ItemWhereUniqueInput!]
}
input ItemRelateToManyForUpdateInput {
disconnect: [ItemWhereUniqueInput!]
set: [ItemWhereUniqueInput!]
create: [ItemCreateInput!]
connect: [ItemWhereUniqueInput!]
}
#6211 d214e2f72
Thanks @mitchellhamilton! - The update mutations now accept where
unique inputs instead of only an id
and the where
and data
arguments are non-null.
If you have a list called Item
, the update mutations now look like this:
type Mutation {
updateItem(where: ItemWhereUniqueInput!, data: ItemUpdateInput!): Item
updateItems(data: [ItemUpdateArgs!]!): [Item]
}
input ItemUpdateArgs {
where: ItemWhereUniqueInput!
data: ItemUpdateInput!
}
#6237 4f4f0351a
Thanks @gwyneplaine! - Updated timestamp field to default time to 00:00 when no time is selected.
#6197 4d9f89f88
Thanks @mitchellhamilton! - The generated CRUD queries, and some of the input types, in the GraphQL API have been renamed.
If you have a list called Item
, the query for multiple values, allItems
will be renamed to items
. The query for a single value, Item
, will be renamed to item
.
Also, the input type used in the updateItems
mutation has been renamed from ItemsUpdateInput
to ItemUpdateArgs
.
Updated dependencies [5cd8ffd6c
, 1cbcf54cb
, a92169d04
, 5cd8ffd6c
, b696a9579
, f3014a627
, 092df6678
, 5cd8ffd6c
, c2bb6a9a5
, 6da56b80e
, 697efa354
, c7e331d90
, 3a7a06b2c
, 272b97b3a
, 78dac764e
, 399561b27
, 9d361c1c8
, 0dcb1c95b
, 94435ffee
, 5cd8ffd6c
, 56044e2a4
, f46fd32b7
, 874f2c405
, 8ea4eed55
, e3fe6498d
, 6cd7ab78e
, 1030296d1
, 3564b342d
, 8b2d179b2
, e3fefafcc
, 4d9f89f88
, 686c0f1c4
, 8187ea019
, d214e2f72
, f5e64af37
]:
#6095 272b97b3a
Thanks @mitchellhamilton! - Updated filters to be nested instead of flattened and add top-level NOT
operator. See the Query Filter API docs and the upgrade guide for more information.
query {
posts(where: { title: { contains: "Something" } }) {
title
content
}
}
#6250 a92169d04
Thanks @timleslie! - Updated internal type definitions.
#6318 e985aa010
Thanks @raveling! - Updated the document editor's expanded view so that you can click on any of the empty space below the content to focus the editor
#6207 69f47bfed
Thanks @timleslie! - Suppressed error logging during tests.
#6197 4d9f89f88
Thanks @mitchellhamilton! - The generated CRUD queries, and some of the input types, in the GraphQL API have been renamed.
If you have a list called Item
, the query for multiple values, allItems
will be renamed to items
. The query for a single value, Item
, will be renamed to item
.
Also, the input type used in the updateItems
mutation has been renamed from ItemsUpdateInput
to ItemUpdateArgs
.
Updated dependencies [e9f3c42d5
, 5cd8ffd6c
, 1cbcf54cb
, a92169d04
, 5cd8ffd6c
, b696a9579
, f3014a627
, 092df6678
, 5cd8ffd6c
, 6da56b80e
, 4f4f0351a
, 697efa354
, c7e331d90
, 3a7a06b2c
, 272b97b3a
, 78dac764e
, 399561b27
, 9d361c1c8
, 0dcb1c95b
, 94435ffee
, 5cd8ffd6c
, 56044e2a4
, f46fd32b7
, 874f2c405
, 8ea4eed55
, e3fe6498d
, 1030296d1
, 3564b342d
, 8b2d179b2
, e3fefafcc
, 4d9f89f88
, 686c0f1c4
, 8187ea019
, d214e2f72
, f5e64af37
]:
#6196 5cd8ffd6c
Thanks @mitchellhamilton! - Removed _ListKeyMeta
and _toManyRelationshipFieldMeta
fields. You should use listKeyCount
and toManyRelationshipFieldCount
instead
#6196 5cd8ffd6c
Thanks @mitchellhamilton! - Removed all arguments from context.lists.List.count
and context.db.lists.List.count
except for where
.
#6266 b696a9579
Thanks @mitchellhamilton! - Renamed first
argument in find many queries to take
to align with Prisma.
type Query {
users(
where: UserWhereInput! = {}
orderBy: [UserOrderByInput!]! = []
# previously was first: Int
take: Int
skip: Int! = 0
): [User!]
# ...
}
type User {
# ...
posts(
where: PostWhereInput! = {}
orderBy: [PostOrderByInput!]! = []
# previously was first: Int
take: Int
skip: Int! = 0
): [Post!]
# ...
}
#6208 092df6678
Thanks @mitchellhamilton! - The create one mutation now requires a non-null data
argument and the create many mutation accepts a list of ItemCreateInput
directly instead of being nested inside of an object with the ItemCreateInput
in a data
field.
If you have a list called Item
, createItem
now looks like createItem(data: ItemCreateInput!): Item
and createItems
now looks like createItems(data: [ItemCreateInput!]!): [Item]
.
#6196 5cd8ffd6c
Thanks @mitchellhamilton! - Removed search
argument from the GraphQL API for finding many items, Lists/DB API and to-many relationship fields. You should use contains
filters instead.
#6095 272b97b3a
Thanks @mitchellhamilton! - Updated filters to be nested instead of flattened and add top-level NOT
operator. See the Query Filter API docs and the upgrade guide for more information.
query {
posts(where: { title: { contains: "Something" } }) {
title
content
}
}
#6198 9d361c1c8
Thanks @timleslie! - Removed the uid
and name
properties from the errors returned by the GraphQL API.
#6196 5cd8ffd6c
Thanks @mitchellhamilton! - Removed sortBy
argument from the GraphQL API for finding many items, Lists/DB API and to-many relationship fields. You should use orderBy
instead.
#6312 56044e2a4
Thanks @mitchellhamilton! - Updated @graphql-ts/schema
. The second type parameter of schema.Arg
exported from @keystone-next/types
is now a boolean that defines whether or not the arg has a default value to make it easier to define circular input objects.
#6217 874f2c405
Thanks @mitchellhamilton! - disconnectAll
has been renamed to disconnect
in to-one relationship inputs and the old disconnect
field has been removed. There are also seperate input types for create and update where the input for create doesn't have disconnect
. It's also now required that if you provide a to-one relationship input, you must provide exactly one field to the input.
If you have a list called Item
, the to-one relationship inputs now look like this:
input ItemRelateToOneForCreateInput {
create: ItemCreateInput
connect: ItemWhereUniqueInput
}
input ItemRelateToOneForUpdateInput {
create: ItemCreateInput
connect: ItemWhereUniqueInput
disconnect: Boolean
}
#6224 3564b342d
Thanks @mitchellhamilton! - disconnectAll
has been replaced by set
in to-many relationship inputs, the equivalent to disconnectAll: true
is now set: []
. There are also seperate input types for create and update where the input for create doesn't have disconnect
or set
. The inputs in the lists in the input field are now also non-null.
If you have a list called Item
, the to-many relationship inputs now look like this:
input ItemRelateToManyForCreateInput {
create: [ItemCreateInput!]
connect: [ItemWhereUniqueInput!]
}
input ItemRelateToManyForUpdateInput {
disconnect: [ItemWhereUniqueInput!]
set: [ItemWhereUniqueInput!]
create: [ItemCreateInput!]
connect: [ItemWhereUniqueInput!]
}
#6197 4d9f89f88
Thanks @mitchellhamilton! - The generated CRUD queries, and some of the input types, in the GraphQL API have been renamed.
If you have a list called Item
, the query for multiple values, allItems
will be renamed to items
. The query for a single value, Item
, will be renamed to item
.
Also, the input type used in the updateItems
mutation has been renamed from ItemsUpdateInput
to ItemUpdateArgs
.
#6211 d214e2f72
Thanks @mitchellhamilton! - The update mutations now accept where
unique inputs instead of only an id
and the where
and data
arguments are non-null.
If you have a list called Item
, the update mutations now look like this:
type Mutation {
updateItem(where: ItemWhereUniqueInput!, data: ItemUpdateInput!): Item
updateItems(data: [ItemUpdateArgs!]!): [Item]
}
input ItemUpdateArgs {
where: ItemWhereUniqueInput!
data: ItemUpdateInput!
}
#6206 f5e64af37
Thanks @mitchellhamilton! - The delete mutations now accept where
unique inputs instead of only an id
.
If you have a list called Item
, deleteItem
now looks like deleteItem(where: ItemWhereUniqueInput!): Item
and deleteItems
now looks like deleteItems(where: [ItemWhereUniqueInput!]!): [Item]
#6276 3a7a06b2c
Thanks @gautamsi! - Added option for Bearer
token auth when using session.
#6267 1030296d1
Thanks @timleslie! - Added config.graphql.debug
option, which can be used to control whether debug information such as stack traces are included in the errors returned by the GraphQL API.
#6317 1cbcf54cb
Thanks @timleslie! - Separated the resolving of non-relationship field from relationship fields in create/update inputs to allow for better error handling.
#6250 a92169d04
Thanks @timleslie! - Updated internal type definitions.
#6334 f3014a627
Thanks @gwyneplaine! - Resolved bug with visually hidden elements in ListView checkboxes expanding to fill the whole body on click of elements near the bottom of the screen.
#6219 6da56b80e
Thanks @timleslie! - Removed unused code path in Admin UI error display.
#6269 697efa354
Thanks @gwyneplaine! - Added ignoreBuildErrors flag to next-config.js file, to negate false positive errors in keystone builds with imported components.
#6218 c7e331d90
Thanks @timleslie! - Added more details to validation failure error messages.
#6316 78dac764e
Thanks @timleslie! - Updated handling of errors in resolveInput
hooks to provide developers with appropriate debug information.
#6310 399561b27
Thanks @timleslie! - Updated dependencies to use mergeSchemas
from @graphql-tools/schema
, rather than its old location in @graphql-tools/merge
. You might see a reordering of the contents of your graphql.schema
file.
#6292 0dcb1c95b
Thanks @renovate! - Updated Prisma dependencies to 2.29.1
.
#6263 94435ffee
Thanks @timleslie! - Made the original stacktraces for before/after hooks available on error.extension.errors
.
#6259 f46fd32b7
Thanks @gwyneplaine! - Bumped @apollo/client dependency to ^3.4.5, the update resolves the following useQuery issue.
#6239 8ea4eed55
Thanks @timleslie! - Added more details to before/after change/delete hook error messages.
#6248 e3fe6498d
Thanks @timleslie! - Removed unused dependency @graphql-tools/schema
.
#6203 8b2d179b2
Thanks @renovate! - Updated Prisma dependencies to 2.28.0
.
#6296 e3fefafcc
Thanks @gwyneplaine! - Fixed delete success notifications in the Admin UI appearing on failed deletes in List view and Item view.
#6200 686c0f1c4
Thanks @timleslie! - Updated internal error handling to use the apollo-server-errors
package instead of apollo-errors
.
Updated dependencies [e9f3c42d5
, 5cd8ffd6c
, 5cd8ffd6c
, b696a9579
, 092df6678
, 5cd8ffd6c
, c2bb6a9a5
, 4f4f0351a
, 272b97b3a
, 5cd8ffd6c
, 56044e2a4
, 874f2c405
, 1030296d1
, 3564b342d
, 4d9f89f88
, 8187ea019
, d214e2f72
, f5e64af37
]:
#6196 5cd8ffd6c
Thanks @mitchellhamilton! - Removed _ListKeyMeta
and _toManyRelationshipFieldMeta
fields. You should use listKeyCount
and toManyRelationshipFieldCount
instead
#6196 5cd8ffd6c
Thanks @mitchellhamilton! - Removed all arguments from context.lists.List.count
and context.db.lists.List.count
except for where
.
#6266 b696a9579
Thanks @mitchellhamilton! - Renamed first
argument in find many queries to take
to align with Prisma.
type Query {
users(
where: UserWhereInput! = {}
orderBy: [UserOrderByInput!]! = []
# previously was first: Int
take: Int
skip: Int! = 0
): [User!]
# ...
}
type User {
# ...
posts(
where: PostWhereInput! = {}
orderBy: [PostOrderByInput!]! = []
# previously was first: Int
take: Int
skip: Int! = 0
): [Post!]
# ...
}
#6208 092df6678
Thanks @mitchellhamilton! - The create one mutation now requires a non-null data
argument and the create many mutation accepts a list of ItemCreateInput
directly instead of being nested inside of an object with the ItemCreateInput
in a data
field.
If you have a list called Item
, createItem
now looks like createItem(data: ItemCreateInput!): Item
and createItems
now looks like createItems(data: [ItemCreateInput!]!): [Item]
.
#6196 5cd8ffd6c
Thanks @mitchellhamilton! - Removed search
argument from the GraphQL API for finding many items, Lists/DB API and to-many relationship fields. You should use contains
filters instead.
#6095 272b97b3a
Thanks @mitchellhamilton! - Updated filters to be nested instead of flattened and add top-level NOT
operator. See the Query Filter API docs and the upgrade guide for more information.
query {
posts(where: { title: { contains: "Something" } }) {
title
content
}
}
#6196 5cd8ffd6c
Thanks @mitchellhamilton! - Removed sortBy
argument from the GraphQL API for finding many items, Lists/DB API and to-many relationship fields. You should use orderBy
instead.
#6312 56044e2a4
Thanks @mitchellhamilton! - Updated @graphql-ts/schema
. The second type parameter of schema.Arg
exported from @keystone-next/types
is now a boolean that defines whether or not the arg has a default value to make it easier to define circular input objects.
#6217 874f2c405
Thanks @mitchellhamilton! - disconnectAll
has been renamed to disconnect
in to-one relationship inputs and the old disconnect
field has been removed. There are also seperate input types for create and update where the input for create doesn't have disconnect
. It's also now required that if you provide a to-one relationship input, you must provide exactly one field to the input.
If you have a list called Item
, the to-one relationship inputs now look like this:
input ItemRelateToOneForCreateInput {
create: ItemCreateInput
connect: ItemWhereUniqueInput
}
input ItemRelateToOneForUpdateInput {
create: ItemCreateInput
connect: ItemWhereUniqueInput
disconnect: Boolean
}
#6224 3564b342d
Thanks @mitchellhamilton! - disconnectAll
has been replaced by set
in to-many relationship inputs, the equivalent to disconnectAll: true
is now set: []
. There are also seperate input types for create and update where the input for create doesn't have disconnect
or set
. The inputs in the lists in the input field are now also non-null.
If you have a list called Item
, the to-many relationship inputs now look like this:
input ItemRelateToManyForCreateInput {
create: [ItemCreateInput!]
connect: [ItemWhereUniqueInput!]
}
input ItemRelateToManyForUpdateInput {
disconnect: [ItemWhereUniqueInput!]
set: [ItemWhereUniqueInput!]
create: [ItemCreateInput!]
connect: [ItemWhereUniqueInput!]
}
#6197 4d9f89f88
Thanks @mitchellhamilton! - The generated CRUD queries, and some of the input types, in the GraphQL API have been renamed.
If you have a list called Item
, the query for multiple values, allItems
will be renamed to items
. The query for a single value, Item
, will be renamed to item
.
Also, the input type used in the updateItems
mutation has been renamed from ItemsUpdateInput
to ItemUpdateArgs
.
#6211 d214e2f72
Thanks @mitchellhamilton! - The update mutations now accept where
unique inputs instead of only an id
and the where
and data
arguments are non-null.
If you have a list called Item
, the update mutations now look like this:
type Mutation {
updateItem(where: ItemWhereUniqueInput!, data: ItemUpdateInput!): Item
updateItems(data: [ItemUpdateArgs!]!): [Item]
}
input ItemUpdateArgs {
where: ItemWhereUniqueInput!
data: ItemUpdateInput!
}
#6206 f5e64af37
Thanks @mitchellhamilton! - The delete mutations now accept where
unique inputs instead of only an id
.
If you have a list called Item
, deleteItem
now looks like deleteItem(where: ItemWhereUniqueInput!): Item
and deleteItems
now looks like deleteItems(where: [ItemWhereUniqueInput!]!): [Item]
1030296d1
Thanks @timleslie! - Added config.graphql.debug
option, which can be used to control whether debug information such as stack traces are included in the errors returned by the GraphQL API.#6249 8187ea019
Thanks @timleslie! - Updated types to allow the 'id'
field in ui.labelField
, ui.listView.initialColumns
, and ui.listView.initialSort
.
Updated dependencies [e9f3c42d5
, 5cd8ffd6c
, b696a9579
, 5cd8ffd6c
, 4f4f0351a
, 272b97b3a
, 5cd8ffd6c
, 874f2c405
, 3564b342d
, 4d9f89f88
, d214e2f72
]:
c2bb6a9a5
Thanks @timleslie! - Updated css to preserve whitespace formatting of error messages.6cd7ab78e
Thanks @gwyneplaine! - Fixed segmented-control focus style.c2bb6a9a5
Thanks @timleslie! - Updated css to preserve whitespace formatting of error messages.5cd8ffd6c
, 5cd8ffd6c
, b696a9579
, 092df6678
, 5cd8ffd6c
, 272b97b3a
, 5cd8ffd6c
, 56044e2a4
, 874f2c405
, 1030296d1
, 3564b342d
, 4d9f89f88
, 8187ea019
, d214e2f72
, f5e64af37
]:
e9f3c42d5
, 5cd8ffd6c
, 5cd8ffd6c
, b696a9579
, 092df6678
, 5cd8ffd6c
, 4f4f0351a
, 272b97b3a
, 5cd8ffd6c
, 56044e2a4
, 874f2c405
, 1030296d1
, 3564b342d
, 4d9f89f88
, 8187ea019
, d214e2f72
, f5e64af37
]:
5cd8ffd6c
, 1cbcf54cb
, a92169d04
, 5cd8ffd6c
, b696a9579
, f3014a627
, 092df6678
, 5cd8ffd6c
, 6da56b80e
, 697efa354
, c7e331d90
, 3a7a06b2c
, 272b97b3a
, 78dac764e
, 399561b27
, 9d361c1c8
, 0dcb1c95b
, 94435ffee
, 5cd8ffd6c
, 56044e2a4
, f46fd32b7
, 874f2c405
, 8ea4eed55
, e3fe6498d
, 1030296d1
, 3564b342d
, 8b2d179b2
, e3fefafcc
, 4d9f89f88
, 686c0f1c4
, d214e2f72
, f5e64af37
]:
5cd8ffd6c
, 5cd8ffd6c
, b696a9579
, 092df6678
, 5cd8ffd6c
, 272b97b3a
, 5cd8ffd6c
, 56044e2a4
, 874f2c405
, 1030296d1
, 3564b342d
, 4d9f89f88
, 8187ea019
, d214e2f72
, f5e64af37
]:
bc00c0a17
Thanks @gwyneplaine! - Initial version of the custom-admin-ui-navigation example.e9f3c42d5
, 5cd8ffd6c
, 1cbcf54cb
, a92169d04
, 5cd8ffd6c
, b696a9579
, f3014a627
, 092df6678
, 5cd8ffd6c
, 6da56b80e
, 4f4f0351a
, 697efa354
, c7e331d90
, 3a7a06b2c
, 272b97b3a
, 78dac764e
, 399561b27
, 9d361c1c8
, 0dcb1c95b
, 94435ffee
, 5cd8ffd6c
, 56044e2a4
, f46fd32b7
, 874f2c405
, 8ea4eed55
, e3fe6498d
, 1030296d1
, 3564b342d
, 8b2d179b2
, e3fefafcc
, 4d9f89f88
, 686c0f1c4
, 8187ea019
, d214e2f72
, f5e64af37
]:
e0b9e8d38
Thanks @gwyneplaine! - Initial version of the custom-admin-ui-pages example.#6264 df10c42a2
Thanks @gwyneplaine! - Additional content added to example for making the custom-page look more like the Admin UI, as well as adding a route to the custom page to the Admin UI Navigation.
Updated dependencies [e9f3c42d5
, 5cd8ffd6c
, 1cbcf54cb
, a92169d04
, 5cd8ffd6c
, b696a9579
, f3014a627
, 092df6678
, 5cd8ffd6c
, 6da56b80e
, 4f4f0351a
, 697efa354
, c7e331d90
, 3a7a06b2c
, 272b97b3a
, 78dac764e
, 399561b27
, 9d361c1c8
, 0dcb1c95b
, 94435ffee
, 5cd8ffd6c
, 56044e2a4
, f46fd32b7
, 874f2c405
, 8ea4eed55
, e3fe6498d
, 1030296d1
, 3564b342d
, 8b2d179b2
, e3fefafcc
, 4d9f89f88
, 686c0f1c4
, 8187ea019
, d214e2f72
, f5e64af37
]:
5cd8ffd6c
, 5cd8ffd6c
, b696a9579
, 092df6678
, 5cd8ffd6c
, 272b97b3a
, 5cd8ffd6c
, 56044e2a4
, 874f2c405
, 1030296d1
, 3564b342d
, 4d9f89f88
, 8187ea019
, d214e2f72
, f5e64af37
]:
a92169d04
, e985aa010
, 272b97b3a
, 69f47bfed
, 4d9f89f88
]:
e9f3c42d5
, 5cd8ffd6c
, 1cbcf54cb
, a92169d04
, 5cd8ffd6c
, b696a9579
, f3014a627
, 092df6678
, 5cd8ffd6c
, 6da56b80e
, 4f4f0351a
, 697efa354
, c7e331d90
, 3a7a06b2c
, 272b97b3a
, 78dac764e
, 399561b27
, 9d361c1c8
, 0dcb1c95b
, 94435ffee
, 5cd8ffd6c
, 56044e2a4
, f46fd32b7
, 874f2c405
, 8ea4eed55
, e3fe6498d
, 1030296d1
, 3564b342d
, 8b2d179b2
, e3fefafcc
, 4d9f89f88
, 686c0f1c4
, d214e2f72
, f5e64af37
]:
e9f3c42d5
, 5cd8ffd6c
, 1cbcf54cb
, a92169d04
, 5cd8ffd6c
, b696a9579
, f3014a627
, 092df6678
, 5cd8ffd6c
, 6da56b80e
, 4f4f0351a
, 697efa354
, c7e331d90
, 3a7a06b2c
, 272b97b3a
, 78dac764e
, 399561b27
, 9d361c1c8
, 0dcb1c95b
, 94435ffee
, 5cd8ffd6c
, 56044e2a4
, f46fd32b7
, 874f2c405
, 8ea4eed55
, e3fe6498d
, 1030296d1
, 3564b342d
, 8b2d179b2
, e3fefafcc
, 4d9f89f88
, 686c0f1c4
, d214e2f72
, f5e64af37
]:
#6310 399561b27
Thanks @timleslie! - Updated dependencies to use mergeSchemas
from @graphql-tools/schema
, rather than its old location in @graphql-tools/merge
. You might see a reordering of the contents of your graphql.schema
file.
Updated dependencies [e9f3c42d5
, 5cd8ffd6c
, 1cbcf54cb
, a92169d04
, 5cd8ffd6c
, b696a9579
, f3014a627
, 092df6678
, 5cd8ffd6c
, 6da56b80e
, 4f4f0351a
, 697efa354
, c7e331d90
, 3a7a06b2c
, 272b97b3a
, 78dac764e
, 399561b27
, 9d361c1c8
, 0dcb1c95b
, 94435ffee
, 5cd8ffd6c
, 56044e2a4
, f46fd32b7
, 874f2c405
, 8ea4eed55
, e3fe6498d
, 1030296d1
, 3564b342d
, 8b2d179b2
, e3fefafcc
, 4d9f89f88
, 686c0f1c4
, d214e2f72
, f5e64af37
]:
#6310 399561b27
Thanks @timleslie! - Updated dependencies to use mergeSchemas
from @graphql-tools/schema
, rather than its old location in @graphql-tools/merge
. You might see a reordering of the contents of your graphql.schema
file.
Updated dependencies [e9f3c42d5
, 5cd8ffd6c
, 1cbcf54cb
, a92169d04
, 5cd8ffd6c
, b696a9579
, e985aa010
, f3014a627
, 092df6678
, 5cd8ffd6c
, 6da56b80e
, 4f4f0351a
, 697efa354
, c7e331d90
, 3a7a06b2c
, 272b97b3a
, 78dac764e
, 399561b27
, 9d361c1c8
, 69f47bfed
, 0dcb1c95b
, 94435ffee
, 5cd8ffd6c
, 56044e2a4
, f46fd32b7
, 874f2c405
, 8ea4eed55
, e3fe6498d
, 1030296d1
, 3564b342d
, 8b2d179b2
, e3fefafcc
, 4d9f89f88
, 686c0f1c4
, 8187ea019
, d214e2f72
, f5e64af37
]:
#6250 a92169d04
Thanks @timleslie! - Updated internal type definitions.
#6310 399561b27
Thanks @timleslie! - Updated dependencies to use mergeSchemas
from @graphql-tools/schema
, rather than its old location in @graphql-tools/merge
. You might see a reordering of the contents of your graphql.schema
file.
Updated dependencies [e9f3c42d5
, 5cd8ffd6c
, 1cbcf54cb
, a92169d04
, 5cd8ffd6c
, b696a9579
, f3014a627
, 092df6678
, 5cd8ffd6c
, 6da56b80e
, 4f4f0351a
, 697efa354
, c7e331d90
, 3a7a06b2c
, 272b97b3a
, 78dac764e
, 399561b27
, 9d361c1c8
, 0dcb1c95b
, 94435ffee
, 5cd8ffd6c
, 56044e2a4
, f46fd32b7
, 874f2c405
, 8ea4eed55
, e3fe6498d
, 1030296d1
, 3564b342d
, 8b2d179b2
, e3fefafcc
, 4d9f89f88
, 686c0f1c4
, 8187ea019
, d214e2f72
, f5e64af37
]:
e9f3c42d5
, 5cd8ffd6c
, 1cbcf54cb
, a92169d04
, 5cd8ffd6c
, b696a9579
, f3014a627
, 092df6678
, 5cd8ffd6c
, 6da56b80e
, 4f4f0351a
, 697efa354
, c7e331d90
, 3a7a06b2c
, 272b97b3a
, 78dac764e
, 399561b27
, 9d361c1c8
, 0dcb1c95b
, 94435ffee
, 5cd8ffd6c
, 56044e2a4
, f46fd32b7
, 874f2c405
, 8ea4eed55
, e3fe6498d
, 1030296d1
, 3564b342d
, 8b2d179b2
, e3fefafcc
, 4d9f89f88
, 686c0f1c4
, d214e2f72
, f5e64af37
]:
#6310 399561b27
Thanks @timleslie! - Updated dependencies to use mergeSchemas
from @graphql-tools/schema
, rather than its old location in @graphql-tools/merge
. You might see a reordering of the contents of your graphql.schema
file.
Updated dependencies [e9f3c42d5
, 5cd8ffd6c
, 1cbcf54cb
, a92169d04
, 5cd8ffd6c
, b696a9579
, e985aa010
, f3014a627
, 092df6678
, 5cd8ffd6c
, 6da56b80e
, 4f4f0351a
, 697efa354
, c7e331d90
, 3a7a06b2c
, 272b97b3a
, 78dac764e
, 399561b27
, 9d361c1c8
, 69f47bfed
, 0dcb1c95b
, 94435ffee
, 5cd8ffd6c
, 56044e2a4
, f46fd32b7
, 874f2c405
, 8ea4eed55
, e3fe6498d
, 1030296d1
, 3564b342d
, 8b2d179b2
, e3fefafcc
, 4d9f89f88
, 686c0f1c4
, d214e2f72
, f5e64af37
]:
e9f3c42d5
, 5cd8ffd6c
, 1cbcf54cb
, a92169d04
, 5cd8ffd6c
, b696a9579
, f3014a627
, 092df6678
, 5cd8ffd6c
, 6da56b80e
, 4f4f0351a
, 697efa354
, c7e331d90
, 3a7a06b2c
, 272b97b3a
, 78dac764e
, 399561b27
, 9d361c1c8
, 0dcb1c95b
, 94435ffee
, 5cd8ffd6c
, 56044e2a4
, f46fd32b7
, 874f2c405
, 8ea4eed55
, e3fe6498d
, 1030296d1
, 3564b342d
, 8b2d179b2
, e3fefafcc
, 4d9f89f88
, 686c0f1c4
, d214e2f72
, f5e64af37
]:
#6310 399561b27
Thanks @timleslie! - Updated dependencies to use mergeSchemas
from @graphql-tools/schema
, rather than its old location in @graphql-tools/merge
. You might see a reordering of the contents of your graphql.schema
file.
Updated dependencies [e9f3c42d5
, 5cd8ffd6c
, 1cbcf54cb
, a92169d04
, 5cd8ffd6c
, b696a9579
, f3014a627
, 092df6678
, 5cd8ffd6c
, 6da56b80e
, 4f4f0351a
, 697efa354
, c7e331d90
, 3a7a06b2c
, 272b97b3a
, 78dac764e
, 399561b27
, 9d361c1c8
, 0dcb1c95b
, 94435ffee
, 5cd8ffd6c
, 56044e2a4
, f46fd32b7
, 874f2c405
, 8ea4eed55
, e3fe6498d
, 1030296d1
, 3564b342d
, 8b2d179b2
, e3fefafcc
, 4d9f89f88
, 686c0f1c4
, 8187ea019
, d214e2f72
, f5e64af37
]:
e9f3c42d5
, 5cd8ffd6c
, 1cbcf54cb
, a92169d04
, 5cd8ffd6c
, b696a9579
, f3014a627
, 092df6678
, 5cd8ffd6c
, 6da56b80e
, 4f4f0351a
, 697efa354
, c7e331d90
, 3a7a06b2c
, 272b97b3a
, 78dac764e
, 399561b27
, 9d361c1c8
, 0dcb1c95b
, 94435ffee
, 5cd8ffd6c
, 56044e2a4
, f46fd32b7
, 874f2c405
, 8ea4eed55
, e3fe6498d
, 1030296d1
, 3564b342d
, 8b2d179b2
, e3fefafcc
, 4d9f89f88
, 686c0f1c4
, d214e2f72
, f5e64af37
]:
e9f3c42d5
, 5cd8ffd6c
, 1cbcf54cb
, a92169d04
, 5cd8ffd6c
, b696a9579
, f3014a627
, 092df6678
, 5cd8ffd6c
, 6da56b80e
, 4f4f0351a
, 697efa354
, c7e331d90
, 3a7a06b2c
, 272b97b3a
, 78dac764e
, 399561b27
, 9d361c1c8
, 0dcb1c95b
, 94435ffee
, 5cd8ffd6c
, 56044e2a4
, f46fd32b7
, 874f2c405
, 8ea4eed55
, e3fe6498d
, 1030296d1
, 3564b342d
, 8b2d179b2
, e3fefafcc
, 4d9f89f88
, 686c0f1c4
, d214e2f72
, f5e64af37
]:
e9f3c42d5
, 5cd8ffd6c
, 1cbcf54cb
, a92169d04
, 5cd8ffd6c
, b696a9579
, f3014a627
, 092df6678
, 5cd8ffd6c
, 6da56b80e
, 4f4f0351a
, 697efa354
, c7e331d90
, 3a7a06b2c
, 272b97b3a
, 78dac764e
, 399561b27
, 9d361c1c8
, 0dcb1c95b
, 94435ffee
, 5cd8ffd6c
, 56044e2a4
, f46fd32b7
, 874f2c405
, 8ea4eed55
, e3fe6498d
, 1030296d1
, 3564b342d
, 8b2d179b2
, e3fefafcc
, 4d9f89f88
, 686c0f1c4
, 8187ea019
, d214e2f72
, f5e64af37
]:
e9f3c42d5
, 5cd8ffd6c
, 1cbcf54cb
, a92169d04
, 5cd8ffd6c
, b696a9579
, f3014a627
, 092df6678
, 5cd8ffd6c
, 6da56b80e
, 4f4f0351a
, 697efa354
, c7e331d90
, 3a7a06b2c
, 272b97b3a
, 78dac764e
, 399561b27
, 9d361c1c8
, 0dcb1c95b
, 94435ffee
, 5cd8ffd6c
, 56044e2a4
, f46fd32b7
, 874f2c405
, 8ea4eed55
, e3fe6498d
, 1030296d1
, 3564b342d
, 8b2d179b2
, e3fefafcc
, 4d9f89f88
, 686c0f1c4
, 8187ea019
, d214e2f72
, f5e64af37
]:
Published by bladey about 3 years ago
Custom navigation, pages and logo in this big Admin UI themed release! 🎛️
"@keystone-ui/tooltip": "4.0.1",
"@keystone-next/admin-ui-utils": "5.0.5",
"@keystone-next/auth": "30.0.0",
"@keystone-next/cloudinary": "6.0.5",
"@keystone-next/fields": "13.0.0",
"@keystone-next/fields-document": "7.0.3",
"@keystone-next/keystone": "23.0.2",
"@keystone-next/testing": "1.1.0",
"@keystone-next/types": "23.0.0",
"@keystone-next/utils": "1.0.3",
You can now create your own custom navigation component with custom routes to be rendered in the Admin UI.
Check out our detailed Custom Admin UI Navigation guide for all the details!
Take things a step further with custom pages. As the Admin UI is built on top of Next.js, it exposes the same /pages
directory for adding custom pages.
ℹ️ In the near future you'll be able to directly embed pages within the Keystone Admin UI itself, stay tuned!
Read our new Custom Admin UI Pages guide for more details.
Wait, theres more. You can also replace the default Admin UI logo with your own brand assets. ✨
Dive into our Custom Admin UI Logo guide to find out how.
We've added an optional /_healthcheck
endpoint to Keystone's express server. You can use this endpoint to ensure your Keystone instance is up and running using website monitoring solutions.
Enable it by setting config.server.healthCheck: true
, by default it will respond with { status: 'pass', timestamp: Date.now() }
.
You can also specify a custom path and JSON data:
config({
server: {
healthCheck: {
path: "/my-health-check",
data: { status: "healthy" },
},
},
});
Or use a function for the data
config to return real-time information:
config({
server: {
healthCheck: {
path: "/my-health-check",
data: () => ({
status: "healthy",
timestamp: Date.now(),
uptime: process.uptime(),
}),
},
},
});
Updated Prisma dependencies to 2.27.0
, check out the Prisma releases page for more details.
Fixed virtual field rendering of false
& 0
values thanks to @ChuckJonas!
Added /
to list.path
on HomePage
ListCard
to better allow custom basePath
thanks to @borisno2!
Changed symlink generation to use relative path instead of absolute which solves running project in docker when mapping volume, thanks to @gautamsi!
Star this repo 🌟 ☝️ or connect to Keystone on Twitter and in Slack.
ee8a51498
Thanks @mitchellhamilton! - The field passed to the identityField
option is now required to have isUnique: true
.#6180 a11e54d69
Thanks @mitchellhamilton! - Fixed issues with React hooks dependency arrays
Updated dependencies [3f03b8c1f
, ea0712aa2
, 93f1e5d30
, 9e2deac5f
, 7716315ea
, a11e54d69
, e5f61ad50
, 9e2deac5f
, e4e6cf9b5
, 2ef6fe82c
, dd7e811e7
, 587a8d0b0
, 597edbdd8
, 1172e1853
, fbe698461
, 32e9879db
]:
#6105 e5f61ad50
Thanks @mitchellhamilton! - Removed unnecessary descriptions on GraphQL types.
#6165 e4e6cf9b5
Thanks @mitchellhamilton! - Added ui.searchFields
option to lists to allow searching by multiple fields in the Admin UI (the only current usage of this is in the select used in relationship fields) and to replace the usage of the search
GraphQL argument which will be removed soon and should be replaced by using contains
filters directly.
#6180 a11e54d69
Thanks @mitchellhamilton! - Fixed issues with React hooks dependency arrays
#6110 2ef6fe82c
Thanks @ChuckJonas! - Fixed virtual field rendering of false & 0 values.
Updated dependencies [3f03b8c1f
, ea0712aa2
, 93f1e5d30
, 9e2deac5f
, 7716315ea
, a11e54d69
, e5f61ad50
, 9e2deac5f
, e4e6cf9b5
, dd7e811e7
, 587a8d0b0
, 597edbdd8
, 1172e1853
, fbe698461
, 32e9879db
]:
#6153 7716315ea
Thanks @mitchellhamilton! - Removed implicit chunking from the lists API so that the lists API is a direct translation of the GraphQL API
#6105 e5f61ad50
Thanks @mitchellhamilton! - Removed unnecessary descriptions on GraphQL types.
#6165 e4e6cf9b5
Thanks @mitchellhamilton! - Added ui.searchFields
option to lists to allow searching by multiple fields in the Admin UI (the only current usage of this is in the select used in relationship fields) and to replace the usage of the search
GraphQL argument which will be removed soon and should be replaced by using contains
filters directly.
9e2deac5f
Thanks @gwyneplaine! - Added the ability to customise the Navigation component in the Admin UI, and provided helper components to do so.#6104 3f03b8c1f
Thanks @timleslie! - Cosmetic changes to the core code in preparation for improvements to the error handling logic.
#6126 ea0712aa2
Thanks @borisno2! - Added /
to list.path
on HomePage ListCard to better allow custom basePath
.
#6192 93f1e5d30
Thanks @JedWatson! - Added an optional /_healthcheck
endpoint to Keystone's express server.
#6180 a11e54d69
Thanks @mitchellhamilton! - Fixed issues with React hooks dependency arrays
#6116 dd7e811e7
Thanks @timleslie! - Updated unique filter checking code to ensure it is always run before using the unique input filter.
#6139 587a8d0b0
Thanks @timleslie! - Refactored mutation validation handling into a single location.
#6119 597edbdd8
Thanks @timleslie! - Split the default value loop from the field-type input resolver loop to allow for more fine-grained error handling.
#6144 1172e1853
Thanks @gautamsi! - Changed symlink generation to use relative path instead of absolute. Solves running project in docker when mapping volume.
#6096 fbe698461
Thanks @renovate! - Updated Prisma dependencies to 2.27.0
.
#6123 32e9879db
Thanks @timleslie! - Simplified the internal implementation of nested mutations.
Updated dependencies [93f1e5d30
, a11e54d69
, e5f61ad50
, 9e2deac5f
, e4e6cf9b5
, 2ef6fe82c
]:
e4e6cf9b5
Thanks @mitchellhamilton! - Added ui.searchFields
option to lists to allow searching by multiple fields in the Admin UI (the only current usage of this is in the select used in relationship fields) and to replace the usage of the search
GraphQL argument which will be removed soon and should be replaced by using contains
filters directly.9e2deac5f
Thanks @gwyneplaine! - Add Admin UI specific types AuthenticatedItem, VisibleLists, CreateViewFieldModes and NavigationProps to exports.#6192 93f1e5d30
Thanks @JedWatson! - Added an optional /_healthcheck
endpoint to Keystone's express server.
You can enable it by setting config.server.healthCheck: true
By default it will respond with { status: 'pass', timestamp: Date.now() }
You can also specify a custom path and JSON data:
config({
server: {
healthCheck: {
path: '/my-health-check',
data: { status: 'healthy' },
},
},
});
Or use a function for the data
config to return real-time information:
config({
server: {
healthCheck: {
path: '/my-health-check',
data: () => ({
status: 'healthy',
timestamp: Date.now(),
uptime: process.uptime(),
}),
},
},
});
Updated dependencies [a11e54d69
, e5f61ad50
, e4e6cf9b5
, 2ef6fe82c
]:
14cb7c5c4
Thanks @timleslie! - Added an app
value to the TestArgs
type to provide direct access to the Express application from test runners.3f03b8c1f
, ea0712aa2
, 93f1e5d30
, 9e2deac5f
, 7716315ea
, a11e54d69
, e5f61ad50
, e4e6cf9b5
, dd7e811e7
, 587a8d0b0
, 597edbdd8
, 1172e1853
, fbe698461
, 32e9879db
]:
a11e54d69
Thanks @mitchellhamilton! - Fixed issues with React hooks dependency arrays93f1e5d30
, 9e2deac5f
, e4e6cf9b5
]:
#6180 a11e54d69
Thanks @mitchellhamilton! - Fixed issues with React hooks dependency arrays
Updated dependencies [93f1e5d30
, a11e54d69
, e5f61ad50
, 9e2deac5f
, e4e6cf9b5
, 2ef6fe82c
]:
#6180 a11e54d69
Thanks @mitchellhamilton! - Fixed issues with React hooks dependency arrays
Updated dependencies [3f03b8c1f
, ea0712aa2
, 93f1e5d30
, 9e2deac5f
, 7716315ea
, a11e54d69
, e5f61ad50
, 9e2deac5f
, e4e6cf9b5
, 2ef6fe82c
, dd7e811e7
, 587a8d0b0
, 597edbdd8
, 1172e1853
, fbe698461
, 32e9879db
]:
93f1e5d30
, 9e2deac5f
, e4e6cf9b5
]:
2de1615a0
Thanks @gwyneplaine! - Initial version of the custom-admin-ui-logo example.Published by bladey over 3 years ago
More examples, types, and UI rendering tweaks as we push forward towards a general availability release! 🚀
"@keystone-ui/core": "3.1.1",
"@keystone-next/admin-ui-utils": "5.0.4",
"@keystone-next/auth": "29.0.0",
"@keystone-next/cloudinary": "6.0.4",
"@keystone-next/document-renderer": "4.0.0",
"@keystone-next/fields": "12.0.0",
"@keystone-next/fields-document": "7.0.2",
"@keystone-next/keystone": "22.0.0",
"@keystone-next/session-store-redis": "3.0.2",
"@keystone-next/testing": "1.0.2",
"@keystone-next/types": "22.0.0",
"@keystone-next/utils": "1.0.2",
We have a new example for custom field views, demonstrating how to create a custom field view for a JSON field. This example allows users to add, edit and remove navigation items from a list:
Rendering an inline relationship for the document field has been added to the existing example project as well as our docs page:
Be sure to check out all the examples, with more to come.
If an item referenced in a document field is deleted from Keystone, the document field now handles this gracefully. Before an error would be returned when querying the field, which prevents the user from being able to manage the issue.
This release fixes this to simply return null
for the missing item. This also covers the behavior for when a user doesn't have read access for an item.
A variety of UI fixes are in this release when rendering fields in the Admin UI:
data
passed to the inline relationship renderer now matches the data returned by the GraphQL query.data.label
are no longer set to data.id
and falsey values of data.data
are no longer set to {}
.ui.cardFields
, ui.inlineCreate.fields
and ui.inlineEdit.fields
.relationship
field with displayMode: 'cards'
not using labels for related items in the cell view.KeystoneContext
, KeystoneListsAPI
and KeystoneDbAPI
🪢We've added generated types for KeystoneContext
, KeystoneListsAPI
and KeystoneDbAPI
.
You can now import these from .keystone/types
(instead of @keystone-next/types
) to get types that are pre-bound to your project's schema.
Another update for Prisma, version 2.26.0
, check out the Prisma releases page for more details.
Our packages-next
folder has moved over to packages
as part of our push to a general availability release in the near future!
Star this repo 🌟 ☝️ or connect to Keystone on Twitter and in Slack.
890e3d0a5
Thanks @timleslie! - The value of data
passed to the inline relationship renderer now matches the data returned by the GraphQL query.data.label
are no longer set to data.id
and falsey values of data.data
are no longer set to {}
.#6087 139d7a8de
Thanks @JedWatson! - Move source code from the packages-next
to the packages
directory.
#6036 093f9791b
Thanks @mitchellhamilton! - Fixed the relationship name not being passed to the inline relationship renderer
#6087 139d7a8de
Thanks @JedWatson! - Move source code from the packages-next
to the packages
directory.
#6045 253df44c2
Thanks @mitchellhamilton! - Fixed confusing error when providing fields that don't exist to ui.cardFields
, ui.inlineCreate.fields
and ui.inlineEdit.fields
.
#6041 c536b478f
Thanks @mitchellhamilton! - Fixed relationship
field with displayMode: 'cards'
not using labels for related items in the cell view.
Updated dependencies [38b78f2ae
, 5f3d407d7
, 139d7a8de
, 279403cb0
, 253df44c2
, f482db633
]:
#6087 139d7a8de
Thanks @JedWatson! - Move source code from the packages-next
to the packages
directory.
#6094 279403cb0
Thanks @timleslie! - Refactored internal nested mutation input handler code.
#6045 253df44c2
Thanks @mitchellhamilton! - Adjusted when getAdminMeta
is called on fields so that they can see the metadata (excluding the results of getAdminMeta
on fields) of other fields to do validation or etc.
#6093 f482db633
Thanks @JedWatson! - Added generated types for KeystoneContext, KeystoneListsAPI and KeystoneDbAPI.
You can now import these from .keystone/types
(instead of @keystone-next/types
) to get types that are pre-bound to your project's schema.
Updated dependencies [38b78f2ae
, 5f3d407d7
, 139d7a8de
, 253df44c2
, c536b478f
]:
#6061 5f3d407d7
Thanks @mitchellhamilton! - Fixed TypeScript errors in declarations
#6087 139d7a8de
Thanks @JedWatson! - Move source code from the packages-next
to the packages
directory.
Updated dependencies [38b78f2ae
, 139d7a8de
, 253df44c2
, c536b478f
]:
5f3d407d7
Thanks @mitchellhamilton! - Fixed TypeScript errors in declarations#6087 139d7a8de
Thanks @JedWatson! - Move source code from the packages-next
to the packages
directory.
Updated dependencies [38b78f2ae
, 5f3d407d7
, 139d7a8de
]:
#6087 139d7a8de
Thanks @JedWatson! - Move source code from the packages-next
to the packages
directory.
Updated dependencies [38b78f2ae
, 5f3d407d7
, 139d7a8de
, 279403cb0
, 253df44c2
, 253df44c2
, f482db633
, c536b478f
]:
#6087 139d7a8de
Thanks @JedWatson! - Move source code from the packages-next
to the packages
directory.
Updated dependencies [38b78f2ae
, 5f3d407d7
, 139d7a8de
, 253df44c2
, c536b478f
]:
#6087 139d7a8de
Thanks @JedWatson! - Move source code from the packages-next
to the packages
directory.
#6040 890e3d0a5
Thanks @timleslie! - Fixed the behaviour of document(hydrateRelationships: true)
when a related item no longer exists or read access is denied.
The resolver will now set the relationship data to be { id }
, leaving the label
and data
properties undefined.
Updated dependencies [38b78f2ae
, 5f3d407d7
, 139d7a8de
, 279403cb0
, 253df44c2
, 253df44c2
, f482db633
, c536b478f
]:
139d7a8de
Thanks @JedWatson! - Move source code from the packages-next
to the packages
directory.#6087 139d7a8de
Thanks @JedWatson! - Move source code from the packages-next
to the packages
directory.
Updated dependencies [38b78f2ae
, 139d7a8de
, 279403cb0
, 253df44c2
, f482db633
]:
#6087 139d7a8de
Thanks @JedWatson! - Move source code from the packages-next
to the packages
directory.
Updated dependencies [38b78f2ae
, 5f3d407d7
, 139d7a8de
]:
fd342e28a
Thanks @alvarezmauro! - Initial version of the custom-field-view example38b78f2ae
, 5f3d407d7
, 139d7a8de
, 279403cb0
, 253df44c2
, 253df44c2
, f482db633
, c536b478f
]:
55d50573d
Thanks @timleslie! - Added inline relationship example.38b78f2ae
, 139d7a8de
, 279403cb0
, 890e3d0a5
, 253df44c2
, 253df44c2
, f482db633
, 093f9791b
, 890e3d0a5
, c536b478f
]:
#6087 139d7a8de
Thanks @JedWatson! - Move source code from the packages-next
to the packages
directory.
Updated dependencies [139d7a8de
, 890e3d0a5
]:
38b78f2ae
, 139d7a8de
, 279403cb0
, 253df44c2
, 253df44c2
, f482db633
, c536b478f
]:
38b78f2ae
, 139d7a8de
, 279403cb0
, 253df44c2
, 253df44c2
, f482db633
, c536b478f
]:
#6087 139d7a8de
Thanks @JedWatson! - Move source code from the packages-next
to the packages
directory.
Updated dependencies [38b78f2ae
, 139d7a8de
, 279403cb0
, 253df44c2
, 253df44c2
, f482db633
, c536b478f
]:
38b78f2ae
, 5f3d407d7
, 139d7a8de
, 279403cb0
, 890e3d0a5
, 253df44c2
, 253df44c2
, f482db633
, 093f9791b
, 890e3d0a5
, c536b478f
]:
38b78f2ae
, 5f3d407d7
, 139d7a8de
, 279403cb0
, 253df44c2
, 253df44c2
, f482db633
, c536b478f
]:
38b78f2ae
, 139d7a8de
, 279403cb0
, 253df44c2
, 253df44c2
, f482db633
, c536b478f
]:
38b78f2ae
, 139d7a8de
, 279403cb0
, 890e3d0a5
, 253df44c2
, 253df44c2
, f482db633
, c536b478f
]:
38b78f2ae
, 139d7a8de
, 279403cb0
, 253df44c2
, 253df44c2
, f482db633
, c536b478f
]:
38b78f2ae
, 5f3d407d7
, 139d7a8de
, 279403cb0
, 253df44c2
, 253df44c2
, f482db633
, c536b478f
]:
38b78f2ae
, 139d7a8de
, 279403cb0
, 253df44c2
, 253df44c2
, f482db633
, c536b478f
]:
38b78f2ae
, 139d7a8de
, 279403cb0
, 253df44c2
, 253df44c2
, f482db633
, c536b478f
]:
#6087 139d7a8de
Thanks @JedWatson! - Move source code from the packages-next
to the packages
directory.
Updated dependencies [38b78f2ae
, 5f3d407d7
, 139d7a8de
, 279403cb0
, 253df44c2
, 253df44c2
, f482db633
, c536b478f
]:
38b78f2ae
, 139d7a8de
, 279403cb0
, 253df44c2
, 253df44c2
, f482db633
, c536b478f
]:
38b78f2ae
, 139d7a8de
, 279403cb0
, 253df44c2
, 253df44c2
, f482db633
, c536b478f
]:
38b78f2ae
, 139d7a8de
, 279403cb0
, 253df44c2
, 253df44c2
, f482db633
, c536b478f
]:
38b78f2ae
, 139d7a8de
, 279403cb0
, 253df44c2
, 253df44c2
, f482db633
, c536b478f
]:
38b78f2ae
, 5f3d407d7
, 139d7a8de
, 279403cb0
, 253df44c2
, 253df44c2
, f482db633
, c536b478f
]:
38b78f2ae
, 5f3d407d7
, 139d7a8de
, 279403cb0
, 253df44c2
, 253df44c2
, f482db633
, c536b478f
]:
38b78f2ae
, 139d7a8de
, 279403cb0
, 253df44c2
, 253df44c2
, f482db633
, c536b478f
]:
38b78f2ae
, 5f3d407d7
, 139d7a8de
]:
#6087 139d7a8de
Thanks @JedWatson! - Move source code from the packages-next
to the packages
directory.
#6040 890e3d0a5
Thanks @timleslie! - Fixed the behaviour of document(hydrateRelationships: true)
when a related item no longer exists or read access is denied.
The resolver will now set the relationship data to be { id }
, leaving the label
and data
properties undefined.
Updated dependencies [38b78f2ae
, 5f3d407d7
, 139d7a8de
]:
38b78f2ae
, 139d7a8de
, 279403cb0
, 253df44c2
, 253df44c2
, f482db633
, c536b478f
]:
38b78f2ae
, 139d7a8de
, 279403cb0
, 253df44c2
, 253df44c2
, f482db633
, c536b478f
]:
Published by bladey over 3 years ago
We've fixed an issue with cloudinaryImage
and relationship
fields. 🔥
"@keystone-next/auth": "28.0.1",
"@keystone-next/cloudinary": "6.0.3",
"@keystone-next/fields": "11.0.3",
"@keystone-next/keystone": "21.0.2",
"@keystone-next/session-store-redis": "3.0.1",
"@keystone-next/types": "21.0.1",
We've discovered an issue where cloudinaryImage
and relationship
fields were not passing through access control, hooks, ui and graphql options to Keystone, this is now resolved!
Star this repo 🌟 ☝️ or connect to Keystone on Twitter and in Slack.
#6029 038cd09a2
Thanks @bladey! - Updated Keystone URL reference from next.keystonejs.com to keystonejs.com.
Updated dependencies [038cd09a2
, 0988f08c2
]:
#6031 0988f08c2
Thanks @mitchellhamilton! - Fixed cloudinaryImage
field not passing through access control, hooks, ui and graphql options to Keystone.
Updated dependencies [038cd09a2
, 0988f08c2
]:
#6029 038cd09a2
Thanks @bladey! - Updated Keystone URL reference from next.keystonejs.com to keystonejs.com.
#6031 0988f08c2
Thanks @mitchellhamilton! - Fixed relationship
field not passing through access control, hooks, ui and graphql options to Keystone.
Updated dependencies [038cd09a2
]:
#6029 038cd09a2
Thanks @bladey! - Updated Keystone URL reference from next.keystonejs.com to keystonejs.com.
Updated dependencies [038cd09a2
, 0988f08c2
]:
038cd09a2
Thanks @bladey! - Updated Keystone URL reference from next.keystonejs.com to keystonejs.com.#6029 038cd09a2
Thanks @bladey! - Updated Keystone URL reference from next.keystonejs.com to keystonejs.com.
Updated dependencies [038cd09a2
, 0988f08c2
]:
038cd09a2
Thanks @bladey! - Updated Keystone URL reference from next.keystonejs.com to keystonejs.com.#6029 038cd09a2
Thanks @bladey! - Updated Keystone URL reference from next.keystonejs.com to keystonejs.com.
Updated dependencies [038cd09a2
, 0988f08c2
]:
#6029 038cd09a2
Thanks @bladey! - Updated Keystone URL reference from next.keystonejs.com to keystonejs.com.
Updated dependencies [038cd09a2
, 0988f08c2
]:
#6029 038cd09a2
Thanks @bladey! - Updated Keystone URL reference from next.keystonejs.com to keystonejs.com.
Updated dependencies [038cd09a2
, 0988f08c2
]:
#6029 038cd09a2
Thanks @bladey! - Updated Keystone URL reference from next.keystonejs.com to keystonejs.com.
Updated dependencies [038cd09a2
, 0988f08c2
]:
#6029 038cd09a2
Thanks @bladey! - Updated Keystone URL reference from next.keystonejs.com to keystonejs.com.
Updated dependencies [038cd09a2
, 0988f08c2
]:
#6029 038cd09a2
Thanks @bladey! - Updated Keystone URL reference from next.keystonejs.com to keystonejs.com.
Updated dependencies [038cd09a2
, 0988f08c2
]:
Published by bladey over 3 years ago
The ID Field option has been revamped with cuid
, uuid
and autoincrement
options! 🤹
"@keystone-next/admin-ui-utils": "5.0.3",
"@keystone-next/auth": "28.0.0",
"@keystone-next/cloudinary@": "6.0.2",
"@keystone-next/fields": "11.0.2",
"@keystone-next/fields-document": "7.0.1",
"@keystone-next/keystone": "21.0.1",
"@keystone-next/testing": "1.0.1",
"@keystone-next/types": "21.0.0",
"@keystone-next/utils": "1.0.1",
We've replaced the idField
list configuration option with a more constrained option, db.idField
.
This option accepts an object with a kind
property with a value of:
cuid
uuid
autoincrement
The default behaviour has changed from using autoincrement
to using cuids
.
To keep the current behaviour, you should set { kind: 'autoincrement' }
at db.idField
in your top level config.
db.idField
can be set on either the top level config
object:
config({
db: {
idField: { kind: 'uuid' }
},
lists,
});
Or on individual lists:
config({
db,
lists: createSchema({
User: list({
db: {
idField: { kind: 'uuid' },
},
fields: {
name: text({ isRequired: true }),
},
}),
});
Star this repo 🌟 ☝️ or connect to Keystone on Twitter and in Slack.
#5947 03f535ba6
Thanks @mitchellhamilton! - Replaced the idField
list configuration option with a more constrained option, db.idField
, that accepts an object with a kind
property with a value of cuid
, uuid
or autoincrement
. db.idField
can be set on either the top level config
object, or on individual lists.
The default behaviour has changed from using autoincrement
to using cuids. To keep the current behaviour, you should set { kind: 'autoincrement' }
at db.idField
in your top level config.
#5947 03f535ba6
Thanks @mitchellhamilton! - Id field filters no longer allow null
to be passed because ids can never be null. For the in
and not_in
, this is reflected in the GraphQL types
#6022 475307e0e
Thanks @mitchellhamilton! - Fixed error when loading the Admin UI due to the id field changes.
03f535ba6
]:
#5947 03f535ba6
Thanks @mitchellhamilton! - Replaced the idField
list configuration option with a more constrained option, db.idField
, that accepts an object with a kind
property with a value of cuid
, uuid
or autoincrement
. db.idField
can be set on either the top level config
object, or on individual lists.
The default behaviour has changed from using autoincrement
to using cuids. To keep the current behaviour, you should set { kind: 'autoincrement' }
at db.idField
in your top level config.
03f535ba6
]:
03f535ba6
, 03f535ba6
]:
03f535ba6
]:
03f535ba6
, 03f535ba6
]:
03f535ba6
, 03f535ba6
]:
03f535ba6
, 03f535ba6
]:
03f535ba6
]:
03f535ba6
, 03f535ba6
]:
03f535ba6
, 03f535ba6
]:
03f535ba6
, 03f535ba6
]:
03f535ba6
, 03f535ba6
]:
03f535ba6
, 03f535ba6
]:
03f535ba6
, 03f535ba6
]:
03f535ba6
, 03f535ba6
]:
03f535ba6
, 03f535ba6
]:
03f535ba6
, 03f535ba6
]:
03f535ba6
, 03f535ba6
]:
03f535ba6
, 03f535ba6
]:
03f535ba6
, 03f535ba6
]:
03f535ba6
, 03f535ba6
]:
03f535ba6
, 03f535ba6
]:
03f535ba6
, 03f535ba6
]:
03f535ba6
, 03f535ba6
]:
03f535ba6
, 03f535ba6
]:
03f535ba6
, 03f535ba6
]:
03f535ba6
, 03f535ba6
]:
03f535ba6
]:
03f535ba6
, 03f535ba6
]:
Published by bladey over 3 years ago
An assortment of good things in this release! 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! 🍱
"@keystone-ui/fields": "4.1.2",
"@keystone-ui/options": "4.0.1",
"@keystone-ui/pill": "5.0.0",
"@keystone-ui/popover": "4.0.2",
"@keystone-ui/toast": "4.0.1",
"@keystone-next/cloudinary": "6.0.1",
"@keystone-next/fields": "11.0.1",
"@keystone-next/keystone": "20.0.1",
"@keystone-next/testing": "1.0.0",
"@keystone-next/types": "20.0.1",
"@keystone-next/utils": "1.0.0",
We’ve shipped a new package called @keystone-next/testing
to help you write tests for your GraphQL API!
Check out the guide on the Keystone website for more details.
We have a new example project for the document field which covers the basic use case of configuring the toolbar, rendering the document field in a front end, and providing custom renderers for the built in data.
Another example showing advanced use cases is in-progress and will be available soon!
GraphQL error messages are far more helpful when running queries. You will now get relevant error messages instead of getting Cannot assign to read only property 'path' of object '#<Object>'"
back.
Thanks @tjbp for contributing this fix!
KeystoneContext
📜⚠️ We've tweaked lists
and db.lists
APIs on KeystoneContext
to have improved types. If you're using the generated KeystoneListsTypeInfo
type like this:
const lists: KeystoneListsAPI<KeystoneListsTypeInfo> = context.lists;
You will have to change it to use as
like this:
const lists = context.lists as KeystoneListsAPI<KeystoneListsTypeInfo>;
Another set of accessibility improvements in the Admin UI in this release including assorted quality of life and screen reader improvements to Filter pills and dialogs, as well as labels and descriptions.
We've updated our Prisma dependencies to 2.25.0
, check out the Prisma releases page for more information.
Star this repo 🌟 ☝️ or connect to Keystone on Twitter and in Slack.
972e04514
Thanks @gwyneplaine! - Added containerProps prop, these are spread onto the containing element. All other props are now spread onto the internal PillButton component (this change is inclusive of refs).3b9cdc2c0
Thanks @timleslie! - Initial release of the @keystone-next/testing
package.10b36551a
, 8afbab763
, 7a25925c3
, 50ad1ce6b
, 972e04514
, 123042b04
, 4e5634b86
, 006afd108
, 3be09ea54
, eab130f30
]:
7a25925c3
Thanks @timleslie! - Initial release of @keystone-next/utils
package.50ad1ce6b
, 0df3734d5
, 543154bc0
]:
#5848 4e5634b86
Thanks @renovate! - Updated TypeScript to 4.3.2
Updated dependencies [972e04514
, 0afacf621
, eab130f30
]:
#5848 4e5634b86
Thanks @renovate! - Updated TypeScript to 4.3.2
Updated dependencies [4e5634b86
]:
#5987 972e04514
Thanks @gwyneplaine! - Added aria-hidden to dialog container so screen readers can't access when the dialog is not visible.
#5924 0afacf621
Thanks @gwyneplaine! - Fixed popover arrow misalignment.
#5921 eab130f30
Thanks @gwyneplaine! - Applied aria-modal and role=dialog to popover component for better screen reader support.
40a44d20d
Thanks @gwyneplaine! - Added role="alert" to Toast container element for better screen reader experience.#5925 de0a5c19e
Thanks @timleslie! - Removed unused dependencies.
Updated dependencies [de0a5c19e
, 7a25925c3
, 50ad1ce6b
, 0df3734d5
, 4e5634b86
, 972e04514
, 543154bc0
, 972e04514
]:
#5925 de0a5c19e
Thanks @timleslie! - Removed unused dependencies.
#5932 7a25925c3
Thanks @timleslie! - Initial release of @keystone-next/utils
package.
#5992 543154bc0
Thanks @timleslie! - Pinned dependency decimal.js
to 10.2.1
to be consistent with Prisma.
#5987 972e04514
Thanks @gwyneplaine! - Fixed autoFocus always being active in the text field Filter component.
Updated dependencies [10b36551a
, 8afbab763
, 7a25925c3
, 50ad1ce6b
, 972e04514
, 0df3734d5
, 123042b04
, 4e5634b86
, 006afd108
, 40a44d20d
, 972e04514
, 543154bc0
, 3be09ea54
, eab130f30
]:
#5817 10b36551a
Thanks @bladey! - Fixed the GraphQL playground accessed at /api/graphql
from being accessible in production by default.
Fixed the GraphQL playground incorrectly interpreting config options.
#5949 8afbab763
Thanks @tjbp! - Fixed readonly property set in format-error
of createApolloServer
.
#5932 7a25925c3
Thanks @timleslie! - Initial release of @keystone-next/utils
package.
#5910 50ad1ce6b
Thanks @mitchellhamilton! - Fixed generated list types to allow passing a value directly when a GraphQL list of the value is expected
#5987 972e04514
Thanks @gwyneplaine! - Added assorted quality of life and screen reader improvements to Filter pills and dialogs in the admin-ui
#5920 123042b04
Thanks @mitchellhamilton! - Fixed Admin UI generation to allow files returned from getAdditionalFiles
to overwrite the files generated by Keystone
#5848 4e5634b86
Thanks @renovate! - Updated TypeScript to 4.3.2
#5914 006afd108
Thanks @renovate! - Updated Prisma dependencies to 2.25.0
.
#5922 3be09ea54
Thanks @gwyneplaine! - Fixed reset-to-default button, broken due to next patch update.
#5921 eab130f30
Thanks @gwyneplaine! - Added more helpful aria-label and aria-description to filter, sort and column popover.
Updated dependencies [de0a5c19e
, 7a25925c3
, 50ad1ce6b
, 0df3734d5
, 972e04514
, 4e5634b86
, 0afacf621
, 40a44d20d
, eab130f30
, 972e04514
, 543154bc0
, 972e04514
]:
#5910 50ad1ce6b
Thanks @mitchellhamilton! - Fixed generated list types to allow passing a value directly when a GraphQL list of the value is expected
#5907 0df3734d5
Thanks @mitchellhamilton! - Fixed lists
and db.lists
APIs on KeystoneContext
to have improved types. If you're using the generated KeystoneListsTypeInfo
type like this:
const lists: KeystoneListsAPI<KeystoneListsTypeInfo> = context.lists;
You will have to change it to use as
like this:
const lists = context.lists as KeystoneListsAPI<KeystoneListsTypeInfo>;
#5992 543154bc0
Thanks @timleslie! - Pinned dependency decimal.js
to 10.2.1
to be consistent with Prisma.
Updated dependencies [de0a5c19e
, 7a25925c3
, 543154bc0
, 972e04514
]:
f87ea05fc
Thanks @timleslie! - Initial version of the document field example project.10b36551a
, 8afbab763
, de0a5c19e
, 7a25925c3
, 50ad1ce6b
, 972e04514
, 123042b04
, 4e5634b86
, 006afd108
, 543154bc0
, 3be09ea54
, eab130f30
, 972e04514
]:
084c4e3c1
Thanks @mitchellhamilton! - Updated virtual fields to match those in the guide.10b36551a
, 8afbab763
, de0a5c19e
, 7a25925c3
, 50ad1ce6b
, 972e04514
, 0df3734d5
, 123042b04
, 4e5634b86
, 006afd108
, 543154bc0
, 3be09ea54
, eab130f30
, 972e04514
]:
972e04514
, 4e5634b86
, 0afacf621
, 40a44d20d
, eab130f30
, 972e04514
]:
#5926 3b9cdc2c0
Thanks @timleslie! - Updated tests to use the @keystone-next/testing
package.
Updated dependencies [10b36551a
, 8afbab763
, de0a5c19e
, 7a25925c3
, 50ad1ce6b
, 972e04514
, 0df3734d5
, 123042b04
, 4e5634b86
, 006afd108
, 543154bc0
, 3be09ea54
, eab130f30
, 972e04514
]:
#5817 10b36551a
Thanks @bladey! - Added example that demonstrates how you can customise the GraphQL Playground accessed at /api/graphql
.
Updated dependencies [10b36551a
, 8afbab763
, de0a5c19e
, 7a25925c3
, 50ad1ce6b
, 972e04514
, 123042b04
, 4e5634b86
, 006afd108
, 543154bc0
, 3be09ea54
, eab130f30
, 972e04514
]:
10b36551a
, 8afbab763
, de0a5c19e
, 7a25925c3
, 50ad1ce6b
, 972e04514
, 0df3734d5
, 123042b04
, 4e5634b86
, 006afd108
, 543154bc0
, 3b9cdc2c0
, 3be09ea54
, eab130f30
, 972e04514
]:
#5932 7a25925c3
Thanks @timleslie! - Initial release of @keystone-next/utils
package.
#5926 3b9cdc2c0
Thanks @timleslie! - Updated tests to use the @keystone-next/testing
package.
Updated dependencies [7a25925c3
, 50ad1ce6b
, 0df3734d5
, 543154bc0
, 3b9cdc2c0
]:
#5926 3b9cdc2c0
Thanks @timleslie! - Updated tests to use the @keystone-next/testing
package.
Updated dependencies [10b36551a
, 8afbab763
, de0a5c19e
, 7a25925c3
, 50ad1ce6b
, 972e04514
, 123042b04
, 4e5634b86
, 006afd108
, 543154bc0
, 3b9cdc2c0
, 3be09ea54
, eab130f30
, 972e04514
]:
Published by bladey over 3 years ago
Keystone Next now has a new core 🤖, unblocking many of the features you’ve been waiting for!
After months of work deep in the codebase, it’ll be much easier for us to ship roadmap features like custom field types, GraphQL Schema extensions, and more.
⚠️ This release does come with some minor behavioural changes to Keystone’s APIs, read on below.
"@keystone-next/admin-ui-utils": "5.0.2",
"@keystone-next/auth": "27.0.0",
"@keystone-next/cloudinary": "6.0.0",
"@keystone-next/fields-document": "7.0.0",
"@keystone-next/fields": "11.0.0",
"@keystone-next/keystone": "20.0.0",
"@keystone-next/test-utils-legacy": "21.0.0",
"@keystone-next/types": "20.0.0",
"@keystone-next/utils-legacy": "12.0.0",
"@keystone-ui/core": "3.1.0",
"@keystone-ui/fields": "4.1.1",
"@keystone-ui/segmented-control": "4.0.1",
The core of Keystone has been re-implemented to make building fields and new features in Keystone easier. While the observable changes for most users should be minimal, there could be breakage 🤖.
⚠️ If you implemented a custom field type, you will need to change it to the new API, see fields in the @keystone-next/fields
package for inspiration on how to do this.
The password
field type now adds a GraphQL type PasswordState
to the GraphQL output type instead of adding ${fieldKey}_is_set
, exposing a isSet
boolean.
type User {
password: PasswordState
}
type PasswordState {
isSet: Boolean!
}
List level create
, update
and delete
access control is now called for each operation in a many operation rather than on all of the operations as a whole.
This means that rather than receiving originalInput
as an array with itemIds
, your access control functions will always be called with just an itemId
and/or originalInput
(depending on which access control function it is).
⚠️ If your access control functions already worked with creating/updating/deleting one item, they will continue working (though you may get TypeScript errors if you were previously handling itemIds
and originalInput
as an array, to fix that, you should stop handling that case).
In addition, filters returned from access control now go through GraphQL validation and coercion like filters that you pass in through the GraphQL API, this will produce better errors when you return invalid values.
The API to configure virtual
fields has changed to accept a field
using the schema
API exported from @keystone-next/types
rather than GraphQL SDL.
The ordering of relationships fields in the generated Prisma schema has changed so that it aligns with the order specified in the list config with the opposites to one-sided relationships added at the end.
The name of one-to-one and one-to-many relationships has also changed to include _
between the list key and field key to align with many-to-many relationships.
⚠️ Note that these changes do not require a migration, only your schema.prisma
file will need to be updated with keystone-next dev
or keystone-next postinstall --fix
.
A long awaited feature, you can now find an item by a unique field! Filtering now works for text
and integer
fields that have isUnique: true
set, for example:
query {
Post(where: { slug: "something-something-something" }) {
id
title
content
}
}
A number of updates have been made in this release to improve accessibility in the Admin UI — updates to the DatePicker
labels, relationship fields and more, including visual updates to the segment control (when no value is selected).
We've updated our Prisma dependencies to 2.24.1
, check out the Prisma releases page for more information.
Star this repo 🌟 ☝️ or connect to Keystone on Twitter and in Slack.
#5665 a3b07ea16
Thanks @mitchellhamilton! - The core of Keystone has been re-implemented to make implementing fields and new features in Keystone easier. While the observable changes for most users should be minimal, there could be breakage. If you implemented a custom field type, you will need to change it to the new API, see fields in the @keystone-next/fields
package for inspiration on how to do this.
#5665 a3b07ea16
Thanks @mitchellhamilton! - The way that the implementations of generateHash
and compare
are passed from the password field to auth has changed to be in the extensions object of the GraphQL output field. Unless you've written your own password field implementation or you're using mismatching versions of @keystone-next/auth and @keystone-next/fields, this won't affect you.
a3b07ea16
, 7eabb4dee
, df7d7b6f6
, 5227234a0
, a3b07ea16
, e4c19f808
, 4995c682d
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, 881c9ffb7
, ef14e77ce
, df7d7b6f6
, a3b07ea16
, 84a5e7f3b
, a3b07ea16
, a3b07ea16
, a3b07ea16
, 8958704ec
, a3b07ea16
, 97fd5e05d
, a3b07ea16
]:
a3b07ea16
Thanks @mitchellhamilton! - The core of Keystone has been re-implemented to make implementing fields and new features in Keystone easier. While the observable changes for most users should be minimal, there could be breakage. If you implemented a custom field type, you will need to change it to the new API, see fields in the @keystone-next/fields
package for inspiration on how to do this.7eabb4dee
, df7d7b6f6
, e4c19f808
, 4995c682d
, a3b07ea16
, a3b07ea16
, a3b07ea16
, 881c9ffb7
, ef14e77ce
, df7d7b6f6
, a3b07ea16
, 84a5e7f3b
, a3b07ea16
, a3b07ea16
, a3b07ea16
, 8958704ec
, a3b07ea16
, 97fd5e05d
]:
#5665 a3b07ea16
Thanks @mitchellhamilton! - The relationship field now returns a [Item!]
instead of a [Item!]!
, this is so that if an error occurs when resolving the related items, only the relationship field will be returned as null rather than the whole item being returned as null.
#5665 a3b07ea16
Thanks @mitchellhamilton! - The API to configure virtual
fields has changed to accept a field
using the schema
API exported from @keystone-next/types
rather than GraphQL SDL.
#5665 a3b07ea16
Thanks @mitchellhamilton! - The core of Keystone has been re-implemented to make implementing fields and new features in Keystone easier. While the observable changes for most users should be minimal, there could be breakage. If you implemented a custom field type, you will need to change it to the new API, see fields in the @keystone-next/fields
package for inspiration on how to do this.
#5665 a3b07ea16
Thanks @mitchellhamilton! - The password
field type now adds a GraphQL type PasswordState
to the GraphQL output type instead of adding ${fieldKey}_is_set
.
type User {
password: PasswordState
}
type PasswordState {
isSet: Boolean!
}
#5665 a3b07ea16
Thanks @mitchellhamilton! - The way that the implementations of generateHash
and compare
are passed from the password field to auth has changed to be in the extensions object of the GraphQL output field. Unless you've written your own password field implementation or you're using mismatching versions of @keystone-next/auth and @keystone-next/fields, this won't affect you.
#5891 97fd5e05d
Thanks @mitchellhamilton! - Added support for filtering uniquely by text
and integer
fields that have isUnique: true
like this:
query {
Post(where: { slug: "something-something-something" }) {
id
title
content
}
}
#5854 7eabb4dee
Thanks @rohan-deshpande! - Replaced the types FileMode
and ImageMode
with AssetMode
.
Added internal experimental Keystone Cloud integration capabilities for images.
#5868 84a5e7f3b
Thanks @rohan-deshpande! - Added experimental support for the integration with keystone cloud files
#5855 e4c19f808
Thanks @gwyneplaine! - Added assorted accessibility and layout fixes to the relationship field.
#5857 881c9ffb7
Thanks @bladey! - Fixed image not displaying when rendered in card format.
#5852 ef14e77ce
Thanks @gwyneplaine! - Fixed labels in image
and file
fields to be more screen reader friendly.
#5893 df7d7b6f6
Thanks @gwyneplaine! - Fixed labels in timestamp field for better screen reader experience.
Updated dependencies [a3b07ea16
, 7eabb4dee
, df7d7b6f6
, 5227234a0
, a3b07ea16
, 98482efa4
, 4995c682d
, a3b07ea16
, 4c90c0d3c
, a3b07ea16
, a3b07ea16
, a3b07ea16
, 84a5e7f3b
, a3b07ea16
, a3b07ea16
, 8958704ec
, 97fd5e05d
, a3b07ea16
]:
a3b07ea16
Thanks @mitchellhamilton! - The core of Keystone has been re-implemented to make implementing fields and new features in Keystone easier. While the observable changes for most users should be minimal, there could be breakage. If you implemented a custom field type, you will need to change it to the new API, see fields in the @keystone-next/fields
package for inspiration on how to do this.a3b07ea16
, 7eabb4dee
, df7d7b6f6
, 5227234a0
, a3b07ea16
, e4c19f808
, 4995c682d
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, 881c9ffb7
, ef14e77ce
, df7d7b6f6
, a3b07ea16
, 84a5e7f3b
, a3b07ea16
, a3b07ea16
, a3b07ea16
, 8958704ec
, a3b07ea16
, 97fd5e05d
, a3b07ea16
]:
#5665 a3b07ea16
Thanks @mitchellhamilton! - The ordering of types in the generated schema.graphql
has changed due to the re-implementation of the core of Keystone, you will need to run keystone-next dev
/keystone-next postinstall --fix
to update it.
#5665 a3b07ea16
Thanks @mitchellhamilton! - createSystem
no longer accepts a Prisma client directly and it returns getKeystone
which accepts the generated Prisma client and returns connect
, disconnect
and createContext
instead of returning a keystone
instance object.
#5665 a3b07ea16
Thanks @mitchellhamilton! - The core of Keystone has been re-implemented to make implementing fields and new features in Keystone easier. While the observable changes for most users should be minimal, there could be breakage. If you implemented a custom field type, you will need to change it to the new API, see fields in the @keystone-next/fields
package for inspiration on how to do this.
#5665 a3b07ea16
Thanks @mitchellhamilton! - The ordering of relationships fields in the generated Prisma schema has changed so that it aligns with the order specified in the list config with the opposites to one-sided relationships added at the end. The name of one-to-one and one-to-many relationships has also changed to include _
between the list key and field key to align with many-to-many relationships. Note that these changes do not require a migration, only your schema.prisma
file will need to be updated with keystone-next dev
/keystone-next postinstall --fix
.
#5665 a3b07ea16
Thanks @mitchellhamilton! - The id
field on the item returned from context.db.lists
functions/passed to hooks/field type resolvers is now whatever the actual id field returned from Prisma is rather than a stringified version of it.
#5665 a3b07ea16
Thanks @mitchellhamilton! - Replaced graphql.itemQueryName
with always using the list key as the singular name in GraphQL and renamed graphql.listQueryName
to graphql.plural
#5665 a3b07ea16
Thanks @mitchellhamilton! - The KeystoneContext
type no longer has the keystone
object or functions to run access control.
#5665 a3b07ea16
Thanks @mitchellhamilton! - List level create, update and delete access control is now called for each operation in a many operation rather than on all of the operations as a whole. This means that rather than recieving originalInput as an array with itemIds, your access control functions will always be called with just an itemId and/or originalInput(depending on which access control function it is). If your access control functions already worked with creating/updating/deleting one item, they will continue working (though you may get TypeScript errors if you were previously handling itemIds and originalInput as an array, to fix that, you should stop handling that case).
#5891 97fd5e05d
Thanks @mitchellhamilton! - Added support for filtering uniquely by text
and integer
fields that have isUnique: true
like this:
query {
Post(where: { slug: "something-something-something" }) {
id
title
content
}
}
#5665 a3b07ea16
Thanks @mitchellhamilton! - Filters returned from access control now go through GraphQL validation and coercion like filters that you pass in through the GraphQL API, this will produce better errors when you return invalid values.
#5854 7eabb4dee
Thanks @rohan-deshpande! - Replaced the types FileMode
and ImageMode
with AssetMode
.
Added internal experimental Keystone Cloud integration capabilities for images.
#5868 84a5e7f3b
Thanks @rohan-deshpande! - Added experimental support for the integration with keystone cloud files
#5870 5227234a0
Thanks @renovate! - Updated Prisma dependencies to 2.24.1
.
#5885 4995c682d
Thanks @mitchellhamilton! - Fixed BaseGeneratedListTypes
to have orderBy
be readonly like the generated types
Updated dependencies [7eabb4dee
, df7d7b6f6
, e4c19f808
, 4995c682d
, a3b07ea16
, a3b07ea16
, a3b07ea16
, 4c90c0d3c
, 881c9ffb7
, ef14e77ce
, df7d7b6f6
, a3b07ea16
, 84a5e7f3b
, a3b07ea16
, a3b07ea16
, a3b07ea16
, 8958704ec
, a3b07ea16
, 97fd5e05d
]:
#5854 7eabb4dee
Thanks @rohan-deshpande! - Replaced the types FileMode
and ImageMode
with AssetMode
.
Added internal experimental Keystone Cloud integration capabilities for images.
#5665 a3b07ea16
Thanks @mitchellhamilton! - The core of Keystone has been re-implemented to make implementing fields and new features in Keystone easier. While the observable changes for most users should be minimal, there could be breakage. If you implemented a custom field type, you will need to change it to the new API, see fields in the @keystone-next/fields
package for inspiration on how to do this.
#5665 a3b07ea16
Thanks @mitchellhamilton! - Replaced graphql.itemQueryName
with always using the list key as the singular name in GraphQL and renamed graphql.listQueryName
to graphql.plural
#5665 a3b07ea16
Thanks @mitchellhamilton! - The KeystoneContext
type no longer has the keystone
object or functions to run access control.
#5665 a3b07ea16
Thanks @mitchellhamilton! - List level create, update and delete access control is now called for each operation in a many operation rather than on all of the operations as a whole. This means that rather than recieving originalInput as an array with itemIds, your access control functions will always be called with just an itemId and/or originalInput(depending on which access control function it is). If your access control functions already worked with creating/updating/deleting one item, they will continue working (though you may get TypeScript errors if you were previously handling itemIds and originalInput as an array, to fix that, you should stop handling that case).
#5891 97fd5e05d
Thanks @mitchellhamilton! - Added support for filtering uniquely by text
and integer
fields that have isUnique: true
like this:
query {
Post(where: { slug: "something-something-something" }) {
id
title
content
}
}
84a5e7f3b
Thanks @rohan-deshpande! - Added experimental support for the integration with keystone cloud files#5885 4995c682d
Thanks @mitchellhamilton! - Fixed BaseGeneratedListTypes
to have orderBy
be readonly like the generated types
Updated dependencies [7eabb4dee
, e4c19f808
, a3b07ea16
, a3b07ea16
, a3b07ea16
, 881c9ffb7
, ef14e77ce
, df7d7b6f6
, 84a5e7f3b
, a3b07ea16
, a3b07ea16
, 97fd5e05d
]:
cf8825bf4
Thanks @timleslie! - Removed the ProviderName
type, which is identical to the DatabaseProvider
type in @keystone-next/types
.TestKeystoneConfig
and Setup
types.a3b07ea16
, 7eabb4dee
, 5227234a0
, a3b07ea16
, 4995c682d
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, 84a5e7f3b
, a3b07ea16
, a3b07ea16
, 97fd5e05d
, a3b07ea16
]:
#5874 4c90c0d3c
Thanks @mitchellhamilton! - Removed the following exports as they're no longer used by Keystone:
noop
identity
getType
escapeRegExp
mapKeys
mapKeyNames
resolveAllKeys
unique
intersection
pick
omitBy
objMerge
defaultObj
filterValues
arrayToObject
flatten
zipObj
mergeWhereClause
createLazyDeferred
versionGreaterOrEqualTo
upcase
humanize
#5854 7eabb4dee
Thanks @rohan-deshpande! - Replaced the types FileMode
and ImageMode
with AssetMode
.
Added internal experimental Keystone Cloud integration capabilities for images.
7eabb4dee
, 4995c682d
, a3b07ea16
, a3b07ea16
, 84a5e7f3b
, a3b07ea16
, a3b07ea16
, 97fd5e05d
]:
8958704ec
Thanks @gwyneplaine! - Added functionality to ensure that Stack elements that are 'ul' or 'ol' automaticaly wrap children in 'li' rather than 'div'.#5893 df7d7b6f6
Thanks @gwyneplaine! - Applied a11y fixes to DatePicker component.
Updated dependencies [8958704ec
]:
#5886 98482efa4
Thanks @gwyneplaine! - Fixed issue with control looking selected when in neutral state. Added focus ring for better keyboard navigation experience.
Updated dependencies [8958704ec
]:
7eabb4dee
, 4995c682d
, a3b07ea16
, a3b07ea16
, 84a5e7f3b
, a3b07ea16
, a3b07ea16
, 8958704ec
, 97fd5e05d
]:
7eabb4dee
Thanks @rohan-deshpande! - Initial version of the assets-cloud
example.84a5e7f3b
Thanks @rohan-deshpande! - Added experimental support for the integration with keystone cloud filesa3b07ea16
, 7eabb4dee
, 5227234a0
, a3b07ea16
, e4c19f808
, 4995c682d
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, 881c9ffb7
, ef14e77ce
, df7d7b6f6
, a3b07ea16
, 84a5e7f3b
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, 97fd5e05d
, a3b07ea16
]:
7eabb4dee
Thanks @rohan-deshpande! - Initial version of the assets-local
example.a3b07ea16
, 7eabb4dee
, 5227234a0
, a3b07ea16
, e4c19f808
, 4995c682d
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, 881c9ffb7
, ef14e77ce
, df7d7b6f6
, a3b07ea16
, 84a5e7f3b
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, 97fd5e05d
, a3b07ea16
]:
df7d7b6f6
, a3b07ea16
, 8958704ec
]:
a3b07ea16
, 7eabb4dee
, 5227234a0
, a3b07ea16
, e4c19f808
, 4995c682d
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, 881c9ffb7
, ef14e77ce
, df7d7b6f6
, a3b07ea16
, 84a5e7f3b
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, 97fd5e05d
, a3b07ea16
]:
a3b07ea16
, 7eabb4dee
, df7d7b6f6
, 5227234a0
, a3b07ea16
, e4c19f808
, 4995c682d
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, 881c9ffb7
, ef14e77ce
, df7d7b6f6
, a3b07ea16
, 84a5e7f3b
, a3b07ea16
, a3b07ea16
, a3b07ea16
, 8958704ec
, a3b07ea16
, 97fd5e05d
, a3b07ea16
]:
a3b07ea16
, 7eabb4dee
, 5227234a0
, a3b07ea16
, e4c19f808
, 4995c682d
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, 881c9ffb7
, ef14e77ce
, df7d7b6f6
, a3b07ea16
, 84a5e7f3b
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, 97fd5e05d
, a3b07ea16
]:
a3b07ea16
, 7eabb4dee
, 5227234a0
, a3b07ea16
, e4c19f808
, 4995c682d
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, 881c9ffb7
, ef14e77ce
, df7d7b6f6
, a3b07ea16
, 84a5e7f3b
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, 97fd5e05d
, a3b07ea16
]:
a3b07ea16
, 7eabb4dee
, 5227234a0
, a3b07ea16
, e4c19f808
, 4995c682d
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, 881c9ffb7
, ef14e77ce
, df7d7b6f6
, a3b07ea16
, 84a5e7f3b
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, 97fd5e05d
, a3b07ea16
]:
a3b07ea16
, 7eabb4dee
, 5227234a0
, a3b07ea16
, e4c19f808
, 4995c682d
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, 881c9ffb7
, ef14e77ce
, df7d7b6f6
, a3b07ea16
, 84a5e7f3b
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, 97fd5e05d
, a3b07ea16
]:
a3b07ea16
, 7eabb4dee
, 5227234a0
, a3b07ea16
, e4c19f808
, 4995c682d
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, 881c9ffb7
, ef14e77ce
, df7d7b6f6
, a3b07ea16
, 84a5e7f3b
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, 97fd5e05d
, a3b07ea16
]:
a3b07ea16
, 7eabb4dee
, 5227234a0
, a3b07ea16
, e4c19f808
, 4995c682d
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, 881c9ffb7
, ef14e77ce
, df7d7b6f6
, a3b07ea16
, 84a5e7f3b
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, 97fd5e05d
, a3b07ea16
]:
a3b07ea16
, 7eabb4dee
, 5227234a0
, a3b07ea16
, e4c19f808
, 4995c682d
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, 881c9ffb7
, ef14e77ce
, df7d7b6f6
, a3b07ea16
, 84a5e7f3b
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, 97fd5e05d
, a3b07ea16
]:
a3b07ea16
, 7eabb4dee
, 5227234a0
, a3b07ea16
, e4c19f808
, 4995c682d
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, 881c9ffb7
, ef14e77ce
, df7d7b6f6
, a3b07ea16
, 84a5e7f3b
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, 97fd5e05d
, a3b07ea16
]:
a3b07ea16
, 7eabb4dee
, 5227234a0
, a3b07ea16
, e4c19f808
, 4995c682d
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, 881c9ffb7
, ef14e77ce
, df7d7b6f6
, a3b07ea16
, 84a5e7f3b
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, 97fd5e05d
, a3b07ea16
]:
a3b07ea16
, 7eabb4dee
, 5227234a0
, a3b07ea16
, e4c19f808
, 4995c682d
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, 881c9ffb7
, ef14e77ce
, df7d7b6f6
, a3b07ea16
, 84a5e7f3b
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, 97fd5e05d
, a3b07ea16
]:
a3b07ea16
, 7eabb4dee
, 5227234a0
, a3b07ea16
, e4c19f808
, 4995c682d
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, 881c9ffb7
, ef14e77ce
, df7d7b6f6
, a3b07ea16
, 84a5e7f3b
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, 97fd5e05d
, a3b07ea16
]:
7eabb4dee
, 4995c682d
, a3b07ea16
, 4c90c0d3c
, a3b07ea16
, 84a5e7f3b
, a3b07ea16
, a3b07ea16
, cf8825bf4
, 97fd5e05d
]:
a3b07ea16
, 7eabb4dee
, 5227234a0
, a3b07ea16
, e4c19f808
, 4995c682d
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, 881c9ffb7
, ef14e77ce
, df7d7b6f6
, a3b07ea16
, 84a5e7f3b
, a3b07ea16
, a3b07ea16
, a3b07ea16
, a3b07ea16
, cf8825bf4
, 97fd5e05d
, a3b07ea16
]:
Published by bladey over 3 years ago
We have a new JSON field ✨, a bunch of new learning resources, and plenty of under the hood optimisations in this big release. 💪
Thanks to the new json
field, you can now represent JSON blobs in your backend. Check out the JSON example project to learn more.
Package: list({
fields: {
pkgjson: json({ isRequired: true }),
isPrivate: checkbox(),
ownedBy: relationship({ ref: 'Person.packages', many: false }),
},
}),
In addition to the JSON one above, we added new examples for:
We also published a tutorial that shows you how to embed Keystone and SQLite in a Next.js app. The end result is an app with a queryable GraphQL endpoint based on your Keystone schema that you can run live on Vercel – for free! 🚀
sortBy
deprecated with improvements to orderBy
🤹♂️We deprecated the sortBy
GraphQL filter and updated the orderBy
GraphQL filter with an improved API.
Previously a User
list's allUsers
query would have the argument:
orderBy: String
The new API gives it the argument:
orderBy: [UserOrderByInput!]! = []
where
input UserOrderByInput {
id: OrderDirection
name: OrderDirection
score: OrderDirection
}
enum OrderDirection {
asc
desc
}
Rather than writing allUsers(orderBy: "name_ASC")
you now write allUsers(orderBy: { name: asc })
. You can also order by multiple fields, e.g. allUsers(orderBy: [{ score: asc }, { name: asc }])
.
Note: each UserOrderByInput
must have exactly one key, or else an error will be returned.
withItemData
replaced with sessionData
🔧We removed withItemData
in favour of a sessionData
option to the createAuth()
function.
Previously, withItemData
would be used to wrap the config.session
argument:
import { config, createSchema, list } from '@keystone-next/keystone/schema';
import { statelessSessions, withAuthData } from '@keystone-next/keystone/session';
import { text, password, checkbox } from '@keystone-next/fields';
import { createAuth } from '@keystone-next/auth';
const { withAuth } = createAuth({
listKey: 'User',
identityField: 'email',
secretField: 'password',
});
const session = statelessSessions({ secret: '-- EXAMPLE COOKIE SECRET; CHANGE ME --' });
export default withAuth(
config({
lists: createSchema({
fields: {
email: text({ isUnique: true }),
password: password(),
isAdmin: checkbox(),
},
}),
session: withItemData(session, { User: 'id isAdmin' }),
}),
})
);
Now, the fields to populate are configured on sessionData
in createAuth
, and withItemData
is completely removed. 🧹
import { config, createSchema, list } from '@keystone-next/keystone/schema';
import { statelessSessions } from '@keystone-next/keystone/session';
import { text, password, checkbox } from '@keystone-next/fields';
import { createAuth } from '@keystone-next/auth';
const { withAuth } = createAuth({
listKey: 'User',
identityField: 'email',
secretField: 'password',
sessionData: 'id isAdmin',
});
const session = statelessSessions({ secret: '-- EXAMPLE COOKIE SECRET; CHANGE ME --' });
export default withAuth(
config({
lists: createSchema({
fields: {
email: text({ isUnique: true }),
password: password(),
isAdmin: checkbox(),
},
}),
session,
}),
})
);
createItems
, updateItems
, and deleteItems
mutations 🧘♀️We fixed the behaviour of createItems
, updateItems
, and deleteItems
mutations to be consistent and predictable.
Previously, these mutations could return items in an arbitrary order. They now return items in the same order they were provided to the mutation.
Previously, if there was an error (e.g. validation) on one or more of the items – the return value would be null
and a single top level error would be returned. The state of the database in this case was non-deterministic.
The new behaviour is to return values for all items created, with null
values for those that had errors. These errors are returned in the errors
array and have paths which correctly point to the null
values in the returned array. All the valid operations will be completed, leaving the database in a deterministic state.
Previously, if items were filtered out by declarative access control, then no error would be returned, and only those accessible items would be returned. Now the returned data will contain null
values for those items which couldn't accessed, and the errors
array will contain errors with paths which correctly point to the null
values in the returned array.
Previously, if static access control denied access to the mutation, then null
was returned, and a single error
was returned. Now, an array of null
s is returned, with a separate error for each object. This makes the behaviour of static and declarative access control consistent.
The GraphQL field _all<path>Meta { count }
generated for many
relationships has been deprecated in favour of a new field <path>Count
, which directly returns the count.
A posts
relationship field would have the following field added to the API:
postsCount(where: PostWhereInput! = {}): Int
2.24.0
⬆️We've updated our Prisma dependency from 2.22.1
to 2.24.0
! Check out the Prisma release notes for more details.
Thanks @jonowu for adding a sameSite
option to the session options for cookies. Can be one of true, false, 'strict', 'lax' or 'none' as per Mozilla docs. See the PR for more details!
Thanks @gabrielkuettel for fixing a typo Database Items API page!
Star this repo 🌟 ☝️ or connect to Keystone on Twitter and in Slack.
#5806 0eadba2ba
Thanks [@list({](https://github.com/list({), [@list({](https://github.com/list({)! - Removed withItemData
in favour of a sessionData
option to the createAuth()
function.
Previously, withItemData
would be used to wrap the config.session
argument:
import { config, createSchema, list } from '@keystone-next/keystone/schema';
import { statelessSessions, withAuthData } from '@keystone-next/keystone/session';
import { text, password, checkbox } from '@keystone-next/fields';
import { createAuth } from '@keystone-next/auth';
const { withAuth } = createAuth({
listKey: 'User',
identityField: 'email',
secretField: 'password',
});
const session = statelessSessions({ secret: '-- EXAMPLE COOKIE SECRET; CHANGE ME --' });
export default withAuth(
config({
lists: createSchema({
fields: {
email: text({ isUnique: true }),
password: password(),
isAdmin: checkbox(),
},
}),
session: withItemData(session, { User: 'id isAdmin' }),
}),
})
);
Now, the fields to populate are configured on sessionData
in createAuth
, and withItemData
is completely removed.
import { config, createSchema, list } from '@keystone-next/keystone/schema';
import { statelessSessions } from '@keystone-next/keystone/session';
import { text, password, checkbox } from '@keystone-next/fields';
import { createAuth } from '@keystone-next/auth';
const { withAuth } = createAuth({
listKey: 'User',
identityField: 'email',
secretField: 'password',
sessionData: 'id isAdmin',
});
const session = statelessSessions({ secret: '-- EXAMPLE COOKIE SECRET; CHANGE ME --' });
export default withAuth(
config({
lists: createSchema({
fields: {
email: text({ isUnique: true }),
password: password(),
isAdmin: checkbox(),
},
}),
session,
}),
})
);
#5787 bb4f4ac91
Thanks @timleslie! - Replaced req, session, createContext
args to config.ui.pageMiddleware
with a context
arg.
#5766 a2553ab82
Thanks @gwyneplaine! - Added visually hidden labels to signin / welcome fields for better screen reader experience.
#5827 a0ef39cb3
Thanks @timleslie! - Updated schema extension code to not depend on the BaseKeystone
object.
#5828 4b11c5ea8
Thanks @timleslie! - Removed the keystone
argument from the ExtendGraphqlSchema
type. This will only impact you if you were directly constructing this function. Users of the graphQLSchemaExtension
function will not be impacted.
Updated dependencies [0eadba2ba
, f52079f0b
, b9c828fb0
, 74bc77854
, a6a444acd
, 29075e580
, 59421c039
, 5cc35170f
, 319c19bd5
, c6cd0a6bd
, 195d4fb12
, 1fe4753f3
, 5b02e8625
, 76cdb791b
, 762f17823
, 0617c81ea
, 02af04c03
, 107eeb037
, 3a7acc2c5
, 9de71a9fb
, 08478b8a7
, 7bda87ea7
, 590bb1fe9
, 4b11c5ea8
, 38a177d61
, bb4f4ac91
, 19a756496
]:
#5797 a6a444acd
Thanks @timleslie! - The GraphQL field _all<path>Meta { count }
generated for many
relationships has been deprecated in favour of a new field <path>Count
, which directly returns the count.
A posts
relationship field would have the following field added to the API:
postsCount(where: PostWhereInput! = {}): Int
59421c039
Thanks @gwyneplaine! - Added json
field.#5815 b9c828fb0
Thanks @timleslie! - Fixed the type of originalInput
in the argument to defaultValue
.
#5799 0617c81ea
Thanks @gwyneplaine! - Fixed field label element, so that it actually refers to the text input.
#5800 590bb1fe9
Thanks @gwyneplaine! - Fixed text, decimal, float and integer field labels. Labels are now associated with inputs via the field.path attribute.
#5764 19a756496
Thanks @bladey! - Adjusted fields GqlAuxQueries function to return any type to prevent build errors.
Updated dependencies [0eadba2ba
, f52079f0b
, b9c828fb0
, 74bc77854
, 29075e580
, 5cc35170f
, 319c19bd5
, c6cd0a6bd
, 195d4fb12
, 1fe4753f3
, 5b02e8625
, 76cdb791b
, 762f17823
, 02af04c03
, 107eeb037
, 3a7acc2c5
, 9de71a9fb
, 08478b8a7
, 7bda87ea7
, 4b11c5ea8
, 38a177d61
, bb4f4ac91
]:
#5806 0eadba2ba
Thanks [@list({](https://github.com/list({), [@list({](https://github.com/list({)! - Removed withItemData
in favour of a sessionData
option to the createAuth()
function.
Previously, withItemData
would be used to wrap the config.session
argument:
import { config, createSchema, list } from '@keystone-next/keystone/schema';
import { statelessSessions, withAuthData } from '@keystone-next/keystone/session';
import { text, password, checkbox } from '@keystone-next/fields';
import { createAuth } from '@keystone-next/auth';
const { withAuth } = createAuth({
listKey: 'User',
identityField: 'email',
secretField: 'password',
});
const session = statelessSessions({ secret: '-- EXAMPLE COOKIE SECRET; CHANGE ME --' });
export default withAuth(
config({
lists: createSchema({
fields: {
email: text({ isUnique: true }),
password: password(),
isAdmin: checkbox(),
},
}),
session: withItemData(session, { User: 'id isAdmin' }),
}),
})
);
Now, the fields to populate are configured on sessionData
in createAuth
, and withItemData
is completely removed.
import { config, createSchema, list } from '@keystone-next/keystone/schema';
import { statelessSessions } from '@keystone-next/keystone/session';
import { text, password, checkbox } from '@keystone-next/fields';
import { createAuth } from '@keystone-next/auth';
const { withAuth } = createAuth({
listKey: 'User',
identityField: 'email',
secretField: 'password',
sessionData: 'id isAdmin',
});
const session = statelessSessions({ secret: '-- EXAMPLE COOKIE SECRET; CHANGE ME --' });
export default withAuth(
config({
lists: createSchema({
fields: {
email: text({ isUnique: true }),
password: password(),
isAdmin: checkbox(),
},
}),
session,
}),
})
);
#5772 f52079f0b
Thanks @timleslie! - Fixed the behaviour of createItems
, updateItems
, and deleteItems
mutations to be consistent and predictable.
Previously, these mutations could return items in an arbitrary order. They now return items in the same order they were provided to the mutation.
Previously, if there was an error, say a validation error, on one or more of the items then the return value would be null
and a single top level error would be returned. The state of the database in this case was non-deterministic.
The new behaviour is to return values for all items created, with null
values for those that had errors. These errors are returned in the errors
array and have paths which correctly point to the null
values in the returned array. All the valid operations will be completed, leaving the database in a deterministic state.
Previously, if items were filtered out by declarative access control, then no error would be returned, and only those accessible items would be returned. Now the returned data will contain null
values for those items which couldn't accessed, and the errors
array will contain errors with paths which correctly point to the null
values in the returned array.
Previously, if static access control denied access to the mutation, then null
was returned, and a single error
was returned. Now, an array of null
s is returned, with a separate error for each object. This makes the behaviour of static and declarative access control consistent.
#5777 74bc77854
Thanks @timleslie! - Updated the type of the skip
argument to allItems
from Int
to Int! = 0
.
#5792 319c19bd5
Thanks @timleslie! - Changed the type of the where
argument to allItems
to _allItemsMeta
from type ItemWhereInput
to ItemWhereInput! = {}
.
#5832 195d4fb12
Thanks @timleslie! - Updated the functions getCommittedArtifacts
, validateCommittedArtifacts
, generateCommittedArtifacts
, and generateNodeModulesArtifacts
exported from artifacts.ts
to accept a KeystoneConfig
argument rather than a BaseKeystone
object.
#5850 5b02e8625
Thanks @timleslie! - The AND
and OR
operators of ItemWhereInput
now accept non-null values, e.g. [ItemWhereInput!]
, rather than [ItemWhereInput]
.
#5767 02af04c03
Thanks @timleslie! - Deprecated the sortBy
GraphQL filter. Updated the orderBy
GraphQL filter with an improved API.
Previously a User
list's allUsers
query would have the argument:
orderBy: String
The new API gives it the argument:
orderBy: [UserOrderByInput!]! = []
where
input UserOrderByInput {
id: OrderDirection
name: OrderDirection
score: OrderDirection
}
enum OrderDirection {
asc
desc
}
Rather than writing allUsers(orderBy: "name_ASC")
you now write allUsers(orderBy: { name: asc })
. You can also now order by multiple fields, e.g. allUsers(orderBy: [{ score: asc }, { name: asc }])
. Each UserOrderByInput
must have exactly one key, or else an error will be returned.
#5791 9de71a9fb
Thanks @timleslie! - Changed the return type of allItems(...)
from [User]
to [User!]
, as this API can never have null
items in the return array.
#5802 7bda87ea7
Thanks @timleslie! - Changed config.session
to access a SessionStrategy
object, rather than a () => SessionStrategy
function. You will only need to change your configuration if you're using a customised session strategy.
#5828 4b11c5ea8
Thanks @timleslie! - Removed the keystone
argument from the ExtendGraphqlSchema
type. This will only impact you if you were directly constructing this function. Users of the graphQLSchemaExtension
function will not be impacted.
#5787 bb4f4ac91
Thanks @timleslie! - Replaced req, session, createContext
args to config.ui.pageMiddleware
with a context
arg.
#5774 107eeb037
Thanks @jonowu! - Added sameSite
option to session options for cookies
#5769 08478b8a7
Thanks @timleslie! - The GraphQL query _all<Items>Meta { count }
generated for each list has been deprecated in favour of a new query <items>Count
, which directy returns the count.
A User
list would have the following query added to the API:
usersCount(where: UserWhereInput! = {}): Int
#5780 29075e580
Thanks @mitchellhamilton! - Fixed schema type printer to make arguments that have default values be optional
#5825 c6cd0a6bd
Thanks @timleslie! - Updated the Admin UI to use the itemsCount
GraphQL API.
#5826 1fe4753f3
Thanks @timleslie! - Updated the list page of the Admin UI to use orderBy
rather than sortBy
to order items.
#5849 76cdb791b
Thanks @renovate! - Updated Prisma dependencies to 2.24.0
.
#5768 762f17823
Thanks @timleslie! - Updated context.db.lists
API to correctly apply GraphQL defaults to query arguments.
#5784 38a177d61
Thanks @renovate! - Updated Prisma dependency to 2.23.0
.
Updated dependencies [b9c828fb0
, a6a444acd
, 59421c039
, 5cc35170f
, 0617c81ea
, 02af04c03
, 3a7acc2c5
, 08478b8a7
, fe5b463ed
, 7bda87ea7
, 590bb1fe9
, 4b11c5ea8
, bb4f4ac91
, 19a756496
]:
#5815 b9c828fb0
Thanks @timleslie! - Fixed the type of originalInput
in the argument to defaultValue
.
#5802 7bda87ea7
Thanks @timleslie! - Changed config.session
to access a SessionStrategy
object, rather than a () => SessionStrategy
function. You will only need to change your configuration if you're using a customised session strategy.
#5828 4b11c5ea8
Thanks @timleslie! - Removed the keystone
argument from the ExtendGraphqlSchema
type. This will only impact you if you were directly constructing this function. Users of the graphQLSchemaExtension
function will not be impacted.
#5831 5cc35170f
Thanks @timleslie! - Updated the type of KeystoneContext.gqlNames
to be GqlNames
rather than just Record<string,string>
.
#5767 02af04c03
Thanks @timleslie! - Deprecated the sortBy
GraphQL filter. Updated the orderBy
GraphQL filter with an improved API.
Previously a User
list's allUsers
query would have the argument:
orderBy: String
The new API gives it the argument:
orderBy: [UserOrderByInput!]! = []
where
input UserOrderByInput {
id: OrderDirection
name: OrderDirection
score: OrderDirection
}
enum OrderDirection {
asc
desc
}
Rather than writing allUsers(orderBy: "name_ASC")
you now write allUsers(orderBy: { name: asc })
. You can also now order by multiple fields, e.g. allUsers(orderBy: [{ score: asc }, { name: asc }])
. Each UserOrderByInput
must have exactly one key, or else an error will be returned.
#5769 08478b8a7
Thanks @timleslie! - The GraphQL query _all<Items>Meta { count }
generated for each list has been deprecated in favour of a new query <items>Count
, which directy returns the count.
A User
list would have the following query added to the API:
usersCount(where: UserWhereInput! = {}): Int
#5787 bb4f4ac91
Thanks @timleslie! - Replaced req, session, createContext
args to config.ui.pageMiddleware
with a context
arg.
Updated dependencies [b9c828fb0
, a6a444acd
, 59421c039
, 0617c81ea
, 02af04c03
, 590bb1fe9
, 19a756496
]:
#5767 02af04c03
Thanks @timleslie! - Deprecated the sortBy
GraphQL filter. Updated the orderBy
GraphQL filter with an improved API.
Previously a User
list's allUsers
query would have the argument:
orderBy: String
The new API gives it the argument:
orderBy: [UserOrderByInput!]! = []
where
input UserOrderByInput {
id: OrderDirection
name: OrderDirection
score: OrderDirection
}
enum OrderDirection {
asc
desc
}
Rather than writing allUsers(orderBy: "name_ASC")
you now write allUsers(orderBy: { name: asc })
. You can also now order by multiple fields, e.g. allUsers(orderBy: [{ score: asc }, { name: asc }])
. Each UserOrderByInput
must have exactly one key, or else an error will be returned.
b9c828fb0
, a6a444acd
, 59421c039
, 5cc35170f
, 0617c81ea
, 02af04c03
, 08478b8a7
, 7bda87ea7
, 590bb1fe9
, 4b11c5ea8
, bb4f4ac91
, 19a756496
]:
195d4fb12
Thanks @timleslie! - Updated the functions getCommittedArtifacts
, validateCommittedArtifacts
, generateCommittedArtifacts
, and generateNodeModulesArtifacts
exported from artifacts.ts
to accept a KeystoneConfig
argument rather than a BaseKeystone
object.0eadba2ba
, f52079f0b
, 74bc77854
, 29075e580
, 319c19bd5
, c6cd0a6bd
, 195d4fb12
, 1fe4753f3
, 5b02e8625
, 76cdb791b
, 762f17823
, 02af04c03
, 107eeb037
, 9de71a9fb
, 08478b8a7
, 7bda87ea7
, 4b11c5ea8
, 38a177d61
, bb4f4ac91
]:
3a7acc2c5
Thanks @gwyneplaine! - Added as prop to FieldContainer component.fe5b463ed
]:
fe5b463ed
Thanks @gwyneplaine! - Fixed popover to not be focusable or read by screen reader when not visible.b9c828fb0
, 5cc35170f
, 02af04c03
, 08478b8a7
, 7bda87ea7
, 4b11c5ea8
, bb4f4ac91
]:
b9c828fb0
, a6a444acd
, 59421c039
, 5cc35170f
, 0617c81ea
, 02af04c03
, 3a7acc2c5
, 08478b8a7
, 7bda87ea7
, 590bb1fe9
, 4b11c5ea8
, bb4f4ac91
, 19a756496
]:
#5831 5cc35170f
Thanks @timleslie! - Removed reference to the deprecated context.keystone
.
Updated dependencies [0eadba2ba
, f52079f0b
, b9c828fb0
, 74bc77854
, a6a444acd
, 29075e580
, 59421c039
, 5cc35170f
, 319c19bd5
, c6cd0a6bd
, 195d4fb12
, 1fe4753f3
, 5b02e8625
, 76cdb791b
, 762f17823
, 0617c81ea
, 02af04c03
, 107eeb037
, 3a7acc2c5
, 9de71a9fb
, 08478b8a7
, fe5b463ed
, 7bda87ea7
, 590bb1fe9
, 4b11c5ea8
, 38a177d61
, bb4f4ac91
, 19a756496
]:
b9c828fb0
, 5cc35170f
, 02af04c03
, 08478b8a7
, 7bda87ea7
, 4b11c5ea8
, bb4f4ac91
]:
28ca49c3b
Thanks @timleslie! - Initial version of the default-values
example.#5850 5b02e8625
Thanks @timleslie! - The AND
and OR
operators of ItemWhereInput
now accept non-null values, e.g. [ItemWhereInput!]
, rather than [ItemWhereInput]
.
Updated dependencies [0eadba2ba
, f52079f0b
, b9c828fb0
, 74bc77854
, a6a444acd
, 29075e580
, 59421c039
, 319c19bd5
, c6cd0a6bd
, 195d4fb12
, 1fe4753f3
, 5b02e8625
, 76cdb791b
, 762f17823
, 0617c81ea
, 02af04c03
, 107eeb037
, 9de71a9fb
, 08478b8a7
, 7bda87ea7
, 590bb1fe9
, 4b11c5ea8
, 38a177d61
, bb4f4ac91
, 19a756496
]:
8598c8371
Thanks @timleslie! - Initial version of the extend-graphql-schema
example.#5850 5b02e8625
Thanks @timleslie! - The AND
and OR
operators of ItemWhereInput
now accept non-null values, e.g. [ItemWhereInput!]
, rather than [ItemWhereInput]
.
Updated dependencies [0eadba2ba
, f52079f0b
, b9c828fb0
, 74bc77854
, a6a444acd
, 29075e580
, 59421c039
, 319c19bd5
, c6cd0a6bd
, 195d4fb12
, 1fe4753f3
, 5b02e8625
, 76cdb791b
, 762f17823
, 0617c81ea
, 02af04c03
, 107eeb037
, 9de71a9fb
, 08478b8a7
, 7bda87ea7
, 590bb1fe9
, 4b11c5ea8
, 38a177d61
, bb4f4ac91
, 19a756496
]:
#5806 0eadba2ba
Thanks [@list({](https://github.com/list({), [@list({](https://github.com/list({)! - Removed withItemData
in favour of a sessionData
option to the createAuth()
function.
Previously, withItemData
would be used to wrap the config.session
argument:
import { config, createSchema, list } from '@keystone-next/keystone/schema';
import { statelessSessions, withAuthData } from '@keystone-next/keystone/session';
import { text, password, checkbox } from '@keystone-next/fields';
import { createAuth } from '@keystone-next/auth';
const { withAuth } = createAuth({
listKey: 'User',
identityField: 'email',
secretField: 'password',
});
const session = statelessSessions({ secret: '-- EXAMPLE COOKIE SECRET; CHANGE ME --' });
export default withAuth(
config({
lists: createSchema({
fields: {
email: text({ isUnique: true }),
password: password(),
isAdmin: checkbox(),
},
}),
session: withItemData(session, { User: 'id isAdmin' }),
}),
})
);
Now, the fields to populate are configured on sessionData
in createAuth
, and withItemData
is completely removed.
import { config, createSchema, list } from '@keystone-next/keystone/schema';
import { statelessSessions } from '@keystone-next/keystone/session';
import { text, password, checkbox } from '@keystone-next/fields';
import { createAuth } from '@keystone-next/auth';
const { withAuth } = createAuth({
listKey: 'User',
identityField: 'email',
secretField: 'password',
sessionData: 'id isAdmin',
});
const session = statelessSessions({ secret: '-- EXAMPLE COOKIE SECRET; CHANGE ME --' });
export default withAuth(
config({
lists: createSchema({
fields: {
email: text({ isUnique: true }),
password: password(),
isAdmin: checkbox(),
},
}),
session,
}),
})
);
#5771 51aca916b
Thanks @raveling! - New tutorial for Keystone Lite. First draft.
#5767 02af04c03
Thanks @timleslie! - Deprecated the sortBy
GraphQL filter. Updated the orderBy
GraphQL filter with an improved API.
Previously a User
list's allUsers
query would have the argument:
orderBy: String
The new API gives it the argument:
orderBy: [UserOrderByInput!]! = []
where
input UserOrderByInput {
id: OrderDirection
name: OrderDirection
score: OrderDirection
}
enum OrderDirection {
asc
desc
}
Rather than writing allUsers(orderBy: "name_ASC")
you now write allUsers(orderBy: { name: asc })
. You can also now order by multiple fields, e.g. allUsers(orderBy: [{ score: asc }, { name: asc }])
. Each UserOrderByInput
must have exactly one key, or else an error will be returned.
#5823 553bad1e7
Thanks @gabrielkuettel! - Fixed a typo in the db items api sample code.
#5791 9de71a9fb
Thanks @timleslie! - Changed the return type of allItems(...)
from [User]
to [User!]
, as this API can never have null
items in the return array.
#5769 08478b8a7
Thanks @timleslie! - The GraphQL query _all<Items>Meta { count }
generated for each list has been deprecated in favour of a new query <items>Count
, which directy returns the count.
A User
list would have the following query added to the API:
usersCount(where: UserWhereInput! = {}): Int
Updated dependencies [5cc35170f
, 3a7acc2c5
]:
#5806 0eadba2ba
Thanks [@list({](https://github.com/list({), [@list({](https://github.com/list({)! - Removed withItemData
in favour of a sessionData
option to the createAuth()
function.
Previously, withItemData
would be used to wrap the config.session
argument:
import { config, createSchema, list } from '@keystone-next/keystone/schema';
import { statelessSessions, withAuthData } from '@keystone-next/keystone/session';
import { text, password, checkbox } from '@keystone-next/fields';
import { createAuth } from '@keystone-next/auth';
const { withAuth } = createAuth({
listKey: 'User',
identityField: 'email',
secretField: 'password',
});
const session = statelessSessions({ secret: '-- EXAMPLE COOKIE SECRET; CHANGE ME --' });
export default withAuth(
config({
lists: createSchema({
fields: {
email: text({ isUnique: true }),
password: password(),
isAdmin: checkbox(),
},
}),
session: withItemData(session, { User: 'id isAdmin' }),
}),
})
);
Now, the fields to populate are configured on sessionData
in createAuth
, and withItemData
is completely removed.
import { config, createSchema, list } from '@keystone-next/keystone/schema';
import { statelessSessions } from '@keystone-next/keystone/session';
import { text, password, checkbox } from '@keystone-next/fields';
import { createAuth } from '@keystone-next/auth';
const { withAuth } = createAuth({
listKey: 'User',
identityField: 'email',
secretField: 'password',
sessionData: 'id isAdmin',
});
const session = statelessSessions({ secret: '-- EXAMPLE COOKIE SECRET; CHANGE ME --' });
export default withAuth(
config({
lists: createSchema({
fields: {
email: text({ isUnique: true }),
password: password(),
isAdmin: checkbox(),
},
}),
session,
}),
})
);
#5792 319c19bd5
Thanks @timleslie! - Changed the type of the where
argument to allItems
to _allItemsMeta
from type ItemWhereInput
to ItemWhereInput! = {}
.
#5850 5b02e8625
Thanks @timleslie! - The AND
and OR
operators of ItemWhereInput
now accept non-null values, e.g. [ItemWhereInput!]
, rather than [ItemWhereInput]
.
#5767 02af04c03
Thanks @timleslie! - Deprecated the sortBy
GraphQL filter. Updated the orderBy
GraphQL filter with an improved API.
Previously a User
list's allUsers
query would have the argument:
orderBy: String
The new API gives it the argument:
orderBy: [UserOrderByInput!]! = []
where
input UserOrderByInput {
id: OrderDirection
name: OrderDirection
score: OrderDirection
}
enum OrderDirection {
asc
desc
}
Rather than writing allUsers(orderBy: "name_ASC")
you now write allUsers(orderBy: { name: asc })
. You can also now order by multiple fields, e.g. allUsers(orderBy: [{ score: asc }, { name: asc }])
. Each UserOrderByInput
must have exactly one key, or else an error will be returned.
#5791 9de71a9fb
Thanks @timleslie! - Changed the return type of allItems(...)
from [User]
to [User!]
, as this API can never have null
items in the return array.
#5769 08478b8a7
Thanks @timleslie! - The GraphQL query _all<Items>Meta { count }
generated for each list has been deprecated in favour of a new query <items>Count
, which directy returns the count.
A User
list would have the following query added to the API:
usersCount(where: UserWhereInput! = {}): Int
Updated dependencies [0eadba2ba
, f52079f0b
, b9c828fb0
, 74bc77854
, a6a444acd
, 29075e580
, a2553ab82
, 59421c039
, 319c19bd5
, c6cd0a6bd
, 195d4fb12
, 1fe4753f3
, 5b02e8625
, 76cdb791b
, 762f17823
, 0617c81ea
, 02af04c03
, 107eeb037
, a0ef39cb3
, 9de71a9fb
, 08478b8a7
, 7bda87ea7
, 590bb1fe9
, 4b11c5ea8
, 38a177d61
, bb4f4ac91
, 19a756496
]:
#5806 0eadba2ba
Thanks [@list({](https://github.com/list({), [@list({](https://github.com/list({)! - Removed withItemData
in favour of a sessionData
option to the createAuth()
function.
Previously, withItemData
would be used to wrap the config.session
argument:
import { config, createSchema, list } from '@keystone-next/keystone/schema';
import { statelessSessions, withAuthData } from '@keystone-next/keystone/session';
import { text, password, checkbox } from '@keystone-next/fields';
import { createAuth } from '@keystone-next/auth';
const { withAuth } = createAuth({
listKey: 'User',
identityField: 'email',
secretField: 'password',
});
const session = statelessSessions({ secret: '-- EXAMPLE COOKIE SECRET; CHANGE ME --' });
export default withAuth(
config({
lists: createSchema({
fields: {
email: text({ isUnique: true }),
password: password(),
isAdmin: checkbox(),
},
}),
session: withItemData(session, { User: 'id isAdmin' }),
}),
})
);
Now, the fields to populate are configured on sessionData
in createAuth
, and withItemData
is completely removed.
import { config, createSchema, list } from '@keystone-next/keystone/schema';
import { statelessSessions } from '@keystone-next/keystone/session';
import { text, password, checkbox } from '@keystone-next/fields';
import { createAuth } from '@keystone-next/auth';
const { withAuth } = createAuth({
listKey: 'User',
identityField: 'email',
secretField: 'password',
sessionData: 'id isAdmin',
});
const session = statelessSessions({ secret: '-- EXAMPLE COOKIE SECRET; CHANGE ME --' });
export default withAuth(
config({
lists: createSchema({
fields: {
email: text({ isUnique: true }),
password: password(),
isAdmin: checkbox(),
},
}),
session,
}),
})
);
#5797 a6a444acd
Thanks @timleslie! - The GraphQL field _all<path>Meta { count }
generated for many
relationships has been deprecated in favour of a new field <path>Count
, which directly returns the count.
A posts
relationship field would have the following field added to the API:
postsCount(where: PostWhereInput! = {}): Int
#5792 319c19bd5
Thanks @timleslie! - Changed the type of the where
argument to allItems
to _allItemsMeta
from type ItemWhereInput
to ItemWhereInput! = {}
.
#5850 5b02e8625
Thanks @timleslie! - The AND
and OR
operators of ItemWhereInput
now accept non-null values, e.g. [ItemWhereInput!]
, rather than [ItemWhereInput]
.
#5767 02af04c03
Thanks @timleslie! - Deprecated the sortBy
GraphQL filter. Updated the orderBy
GraphQL filter with an improved API.
Previously a User
list's allUsers
query would have the argument:
orderBy: String
The new API gives it the argument:
orderBy: [UserOrderByInput!]! = []
where
input UserOrderByInput {
id: OrderDirection
name: OrderDirection
score: OrderDirection
}
enum OrderDirection {
asc
desc
}
Rather than writing allUsers(orderBy: "name_ASC")
you now write allUsers(orderBy: { name: asc })
. You can also now order by multiple fields, e.g. allUsers(orderBy: [{ score: asc }, { name: asc }])
. Each UserOrderByInput
must have exactly one key, or else an error will be returned.
#5791 9de71a9fb
Thanks @timleslie! - Changed the return type of allItems(...)
from [User]
to [User!]
, as this API can never have null
items in the return array.
#5769 08478b8a7
Thanks @timleslie! - The GraphQL query _all<Items>Meta { count }
generated for each list has been deprecated in favour of a new query <items>Count
, which directy returns the count.
A User
list would have the following query added to the API:
usersCount(where: UserWhereInput! = {}): Int
Updated dependencies [0eadba2ba
, f52079f0b
, b9c828fb0
, 74bc77854
, 5cc35170f
, a6a444acd
, 29075e580
, a2553ab82
, 59421c039
, 5cc35170f
, 319c19bd5
, c6cd0a6bd
, 195d4fb12
, 1fe4753f3
, 5b02e8625
, 76cdb791b
, 762f17823
, 0617c81ea
, 02af04c03
, 107eeb037
, 3a7acc2c5
, a0ef39cb3
, 9de71a9fb
, 08478b8a7
, 7bda87ea7
, 590bb1fe9
, 4b11c5ea8
, 38a177d61
, bb4f4ac91
, 19a756496
]:
#5806 0eadba2ba
Thanks [@list({](https://github.com/list({), [@list({](https://github.com/list({)! - Removed withItemData
in favour of a sessionData
option to the createAuth()
function.
Previously, withItemData
would be used to wrap the config.session
argument:
import { config, createSchema, list } from '@keystone-next/keystone/schema';
import { statelessSessions, withAuthData } from '@keystone-next/keystone/session';
import { text, password, checkbox } from '@keystone-next/fields';
import { createAuth } from '@keystone-next/auth';
const { withAuth } = createAuth({
listKey: 'User',
identityField: 'email',
secretField: 'password',
});
const session = statelessSessions({ secret: '-- EXAMPLE COOKIE SECRET; CHANGE ME --' });
export default withAuth(
config({
lists: createSchema({
fields: {
email: text({ isUnique: true }),
password: password(),
isAdmin: checkbox(),
},
}),
session: withItemData(session, { User: 'id isAdmin' }),
}),
})
);
Now, the fields to populate are configured on sessionData
in createAuth
, and withItemData
is completely removed.
import { config, createSchema, list } from '@keystone-next/keystone/schema';
import { statelessSessions } from '@keystone-next/keystone/session';
import { text, password, checkbox } from '@keystone-next/fields';
import { createAuth } from '@keystone-next/auth';
const { withAuth } = createAuth({
listKey: 'User',
identityField: 'email',
secretField: 'password',
sessionData: 'id isAdmin',
});
const session = statelessSessions({ secret: '-- EXAMPLE COOKIE SECRET; CHANGE ME --' });
export default withAuth(
config({
lists: createSchema({
fields: {
email: text({ isUnique: true }),
password: password(),
isAdmin: checkbox(),
},
}),
session,
}),
})
);
#5797 a6a444acd
Thanks @timleslie! - The GraphQL field _all<path>Meta { count }
generated for many
relationships has been deprecated in favour of a new field <path>Count
, which directly returns the count.
A posts
relationship field would have the following field added to the API:
postsCount(where: PostWhereInput! = {}): Int
#5792 319c19bd5
Thanks @timleslie! - Changed the type of the where
argument to allItems
to _allItemsMeta
from type ItemWhereInput
to ItemWhereInput! = {}
.
#5850 5b02e8625
Thanks @timleslie! - The AND
and OR
operators of ItemWhereInput
now accept non-null values, e.g. [ItemWhereInput!]
, rather than [ItemWhereInput]
.
#5829 f36a70a55
Thanks @timleslie! - Updated insertSeedData
to directly access context.prisma
.
#5767 02af04c03
Thanks @timleslie! - Deprecated the sortBy
GraphQL filter. Updated the orderBy
GraphQL filter with an improved API.
Previously a User
list's allUsers
query would have the argument:
orderBy: String
The new API gives it the argument:
orderBy: [UserOrderByInput!]! = []
where
input UserOrderByInput {
id: OrderDirection
name: OrderDirection
score: OrderDirection
}
enum OrderDirection {
asc
desc
}
Rather than writing allUsers(orderBy: "name_ASC")
you now write allUsers(orderBy: { name: asc })
. You can also now order by multiple fields, e.g. allUsers(orderBy: [{ score: asc }, { name: asc }])
. Each UserOrderByInput
must have exactly one key, or else an error will be returned.
#5791 9de71a9fb
Thanks @timleslie! - Changed the return type of allItems(...)
from [User]
to [User!]
, as this API can never have null
items in the return array.
#5769 08478b8a7
Thanks @timleslie! - The GraphQL query _all<Items>Meta { count }
generated for each list has been deprecated in favour of a new query <items>Count
, which directy returns the count.
A User
list would have the following query added to the API:
usersCount(where: UserWhereInput! = {}): Int
Updated dependencies [0eadba2ba
, f52079f0b
, b9c828fb0
, 74bc77854
, a6a444acd
, 29075e580
, a2553ab82
, 59421c039
, 5cc35170f
, 319c19bd5
, c6cd0a6bd
, 195d4fb12
, 1fe4753f3
, 5b02e8625
, 76cdb791b
, 762f17823
, 0617c81ea
, 02af04c03
, 107eeb037
, a0ef39cb3
, 9de71a9fb
, 08478b8a7
, 7bda87ea7
, 590bb1fe9
, 4b11c5ea8
, 38a177d61
, bb4f4ac91
, 19a756496
]:
#5792 319c19bd5
Thanks @timleslie! - Changed the type of the where
argument to allItems
to _allItemsMeta
from type ItemWhereInput
to ItemWhereInput! = {}
.
#5850 5b02e8625
Thanks @timleslie! - The AND
and OR
operators of ItemWhereInput
now accept non-null values, e.g. [ItemWhereInput!]
, rather than [ItemWhereInput]
.
#5767 02af04c03
Thanks @timleslie! - Deprecated the sortBy
GraphQL filter. Updated the orderBy
GraphQL filter with an improved API.
Previously a User
list's allUsers
query would have the argument:
orderBy: String
The new API gives it the argument:
orderBy: [UserOrderByInput!]! = []
where
input UserOrderByInput {
id: OrderDirection
name: OrderDirection
score: OrderDirection
}
enum OrderDirection {
asc
desc
}
Rather than writing allUsers(orderBy: "name_ASC")
you now write allUsers(orderBy: { name: asc })
. You can also now order by multiple fields, e.g. allUsers(orderBy: [{ score: asc }, { name: asc }])
. Each UserOrderByInput
must have exactly one key, or else an error will be returned.
#5791 9de71a9fb
Thanks @timleslie! - Changed the return type of allItems(...)
from [User]
to [User!]
, as this API can never have null
items in the return array.
#5769 08478b8a7
Thanks @timleslie! - The GraphQL query _all<Items>Meta { count }
generated for each list has been deprecated in favour of a new query <items>Count
, which directy returns the count.
A User
list would have the following query added to the API:
usersCount(where: UserWhereInput! = {}): Int
Updated dependencies [0eadba2ba
, f52079f0b
, b9c828fb0
, 74bc77854
, a6a444acd
, 29075e580
, 59421c039
, 319c19bd5
, c6cd0a6bd
, 195d4fb12
, 1fe4753f3
, 5b02e8625
, 76cdb791b
, 762f17823
, 0617c81ea
, 02af04c03
, 107eeb037
, 9de71a9fb
, 08478b8a7
, 7bda87ea7
, 590bb1fe9
, 4b11c5ea8
, 38a177d61
, bb4f4ac91
, 19a756496
]:
#5806 0eadba2ba
Thanks [@list({](https://github.com/list({), [@list({](https://github.com/list({)! - Removed withItemData
in favour of a sessionData
option to the createAuth()
function.
Previously, withItemData
would be used to wrap the config.session
argument:
import { config, createSchema, list } from '@keystone-next/keystone/schema';
import { statelessSessions, withAuthData } from '@keystone-next/keystone/session';
import { text, password, checkbox } from '@keystone-next/fields';
import { createAuth } from '@keystone-next/auth';
const { withAuth } = createAuth({
listKey: 'User',
identityField: 'email',
secretField: 'password',
});
const session = statelessSessions({ secret: '-- EXAMPLE COOKIE SECRET; CHANGE ME --' });
export default withAuth(
config({
lists: createSchema({
fields: {
email: text({ isUnique: true }),
password: password(),
isAdmin: checkbox(),
},
}),
session: withItemData(session, { User: 'id isAdmin' }),
}),
})
);
Now, the fields to populate are configured on sessionData
in createAuth
, and withItemData
is completely removed.
import { config, createSchema, list } from '@keystone-next/keystone/schema';
import { statelessSessions } from '@keystone-next/keystone/session';
import { text, password, checkbox } from '@keystone-next/fields';
import { createAuth } from '@keystone-next/auth';
const { withAuth } = createAuth({
listKey: 'User',
identityField: 'email',
secretField: 'password',
sessionData: 'id isAdmin',
});
const session = statelessSessions({ secret: '-- EXAMPLE COOKIE SECRET; CHANGE ME --' });
export default withAuth(
config({
lists: createSchema({
fields: {
email: text({ isUnique: true }),
password: password(),
isAdmin: checkbox(),
},
}),
session,
}),
})
);
#5797 a6a444acd
Thanks @timleslie! - The GraphQL field _all<path>Meta { count }
generated for many
relationships has been deprecated in favour of a new field <path>Count
, which directly returns the count.
A posts
relationship field would have the following field added to the API:
postsCount(where: PostWhereInput! = {}): Int
#5792 319c19bd5
Thanks @timleslie! - Changed the type of the where
argument to allItems
to _allItemsMeta
from type ItemWhereInput
to ItemWhereInput! = {}
.
#5850 5b02e8625
Thanks @timleslie! - The AND
and OR
operators of ItemWhereInput
now accept non-null values, e.g. [ItemWhereInput!]
, rather than [ItemWhereInput]
.
#5767 02af04c03
Thanks @timleslie! - Deprecated the sortBy
GraphQL filter. Updated the orderBy
GraphQL filter with an improved API.
Previously a User
list's allUsers
query would have the argument:
orderBy: String
The new API gives it the argument:
orderBy: [UserOrderByInput!]! = []
where
input UserOrderByInput {
id: OrderDirection
name: OrderDirection
score: OrderDirection
}
enum OrderDirection {
asc
desc
}
Rather than writing allUsers(orderBy: "name_ASC")
you now write allUsers(orderBy: { name: asc })
. You can also now order by multiple fields, e.g. allUsers(orderBy: [{ score: asc }, { name: asc }])
. Each UserOrderByInput
must have exactly one key, or else an error will be returned.
#5791 9de71a9fb
Thanks @timleslie! - Changed the return type of allItems(...)
from [User]
to [User!]
, as this API can never have null
items in the return array.
#5769 08478b8a7
Thanks @timleslie! - The GraphQL query _all<Items>Meta { count }
generated for each list has been deprecated in favour of a new query <items>Count
, which directy returns the count.
A User
list would have the following query added to the API:
usersCount(where: UserWhereInput! = {}): Int
Updated dependencies [0eadba2ba
, f52079f0b
, b9c828fb0
, 74bc77854
, 5cc35170f
, a6a444acd
, 29075e580
, a2553ab82
, 59421c039
, 319c19bd5
, c6cd0a6bd
, 195d4fb12
, 1fe4753f3
, 5b02e8625
, 76cdb791b
, 762f17823
, 0617c81ea
, 02af04c03
, 107eeb037
, a0ef39cb3
, 9de71a9fb
, 08478b8a7
, 7bda87ea7
, 590bb1fe9
, 4b11c5ea8
, 38a177d61
, bb4f4ac91
, 19a756496
]:
#5806 0eadba2ba
Thanks [@list({](https://github.com/list({), [@list({](https://github.com/list({)! - Removed withItemData
in favour of a sessionData
option to the createAuth()
function.
Previously, withItemData
would be used to wrap the config.session
argument:
import { config, createSchema, list } from '@keystone-next/keystone/schema';
import { statelessSessions, withAuthData } from '@keystone-next/keystone/session';
import { text, password, checkbox } from '@keystone-next/fields';
import { createAuth } from '@keystone-next/auth';
const { withAuth } = createAuth({
listKey: 'User',
identityField: 'email',
secretField: 'password',
});
const session = statelessSessions({ secret: '-- EXAMPLE COOKIE SECRET; CHANGE ME --' });
export default withAuth(
config({
lists: createSchema({
fields: {
email: text({ isUnique: true }),
password: password(),
isAdmin: checkbox(),
},
}),
session: withItemData(session, { User: 'id isAdmin' }),
}),
})
);
Now, the fields to populate are configured on sessionData
in createAuth
, and withItemData
is completely removed.
import { config, createSchema, list } from '@keystone-next/keystone/schema';
import { statelessSessions } from '@keystone-next/keystone/session';
import { text, password, checkbox } from '@keystone-next/fields';
import { createAuth } from '@keystone-next/auth';
const { withAuth } = createAuth({
listKey: 'User',
identityField: 'email',
secretField: 'password',
sessionData: 'id isAdmin',
});
const session = statelessSessions({ secret: '-- EXAMPLE COOKIE SECRET; CHANGE ME --' });
export default withAuth(
config({
lists: createSchema({
fields: {
email: text({ isUnique: true }),
password: password(),
isAdmin: checkbox(),
},
}),
session,
}),
})
);
#5797 a6a444acd
Thanks @timleslie! - The GraphQL field _all<path>Meta { count }
generated for many
relationships has been deprecated in favour of a new field <path>Count
, which directly returns the count.
A posts
relationship field would have the following field added to the API:
postsCount(where: PostWhereInput! = {}): Int
#5792 319c19bd5
Thanks @timleslie! - Changed the type of the where
argument to allItems
to _allItemsMeta
from type ItemWhereInput
to ItemWhereInput! = {}
.
#5850 5b02e8625
Thanks @timleslie! - The AND
and OR
operators of ItemWhereInput
now accept non-null values, e.g. [ItemWhereInput!]
, rather than [ItemWhereInput]
.
#5767 02af04c03
Thanks @timleslie! - Deprecated the sortBy
GraphQL filter. Updated the orderBy
GraphQL filter with an improved API.
Previously a User
list's allUsers
query would have the argument:
orderBy: String
The new API gives it the argument:
orderBy: [UserOrderByInput!]! = []
where
input UserOrderByInput {
id: OrderDirection
name: OrderDirection
score: OrderDirection
}
enum OrderDirection {
asc
desc
}
Rather than writing allUsers(orderBy: "name_ASC")
you now write allUsers(orderBy: { name: asc })
. You can also now order by multiple fields, e.g. allUsers(orderBy: [{ score: asc }, { name: asc }])
. Each UserOrderByInput
must have exactly one key, or else an error will be returned.
#5791 9de71a9fb
Thanks @timleslie! - Changed the return type of allItems(...)
from [User]
to [User!]
, as this API can never have null
items in the return array.
#5769 08478b8a7
Thanks @timleslie! - The GraphQL query _all<Items>Meta { count }
generated for each list has been deprecated in favour of a new query <items>Count
, which directy returns the count.
A User
list would have the following query added to the API:
usersCount(where: UserWhereInput! = {}): Int
Updated dependencies [0eadba2ba
, f52079f0b
, b9c828fb0
, 74bc77854
, a6a444acd
, 29075e580
, a2553ab82
, 59421c039
, 5cc35170f
, 319c19bd5
, c6cd0a6bd
, 195d4fb12
, 1fe4753f3
, 5b02e8625
, 76cdb791b
, 762f17823
, 0617c81ea
, 02af04c03
, 107eeb037
, a0ef39cb3
, 9de71a9fb
, 08478b8a7
, 7bda87ea7
, 590bb1fe9
, 4b11c5ea8
, 38a177d61
, bb4f4ac91
, 19a756496
]:
#5797 a6a444acd
Thanks @timleslie! - The GraphQL field _all<path>Meta { count }
generated for many
relationships has been deprecated in favour of a new field <path>Count
, which directly returns the count.
A posts
relationship field would have the following field added to the API:
postsCount(where: PostWhereInput! = {}): Int
#5792 319c19bd5
Thanks @timleslie! - Changed the type of the where
argument to allItems
to _allItemsMeta
from type ItemWhereInput
to ItemWhereInput! = {}
.
#5850 5b02e8625
Thanks @timleslie! - The AND
and OR
operators of ItemWhereInput
now accept non-null values, e.g. [ItemWhereInput!]
, rather than [ItemWhereInput]
.
#5767 02af04c03
Thanks @timleslie! - Deprecated the sortBy
GraphQL filter. Updated the orderBy
GraphQL filter with an improved API.
Previously a User
list's allUsers
query would have the argument:
orderBy: String
The new API gives it the argument:
orderBy: [UserOrderByInput!]! = []
where
input UserOrderByInput {
id: OrderDirection
name: OrderDirection
score: OrderDirection
}
enum OrderDirection {
asc
desc
}
Rather than writing allUsers(orderBy: "name_ASC")
you now write allUsers(orderBy: { name: asc })
. You can also now order by multiple fields, e.g. allUsers(orderBy: [{ score: asc }, { name: asc }])
. Each UserOrderByInput
must have exactly one key, or else an error will be returned.
#5791 9de71a9fb
Thanks @timleslie! - Changed the return type of allItems(...)
from [User]
to [User!]
, as this API can never have null
items in the return array.
#5769 08478b8a7
Thanks @timleslie! - The GraphQL query _all<Items>Meta { count }
generated for each list has been deprecated in favour of a new query <items>Count
, which directy returns the count.
A User
list would have the following query added to the API:
usersCount(where: UserWhereInput! = {}): Int
Updated dependencies [0eadba2ba
, f52079f0b
, b9c828fb0
, 74bc77854
, a6a444acd
, 29075e580
, a2553ab82
, 59421c039
, 319c19bd5
, c6cd0a6bd
, 195d4fb12
, 1fe4753f3
, 5b02e8625
, 76cdb791b
, 762f17823
, 0617c81ea
, 02af04c03
, 107eeb037
, a0ef39cb3
, 9de71a9fb
, 08478b8a7
, 7bda87ea7
, 590bb1fe9
, 4b11c5ea8
, 38a177d61
, bb4f4ac91
, 19a756496
]:
#5797 a6a444acd
Thanks @timleslie! - The GraphQL field _all<path>Meta { count }
generated for many
relationships has been deprecated in favour of a new field <path>Count
, which directly returns the count.
A posts
relationship field would have the following field added to the API:
postsCount(where: PostWhereInput! = {}): Int
#5792 319c19bd5
Thanks @timleslie! - Changed the type of the where
argument to allItems
to _allItemsMeta
from type ItemWhereInput
to ItemWhereInput! = {}
.
#5850 5b02e8625
Thanks @timleslie! - The AND
and OR
operators of ItemWhereInput
now accept non-null values, e.g. [ItemWhereInput!]
, rather than [ItemWhereInput]
.
#5767 02af04c03
Thanks @timleslie! - Deprecated the sortBy
GraphQL filter. Updated the orderBy
GraphQL filter with an improved API.
Previously a User
list's allUsers
query would have the argument:
orderBy: String
The new API gives it the argument:
orderBy: [UserOrderByInput!]! = []
where
input UserOrderByInput {
id: OrderDirection
name: OrderDirection
score: OrderDirection
}
enum OrderDirection {
asc
desc
}
Rather than writing allUsers(orderBy: "name_ASC")
you now write allUsers(orderBy: { name: asc })
. You can also now order by multiple fields, e.g. allUsers(orderBy: [{ score: asc }, { name: asc }])
. Each UserOrderByInput
must have exactly one key, or else an error will be returned.
#5791 9de71a9fb
Thanks @timleslie! - Changed the return type of allItems(...)
from [User]
to [User!]
, as this API can never have null
items in the return array.
#5769 08478b8a7
Thanks @timleslie! - The GraphQL query _all<Items>Meta { count }
generated for each list has been deprecated in favour of a new query <items>Count
, which directy returns the count.
A User
list would have the following query added to the API:
usersCount(where: UserWhereInput! = {}): Int
Updated dependencies [0eadba2ba
, f52079f0b
, b9c828fb0
, 74bc77854
, a6a444acd
, 29075e580
, 59421c039
, 319c19bd5
, c6cd0a6bd
, 195d4fb12
, 1fe4753f3
, 5b02e8625
, 76cdb791b
, 762f17823
, 0617c81ea
, 02af04c03
, 107eeb037
, 9de71a9fb
, 08478b8a7
, 7bda87ea7
, 590bb1fe9
, 4b11c5ea8
, 38a177d61
, bb4f4ac91
, 19a756496
]:
#5797 a6a444acd
Thanks @timleslie! - The GraphQL field _all<path>Meta { count }
generated for many
relationships has been deprecated in favour of a new field <path>Count
, which directly returns the count.
A posts
relationship field would have the following field added to the API:
postsCount(where: PostWhereInput! = {}): Int
#5850 5b02e8625
Thanks @timleslie! - The AND
and OR
operators of ItemWhereInput
now accept non-null values, e.g. [ItemWhereInput!]
, rather than [ItemWhereInput]
.
Updated dependencies [0eadba2ba
, f52079f0b
, b9c828fb0
, 74bc77854
, a6a444acd
, 29075e580
, 59421c039
, 319c19bd5
, c6cd0a6bd
, 195d4fb12
, 1fe4753f3
, 5b02e8625
, 76cdb791b
, 762f17823
, 0617c81ea
, 02af04c03
, 107eeb037
, 9de71a9fb
, 08478b8a7
, 7bda87ea7
, 590bb1fe9
, 4b11c5ea8
, 38a177d61
, [bb4f4ac91
](https://github.com/keystonejs/keystone/commit/bb4f4a...
Published by bladey over 3 years ago
Node.JS engines in our packages have been updated to 12.x
and 14.x
to keep up to date with the latest versions of our dependencies.
@keystone-next/admin-ui
now lives inside @keystone-next/keystone/admin-ui
.
If you were directly importing from @keystone-next/admin-ui
you can now import the same items from @keystone-next/keystone/admin-ui
.
⚠️ Please remove references to @keystone-next/admin-ui
in your package.json
files.
Star this repo 🌟 ☝️ or connect to Keystone on Twitter and in Slack.
19750d2dc
Thanks @timleslie! - Update Node.js dependency to ^12.20 || >= 14.13
.19750d2dc
]:
19750d2dc
Thanks @timleslie! - Update Node.js dependency to ^12.20 || >= 14.13
.19750d2dc
Thanks @timleslie! - Update Node.js dependency to ^12.20 || >= 14.13
.19750d2dc
]:
19750d2dc
Thanks @timleslie! - Update Node.js dependency to ^12.20 || >= 14.13
.19750d2dc
]:
19750d2dc
Thanks @timleslie! - Update Node.js dependency to ^12.20 || >= 14.13
.19750d2dc
]:
19750d2dc
Thanks @timleslie! - Update Node.js dependency to ^12.20 || >= 14.13
.19750d2dc
]:
19750d2dc
Thanks @timleslie! - Update Node.js dependency to ^12.20 || >= 14.13
.19750d2dc
]:
19750d2dc
Thanks @timleslie! - Update Node.js dependency to ^12.20 || >= 14.13
.19750d2dc
]:
19750d2dc
Thanks @timleslie! - Update Node.js dependency to ^12.20 || >= 14.13
.19750d2dc
]:
19750d2dc
Thanks @timleslie! - Update Node.js dependency to ^12.20 || >= 14.13
.19750d2dc
]:
19750d2dc
Thanks @timleslie! - Update Node.js dependency to ^12.20 || >= 14.13
.19750d2dc
]:
19750d2dc
Thanks @timleslie! - Update Node.js dependency to ^12.20 || >= 14.13
.19750d2dc
]:
19750d2dc
Thanks @timleslie! - Update Node.js dependency to ^12.20 || >= 14.13
.19750d2dc
]:
#5677 e2232a553
Thanks @timleslie! - Consolidated the @keystone-next/admin-ui
package into @keystone-next/keystone
.
If you were directly importing from @keystone-next/admin-ui
you can now import the same items from @keystone-next/keystone/admin-ui
.
If you have @keystone-next/admin-ui
in your package.json
you should remove it.
19750d2dc
Thanks @timleslie! - Update Node.js dependency to ^12.20 || >= 14.13
.19750d2dc
]:
#5746 19750d2dc
Thanks @timleslie! - Update Node.js dependency to ^12.20 || >= 14.13
.
#5677 e2232a553
Thanks @timleslie! - Consolidated the @keystone-next/admin-ui
package into @keystone-next/keystone
.
If you were directly importing from @keystone-next/admin-ui
you can now import the same items from @keystone-next/keystone/admin-ui
.
If you have @keystone-next/admin-ui
in your package.json
you should remove it.
#5734 194bbeea2
Thanks @raveling! - The signup copy to create first user now uses active voice.
Updated dependencies [19750d2dc
, 016ccad82
, 8da79e71a
, e2232a553
]:
#5746 19750d2dc
Thanks @timleslie! - Update Node.js dependency to ^12.20 || >= 14.13
.
#5677 e2232a553
Thanks @timleslie! - Consolidated the @keystone-next/admin-ui
package into @keystone-next/keystone
.
If you were directly importing from @keystone-next/admin-ui
you can now import the same items from @keystone-next/keystone/admin-ui
.
If you have @keystone-next/admin-ui
in your package.json
you should remove it.
d40c2a590
, 19750d2dc
, e2232a553
]:
19750d2dc
Thanks @timleslie! - Update Node.js dependency to ^12.20 || >= 14.13
.#5746 19750d2dc
Thanks @timleslie! - Update Node.js dependency to ^12.20 || >= 14.13
.
#5677 e2232a553
Thanks @timleslie! - Consolidated the @keystone-next/admin-ui
package into @keystone-next/keystone
.
If you were directly importing from @keystone-next/admin-ui
you can now import the same items from @keystone-next/keystone/admin-ui
.
If you have @keystone-next/admin-ui
in your package.json
you should remove it.
d40c2a590
, 19750d2dc
, 016ccad82
, 8da79e71a
, e2232a553
]:
#5746 19750d2dc
Thanks @timleslie! - Update Node.js dependency to ^12.20 || >= 14.13
.
#5677 e2232a553
Thanks @timleslie! - Consolidated the @keystone-next/admin-ui
package into @keystone-next/keystone
.
If you were directly importing from @keystone-next/admin-ui
you can now import the same items from @keystone-next/keystone/admin-ui
.
If you have @keystone-next/admin-ui
in your package.json
you should remove it.
d40c2a590
, 19750d2dc
, 016ccad82
, 8da79e71a
, e2232a553
]:
#5746 19750d2dc
Thanks @timleslie! - Update Node.js dependency to ^12.20 || >= 14.13
.
#5677 e2232a553
Thanks @timleslie! - Consolidated the @keystone-next/admin-ui
package into @keystone-next/keystone
.
If you were directly importing from @keystone-next/admin-ui
you can now import the same items from @keystone-next/keystone/admin-ui
.
If you have @keystone-next/admin-ui
in your package.json
you should remove it.
8da79e71a
Thanks @timleslie! - Added a SKIP_PROMPTS
environment variable to explicitly disable prompts in the CLI.#5759 016ccad82
Thanks @timleslie! - Suppresed migration console output when running tests.
Updated dependencies [d40c2a590
, 19750d2dc
, e2232a553
]:
19750d2dc
Thanks @timleslie! - Update Node.js dependency to ^12.20 || >= 14.13
.19750d2dc
Thanks @timleslie! - Update Node.js dependency to ^12.20 || >= 14.13
.d40c2a590
, 19750d2dc
, e2232a553
]:
19750d2dc
Thanks @timleslie! - Update Node.js dependency to ^12.20 || >= 14.13
.19750d2dc
]:
19750d2dc
Thanks @timleslie! - Update Node.js dependency to ^12.20 || >= 14.13
.#5757 d40c2a590
Thanks @timleslie! - Fixed failures in GraphQL queries using multiple sortBy
values.
Updated dependencies [19750d2dc
, e2232a553
]:
19750d2dc
Thanks @timleslie! - Update Node.js dependency to ^12.20 || >= 14.13
.d40c2a590
, 19750d2dc
, 016ccad82
, 8da79e71a
, e2232a553
]:
19750d2dc
Thanks @timleslie! - Update Node.js dependency to ^12.20 || >= 14.13
.19750d2dc
]:
19750d2dc
Thanks @timleslie! - Update Node.js dependency to ^12.20 || >= 14.13
.19750d2dc
]:
19750d2dc
Thanks @timleslie! - Update Node.js dependency to ^12.20 || >= 14.13
.19750d2dc
, e2232a553
]:
19750d2dc
Thanks @timleslie! - Update Node.js dependency to ^12.20 || >= 14.13
.194bbeea2
, 19750d2dc
, 016ccad82
, 8da79e71a
, e2232a553
]:
19750d2dc
Thanks @timleslie! - Update Node.js dependency to ^12.20 || >= 14.13
.194bbeea2
, 19750d2dc
, 016ccad82
, 8da79e71a
, e2232a553
]:
19750d2dc
Thanks @timleslie! - Update Node.js dependency to ^12.20 || >= 14.13
.19750d2dc
, 016ccad82
, 8da79e71a
, e2232a553
]:
19750d2dc
Thanks @timleslie! - Update Node.js dependency to ^12.20 || >= 14.13
.194bbeea2
, 19750d2dc
, 016ccad82
, 8da79e71a
, e2232a553
]:
19750d2dc
Thanks @timleslie! - Update Node.js dependency to ^12.20 || >= 14.13
.194bbeea2
, 19750d2dc
, 016ccad82
, 8da79e71a
, e2232a553
]:
19750d2dc
Thanks @timleslie! - Update Node.js dependency to ^12.20 || >= 14.13
.19750d2dc
, 016ccad82
, 8da79e71a
, e2232a553
]:
19750d2dc
Thanks @timleslie! - Update Node.js dependency to ^12.20 || >= 14.13
.194bbeea2
, 19750d2dc
, 016ccad82
, 8da79e71a
, e2232a553
]:
19750d2dc
Thanks @timleslie! - Update Node.js dependency to ^12.20 || >= 14.13
.194bbeea2
, 19750d2dc
, 016ccad82
, 8da79e71a
, e2232a553
]:
19750d2dc
Thanks @timleslie! - Update Node.js dependency to ^12.20 || >= 14.13
.19750d2dc
, 016ccad82
, 8da79e71a
, e2232a553
]:
19750d2dc
Thanks @timleslie! - Update Node.js dependency to ^12.20 || >= 14.13
.194bbeea2
, 19750d2dc
, 016ccad82
, 8da79e71a
, e2232a553
]:
19750d2dc
Thanks @timleslie! - Update Node.js dependency to ^12.20 || >= 14.13
.19750d2dc
]:
19750d2dc
Thanks @timleslie! - Update Node.js dependency to ^12.20 || >= 14.13
.19750d2dc
, 016ccad82
, 8da79e71a
, e2232a553
]:
19750d2dc
Thanks @timleslie! - Update Node.js dependency to ^12.20 || >= 14.13
.Published by bladey over 3 years ago
Apollo cache hinting can now be configured on a per list or field basis — which can dramatically improve your applications performance 🔥.
Implementing basic authentication? We've got another example using withAuth
from the auth
package to get you started 🔒.
Focus control is now handled better in the Keystone UI, see the PR for the before and after 👀!
Thanks to @cameronbraid for spotting a session issue and resolving it 🐛.
Star this repo 🌟 ☝️ or connect to Keystone on Twitter and in Slack.
b1baeaba1
Thanks @timleslie! - The Setup
type, returned by setupFromConfig
and passed into test functions in multiAdapterRunners
now has connect
and disconnect
functions, rather than a keystone
object.737b3e6e5
, 62e68c8e5
, deb7f9504
, 1ef9986dd
]:
669f0d8ac
Thanks @gwyneplaine! - Added focustrap to the PopoverDialog component, when the PopoverDialog is open, browser focus is now trapped within it till the dialog is closed.1ef9986dd
Thanks @timleslie! - Added graphql.cacheHint
configuration for lists and fields.#5727 737b3e6e5
Thanks @cameronbraid! - Fixed a bug in storedSessions
not correctly identifying the current sessionId
.
#5686 62e68c8e5
Thanks @timleslie! - Reduced the explicit dependence on the internal Keystone object when creating context objects.
#5673 deb7f9504
Thanks @timleslie! - Refactored code to parse config.db
. No functional changes.
Updated dependencies [62e68c8e5
, deb7f9504
, 1ef9986dd
, 669f0d8ac
]:
1ef9986dd
Thanks @timleslie! - Added graphql.cacheHint
configuration for lists and fields.#5686 62e68c8e5
Thanks @timleslie! - Reduced the explicit dependence on the internal Keystone object when creating context objects.
#5673 deb7f9504
Thanks @timleslie! - Refactored code to parse config.db
. No functional changes.
#5670 669f0d8ac
Thanks @gwyneplaine! - Patch update to @keystone-ui/popover.
Updated dependencies [669f0d8ac
, 737b3e6e5
, 62e68c8e5
, deb7f9504
, 1ef9986dd
]:
737b3e6e5
, 62e68c8e5
, deb7f9504
, 1ef9986dd
, 669f0d8ac
]:
5606e5965
Thanks @timleslie! - Initial version of the withAuth
example.737b3e6e5
, 62e68c8e5
, deb7f9504
, 1ef9986dd
]:
737b3e6e5
, 62e68c8e5
, deb7f9504
, 1ef9986dd
, 669f0d8ac
]:
737b3e6e5
, 62e68c8e5
, deb7f9504
, 1ef9986dd
, 669f0d8ac
]:
737b3e6e5
, 62e68c8e5
, deb7f9504
, 1ef9986dd
, 669f0d8ac
]:
737b3e6e5
, 62e68c8e5
, deb7f9504
, 1ef9986dd
]:
737b3e6e5
, 62e68c8e5
, deb7f9504
, 1ef9986dd
, 669f0d8ac
]:
737b3e6e5
, 62e68c8e5
, deb7f9504
, 1ef9986dd
, 669f0d8ac
]:
b1baeaba1
, 62e68c8e5
, deb7f9504
, 1ef9986dd
]:
b1baeaba1
, 737b3e6e5
, 62e68c8e5
, deb7f9504
, 1ef9986dd
]:
Published by bladey over 3 years ago
A bunch of admin UI tweaks in this release 🖥️, among other minor fixes. We also have the initial stages of a new blog example and a sweet new admin UI logo.
Star this repo 🌟 ☝️ or connect to Keystone on Twitter and in Slack.
79a0844b9
Thanks @mitchellhamilton! - Added ui.displayMode: 'count'
to many
relationship fields#5629 11814ce98
Thanks @gwyneplaine! - Updated docs link to next.keystonejs.com.
#5639 400d88257
Thanks @timleslie! - Fixed Admin UI issues when using select
fields with dataType: 'integer'
.
#5622 bb8920843
Thanks @timleslie! - Disabled sorting for relationship fields.
Updated dependencies [3aea3b12f
, 11814ce98
, b0a72a112
, 2b3efc8a8
, fc9c3d55d
, dbe831976
, 53225b0ef
, 79d092afc
]:
dbe831976
Thanks @malitov! - Added hover state to the OptionPrimitive
in Admin UI and updated css colors#5642 dbe831976
Thanks @malitov! - Added hover state to the OptionPrimitive
in Admin UI and updated css colors
Updated dependencies [dbe831976
]:
#5666 3aea3b12f
Thanks @gwyneplaine! - Prettified the logo in the admin-ui.
#5629 11814ce98
Thanks @gwyneplaine! - Updated docs link to point to next.keystonejs.com.
#5623 b0a72a112
Thanks @timleslie! - Improved the default value for ui.initialColumns
to show the first three fields, rather than just the label field.
#5633 2b3efc8a8
Thanks @gwyneplaine! - Added minor fixes to filters dialog.
#5655 fc9c3d55d
Thanks @JedWatson! - Fixed navigation margin when session isn't configured
#5642 dbe831976
Thanks @malitov! - Added hover state to the OptionPrimitive
in Admin UI and updated css colors
#5631 53225b0ef
Thanks @gwyneplaine! - Fixed cache querying logic and added explicit query clearing flow to admin-ui.
#5638 79d092afc
Thanks @timleslie! - Added a title
value to the create new item button on the dashboard.
Updated dependencies [85dfdfb1e
, dbe831976
]:
#5614 483932276
Thanks @timleslie! - Updated withAuth
to respect config.ui.isDisabled
. Now works as expected when config.ui
is undefined.
#5624 868d89f29
Thanks @timleslie! - Disabled the Forgot your password
button on the signin page, which is not yet functional.
Updated dependencies [3aea3b12f
, 11814ce98
, b0a72a112
, 79a0844b9
, 11814ce98
, 2b3efc8a8
, 85dfdfb1e
, fc9c3d55d
, 400d88257
, dbe831976
, 53225b0ef
, 79d092afc
, bb8920843
]:
#5618 7e24b9c2a
Thanks @gwyneplaine! - Added logic to ensure the block-menu in the toolbar is hidden when no component blocks or relationships are provided.
Updated dependencies [3aea3b12f
, 11814ce98
, b0a72a112
, 79a0844b9
, 11814ce98
, 2b3efc8a8
, fc9c3d55d
, 400d88257
, dbe831976
, 53225b0ef
, 79d092afc
, bb8920843
]:
#5613 85dfdfb1e
Thanks @timleslie! - Improved the types of withItemData
.
Updated dependencies [3aea3b12f
, 11814ce98
, b0a72a112
, 79a0844b9
, 11814ce98
, 2b3efc8a8
, fc9c3d55d
, 400d88257
, dbe831976
, 53225b0ef
, 79d092afc
, bb8920843
]:
85dfdfb1e
]:
e69bcc254
Thanks @gwyneplaine! - Initial version of the blog example.79a0844b9
, 11814ce98
, 85dfdfb1e
, 400d88257
, bb8920843
]:
#5622 bb8920843
Thanks @timleslie! - Disabled sorting for relationship fields.
Updated dependencies [3aea3b12f
, 11814ce98
, b0a72a112
, 79a0844b9
, 11814ce98
, 7e24b9c2a
, 2b3efc8a8
, 85dfdfb1e
, fc9c3d55d
, 400d88257
, 483932276
, dbe831976
, 53225b0ef
, 868d89f29
, 79d092afc
, bb8920843
]:
#5622 bb8920843
Thanks @timleslie! - Disabled sorting for relationship fields.
Updated dependencies [79a0844b9
, 11814ce98
, 85dfdfb1e
, 400d88257
, bb8920843
]:
Published by bladey over 3 years ago
Aside from dependency updates 😴, we added an isIndexed
config option to the text
, integer
, float
, select
, and timestamp
field types.
If you look closely you’ll see the core team working on example projects to share Keystone some best-practices. Keep an eye out for those in the not too distant future 🔮.
Star this repo 🌟 ☝️ or connect to Keystone on Twitter and in Slack.
3d3894679
Thanks @timleslie! - Added an isIndexed
config option to the text
, integer
, float
, select
, and timestamp
field types.3d3894679
, 8b77b6971
]:
#5601 8b77b6971
Thanks @renovate! - Updated Next.js dependency to ^10.2.0
.
#5592 1043243ff
Thanks @gwyneplaine! - Fixed uncaught exception in file stream.
Updated dependencies [3d3894679
, 8b77b6971
]:
3d3894679
Thanks @timleslie! - Added an isIndexed
config option to the text
, integer
, float
, select
, and timestamp
field types.3d3894679
]:
#5601 8b77b6971
Thanks @renovate! - Updated Next.js dependency to ^10.2.0
.
Updated dependencies [1c0265171
, 8b77b6971
, 1043243ff
]:
1c0265171
, 3d3894679
, 8b77b6971
, 1043243ff
]:
1c0265171
, 3d3894679
, 8b77b6971
, 1043243ff
]:
44c1f9494
Thanks @timleslie! - Simplified the Todo application to just the basics to allow other examples to build on it.#5594 a3d56570e
Thanks @timleslie! - Updated example projects to only use the sqlite provider.
#5601 8b77b6971
Thanks @renovate! - Updated Next.js dependency to ^10.2.0
.
Updated dependencies [1c0265171
, 3d3894679
, 8b77b6971
, 1043243ff
]:
#5594 a3d56570e
Thanks @timleslie! - Updated example projects to only use the sqlite provider.
#5601 8b77b6971
Thanks @renovate! - Updated Next.js dependency to ^10.2.0
.
Updated dependencies [1c0265171
, 3d3894679
, 8b77b6971
, 1043243ff
]:
#5594 a3d56570e
Thanks @timleslie! - Updated example projects to only use the sqlite provider.
#5601 8b77b6971
Thanks @renovate! - Updated Next.js dependency to ^10.2.0
.
Updated dependencies [1c0265171
, 3d3894679
, 8b77b6971
, 1043243ff
]:
#5601 8b77b6971
Thanks @renovate! - Updated Next.js dependency to ^10.2.0
.
Updated dependencies [1c0265171
, 3d3894679
, 8b77b6971
, 1043243ff
]:
1c0265171
, 3d3894679
, 8b77b6971
, 1043243ff
]:
#5601 8b77b6971
Thanks @renovate! - Updated Next.js dependency to ^10.2.0
.
Updated dependencies [1c0265171
, 3d3894679
, 8b77b6971
, 1043243ff
]:
#5594 a3d56570e
Thanks @timleslie! - Updated example projects to only use the sqlite provider.
#5601 8b77b6971
Thanks @renovate! - Updated Next.js dependency to ^10.2.0
.
Updated dependencies [1c0265171
, 3d3894679
, 8b77b6971
, 1043243ff
]:
1c0265171
, 3d3894679
, 8b77b6971
, 1043243ff
]:
Published by bladey over 3 years ago
This release involved a bunch of busywork behind the scenes in Keystone Next 🔧. Stripping away all the things we don't need now that we're using Prisma exclusively. The end of the cleanup is in sight, and we're getting closer to the point where we can start working on some great new features.
Files in Keystone Next 📁. Now you can use Admin UI to upload local files to your repo using SQLite. We also added a maxFileSize
property for easier project config.
Star this repo 🌟 ☝️ or connect to Keystone on Twitter and in Slack.
#5578 f7d4c9b9f
Thanks @mitchellhamilton! - Replaced mode
field on ImageFieldOutput
GraphQL type with making ImageFieldOutput
an interface and having a LocalImageFieldOutput
type that implements ImageFieldOutput
.
#5582 49dd46843
Thanks @gwyneplaine! - Changed image ref to now be ${mode}:image:${id}
.
b7aeb232d
Thanks @gwyneplaine! - Added file field type.#5514 8577eb3ba
Thanks @timleslie! - The field hooks API has deprecated the addFieldValidationError
argument. It has been replaced with the argument addValidationError
, and will be removed in a future release.
#5587 3e33cd3ff
Thanks @timleslie! - Simplified image input resolver.
Updated dependencies [b7aeb232d
, 7e81b52b0
, fddeacf79
, fdebf79cc
, dbc62ff7c
, 05d4883ee
, a0c5aa307
, 9fd7cc62a
, b7aeb232d
, 49dd46843
, 74fed41e2
]:
49dd46843
Thanks @gwyneplaine! - Changed image ref to now be ${mode}:image:${id}
.2df2fa021
Thanks @gwyneplaine! - Added maxFileSize
property to keystone config.#5547 18ae28bde
Thanks @timleslie! - Consolidate the code from the @keystone-next/server-side-graphql-client-legacy
package into the main package.
#5518 fddeacf79
Thanks @timleslie! - Updated the list item and db item APIs to include an empty default for .findMany()
and .count()
.
#5522 fbf5f77c5
Thanks @timleslie! - Moved the call to createImagesContext
into makeCreateContext()
.
#5514 8577eb3ba
Thanks @timleslie! - The field hooks API has deprecated the addFieldValidationError
argument. It has been replaced with the argument addValidationError
, and will be removed in a future release.
#5523 91e603d7a
Thanks @timleslie! - Moved internal code into subdirectories for easier navigation.
#5517 a6cdf3da8
Thanks @timleslie! - Fixed a bug using the items API to create/update image
field items.
#5552 a0c5aa307
Thanks @timleslie! - Update context.lists.<list>.count()
to use the GraphQL API rather than directly calling the resolver.
#5524 ddf51724a
Thanks @timleslie! - Removed un-implemented export singleton
from schema/
.
#5569 d216fd04c
Thanks @mitchellhamilton! - Refactored implementation of db lists API
#5515 f76938ac2
Thanks @timleslie! - Simplified the implementation of the images context API.
Updated dependencies [b7aeb232d
, b7aeb232d
, f7d4c9b9f
, 7e81b52b0
, fddeacf79
, fdebf79cc
, dbc62ff7c
, 8577eb3ba
, 05d4883ee
, a0c5aa307
, 9fd7cc62a
, 3e33cd3ff
, b7aeb232d
, 49dd46843
, 49dd46843
, 74fed41e2
]:
49dd46843
Thanks @gwyneplaine! - Updated parseImageRef and getRef to accept a different signature for the image ref.b7aeb232d
Thanks @gwyneplaine! - Added getFileRef
and parseFileRef
to exported utilities.7e81b52b0
, fddeacf79
, fdebf79cc
, 9fd7cc62a
]:
b7aeb232d
Thanks @gwyneplaine! - Added symlink logic for file storage.#5586 dbc62ff7c
Thanks @gautamsi! - Fixed a bug where custom Field views were not able to be used in the Admin UI (object does not have setter error)
#5530 74fed41e2
Thanks @timleslie! - Updated code to use the new DB items API.
Updated dependencies [18ae28bde
, 7e81b52b0
, fddeacf79
, fbf5f77c5
, fdebf79cc
, 8577eb3ba
, 91e603d7a
, a6cdf3da8
, a0c5aa307
, ddf51724a
, 9fd7cc62a
, d216fd04c
, 2df2fa021
, 49dd46843
, f76938ac2
]:
#5530 74fed41e2
Thanks @timleslie! - Updated code to use the new DB items API.
Updated dependencies [b7aeb232d
, b7aeb232d
, 18ae28bde
, f7d4c9b9f
, 7e81b52b0
, fddeacf79
, fbf5f77c5
, fdebf79cc
, dbc62ff7c
, 8577eb3ba
, 91e603d7a
, a6cdf3da8
, a0c5aa307
, ddf51724a
, 9fd7cc62a
, d216fd04c
, 3e33cd3ff
, 2df2fa021
, 49dd46843
, f76938ac2
, 74fed41e2
]:
b7aeb232d
, b7aeb232d
, f7d4c9b9f
, 7e81b52b0
, fddeacf79
, fdebf79cc
, dbc62ff7c
, 8577eb3ba
, 05d4883ee
, a0c5aa307
, 9fd7cc62a
, 3e33cd3ff
, 49dd46843
, 74fed41e2
]:
b7aeb232d
, b7aeb232d
, f7d4c9b9f
, 7e81b52b0
, fddeacf79
, fdebf79cc
, dbc62ff7c
, 8577eb3ba
, 05d4883ee
, a0c5aa307
, 9fd7cc62a
, 3e33cd3ff
, 49dd46843
, 74fed41e2
]:
#5509 7e81b52b0
Thanks @mitchellhamilton! - Fixed incorrect types which said that field level delete access control exists when it does not
#5518 fddeacf79
Thanks @timleslie! - Updated the list item and db item APIs to include an empty default for .findMany()
and .count()
.
#5575 fdebf79cc
Thanks @timleslie! - Removed unused description
field from FieldConfig.ui
type.
#5525 9fd7cc62a
Thanks @timleslie! - Moved field-related types into their own internal module.
Updated dependencies [b7aeb232d
, f7d4c9b9f
, 8577eb3ba
, 05d4883ee
, a0c5aa307
, 3e33cd3ff
, 49dd46843
]:
b7aeb232d
, 49dd46843
]:
#5571 05d4883ee
Thanks @timleslie! - Added a beforeExit
handler to explicitly terminate the prisma child process to avoid zombie processes when the server crashes.
#5552 a0c5aa307
Thanks @timleslie! - Improved handling of null filter inputs.
Updated dependencies [b7aeb232d
, f7d4c9b9f
, 7e81b52b0
, fddeacf79
, fdebf79cc
, 8577eb3ba
, 9fd7cc62a
, 3e33cd3ff
, b7aeb232d
, 49dd46843
, 49dd46843
]:
18ae28bde
, fddeacf79
, fbf5f77c5
, 8577eb3ba
, 05d4883ee
, 91e603d7a
, a6cdf3da8
, a0c5aa307
, a0c5aa307
, ddf51724a
, d216fd04c
, 2df2fa021
, 49dd46843
, f76938ac2
]:
b7aeb232d
Thanks @gwyneplaine! - Added beforeEach and afterEach hooks to test suite, added file config defaults.#5530 74fed41e2
Thanks @timleslie! - Updated code to use the new DB items API.
Updated dependencies [7e81b52b0
, fddeacf79
, fdebf79cc
, 9fd7cc62a
, b7aeb232d
, 49dd46843
]:
#5544 b49befd9c
Thanks @raveling! - copy changes to document-fields guide
Updated dependencies []:
b7aeb232d
, b7aeb232d
, 18ae28bde
, f7d4c9b9f
, fddeacf79
, fbf5f77c5
, dbc62ff7c
, 8577eb3ba
, 91e603d7a
, a6cdf3da8
, a0c5aa307
, ddf51724a
, d216fd04c
, 3e33cd3ff
, 2df2fa021
, 49dd46843
, f76938ac2
, 74fed41e2
]:
b7aeb232d
, b7aeb232d
, 18ae28bde
, f7d4c9b9f
, 7e81b52b0
, fddeacf79
, fbf5f77c5
, fdebf79cc
, dbc62ff7c
, 8577eb3ba
, 91e603d7a
, a6cdf3da8
, a0c5aa307
, ddf51724a
, 9fd7cc62a
, d216fd04c
, 3e33cd3ff
, 2df2fa021
, 49dd46843
, f76938ac2
, 74fed41e2
]:
#5530 74fed41e2
Thanks @timleslie! - Updated code to use the new DB items API.
#5546 fd26a03ee
Thanks @timleslie! - Remove unused dependency @keystone-next/server-side-graphql-client-legacy
.
Updated dependencies [b7aeb232d
, b7aeb232d
, 18ae28bde
, f7d4c9b9f
, 7e81b52b0
, fddeacf79
, fbf5f77c5
, fdebf79cc
, dbc62ff7c
, 8577eb3ba
, 91e603d7a
, a6cdf3da8
, a0c5aa307
, ddf51724a
, 9fd7cc62a
, d216fd04c
, 3e33cd3ff
, 2df2fa021
, 49dd46843
, f76938ac2
, 74fed41e2
]:
b7aeb232d
, 18ae28bde
, f7d4c9b9f
, fddeacf79
, fbf5f77c5
, 8577eb3ba
, 91e603d7a
, a6cdf3da8
, a0c5aa307
, ddf51724a
, d216fd04c
, 3e33cd3ff
, 2df2fa021
, 49dd46843
, f76938ac2
, 74fed41e2
]:
b7aeb232d
, b7aeb232d
, 18ae28bde
, f7d4c9b9f
, fddeacf79
, fbf5f77c5
, dbc62ff7c
, 8577eb3ba
, 91e603d7a
, a6cdf3da8
, a0c5aa307
, ddf51724a
, d216fd04c
, 3e33cd3ff
, 2df2fa021
, 49dd46843
, f76938ac2
, 74fed41e2
]:
b7aeb232d
, b7aeb232d
, 18ae28bde
, f7d4c9b9f
, 7e81b52b0
, fddeacf79
, fbf5f77c5
, fdebf79cc
, dbc62ff7c
, 8577eb3ba
, 91e603d7a
, a6cdf3da8
, a0c5aa307
, ddf51724a
, 9fd7cc62a
, d216fd04c
, 3e33cd3ff
, 2df2fa021
, 49dd46843
, f76938ac2
, 74fed41e2
]:
b7aeb232d
, b7aeb232d
, 18ae28bde
, f7d4c9b9f
, fddeacf79
, fbf5f77c5
, dbc62ff7c
, 8577eb3ba
, 91e603d7a
, a6cdf3da8
, a0c5aa307
, ddf51724a
, d216fd04c
, 3e33cd3ff
, 2df2fa021
, 49dd46843
, f76938ac2
, 74fed41e2
]:
b7aeb232d
, b7aeb232d
, 18ae28bde
, f7d4c9b9f
, fddeacf79
, fbf5f77c5
, dbc62ff7c
, 8577eb3ba
, 91e603d7a
, a6cdf3da8
, a0c5aa307
, ddf51724a
, d216fd04c
, 3e33cd3ff
, 2df2fa021
, 49dd46843
, f76938ac2
, 74fed41e2
]:
#5546 fd26a03ee
Thanks @timleslie! - Remove unused dependency @keystone-next/server-side-graphql-client-legacy
.
Updated dependencies [b7aeb232d
, 18ae28bde
, f7d4c9b9f
, fddeacf79
, fbf5f77c5
, 8577eb3ba
, 91e603d7a
, a6cdf3da8
, a0c5aa307
, ddf51724a
, d216fd04c
, 3e33cd3ff
, 2df2fa021
, 49dd46843
, f76938ac2
]:
Published by bladey over 3 years ago
To make the Lists API (i.e context.lists.{List}
) more intuitive to use, we deprecated the resolveFields
option in favour of two new methods 🔧:
query
option:Use this when you want to query for resolved field values (including querying relationships and virtual fields). This replaces the resolveFields: false
use case. Now you can query a Post like so:
const [post] = await context.lists.Post.findMany({
where: { slug },
query: `
title
content
image {
src
width
height
}`,
});
This replaces the resolveFields: boolean
use case. We now have a new set of APIs on context.db.lists.{List}
which return unresolved item data from your database (but with read hooks applied). They can be referenced directly or returned from a custom mutation or query in the GraphQL API to be handled by the Field resolvers.
For example, to query for the raw data stored in the database:
const [post] = await context.db.lists.Post.findMany({
where: { slug },
});
Star this repo 🌟 ☝️ or connect to Keystone on Twitter and in Slack.
a5627304b
Thanks @bladey! - Updated Node engine version to 12.x due to 10.x reaching EOL on 2021-04-30.a5627304b
]:
a5627304b
Thanks @bladey! - Updated Node engine version to 12.x due to 10.x reaching EOL on 2021-04-30.a5627304b
]:
a5627304b
Thanks @bladey! - Updated Node engine version to 12.x due to 10.x reaching EOL on 2021-04-30.a5627304b
Thanks @bladey! - Updated Node engine version to 12.x due to 10.x reaching EOL on 2021-04-30.a5627304b
Thanks @bladey! - Updated Node engine version to 12.x due to 10.x reaching EOL on 2021-04-30.a5627304b
]:
a5627304b
Thanks @bladey! - Updated Node engine version to 12.x due to 10.x reaching EOL on 2021-04-30.a5627304b
]:
a5627304b
Thanks @bladey! - Updated Node engine version to 12.x due to 10.x reaching EOL on 2021-04-30.a5627304b
]:
a5627304b
Thanks @bladey! - Updated Node engine version to 12.x due to 10.x reaching EOL on 2021-04-30.a5627304b
]:
a5627304b
Thanks @bladey! - Updated Node engine version to 12.x due to 10.x reaching EOL on 2021-04-30.a5627304b
Thanks @bladey! - Updated Node engine version to 12.x due to 10.x reaching EOL on 2021-04-30.a5627304b
Thanks @bladey! - Updated Node engine version to 12.x due to 10.x reaching EOL on 2021-04-30.a5627304b
]:
a5627304b
Thanks @bladey! - Updated Node engine version to 12.x due to 10.x reaching EOL on 2021-04-30.a5627304b
]:
a5627304b
Thanks @bladey! - Updated Node engine version to 12.x due to 10.x reaching EOL on 2021-04-30.be60812f2
Thanks @rohan-deshpande! - Reflected next/image exports from admin-ui for use in other relevant keystone-next packages.#5451 9e060fe83
Thanks @JedWatson! - With the goal of making the Lists API (i.e context.lists.{List}
) more intuitive to use, the resolveFields
option has been deprecated in favor of two new methods:
(1) You can specify a string of fields to return with the new query
option, when you want to query for resolved field values (including querying relationships and virtual fields). This replaces the resolveFields: false
use case.
For example, to query a Post you would now write:
const [post] = await context.lists.Post.findMany({
where: { slug },
query: `
title
content
image {
src
width
height
}`,
});
(2) Alternatively, there is a new set of APIs on context.db.lists.{List}
which will return the unresolved item data from the database (but with read hooks applied), which can then be referenced directly or returned from a custom mutation or query in the GraphQL API to be handled by the Field resolvers. This replaces the resolveFields: boolean
use case.
For example, to query for the raw data stored in the database, you would write:
const [post] = await context.db.lists.Post.findMany({
where: { slug },
});
#5366 115b06130
Thanks @renovate! - Updated Next.js dependency to ^10.1.3
.
Updated dependencies [9e060fe83
, 3d3fb860f
, c7aecec3c
, 588f31ddc
, 781b3e5ab
, 49025d1ad
, 7498fcabb
, 11f5bb631
, d9e1acb30
, 24e62e29c
, 6861ecb40
, 5b2369077
, a5627304b
, 202d362f3
, d0adec53f
, 962cde7e3
, f67497c1a
, 1d85d7ff4
, 2bef01aaa
, 0e74d8123
, 76692d266
, d7e8cad4f
, ecf07393a
, ad1776b74
, 309596591
, be60812f2
, 5b2369077
, be60812f2
, 115b06130
, a73aea7d7
]:
a5627304b
Thanks @bladey! - Updated Node engine version to 12.x due to 10.x reaching EOL on 2021-04-30.9e060fe83
, 7498fcabb
, 11f5bb631
, a5627304b
, 1d85d7ff4
, 0e74d8123
, be60812f2
]:
a5627304b
Thanks @bladey! - Updated Node engine version to 12.x due to 10.x reaching EOL on 2021-04-30.#5451 9e060fe83
Thanks @JedWatson! - With the goal of making the Lists API (i.e context.lists.{List}
) more intuitive to use, the resolveFields
option has been deprecated in favor of two new methods:
(1) You can specify a string of fields to return with the new query
option, when you want to query for resolved field values (including querying relationships and virtual fields). This replaces the resolveFields: false
use case.
For example, to query a Post you would now write:
const [post] = await context.lists.Post.findMany({
where: { slug },
query: `
title
content
image {
src
width
height
}`,
});
(2) Alternatively, there is a new set of APIs on context.db.lists.{List}
which will return the unresolved item data from the database (but with read hooks applied), which can then be referenced directly or returned from a custom mutation or query in the GraphQL API to be handled by the Field resolvers. This replaces the resolveFields: boolean
use case.
For example, to query for the raw data stored in the database, you would write:
const [post] = await context.db.lists.Post.findMany({
where: { slug },
});
Updated dependencies [9e060fe83
, 3d3fb860f
, 637ae05d3
, d0adec53f
, c7aecec3c
, 588f31ddc
, 781b3e5ab
, 49025d1ad
, f059f6349
, 7498fcabb
, 11f5bb631
, d9e1acb30
, 24e62e29c
, fe55e9289
, 6861ecb40
, 5b2369077
, a5627304b
, 202d362f3
, d0adec53f
, 962cde7e3
, f67497c1a
, 1d85d7ff4
, 2bef01aaa
, be60812f2
, 0e74d8123
, be60812f2
, 76692d266
, d7e8cad4f
, ecf07393a
, ad1776b74
, 309596591
, be60812f2
, 5b2369077
, 89b869e8d
, 58a793988
, be60812f2
, 115b06130
, a73aea7d7
]:
#5397 a5627304b
Thanks @bladey! - Updated Node engine version to 12.x due to 10.x reaching EOL on 2021-04-30.
#5420 ecf07393a
Thanks @timleslie! - Updated core fields implementation to expect an internal option type.adapter
rather than type.adapters.prisma
.
#5410 0e3e9236e
Thanks @timleslie! - Converted the remaining JavaScript code to TypeScript.
#5394 22b16a998
Thanks @timleslie! - Removed the dependency on the legacy CloudinaryImage
field implementation.
#5391 c142dd924
Thanks @timleslie! - Refactored the core implementation to not depend on the File
type.
#5395 94e6b19d6
Thanks @timleslie! - Moved the implementation of the CloudinaryAdapter
into this package.
#5386 952db7148
Thanks @timleslie! - Fixed the type resolver when using the sqlite
provider.
#5442 1d85d7ff4
Thanks @timleslie! - Updated type definitions to be more consistent and correct.
#5400 d7e8cad4f
Thanks @timleslie! - Moved the Implementation
base class from the fields-legacy
package into the fields
package.
Updated dependencies [9e060fe83
, 637ae05d3
, d0adec53f
, c7aecec3c
, f059f6349
, 7498fcabb
, 11f5bb631
, 8ab2c9bb6
, 637ae05d3
, fe55e9289
, a5627304b
, 1d85d7ff4
, 2bef01aaa
, be60812f2
, 0e74d8123
, be60812f2
, d7e8cad4f
, ecf07393a
, be60812f2
, 89b869e8d
, 58a793988
, 115b06130
]:
#5478 11f5bb631
Thanks @timleslie! - Improved types for BaseKeystoneList
.
#5397 a5627304b
Thanks @bladey! - Updated Node engine version to 12.x due to 10.x reaching EOL on 2021-04-30.
#5420 ecf07393a
Thanks @timleslie! - Updated core fields implementation to expect an internal option type.adapter
rather than type.adapters.prisma
.
#5415 fe55e9289
Thanks @timleslie! - Exported the types FieldConfigArgs
and FieldExtraArgs
.
#5396 be60812f2
Thanks @rohan-deshpande! - Added new image field type.
#5400 d7e8cad4f
Thanks @timleslie! - Moved the Implementation
base class from the fields-legacy
package into the fields
package.
#5406 637ae05d3
Thanks @timleslie! - Fixed a bug which added unsupported string filter options to the GraphQL API for the SQLite provider.
Added a .containsInputFields()
method to include string filters just for the contains
and not_contains
options.
#5403 d0adec53f
Thanks @gwyneplaine! - Replaced inflection.humanize usage with custom fn to account for edge cases.
#5452 c7aecec3c
Thanks @timleslie! - Removed the legacy defaultAccess
argument from the Keystone
constructor.
#5392 f059f6349
Thanks @timleslie! - Removed the dependency on the legacy AutoIncrement
field implementation.
#5442 1d85d7ff4
Thanks @timleslie! - Updated type definitions to be more consistent and correct.
#5466 0e74d8123
Thanks @timleslie! - Improved the BaseKeystone
type to be more correct.
#5374 89b869e8d
Thanks @timleslie! - Removed an outdated reference to mongoId
.
#5408 58a793988
Thanks @timleslie! - Fixed an issue where virtual
fields could have create
and update
access control set to something other than false
.
Updated dependencies [9e060fe83
, 637ae05d3
, b0db0a7a8
, 7498fcabb
, 11f5bb631
, 8ab2c9bb6
, 637ae05d3
, d0adec53f
, 5f2673704
, a5627304b
, ea708559f
, 1d85d7ff4
, 2bef01aaa
, be60812f2
, 0e74d8123
, be60812f2
, 115b06130
]:
ecf07393a
Thanks @timleslie! - Updated core fields implementation to expect an internal option type.adapter
rather than type.adapters.prisma
.#5415 fe55e9289
Thanks @timleslie! - Converted internal JavaScript code to TypeScript.
#5442 1d85d7ff4
Thanks @timleslie! - Updated type definitions to be more consistent and correct.
#5372 43a0f5429
Thanks @gwyneplaine! - Fixed heading styles to be more differentiatable from normal text.
#5400 d7e8cad4f
Thanks @timleslie! - Moved the Implementation
base class from the fields-legacy
package into the fields
package.
#5371 8eebf9195
Thanks @mitchellhamilton! - Fixed undo on shortcuts like ->
to →
undoing the whole shortcut rather than just the replacement
Updated dependencies [9e060fe83
, 637ae05d3
, d0adec53f
, c7aecec3c
, f059f6349
, 7498fcabb
, 11f5bb631
, 8ab2c9bb6
, 637ae05d3
, fe55e9289
, a5627304b
, 1d85d7ff4
, 2bef01aaa
, be60812f2
, 0e74d8123
, be60812f2
, d7e8cad4f
, ecf07393a
, be60812f2
, 89b869e8d
, 58a793988
, 115b06130
]:
#5467 7498fcabb
Thanks @timleslie! - Removed the deprecated context.executeGraphQL
. Identical functionality is available via context.graphql.raw
.
#5478 11f5bb631
Thanks @timleslie! - Improved types for BaseKeystoneList
.
#5404 d9e1acb30
Thanks @mitchellhamilton! - Started formatting GraphQL schema written to schema.graphql
with Prettier
#5397 a5627304b
Thanks @bladey! - Updated Node engine version to 12.x due to 10.x reaching EOL on 2021-04-30.
#5420 ecf07393a
Thanks @timleslie! - Updated core fields implementation to expect an internal option type.adapter
rather than type.adapters.prisma
.
#5463 309596591
Thanks @timleslie! - Removed the _listMeta
type from the generated GraphQL API.
#5451 9e060fe83
Thanks @JedWatson! - With the goal of making the Lists API (i.e context.lists.{List}
) more intuitive to use, the resolveFields
option has been deprecated in favor of two new methods:
(1) You can specify a string of fields to return with the new query
option, when you want to query for resolved field values (including querying relationships and virtual fields). This replaces the resolveFields: false
use case.
For example, to query a Post you would now write:
const [post] = await context.lists.Post.findMany({
where: { slug },
query: `
title
content
image {
src
width
height
}`,
});
(2) Alternatively, there is a new set of APIs on context.db.lists.{List}
which will return the unresolved item data from the database (but with read hooks applied), which can then be referenced directly or returned from a custom mutation or query in the GraphQL API to be handled by the Field resolvers. This replaces the resolveFields: boolean
use case.
For example, to query for the raw data stored in the database, you would write:
const [post] = await context.db.lists.Post.findMany({
where: { slug },
});
#5325 3d3fb860f
Thanks @mitchellhamilton! - Updated to Prisma 2.20
#5396 be60812f2
Thanks @rohan-deshpande! - Added create-image-context, logic for parsing, storing and retrieving image data in keystone core.
#5452 c7aecec3c
Thanks @timleslie! - Removed the legacy defaultAccess
argument from the Keystone
constructor.
#5402 588f31ddc
Thanks @mitchellhamilton! - Refactored to make testing the cli easier
#5444 781b3e5ab
Thanks @mitchellhamilton! - Fixed an error being printed to the console when the Prisma CLI exited with a non-zero exit code when running keystone-next prisma
#5429 49025d1ad
Thanks @timleslie! - Removed the internal _label_
field which is no longer used.
#5445 24e62e29c
Thanks @timleslie! - Removed unused and inaccessible code from the core.
#5428 5b2369077
Thanks @mitchellhamilton! - Fixed printing the incorrect migrations directory to the console
#5426 202d362f3
Thanks @mitchellhamilton! - Updated CLI help message to match documentation
#5403 d0adec53f
Thanks @gwyneplaine! - Moved core logic in keyToLabel to the @keystone-next/utils-legacy package.
#5458 962cde7e3
Thanks @timleslie! - Set PRISMA_HIDE_UPDATE_MESSAGE=1 to silence Prisma update messages, since these are out of the hands of the developer.
#5443 f67497c1a
Thanks @timleslie! - Removed legacy support for auxilliary lists.
#5460 2bef01aaa
Thanks @timleslie! - Consolidated the core code from the @keystone-next/keystone-legacy
package into @keystone-next/keystone
.
#5466 0e74d8123
Thanks @timleslie! - Improved the BaseKeystone
type to be more correct.
#5407 76692d266
Thanks @timleslie! - Fixed a bug where context.prisma
was undefined
in the onConnect()
function.
#5400 d7e8cad4f
Thanks @timleslie! - Moved the Implementation
base class from the fields-legacy
package into the fields
package.
#5390 ad1776b74
Thanks @timleslie! - Silenced logging when running CI tests.
#5428 5b2369077
Thanks @mitchellhamilton! - Fixed casing of GraphQL in message logged in keystone-next dev
#5366 115b06130
Thanks @renovate! - Updated Next.js dependency to ^10.1.3
.
#5393 a73aea7d7
Thanks @mitchellhamilton! - Fixed reading config file to be local to the passed directory instead of process.cwd()
Updated dependencies [9e060fe83
, 637ae05d3
, d0adec53f
, c7aecec3c
, b0db0a7a8
, f059f6349
, 7498fcabb
, 11f5bb631
, 8ab2c9bb6
, 637ae05d3
, d0adec53f
, 5f2673704
, fe55e9289
, a5627304b
, ea708559f
, 49ecca74d
, 1d85d7ff4
, 2bef01aaa
, be60812f2
, 0e74d8123
, be60812f2
, d7e8cad4f
, ecf07393a
, be60812f2
, 89b869e8d
, 58a793988
, 115b06130
]:
a5627304b
Thanks @bladey! - Updated Node engine version to 12.x due to 10.x reaching EOL on 2021-04-30.#5467 7498fcabb
Thanks @timleslie! - Removed the deprecated context.executeGraphQL
. Identical functionality is available via context.graphql.raw
.
#5397 a5627304b
Thanks @bladey! - Updated Node engine version to 12.x due to 10.x reaching EOL on 2021-04-30.
#5451 9e060fe83
Thanks @JedWatson! - With the goal of making the Lists API (i.e context.lists.{List}
) more intuitive to use, the resolveFields
option has been deprecated in favor of two new methods:
(1) You can specify a string of fields to return with the new query
option, when you want to query for resolved field values (including querying relationships and virtual fields). This replaces the resolveFields: false
use case.
For example, to query a Post you would now write:
const [post] = await context.lists.Post.findMany({
where: { slug },
query: `
title
content
image {
src
width
height
}`,
});
(2) Alternatively, there is a new set of APIs on context.db.lists.{List}
which will return the unresolved item data from the database (but with read hooks applied), which can then be referenced directly or returned from a custom mutation or query in the GraphQL API to be handled by the Field resolvers. This replaces the resolveFields: boolean
use case.
For example, to query for the raw data stored in the database, you would write:
const [post] = await context.db.lists.Post.findMany({
where: { slug },
});
#5396 be60812f2
Thanks @rohan-deshpande! - Added types for new images functionality in keystone.
#5478 11f5bb631
Thanks @timleslie! - Improved types for BaseKeystoneList
.
#5442 1d85d7ff4
Thanks @timleslie! - Updated type definitions to be more consistent and correct.
#5466 0e74d8123
Thanks @timleslie! - Improved the BaseKeystone
type to be more correct.
Updated dependencies [637ae05d3
, d0adec53f
, c7aecec3c
, f059f6349
, 11f5bb631
, 8ab2c9bb6
, 637ae05d3
, fe55e9289
, a5627304b
, 1d85d7ff4
, 2bef01aaa
, 0e74d8123
, be60812f2
, d7e8cad4f
, ecf07393a
, 89b869e8d
, 58a793988
]:
a5627304b
Thanks @bladey! - Updated Node engine version to 12.x due to 10.x reaching EOL on 2021-04-30.b0db0a7a8
, d0adec53f
, 5f2673704
, a5627304b
, ea708559f
]:
a5627304b
Thanks @bladey! - Updated Node engine version to 12.x due to 10.x reaching EOL on 2021-04-30.#5284 8ab2c9bb6
Thanks @timleslie! - Converted package to TypeScript.
#5406 637ae05d3
Thanks @timleslie! - Added a .containsConditions()
method to include string filters just for the contains
and not_contains
options.
#5406 637ae05d3
Thanks @timleslie! - Fixed a bug which added unsupported string filter options to the GraphQL API for the SQLite provider.
Added a .containsInputFields()
method to include string filters just for the contains
and not_contains
options.
#5442 1d85d7ff4
Thanks @timleslie! - Updated type definitions to be more consistent and correct.
#5460 2bef01aaa
Thanks @timleslie! - Consolidated the core code from the @keystone-next/keystone-legacy
package into @keystone-next/keystone
.
#5466 0e74d8123
Thanks @timleslie! - Improved the BaseKeystone
type to be more correct.
Updated dependencies [9e060fe83
, 637ae05d3
, d0adec53f
, c7aecec3c
, b0db0a7a8
, f059f6349
, 7498fcabb
, 11f5bb631
, d0adec53f
, 5f2673704
, fe55e9289
, a5627304b
, ea708559f
, 1d85d7ff4
, 0e74d8123
, be60812f2
, d7e8cad4f
, ecf07393a
, be60812f2
, 89b869e8d
, 58a793988
]:
a5627304b
Thanks @bladey! - Updated Node engine version to 12.x due to 10.x reaching EOL on 2021-04-30.#5456 49ecca74d
Thanks @JedWatson! - Fixed getItem
to not include null in the return type
#5400 d7e8cad4f
Thanks @timleslie! - Moved the Implementation
base class from the fields-legacy
package into the fields
package.
Updated dependencies [9e060fe83
, 7498fcabb
, 11f5bb631
, a5627304b
, 1d85d7ff4
, 0e74d8123
, be60812f2
]:
#5397 a5627304b
Thanks @bladey! - Updated Node engine version to 12.x due to 10.x reaching EOL on 2021-04-30.
#5387 406acca51
Thanks @timleslie! - Replaced type AdapterName
with ProviderName
. Updated all functions which accepted an AdapterName
value named adapterName
to accept a ProviderName
argument named provider
.
#5459 5106e4bbe
Thanks @timleslie! - Simplified internal implementation now that Prisma is the only database adapter supported.
Updated dependencies [9e060fe83
, 3d3fb860f
, 637ae05d3
, c7aecec3c
, 588f31ddc
, 781b3e5ab
, 49025d1ad
, 7498fcabb
, 11f5bb631
, d9e1acb30
, 8ab2c9bb6
, 637ae05d3
, 24e62e29c
, 6861ecb40
, 5b2369077
, a5627304b
, 202d362f3
, d0adec53f
, 962cde7e3
, f67497c1a
, 1d85d7ff4
, 2bef01aaa
, 0e74d8123
, 76692d266
, d7e8cad4f
, ecf07393a
, ad1776b74
, 309596591
, 5b2369077
, be60812f2
, 115b06130
, a73aea7d7
]:
a5627304b
Thanks @bladey! - Updated Node engine version to 12.x due to 10.x reaching EOL on 2021-04-30.d0adec53f
Thanks @gwyneplaine! - Added a humanize fn which is string transformation logic ported over from @keystone-next/keystone.#5409 b0db0a7a8
Thanks @timleslie! - Updated argument types of intersection
to be readonly
.
#5472 5f2673704
Thanks @timleslie! - Improved types of arrayToObject
.
#5419 ea708559f
Thanks @timleslie! - Updated types for mapKeyNames
and flatten
to be more correct.
Updated dependencies [9e060fe83
, 7498fcabb
, 11f5bb631
, a5627304b
, 1d85d7ff4
, 0e74d8123
, be60812f2
]:
34e3b6309
Thanks @alexmgrant! - Fixed renderers
prop not being respected.a5627304b
Thanks @bladey! - Updated Node engine version to 12.x due to 10.x reaching EOL on 2021-04-30.#5366 115b06130
Thanks @renovate! - Updated Next.js dependency to ^10.1.3
.
Updated dependencies [a5627304b
]:
a5627304b
Thanks @bladey! - Updated Node engine version to 12.x due to 10.x reaching EOL on 2021-04-30.#5451 9e060fe83
Thanks @JedWatson! - With the goal of making the Lists API (i.e context.lists.{List}
) more intuitive to use, the resolveFields
option has been deprecated in favor of two new methods:
(1) You can specify a string of fields to return with the new query
option, when you want to query for resolved field values (including querying relationships and virtual fields). This replaces the resolveFields: false
use case.
For example, to query a Post you would now write:
const [post] = await context.lists.Post.findMany({
where: { slug },
query: `
title
content
image {
src
width
height
}`,
});
(2) Alternatively, there is a new set of APIs on context.db.lists.{List}
which will return the unresolved item data from the database (but with read hooks applied), which can then be referenced directly or returned from a custom mutation or query in the GraphQL API to be handled by the Field resolvers. This replaces the resolveFields: boolean
use case.
For example, to query for the raw data stored in the database, you would write:
const [post] = await context.db.lists.Post.findMany({
where: { slug },
});
#5467 7498fcabb
Thanks @timleslie! - Removed the deprecated context.executeGraphQL
. Identical functionality is available via context.graphql.raw
.
#5471 838247cc0
Thanks @raveling! - Fixed typo in guide meta title.
#5366 115b06130
Thanks @renovate! - Updated Next.js dependency to ^10.1.3
.
Updated dependencies [fe55e9289
, a5627304b
, 1d85d7ff4
, 43a0f5429
, d7e8cad4f
, ecf07393a
, 8eebf9195
]:
a5627304b
Thanks @bladey! - Updated Node engine version to 12.x due to 10.x reaching EOL on 2021-04-30.#5388 29c9a36b7
Thanks @timleslie! - Updated example project to use the new db.provider
config option over the deprecated db.adapter
option.
#5366 115b06130
Thanks @renovate! - Updated Next.js dependency to ^10.1.3
.
Updated dependencies [9e060fe83
, 3d3fb860f
, 637ae05d3
, d0adec53f
, c7aecec3c
, 588f31ddc
, 781b3e5ab
, 49025d1ad
, f059f6349
, 7498fcabb
, 11f5bb631
, d9e1acb30
, 24e62e29c
, fe55e9289
, 6861ecb40
, 5b2369077
, a5627304b
, 202d362f3
, d0adec53f
, 962cde7e3
, f67497c1a
, 1d85d7ff4
, 2bef01aaa
, be60812f2
, 0e74d8123
, be60812f2
, 76692d266
, d7e8cad4f
, ecf07393a
, ad1776b74
, 309596591
, 5b2369077
, 89b869e8d
, 58a793988
, be60812f2
, 115b06130
, a73aea7d7
]:
a5627304b
Thanks @bladey! - Updated Node engine version to 12.x due to 10.x reaching EOL on 2021-04-30.#5388 29c9a36b7
Thanks @timleslie! - Updated example project to use the new db.provider
config option over the deprecated db.adapter
option.
#5396 be60812f2
Thanks @rohan-deshpande! - Added example of image field support to basic keystone-next example.
#5366 115b06130
Thanks @renovate! - Updated Next.js dependency to ^10.1.3
.
Updated dependencies [9e060fe83
, 3d3fb860f
, 637ae05d3
, fe55e9289
, d0adec53f
, c7aecec3c
, 588f31ddc
, 781b3e5ab
, 49025d1ad
, f059f6349
, 7498fcabb
, 11f5bb631
, d9e1acb30
, 34e3b6309
, 24e62e29c
, fe55e9289
, 6861ecb40
, 5b2369077
, a5627304b
, 202d362f3
, d0adec53f
, 962cde7e3
, f67497c1a
, 1d85d7ff4
, 2bef01aaa
, be60812f2
, 0e74d8123
, 43a0f5429
, be60812f2
, 76692d266
, d7e8cad4f
, ecf07393a
, ad1776b74
, 309596591
, be60812f2
, 5b2369077
, 8eebf9195
, 89b869e8d
, 58a793988
, be60812f2
, 115b06130
, a73aea7d7
]:
a5627304b
Thanks @bladey! - Updated Node engine version to 12.x due to 10.x reaching EOL on 2021-04-30.#5451 9e060fe83
Thanks @JedWatson! - With the goal of making the Lists API (i.e context.lists.{List}
) more intuitive to use, the resolveFields
option has been deprecated in favor of two new methods:
(1) You can specify a string of fields to return with the new query
option, when you want to query for resolved field values (including querying relationships and virtual fields). This replaces the resolveFields: false
use case.
For example, to query a Post you would now write:
const [post] = await context.lists.Post.findMany({
where: { slug },
query: `
title
content
image {
src
width
height
}`,
});
(2) Alternatively, there is a new set of APIs on context.db.lists.{List}
which will return the unresolved item data from the database (but with read hooks applied), which can then be referenced directly or returned from a custom mutation or query in the GraphQL API to be handled by the Field resolvers. This replaces the resolveFields: boolean
use case.
For example, to query for the raw data stored in the database, you would write:
const [post] = await context.db.lists.Post.findMany({
where: { slug },
});
#5388 29c9a36b7
Thanks @timleslie! - Updated example project to use the new db.provider
config option over the deprecated db.adapter
option.
#5366 115b06130
Thanks @renovate! - Updated Next.js dependency to ^10.1.3
.
Updated dependencies [9e060fe83
, 3d3fb860f
, 637ae05d3
, d0adec53f
, c7aecec3c
, 0e3e9236e
, 588f31ddc
, 781b3e5ab
, 49025d1ad
, f059f6349
, 7498fcabb
, 11f5bb631
, d9e1acb30
, 22b16a998
, 24e62e29c
, c142dd924
, 94e6b19d6
, fe55e9289
, 6861ecb40
, 5b2369077
, a5627304b
, 202d362f3
, d0adec53f
, 962cde7e3
, f67497c1a
, 952db7148
, 49ecca74d
, 1d85d7ff4
, 2bef01aaa
, be60812f2
, 0e74d8123
, be60812f2
, 76692d266
, d7e8cad4f
, ecf07393a
, ad1776b74
, 309596591
, be60812f2
, 5b2369077
, 89b869e8d
, 58a793988
, be60812f2
, 115b06130
, a73aea7d7
]:
a5627304b
Thanks @bladey! - Updated Node engine version to 12.x due to 10.x reaching EOL on 2021-04-30.#5451 9e060fe83
Thanks @JedWatson! - With the goal of making the Lists API (i.e context.lists.{List}
) more intuitive to use, the resolveFields
option has been deprecated in favor of two new methods:
(1) You can specify a string of fields to return with the new query
option, when you want to query for resolved field values (including querying relationships and virtual fields). This replaces the resolveFields: false
use case.
For example, to query a Post you would now write:
const [post] = await context.lists.Post.findMany({
where: { slug },
query: `
title
content
image {
src
width
height
}`,
});
(2) Alternatively, there is a new set of APIs on context.db.lists.{List}
which will return the unresolved item data from the database (but with read hooks applied), which can then be referenced directly or returned from a custom mutation or query in the GraphQL API to be handled by the Field resolvers. This replaces the resolveFields: boolean
use case.
For example, to query for the raw data stored in the database, you would write:
const [post] = await context.db.lists.Post.findMany({
where: { slug },
});
#5388 29c9a36b7
Thanks @timleslie! - Updated example project to use the new db.provider
config option over the deprecated db.adapter
option.
#5366 115b06130
Thanks @renovate! - Updated Next.js dependency to ^10.1.3
.
Updated dependencies [9e060fe83
, 3d3fb860f
, 637ae05d3
, d0adec53f
, c7aecec3c
, 588f31ddc
, 781b3e5ab
, 49025d1ad
, f059f6349
, 7498fcabb
, 11f5bb631
, d9e1acb30
, 24e62e29c
, fe55e9289
, 6861ecb40
, 5b2369077
, a5627304b
, 202d362f3
, d0adec53f
, 962cde7e3
, f67497c1a
, 1d85d7ff4
, 2bef01aaa
, be60812f2
, 0e74d8123
, be60812f2
, 76692d266
, d7e8cad4f
, ecf07393a
, ad1776b74
, 309596591
, 5b2369077
, 89b869e8d
, 58a793988
, be60812f2
, 115b06130
, a73aea7d7
]:
a5627304b
Thanks @bladey! - Updated Node engine version to 12.x due to 10.x reaching EOL on 2021-04-30.#5388 29c9a36b7
Thanks @timleslie! - Updated example project to use the new db.provider
config option over the deprecated db.adapter
option.
#5366 115b06130
Thanks @renovate! - Updated Next.js dependency to ^10.1.3
.
Updated dependencies [9e060fe83
, 3d3fb860f
, 637ae05d3
, d0adec53f
, c7aecec3c
, 588f31ddc
, 781b3e5ab
, 49025d1ad
, f059f6349
, 7498fcabb
, 11f5bb631
, d9e1acb30
, 24e62e29c
, fe55e9289
, 6861ecb40
, 5b2369077
, a5627304b
, 202d362f3
, d0adec53f
, 962cde7e3
, f67497c1a
, 1d85d7ff4
, 2bef01aaa
, be60812f2
, 0e74d8123
, be60812f2
, 76692d266
, d7e8cad4f
, ecf07393a
, ad1776b74
, 309596591
, be60812f2
, 5b2369077
, 89b869e8d
, 58a793988
, be60812f2
, 115b06130
, a73aea7d7
]:
a5627304b
Thanks @bladey! - Updated Node engine version to 12.x due to 10.x reaching EOL on 2021-04-30.#5388 29c9a36b7
Thanks @timleslie! - Updated example project to use the new db.provider
config option over the deprecated db.adapter
option.
Updated dependencies [9e060fe83
, 3d3fb860f
, 637ae05d3
, d0adec53f
, c7aecec3c
, 588f31ddc
, 781b3e5ab
, 49025d1ad
, f059f6349
, 7498fcabb
, 11f5bb631
, d9e1acb30
, 24e62e29c
, fe55e9289
, 6861ecb40
, 5b2369077
, a5627304b
, 202d362f3
, d0adec53f
, 962cde7e3
, f67497c1a
, 1d85d7ff4
, 2bef01aaa
, be60812f2
, 0e74d8123
, be60812f2
, 76692d266
, d7e8cad4f
, ecf07393a
, ad1776b74
, 309596591
, 5b2369077
, 89b869e8d
, 58a793988
, be60812f2
, 115b06130
, a73aea7d7
]:
a5627304b
Thanks @bladey! - Updated Node engine version to 12.x due to 10.x reaching EOL on 2021-04-30.#5388 29c9a36b7
Thanks @timleslie! - Updated example project to use the new db.provider
config option over the deprecated db.adapter
option.
#5366 115b06130
Thanks @renovate! - Updated Next.js dependency to ^10.1.3
.
Updated dependencies [9e060fe83
, 3d3fb860f
, 637ae05d3
, d0adec53f
, c7aecec3c
, 588f31ddc
, 781b3e5ab
, 49025d1ad
, f059f6349
, 7498fcabb
, 11f5bb631
, d9e1acb30
, 24e62e29c
, fe55e9289
, 6861ecb40
, 5b2369077
, a5627304b
, 202d362f3
, d0adec53f
, 962cde7e3
, f67497c1a
, 1d85d7ff4
, 2bef01aaa
, be60812f2
, 0e74d8123
, be60812f2
, 76692d266
, d7e8cad4f
, ecf07393a
, ad1776b74
, 309596591
, 5b2369077
, 89b869e8d
, 58a793988
, be60812f2
, 115b06130
, a73aea7d7
]:
a5627304b
Thanks @bladey! - Updated Node engine version to 12.x due to 10.x reaching EOL on 2021-04-30.#5451 9e060fe83
Thanks @JedWatson! - With the goal of making the Lists API (i.e context.lists.{List}
) more intuitive to use, the resolveFields
option has been deprecated in favor of two new methods:
(1) You can specify a string of fields to return with the new query
option, when you want to query for resolved field values (including querying relationships and virtual fields). This replaces the resolveFields: false
use case.
For example, to query a Post you would now write:
const [post] = await context.lists.Post.findMany({
where: { slug },
query: `
title
content
image {
src
width
height
}`,
});
(2) Alternatively, there is a new set of APIs on context.db.lists.{List}
which will return the unresolved item data from the database (but with read hooks applied), which can then be referenced directly or returned from a custom mutation or query in the GraphQL API to be handled by the Field resolvers. This replaces the resolveFields: boolean
use case.
For example, to query for the raw data stored in the database, you would write:
const [post] = await context.db.lists.Post.findMany({
where: { slug },
});
#5400 d7e8cad4f
Thanks @timleslie! - Moved the Implementation
base class from the fields-legacy
package into the fields
package.
Updated dependencies [9e060fe83
, b0db0a7a8
, 7498fcabb
, 11f5bb631
, d0adec53f
, 5f2673704
, a5627304b
, ea708559f
, 406acca51
, 1d85d7ff4
, 0e74d8123
, 5106e4bbe
, be60812f2
]:
a5627304b
Thanks @bladey! - Updated Node engine version to 12.x due to 10.x reaching EOL on 2021-04-30.#5400 d7e8cad4f
Thanks @timleslie! - Moved the Implementation
base class from the fields-legacy
package into the fields
package.
Updated dependencies [9e060fe83
, 3d3fb860f
, 637ae05d3
, d0adec53f
, c7aecec3c
, 588f31ddc
, 781b3e5ab
, 49025d1ad
, f059f6349
, 7498fcabb
, 11f5bb631
, d9e1acb30
, 24e62e29c
, fe55e9289
, 6861ecb40
, 5b2369077
, a5627304b
, 202d362f3
, d0adec53f
, 406acca51
, 962cde7e3
, f67497c1a
, 49ecca74d
, 1d85d7ff4
, 2bef01aaa
, 0e74d8123
, be60812f2
, 5106e4bbe
, 76692d266
, d7e8cad4f
, ecf07393a
, ad1776b74
, 309596591
, 5b2369077
, 89b869e8d
, 58a793988
, be60812f2
, 115b06130
, a73aea7d7
]:
a5627304b
Thanks @bladey! - Updated Node engine version to 12.x due to 10.x reaching EOL on 2021-04-30.#5388 29c9a36b7
Thanks @timleslie! - Updated example project to use the new db.provider
config option over the deprecated db.adapter
option.
Updated dependencies [9e060fe83
, 3d3fb860f
, 637ae05d3
, fe55e9289
, d0adec53f
, c7aecec3c
, 588f31ddc
, 781b3e5ab
, 49025d1ad
, f059f6349
, 7498fcabb
, 11f5bb631
, d9e1acb30
, 24e62e29c
, fe55e9289
, 6861ecb40
, 5b2369077
, a5627304b
, 202d362f3
, d0adec53f
, 962cde7e3
, f67497c1a
, 1d85d7ff4
, 2bef01aaa
, 0e74d8123
, 43a0f5429
, be60812f2
, 76692d266
, d7e8cad4f
, ecf07393a
, ad1776b74
, 309596591
, 5b2369077
, 8eebf9195
, 89b869e8d
, 58a793988
, be60812f2
, 115b06130
, a73aea7d7
]: