Skip to content

Commit

Permalink
non-nullable __relay_model_instance
Browse files Browse the repository at this point in the history
Summary: I don't think it make sense for a resolver for a subfield on model type to have to handle the model instance being nullable. If someone wants that, they should make the flow/typescript type for the model be nullable (e.g. `TodoModelType` in `relay-runtime/store/__tests__/resolvers/TodoModel.js`)

Reviewed By: captbaritone

Differential Revision: D46488624

fbshipit-source-id: c697b86f3b3ca403bed3b4b3933cb3448d3e74e6
  • Loading branch information
voideanvalue authored and facebook-github-bot committed Jun 6, 2023
1 parent b91ee44 commit 147498f
Show file tree
Hide file tree
Showing 24 changed files with 70 additions and 65 deletions.
12 changes: 8 additions & 4 deletions compiler/crates/relay-docblock/src/ir.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1051,7 +1051,7 @@ impl ResolverIr for StrongObjectIr {
},
generate_model_instance_field(
schema_info,
*INT_TYPE,
RESOLVER_VALUE_SCALAR_NAME.0,
None,
self.directives(None, schema_info),
self.location(),
Expand Down Expand Up @@ -1381,9 +1381,13 @@ fn generate_model_instance_field(

FieldDefinition {
name: string_key_as_identifier(*RESOLVER_MODEL_INSTANCE_FIELD_NAME),
type_: TypeAnnotation::Named(NamedTypeAnnotation {
name: string_key_as_identifier(type_name),
}),
type_: TypeAnnotation::NonNull(Box::new(NonNullTypeAnnotation {
span,
type_: TypeAnnotation::Named(NamedTypeAnnotation {
name: string_key_as_identifier(type_name),
}),
exclamation: dummy_token(span),
})),
arguments: None,
directives,
description,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ graphql`
==================================== OUTPUT ===================================
type MyType @__RelayResolverModel {
id: ID!
__relay_model_instance: Int @relay_resolver(import_path: "/path/to/test/fixture/legacy-relay-resolver-with-root-fragment-on-model.js", fragment_name: "MyType__id", generated_fragment: true, inject_fragment_data: "id", import_name: "MyType") @unselectable(reason: "This field is intended only for Relay's internal use")
__relay_model_instance: RelayResolverValue! @relay_resolver(import_path: "/path/to/test/fixture/legacy-relay-resolver-with-root-fragment-on-model.js", fragment_name: "MyType__id", generated_fragment: true, inject_fragment_data: "id", import_name: "MyType") @unselectable(reason: "This field is intended only for Relay's internal use")
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,5 @@ interface IFoo {
==================================== OUTPUT ===================================
type ClientUser implements IFoo @__RelayResolverModel {
id: ID!
__relay_model_instance: Int @relay_resolver(import_path: "/path/to/test/fixture/relay-resolver-strong-object-with-implements.js", fragment_name: "ClientUser__id", generated_fragment: true, inject_fragment_data: "id", import_name: "ClientUser") @unselectable(reason: "This field is intended only for Relay's internal use")
__relay_model_instance: RelayResolverValue! @relay_resolver(import_path: "/path/to/test/fixture/relay-resolver-strong-object-with-implements.js", fragment_name: "ClientUser__id", generated_fragment: true, inject_fragment_data: "id", import_name: "ClientUser") @unselectable(reason: "This field is intended only for Relay's internal use")
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,5 @@ interface IBar {
==================================== OUTPUT ===================================
type ClientUser implements IFoo & IBar @__RelayResolverModel {
id: ID!
__relay_model_instance: Int @relay_resolver(import_path: "/path/to/test/fixture/relay-resolver-strong-object-with-multiple-implements.js", fragment_name: "ClientUser__id", generated_fragment: true, inject_fragment_data: "id", import_name: "ClientUser") @unselectable(reason: "This field is intended only for Relay's internal use")
__relay_model_instance: RelayResolverValue! @relay_resolver(import_path: "/path/to/test/fixture/relay-resolver-strong-object-with-multiple-implements.js", fragment_name: "ClientUser__id", generated_fragment: true, inject_fragment_data: "id", import_name: "ClientUser") @unselectable(reason: "This field is intended only for Relay's internal use")
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,5 @@
==================================== OUTPUT ===================================
type ClientUser @__RelayResolverModel {
id: ID!
__relay_model_instance: Int @relay_resolver(import_path: "/path/to/test/fixture/relay-resolver-strong-object.js", fragment_name: "ClientUser__id", generated_fragment: true, inject_fragment_data: "id", import_name: "ClientUser") @unselectable(reason: "This field is intended only for Relay's internal use")
__relay_model_instance: RelayResolverValue! @relay_resolver(import_path: "/path/to/test/fixture/relay-resolver-strong-object.js", fragment_name: "ClientUser__id", generated_fragment: true, inject_fragment_data: "id", import_name: "ClientUser") @unselectable(reason: "This field is intended only for Relay's internal use")
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ graphql`
==================================== OUTPUT ===================================
type MyType @__RelayResolverModel {
id: ID!
__relay_model_instance: Int @relay_resolver(import_path: "/path/to/test/fixture/terse-relay-resolver-with-root-fragment-on-model.js", fragment_name: "MyType__id", generated_fragment: true, inject_fragment_data: "id", import_name: "MyType") @unselectable(reason: "This field is intended only for Relay's internal use")
__relay_model_instance: RelayResolverValue! @relay_resolver(import_path: "/path/to/test/fixture/terse-relay-resolver-with-root-fragment-on-model.js", fragment_name: "MyType__id", generated_fragment: true, inject_fragment_data: "id", import_name: "MyType") @unselectable(reason: "This field is intended only for Relay's internal use")
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,5 +23,5 @@ scalar MyClientTypeModel @__RelayCustomScalar(path: "/path/to/test/fixture/weak-


type MyClientType @__RelayResolverModel @RelayOutputType @__RelayWeakObject @deprecated(reason: "Don't use this any more") {
__relay_model_instance: MyClientTypeModel @unselectable(reason: "This field is intended only for Relay's internal use")
__relay_model_instance: MyClientTypeModel! @unselectable(reason: "This field is intended only for Relay's internal use")
}
2 changes: 2 additions & 0 deletions packages/react-relay/__tests__/RelayResolverModel-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -366,6 +366,8 @@ describe.each([
invariant(false, 'Expected to suspend.');
}

addTodo('Test todo');

const renderer = TestRenderer.create(
<EnvironmentWrapper environment={environment}>
<TodoComponentWithNullWeakClientEdge todoID="todo-1" />
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.

Loading

0 comments on commit 147498f

Please sign in to comment.