UNPKG

@joktec/mongo

Version:

JokTec - Mongo Service

73 lines 2.76 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.buildIndex = buildIndex; const utils_1 = require("@joktec/utils"); const typegoose_1 = require("@typegoose/typegoose"); const lodash_1 = require("lodash"); function injectParanoid(indexOption, paranoidKey = 'deletedAt') { if (!(paranoidKey in indexOption.fields)) { indexOption.fields[paranoidKey] = 1; } } function buildIndex(options) { const deletedAt = (0, lodash_1.get)(options, 'paranoid.deletedAt.name', 'deletedAt'); const injectIndex = (0, lodash_1.get)(options, 'paranoid.injectIndex', false); const paranoid = options?.paranoid && injectIndex ? deletedAt : null; const indexes = []; if (options?.index) { (0, utils_1.toArray)(options.index).map(key => { const fields = key.split(',').reduce((obj, curr) => { obj[curr] = 1; return obj; }, {}); const idx = { fields, options: { background: true } }; if (paranoid) injectParanoid(idx, paranoid); indexes.push(idx); }); } if (options?.unique) { (0, utils_1.toArray)(options.unique).map(key => { const opts = { unique: true, background: true, sparse: true }; const fields = {}; key.split(',').map(field => { fields[field] = 1; }); const idx = { fields, options: opts }; if (paranoid) injectParanoid(idx, paranoid); indexes.push(idx); }); } if (options?.textSearch) { const fields = options.textSearch.split(',').reduce((obj, path) => { obj[path] = 'text'; return obj; }, {}); const idx = { fields, options: { background: true } }; if (paranoid) injectParanoid(idx, paranoid); indexes.push(idx); } if (options?.geoSearch) { const fields = { [options.geoSearch]: '2dsphere' }; const idx = { fields, options: { background: true } }; if (paranoid) injectParanoid(idx, paranoid); indexes.push(idx); } if (options?.ttl) { const ttlIndexes = (0, utils_1.toArray)(options.ttl).map(index => { return { fields: { [index.field]: 1 }, options: { expires: index.expiry } }; }); indexes.push(...ttlIndexes); } (0, utils_1.toArray)(options?.customIndexes).map(idx => { idx.options = { background: true, ...idx.options }; if (paranoid) injectParanoid(idx, paranoid); indexes.push(idx); }); return indexes.map(idx => (0, typegoose_1.index)(idx.fields, idx.options)); } //# sourceMappingURL=mongo.index.js.map