{"version":3,"sources":["../../../src/dbs/pipes.ts"],"sourcesContent":["import { type ConditionalObjectKeys, type Pipe, type PipeInput, type PipeOutput, v } from 'valleyed'\n\nimport { Instance } from '../instance'\n\nexport enum QueryKeys {\n\tand = 'and',\n\tor = 'or',\n}\n\nexport enum Conditions {\n\tlt = 'lt',\n\tlte = 'lte',\n\tgt = 'gt',\n\tgte = 'gte',\n\teq = 'eq',\n\tne = 'ne',\n\tin = 'in',\n\tnin = 'nin',\n\texists = 'exists',\n}\n\nconst queryKeys = v.catch(v.defaults(v.in([QueryKeys.and, QueryKeys.or]), QueryKeys.and), QueryKeys.and)\nconst queryWhere = v.object({\n\tfield: v.string(),\n\tvalue: v.any(),\n\tcondition: v.catch(v.defaults(v.in(Object.values(Conditions)), Conditions.eq), Conditions.eq),\n})\nconst queryWhereBlock = v.recursive(\n\t() =>\n\t\tv.discriminate((d) => (Object.values(QueryKeys).includes(d.condition as any) ? 'block' : 'regular'), {\n\t\t\tblock: v.object({\n\t\t\t\tcondition: queryKeys,\n\t\t\t\tvalue: v.array(queryWhereBlock),\n\t\t\t}),\n\t\t\tregular: queryWhere,\n\t\t}),\n\t'QueryWhereBlock',\n) as Pipe<\n\t| {\n\t\t\tcondition: PipeInput<typeof queryKeys>\n\t\t\tvalue: PipeInput<typeof queryWhere>[]\n\t  }\n\t| PipeInput<typeof queryWhere>,\n\t| {\n\t\t\tcondition: PipeOutput<typeof queryKeys>\n\t\t\tvalue: PipeOutput<typeof queryWhere>[]\n\t  }\n\t| PipeOutput<typeof queryWhere>\n>\n\nconst queryWhereClause = v.defaults(v.array(queryWhereBlock), [])\n\nexport function queryParamsPipe() {\n\treturn v.meta(\n\t\tv\n\t\t\t.object({\n\t\t\t\tall: v.defaults(v.boolean(), false),\n\t\t\t\tlimit: v.lazy(() => {\n\t\t\t\t\tconst pagLimit = Instance.get().settings.utils.paginationDefaultLimit\n\t\t\t\t\treturn v.catch(v.defaults(v.number().pipe(v.lte(pagLimit)), pagLimit), pagLimit)\n\t\t\t\t}),\n\t\t\t\tpage: v.catch(v.defaults(v.number().pipe(v.gte(1)), 1), 1),\n\t\t\t\tsearch: v.defaults(\n\t\t\t\t\tv.nullish(\n\t\t\t\t\t\tv.object({\n\t\t\t\t\t\t\tvalue: v.string(),\n\t\t\t\t\t\t\tfields: v.array(v.string()),\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t\tnull,\n\t\t\t\t),\n\t\t\t\tsort: v.defaults(\n\t\t\t\t\tv.array(\n\t\t\t\t\t\tv.object({\n\t\t\t\t\t\t\tfield: v.string(),\n\t\t\t\t\t\t\tdesc: v.defaults(v.boolean(), false),\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t\t[],\n\t\t\t\t),\n\t\t\t\twhereType: queryKeys,\n\t\t\t\twhere: queryWhereClause,\n\t\t\t})\n\t\t\t.pipe((p) => ({ ...p, auth: <(typeof p)['where']>[], authType: QueryKeys.and })),\n\t\t{ title: 'Query Params', $refId: 'QueryParams' },\n\t)\n}\n\nexport function queryResultsPipe<T>(model: Pipe<any, T>) {\n\treturn v.object({\n\t\tpages: v.object({\n\t\t\tcurrent: v.number(),\n\t\t\tstart: v.number(),\n\t\t\tlast: v.number(),\n\t\t\tprevious: v.nullable(v.number()),\n\t\t\tnext: v.nullable(v.number()),\n\t\t}),\n\t\tdocs: v.object({\n\t\t\tlimit: v.number(),\n\t\t\ttotal: v.number(),\n\t\t\tcount: v.number(),\n\t\t}),\n\t\tresults: v.array(model),\n\t})\n}\n\nexport function wrapQueryParams(params: QueryParamsInput): QueryParams {\n\treturn v.assert(queryParamsPipe(), params)\n}\n\nexport type QueryParams = PipeOutput<ReturnType<typeof queryParamsPipe>>\nexport type QueryParamsInput = ConditionalObjectKeys<PipeInput<ReturnType<typeof queryParamsPipe>>>\nexport type QueryWhereClause = QueryParams['where'][number]\nexport type QueryWhere = Extract<QueryWhereClause, { field: string }>\nexport type QueryWhereBlock = Exclude<QueryWhereClause, { field: string }>\nexport type QueryResults<T> = PipeOutput<ReturnType<typeof queryResultsPipe<T>>>\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 = PipeOutput<ReturnType<typeof mongoDbConfigPipe>>\n"],"mappings":"AAAA,OAAiF,KAAAA,MAAS,WAE1F,OAAS,YAAAC,MAAgB,cAElB,IAAKC,OACXA,EAAA,IAAM,MACNA,EAAA,GAAK,KAFMA,OAAA,IAKAC,OACXA,EAAA,GAAK,KACLA,EAAA,IAAM,MACNA,EAAA,GAAK,KACLA,EAAA,IAAM,MACNA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,GAAK,KACLA,EAAA,IAAM,MACNA,EAAA,OAAS,SATEA,OAAA,IAYZ,MAAMC,EAAYJ,EAAE,MAAMA,EAAE,SAASA,EAAE,GAAG,CAAC,MAAe,IAAY,CAAC,EAAG,KAAa,EAAG,KAAa,EACjGK,EAAaL,EAAE,OAAO,CAC3B,MAAOA,EAAE,OAAO,EAChB,MAAOA,EAAE,IAAI,EACb,UAAWA,EAAE,MAAMA,EAAE,SAASA,EAAE,GAAG,OAAO,OAAOG,CAAU,CAAC,EAAG,IAAa,EAAG,IAAa,CAC7F,CAAC,EACKG,EAAkBN,EAAE,UACzB,IACCA,EAAE,aAAcO,GAAO,OAAO,OAAOL,CAAS,EAAE,SAASK,EAAE,SAAgB,EAAI,QAAU,UAAY,CACpG,MAAOP,EAAE,OAAO,CACf,UAAWI,EACX,MAAOJ,EAAE,MAAMM,CAAe,CAC/B,CAAC,EACD,QAASD,CACV,CAAC,EACF,iBACD,EAaMG,EAAmBR,EAAE,SAASA,EAAE,MAAMM,CAAe,EAAG,CAAC,CAAC,EAEzD,SAASG,GAAkB,CACjC,OAAOT,EAAE,KACRA,EACE,OAAO,CACP,IAAKA,EAAE,SAASA,EAAE,QAAQ,EAAG,EAAK,EAClC,MAAOA,EAAE,KAAK,IAAM,CACnB,MAAMU,EAAWT,EAAS,IAAI,EAAE,SAAS,MAAM,uBAC/C,OAAOD,EAAE,MAAMA,EAAE,SAASA,EAAE,OAAO,EAAE,KAAKA,EAAE,IAAIU,CAAQ,CAAC,EAAGA,CAAQ,EAAGA,CAAQ,CAChF,CAAC,EACD,KAAMV,EAAE,MAAMA,EAAE,SAASA,EAAE,OAAO,EAAE,KAAKA,EAAE,IAAI,CAAC,CAAC,EAAG,CAAC,EAAG,CAAC,EACzD,OAAQA,EAAE,SACTA,EAAE,QACDA,EAAE,OAAO,CACR,MAAOA,EAAE,OAAO,EAChB,OAAQA,EAAE,MAAMA,EAAE,OAAO,CAAC,CAC3B,CAAC,CACF,EACA,IACD,EACA,KAAMA,EAAE,SACPA,EAAE,MACDA,EAAE,OAAO,CACR,MAAOA,EAAE,OAAO,EAChB,KAAMA,EAAE,SAASA,EAAE,QAAQ,EAAG,EAAK,CACpC,CAAC,CACF,EACA,CAAC,CACF,EACA,UAAWI,EACX,MAAOI,CACR,CAAC,EACA,KAAMG,IAAO,CAAE,GAAGA,EAAG,KAA2B,CAAC,EAAG,SAAU,KAAc,EAAE,EAChF,CAAE,MAAO,eAAgB,OAAQ,aAAc,CAChD,CACD,CAEO,SAASC,EAAoBC,EAAqB,CACxD,OAAOb,EAAE,OAAO,CACf,MAAOA,EAAE,OAAO,CACf,QAASA,EAAE,OAAO,EAClB,MAAOA,EAAE,OAAO,EAChB,KAAMA,EAAE,OAAO,EACf,SAAUA,EAAE,SAASA,EAAE,OAAO,CAAC,EAC/B,KAAMA,EAAE,SAASA,EAAE,OAAO,CAAC,CAC5B,CAAC,EACD,KAAMA,EAAE,OAAO,CACd,MAAOA,EAAE,OAAO,EAChB,MAAOA,EAAE,OAAO,EAChB,MAAOA,EAAE,OAAO,CACjB,CAAC,EACD,QAASA,EAAE,MAAMa,CAAK,CACvB,CAAC,CACF,CAEO,SAASC,EAAgBC,EAAuC,CACtE,OAAOf,EAAE,OAAOS,EAAgB,EAAGM,CAAM,CAC1C,CASO,MAAMC,EAAoB,IAChChB,EAAE,KACDA,EAAE,OAAO,CACR,IAAKA,EAAE,OAAO,CACf,CAAC,EACD,CAAE,MAAO,iBAAkB,OAAQ,eAAgB,CACpD","names":["v","Instance","QueryKeys","Conditions","queryKeys","queryWhere","queryWhereBlock","d","queryWhereClause","queryParamsPipe","pagLimit","p","queryResultsPipe","model","wrapQueryParams","params","mongoDbConfigPipe"]}