-
Notifications
You must be signed in to change notification settings - Fork 1.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Type-safe updaters for TypeScript (#4370)
Summary: TypeScript [supports specifying different getter and setter types](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-1.html#unrelated-types-for-getters-and-setters) since 5.1, so I've updated the type generation logic around `updatable` and `assignable` to work with TypeScript. I've also updated the notice on the website and made the documentation around type-safe updaters available externally (if this is not wanted, just revert 33612d2). Companion PR for `types/relay-runtime`: DefinitelyTyped/DefinitelyTyped#66013 (Merged) Closes #4212 Pull Request resolved: #4370 Reviewed By: alunyov Differential Revision: D48990085 Pulled By: monicatang fbshipit-source-id: 51d1af5f4f9b7fc8480d672395544868c24a2c60
- Loading branch information
1 parent
16910c9
commit 9c7b92a
Showing
34 changed files
with
786 additions
and
55 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
26 changes: 26 additions & 0 deletions
26
...tests/generate_typescript/fixtures/regular-query-with-assignable-fragment-spread.expected
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
==================================== INPUT ==================================== | ||
query Foo { | ||
viewer { | ||
...Assignable_viewer | ||
} | ||
} | ||
|
||
fragment Assignable_viewer on Viewer @assignable { | ||
__typename | ||
} | ||
==================================== OUTPUT =================================== | ||
import { FragmentRefs } from "relay-runtime"; | ||
export type Foo$variables = {}; | ||
export type Foo$data = { | ||
readonly viewer: { | ||
readonly __typename: "Viewer"; | ||
readonly __id: string; | ||
readonly " $fragmentSpreads": FragmentRefs<"Assignable_viewer">; | ||
} | null; | ||
}; | ||
export type Foo = { | ||
response: Foo$data; | ||
variables: Foo$variables; | ||
}; | ||
------------------------------------------------------------------------------- | ||
import { FragmentRefs } from "relay-runtime"; |
9 changes: 9 additions & 0 deletions
9
.../tests/generate_typescript/fixtures/regular-query-with-assignable-fragment-spread.graphql
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
query Foo { | ||
viewer { | ||
...Assignable_viewer | ||
} | ||
} | ||
|
||
fragment Assignable_viewer on Viewer @assignable { | ||
__typename | ||
} |
48 changes: 48 additions & 0 deletions
48
.../tests/generate_typescript/fixtures/updatable-fragment-spread-and-regular-spread.expected
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
==================================== INPUT ==================================== | ||
query updatableFragmentSpreadAndRegularSpreadQuery { | ||
me { | ||
...updatableFragmentSpreadAndRegularSpread_updatable_user | ||
...updatableFragmentSpreadAndRegularSpread_user | ||
} | ||
} | ||
|
||
fragment updatableFragmentSpreadAndRegularSpread_updatable_user on User @updatable { | ||
firstName | ||
} | ||
|
||
fragment updatableFragmentSpreadAndRegularSpread_user on User { | ||
firstName | ||
} | ||
==================================== OUTPUT =================================== | ||
import { FragmentRefs } from "relay-runtime"; | ||
export type updatableFragmentSpreadAndRegularSpreadQuery$variables = {}; | ||
export type updatableFragmentSpreadAndRegularSpreadQuery$data = { | ||
readonly me: { | ||
readonly $updatableFragmentSpreads: FragmentRefs<"updatableFragmentSpreadAndRegularSpread_updatable_user">; | ||
readonly " $fragmentSpreads": FragmentRefs<"updatableFragmentSpreadAndRegularSpread_user">; | ||
} | null; | ||
}; | ||
export type updatableFragmentSpreadAndRegularSpreadQuery = { | ||
response: updatableFragmentSpreadAndRegularSpreadQuery$data; | ||
variables: updatableFragmentSpreadAndRegularSpreadQuery$variables; | ||
}; | ||
------------------------------------------------------------------------------- | ||
import { FragmentRefs } from "relay-runtime"; | ||
export type updatableFragmentSpreadAndRegularSpread_updatable_user$data = { | ||
firstName: string | null; | ||
readonly " $fragmentType": "updatableFragmentSpreadAndRegularSpread_updatable_user"; | ||
}; | ||
export type updatableFragmentSpreadAndRegularSpread_updatable_user$key = { | ||
readonly " $data"?: updatableFragmentSpreadAndRegularSpread_updatable_user$data; | ||
readonly $updatableFragmentSpreads: FragmentRefs<"updatableFragmentSpreadAndRegularSpread_updatable_user">; | ||
}; | ||
------------------------------------------------------------------------------- | ||
import { FragmentRefs } from "relay-runtime"; | ||
export type updatableFragmentSpreadAndRegularSpread_user$data = { | ||
readonly firstName: string | null; | ||
readonly " $fragmentType": "updatableFragmentSpreadAndRegularSpread_user"; | ||
}; | ||
export type updatableFragmentSpreadAndRegularSpread_user$key = { | ||
readonly " $data"?: updatableFragmentSpreadAndRegularSpread_user$data; | ||
readonly " $fragmentSpreads": FragmentRefs<"updatableFragmentSpreadAndRegularSpread_user">; | ||
}; |
14 changes: 14 additions & 0 deletions
14
...n/tests/generate_typescript/fixtures/updatable-fragment-spread-and-regular-spread.graphql
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
query updatableFragmentSpreadAndRegularSpreadQuery { | ||
me { | ||
...updatableFragmentSpreadAndRegularSpread_updatable_user | ||
...updatableFragmentSpreadAndRegularSpread_user | ||
} | ||
} | ||
|
||
fragment updatableFragmentSpreadAndRegularSpread_updatable_user on User @updatable { | ||
firstName | ||
} | ||
|
||
fragment updatableFragmentSpreadAndRegularSpread_user on User { | ||
firstName | ||
} |
47 changes: 47 additions & 0 deletions
47
...ay-typegen/tests/generate_typescript/fixtures/updatable-fragment-spread-multiple.expected
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
==================================== INPUT ==================================== | ||
query updatableFragmentSpreadAndRegularSpreadQuery { | ||
me { | ||
...updatableFragmentSpreadAndRegularSpread_updatable_user | ||
...updatableFragmentSpreadAndRegularSpread_2_updatable_user | ||
} | ||
} | ||
|
||
fragment updatableFragmentSpreadAndRegularSpread_updatable_user on User @updatable { | ||
firstName | ||
} | ||
|
||
fragment updatableFragmentSpreadAndRegularSpread_2_updatable_user on User @updatable { | ||
firstName | ||
} | ||
==================================== OUTPUT =================================== | ||
import { FragmentRefs } from "relay-runtime"; | ||
export type updatableFragmentSpreadAndRegularSpreadQuery$variables = {}; | ||
export type updatableFragmentSpreadAndRegularSpreadQuery$data = { | ||
readonly me: { | ||
readonly $updatableFragmentSpreads: FragmentRefs<"updatableFragmentSpreadAndRegularSpread_2_updatable_user" | "updatableFragmentSpreadAndRegularSpread_updatable_user">; | ||
} | null; | ||
}; | ||
export type updatableFragmentSpreadAndRegularSpreadQuery = { | ||
response: updatableFragmentSpreadAndRegularSpreadQuery$data; | ||
variables: updatableFragmentSpreadAndRegularSpreadQuery$variables; | ||
}; | ||
------------------------------------------------------------------------------- | ||
import { FragmentRefs } from "relay-runtime"; | ||
export type updatableFragmentSpreadAndRegularSpread_2_updatable_user$data = { | ||
firstName: string | null; | ||
readonly " $fragmentType": "updatableFragmentSpreadAndRegularSpread_2_updatable_user"; | ||
}; | ||
export type updatableFragmentSpreadAndRegularSpread_2_updatable_user$key = { | ||
readonly " $data"?: updatableFragmentSpreadAndRegularSpread_2_updatable_user$data; | ||
readonly $updatableFragmentSpreads: FragmentRefs<"updatableFragmentSpreadAndRegularSpread_2_updatable_user">; | ||
}; | ||
------------------------------------------------------------------------------- | ||
import { FragmentRefs } from "relay-runtime"; | ||
export type updatableFragmentSpreadAndRegularSpread_updatable_user$data = { | ||
firstName: string | null; | ||
readonly " $fragmentType": "updatableFragmentSpreadAndRegularSpread_updatable_user"; | ||
}; | ||
export type updatableFragmentSpreadAndRegularSpread_updatable_user$key = { | ||
readonly " $data"?: updatableFragmentSpreadAndRegularSpread_updatable_user$data; | ||
readonly $updatableFragmentSpreads: FragmentRefs<"updatableFragmentSpreadAndRegularSpread_updatable_user">; | ||
}; |
14 changes: 14 additions & 0 deletions
14
...lay-typegen/tests/generate_typescript/fixtures/updatable-fragment-spread-multiple.graphql
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
query updatableFragmentSpreadAndRegularSpreadQuery { | ||
me { | ||
...updatableFragmentSpreadAndRegularSpread_updatable_user | ||
...updatableFragmentSpreadAndRegularSpread_2_updatable_user | ||
} | ||
} | ||
|
||
fragment updatableFragmentSpreadAndRegularSpread_updatable_user on User @updatable { | ||
firstName | ||
} | ||
|
||
fragment updatableFragmentSpreadAndRegularSpread_2_updatable_user on User @updatable { | ||
firstName | ||
} |
32 changes: 32 additions & 0 deletions
32
...rates/relay-typegen/tests/generate_typescript/fixtures/updatable-fragment-spread.expected
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
==================================== INPUT ==================================== | ||
query updatableFragmentSpreadQuery { | ||
me { | ||
...updatableFragmentSpread_updatable_user | ||
} | ||
} | ||
|
||
fragment updatableFragmentSpread_updatable_user on User @updatable { | ||
firstName | ||
} | ||
==================================== OUTPUT =================================== | ||
import { FragmentRefs } from "relay-runtime"; | ||
export type updatableFragmentSpreadQuery$variables = {}; | ||
export type updatableFragmentSpreadQuery$data = { | ||
readonly me: { | ||
readonly $updatableFragmentSpreads: FragmentRefs<"updatableFragmentSpread_updatable_user">; | ||
} | null; | ||
}; | ||
export type updatableFragmentSpreadQuery = { | ||
response: updatableFragmentSpreadQuery$data; | ||
variables: updatableFragmentSpreadQuery$variables; | ||
}; | ||
------------------------------------------------------------------------------- | ||
import { FragmentRefs } from "relay-runtime"; | ||
export type updatableFragmentSpread_updatable_user$data = { | ||
firstName: string | null; | ||
readonly " $fragmentType": "updatableFragmentSpread_updatable_user"; | ||
}; | ||
export type updatableFragmentSpread_updatable_user$key = { | ||
readonly " $data"?: updatableFragmentSpread_updatable_user$data; | ||
readonly $updatableFragmentSpreads: FragmentRefs<"updatableFragmentSpread_updatable_user">; | ||
}; |
9 changes: 9 additions & 0 deletions
9
...crates/relay-typegen/tests/generate_typescript/fixtures/updatable-fragment-spread.graphql
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
query updatableFragmentSpreadQuery { | ||
me { | ||
...updatableFragmentSpread_updatable_user | ||
} | ||
} | ||
|
||
fragment updatableFragmentSpread_updatable_user on User @updatable { | ||
firstName | ||
} |
40 changes: 40 additions & 0 deletions
40
...ests/generate_typescript/fixtures/updatable-operation-assignable-fragment-plural.expected
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
==================================== INPUT ==================================== | ||
query UpdatableQuery @updatable { | ||
node(id: 4) { | ||
... on User { | ||
__typename | ||
parents { | ||
...Assignable_user | ||
} | ||
} | ||
} | ||
} | ||
|
||
fragment Assignable_user on User @assignable { | ||
__typename | ||
} | ||
==================================== OUTPUT =================================== | ||
import { FragmentRefs } from "relay-runtime"; | ||
export type UpdatableQuery$variables = {}; | ||
export type UpdatableQuery$data = { | ||
get node(): { | ||
readonly __typename: "User"; | ||
get parents(): ReadonlyArray<{}>; | ||
set parents(value: ReadonlyArray<{ | ||
readonly __typename: "User"; | ||
readonly __id: string; | ||
readonly " $fragmentSpreads": FragmentRefs<"Assignable_user">; | ||
}>); | ||
} | { | ||
// This will never be '%other', but we need some | ||
// value in case none of the concrete values match. | ||
readonly __typename: "%other"; | ||
} | null; | ||
set node(value: null | undefined); | ||
}; | ||
export type UpdatableQuery = { | ||
response: UpdatableQuery$data; | ||
variables: UpdatableQuery$variables; | ||
}; | ||
------------------------------------------------------------------------------- | ||
import { FragmentRefs } from "relay-runtime"; |
14 changes: 14 additions & 0 deletions
14
...tests/generate_typescript/fixtures/updatable-operation-assignable-fragment-plural.graphql
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
query UpdatableQuery @updatable { | ||
node(id: 4) { | ||
... on User { | ||
__typename | ||
parents { | ||
...Assignable_user | ||
} | ||
} | ||
} | ||
} | ||
|
||
fragment Assignable_user on User @assignable { | ||
__typename | ||
} |
Oops, something went wrong.