-
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.
generate type assertion for interface model resolver field
Reviewed By: captbaritone Differential Revision: D54604216 fbshipit-source-id: c2c7e0421789e3acb9cb485c3383acb9ae2ec1cc
- Loading branch information
1 parent
f908dee
commit 66818de
Showing
13 changed files
with
522 additions
and
5 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
255 changes: 255 additions & 0 deletions
255
...relay_compiler_integration/fixtures/resolver_on_interface_of_all_weak_model_type.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,255 @@ | ||
==================================== INPUT ==================================== | ||
//- PersonComponent.js | ||
graphql`fragment PersonComponentFragment on IPerson { | ||
name | ||
}` | ||
|
||
|
||
//- UserTypeResolvers.js | ||
/** | ||
* @RelayResolver User implements IPerson | ||
* @weak | ||
*/ | ||
|
||
//- AdminTypeResolvers.js | ||
/** | ||
* @RelayResolver Admin implements IPerson | ||
* @weak | ||
*/ | ||
|
||
//- IPersonResolvers.js | ||
/** | ||
* @RelayResolver IPerson.name: String | ||
*/ | ||
|
||
//- relay.config.json | ||
{ | ||
"language": "flow", | ||
"jsModuleFormat": "haste", | ||
"schema": "schema.graphql", | ||
"schemaExtensions": [ | ||
"schema-extensions" | ||
], | ||
"featureFlags": { | ||
"enable_relay_resolver_transform": true, | ||
"enable_resolver_normalization_ast": true, | ||
"relay_resolver_enable_interface_output_type": { "kind": "enabled" } | ||
} | ||
} | ||
|
||
//- schema.graphql | ||
|
||
//- schema-extensions/extension.graphql | ||
interface IPerson { | ||
id: ID! | ||
} | ||
==================================== OUTPUT =================================== | ||
//- __generated__/Admin____relay_model_instance.graphql.js | ||
/** | ||
* <auto-generated> SignedSource<<523d097198aa2ffa2a1209e24ac2a337>> | ||
* @flow | ||
* @lightSyntaxTransform | ||
* @nogrep | ||
*/ | ||
|
||
/* eslint-disable */ | ||
|
||
'use strict'; | ||
|
||
/*:: | ||
import type { Fragment, ReaderFragment } from 'relay-runtime'; | ||
import type { Admin } from "AdminTypeResolvers"; | ||
import type { FragmentType } from "relay-runtime"; | ||
declare export opaque type Admin____relay_model_instance$fragmentType: FragmentType; | ||
export type Admin____relay_model_instance$data = {| | ||
+__relay_model_instance: Admin, | ||
+$fragmentType: Admin____relay_model_instance$fragmentType, | ||
|}; | ||
export type Admin____relay_model_instance$key = { | ||
+$data?: Admin____relay_model_instance$data, | ||
+$fragmentSpreads: Admin____relay_model_instance$fragmentType, | ||
... | ||
}; | ||
*/ | ||
|
||
var node/*: ReaderFragment*/ = { | ||
"argumentDefinitions": [], | ||
"kind": "Fragment", | ||
"metadata": null, | ||
"name": "Admin____relay_model_instance", | ||
"selections": [ | ||
{ | ||
"kind": "ClientExtension", | ||
"selections": [ | ||
{ | ||
"alias": null, | ||
"args": null, | ||
"kind": "ScalarField", | ||
"name": "__relay_model_instance", | ||
"storageKey": null | ||
} | ||
] | ||
} | ||
], | ||
"type": "Admin", | ||
"abstractKey": null | ||
}; | ||
|
||
module.exports = ((node/*: any*/)/*: Fragment< | ||
Admin____relay_model_instance$fragmentType, | ||
Admin____relay_model_instance$data, | ||
>*/); | ||
|
||
//- __generated__/PersonComponentFragment.graphql.js | ||
/** | ||
* <auto-generated> SignedSource<<af781562da3ea98baeb304e107b03b34>> | ||
* @flow | ||
* @lightSyntaxTransform | ||
* @nogrep | ||
*/ | ||
|
||
/* eslint-disable */ | ||
|
||
'use strict'; | ||
|
||
/*:: | ||
import type { Fragment, ReaderFragment } from 'relay-runtime'; | ||
import type { FragmentType } from "relay-runtime"; | ||
import {Admin as adminRelayModelInstanceResolverType} from "AdminTypeResolvers"; | ||
import {User as userRelayModelInstanceResolverType} from "UserTypeResolvers"; | ||
import {name as iPersonNameResolverType} from "IPersonResolvers"; | ||
// Type assertion validating that `iPersonNameResolverType` resolver is correctly implemented. | ||
// A type error here indicates that the type signature of the resolver module is incorrect. | ||
(iPersonNameResolverType: ( | ||
model: ReturnType<typeof adminRelayModelInstanceResolverType> | ReturnType<typeof userRelayModelInstanceResolverType>, | ||
) => ?string); | ||
declare export opaque type PersonComponentFragment$fragmentType: FragmentType; | ||
export type PersonComponentFragment$data = {| | ||
+name: ?string, | ||
+$fragmentType: PersonComponentFragment$fragmentType, | ||
|}; | ||
export type PersonComponentFragment$key = { | ||
+$data?: PersonComponentFragment$data, | ||
+$fragmentSpreads: PersonComponentFragment$fragmentType, | ||
... | ||
}; | ||
*/ | ||
|
||
var node/*: ReaderFragment*/ = { | ||
"argumentDefinitions": [], | ||
"kind": "Fragment", | ||
"metadata": null, | ||
"name": "PersonComponentFragment", | ||
"selections": [ | ||
{ | ||
"kind": "ClientExtension", | ||
"selections": [ | ||
{ | ||
"kind": "InlineFragment", | ||
"selections": [ | ||
{ | ||
"alias": null, | ||
"args": null, | ||
"fragment": { | ||
"args": null, | ||
"kind": "FragmentSpread", | ||
"name": "Admin____relay_model_instance" | ||
}, | ||
"kind": "RelayResolver", | ||
"name": "name", | ||
"resolverModule": require('relay-runtime/experimental').resolverDataInjector(require('Admin____relay_model_instance.graphql'), require('IPersonResolvers').name, '__relay_model_instance', true), | ||
"path": "name" | ||
} | ||
], | ||
"type": "Admin", | ||
"abstractKey": null | ||
}, | ||
{ | ||
"kind": "InlineFragment", | ||
"selections": [ | ||
{ | ||
"alias": null, | ||
"args": null, | ||
"fragment": { | ||
"args": null, | ||
"kind": "FragmentSpread", | ||
"name": "User____relay_model_instance" | ||
}, | ||
"kind": "RelayResolver", | ||
"name": "name", | ||
"resolverModule": require('relay-runtime/experimental').resolverDataInjector(require('User____relay_model_instance.graphql'), require('IPersonResolvers').name, '__relay_model_instance', true), | ||
"path": "name" | ||
} | ||
], | ||
"type": "User", | ||
"abstractKey": null | ||
} | ||
] | ||
} | ||
], | ||
"type": "IPerson", | ||
"abstractKey": "__isIPerson" | ||
}; | ||
|
||
(node/*: any*/).hash = "a57dd30bd59412781e9566e1553e2d70"; | ||
|
||
module.exports = ((node/*: any*/)/*: Fragment< | ||
PersonComponentFragment$fragmentType, | ||
PersonComponentFragment$data, | ||
>*/); | ||
|
||
//- __generated__/User____relay_model_instance.graphql.js | ||
/** | ||
* <auto-generated> SignedSource<<9a188c26688bb46f65ed80df4ae938c3>> | ||
* @flow | ||
* @lightSyntaxTransform | ||
* @nogrep | ||
*/ | ||
|
||
/* eslint-disable */ | ||
|
||
'use strict'; | ||
|
||
/*:: | ||
import type { Fragment, ReaderFragment } from 'relay-runtime'; | ||
import type { User } from "UserTypeResolvers"; | ||
import type { FragmentType } from "relay-runtime"; | ||
declare export opaque type User____relay_model_instance$fragmentType: FragmentType; | ||
export type User____relay_model_instance$data = {| | ||
+__relay_model_instance: User, | ||
+$fragmentType: User____relay_model_instance$fragmentType, | ||
|}; | ||
export type User____relay_model_instance$key = { | ||
+$data?: User____relay_model_instance$data, | ||
+$fragmentSpreads: User____relay_model_instance$fragmentType, | ||
... | ||
}; | ||
*/ | ||
|
||
var node/*: ReaderFragment*/ = { | ||
"argumentDefinitions": [], | ||
"kind": "Fragment", | ||
"metadata": null, | ||
"name": "User____relay_model_instance", | ||
"selections": [ | ||
{ | ||
"kind": "ClientExtension", | ||
"selections": [ | ||
{ | ||
"alias": null, | ||
"args": null, | ||
"kind": "ScalarField", | ||
"name": "__relay_model_instance", | ||
"storageKey": null | ||
} | ||
] | ||
} | ||
], | ||
"type": "User", | ||
"abstractKey": null | ||
}; | ||
|
||
module.exports = ((node/*: any*/)/*: Fragment< | ||
User____relay_model_instance$fragmentType, | ||
User____relay_model_instance$data, | ||
>*/); |
44 changes: 44 additions & 0 deletions
44
...ts/relay_compiler_integration/fixtures/resolver_on_interface_of_all_weak_model_type.input
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,44 @@ | ||
//- PersonComponent.js | ||
graphql`fragment PersonComponentFragment on IPerson { | ||
name | ||
}` | ||
|
||
|
||
//- UserTypeResolvers.js | ||
/** | ||
* @RelayResolver User implements IPerson | ||
* @weak | ||
*/ | ||
|
||
//- AdminTypeResolvers.js | ||
/** | ||
* @RelayResolver Admin implements IPerson | ||
* @weak | ||
*/ | ||
|
||
//- IPersonResolvers.js | ||
/** | ||
* @RelayResolver IPerson.name: String | ||
*/ | ||
|
||
//- relay.config.json | ||
{ | ||
"language": "flow", | ||
"jsModuleFormat": "haste", | ||
"schema": "schema.graphql", | ||
"schemaExtensions": [ | ||
"schema-extensions" | ||
], | ||
"featureFlags": { | ||
"enable_relay_resolver_transform": true, | ||
"enable_resolver_normalization_ast": true, | ||
"relay_resolver_enable_interface_output_type": { "kind": "enabled" } | ||
} | ||
} | ||
|
||
//- schema.graphql | ||
|
||
//- schema-extensions/extension.graphql | ||
interface IPerson { | ||
id: ID! | ||
} |
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
Oops, something went wrong.