From 0903e768fee5ebd93106e34945ef13df7203f4f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fa=CC=81bio=20Batista?= Date: Fri, 7 Apr 2017 19:51:54 -0300 Subject: [PATCH 1/5] @types/mongoose: added save options --- types/mongoose/index.d.ts | 17 ++++++++++++++++- types/mongoose/mongoose-tests.ts | 6 +++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/types/mongoose/index.d.ts b/types/mongoose/index.d.ts index 70771c4398..a8c089c25a 100644 --- a/types/mongoose/index.d.ts +++ b/types/mongoose/index.d.ts @@ -2550,7 +2550,7 @@ declare module "mongoose" { * @param options.validateBeforeSave set to false to save without validating. * @param fn optional callback */ - save(fn?: (err: any, product: this, numAffected: number) => void): Promise; + save(options?: SaveOptions, fn?: (err: any, product: this, numAffected: number) => void): Promise; /** * Version using default version key. See http://mongoosejs.com/docs/guide.html#versionKey @@ -2559,6 +2559,21 @@ declare module "mongoose" { __v?: number; } + interface SaveOptions { + safe?: boolean | WriteConcern; + validateBeforeSave?: boolean; + } + + interface WriteConcern { + j?: boolean; + w?: number | 'majority' | TagSet; + wtimeout?: number; + } + + interface TagSet { + [k: string]: string; + } + interface ModelProperties { /** Base Mongoose instance the model uses. */ base: typeof mongoose; diff --git a/types/mongoose/mongoose-tests.ts b/types/mongoose/mongoose-tests.ts index dc170dccd9..0e8ade55ed 100644 --- a/types/mongoose/mongoose-tests.ts +++ b/types/mongoose/mongoose-tests.ts @@ -1050,7 +1050,7 @@ aggregate.unwind( includeArrayIndex: "idx", preserveNullAndEmptyArrays: true }); - + /* * section schematype.js * http://mongoosejs.com/docs/api.html#schematype-js @@ -1215,6 +1215,10 @@ MongoModel.find({}).$where('indexOf("val") !== -1').exec(function (err, docs) { MongoModel.findById(999, function (err, doc) { doc.increment(); doc.save(cb).then(cb).catch(cb); + doc.save({ validateBeforeSave: false }, cb).then(cb).catch(cb); + doc.save({ safe: true }, cb).then(cb).catch(cb); + doc.save({ safe: { w: 2, j: true } }, cb).then(cb).catch(cb); + doc.save({ safe: { w: 'majority', wtimeout: 10000 } }, cb).then(cb).catch(cb); }); MongoModel = (new MongoModel()).model('MongoModel'); var mongoModel = new MongoModel(); From 55051ca1b76ceaf7a316f9fd902a90aec702d74f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fa=CC=81bio=20Batista?= Date: Fri, 7 Apr 2017 21:24:42 -0300 Subject: [PATCH 2/5] @types/mongoose: following @simonxca advice and separating overloads --- types/mongoose/index.d.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/types/mongoose/index.d.ts b/types/mongoose/index.d.ts index a8c089c25a..ee5c2a84e8 100644 --- a/types/mongoose/index.d.ts +++ b/types/mongoose/index.d.ts @@ -2550,7 +2550,8 @@ declare module "mongoose" { * @param options.validateBeforeSave set to false to save without validating. * @param fn optional callback */ - save(options?: SaveOptions, fn?: (err: any, product: this, numAffected: number) => void): Promise; + save(fn?: (err: any, product: this, numAffected: number) => void): Promise; + save(options: SaveOptions, fn?: (err: any, product: this, numAffected: number) => void): Promise; /** * Version using default version key. See http://mongoosejs.com/docs/guide.html#versionKey From c6ff176b82672ab9a967ae7edf41d6c7664dc46f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fa=CC=81bio=20Batista?= Date: Fri, 7 Apr 2017 21:29:22 -0300 Subject: [PATCH 3/5] @types/mongoose: following @simonxca advice and adding more tests --- types/mongoose/mongoose-tests.ts | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/types/mongoose/mongoose-tests.ts b/types/mongoose/mongoose-tests.ts index 0e8ade55ed..8530aa5717 100644 --- a/types/mongoose/mongoose-tests.ts +++ b/types/mongoose/mongoose-tests.ts @@ -1213,12 +1213,13 @@ MongoModel.find({}).$where('indexOf("val") !== -1').exec(function (err, docs) { docs[0].__v; }); MongoModel.findById(999, function (err, doc) { + var handleSave = function(err: Error, product: mongoose.Document, numAffected: number) {}; doc.increment(); - doc.save(cb).then(cb).catch(cb); - doc.save({ validateBeforeSave: false }, cb).then(cb).catch(cb); - doc.save({ safe: true }, cb).then(cb).catch(cb); - doc.save({ safe: { w: 2, j: true } }, cb).then(cb).catch(cb); - doc.save({ safe: { w: 'majority', wtimeout: 10000 } }, cb).then(cb).catch(cb); + doc.save(handleSave).then(cb).catch(cb); + doc.save({ validateBeforeSave: false }, handleSave).then(cb).catch(cb); + doc.save({ safe: true }, handleSave).then(cb).catch(cb); + doc.save({ safe: { w: 2, j: true } }, handleSave).then(cb).catch(cb); + doc.save({ safe: { w: 'majority', wtimeout: 10000 } }, handleSave).then(cb).catch(cb); }); MongoModel = (new MongoModel()).model('MongoModel'); var mongoModel = new MongoModel(); From f44a1808a56e683863beb17cd3e9058498d65035 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fa=CC=81bio=20Batista?= Date: Fri, 7 Apr 2017 22:57:08 -0300 Subject: [PATCH 4/5] @types/mongoose: testing type inference on callbacks --- types/mongoose/mongoose-tests.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/types/mongoose/mongoose-tests.ts b/types/mongoose/mongoose-tests.ts index 8530aa5717..3ab409a2a6 100644 --- a/types/mongoose/mongoose-tests.ts +++ b/types/mongoose/mongoose-tests.ts @@ -1220,6 +1220,13 @@ MongoModel.findById(999, function (err, doc) { doc.save({ safe: true }, handleSave).then(cb).catch(cb); doc.save({ safe: { w: 2, j: true } }, handleSave).then(cb).catch(cb); doc.save({ safe: { w: 'majority', wtimeout: 10000 } }, handleSave).then(cb).catch(cb); + + // test if Typescript can infer the types of (err, product, numAffected) + doc.save(function(err, product, numAffected) { product.save(); }) + .then(function(p) { p.save() }).catch(cb); + doc.save({ validateBeforeSave: false }, function(err, product, numAffected) { + product.save(); + }).then(function(p) { p.save() }).catch(cb); }); MongoModel = (new MongoModel()).model('MongoModel'); var mongoModel = new MongoModel(); From ac1a97d16ba4bb5ccfb954d3bc0766212364b39f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fa=CC=81bio=20Batista?= Date: Mon, 17 Apr 2017 15:21:23 -0300 Subject: [PATCH 5/5] @types/mongoose: changed save overloads order --- types/mongoose/index.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/types/mongoose/index.d.ts b/types/mongoose/index.d.ts index ee5c2a84e8..192fd56698 100644 --- a/types/mongoose/index.d.ts +++ b/types/mongoose/index.d.ts @@ -2550,8 +2550,8 @@ declare module "mongoose" { * @param options.validateBeforeSave set to false to save without validating. * @param fn optional callback */ + save(options?: SaveOptions, fn?: (err: any, product: this, numAffected: number) => void): Promise; save(fn?: (err: any, product: this, numAffected: number) => void): Promise; - save(options: SaveOptions, fn?: (err: any, product: this, numAffected: number) => void): Promise; /** * Version using default version key. See http://mongoosejs.com/docs/guide.html#versionKey