@vulcan-sql/build
Version:
VulcanSQL package for building projects
51 lines • 2.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SetConstraints = void 0;
const tslib_1 = require("tslib");
const core_1 = require("@vulcan-sql/core");
const inversify_1 = require("inversify");
const lodash_1 = require("lodash");
const middleware_1 = require("./middleware");
let SetConstraints = class SetConstraints extends middleware_1.SchemaParserMiddleware {
constructor(validatorLoader) {
super();
this.validatorLoader = validatorLoader;
}
handle(rawSchema, next) {
return tslib_1.__awaiter(this, void 0, void 0, function* () {
yield next();
const schema = rawSchema;
for (const request of schema.request || []) {
// load validator and keep args
const validatorsWithArgs = yield Promise.all((request.validators || []).map((validator) => tslib_1.__awaiter(this, void 0, void 0, function* () {
return ({
validator: this.validatorLoader.getValidator(validator.name),
args: validator.args,
});
})));
// set constraint by validator and args
request.constraints = (0, lodash_1.chain)(validatorsWithArgs)
.filter(({ validator }) => !!validator.getConstraints)
.flatMap(({ validator, args }) =>
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
validator.getConstraints(args)) // Group by constraint class (RequiredConstraint, MinValueConstraint ....)
.groupBy((constraint) => constraint.constructor.name)
.values()
.map((constraints) => {
let mergeConstraint = constraints[0];
constraints
.slice(1)
.forEach((constraint) => (mergeConstraint = mergeConstraint.compose(constraint)));
return mergeConstraint;
})
.value();
}
});
}
};
SetConstraints = tslib_1.__decorate([
tslib_1.__param(0, (0, inversify_1.inject)(core_1.TYPES.ValidatorLoader)),
tslib_1.__metadata("design:paramtypes", [Object])
], SetConstraints);
exports.SetConstraints = SetConstraints;
//# sourceMappingURL=setConstraints.js.map