diff --git a/change/@nova-react-8a6bad44-a7eb-4078-8e64-97d0eaeedc62.json b/change/@nova-react-8a6bad44-a7eb-4078-8e64-97d0eaeedc62.json new file mode 100644 index 0000000..6a98375 --- /dev/null +++ b/change/@nova-react-8a6bad44-a7eb-4078-8e64-97d0eaeedc62.json @@ -0,0 +1,7 @@ +{ + "type": "minor", + "comment": "Add support for $fragmentSpreads format", + "packageName": "@nova/react", + "email": "mark@thedutchies.com", + "dependentChangeType": "patch" +} diff --git a/packages/nova-react/src/graphql/hooks.test.tsx b/packages/nova-react/src/graphql/hooks.test.tsx index e9f6e8a..031d07a 100644 --- a/packages/nova-react/src/graphql/hooks.test.tsx +++ b/packages/nova-react/src/graphql/hooks.test.tsx @@ -135,6 +135,23 @@ describe(useFragment, () => { useFragment(fragment, opaqueFragmentRef); void _; }); + + it("supports the $fragmentSpreads format that is generated from Relay 13", () => { + type SomeFragment$data = { someKey: string }; + type SomeFragment$key = { + readonly " $data"?: SomeFragment$data; + readonly " $fragmentSpreads": FragmentRefs<"SomeFragment">; + }; + + const fragment = {} as unknown as GraphQLTaggedNode; + const opaqueFragmentRef = {} as unknown as SomeFragment$key; + + // This test just checks that there are no TS errors. Alas the test suite currently won't fail if that were the + // case, but at least there's a test that covers the intent. + const _: () => SomeFragment$data = () => + useFragment(fragment, opaqueFragmentRef); + void _; + }); }); describe(useRefetchableFragment, () => { diff --git a/packages/nova-react/src/graphql/types.ts b/packages/nova-react/src/graphql/types.ts index 5893dd4..c35e2d8 100644 --- a/packages/nova-react/src/graphql/types.ts +++ b/packages/nova-react/src/graphql/types.ts @@ -21,8 +21,10 @@ export interface _RefType { " $refType": Ref; } -export interface _FragmentRefs { +export type _FragmentRefs = { " $fragmentRefs": FragmentRefs; +} | { + " $fragmentSpreads": FragmentRefs; } // This is used in the actual artifacts to define the various fragment references a container holds. @@ -44,6 +46,9 @@ export type FragmentReference = unknown; export type KeyType = Readonly<{ " $data"?: TData; " $fragmentRefs": FragmentReference; +}> | Readonly<{ + " $data"?: TData; + " $fragmentSpreads": FragmentReference; }>; export type KeyTypeData<