diff --git a/package.json b/package.json index 19c9cc27aa..39be888974 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "license": "MIT", "dependencies": { "bson": "^6.2.0", - "kareem": "2.5.1", + "kareem": "2.6.0", "mongodb": "6.3.0", "mpath": "0.9.0", "mquery": "5.0.0", diff --git a/scripts/tsc-diagnostics-check.js b/scripts/tsc-diagnostics-check.js index b00bcbb243..2f74bf39b9 100644 --- a/scripts/tsc-diagnostics-check.js +++ b/scripts/tsc-diagnostics-check.js @@ -3,7 +3,7 @@ const fs = require('fs'); const stdin = fs.readFileSync(0).toString('utf8'); -const maxInstantiations = isNaN(process.argv[2]) ? 120000 : parseInt(process.argv[2], 10); +const maxInstantiations = isNaN(process.argv[2]) ? 125000 : parseInt(process.argv[2], 10); console.log(stdin); diff --git a/test/types/base.test.ts b/test/types/base.test.ts index 1dfaaa2ef7..fba2acf37b 100644 --- a/test/types/base.test.ts +++ b/test/types/base.test.ts @@ -8,6 +8,15 @@ Object.values(mongoose.models).forEach(model => { mongoose.pluralize(null); +mongoose.overwriteMiddlewareResult('foo'); +const schema = new mongoose.Schema({ name: String }); +schema.pre('save', function() { + return mongoose.skipMiddlewareFunction('foobar'); +}); +schema.post('save', function() { + return mongoose.overwriteMiddlewareResult('foobar'); +}); + function gh10746() { type A = string extends Function ? never : string; diff --git a/test/types/middleware.test.ts b/test/types/middleware.test.ts index 31e210eb26..e127c3b683 100644 --- a/test/types/middleware.test.ts +++ b/test/types/middleware.test.ts @@ -72,7 +72,7 @@ schema.pre>('insertMany', function() { return Promise.resolve(); }); -schema.pre>('insertMany', { document: false, query: false }, function() { +schema.pre>('insertMany', function() { console.log(this.name); }); diff --git a/types/index.d.ts b/types/index.d.ts index 6a5a926c65..92a05249e1 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -27,6 +27,7 @@ declare class NativeDate extends global.Date { } declare module 'mongoose' { + import Kareem = require('kareem'); import events = require('events'); import mongodb = require('mongodb'); import mongoose = require('mongoose'); @@ -390,7 +391,6 @@ declare module 'mongoose' { ): this; // this = Document pre(method: 'save', fn: PreSaveMiddlewareFunction): this; - pre(method: 'save', options: SchemaPreOptions, fn: PreSaveMiddlewareFunction): this; pre(method: MongooseDistinctDocumentMiddleware|MongooseDistinctDocumentMiddleware[], fn: PreMiddlewareFunction): this; pre(method: MongooseDistinctDocumentMiddleware|MongooseDistinctDocumentMiddleware[], options: SchemaPreOptions, fn: PreMiddlewareFunction): this; pre( @@ -408,7 +408,6 @@ declare module 'mongoose' { pre>(method: MongooseQueryOrDocumentMiddleware | MongooseQueryOrDocumentMiddleware[] | RegExp, fn: PreMiddlewareFunction): this; // method aggregate pre>(method: 'aggregate' | RegExp, fn: PreMiddlewareFunction): this; - pre>(method: 'aggregate' | RegExp, options: SchemaPreOptions, fn: PreMiddlewareFunction): this; /* method insertMany */ pre( method: 'insertMany' | RegExp, @@ -419,16 +418,6 @@ declare module 'mongoose' { options?: InsertManyOptions & { lean?: boolean } ) => void | Promise ): this; - pre( - method: 'insertMany' | RegExp, - options: SchemaPreOptions, - fn: ( - this: T, - next: (err?: CallbackError) => void, - docs: any | Array, - options?: InsertManyOptions & { lean?: boolean } - ) => void | Promise - ): this; /* method bulkWrite */ pre( method: 'bulkWrite' | RegExp, @@ -439,16 +428,6 @@ declare module 'mongoose' { options?: mongodb.BulkWriteOptions & MongooseBulkWriteOptions ) => void | Promise ): this; - pre( - method: 'bulkWrite' | RegExp, - options: SchemaPreOptions, - fn: ( - this: T, - next: (err?: CallbackError) => void, - ops: Array & MongooseBulkWritePerWriteOptions>, - options?: mongodb.BulkWriteOptions & MongooseBulkWriteOptions - ) => void | Promise - ): this; /* method createCollection */ pre( method: 'createCollection' | RegExp, @@ -458,15 +437,6 @@ declare module 'mongoose' { options?: mongodb.CreateCollectionOptions & Pick ) => void | Promise ): this; - pre( - method: 'createCollection' | RegExp, - options: SchemaPreOptions, - fn: ( - this: T, - next: (err?: CallbackError) => void, - options?: mongodb.CreateCollectionOptions & Pick - ) => void | Promise - ): this; /** Object of currently defined query helpers on this schema. */ query: TQueryHelpers; @@ -715,5 +685,9 @@ declare module 'mongoose' { /* for ts-mongoose */ export class mquery { } + export function overwriteMiddlewareResult(val: any): Kareem.OverwriteMiddlewareResult; + + export function skipMiddlewareFunction(val: any): Kareem.SkipWrappedFunction; + export default mongoose; } diff --git a/types/middlewares.d.ts b/types/middlewares.d.ts index 9302b9b7d4..8d380ed69d 100644 --- a/types/middlewares.d.ts +++ b/types/middlewares.d.ts @@ -1,4 +1,5 @@ declare module 'mongoose' { + import Kareem = require('kareem'); type MongooseQueryAndDocumentMiddleware = 'updateOne' | 'deleteOne'; @@ -37,13 +38,13 @@ declare module 'mongoose' { this: ThisType, next: CallbackWithoutResultAndOptionalError, opts?: Record - ) => void | Promise; + ) => void | Promise | Kareem.SkipWrappedFunction; type PreSaveMiddlewareFunction = ( this: ThisType, next: CallbackWithoutResultAndOptionalError, opts: SaveOptions - ) => void | Promise; - type PostMiddlewareFunction = (this: ThisType, res: ResType, next: CallbackWithoutResultAndOptionalError) => void | Promise; + ) => void | Promise | Kareem.SkipWrappedFunction; + type PostMiddlewareFunction = (this: ThisType, res: ResType, next: CallbackWithoutResultAndOptionalError) => void | Promise | Kareem.OverwriteMiddlewareResult; type ErrorHandlingMiddlewareFunction = (this: ThisType, err: NativeError, res: ResType, next: CallbackWithoutResultAndOptionalError) => void; - type ErrorHandlingMiddlewareWithOption = (this: ThisType, err: NativeError, res: ResType | null, next: CallbackWithoutResultAndOptionalError) => void | Promise; + type ErrorHandlingMiddlewareWithOption = (this: ThisType, err: NativeError, res: ResType | null, next: CallbackWithoutResultAndOptionalError) => void | Promise | Kareem.OverwriteMiddlewareResult; }