Skip to content
This repository was archived by the owner on Apr 17, 2023. It is now read-only.

Commit ec7bed7

Browse files
author
Enda Phelan
committed
fix(datasync): do not create empty resolvers
1 parent f0f75c6 commit ec7bed7

File tree

2 files changed

+53
-12
lines changed

2 files changed

+53
-12
lines changed

packages/graphback-datasync/src/DataSyncPlugin.ts

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -76,18 +76,18 @@ export class DataSyncPlugin extends GraphbackPlugin {
7676
* @param {GraphbackCoreMetadata} metadata - Core metatata containing all model information
7777
*/
7878
public createResolvers(metadata: GraphbackCoreMetadata): IResolvers {
79-
const resolvers: IResolvers = {
80-
Query: {},
81-
Mutation: {},
82-
Subscription: {}
79+
const models = metadata.getModelDefinitions()
80+
81+
if (models.length === 0) {
82+
return undefined;
8383
}
8484

85-
const models = metadata.getModelDefinitions()
85+
const resolvers: IResolvers = {}
8686

8787
for (const model of models) {
8888
// If delta marker is encountered, add resolver for `delta` query
8989
if (isDataSyncModel(model)) {
90-
this.addDeltaSyncResolver(model, resolvers.Query as IFieldResolver<any, any>)
90+
this.addDeltaSyncResolver(model, resolvers)
9191
}
9292
}
9393

@@ -105,11 +105,15 @@ export class DataSyncPlugin extends GraphbackPlugin {
105105
return DATASYNC_PLUGIN_NAME;
106106
}
107107

108-
protected addDeltaSyncResolver(model: ModelDefinition, queryObj: IFieldResolver<any, any>) {
108+
protected addDeltaSyncResolver(model: ModelDefinition, resolvers: IResolvers) {
109109
const modelName = model.graphqlType.name;
110110
const deltaQuery = getDeltaQuery(modelName)
111111

112-
queryObj[deltaQuery] = async (_: any, args: any, context: GraphbackContext, info: GraphQLResolveInfo) => {
112+
if (!resolvers.Query) {
113+
resolvers.Query = {} as IFieldResolver<any, any>
114+
}
115+
116+
resolvers.Query[deltaQuery] = async (_: any, args: any, context: GraphbackContext, info: GraphQLResolveInfo) => {
113117
if (!context.graphback || !context.graphback[modelName]) {
114118
throw new Error(`Missing service for ${modelName}`);
115119
}

packages/graphback-datasync/tests/DataSyncPluginTest.ts

Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { readFileSync } from 'fs';
22
import { buildSchema, printSchema } from 'graphql';
3-
import { GraphbackCoreMetadata } from '@graphback/core';
3+
import { GraphbackCoreMetadata, GraphbackPluginEngine } from '@graphback/core';
44
import { SchemaCRUDPlugin } from "@graphback/codegen-schema";
55
import { DataSyncPlugin } from '../src/DataSyncPlugin';
66

@@ -18,7 +18,7 @@ test('Test snapshot config gql', async () => {
1818
"subDelete": true
1919
}
2020

21-
const schemaPlugin = new SchemaCRUDPlugin();
21+
const schemaPlugin = new SchemaCRUDPlugin();
2222
const datasync = new DataSyncPlugin()
2323
const metadata = new GraphbackCoreMetadata({
2424
crudMethods: defautConfig
@@ -42,7 +42,7 @@ it('uses existing GraphbackTimestamp scalars', async () => {
4242
"subDelete": true
4343
}
4444

45-
const schemaPlugin = new SchemaCRUDPlugin();
45+
const schemaPlugin = new SchemaCRUDPlugin();
4646
const datasync = new DataSyncPlugin()
4747
const metadata = new GraphbackCoreMetadata({
4848
crudMethods: defautConfig
@@ -80,7 +80,7 @@ it('adds version when conflicts are enabled', async () => {
8080
"subDelete": true
8181
}
8282

83-
const schemaPlugin = new SchemaCRUDPlugin();
83+
const schemaPlugin = new SchemaCRUDPlugin();
8484
const datasync = new DataSyncPlugin({ conflictConfig: { enabled: true } })
8585
const metadata = new GraphbackCoreMetadata({
8686
crudMethods: defautConfig
@@ -105,3 +105,40 @@ it('adds version when conflicts are enabled', async () => {
105105
const schema = datasync.transformSchema(metadata)
106106
expect(printSchema(schema)).toMatchSnapshot();
107107
});
108+
109+
test('When all CRUD flags are disabled, resolvers and root schema types are not generated', () => {
110+
const model = buildSchema(`
111+
"""@model"""
112+
type Note {
113+
id: ID!
114+
title: String
115+
}`)
116+
117+
const pluginEngine = new GraphbackPluginEngine({
118+
schema: model,
119+
plugins: [
120+
new DataSyncPlugin()
121+
],
122+
config: {
123+
crudMethods: {
124+
find: false,
125+
findOne: false,
126+
create: false,
127+
update: false,
128+
delete: false,
129+
subCreate: false,
130+
subDelete: false,
131+
subUpdate: false
132+
}
133+
}
134+
});
135+
136+
const metadata = pluginEngine.createResources();
137+
const schema = metadata.getSchema();
138+
const resolvers = metadata.getResolvers();
139+
140+
expect(resolvers).toBeUndefined()
141+
expect(schema.getQueryType()).toBeUndefined();
142+
expect(schema.getMutationType()).toBeUndefined();
143+
expect(schema.getSubscriptionType()).toBeUndefined();
144+
});

0 commit comments

Comments
 (0)