Skip to content

Commit 6e4ff95

Browse files
captbaritonefacebook-github-bot
authored andcommitted
Unify handling of plural/nullabile resolver field types
Reviewed By: voideanvalue Differential Revision: D46163784 fbshipit-source-id: 53d45bb87db299460404f7fc4cc4a56750bbf64e
1 parent 2732238 commit 6e4ff95

File tree

126 files changed

+714
-262
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

126 files changed

+714
-262
lines changed

compiler/crates/relay-typegen/src/visit.rs

Lines changed: 19 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -330,9 +330,8 @@ fn generate_resolver_type(
330330
if is_relay_resolver_type(typegen_context, schema_field) {
331331
AST::Mixed
332332
} else {
333-
transform_type_reference_into_ast(&schema_field.type_, |type_| {
334-
expect_scalar_type(typegen_context, encountered_enums, custom_scalars, type_)
335-
})
333+
let type_ = &schema_field.type_.inner();
334+
expect_scalar_type(typegen_context, encountered_enums, custom_scalars, type_)
336335
}
337336
}
338337
ResolverOutputTypeInfo::Composite(normalization_info) => {
@@ -341,38 +340,23 @@ fn generate_resolver_type(
341340
Some(normalization_info.normalization_operation.location),
342341
);
343342

344-
let type_ = AST::Nullable(Box::new(AST::RawType(
345-
normalization_info.normalization_operation.item.0,
346-
)));
347-
348-
let ast = if let Some(field_type) = normalization_info.weak_object_instance_field {
349-
transform_type_reference_into_ast(
350-
&typegen_context.schema.field(field_type).type_,
351-
|type_| {
352-
expect_scalar_type(
353-
typegen_context,
354-
encountered_enums,
355-
custom_scalars,
356-
type_,
357-
)
358-
},
359-
)
343+
if let Some(field_type) = normalization_info.weak_object_instance_field {
344+
let type_ = &typegen_context.schema.field(field_type).type_.inner();
345+
expect_scalar_type(typegen_context, encountered_enums, custom_scalars, type_)
360346
} else {
361-
type_
362-
};
363-
364-
if normalization_info.plural {
365-
AST::ReadOnlyArray(Box::new(ast))
366-
} else {
367-
ast
347+
AST::RawType(normalization_info.normalization_operation.item.0)
368348
}
369349
}
370-
ResolverOutputTypeInfo::EdgeTo => {
371-
create_edge_to_return_type_ast(schema_field, typegen_context.schema, runtime_imports)
372-
}
350+
ResolverOutputTypeInfo::EdgeTo => create_edge_to_return_type_ast(
351+
&schema_field.type_.inner(),
352+
typegen_context.schema,
353+
runtime_imports,
354+
),
373355
ResolverOutputTypeInfo::Legacy => AST::Mixed,
374356
};
375357

358+
let ast = transform_type_reference_into_ast(&schema_field.type_, |_| inner_ast);
359+
376360
let return_type = if matches!(
377361
typegen_context.project_config.typegen_config.language,
378362
TypegenLanguage::TypeScript
@@ -383,10 +367,10 @@ fn generate_resolver_type(
383367
runtime_imports.resolver_live_state_type = true;
384368
AST::GenericType {
385369
outer: *LIVE_STATE_TYPE,
386-
inner: Box::new(inner_ast),
370+
inner: Box::new(ast),
387371
}
388372
} else {
389-
inner_ast
373+
ast
390374
};
391375

392376
AST::AssertFunctionType(FunctionTypeAssertion {
@@ -2324,16 +2308,13 @@ fn has_typename_selection(selections: &[TypeSelection]) -> bool {
23242308
}
23252309

23262310
fn create_edge_to_return_type_ast(
2327-
schema_field: &Field,
2311+
inner_type: &Type,
23282312
schema: &SDLSchema,
23292313
runtime_imports: &mut RuntimeImports,
23302314
) -> AST {
23312315
// Mark that the DataID type is used, and must be imported.
23322316
runtime_imports.data_id_type = true;
23332317

2334-
let schema_type_reference = &schema_field.type_;
2335-
let inner_type = schema_type_reference.inner();
2336-
23372318
let mut fields = vec![Prop::KeyValuePair(KeyValuePairProp {
23382319
// TODO consider reading the id field from the config. This must be done
23392320
// in conjunction with runtime changes.
@@ -2342,10 +2323,10 @@ fn create_edge_to_return_type_ast(
23422323
read_only: true,
23432324
optional: false,
23442325
})];
2345-
if inner_type.is_abstract_type() && schema.is_extension_type(inner_type) {
2326+
if inner_type.is_abstract_type() && schema.is_extension_type(*inner_type) {
23462327
// Note: there is currently no way to create a resolver that returns an abstract
23472328
// client type, so this branch will not be hit until we enable that feature.
2348-
let interface_id = schema_field.type_.inner().get_interface_id().expect(
2329+
let interface_id = inner_type.get_interface_id().expect(
23492330
"Only interfaces are supported here. This indicates a bug in the Relay compiler.",
23502331
);
23512332
let valid_typenames = schema
@@ -2368,9 +2349,7 @@ fn create_edge_to_return_type_ast(
23682349
}))
23692350
}
23702351

2371-
transform_type_reference_into_ast(schema_type_reference, |_| {
2372-
AST::ExactObject(ExactObject::new(fields))
2373-
})
2352+
AST::ExactObject(ExactObject::new(fields))
23742353
}
23752354

23762355
fn expect_scalar_type(

compiler/crates/relay-typegen/tests/generate_flow/fixtures/relay-live-resolver-no-fragment.expected

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import type { LiveState } from "relay-runtime/store/experimental-live-resolvers/
1919
import userPopStarNameResolverType from "PopStarNameResolver";
2020
// Type assertion validating that `userPopStarNameResolverType` resolver is correctly implemented.
2121
// A type error here indicates that the type signature of the resolver module is incorrect.
22-
(userPopStarNameResolverType: () => LiveState<mixed>);
22+
(userPopStarNameResolverType: () => LiveState<?mixed>);
2323
export type relayResolver_Query$variables = {||};
2424
export type relayResolver_Query$data = {|
2525
+me: ?{|

compiler/crates/relay-typegen/tests/generate_flow/fixtures/relay-live-resolver-with-field-args-no-fragment.expected

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import userPopStarNameResolverType from "PopStarNameResolver";
2828
count: ?number,
2929
greeting: string,
3030
|},
31-
) => LiveState<mixed>);
31+
) => LiveState<?mixed>);
3232
export type relayResolver_Query$variables = {||};
3333
export type relayResolver_Query$data = {|
3434
+me: ?{|

compiler/crates/relay-typegen/tests/generate_flow/fixtures/relay-live-resolver-with-field-args.expected

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ import userPopStarNameResolverType from "PopStarNameResolver";
3131
count: ?number,
3232
greeting: string,
3333
|},
34-
) => LiveState<mixed>);
34+
) => LiveState<?mixed>);
3535
export type relayResolver_Query$variables = {||};
3636
export type relayResolver_Query$data = {|
3737
+me: ?{|

compiler/crates/relay-typegen/tests/generate_flow/fixtures/relay-live-resolver.expected

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import userPopStarNameResolverType from "PopStarNameResolver";
2727
// A type error here indicates that the type signature of the resolver module is incorrect.
2828
(userPopStarNameResolverType: (
2929
rootKey: relayResolver_PopStarNameResolverFragment_name$key,
30-
) => LiveState<mixed>);
30+
) => LiveState<?mixed>);
3131
export type relayResolver_Query$variables = {||};
3232
export type relayResolver_Query$data = {|
3333
+me: ?{|

compiler/crates/relay-typegen/tests/generate_flow/fixtures/relay-resolver-in-fragment.expected

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ import userPopStarNameResolverType from "PopStarNameResolver";
3636
// A type error here indicates that the type signature of the resolver module is incorrect.
3737
(userPopStarNameResolverType: (
3838
rootKey: relayResolver_PopStarNameResolverFragment_name$key,
39-
) => mixed);
39+
) => ?mixed);
4040
declare export opaque type relayResolver_consumer$fragmentType: FragmentType;
4141
export type relayResolver_consumer$data = {|
4242
+pop_star_name: ?$Call<<R>((...empty[]) => R) => R, typeof userPopStarNameResolverType>,

compiler/crates/relay-typegen/tests/generate_flow/fixtures/relay-resolver-inject-fragment-data.expected

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import userPopStarNameResolverType from "PopStarNameResolver";
2121
// A type error here indicates that the type signature of the resolver module is incorrect.
2222
(userPopStarNameResolverType: (
2323
name: relayResolver_PopStarNameResolverFragment_name$data['name'],
24-
) => mixed);
24+
) => ?mixed);
2525
export type relayResolver_Query$variables = {||};
2626
export type relayResolver_Query$data = {|
2727
+me: ?{|

compiler/crates/relay-typegen/tests/generate_flow/fixtures/relay-resolver-multiple-consumers.expected

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import userPopStarNameResolverType from "PopStarNameResolver";
2828
// A type error here indicates that the type signature of the resolver module is incorrect.
2929
(userPopStarNameResolverType: (
3030
rootKey: relayResolver_PopStarNameResolverFragment_name$key,
31-
) => mixed);
31+
) => ?mixed);
3232
export type relayResolver_Query$variables = {||};
3333
export type relayResolver_Query$data = {|
3434
+me: ?{|

compiler/crates/relay-typegen/tests/generate_flow/fixtures/relay-resolver-named-import.expected

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import {pop_star_name as userPopStarNameResolverType} from "PopStarNameResolver"
2626
// A type error here indicates that the type signature of the resolver module is incorrect.
2727
(userPopStarNameResolverType: (
2828
rootKey: relayResolverNamedImport_PopStarNameResolverFragment_name$key,
29-
) => mixed);
29+
) => ?mixed);
3030
export type relayResolverNamedImport_Query$variables = {||};
3131
export type relayResolverNamedImport_Query$data = {|
3232
+me: ?{|

compiler/crates/relay-typegen/tests/generate_flow/fixtures/relay-resolver-raw-response.expected

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ import userPopStarNameResolverType from "PopStarNameResolver";
6363
// A type error here indicates that the type signature of the resolver module is incorrect.
6464
(userPopStarNameResolverType: (
6565
rootKey: relayResolver_PopStarNameResolverFragment_name$key,
66-
) => mixed);
66+
) => ?mixed);
6767
declare export opaque type relayResolver_user$fragmentType: FragmentType;
6868
export type relayResolver_user$data = {|
6969
+pop_star_name: ?$Call<<R>((...empty[]) => R) => R, typeof userPopStarNameResolverType>,

0 commit comments

Comments
 (0)