@@ -429,6 +429,28 @@ function createVisitor(options: TypeGeneratorOptions): IRVisitor.NodeVisitor {
429
429
return [ selection ] ;
430
430
} ) ;
431
431
state . generatedFragments . add ( node . name ) ;
432
+
433
+ const refTypeName = getRefTypeName ( node . name ) ;
434
+ const refTypeDataProperty = objectTypeProperty (
435
+ "$data" ,
436
+ ts . createTypeReferenceNode ( `${ node . name } $data` , undefined )
437
+ ) ;
438
+ refTypeDataProperty . questionToken = ts . createToken (
439
+ ts . SyntaxKind . QuestionToken
440
+ ) ;
441
+ const refTypeFragmentRefProperty = objectTypeProperty (
442
+ "$fragmentRefs" ,
443
+ ts . createTypeReferenceNode (
444
+ getOldFragmentTypeName ( node . name ) ,
445
+ undefined
446
+ )
447
+ ) ;
448
+ const isPluralFragment = isPlural ( node ) ;
449
+ const refType = exactObjectTypeAnnotation ( [
450
+ refTypeDataProperty ,
451
+ refTypeFragmentRefProperty
452
+ ] ) ;
453
+
432
454
const unmasked = node . metadata != null && node . metadata . mask === false ;
433
455
const baseType = selectionsToAST (
434
456
selections ,
@@ -445,7 +467,16 @@ function createVisitor(options: TypeGeneratorOptions): IRVisitor.NodeVisitor {
445
467
return [
446
468
...getFragmentRefsTypeImport ( state ) ,
447
469
...getEnumDefinitions ( state ) ,
448
- exportType ( node . name , type )
470
+ exportType ( node . name , type ) ,
471
+ exportType (
472
+ refTypeName ,
473
+ isPluralFragment
474
+ ? ts . createTypeReferenceNode (
475
+ ts . createIdentifier ( "ReadonlyArray" ) ,
476
+ [ refType ]
477
+ )
478
+ : refType
479
+ )
449
480
] ;
450
481
} ,
451
482
InlineFragment ( node ) {
@@ -891,6 +922,14 @@ function stringLiteralTypeAnnotation(name: string): ts.TypeNode {
891
922
return ts . createLiteralTypeNode ( ts . createLiteral ( name ) ) ;
892
923
}
893
924
925
+ function getOldFragmentTypeName ( name : string ) {
926
+ return `${ name } $ref` ;
927
+ }
928
+
929
+ function getRefTypeName ( name : string ) : string {
930
+ return `${ name } $key` ;
931
+ }
932
+
894
933
// Should match FLOW_TRANSFORMS array
895
934
// https://github.com/facebook/relay/blob/v6.0.0/packages/relay-compiler/language/javascript/RelayFlowGenerator.js#L621-L627
896
935
export const transforms : TypeGenerator [ "transforms" ] = [
0 commit comments