UNPKG

ngx-forms-builder

Version:

A small library that adds validation with decorators and build angular forms.

102 lines 7.73 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import 'reflect-metadata'; import { Injectable } from '@angular/core'; import { FormGroup, FormControl, Validators } from '@angular/forms'; /** * @template T */ export class ModelFormBuilder { /** * @param {?} target * @param {?=} options * @return {?} */ build(target, options) { /** @type {?} */ const fg = new FormGroup({}, options); for (const propertyKey of Object.keys(target)) { /** @type {?} */ const decorators = Reflect.getMetadataKeys(target, propertyKey); if (decorators.indexOf('exclude') > 0) { continue; } fg.addControl(propertyKey, new FormControl(target[propertyKey])); /** @type {?} */ const validators = []; decorators .filter((/** * @param {?} x * @return {?} */ x => x !== 'design:type')) .forEach((/** * @param {?} decorator * @return {?} */ (decorator) => { /** @type {?} */ const validator = this.getValidatorByType(decorator, target, propertyKey); if (validator !== null) { validators.push(validator); } })); fg.get(propertyKey).setValidators(validators); } return fg; } /** * @param {?} metadataKey * @param {?} target * @param {?} propertyKey * @return {?} */ getValidatorByType(metadataKey, target, propertyKey) { /** @type {?} */ const validatorsType = { required: (/** * @param {?} _ * @return {?} */ _ => Validators.required), email: (/** * @param {?} _ * @return {?} */ _ => Validators.email), min: (/** * @param {?} min * @return {?} */ (min) => Validators.min(min)), max: (/** * @param {?} max * @return {?} */ (max) => Validators.max(max)), pattern: (/** * @param {?} pattern * @return {?} */ (pattern) => Validators.pattern(pattern)), customValidator: (/** * @param {?} custom * @return {?} */ (custom) => custom) }; /** @type {?} */ const metadataValue = Reflect.getMetadata(metadataKey, target, propertyKey); return validatorsType[metadataKey](metadataValue); } } ModelFormBuilder.decorators = [ { type: Injectable } ]; /** * @record */ function ValidatorsType() { } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtZm9ybS1idWlsZGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtZm9ybXMtYnVpbGRlci8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy9tb2RlbC1mb3JtLWJ1aWxkZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBdUMsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQUd6RyxNQUFNLE9BQU8sZ0JBQWdCOzs7Ozs7SUFFcEIsS0FBSyxDQUFDLE1BQVMsRUFBRSxPQUF1Qzs7Y0FDdkQsRUFBRSxHQUFHLElBQUksU0FBUyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7UUFFckMsS0FBSyxNQUFNLFdBQVcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFOztrQkFFdkMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQztZQUMvRCxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNyQyxTQUFTO2FBQ1Y7WUFFRCxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDOztrQkFDM0QsVUFBVSxHQUFrQixFQUFFO1lBRXBDLFVBQVU7aUJBQ1AsTUFBTTs7OztZQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLGFBQWEsRUFBQztpQkFDaEMsT0FBTzs7OztZQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7O3NCQUNmLFNBQVMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUM7Z0JBQ3pFLElBQUksU0FBUyxLQUFLLElBQUksRUFBRTtvQkFDdEIsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDNUI7WUFDSCxDQUFDLEVBQUMsQ0FBQztZQUVMLEVBQUUsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQy9DO1FBRUQsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDOzs7Ozs7O0lBRUQsa0JBQWtCLENBQUMsV0FBbUIsRUFBRSxNQUFTLEVBQUUsV0FBNEI7O2NBRXZFLGNBQWMsR0FBbUI7WUFDckMsUUFBUTs7OztZQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQTtZQUNsQyxLQUFLOzs7O1lBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFBO1lBQzVCLEdBQUc7Ozs7WUFBRSxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUN6QyxHQUFHOzs7O1lBQUUsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDekMsT0FBTzs7OztZQUFFLENBQUMsT0FBd0IsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUNsRSxlQUFlOzs7O1lBQUUsQ0FBQyxNQUFtQixFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUE7U0FDakQ7O2NBRUssYUFBYSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUM7UUFDM0UsT0FBTyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDcEQsQ0FBQzs7O1lBNUNGLFVBQVU7Ozs7O0FBZ0RYLDZCQUVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICdyZWZsZWN0LW1ldGFkYXRhJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUNvbnRyb2wsIFZhbGlkYXRvcnMsIFZhbGlkYXRvckZuLCBBYnN0cmFjdENvbnRyb2xPcHRpb25zIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTW9kZWxGb3JtQnVpbGRlcjxUPiB7XG5cbiAgcHVibGljIGJ1aWxkKHRhcmdldDogVCwgb3B0aW9ucz86IEFic3RyYWN0Q29udHJvbE9wdGlvbnMgfCBudWxsKTogRm9ybUdyb3VwIHtcbiAgICBjb25zdCBmZyA9IG5ldyBGb3JtR3JvdXAoe30sIG9wdGlvbnMpO1xuXG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eUtleSBvZiBPYmplY3Qua2V5cyh0YXJnZXQpKSB7XG5cbiAgICAgIGNvbnN0IGRlY29yYXRvcnMgPSBSZWZsZWN0LmdldE1ldGFkYXRhS2V5cyh0YXJnZXQsIHByb3BlcnR5S2V5KTtcbiAgICAgIGlmIChkZWNvcmF0b3JzLmluZGV4T2YoJ2V4Y2x1ZGUnKSA+IDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGZnLmFkZENvbnRyb2wocHJvcGVydHlLZXksIG5ldyBGb3JtQ29udHJvbCh0YXJnZXRbcHJvcGVydHlLZXldKSk7XG4gICAgICBjb25zdCB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdID0gW107XG5cbiAgICAgIGRlY29yYXRvcnNcbiAgICAgICAgLmZpbHRlcih4ID0+IHggIT09ICdkZXNpZ246dHlwZScpXG4gICAgICAgIC5mb3JFYWNoKChkZWNvcmF0b3IpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWxpZGF0b3IgPSB0aGlzLmdldFZhbGlkYXRvckJ5VHlwZShkZWNvcmF0b3IsIHRhcmdldCwgcHJvcGVydHlLZXkpO1xuICAgICAgICAgIGlmICh2YWxpZGF0b3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaCh2YWxpZGF0b3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgIGZnLmdldChwcm9wZXJ0eUtleSkuc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmc7XG4gIH1cblxuICBnZXRWYWxpZGF0b3JCeVR5cGUobWV0YWRhdGFLZXk6IHN0cmluZywgdGFyZ2V0OiBULCBwcm9wZXJ0eUtleTogc3RyaW5nIHwgc3ltYm9sKTogVmFsaWRhdG9yRm4ge1xuXG4gICAgY29uc3QgdmFsaWRhdG9yc1R5cGU6IFZhbGlkYXRvcnNUeXBlID0ge1xuICAgICAgcmVxdWlyZWQ6IF8gPT4gVmFsaWRhdG9ycy5yZXF1aXJlZCxcbiAgICAgIGVtYWlsOiBfID0+IFZhbGlkYXRvcnMuZW1haWwsXG4gICAgICBtaW46IChtaW46IG51bWJlcikgPT4gVmFsaWRhdG9ycy5taW4obWluKSxcbiAgICAgIG1heDogKG1heDogbnVtYmVyKSA9PiBWYWxpZGF0b3JzLm1heChtYXgpLFxuICAgICAgcGF0dGVybjogKHBhdHRlcm46IHN0cmluZyB8IFJlZ0V4cCkgPT4gVmFsaWRhdG9ycy5wYXR0ZXJuKHBhdHRlcm4pLFxuICAgICAgY3VzdG9tVmFsaWRhdG9yOiAoY3VzdG9tOiBWYWxpZGF0b3JGbikgPT4gY3VzdG9tXG4gICAgfTtcblxuICAgIGNvbnN0IG1ldGFkYXRhVmFsdWUgPSBSZWZsZWN0LmdldE1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQsIHByb3BlcnR5S2V5KTtcbiAgICByZXR1cm4gdmFsaWRhdG9yc1R5cGVbbWV0YWRhdGFLZXldKG1ldGFkYXRhVmFsdWUpO1xuICB9XG5cbn1cblxuaW50ZXJmYWNlIFZhbGlkYXRvcnNUeXBlIHtcbiAgW2tleTogc3RyaW5nXTogKCguLi5hcmdzOiBhbnkpID0+IFZhbGlkYXRvckZuKTtcbn1cbiJdfQ==