@thisisagile/easy-mongo
Version:
Add support for MongoDB
1 lines • 3.61 kB
Source Map (JSON)
{"version":3,"sources":["../src/AtlasSearchGateway.ts"],"sourcesContent":["import { stages } from './Stages';\nimport { MongoGateway } from './MongoGateway';\nimport { Collection } from './Collection';\nimport { MongoProvider } from './MongoProvider';\nimport { lucene, SearchDefinition } from './Lucene';\nimport { asNumber, entries, Filter, Json, PageList, text, toPageList, tuple2 } from '@thisisagile/easy';\n\nconst { skip, take } = stages.skip;\nconst { replaceWith } = stages.replaceWith;\nconst { searchWithDef, searchMeta, facets } = lucene;\n\ntype FacetResult = { _id: string; count: number };\ntype Value = { label: string; value: string; count: number };\nexport const toFilters = (facets: unknown): Filter[] =>\n entries(facets as Record<string, unknown>).map(([k, fs]) => ({\n label: text(k).title.toString(),\n field: k,\n values: (fs as []).map((f: FacetResult) => toValue(f)),\n }));\n\nconst toValue = (f: FacetResult): Value => ({ label: f._id ?? 'unknown', value: f._id ?? 'unknown', count: f.count });\n\nexport class AtlasSearchGateway extends MongoGateway {\n constructor(\n collection: Collection,\n readonly searchDef: SearchDefinition,\n readonly sortDef: Record<string, Record<string, 1 | -1>> = {},\n provider: MongoProvider = collection.provider\n ) {\n super(collection, provider);\n }\n\n query(query: Record<keyof typeof this.searchDef, string | number>): Promise<PageList<Json>> {\n return tuple2(\n this.aggregate(searchWithDef(query, this.searchDef), skip({ skip: (query?.skip as number) ?? 0 }), take({ take: (query?.take as number) ?? 250 })),\n this.aggregate(\n searchMeta(query, this.searchDef),\n replaceWith({\n total: '$count.total',\n facets: Object.keys(facets(this.searchDef)).reduce((acc, k) => ({ ...acc, [k]: `$facet.${k}.buckets` }), {}),\n })\n )\n )\n .then(([data, meta]) => ({ data, meta: meta.first() }))\n .then(({ data, meta }) =>\n toPageList<Json>(data, {\n total: asNumber(meta?.total, 0),\n skip: asNumber(query?.skip, 0),\n take: asNumber(query?.take, 250),\n sorts: Object.keys(this.sortDef),\n filters: toFilters(meta.facets),\n })\n );\n }\n}\n"],"mappings":";;;;;;;;;;;;AAKA,SAAS,UAAU,SAAiC,MAAM,YAAY,cAAc;AAEpF,IAAM,EAAE,MAAM,KAAK,IAAI,OAAO;AAC9B,IAAM,EAAE,YAAY,IAAI,OAAO;AAC/B,IAAM,EAAE,eAAe,YAAY,OAAO,IAAI;AAIvC,IAAM,YAAY,CAACA,YACxB,QAAQA,OAAiC,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,OAAO;AAAA,EAC3D,OAAO,KAAK,CAAC,EAAE,MAAM,SAAS;AAAA,EAC9B,OAAO;AAAA,EACP,QAAS,GAAU,IAAI,CAAC,MAAmB,QAAQ,CAAC,CAAC;AACvD,EAAE;AAEJ,IAAM,UAAU,CAAC,OAA2B,EAAE,OAAO,EAAE,OAAO,WAAW,OAAO,EAAE,OAAO,WAAW,OAAO,EAAE,MAAM;AAE5G,IAAM,qBAAN,cAAiC,aAAa;AAAA,EACnD,YACE,YACS,WACA,UAAkD,CAAC,GAC5D,WAA0B,WAAW,UACrC;AACA,UAAM,YAAY,QAAQ;AAJjB;AACA;AAAA,EAIX;AAAA,EAEA,MAAM,OAAsF;AAC1F,WAAO;AAAA,MACL,KAAK,UAAU,cAAc,OAAO,KAAK,SAAS,GAAG,KAAK,EAAE,MAAO,OAAO,QAAmB,EAAE,CAAC,GAAG,KAAK,EAAE,MAAO,OAAO,QAAmB,IAAI,CAAC,CAAC;AAAA,MACjJ,KAAK;AAAA,QACH,WAAW,OAAO,KAAK,SAAS;AAAA,QAChC,YAAY;AAAA,UACV,OAAO;AAAA,UACP,QAAQ,OAAO,KAAK,OAAO,KAAK,SAAS,CAAC,EAAE,OAAO,CAAC,KAAK,OAAO,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC,WAAW,IAAI,CAAC,CAAC;AAAA,QAC7G,CAAC;AAAA,MACH;AAAA,IACF,EACG,KAAK,CAAC,CAAC,MAAM,IAAI,OAAO,EAAE,MAAM,MAAM,KAAK,MAAM,EAAE,EAAE,EACrD;AAAA,MAAK,CAAC,EAAE,MAAM,KAAK,MAClB,WAAiB,MAAM;AAAA,QACrB,OAAO,SAAS,MAAM,OAAO,CAAC;AAAA,QAC9B,MAAM,SAAS,OAAO,MAAM,CAAC;AAAA,QAC7B,MAAM,SAAS,OAAO,MAAM,GAAG;AAAA,QAC/B,OAAO,OAAO,KAAK,KAAK,OAAO;AAAA,QAC/B,SAAS,UAAU,KAAK,MAAM;AAAA,MAChC,CAAC;AAAA,IACH;AAAA,EACJ;AACF;","names":["facets"]}