{"version":3,"sources":["jsdelivr-header.js","/npm/mongoose-delete-plugin@1.0.4/index.js"],"names":[],"mappings":"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","file":"/npm/mongoose-delete-plugin@1.0.4/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/mongoose-delete-plugin@1.0.4/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","var mongoose = require('mongoose'),\n    Schema = mongoose.Schema,\n    Model = mongoose.Model,\n    util = require('util');\n\n/**\n * This code is taken from official mongoose repository\n * https://github.com/Automattic/mongoose/blob/master/lib/query.js#L3847-L3873\n */\nfunction parseUpdateArguments (conditions, doc, options, callback) {\n    if ('function' === typeof options) {\n        // .update(conditions, doc, callback)\n        callback = options;\n        options = null;\n    } else if ('function' === typeof doc) {\n        // .update(doc, callback);\n        callback = doc;\n        doc = conditions;\n        conditions = {};\n        options = null;\n    } else if ('function' === typeof conditions) {\n        // .update(callback)\n        callback = conditions;\n        conditions = undefined;\n        doc = undefined;\n        options = undefined;\n    } else if (typeof conditions === 'object' && !doc && !options && !callback) {\n        // .update(doc)\n        doc = conditions;\n        conditions = undefined;\n        options = undefined;\n        callback = undefined;\n    }\n\n    var args = [];\n\n    if (conditions) args.push(conditions);\n    if (doc) args.push(doc);\n    if (options) args.push(options);\n    if (callback) args.push(callback);\n\n    return args;\n}\n\nfunction parseIndexFields (options) {\n    var indexFields = {\n        deleted: false,\n        deletedAt: false,\n        deletedBy: false\n    };\n\n    if (!options.indexFields) {\n        return indexFields;\n    }\n\n    if ((typeof options.indexFields === 'string' || options.indexFields instanceof String) && options.indexFields === 'all') {\n        indexFields.deleted = indexFields.deletedAt = indexFields.deletedBy = true;\n    }\n\n    if (typeof(options.indexFields) === \"boolean\" && options.indexFields === true) {\n        indexFields.deleted = indexFields.deletedAt = indexFields.deletedBy = true;\n    }\n\n    if (Array.isArray(options.indexFields)) {\n        indexFields.deleted = options.indexFields.indexOf('deleted') > -1;\n        indexFields.deletedAt = options.indexFields.indexOf('deletedAt') > -1;\n        indexFields.deletedBy = options.indexFields.indexOf('deletedBy') > -1;\n    }\n\n    return indexFields;\n}\n\nfunction createSchemaObject (typeKey, typeValue, options) {\n    options[typeKey] = typeValue;\n    return options;\n}\n\nmodule.exports = function (schema, options) {\n    options = options || {};\n    var indexFields = parseIndexFields(options);\n\n    var typeKey = schema.options.typeKey;\n    var mongooseMajorVersion = +mongoose.version[0]; // 4, 5...\n    var mainUpdateMethod = mongooseMajorVersion < 5 ? 'update' : 'updateMany';\n    var mainUpdateWithDeletedMethod = mainUpdateMethod + 'WithDeleted';\n\n    function updateDocumentsByQuery(schema, conditions, updateQuery, callback) {\n        if (schema[mainUpdateWithDeletedMethod]) {\n            return schema[mainUpdateWithDeletedMethod](conditions, updateQuery, { multi: true }, callback);\n        } else {\n            return schema[mainUpdateMethod](conditions, updateQuery, { multi: true }, callback);\n        }\n    }\n\n    schema.add({ deleted: createSchemaObject(typeKey, Boolean, { default: false, index: indexFields.deleted }) });\n\n    if (options.deletedAt === true) {\n        schema.add({ deletedAt: createSchemaObject(typeKey, Date, { index: indexFields.deletedAt }) });\n    }\n\n    if (options.deletedBy === true) {\n        schema.add({ deletedBy: createSchemaObject(typeKey, options.deletedByType || Schema.Types.ObjectId, { index: indexFields.deletedBy }) });\n    }\n\n    var use$neOperator = true;\n    if (options.use$neOperator !== undefined && typeof options.use$neOperator === \"boolean\") {\n        use$neOperator = options.use$neOperator;\n    }\n\n    schema.pre('save', function (next) {\n        if (!this.deleted) {\n            this.deleted = false;\n        }\n        next();\n    });\n\n    if (options.overrideMethods) {\n        var overrideItems = options.overrideMethods;\n        var overridableMethods = ['count', 'countDocuments', 'find', 'findOne', 'findOneAndUpdate', 'update', 'updateOne', 'updateMany', 'aggregate'];\n        var finalList = [];\n\n        if ((typeof overrideItems === 'string' || overrideItems instanceof String) && overrideItems === 'all') {\n            finalList = overridableMethods;\n        }\n\n        if (typeof(overrideItems) === \"boolean\" && overrideItems === true) {\n            finalList = overridableMethods;\n        }\n\n        if (Array.isArray(overrideItems)) {\n            overrideItems.forEach(function(method) {\n                if (overridableMethods.indexOf(method) > -1) {\n                    finalList.push(method);\n                }\n            });\n        }\n\n        if (finalList.indexOf('aggregate') > -1) {\n            schema.pre('aggregate', function() {\n                var firsMatchStr = JSON.stringify(this.pipeline()[0]);\n\n                if ( firsMatchStr !== '{\"$match\":{\"deleted\":{\"$ne\":false}}}' ) {\n                    if (firsMatchStr === '{\"$match\":{\"showAllDocuments\":\"true\"}}') {\n                        this.pipeline().shift();\n                    } else {\n                        this.pipeline().unshift({ $match: { deleted: { '$ne': true } } });\n                    }\n                }\n            });\n        }\n\n        finalList.forEach(function(method) {\n            if (['count', 'countDocuments', 'find', 'findOne'].indexOf(method) > -1) {\n                var modelMethodName = method;\n\n                // countDocuments do not exist in Mongoose v4\n                /* istanbul ignore next */\n                if (mongooseMajorVersion < 5 && method === 'countDocuments' && typeof Model.countDocuments !== 'function') {\n                    modelMethodName = 'count';\n                }\n\n                schema.statics[method] = function () {\n                    var query = Model[modelMethodName].apply(this, arguments);\n                    if (!arguments[2] || arguments[2].withDeleted !== true) {\n                        if (use$neOperator) {\n                            query.where('deleted').ne(true);\n                        } else {\n                            query.where({deleted: false});\n                        }\n                    }\n                    return query;\n                };\n                schema.statics[method + 'Deleted'] = function () {\n                    if (use$neOperator) {\n                        return Model[modelMethodName].apply(this, arguments).where('deleted').ne(false);\n                    } else {\n                        return Model[modelMethodName].apply(this, arguments).where({deleted: true});\n                    }\n                };\n                schema.statics[method + 'WithDeleted'] = function () {\n                    return Model[modelMethodName].apply(this, arguments);\n                };\n            } else {\n                if (method === 'aggregate') {\n                    schema.statics[method + 'Deleted'] = function () {\n                        var args = [];\n                        Array.prototype.push.apply(args, arguments);\n                        var match = { $match : { deleted : {'$ne': false } } };\n                        arguments.length ? args[0].unshift(match) : args.push([match]);\n                        return Model[method].apply(this, args);\n                    };\n\n                    schema.statics[method + 'WithDeleted'] = function () {\n                        var args = [];\n                        Array.prototype.push.apply(args, arguments);\n                        var match = { $match : { showAllDocuments : 'true' } };\n                        arguments.length ? args[0].unshift(match) : args.push([match]);\n                        return Model[method].apply(this, args);\n                    };\n                } else {\n                    schema.statics[method] = function () {\n                        var args = parseUpdateArguments.apply(undefined, arguments);\n\n                        if (use$neOperator) {\n                            args[0].deleted = {'$ne': true};\n                        } else {\n                            args[0].deleted = false;\n                        }\n\n                        return Model[method].apply(this, args);\n                    };\n\n                    schema.statics[method + 'Deleted'] = function () {\n                        var args = parseUpdateArguments.apply(undefined, arguments);\n\n                        if (use$neOperator) {\n                            args[0].deleted = {'$ne': false};\n                        } else {\n                            args[0].deleted = true;\n                        }\n\n                        return Model[method].apply(this, args);\n                    };\n\n                    schema.statics[method + 'WithDeleted'] = function () {\n                        return Model[method].apply(this, arguments);\n                    };\n                }\n            }\n        });\n    }\n\n    schema.methods.softDelete = function (deletedBy, cb) {\n        if (typeof deletedBy === 'function') {\n          cb = deletedBy;\n          deletedBy = null;\n        }\n\n        this.deleted = true;\n\n        if (schema.path('deletedAt')) {\n            this.deletedAt = new Date();\n        }\n\n        if (schema.path('deletedBy')) {\n            this.deletedBy = deletedBy;\n        }\n\n        if (options.validateBeforeDelete === false) {\n            return this.save({ validateBeforeSave: false }, cb);\n        }\n\n        return this.save(cb);\n    };\n\n    schema.statics.softDelete =  function (conditions, deletedBy, callback) {\n        if (typeof deletedBy === 'function') {\n            callback = deletedBy;\n            conditions = conditions;\n            deletedBy = null;\n        } else if (typeof conditions === 'function') {\n            callback = conditions;\n            conditions = {};\n            deletedBy = null;\n        }\n\n        var doc = {\n            deleted: true\n        };\n\n        if (schema.path('deletedAt')) {\n            doc.deletedAt = new Date();\n        }\n\n        if (schema.path('deletedBy')) {\n            doc.deletedBy = deletedBy;\n        }\n\n        return updateDocumentsByQuery(this, conditions, doc, callback);\n    };\n\n    schema.statics.softDeleteById =  function (id, deletedBy, callback) {\n        if (arguments.length === 0 || typeof id === 'function') {\n            var msg = 'First argument is mandatory and must not be a function.';\n            throw new TypeError(msg);\n        }\n\n        var conditions = {\n            _id: id\n        };\n\n        return this.softDelete(conditions, deletedBy, callback);\n    };\n\n    schema.methods.restore = function (callback) {\n        this.deleted = false;\n        this.deletedAt = undefined;\n        this.deletedBy = undefined;\n        return this.save(callback);\n    };\n\n    schema.statics.restore =  function (conditions, callback) {\n        if (typeof conditions === 'function') {\n            callback = conditions;\n            conditions = {};\n        }\n\n        var doc = {\n            deleted: false,\n            deletedAt: undefined,\n            deletedBy: undefined\n        };\n\n        return updateDocumentsByQuery(this, conditions, doc, callback);\n    };\n};\n"]}