json-api-nestjs
Version:
JsonApi Plugin for NestJs
59 lines • 2.53 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.QueryFiledInIncludePipe = void 0;
const common_1 = require("@nestjs/common");
const nestjs_shared_1 = require("../../../../utils/nestjs-shared");
class QueryFiledInIncludePipe {
transform(value) {
const errors = [];
const { fields, include, sort, filter } = value;
const includeSet = new Set();
if (include) {
include.reduce((acum, item) => acum.add(item), includeSet);
}
if (filter) {
const { relation } = filter;
if (relation) {
const filterRelationFields = nestjs_shared_1.ObjectTyped.keys(relation);
const filterFieldsErrors = filterRelationFields
.filter((i) => !includeSet.has(i.toString()))
.map((i) => ({
code: 'invalid_intersection_types',
message: `Add '${i.toString()}' to query param 'include'`,
path: ['filter', 'relation', i.toString()],
}));
errors.push(...filterFieldsErrors);
}
}
if (fields) {
const { target: targetResourceFields, ...relationFields } = fields;
const selectRelationFields = nestjs_shared_1.ObjectTyped.keys(relationFields);
const fieldsErrors = selectRelationFields
.filter((i) => !includeSet.has(i.toString()))
.map((i) => ({
code: 'invalid_intersection_types',
message: `Add '${i.toString()}' to query param 'include'`,
path: ['fields'],
}));
errors.push(...fieldsErrors);
}
if (sort) {
const { target: targetResourceSorts, ...relationSorts } = sort;
const selectRelationFields = nestjs_shared_1.ObjectTyped.keys(relationSorts);
const fieldsErrors = selectRelationFields
.filter((i) => !includeSet.has(i.toString()))
.map((i) => ({
code: 'invalid_intersection_types',
message: `Add '${i.toString()}' to query param 'include'`,
path: ['sort'],
}));
errors.push(...fieldsErrors);
}
if (errors.length > 0) {
throw new common_1.BadRequestException(errors);
}
return value;
}
}
exports.QueryFiledInIncludePipe = QueryFiledInIncludePipe;
//# sourceMappingURL=query-filed-in-include.pipe.js.map