Skip to content

Commit bf0a460

Browse files
committed
convertModelToGraphQL method now return TypeComposer
other small fixes
1 parent 89a9fd7 commit bf0a460

File tree

3 files changed

+33
-32
lines changed

3 files changed

+33
-32
lines changed

src/composeWithMongoose.js

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,7 @@ export function composeWithMongoose(
2222
): TypeComposer {
2323
const name: string = (opts && opts.name) || model.modelName;
2424

25-
const type = convertModelToGraphQL(model, name);
26-
const typeComposer = new TypeComposer(type);
25+
const typeComposer = convertModelToGraphQL(model, name);
2726

2827
if (opts.description) {
2928
typeComposer.setDescription(opts.description);
@@ -33,7 +32,8 @@ export function composeWithMongoose(
3332
prepareFields(typeComposer, opts.fields);
3433
}
3534

36-
typeComposer.setRecordIdFn((source) => `${source._id}`);
35+
// $FlowFixMe
36+
typeComposer.setRecordIdFn(source => (source ? `${source._id}` : ''));
3737

3838
createInputType(typeComposer, opts.inputType);
3939

@@ -125,7 +125,7 @@ export function createResolvers(
125125
}
126126
});
127127

128-
if (!opts.hasOwnProperty('connection') || opts.connection !== false) {
128+
if ((!opts.hasOwnProperty('connection') || opts.connection !== false) && opts.connection) {
129129
prepareConnectionResolver(typeComposer, opts.connection);
130130
}
131131
}
@@ -142,27 +142,33 @@ export function prepareConnectionResolver(
142142
uniqueFields: ['_id'],
143143
sortValue: { _id: -1 },
144144
directionFilter: (filter, cursorData, isBefore) => {
145+
// $FlowFixMe
145146
filter[OPERATORS_FIELDNAME] = filter[OPERATORS_FIELDNAME] || {};
147+
// $FlowFixMe
146148
filter[OPERATORS_FIELDNAME]._id = filter[OPERATORS_FIELDNAME]._id || {};
147149
if (isBefore) {
148150
filter[OPERATORS_FIELDNAME]._id.gt = cursorData._id;
149151
} else {
150152
filter[OPERATORS_FIELDNAME]._id.lt = cursorData._id;
151153
}
154+
// $FlowFixMe
152155
return filter;
153156
},
154157
},
155158
_ID_ASC: {
156159
uniqueFields: ['_id'],
157160
sortValue: { _id: 1 },
158161
directionFilter: (filter, cursorData, isBefore) => {
162+
// $FlowFixMe
159163
filter[OPERATORS_FIELDNAME] = filter[OPERATORS_FIELDNAME] || {};
164+
// $FlowFixMe
160165
filter[OPERATORS_FIELDNAME]._id = filter[OPERATORS_FIELDNAME]._id || {};
161166
if (isBefore) {
162167
filter[OPERATORS_FIELDNAME]._id.lt = cursorData._id;
163168
} else {
164169
filter[OPERATORS_FIELDNAME]._id.gt = cursorData._id;
165170
}
171+
// $FlowFixMe
166172
return filter;
167173
},
168174
},

src/fieldsConverter.js

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -120,10 +120,10 @@ export function getFieldsFromModel(model: MongooseModelT): MongooseFieldMapT {
120120
export function convertModelToGraphQL(
121121
model: MongooseModelT,
122122
typeName: string
123-
): GraphQLOutputType {
123+
): TypeComposer {
124124
if (!typeName) {
125125
throw new Error('You provide empty name for type. '
126-
+ '`typeName` argument should be non-empty string.');
126+
+ '`name` argument should be non-empty string.');
127127
}
128128

129129
const typeComposer = new TypeComposer(
@@ -147,7 +147,7 @@ export function convertModelToGraphQL(
147147
});
148148

149149
typeComposer.addFields(graphqlFields);
150-
return typeComposer.getType();
150+
return typeComposer;
151151
}
152152

153153
export function convertFieldToGraphQL(
@@ -195,17 +195,14 @@ export function deriveComplexType(field: MongooseFieldT): ComplexTypesT {
195195
return ComplexTypes.SCALAR;
196196
}
197197

198-
function removePseudoIdField(gqType: GraphQLObjectType): GraphQLObjectType {
198+
function removePseudoIdField(typeComposer: TypeComposer): void {
199199
// remove pseudo object id mongoose field
200-
const composer = new TypeComposer(gqType);
201-
const gqFields = composer.getFields();
200+
const gqFields = typeComposer.getFields();
202201
Object.keys(gqFields).forEach(name => {
203202
if (gqFields[name].type === GraphQLMongoID) {
204-
composer.removeField(name);
203+
typeComposer.removeField(name);
205204
}
206205
});
207-
208-
return composer.getType();
209206
}
210207

211208
export function scalarToGraphQL(field: MongooseFieldT): GraphQLOutputType {
@@ -254,13 +251,10 @@ export function embeddedToGraphQL(
254251
const typeName = `${prefix}${capitalize(fieldName)}`;
255252
// $FlowFixMe
256253
const fieldAsModel: MongooseModelT = field;
257-
let gqType = convertModelToGraphQL(fieldAsModel, typeName);
258-
259-
if (gqType instanceof GraphQLObjectType) {
260-
gqType = removePseudoIdField(gqType);
261-
}
254+
const typeComposer = convertModelToGraphQL(fieldAsModel, typeName);
255+
removePseudoIdField(typeComposer);
262256

263-
return gqType;
257+
return typeComposer.getType();
264258
}
265259

266260

@@ -298,11 +292,10 @@ export function documentArrayToGraphQL(
298292

299293
const typeName = `${prefix}${capitalize(_getFieldName(field))}`;
300294

301-
let outputType = convertModelToGraphQL(field, typeName);
302-
if (outputType instanceof GraphQLObjectType) {
303-
outputType = removePseudoIdField(outputType);
304-
}
305-
return new GraphQLList(outputType);
295+
const typeComposer = convertModelToGraphQL(field, typeName);
296+
removePseudoIdField(typeComposer);
297+
298+
return new GraphQLList(typeComposer.getType());
306299
}
307300

308301

src/resolvers/helpers/filter.js

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -166,14 +166,16 @@ export function addFieldsWithOperator(
166166
operators = availableOperators;
167167
}
168168
operators.forEach(operatorName => {
169-
if (operatorName.slice(-2) === '[]') {
170-
fields[operatorName.slice(0, -2)] = {
171-
...existedFields[fieldName],
172-
// $FlowFixMe
173-
type: new GraphQLList(getNamedType(existedFields[fieldName].type)),
174-
};
175-
} else {
176-
fields[operatorName] = getNamedType(existedFields[fieldName]);
169+
const namedType = getNamedType(existedFields[fieldName].type);
170+
if (namedType) {
171+
if (operatorName.slice(-2) === '[]') {
172+
fields[operatorName.slice(0, -2)] = {
173+
...existedFields[fieldName],
174+
type: new GraphQLList(namedType),
175+
};
176+
} else {
177+
fields[operatorName] = namedType;
178+
}
177179
}
178180
});
179181
if (Object.keys(fields).length > 0) {

0 commit comments

Comments
 (0)