{"version":3,"sources":["../../../../../src/dbs/adapters/mongodb/changes.ts","../../../../../src/dbs/adapters/base/changes.ts","../../../../../src/dbs/adapters/mongodb/db.ts","../../../../../src/dbs/adapters/mongodb/pipes.ts","../../../../../src/dbs/adapters/mongodb/query.ts"],"sourcesContent":["import { Collection, type Filter } from 'mongodb'\nimport { differ } from 'valleyed'\n\nimport type { MongoDbConfig } from './pipes'\nimport { EquippedError } from '../../../errors'\nimport { Instance } from '../../../instance'\nimport { retry } from '../../../utilities'\nimport { DbChange, TopicPrefix } from '../base/changes'\nimport * as core from '../base/core'\nimport type { DbChangeConfig } from '../base/types'\n\nexport class MongoDbChange<Model extends core.Model<{ _id: string }>, Entity extends core.Entity> extends DbChange<Model, Entity> {\n\t#started = false\n\n\tconstructor(\n\t\tconfig: MongoDbConfig,\n\t\tchange: DbChangeConfig,\n\t\tcollection: Collection<Model>,\n\t\tcallbacks: core.DbChangeCallbacks<Model, Entity>,\n\t\tmapper: (model: Model) => Entity,\n\t) {\n\t\tsuper(change, callbacks, mapper)\n\n\t\tconst hydrate = (data: any) =>\n\t\t\tdata._id\n\t\t\t\t? {\n\t\t\t\t\t\t...data,\n\t\t\t\t\t\t_id: data._id['$oid'] ?? data._id,\n\t\t\t\t\t}\n\t\t\t\t: undefined\n\n\t\tconst dbName = collection.dbName\n\t\tconst colName = collection.collectionName\n\t\tconst dbColName = `${dbName}.${colName}`\n\t\tconst topic = `${TopicPrefix}.${dbColName}`\n\n\t\tconst TestId = '5f5f65717569707065645f5f' // __equipped__\n\t\tconst condition = { _id: TestId } as Filter<Model>\n\n\t\tchange.eventBus.stream(topic as never, { skipScope: true }).subscribe(async (data: DbDocumentChange) => {\n\t\t\tconst op = data.op\n\n\t\t\tlet before = JSON.parse(data.before ?? 'null')\n\t\t\tlet after = JSON.parse(data.after ?? 'null')\n\n\t\t\tif (before) before = hydrate(before)\n\t\t\tif (after) after = hydrate(after)\n\t\t\tif (before?._id === TestId || after?._id === TestId) return\n\n\t\t\tif (op === 'c' && this.callbacks.created && after)\n\t\t\t\tawait this.callbacks.created({\n\t\t\t\t\tbefore: null,\n\t\t\t\t\tafter: this.mapper(after)!,\n\t\t\t\t})\n\t\t\telse if (op === 'u' && this.callbacks.updated && before && after)\n\t\t\t\tawait this.callbacks.updated({\n\t\t\t\t\tbefore: this.mapper(before)!,\n\t\t\t\t\tafter: this.mapper(after)!,\n\t\t\t\t\tchanges: differ.from(differ.diff(before, after)),\n\t\t\t\t})\n\t\t\telse if (op === 'd' && this.callbacks.deleted && before)\n\t\t\t\tawait this.callbacks.deleted({\n\t\t\t\t\tbefore: this.mapper(before)!,\n\t\t\t\t\tafter: null,\n\t\t\t\t})\n\t\t})\n\n\t\tInstance.on('start', async () => {\n\t\t\tif (this.#started) return\n\t\t\tthis.#started = true\n\n\t\t\tawait retry(\n\t\t\t\tasync () => {\n\t\t\t\t\tconst started = await this.configureConnector(topic, {\n\t\t\t\t\t\t'connector.class': 'io.debezium.connector.mongodb.MongoDbConnector',\n\t\t\t\t\t\t'capture.mode': 'change_streams_update_full_with_pre_image',\n\t\t\t\t\t\t'mongodb.connection.string': config.uri,\n\t\t\t\t\t\t'collection.include.list': dbColName,\n\t\t\t\t\t\t'snapshot.mode': 'when_needed',\n\t\t\t\t\t\t'capture.scope': 'collection',\n\t\t\t\t\t\t'capture.target': dbColName,\n\t\t\t\t\t\t'heartbeat.interval.ms': '60000',\n\t\t\t\t\t\t'errors.max.retries': '3',\n\t\t\t\t\t})\n\n\t\t\t\t\tif (started) return { done: true, value: true }\n\t\t\t\t\tawait collection.findOneAndUpdate(condition, { $set: { colName } as any }, { upsert: true })\n\t\t\t\t\tawait collection.findOneAndDelete(condition)\n\t\t\t\t\tInstance.get().log.warn(`Waiting for db changes for ${dbColName} to start...`)\n\t\t\t\t\treturn { done: false }\n\t\t\t\t},\n\t\t\t\t6,\n\t\t\t\t30_000,\n\t\t\t).catch((err) => Instance.crash(new EquippedError(`Failed to start db changes`, { dbColName }, err)))\n\t\t})\n\t}\n}\n\ntype DbDocumentChange = {\n\tbefore: string | null\n\tafter: string | null\n\top: 'c' | 'u' | 'd'\n}\n","import axios from 'axios'\nimport { v } from 'valleyed'\n\nimport * as core from './core'\nimport { dbChangeConfigPipe, type DbChangeConfig } from './types'\nimport { EquippedError } from '../../../errors'\n\nexport const TopicPrefix = 'db-changes'\n\nexport abstract class DbChange<Model extends core.Model<core.IdType>, Entity extends core.Entity> {\n\tconstructor(\n\t\tprotected config: DbChangeConfig,\n\t\tprotected callbacks: core.DbChangeCallbacks<Model, Entity>,\n\t\tprotected mapper: (model: Model) => Entity,\n\t) {\n\t\tthis.config = v.assert(dbChangeConfigPipe(), config)\n\t}\n\n\tprotected async configureConnector(key: string, data: Record<string, string>) {\n\t\tconst instance = axios.create({ baseURL: this.config.debeziumUrl })\n\t\treturn await instance\n\t\t\t.put(`/connectors/${key}/config`, {\n\t\t\t\t'topic.prefix': TopicPrefix,\n\t\t\t\t'topic.creation.enable': 'false',\n\t\t\t\t'topic.creation.default.replication.factor': `-1`,\n\t\t\t\t'topic.creation.default.partitions': '-1',\n\t\t\t\t'key.converter': 'org.apache.kafka.connect.json.JsonConverter',\n\t\t\t\t'key.converter.schemas.enable': 'false',\n\t\t\t\t'value.converter': 'org.apache.kafka.connect.json.JsonConverter',\n\t\t\t\t'value.converter.schemas.enable': 'false',\n\t\t\t\t...data,\n\t\t\t})\n\t\t\t.then(async () => {\n\t\t\t\tconst topics = await instance.get(`/connectors/${key}/topics`)\n\t\t\t\treturn topics.data[key]?.topics?.includes?.(key) ?? false\n\t\t\t})\n\t\t\t.catch((err) => {\n\t\t\t\tthrow new EquippedError(`Failed to configure watcher`, { key }, err)\n\t\t\t})\n\t}\n}\n","import { AsyncLocalStorage } from 'node:async_hooks'\n\nimport {\n\tClientSession,\n\tCollection,\n\tMongoClient,\n\tObjectId,\n\ttype CollectionInfo,\n\ttype OptionalUnlessRequiredId,\n\ttype SortDirection,\n\ttype WithId,\n} from 'mongodb'\nimport { v } from 'valleyed'\n\nimport { MongoDbChange } from './changes'\nimport { mongoDbConfigPipe, type MongoDbConfig } from './pipes'\nimport { parseMongodbQueryParams } from './query'\nimport { EquippedError } from '../../../errors'\nimport { Instance } from '../../../instance'\nimport type { QueryParamsBase } from '../../pipes'\nimport * as core from '../base/core'\nimport { Db } from '../base/db'\nimport type { DbConfig } from '../base/types'\n\nconst idKey = '_id'\ntype IdType = { _id: string }\n\nconst sessionStore = new AsyncLocalStorage<ClientSession | undefined>(undefined)\n\nexport class MongoDb extends Db<{ _id: string }> {\n\tclient: MongoClient\n\t#cols: { db: string; col: string }[] = []\n\n\tconstructor(\n\t\tprivate mongoConfig: MongoDbConfig,\n\t\tdbConfig: DbConfig,\n\t) {\n\t\tsuper(dbConfig)\n\t\tthis.mongoConfig = v.assert(mongoDbConfigPipe(), mongoConfig)\n\t\tthis.client = new MongoClient(mongoConfig.uri, { ignoreUndefined: true })\n\t\tInstance.on('start', async () => {\n\t\t\tawait this.client.connect()\n\n\t\t\tconst grouped = this.#cols.reduce<Record<string, string[]>>((acc, cur) => {\n\t\t\t\tif (!acc[cur.db]) acc[cur.db] = []\n\t\t\t\tacc[cur.db].push(cur.col)\n\t\t\t\treturn acc\n\t\t\t}, {})\n\n\t\t\tconst options = {\n\t\t\t\tchangeStreamPreAndPostImages: { enabled: true },\n\t\t\t}\n\t\t\tawait Promise.all(\n\t\t\t\tObject.entries(grouped).map(async ([dbName, colNames]) => {\n\t\t\t\t\tconst db = this.client.db(dbName)\n\t\t\t\t\tconst collections = await db.listCollections<CollectionInfo>().toArray()\n\t\t\t\t\treturn colNames.map(async (colName) => {\n\t\t\t\t\t\tconst existing = collections.find((collection) => collection.name === colName)\n\t\t\t\t\t\tif (existing) {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\texisting.options?.changeStreamPreAndPostImages?.enabled !== options.changeStreamPreAndPostImages.enabled\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tawait db.command({ collMod: colName, ...options })\n\t\t\t\t\t\t} else await db.createCollection(colName, options)\n\t\t\t\t\t})\n\t\t\t\t}),\n\t\t\t)\n\t\t})\n\t\tInstance.on('close', async () => this.client.close())\n\t}\n\n\tasync session<T>(callback: () => Promise<T>) {\n\t\tif (sessionStore.getStore()) return callback()\n\t\tconst session = await this.client.startSession()\n\t\treturn session.withTransaction(async () => sessionStore.run(session, callback))\n\t}\n\n\tid() {\n\t\treturn new ObjectId()\n\t}\n\n\tuse<Model extends core.Model<{ _id: string }>, Entity extends core.Entity>(config: core.Config<Model, Entity>) {\n\t\tconst db = this.getScopedDb(config.db)\n\t\tthis.#cols.push({ db, col: config.col })\n\t\treturn this.#getTable(config, this.client.db(db).collection<Model>(config.col))\n\t}\n\n\t#getTable<Model extends core.Model<IdType>, Entity extends core.Entity>(\n\t\tconfig: core.Config<Model, Entity>,\n\t\tcollection: Collection<Model>,\n\t) {\n\t\ttype WI = Model | WithId<Model>\n\t\tfunction transform(doc: WI, select?: core.Select<Entity>): Entity\n\t\t// eslint-disable-next-line no-redeclare\n\t\tfunction transform(doc: WI[], select?: core.Select<Entity>): Entity[]\n\t\t// eslint-disable-next-line no-redeclare\n\t\tfunction transform(doc: WI | WI[], select?: core.Select<Entity>) {\n\t\t\tconst docs = Array.isArray(doc) ? doc : [doc]\n\t\t\tconst mapped = docs.map((d) => config.mapper(d as Model, select))\n\t\t\treturn Array.isArray(doc) ? mapped : mapped[0]\n\t\t}\n\n\t\tfunction prepInsertValue(value: core.CreateInput<Model>, id: string, now: Date, skipUpdate?: boolean) {\n\t\t\tconst base: core.Model<IdType> = {\n\t\t\t\t[idKey]: id,\n\t\t\t\t...(config.options?.skipAudit\n\t\t\t\t\t? {}\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tcreatedAt: now.getTime(),\n\t\t\t\t\t\t\t...(skipUpdate ? {} : { updatedAt: now.getTime() }),\n\t\t\t\t\t\t}),\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t...value,\n\t\t\t\t...base,\n\t\t\t} as unknown as OptionalUnlessRequiredId<Model>\n\t\t}\n\n\t\tfunction prepUpdateValue(value: core.UpdateInput<Model>, now: Date, upsert = false) {\n\t\t\treturn {\n\t\t\t\t...value,\n\t\t\t\t$set: {\n\t\t\t\t\t...value.$set,\n\t\t\t\t\t...(upsert || (Object.keys(value).length > 0 && !config.options?.skipAudit) ? { updatedAt: now.getTime() } : {}),\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\n\t\tconst dbThis = this\n\n\t\tconst table: core.Table<IdType, Model, Entity, { collection: Collection<Model> }> = {\n\t\t\tconfig,\n\t\t\textras: { collection },\n\n\t\t\tquery: async (params) => {\n\t\t\t\tconst results = await parseMongodbQueryParams(collection, params as QueryParamsBase)\n\t\t\t\treturn {\n\t\t\t\t\t...results,\n\t\t\t\t\tresults: transform(results.results as any, params.select as core.Select<Entity>),\n\t\t\t\t} as any\n\t\t\t},\n\n\t\t\tfindMany: async (filter, options = {}) => {\n\t\t\t\tconst { select, ...rest } = options\n\t\t\t\tconst projection = select?.length ? Object.fromEntries(select.map((k) => [k, 1])) : undefined\n\t\t\t\tconst sortArray = Array.isArray(rest.sort) ? rest.sort : rest.sort ? [rest.sort] : []\n\t\t\t\tconst sort = sortArray.map((p) => [p.field, p.desc ? 'desc' : 'asc'] as [string, SortDirection])\n\t\t\t\tconst docs = await collection\n\t\t\t\t\t.find(filter, {\n\t\t\t\t\t\tsession: sessionStore.getStore(),\n\t\t\t\t\t\tlimit: rest.limit,\n\t\t\t\t\t\tsort,\n\t\t\t\t\t\tprojection,\n\t\t\t\t\t})\n\t\t\t\t\t.toArray()\n\t\t\t\treturn transform(docs, select as core.Select<Entity>) as any\n\t\t\t},\n\n\t\t\tfindOne: async (filter: core.Filter<Model>, options = {}) => {\n\t\t\t\tconst result = await table.findMany(filter, { ...options, limit: 1 } as any)\n\t\t\t\treturn (result.at(0) ?? null) as any\n\t\t\t},\n\n\t\t\tfindById: async (id, options = {}) => {\n\t\t\t\tconst result = await table.findOne({ [idKey]: id } as core.Filter<Model>, options as any)\n\t\t\t\treturn result as any\n\t\t\t},\n\n\t\t\tinsertMany: async (values, options = {}) => {\n\t\t\t\tconst now = options.getTime?.() ?? new Date()\n\t\t\t\tconst payload = values.map((value, i) => prepInsertValue(value, options.makeId?.(i) ?? new ObjectId().toString(), now))\n\t\t\t\tawait collection.insertMany(payload, { session: sessionStore.getStore() })\n\n\t\t\t\tconst insertedData = await Promise.all(payload.map(async (data) => await table.findById(data[idKey] as any)))\n\t\t\t\treturn insertedData.filter((value) => !!value)\n\t\t\t},\n\n\t\t\tinsertOne: async (values, options = {}) => {\n\t\t\t\tconst result = await table.insertMany([values], options)\n\t\t\t\treturn result[0]\n\t\t\t},\n\n\t\t\tupdateMany: async (filter, values, options = {}) => {\n\t\t\t\tconst now = options.getTime?.() ?? new Date()\n\t\t\t\tconst session = sessionStore.getStore()\n\t\t\t\tconst data = await collection.find(filter, { session, projection: { [idKey]: 1 } }).toArray()\n\t\t\t\tconst ids = data.map((doc) => doc[idKey])\n\t\t\t\tconst filterUpd = { [idKey]: { $in: ids } } as core.Filter<Model>\n\t\t\t\tawait collection.updateMany(filterUpd, prepUpdateValue(values, now), { session })\n\t\t\t\treturn table.findMany(filterUpd)\n\t\t\t},\n\n\t\t\tupdateOne: async (filter, values, options = {}) => {\n\t\t\t\tconst now = options.getTime?.() ?? new Date()\n\t\t\t\tconst doc = await collection.findOneAndUpdate(filter, prepUpdateValue(values, now), {\n\t\t\t\t\treturnDocument: 'after',\n\t\t\t\t\tsession: sessionStore.getStore(),\n\t\t\t\t})\n\t\t\t\treturn doc ? transform(doc, undefined) : null\n\t\t\t},\n\n\t\t\tupdateById: async (id, values, options = {}) => {\n\t\t\t\tconst result = await table.updateOne({ [idKey]: id } as core.Filter<Model>, values, options)\n\t\t\t\treturn result\n\t\t\t},\n\n\t\t\tupsertOne: async (filter, values, options = {}) => {\n\t\t\t\tconst now = options.getTime?.() ?? new Date()\n\n\t\t\t\tconst doc = await collection.findOneAndUpdate(\n\t\t\t\t\tfilter,\n\t\t\t\t\t{\n\t\t\t\t\t\t...prepUpdateValue('update' in values ? values.update : {}, now, true),\n\t\t\t\t\t\t// @ts-expect-error fighting ts\n\t\t\t\t\t\t$setOnInsert: prepInsertValue(values.insert, options.makeId?.() ?? new ObjectId().toString(), now, true),\n\t\t\t\t\t},\n\t\t\t\t\t{ returnDocument: 'after', session: sessionStore.getStore(), upsert: true },\n\t\t\t\t)\n\n\t\t\t\treturn transform(doc, undefined)\n\t\t\t},\n\n\t\t\tdeleteMany: async (filter, options = {}) => {\n\t\t\t\tconst docs = await table.findMany(filter, options)\n\t\t\t\tawait collection.deleteMany(filter, { session: sessionStore.getStore() })\n\t\t\t\treturn docs\n\t\t\t},\n\n\t\t\tdeleteOne: async (filter) => {\n\t\t\t\tconst doc = await collection.findOneAndDelete(filter, { session: sessionStore.getStore() })\n\t\t\t\treturn doc ? transform(doc, undefined) : null\n\t\t\t},\n\n\t\t\tdeleteById: async (id) => {\n\t\t\t\tconst result = await table.deleteOne({ [idKey]: id } as core.Filter<Model>)\n\t\t\t\treturn result\n\t\t\t},\n\n\t\t\tbulkWrite: async (operations, options = {}) => {\n\t\t\t\tif (!operations.length) return\n\t\t\t\tconst bulk = collection.initializeUnorderedBulkOp({ session: sessionStore.getStore() })\n\t\t\t\tconst now = options.getTime?.() ?? new Date()\n\t\t\t\toperations.forEach((operation, i) => {\n\t\t\t\t\tswitch (operation.op) {\n\t\t\t\t\t\tcase 'insert':\n\t\t\t\t\t\t\tbulk.insert(prepInsertValue(operation.value, operation.makeId?.(i) ?? new ObjectId().toString(), now))\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tcase 'delete':\n\t\t\t\t\t\t\tbulk.find(operation.filter).delete()\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tcase 'update':\n\t\t\t\t\t\t\tbulk.find(operation.filter).update(prepUpdateValue(operation.value, now))\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tcase 'upsert':\n\t\t\t\t\t\t\tbulk.find(operation.filter)\n\t\t\t\t\t\t\t\t.upsert()\n\t\t\t\t\t\t\t\t.update({\n\t\t\t\t\t\t\t\t\t...prepUpdateValue('update' in operation ? operation.update : {}, now, true),\n\t\t\t\t\t\t\t\t\t$setOnInsert: prepInsertValue(\n\t\t\t\t\t\t\t\t\t\toperation.insert as any,\n\t\t\t\t\t\t\t\t\t\toperation.makeId?.(i) ?? new ObjectId().toString(),\n\t\t\t\t\t\t\t\t\t\tnow,\n\t\t\t\t\t\t\t\t\t\ttrue,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tthrow new EquippedError(`Unknown bulkWrite operation`, { operation })\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tawait bulk.execute({ session: sessionStore.getStore() })\n\t\t\t},\n\n\t\t\twatch(callbacks) {\n\t\t\t\tif (!dbThis.config.changes)\n\t\t\t\t\tInstance.crash(new EquippedError('Db changes are not enabled in the configuration.', { config }))\n\t\t\t\treturn new MongoDbChange<Model, Entity>(dbThis.mongoConfig, dbThis.config.changes, collection, callbacks, (m) =>\n\t\t\t\t\tconfig.mapper(m),\n\t\t\t\t)\n\t\t\t},\n\t\t}\n\n\t\treturn table\n\t}\n}\n","import { type PipeInput, v } from 'valleyed'\n\nexport const mongoDbConfigPipe = () =>\n\tv.meta(\n\t\tv.object({\n\t\t\turi: v.string(),\n\t\t}),\n\t\t{ title: 'Mongodb Config', $refId: 'MongodbConfig' },\n\t)\n\nexport type MongoDbConfig = PipeInput<ReturnType<typeof mongoDbConfigPipe>>\n","import { Collection } from 'mongodb'\n\nimport { QueryKeys, type QueryParamsBase, type QueryResults, type QueryWhereBlock, type QueryWhereClause } from '../../pipes'\nimport * as core from '../base/core'\n\nexport const parseMongodbQueryParams = async <Model extends core.Model<{ _id: string }>>(\n\tcollection: Collection<Model>,\n\tparams: QueryParamsBase,\n): Promise<QueryResults<Model>> => {\n\t// Handle where/search clauses\n\tconst query = <ReturnType<typeof buildWhereQuery>[]>[]\n\tconst where = buildWhereQuery(params.where, params.whereType)\n\tif (where) query.push(where)\n\tconst auth = buildWhereQuery(params.auth, params.authType)\n\tif (auth) query.push(auth)\n\tif (params.search && params.search.fields.length > 0) {\n\t\tconst search = params.search.fields.map((field) => ({\n\t\t\t[field]: {\n\t\t\t\t$regex: new RegExp(params.search!.value, 'i'),\n\t\t\t},\n\t\t}))\n\t\tquery.push({ $or: search })\n\t}\n\tconst totalClause = {}\n\tif (query.length > 0) totalClause['$and'] = query\n\n\t// Handle sort clauses\n\tconst sort = params.sort.map((p) => [p.field, p.desc ? 'desc' : 'asc'])\n\n\t// Handle limit/offest clause\n\tconst all = params.all ?? false\n\tconst limit = params.limit\n\tconst page = params.page\n\n\tconst total = await collection.countDocuments(totalClause)\n\n\tconst projection = params.select?.length ? Object.fromEntries(params.select.map((k) => [k, 1])) : undefined\n\tlet builtQuery = collection.find(totalClause, { projection })\n\tif (sort.length) builtQuery = builtQuery.sort(Object.fromEntries(sort))\n\tif (!all && limit) {\n\t\tbuiltQuery = builtQuery.limit(limit)\n\t\tif (page) builtQuery = builtQuery.skip((page - 1) * limit)\n\t}\n\n\tconst results = await builtQuery.toArray()\n\tconst start = 1\n\tconst last = Math.ceil(total / limit) || 1\n\tconst next = page >= last ? null : page + 1\n\tconst previous = page <= start ? null : page - 1\n\n\treturn {\n\t\tpages: { start, last, next, previous, current: page },\n\t\tdocs: { limit, total, count: results.length },\n\t\tresults: results as any[],\n\t} satisfies QueryResults<Model>\n}\n\nfunction isWhereBlock(param: QueryWhereClause): param is QueryWhereBlock {\n\treturn Object.values(QueryKeys).includes(param.condition as QueryKeys)\n}\n\nconst buildWhereQuery = (params: QueryWhereClause[], key: QueryKeys = QueryKeys.and): Record<string, Record<string, any>> | null => {\n\tconst where = (Array.isArray(params) ? params : [])\n\t\t.map((param) => {\n\t\t\tif (isWhereBlock(param)) return buildWhereQuery(param.value, param.condition)\n\t\t\tconst { field } = param\n\t\t\tconst checkedField = field === 'id' ? '_id' : (field ?? '')\n\t\t\tconst checkedValue = param.value === undefined ? '' : param.value\n\t\t\treturn {\n\t\t\t\tfield: checkedField,\n\t\t\t\tvalue: checkedValue,\n\t\t\t\tcondition: param.condition,\n\t\t\t\tisWhere: true,\n\t\t\t}\n\t\t})\n\t\t.filter((c) => !!c)\n\t\t.map((c) => {\n\t\t\tif (c.isWhere) return { [`${c.field}`]: { [`$${c.condition}`]: c.value } }\n\t\t\telse return c\n\t\t})\n\n\treturn where.length > 0 ? { [`$${key}`]: where } : null\n}\n"],"mappings":"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","names":["v","v","v"]}