UNPKG

mongoose-delete-ts

Version:
88 lines (87 loc) 3.24 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 mongoose_1 = require("mongoose"); const hooks_1 = __importDefault(require("./hooks")); const methods_1 = __importDefault(require("./methods")); const query_1 = __importDefault(require("./query")); const statics_1 = __importDefault(require("./statics")); function default_1(schema, options = {}) { const typeKey = schema.get('typeKey') || 'type'; const deletedFieldNames = {}; const indexFields = indexFieldsOption(options.indexFields); schema.add({ deleted: { [typeKey]: Boolean, default: false, index: indexFields.includes('deleted'), ...options.deleted } }); if (hasDeletedField(options.deletedAt)) { const deletedAtName = deletedFieldName(options.deletedAt, 'deletedAt'); deletedFieldNames.deletedAt = deletedAtName; schema.add({ [deletedAtName]: { ...deletedFieldOptions('deletedAt', { [typeKey]: Date }, options.deletedAt), index: indexFields.includes('deletedAt') } }); } if (hasDeletedField(options.deletedBy)) { const deletedByName = deletedFieldName(options.deletedBy, 'deletedBy'); deletedFieldNames.deletedBy = deletedByName; schema.add({ [deletedByName]: { ...deletedFieldOptions('deletedBy', { [typeKey]: mongoose_1.Schema.Types.ObjectId }, options.deletedBy), index: indexFields.includes('deletedBy') } }); } (0, hooks_1.default)(schema, options.overrideMethods); (0, query_1.default)(schema); (0, methods_1.default)(schema, options, deletedFieldNames); (0, statics_1.default)(schema, options, deletedFieldNames); } function hasDeletedField(option) { return (option === true) || (typeof option === 'string' && option.length > 0) || (typeof option === 'object' && Object.keys(option).length > 0); } function deletedFieldName(option, fallbackName) { if (typeof option === 'string' && option.length > 0) { return option; } if (typeof option === 'object' && typeof option.name === 'string' && option.name.length > 0) { return option.name; } return fallbackName; } function deletedFieldOptions(name, defaultOptions, option) { const fieldOption = Object.assign({}, defaultOptions); if (typeof option === 'string' && option.length > 0) { Object.assign(fieldOption, { alias: name }); } if (typeof option === 'object') { Object.assign(fieldOption, option); if (option.name && option.name !== name) { Object.assign(fieldOption, { alias: name }); } } return fieldOption; } function indexFieldsOption(indexFields) { if (indexFields === true) { return ['deleted', 'deletedAt', 'deletedBy']; } else if (Array.isArray(indexFields)) { return indexFields; } else if (indexFields === false) { return []; } return ['deleted']; }