Skip to content

Commit

Permalink
Merge pull request #958 from timhall/fix-object-extension
Browse files Browse the repository at this point in the history
fix(federation): Handle ObjectTypeExtension
  • Loading branch information
kamilmysliwiec committed Jun 23, 2020
2 parents 0466104 + 2b9129b commit 9f7b973
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 6 deletions.
35 changes: 30 additions & 5 deletions lib/graphql-ast.explorer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,24 @@ import { Injectable } from '@nestjs/common';
import {
DocumentNode,
EnumTypeDefinitionNode,
EnumTypeExtensionNode,
FieldDefinitionNode,
InputObjectTypeDefinitionNode,
InputObjectTypeExtensionNode,
InputValueDefinitionNode,
InterfaceTypeDefinitionNode,
InterfaceTypeExtensionNode,
NamedTypeNode,
ObjectTypeDefinitionNode,
ObjectTypeExtensionNode,
OperationTypeDefinitionNode,
ScalarTypeDefinitionNode,
ScalarTypeExtensionNode,
TypeNode,
TypeSystemDefinitionNode,
TypeSystemExtensionNode,
UnionTypeDefinitionNode,
UnionTypeExtensionNode,
} from 'graphql';
import { get, map, sortBy, upperFirst } from 'lodash';
import {
Expand Down Expand Up @@ -84,7 +91,7 @@ export class GraphQLAstExplorer {
}

lookupDefinition(
item: Readonly<TypeSystemDefinitionNode>,
item: Readonly<TypeSystemDefinitionNode | TypeSystemExtensionNode>,
tsFile: SourceFile,
mode: 'class' | 'interface',
options: DefinitionsGeneratorOptions,
Expand All @@ -97,15 +104,21 @@ export class GraphQLAstExplorer {
mode,
);
case 'ObjectTypeDefinition':
case 'ObjectTypeExtension':
case 'InputObjectTypeDefinition':
case 'InputObjectTypeExtension':
return this.addObjectTypeDefinition(item, tsFile, mode, options);
case 'InterfaceTypeDefinition':
case 'InterfaceTypeExtension':
return this.addObjectTypeDefinition(item, tsFile, 'interface', options);
case 'ScalarTypeDefinition':
case 'ScalarTypeExtension':
return this.addScalarDefinition(item, tsFile);
case 'EnumTypeDefinition':
case 'EnumTypeExtension':
return this.addEnumDefinition(item, tsFile);
case 'UnionTypeDefinition':
case 'UnionTypeExtension':
return this.addUnionDefinition(item, tsFile);
}
}
Expand Down Expand Up @@ -146,8 +159,11 @@ export class GraphQLAstExplorer {
addObjectTypeDefinition(
item:
| ObjectTypeDefinitionNode
| ObjectTypeExtensionNode
| InputObjectTypeDefinitionNode
| InterfaceTypeDefinitionNode,
| InputObjectTypeExtensionNode
| InterfaceTypeDefinitionNode
| InterfaceTypeExtensionNode,
tsFile: SourceFile,
mode: 'class' | 'interface',
options: DefinitionsGeneratorOptions,
Expand Down Expand Up @@ -327,7 +343,10 @@ export class GraphQLAstExplorer {
});
}

addScalarDefinition(item: ScalarTypeDefinitionNode, tsFile: SourceFile) {
addScalarDefinition(
item: ScalarTypeDefinitionNode | ScalarTypeExtensionNode,
tsFile: SourceFile,
) {
const name = get(item, 'name.value');
if (!name || name === 'Date') {
return;
Expand Down Expand Up @@ -369,7 +388,10 @@ export class GraphQLAstExplorer {
});
}

addEnumDefinition(item: EnumTypeDefinitionNode, tsFile: SourceFile) {
addEnumDefinition(
item: EnumTypeDefinitionNode | EnumTypeExtensionNode,
tsFile: SourceFile,
) {
const name = get(item, 'name.value');
if (!name) {
return;
Expand All @@ -385,7 +407,10 @@ export class GraphQLAstExplorer {
});
}

addUnionDefinition(item: UnionTypeDefinitionNode, tsFile: SourceFile) {
addUnionDefinition(
item: UnionTypeDefinitionNode | UnionTypeExtensionNode,
tsFile: SourceFile,
) {
const name = get(item, 'name.value');
if (!name) {
return;
Expand Down
15 changes: 15 additions & 0 deletions tests/generated-definitions/federation.fixture.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,22 @@

/* tslint:disable */
/* eslint-disable */
export enum Category {
POST = "POST"
}

export class Post {
id: string;
title: string;
author: User;
category: Category;
}

export abstract class IQuery {
abstract getPosts(): Post[] | Promise<Post[]>;
}

export class User {
id: string;
posts?: Post[];
}
8 changes: 7 additions & 1 deletion tests/generated-definitions/federation.graphql
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
type Post {
id: ID!
title: String!
author: User!
category: Category!
}

extend type User @key(fields: "id") {
Expand All @@ -10,4 +12,8 @@ extend type User @key(fields: "id") {

extend type Query {
getPosts: [Post]
}
}

extend enum Category {
POST
}

0 comments on commit 9f7b973

Please sign in to comment.