overleaf/services/web/app/src/Features/Helpers/Mongo.js

52 lines
1.2 KiB
JavaScript
Raw Normal View History

const OError = require('@overleaf/o-error')
const { ObjectId } = require('mongodb')
const { ObjectId: MongooseObjectId } = require('mongoose').mongo
function _getObjectIdInstance(id) {
if (typeof id === 'string') {
return ObjectId(id)
} else if (id instanceof ObjectId) {
return id
} else if (id instanceof MongooseObjectId) {
return ObjectId(id.toString())
} else {
throw new OError('unexpected object id', { id })
}
}
function normalizeQuery(query) {
if (!query) {
throw new Error('no query provided')
}
if (
typeof query === 'string' ||
query instanceof ObjectId ||
query instanceof MongooseObjectId
) {
return { _id: _getObjectIdInstance(query) }
} else if (typeof query._id === 'string') {
query._id = ObjectId(query._id)
return query
} else {
return query
}
}
function normalizeMultiQuery(query) {
if (Array.isArray(query)) {
return { _id: { $in: query.map(id => _getObjectIdInstance(id)) } }
} else {
return normalizeQuery(query)
}
}
function isObjectIdInstance(id) {
return id instanceof ObjectId || id instanceof MongooseObjectId
}
module.exports = {
isObjectIdInstance,
normalizeQuery,
normalizeMultiQuery,
}