UNPKG

@ptc-org/nestjs-query-graphql

Version:
43 lines 1.69 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.QueryRelationsLoader = void 0; class QueryRelationsLoader { constructor(RelationDTO, relationName) { this.RelationDTO = RelationDTO; this.relationName = relationName; } createLoader(service, opts) { return async (queryArgs) => { // group const queryMap = this.groupQueries(queryArgs); return this.loadResults(service, queryMap, opts); }; } async loadResults(service, queryRelationsMap, opts) { const results = []; await Promise.all([...queryRelationsMap.values()].map(async (args) => { const { query } = args[0]; const dtos = args.map((a) => a.dto); const relationResults = await service.queryRelations(this.RelationDTO, this.relationName, dtos, query, opts); const dtoRelations = dtos.map((dto) => relationResults.get(dto) ?? []); dtoRelations.forEach((relations, index) => { results[args[index].index] = relations; }); })); return results; } groupQueries(queryArgs) { // group return queryArgs.reduce((map, args, index) => { const queryJson = JSON.stringify(args.query); if (!map.has(queryJson)) { map.set(queryJson, []); } // eslint-disable-next-line @typescript-eslint/no-non-null-assertion map.get(queryJson).push({ ...args, index }); return map; }, new Map()); } } exports.QueryRelationsLoader = QueryRelationsLoader; //# sourceMappingURL=query-relations.loader.js.map