UNPKG

@stenneepro/mongoose-soft-delete

Version:
34 lines (33 loc) 1.68 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = default_1; const deleteDocument_1 = __importDefault(require("./utils/deleteDocument")); const restoreDocument_1 = __importDefault(require("./utils/restoreDocument")); function default_1(schema, deleteOptions, deletedFieldOptions) { schema.methods.deleteOne = async function (saveOptions) { this.set((0, deleteDocument_1.default)(deletedFieldOptions)); await this.save(mergeArguments(deleteOptions, saveOptions)); return { acknowledged: true, deletedCount: 1 }; }; schema.methods.deleteOneByUser = async function (user, saveOptions) { this.set((0, deleteDocument_1.default)(deletedFieldOptions, user)); await this.save(mergeArguments(deleteOptions, saveOptions)); return { acknowledged: true, deletedCount: 1 }; }; // @ts-expect-error TypeScript recognizes `this` as `DeletedMethods`, but in fact `this` is Mongoose `Document`. schema.methods.restoreOne = function (saveOptions) { this.set((0, restoreDocument_1.default)(deletedFieldOptions)); return this.save(mergeArguments(deleteOptions, saveOptions)); }; } function mergeArguments(deleteOptions, saveOptions) { const options = {}; if (typeof deleteOptions.validateBeforeDelete !== 'undefined') { Object.assign(options, { validateBeforeSave: Boolean(deleteOptions.validateBeforeDelete) }); } Object.assign(options, saveOptions || {}, { timestamps: false }); return options; }