@stenneepro/mongoose-soft-delete
Version:
Mongoose soft delete plugin
34 lines (33 loc) • 1.68 kB
JavaScript
;
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;
}