UNPKG

@feathersjs/mongodb

Version:

Feathers MongoDB service adapter

65 lines (51 loc) 1.64 kB
import { ObjectId } from 'mongodb' export type ObjectIdParam = string | number | ObjectId export type IdQueryObject<T> = { $in?: T[] $nin?: T[] $ne?: T } const toObjectId = (value: ObjectIdParam) => new ObjectId(value) export async function resolveObjectId(value: ObjectIdParam) { return toObjectId(value) } export async function resolveQueryObjectId( value: IdQueryObject<ObjectIdParam> ): Promise<IdQueryObject<ObjectId>> export async function resolveQueryObjectId(value: ObjectIdParam): Promise<ObjectId> export async function resolveQueryObjectId(value: ObjectIdParam | IdQueryObject<ObjectIdParam>) { if (!value) { return undefined } if (typeof value === 'string' || typeof value === 'number' || value instanceof ObjectId) { return toObjectId(value) } const convertedObject: IdQueryObject<ObjectId> = {} if (Array.isArray(value.$in)) { convertedObject.$in = value.$in.map(toObjectId) } if (Array.isArray(value.$nin)) { convertedObject.$nin = value.$nin.map(toObjectId) } if (value.$ne !== undefined) { convertedObject.$ne = toObjectId(value.$ne) } return convertedObject } export const keywordObjectId = { keyword: 'objectid', type: 'string', modifying: true, compile(schemaVal: boolean) { if (!schemaVal) return () => true return function (value: string, obj: any) { const { parentData, parentDataProperty } = obj try { parentData[parentDataProperty] = new ObjectId(value) return true } catch (error) { throw new Error(`invalid objectid for property "${parentDataProperty}"`) } } } } as const