rx-form-mapper
Version:
Proper decorator-based transformation / serialization / deserialization of plain javascript classes to angular reactive forms
34 lines • 4.07 kB
JavaScript
import { Injectable, InjectFlags, Injector } from '@angular/core';
import { isFunction } from 'lodash';
export class ValidatorResolver {
constructor(injector) {
this.injector = injector;
}
resolve(validator) {
if (this.isValidatorFn(validator)) {
return validator;
}
let validatorInstance = null;
if (this.isValidatorInstance(validator)) {
validatorInstance = validator;
}
else {
validatorInstance = this.injector.get(validator, null, InjectFlags.Optional);
validatorInstance !== null && validatorInstance !== void 0 ? validatorInstance : (validatorInstance = new validator());
}
return (c) => validatorInstance.validate(c);
}
isValidatorFn(value) {
return isFunction(value) && !value.prototype.validate;
}
isValidatorInstance(value) {
return 'validate' in value;
}
}
ValidatorResolver.decorators = [
{ type: Injectable }
];
ValidatorResolver.ctorParameters = () => [
{ type: Injector }
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9yLXJlc29sdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcngtZm9ybS1tYXBwZXIvc3JjL2xpYi9zZXJ2aWNlcy92YWxpZGF0b3ItcmVzb2x2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWxFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFJcEMsTUFBTSxPQUFPLGlCQUFpQjtJQUU3QixZQUFvQyxRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO0lBQUcsQ0FBQztJQUluRCxPQUFPLENBQUMsU0FBYztRQUU1QixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDbEMsT0FBTyxTQUFTLENBQUM7U0FDakI7UUFFRCxJQUFJLGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUU3QixJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUN4QyxpQkFBaUIsR0FBRyxTQUFTLENBQUM7U0FDOUI7YUFBTTtZQUNOLGlCQUFpQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQWdCLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNwRixpQkFBaUIsYUFBakIsaUJBQWlCLGNBQWpCLGlCQUFpQixJQUFqQixpQkFBaUIsR0FBSyxJQUFJLFNBQVMsRUFBRSxFQUFDO1NBQ3RDO1FBRUQsT0FBTyxDQUFDLENBQWtCLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU5RCxDQUFDO0lBRU8sYUFBYSxDQUFDLEtBQVU7UUFDL0IsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztJQUN2RCxDQUFDO0lBRU8sbUJBQW1CLENBQUMsS0FBVTtRQUNyQyxPQUFPLFVBQVUsSUFBSSxLQUFLLENBQUM7SUFDNUIsQ0FBQzs7O1lBaENELFVBQVU7OztZQUx1QixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0RmxhZ3MsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEFzeW5jVmFsaWRhdG9yRm4sIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBSeEFzeW5jVmFsaWRhdG9yLCBSeFZhbGlkYXRvciB9IGZyb20gJy4uL3R5cGVzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFZhbGlkYXRvclJlc29sdmVyIHtcblxuXHRwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IpIHt9XG5cblx0cHVibGljIHJlc29sdmUodmFsaWRhdG9yOiBSeEFzeW5jVmFsaWRhdG9yKTogQXN5bmNWYWxpZGF0b3JGbjtcblx0cHVibGljIHJlc29sdmUodmFsaWRhdG9yOiBSeFZhbGlkYXRvcik6IFZhbGlkYXRvckZuO1xuXHRwdWJsaWMgcmVzb2x2ZSh2YWxpZGF0b3I6IGFueSk6IGFueSB7XG5cblx0XHRpZiAodGhpcy5pc1ZhbGlkYXRvckZuKHZhbGlkYXRvcikpIHtcblx0XHRcdHJldHVybiB2YWxpZGF0b3I7XG5cdFx0fVxuXG5cdFx0bGV0IHZhbGlkYXRvckluc3RhbmNlID0gbnVsbDtcblxuXHRcdGlmICh0aGlzLmlzVmFsaWRhdG9ySW5zdGFuY2UodmFsaWRhdG9yKSkge1xuXHRcdFx0dmFsaWRhdG9ySW5zdGFuY2UgPSB2YWxpZGF0b3I7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhbGlkYXRvckluc3RhbmNlID0gdGhpcy5pbmplY3Rvci5nZXQodmFsaWRhdG9yIGFzIGFueSwgbnVsbCwgSW5qZWN0RmxhZ3MuT3B0aW9uYWwpO1xuXHRcdFx0dmFsaWRhdG9ySW5zdGFuY2UgPz89IG5ldyB2YWxpZGF0b3IoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gKGM6IEFic3RyYWN0Q29udHJvbCkgPT4gdmFsaWRhdG9ySW5zdGFuY2UudmFsaWRhdGUoYyk7XG5cblx0fVxuXG5cdHByaXZhdGUgaXNWYWxpZGF0b3JGbih2YWx1ZTogYW55KTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIGlzRnVuY3Rpb24odmFsdWUpICYmICF2YWx1ZS5wcm90b3R5cGUudmFsaWRhdGU7XG5cdH1cblxuXHRwcml2YXRlIGlzVmFsaWRhdG9ySW5zdGFuY2UodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAndmFsaWRhdGUnIGluIHZhbHVlO1xuXHR9XG59XG4iXX0=