Skip to content

Commit 39a6f22

Browse files
committed
feat: add mongoose v6 support
1 parent 4b402a9 commit 39a6f22

File tree

9 files changed

+118
-93
lines changed

9 files changed

+118
-93
lines changed

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
},
3131
"peerDependencies": {
3232
"graphql-compose": "^7.21.4 || ^8.0.0 || ^9.0.0",
33-
"mongoose": "^5.0.0 || ^4.4.0"
33+
"mongoose": "^6.0.0 || ^5.0.0 || ^4.4.0"
3434
},
3535
"devDependencies": {
3636
"@types/jest": "26.0.24",
@@ -44,8 +44,8 @@
4444
"graphql": "15.5.1",
4545
"graphql-compose": "9.0.1",
4646
"jest": "27.0.6",
47-
"mongodb-memory-server": "7.3.2",
48-
"mongoose": "5.13.3",
47+
"mongodb-memory-server": "7.3.6",
48+
"mongoose": "6.0.2",
4949
"prettier": "2.3.2",
5050
"request": "2.88.2",
5151
"rimraf": "3.0.2",

src/composeMongoose.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ export function composeMongoose<TDoc extends Document, TContext = any>(
109109
model: Model<TDoc>,
110110
opts: ComposeMongooseOpts<TContext> = {}
111111
): ObjectTypeComposerWithMongooseResolvers<TDoc, TContext> {
112-
const m: Model<any> = model;
112+
const m = model as Model<any>;
113113
const name: string = (opts && opts.name) || m.modelName;
114114

115115
const sc = opts.schemaComposer || globalSchemaComposer;

src/composeWithMongoose.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,10 @@ export type TransformRecordIdFn<TContext = any> = (
3131
) => any;
3232

3333
export function composeWithMongoose<TDoc extends Document, TContext = any>(
34-
model: Model<TDoc>,
34+
model: Model<any>,
3535
opts: ComposeWithMongooseOpts<TContext> = {}
3636
): ObjectTypeComposer<TDoc, TContext> {
37-
const m: Model<any> = model;
37+
const m = model as Model<any>;
3838
const name: string = (opts && opts.name) || m.modelName;
3939

4040
const sc = opts.schemaComposer || globalSchemaComposer;

src/discriminators/DiscriminatorTypeComposer.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ export class DiscriminatorTypeComposer<TSource, TContext> extends ObjectTypeComp
181181
this.schemaComposer.addSchemaMustHaveType(childTC);
182182
this.childTCs.push(childTC);
183183

184-
return childTC;
184+
return childTC as any;
185185
}
186186

187187
setFields(fields: ObjectTypeComposerFieldConfigMapDefinition<any, any>): this {

src/fieldsConverter.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,11 @@ export enum ComplexTypes {
4747
DECIMAL = 'DECIMAL',
4848
}
4949

50+
// In mongoose@6 Embedded type was renamed to Subdocument
51+
// So keep backward compatibility with old mongoose versions
52+
const SubdocumentTypeClass =
53+
(mongoose.Schema.Types as any)?.Embedded || (mongoose.Schema.Types as any).Subdocument;
54+
5055
function _getFieldName(field: MongooseFieldT): string {
5156
return field.path || '__unknownField__';
5257
}
@@ -278,7 +283,7 @@ export function deriveComplexType(field: MongooseFieldT): ComplexTypes {
278283
(fieldType === 'Array' && field?.schema?.paths)
279284
) {
280285
return ComplexTypes.DOCUMENT_ARRAY;
281-
} else if (field instanceof mongoose.Schema.Types.Embedded || fieldType === 'Embedded') {
286+
} else if (field instanceof SubdocumentTypeClass || fieldType === 'Embedded') {
282287
return ComplexTypes.EMBEDDED;
283288
} else if (field instanceof mongoose.Schema.Types.Array || field?.caster?.instance) {
284289
return ComplexTypes.ARRAY;

src/resolvers/createMany.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ type TArgs = {
2121
};
2222

2323
export function createMany<TSource = any, TContext = any, TDoc extends Document = any>(
24-
model: Model<TDoc>,
24+
model: Model<any>,
2525
tc: ObjectTypeComposer<TDoc, TContext> | InterfaceTypeComposer<TDoc, TContext>,
2626
opts?: CreateManyResolverOpts
2727
): Resolver<TSource, TContext, TArgs, TDoc> {

src/resolvers/removeMany.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,12 +94,17 @@ export function removeMany<TSource = any, TContext = any, TDoc extends Document
9494

9595
const res = await beforeQueryHelper(resolveParams);
9696

97-
if (res.ok) {
98-
// mongoose 5
97+
if (res.deletedCount) {
98+
// mongoose v6
99+
return {
100+
numAffected: res.deletedCount,
101+
};
102+
} else if (res.ok) {
103+
// mongoose v5
99104
return {
100105
numAffected: res.n,
101106
};
102-
} else if (res.result && res.result.ok) {
107+
} else if (res?.result?.ok) {
103108
// mongoose 4
104109
return {
105110
numAffected: res.result.n,

src/resolvers/updateMany.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,12 @@ export function updateMany<TSource = any, TContext = any, TDoc extends Document
133133

134134
const res = await beforeQueryHelper(resolveParams);
135135

136-
if (res.ok) {
136+
if (res.modifiedCount || res.acknowledged) {
137+
// mongoose v6
138+
return {
139+
numAffected: res.modifiedCount,
140+
};
141+
} else if (res.ok) {
137142
return {
138143
numAffected: res.n || res.nModified,
139144
};

0 commit comments

Comments
 (0)