Skip to content

Commit 34e756d

Browse files
committed
feat: already generated TC may be obtained via schemaComposer.getTC(mongooseSchema)
Removed old logic, where generated schemas stored in the mongoose object `model.schema._gqcTypeComposer`. Related: #26 (comment)
1 parent 86f05c9 commit 34e756d

18 files changed

+25
-35
lines changed

src/__tests__/composeWithMongoose-test.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ afterAll(() => UserModel.base.disconnect());
1414
describe('composeWithMongoose ->', () => {
1515
beforeEach(() => {
1616
schemaComposer.clear();
17-
UserModel.schema._gqcTypeComposer = undefined;
1817
});
1918

2019
describe('MongooseModelToTypeComposer()', () => {
@@ -27,7 +26,7 @@ describe('composeWithMongoose ->', () => {
2726
it('should set type name from model or opts.name', () => {
2827
expect(composeWithMongoose(UserModel).getTypeName()).toBe(UserModel.modelName);
2928

30-
UserModel.schema._gqcTypeComposer = undefined;
29+
schemaComposer.clear();
3130
expect(composeWithMongoose(UserModel, { name: 'Ok' }).getTypeName()).toBe('Ok');
3231
});
3332

@@ -48,6 +47,13 @@ describe('composeWithMongoose ->', () => {
4847
expect(tc.getFieldType('_id')).toBeInstanceOf(GraphQLNonNull);
4948
expect(tc.getFieldType('_id').ofType).toBe(GraphQLMongoID);
5049
});
50+
51+
it('composeWithMongoose should generate new TypeComposer (without cache)', () => {
52+
const tc1: any = composeWithMongoose(UserModel);
53+
schemaComposer.clear();
54+
const tc2: any = composeWithMongoose(UserModel);
55+
expect(tc1).not.toBe(tc2);
56+
});
5157
});
5258

5359
describe('filterFields()', () => {

src/__tests__/integration-test.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ afterAll(() => UserModel.base.disconnect());
1111
describe('integration tests', () => {
1212
beforeEach(() => {
1313
schemaComposer.clear();
14-
UserModel.schema._gqcTypeComposer = undefined;
1514
});
1615

1716
describe('check subdocuments', () => {

src/fieldsConverter.js

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ type ComposeScalarType = string | GraphQLScalarType;
1515
type ComposeOutputType = TypeComposer | ComposeScalarType | EnumTypeComposer | [ComposeOutputType];
1616

1717
export type MongoosePseudoModelT = {
18-
_gqcTypeComposer?: TypeComposer,
1918
schema: Schema<any>,
2019
};
2120

@@ -117,19 +116,21 @@ export function convertModelToGraphQL(
117116
): TypeComposer {
118117
const schemaComposer = sc || globalSchemaComposer;
119118

120-
// if model already has generated TypeComposer early, then return it
121-
const modelSchema: any = model.schema;
122-
if (modelSchema && modelSchema._gqcTypeComposer) {
123-
return modelSchema._gqcTypeComposer;
124-
}
125-
126119
if (!typeName) {
127120
throw new Error('You provide empty name for type. `name` argument should be non-empty string.');
128121
}
129122

130-
const typeComposer = schemaComposer.getOrCreateTC(typeName);
123+
// if model already has generated TypeComposer early, then return it
124+
// $FlowFixMe await landing [email protected] or above
125+
if (schemaComposer.has(model.schema)) {
126+
// $FlowFixMe await landing [email protected] or above
127+
return schemaComposer.getTC(model.schema);
128+
}
131129

132-
modelSchema._gqcTypeComposer = typeComposer; // eslint-disable-line no-param-reassign
130+
const typeComposer = schemaComposer.getOrCreateTC(typeName);
131+
// $FlowFixMe await landing [email protected] or above
132+
schemaComposer.set(model.schema, typeComposer);
133+
schemaComposer.set(typeName, typeComposer);
133134

134135
const mongooseFields = getFieldsFromModel(model);
135136
const graphqlFields = {};
@@ -161,7 +162,7 @@ export function convertModelToGraphQL(
161162
}
162163

163164
export function convertSchemaToGraphQL(
164-
schema: Object, // MongooseModelSchemaT, TODO use Model from mongoose_v4.x.x definition when it will be public
165+
schema: Schema<any>,
165166
typeName: string,
166167
sc?: SchemaComposer<any>
167168
): TypeComposer {
@@ -171,15 +172,18 @@ export function convertSchemaToGraphQL(
171172
throw new Error('You provide empty name for type. `name` argument should be non-empty string.');
172173
}
173174

174-
if (schema._gqcTypeComposer) {
175-
return schema._gqcTypeComposer;
175+
// $FlowFixMe await landing [email protected] or above
176+
if (schemaComposer.has(schema)) {
177+
// $FlowFixMe await landing [email protected] or above
178+
return schemaComposer.getTC(schema);
176179
}
177180

178181
const tc = convertModelToGraphQL({ schema }, typeName, schemaComposer);
179182
// also generate InputType
180183
tc.getInputTypeComposer();
181184

182-
schema._gqcTypeComposer = tc; // eslint-disable-line
185+
// $FlowFixMe await landing [email protected] or above
186+
schemaComposer.set(schema, tc);
183187
return tc;
184188
}
185189

src/resolvers/__tests__/count-test.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ describe('count() ->', () => {
1313
let UserTC;
1414

1515
beforeEach(() => {
16-
UserModel.schema._gqcTypeComposer = undefined;
1716
schemaComposer.clear();
1817
UserTC = convertModelToGraphQL(UserModel, 'User', schemaComposer);
1918
});

src/resolvers/__tests__/createOne-test.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ describe('createOne() ->', () => {
1515
let UserTC;
1616

1717
beforeEach(() => {
18-
UserModel.schema._gqcTypeComposer = undefined;
1918
schemaComposer.clear();
2019
UserTC = convertModelToGraphQL(UserModel, 'User', schemaComposer);
2120
UserTC.setRecordIdFn(source => (source ? `${source._id}` : ''));

src/resolvers/__tests__/findById-test.js

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,7 @@ describe('findById() ->', () => {
1717

1818
beforeEach(() => {
1919
schemaComposer.clear();
20-
UserModel.schema._gqcTypeComposer = undefined;
2120
UserTC = convertModelToGraphQL(UserModel, 'User', schemaComposer);
22-
23-
PostModel.schema._gqcTypeComposer = undefined;
2421
PostTypeComposer = convertModelToGraphQL(PostModel, 'Post', schemaComposer);
2522
});
2623

src/resolvers/__tests__/findByIds-test.js

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,7 @@ describe('findByIds() ->', () => {
1717

1818
beforeEach(() => {
1919
schemaComposer.clear();
20-
UserModel.schema._gqcTypeComposer = undefined;
2120
UserTC = convertModelToGraphQL(UserModel, 'User', schemaComposer);
22-
23-
PostModel.schema._gqcTypeComposer = undefined;
2421
PostTypeComposer = convertModelToGraphQL(PostModel, 'Post', schemaComposer);
2522
});
2623

src/resolvers/__tests__/findMany-test.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ describe('findMany() ->', () => {
1313

1414
beforeEach(() => {
1515
schemaComposer.clear();
16-
UserModel.schema._gqcTypeComposer = undefined;
1716
UserTC = convertModelToGraphQL(UserModel, 'User', schemaComposer);
1817
});
1918

src/resolvers/__tests__/findOne-test.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ let UserTC;
1313

1414
beforeEach(() => {
1515
schemaComposer.clear();
16-
UserModel.schema._gqcTypeComposer = undefined;
1716
UserTC = convertModelToGraphQL(UserModel, 'User', schemaComposer);
1817
});
1918

src/resolvers/__tests__/removeById-test.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ describe('removeById() ->', () => {
1616

1717
beforeEach(() => {
1818
schemaComposer.clear();
19-
UserModel.schema._gqcTypeComposer = undefined;
2019
UserTC = convertModelToGraphQL(UserModel, 'User', schemaComposer);
2120
UserTC.setRecordIdFn(source => (source ? `${source._id}` : ''));
2221
});

src/resolvers/__tests__/removeMany-test.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ describe('removeMany() ->', () => {
1515

1616
beforeEach(() => {
1717
schemaComposer.clear();
18-
UserModel.schema._gqcTypeComposer = undefined;
1918
UserTC = convertModelToGraphQL(UserModel, 'User', schemaComposer);
2019
});
2120

src/resolvers/__tests__/removeOne-test.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ describe('removeOne() ->', () => {
1515

1616
beforeEach(() => {
1717
schemaComposer.clear();
18-
UserModel.schema._gqcTypeComposer = undefined;
1918
UserTC = convertModelToGraphQL(UserModel, 'User', schemaComposer);
2019
UserTC.setRecordIdFn(source => (source ? `${source._id}` : ''));
2120
});

src/resolvers/__tests__/updateById-test.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ describe('updateById() ->', () => {
2020

2121
beforeEach(() => {
2222
schemaComposer.clear();
23-
UserModel.schema._gqcTypeComposer = undefined;
2423
UserTC = convertModelToGraphQL(UserModel, 'User', schemaComposer);
2524
UserTC.setRecordIdFn(source => (source ? `${source._id}` : ''));
2625
});

src/resolvers/__tests__/updateMany-test.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ describe('updateMany() ->', () => {
1515

1616
beforeEach(() => {
1717
schemaComposer.clear();
18-
UserModel.schema._gqcTypeComposer = undefined;
1918
UserTC = convertModelToGraphQL(UserModel, 'User', schemaComposer);
2019
});
2120

src/resolvers/__tests__/updateOne-test.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ describe('updateOne() ->', () => {
1616

1717
beforeEach(() => {
1818
schemaComposer.clear();
19-
UserModel.schema._gqcTypeComposer = undefined;
2019
UserTC = convertModelToGraphQL(UserModel, 'User', schemaComposer);
2120
UserTC.setRecordIdFn(source => (source ? `${source._id}` : ''));
2221
});

src/resolvers/helpers/__tests__/filter-test.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ describe('Resolver helper `filter` ->', () => {
1212
let UserTC: TypeComposer;
1313

1414
beforeEach(() => {
15-
UserModel.schema._gqcTypeComposer = undefined;
1615
schemaComposer.clear();
1716
UserTC = convertModelToGraphQL(UserModel, 'User', schemaComposer);
1817
});

src/resolvers/helpers/__tests__/record-test.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ describe('Resolver helper `record` ->', () => {
1010
let UserTC: TypeComposer;
1111

1212
beforeEach(() => {
13-
UserModel.schema._gqcTypeComposer = undefined;
1413
schemaComposer.clear();
1514
UserTC = convertModelToGraphQL(UserModel, 'User', schemaComposer);
1615
});

src/resolvers/helpers/__tests__/sort-test.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ describe('Resolver helper `sort` ->', () => {
1010
let UserTC: TypeComposer;
1111

1212
beforeEach(() => {
13-
UserModel.schema._gqcTypeComposer = undefined;
1413
schemaComposer.clear();
1514
UserTC = convertModelToGraphQL(UserModel, 'User', schemaComposer);
1615
});

0 commit comments

Comments
 (0)