@@ -634,7 +634,7 @@ export class BaseResolversVisitor<
634
634
> extends BaseVisitor < TRawConfig , TPluginConfig > {
635
635
protected _parsedConfig : TPluginConfig ;
636
636
protected _declarationBlockConfig : DeclarationBlockConfig = { } ;
637
- protected _collectedResolvers : { [ key : string ] : string } = { } ;
637
+ protected _collectedResolvers : { [ key : string ] : { typename : string ; baseGeneratedTypename ?: string } } = { } ;
638
638
protected _collectedDirectiveResolvers : { [ key : string ] : string } = { } ;
639
639
protected _variablesTransformer : OperationVariablesToObject ;
640
640
protected _usedMappers : { [ key : string ] : boolean } = { } ;
@@ -1264,12 +1264,13 @@ export class BaseResolversVisitor<
1264
1264
return this . _hasFederation ;
1265
1265
}
1266
1266
1267
- public getRootResolver ( ) : string {
1267
+ public getRootResolver ( ) : { content : string ; generatedResolverTypes : Record < string , { name : string } > } {
1268
1268
const name = this . convertName ( this . config . allResolversTypeName ) ;
1269
1269
const declarationKind = 'type' ;
1270
1270
const contextType = `<ContextType = ${ this . config . contextType . type } >` ;
1271
1271
1272
- return [
1272
+ const generatedResolverTypes : Record < string , { name : string } > = { } ;
1273
+ const content = [
1273
1274
new DeclarationBlock ( this . _declarationBlockConfig )
1274
1275
. export ( )
1275
1276
. asKind ( declarationKind )
@@ -1279,11 +1280,20 @@ export class BaseResolversVisitor<
1279
1280
. map ( schemaTypeName => {
1280
1281
const resolverType = this . _collectedResolvers [ schemaTypeName ] ;
1281
1282
1282
- return indent ( this . formatRootResolver ( schemaTypeName , resolverType , declarationKind ) ) ;
1283
+ if ( resolverType . baseGeneratedTypename ) {
1284
+ generatedResolverTypes [ schemaTypeName ] = { name : resolverType . baseGeneratedTypename } ;
1285
+ }
1286
+
1287
+ return indent ( this . formatRootResolver ( schemaTypeName , resolverType . typename , declarationKind ) ) ;
1283
1288
} )
1284
1289
. join ( '\n' )
1285
1290
) . string ,
1286
1291
] . join ( '\n' ) ;
1292
+
1293
+ return {
1294
+ content,
1295
+ generatedResolverTypes,
1296
+ } ;
1287
1297
}
1288
1298
1289
1299
protected formatRootResolver ( schemaTypeName : string , resolverType : string , declarationKind : DeclarationKind ) : string {
@@ -1536,7 +1546,10 @@ export class BaseResolversVisitor<
1536
1546
. withName ( name , `<ContextType = ${ this . config . contextType . type } , ${ this . transformParentGenericType ( parentType ) } >` )
1537
1547
. withBlock ( fieldsContent . join ( '\n' ) ) ;
1538
1548
1539
- this . _collectedResolvers [ node . name as any ] = name + '<ContextType>' ;
1549
+ this . _collectedResolvers [ node . name as any ] = {
1550
+ typename : name + '<ContextType>' ,
1551
+ baseGeneratedTypename : name ,
1552
+ } ;
1540
1553
1541
1554
return block . string ;
1542
1555
}
@@ -1552,7 +1565,10 @@ export class BaseResolversVisitor<
1552
1565
. map ( f => `'${ f } '` )
1553
1566
. join ( ' | ' ) ;
1554
1567
1555
- this . _collectedResolvers [ node . name as any ] = name + '<ContextType>' ;
1568
+ this . _collectedResolvers [ node . name as any ] = {
1569
+ typename : name + '<ContextType>' ,
1570
+ baseGeneratedTypename : name ,
1571
+ } ;
1556
1572
const parentType = this . getParentTypeToUse ( node . name as any as string ) ;
1557
1573
1558
1574
return new DeclarationBlock ( this . _declarationBlockConfig )
@@ -1577,7 +1593,9 @@ export class BaseResolversVisitor<
1577
1593
}
1578
1594
1579
1595
this . _hasScalars = true ;
1580
- this . _collectedResolvers [ node . name as any ] = 'GraphQLScalarType' ;
1596
+ this . _collectedResolvers [ node . name as any ] = {
1597
+ typename : 'GraphQLScalarType' ,
1598
+ } ;
1581
1599
1582
1600
return new DeclarationBlock ( {
1583
1601
...this . _declarationBlockConfig ,
@@ -1667,7 +1685,10 @@ export class BaseResolversVisitor<
1667
1685
}
1668
1686
1669
1687
const name = this . convertName ( node , { suffix : this . config . resolverTypeSuffix } ) ;
1670
- this . _collectedResolvers [ rawTypeName ] = name ;
1688
+ this . _collectedResolvers [ rawTypeName ] = {
1689
+ typename : name ,
1690
+ baseGeneratedTypename : name ,
1691
+ } ;
1671
1692
const hasExplicitValues = this . config . enumValues [ rawTypeName ] ?. mappedValues ;
1672
1693
1673
1694
return new DeclarationBlock ( this . _declarationBlockConfig )
@@ -1689,7 +1710,10 @@ export class BaseResolversVisitor<
1689
1710
const allTypesMap = this . _schema . getTypeMap ( ) ;
1690
1711
const implementingTypes : string [ ] = [ ] ;
1691
1712
1692
- this . _collectedResolvers [ node . name as any ] = name + '<ContextType>' ;
1713
+ this . _collectedResolvers [ node . name as any ] = {
1714
+ typename : name + '<ContextType>' ,
1715
+ baseGeneratedTypename : name ,
1716
+ } ;
1693
1717
1694
1718
for ( const graphqlType of Object . values ( allTypesMap ) ) {
1695
1719
if ( graphqlType instanceof GraphQLObjectType ) {
0 commit comments