Skip to content

Commit

Permalink
transforms should support custom root type names (#1607)
Browse files Browse the repository at this point in the history
TransformRootFields, FilterRootFields and RenameRootFields were previously hard-coding root type names -- these may be customized and should be read from the schema at transformation time.

Closes #1596
  • Loading branch information
yaacovCR committed Jun 7, 2020
1 parent db40e8a commit a1e800c
Showing 1 changed file with 24 additions and 6 deletions.
30 changes: 24 additions & 6 deletions packages/wrap/src/transforms/TransformRootFields.ts
Expand Up @@ -6,24 +6,42 @@ import TransformObjectFields from './TransformObjectFields';
import { RootFieldTransformer, FieldNodeTransformer } from '../types';

export default class TransformRootFields implements Transform {
private readonly transformer: TransformObjectFields;
private readonly rootFieldTransformer: RootFieldTransformer;
private readonly fieldNodeTransformer: FieldNodeTransformer;
private transformer: TransformObjectFields;

constructor(rootFieldTransformer: RootFieldTransformer, fieldNodeTransformer?: FieldNodeTransformer) {
this.rootFieldTransformer = rootFieldTransformer;
this.fieldNodeTransformer = fieldNodeTransformer;
}

public transformSchema(originalSchema: GraphQLSchema): GraphQLSchema {
const queryTypeName = originalSchema.getQueryType()?.name;
const mutationTypeName = originalSchema.getMutationType()?.name;
const subscriptionTypeName = originalSchema.getSubscriptionType()?.name;

const rootToObjectFieldTransformer = (
typeName: string,
fieldName: string,
fieldConfig: GraphQLFieldConfig<any, any>
) => {
if (typeName === 'Query' || typeName === 'Mutation' || typeName === 'Subscription') {
return rootFieldTransformer(typeName, fieldName, fieldConfig);
if (typeName === queryTypeName) {
return this.rootFieldTransformer('Query', fieldName, fieldConfig);
}

if (typeName === mutationTypeName) {
return this.rootFieldTransformer('Mutation', fieldName, fieldConfig);
}

if (typeName === subscriptionTypeName) {
return this.rootFieldTransformer('Subscription', fieldName, fieldConfig);
}

return undefined;
};
this.transformer = new TransformObjectFields(rootToObjectFieldTransformer, fieldNodeTransformer);
}

public transformSchema(originalSchema: GraphQLSchema): GraphQLSchema {
this.transformer = new TransformObjectFields(rootToObjectFieldTransformer, this.fieldNodeTransformer);

return this.transformer.transformSchema(originalSchema);
}

Expand Down

0 comments on commit a1e800c

Please sign in to comment.