Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,23 @@

- Add support for `autoExhaustiveTypes` config and a `@nonExhaustive` directive to control automatic exhaustive checks for unions/interfaces.

- Add React-free mode support and split React APIs into `RescriptRelayReact`.

- New compiler config: `rescriptRelayMode: "Default" | "NonReact"` (defaults to `"Default"`).
- PPX `-non-react`
- Mark `@rescript/react` and `react-relay` as optional peer deps so non‑React usage does not require them.

- BREAKING: Move all React-specific APIs out of `RescriptRelay` into `RescriptRelayReact`.

- `RescriptRelay.Context.Provider` -> `RescriptRelayReact.Context.Provider`
- `RescriptRelay.useEnvironmentFromContext` -> `RescriptRelayReact.useEnvironmentFromContext`
- `RescriptRelay.useSubscribeToInvalidationState` -> `RescriptRelayReact.useSubscribeToInvalidationState`

Migration:

- Update imports/usages in app code to reference `RescriptRelayReact` for the APIs listed above.
- For non‑React usage, set `rescriptRelayMode: "NonReact"` in `relay.config.js` and pass `-non-react` to the PPX.

# 4.0.0

- Support `@exhaustive` on interfaces as well.
Expand Down
2 changes: 1 addition & 1 deletion packages/relay
Submodule relay updated 46 files
+1 −1 compiler/crates/common/src/rescript_utils.rs
+5 −1 compiler/crates/relay-compiler/src/artifact_content/content.rs
+14 −0 compiler/crates/relay-compiler/src/config.rs
+1 −0 compiler/crates/relay-config/src/lib.rs
+20 −0 compiler/crates/relay-config/src/project_config.rs
+1 −1 ...test-project-res-preloadable/src/__generated__/TestPreloadedQueryWithCodesplitQuery_preloadable_graphql.res
+1 −1 ...ject-res-preloadable/src/__generated__/TestPreloadedQueryWithProvidedVariablesQuery_preloadable_graphql.res
+1 −1 compiler/test-project-res-preloadable/src/__generated__/TestPreloadedQuery_preloadable_graphql.res
+1 −1 compiler/test-project-res/src/__generated__/TestCatchAndFriends2Query_graphql.res
+1 −1 compiler/test-project-res/src/__generated__/TestCatchAndFriends3Query_graphql.res
+1 −1 compiler/test-project-res/src/__generated__/TestCatchAndFriendsQuery_graphql.res
+1 −1 compiler/test-project-res/src/__generated__/TestCodesplitQuery_graphql.res
+1 −1 compiler/test-project-res/src/__generated__/TestCustomScalars2Query_graphql.res
+1 −1 compiler/test-project-res/src/__generated__/TestCustomScalarsQuery_graphql.res
+1 −1 compiler/test-project-res/src/__generated__/TestFragmentQuery_graphql.res
+1 −1 compiler/test-project-res/src/__generated__/TestLocalPayloadQuery_graphql.res
+1 −1 compiler/test-project-res/src/__generated__/TestLocalPayloadViaNodeInterfaceQuery_graphql.res
+1 −1 compiler/test-project-res/src/__generated__/TestMissingFieldHandlersMeQuery_graphql.res
+1 −1 compiler/test-project-res/src/__generated__/TestMissingFieldHandlersQuery_graphql.res
+1 −1 compiler/test-project-res/src/__generated__/TestModelResolverAliasedQuery_graphql.res
+1 −1 compiler/test-project-res/src/__generated__/TestModelResolverInlineQuery_graphql.res
+1 −1 compiler/test-project-res/src/__generated__/TestMutationQuery_graphql.res
+1 −1 compiler/test-project-res/src/__generated__/TestNodeInterfaceOnInterfaceQuery_graphql.res
+1 −1 compiler/test-project-res/src/__generated__/TestNodeInterfaceOnUnionQuery_graphql.res
+1 −1 compiler/test-project-res/src/__generated__/TestNodeInterfaceQuery_graphql.res
+1 −1 compiler/test-project-res/src/__generated__/TestObserverQuery_graphql.res
+1 −1 compiler/test-project-res/src/__generated__/TestPaginationInNodeQuery_graphql.res
+1 −1 compiler/test-project-res/src/__generated__/TestPaginationInNodeRefetchQuery_graphql.res
+1 −1 compiler/test-project-res/src/__generated__/TestPaginationUnionQuery_graphql.res
+1 −1 compiler/test-project-res/src/__generated__/TestPaginationUnionRefetchQuery_graphql.res
+1 −1 compiler/test-project-res/src/__generated__/TestProvidedVariablesQuery_graphql.res
+1 −1 compiler/test-project-res/src/__generated__/TestQueryInputObjQuery_graphql.res
+1 −1 compiler/test-project-res/src/__generated__/TestQueryWithRequiredQuery_graphql.res
+1 −1 compiler/test-project-res/src/__generated__/TestQueryWithRequired_BubbleToTop_Query_graphql.res
+1 −1 compiler/test-project-res/src/__generated__/TestQuery_graphql.res
+1 −1 compiler/test-project-res/src/__generated__/TestRefetchingInNodeQuery_graphql.res
+1 −1 compiler/test-project-res/src/__generated__/TestRefetchingInNodeRefetchQuery_graphql.res
+1 −1 compiler/test-project-res/src/__generated__/TestRefetchingNoArgsRefetchQuery_graphql.res
+1 −1 compiler/test-project-res/src/__generated__/TestRefetchingQuery_graphql.res
+1 −1 compiler/test-project-res/src/__generated__/TestRefetchingRefetchQuery_graphql.res
+1 −1 compiler/test-project-res/src/__generated__/TestRelayResolversAllQuery_graphql.res
+1 −1 compiler/test-project-res/src/__generated__/TestSchemaExtensionsQuery_graphql.res
+1 −1 compiler/test-project-res/src/__generated__/TestSubscriptionQuery_graphql.res
+1 −1 compiler/test-project-res/src/__generated__/TestUnionFragmentExhaustiveQuery_graphql.res
+1 −1 compiler/test-project-res/src/__generated__/TestUnionFragmentQuery_graphql.res
+1 −1 compiler/test-project-res/src/__generated__/TestUnionsQuery_graphql.res
2 changes: 1 addition & 1 deletion packages/rescript-relay/__tests__/TestProviders.res
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@ module Wrapper = {
@react.component
let make = (~environment, ~children) =>
<React.Suspense fallback={<div> {React.string("Loading...")} </div>}>
<RescriptRelay.Context.Provider environment> children </RescriptRelay.Context.Provider>
<RescriptRelayReact.Context.Provider environment> children </RescriptRelayReact.Context.Provider>
</React.Suspense>
}
2 changes: 1 addition & 1 deletion packages/rescript-relay/__tests__/Test_connections.res
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ module Test = {
let user = Fragment.use(query.loggedInUser.fragmentRefs)
let friends = user.friendsConnection->Fragment.getConnectionNodes
let (addFriend, _isAddingFriend) = AddFriendMutation.use()
let environment = RescriptRelay.useEnvironmentFromContext()
let environment = RescriptRelayReact.useEnvironmentFromContext()
let addFriend = useFindAllConnectionIds =>
addFriend(
~variables={
Expand Down
2 changes: 1 addition & 1 deletion packages/rescript-relay/__tests__/Test_localPayload.res
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ module Fragment = %relay(`
module Test = {
@react.component
let make = () => {
let environment = RescriptRelay.useEnvironmentFromContext()
let environment = RescriptRelayReact.useEnvironmentFromContext()
let data = Query.use(~variables=())
let user = Fragment.use(data.loggedInUser.fragmentRefs)

Expand Down
2 changes: 1 addition & 1 deletion packages/rescript-relay/__tests__/Test_mutation.res
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ module InlineFragment = %relay(`
module Test = {
@react.component
let make = () => {
let environment = RescriptRelay.useEnvironmentFromContext()
let environment = RescriptRelayReact.useEnvironmentFromContext()
let query = Query.use(~variables=())
let data = Fragment.use(query.loggedInUser.fragmentRefs)
let (mutate, isMutating) = Mutation.use()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ module Mutation = %relay(`
module Test = {
@react.component
let make = () => {
let environment = RescriptRelay.useEnvironmentFromContext()
let environment = RescriptRelayReact.useEnvironmentFromContext()
let query = Query.use(~variables=())
let data = query.loggedInUser

Expand Down
2 changes: 1 addition & 1 deletion packages/rescript-relay/__tests__/Test_query.res
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ module TestPreloaded = {
module Test = {
@react.component
let make = () => {
let environment = RescriptRelay.useEnvironmentFromContext()
let environment = RescriptRelayReact.useEnvironmentFromContext()

let (status, setStatus) = React.useState(() => Some(RelaySchemaAssets_graphql.Online))
let (queryRefFromModule, setQueryRefFromModule) = React.useState(() => None)
Expand Down
2 changes: 1 addition & 1 deletion packages/rescript-relay/__tests__/Test_subscription.res
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ module UserUpdatedSubscription = %relay(`
module Test = {
@react.component
let make = () => {
let environment = RescriptRelay.useEnvironmentFromContext()
let environment = RescriptRelayReact.useEnvironmentFromContext()
let query = Query.use(~variables=())
let data = Fragment.use(query.loggedInUser.fragmentRefs)
let (ready, setReady) = React.useState(() => false)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ module Test = {
@react.component
let make = () => {
let query = Query.use(~variables=())
let environment = RescriptRelay.useEnvironmentFromContext()
let environment = RescriptRelayReact.useEnvironmentFromContext()
let {loggedInUser: {firstName, isOnline, updatableFragmentRefs, bestFriend}} = Fragment.use(
query.fragmentRefs,
)
Expand Down
2 changes: 1 addition & 1 deletion packages/rescript-relay/__tests__/Test_updatableQuery.res
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ module Test = {
@react.component
let make = () => {
let query = Query.use(~variables={id: "user-1"})
let environment = RescriptRelay.useEnvironmentFromContext()
let environment = RescriptRelayReact.useEnvironmentFromContext()

switch query.user {
| Some({firstName, isOnline, bestFriend}) =>
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading