chore(deps): update dependency relay-compiler to v18 #1243
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
17.0.0
->18.2.0
Release Notes
facebook/relay (relay-compiler)
v18.2.0
: Version 18.2.0 Release NotesCompare Source
Relay version 18.2.0 comes with several bug fixes and improvements!
New compiler capability: Relay Codemods
Codemods are tools which enable you to programmatically update your code. These are especially helpful if you want to upgrade an API across your whole codebase without needing to manually change each call site. The Relay compiler, with its understanding of your GraphQL snippets, is well positioned to help with these kinds of tasks. In Relay 18.2.0 we are introducing Relay Codemods.
We currently support two different codemods:
mark-dangerous-conditional-fragment-spreads
marks places where@alias
is required to make a fragment spread safe. This can enable you to turn on theenforce_fragment_alias_where_ambiguous
feature flag. Learn more in the@alias
docs.remove-unnecessary-required-directives
identifies places where@required
is unnecessary because it's used on a non-nullable field within a fragment or query that is@throwOnFieldError
, and removes the@required
directive.We are looking forward to helping Relay users with more codemods in the future!
New experimental hook for pagination with prefetching
It is often possible to speed up list pagination by pre-loading one or more pages of results ahead of what the user is currently viewing. Our previous APIs made this difficult to fetch the next page of data without also rendering it at the same time. We are currently exploring an experimental API to make it easy to manage paginated lists with prefetching.
Read more in the docs: usePrefetchableForwardPaginationFragment
Expand places where @catch can be used
The
@catch
directive can now be used on fragments, queries, mutations and aliased inline fragments. This enables more flexibility in controlling how field errors are handled.Bug fixes
682ac5a
]: Include Relay resolver import type when field is selected on query as well (#4820) by Ernie Turnerd6cb5a2
]: Update required-on-non-null validation to also work within @catch by Gordy French356327c
]: Fix bug in Connections with errors by Evan Yeung9571d80
]: Fix result type generic for Error to not double-nest by Itamar Kestenbaumaf35418
]: Ignore @dangerously_unaliased_fixme when comparing structs by Jordan Eldredgef166d6b
]: Fix dangling resolver artifact by Tianyu YaoImprovements
81eab03
]: Remove unused fieldPath from resolver suspense objects by Jordan Eldredged982b5b
]: Add feature flag to opt in/out of including the path field in @required reader nodes by Jordan Eldredge460508a
]: Remove path from @catch codegen by Jordan Eldredgea88c013
]: Derive @required fieldPath at runtime by Jordan Eldredge7c9aebb
]: Add support for @catch on fragments/queries/mutations and aliased inline fragments (#4838) by Jordan Eldredge08fef89
]: Cleanup resolver cache implementation only used in tests by Jordan Eldredge2c3b915
]: Cleanup AVOID_CYCLES_IN_RESOLVER_NOTIFICATION by Jordan Eldredge2705e3d
]: Add support for handling field errors on noncompliant lists by Ryan Holdren402aa97
]: Update message in handlePotentialSnapshotErrors for payload errors by Itamar Kestenbaum8421851
]: Improve error message when directive is used in wrong location by Jordan Eldredge3eb627d
]: Add fieldPath to missing data field error logs (#4835) by Jordan Eldredgebac814f
]: Use prefetchable metadata in the prefetchable pagination hook by Tianyu Yaod079b29
]: Allow @required on connection fields by Jordan Eldredge733cc27
]: Add schema name to project config by Monica Tangebf028b
]: Use directive location where it makes sense by Gordy Frenchd3eb42f
]: Don't require @alias on plural fragments spread into plural selections by Jordan Eldredgee21e162
]: Allow codemod to specify rollout percentage by Gordy Frenche4facf3
]: Allow granular FeatureFlag gating of@alias
enforcement by Jordan Eldredgedeb7b09
]: Allow users to return ID built in scalar using DataID by Jordan Eldredge3c92504
]: Fix slow typegen in adslab by Tianyu Yao6e4c120
]: Update error message for clarity by Jordan Eldredge5c548bd
]: Allow @dangerously_unaliased on @inline fragments by Jordan Eldredge2cf6c7f
]: Codemod command runs and collects code actions by Gordy Frenchad26284
]: Make required-on-non-null-within-throwOnFieldError an LSP warning by Gordy Frenchb41ae4c
]: Support semantic non-nullable RelayResolverValue by Jordan Eldredgeeba1d97
]: Allow strong resolvers to reference opaque types by Jordan EldredgeDocumentation Improvements
9401e69
]: - add new client 3D page in 3D docs by Lynn Yu6a51b39
]: - 3D docs starting point by Lynn Yucaa040a
]: - document all top level functions in relay compiler by Lynn Yu1306086
]: - document all top level structs in relay compiler by Lynn Yu86301c7
]: - document all modules in relay compiler by Lynn Yubdbe7e0
]: Add rust docs for all top level enums in relay compiler by Lynn Yu5600502
]: - document semantic nullability support in resolvers by Lynn Yuc3b0dd5
]: Docs: Fix fragments tutorial thumbnail typo (#4841) by Daniel Stocks5b7dc1f
]: Add docs for usePrefetchableForwardPaginationFragment by Tianyu Yao5cccb7b
]: - adding docs for abstract types in relay resolvers by Lynn Yuebc4936
]: Minor updates to docs on enabling relay resolvers (#4824) by Arthur4776175
]: Update docusaurus to 2.4.3 by Gordy French0b4920d
]: - delete old relay doc versions older than 2 years by Lynn Yub8967d2
]: Add documentation for codemods (#4826) by gordyf7c2b460
]: Update description of dangerously_unaliased_fixme directive by Jordan EldredgeMiscellaneous
9eb9c94
]: Update to latest react@experimental (#4847) by Lauren Tan7e258ca
]: Add @relayRequiredVariables to metadata section of generated .graphql files by Jean Zhang4360f69
]: Deprecate GK relay_enable_load_query_request_deduping by Nithik Balachandran15a19e9
]: Update metadata generation for Live Query in Relay compiler by Xiangxin SunExperimental Changes
30af003
]: Add a runtime feature flag for prefixing read-time resolver storageKeys by Evan Yeung195d9a2
]: Fix usePrefetchablePagination bug by Tianyu Yao57756e6
]: Allow reusing fetching options in usePrefetchableForwardPaginationFragment by Tianyu Yao023b875
]: Support dynamic switching of read vs exec time resolvers in reader by Evan Yeung53cef9d
]: Update hook to expose data in UNSTABLE_extraVariables by Lynn Yud036d49
]: Update normalization artifacts for exec time resolver strong ids by Evan Yeung9035b32
]: Generate prefetchable pagination ASTs by Tianyu Yaodececd1
]: Generate metadata for prefetchable pagination by Tianyu Yao4a67ddd
]: Create a separate edge fragment for prefetchable pagination by Tianyu Yaov18.1.0
: Version 18.1.0 Release NotesCompare Source
Following up from our v18.0.0 release last month, v18.1.0 provides a number of fixes and improvements, adds some new experimental APIs, and ships some long-running experimental features as stable.
Relay Resolvers are now stable
For the past several years we've been iterating on Relay Resolvers which provided a structured and typesafe way to model client state and derived data in your GraphQL graph. As of this release, Relay Resolvers are enabled by default and no-longer experimental. As part of this stabilization we shipped fixes for Relay Resolvers when used with TypeScript and fixed a few edge cases related to how errors encountered by resolvers are handled.
Improvements to error @catch
We released
@catch
in v18.0.0 and are very excited about the capabilities it enables. Check out Itamar Kestenbaum's GraphQL conf talk about it here: Build Confidently: How @Catch and Error Handling Pave Way in Field Nullability.Since that release we've made a few improvements:
@catch
directive that are marked as@semanticNonNull
in the schema now generate non-nullable TypeScript/Flow types. See semantic nullability.@catch
no-longer include the error message. This is because GraphQL error messages are generally not safe to show to users. These error messages can still be accessed by the field logger provided to your Relay Environment. In the future we plan to let users opt into allowing safe error messages through to product code.Compiler Error Reporting
We've improved how errors are reported by the Relay compiler to ensure we report as many errors as possible, and each error includes sufficient context.
New "Copy Operation" VSCode command
Our VSCode extension now includes a command to quickly copy the full text of a query directly from within your editor.
Experimental APIs for reading fragment data outside of React
In some cases it can be useful to read a fragment outside of a React hook. However, doing this requires handling a number of concerns.
@defer
or Relay Resolver suspense).@throwOnFieldError
,@required(action: THROW)
)To enable users to read fragment data while correctly handling these cases, we've added two experimental APIs:
observeFragment
: Read a fragment as a stream of states where each state might be loading, error, or value.waitForFragmentData
: Read a fragment as a promise which will resolve when data is available, or reject if an error is encountered.Docs
Thanks to members of our community for submitting pull requests to improve our docs:
Improvements
Experimental
We are always continuing to evolve and improve Relay. These changes are part of features or implementations which are either in progress or are being experimented with internally.
v18.0.0
: Version 18.0.0 Release NotesCompare Source
With version 18, the Relay team at Meta and our community of contributors have made several significant improvements to Relay:
@alias
released as stable@catch
to detect and granularly handle field errors@throwOnFieldError
and@semanticNonNull
to avoid having to handle the nullability of fields which are only null in the case of error.Read all about them in more detail below:
Breaking Changes
Improved validation of field and fragment arguments
Previously we were not correctly type-checking arguments passed to client-defined fields, such as Relay Resolvers and Client Schema Extensions. This new release adds that validation. If you need to opt out of this validation for any reason, you can enable the
disable_full_argument_type_validation
compiler feature flag.Major features
@alias fragment aliases released as stable
Aliased fragments are a Relay feature that lets you access fragments spreads and inline fragments as named properties. This can be especially helpful for fragments which might be conditionally fetched due to
@skip
/@include
or type conditions which might not match. With@alias
these fragments get typed as nullable properties allowing you to check at runtime if they've matched or not before trying to use the data.Read more about @alias
@catch
@catch
, enabled by default will let you check at runtime if a field errored. This can allow you to disambiguate between true nulls returned by your server, and fields which are null due to field level errors.Read more about @catch
@throwOnFieldError
@throwOnFieldError
can be added to fragments and queries and will cause any field errors within that fragment/query to throw when read. This ensures that all null values you encounter are true nulls as returned by your field resolvers on the server, and not field level errors that have been coerced to null.Read more about @throwOnFieldError
Semantic Nullability
@throwOnFieldError
unlocks a powerful new feature when combined with a schema that has fields annotated with@semanticNonNull
.@semanticNonNull
can be added to fields which have been made nullable in the schema only to enable more robust error handling, but are not expected to return null expect in the case of errors.Within fragments or queries annotated with
@throwOnFieldError
, fields annotated with@semanticNonNull
will be typed as non-nullable. This has the potential to dramatically reduce the number of null checks you need to perform inside your product code, while also making your product code more "correct" by treating all field errors as explicit errors.Read more about Semantic Nullability
Relay Resolvers can now have access to context
Thanks for Mark Polak and Drew Atkinson from Microsoft, Relay Resolvers can now be configured to accept a shared context object, similar to standard GraphQL resolvers.
Pull Request
Read more about Resolver context
Ability to opt out of Relay Compiler source control integration
Thanks also to for Mark Polak from Microsoft, the Relay compiler config now supports the option
"noSourceControl": true
which will ask the Relay compiler to not automatically try to add/remove files from Git or Mercurial.Pull Request
Editor Integration Improvements
Thanks to Tobias Tengler, Relay's editor support now includes:
Additional runtime logging integrations
Additional Improvements
D542067
: Validate edgeTypeName argument points to an existing type by Amy HwangDocumentation Improvements
Miscellaneous
Experimental Changes
IdOf
by Tianyu YaoAnd more
There were over 100 additional commits since our last release which have been omitted from this doc
Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Enabled.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.