{"version":3,"sources":["../../../../src/dbs/mongo/query.ts"],"names":["collection","params","query","where","auth","buildWhereQuery","search","totalClause","sort","p","all","limit","page","total","builtQuery","results","next","last","previous","start","isWhereBlock","param","field","checkedValue","c"],"mappings":"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","file":"/home/runner/work/equipped/equipped/dist/cjs/dbs/mongo/query.min.cjs","sourcesContent":["import { Collection } from 'mongodb'\n\nimport * as core from '../base/core'\nimport { QueryKeys, type QueryParams, type QueryResults, type QueryWhereBlock, type QueryWhereClause } from '../pipes'\n\nexport const parseMongodbQueryParams = async <Model extends core.Model<{ _id: string }>>(\n\tcollection: Collection<Model>,\n\tparams: QueryParams,\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\tlet builtQuery = collection.find(totalClause)\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"]}