{"version":3,"file":"ngx-reactive-form-class-validator.mjs","sources":["../../../../libs/ngx-reactive-form-class-validator/src/lib/class-validator-form-array.ts","../../../../libs/ngx-reactive-form-class-validator/src/lib/class-validator-form-control.ts","../../../../libs/ngx-reactive-form-class-validator/src/lib/class-validator-form-group.ts","../../../../libs/ngx-reactive-form-class-validator/src/lib/class-validator-form-builder.service.ts","../../../../libs/ngx-reactive-form-class-validator/src/lib/class-validator-form-builder.module.ts","../../../../libs/ngx-reactive-form-class-validator/src/ngx-reactive-form-class-validator.ts"],"sourcesContent":["import {\n  AbstractControl,\n  AbstractControlOptions,\n  AsyncValidatorFn,\n  FormArray,\n  ValidatorFn\n} from '@angular/forms';\n\nexport class ClassValidatorFormArray extends FormArray {\n  public constructor(\n    controls: AbstractControl[],\n    validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null,\n    asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null,\n  ) {\n    super(\n      controls,\n      validatorOrOpts,\n      asyncValidator,\n    );\n  }\n}\n","import {\n  AbstractControlOptions,\n  AsyncValidatorFn,\n  FormControl,\n  ValidationErrors,\n  ValidatorFn,\n  Validators\n} from '@angular/forms';\nimport { validateSync } from 'class-validator';\n\nexport class ClassValidatorFormControl<T = any> extends FormControl<T | any> {\n  private formGroupClassValue: any;\n  private name: string;\n\n  /**\n   * Creates a new `ClassValidatorFormControl` instance.\n   *\n   * @param formState Initializes the control with an initial value,\n   * or an object that defines the initial value and disabled state.\n   *\n   * @param validatorOrOpts A synchronous validator function, or an array of\n   * such functions, or an `AbstractControlOptions` object that contains validation functions\n   * and a validation trigger.\n   *\n   * @param asyncValidator A single async validator or array of async validator functions\n   *\n   */\n  public constructor(\n    formState?: any,\n    validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null,\n    asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null\n  ) {\n    super(formState, validatorOrOpts, asyncValidator);\n\n    this.setValidatorsWithDynamicValidation(validatorOrOpts);\n  }\n\n  /**\n   * @internal\n   */\n  public setNameAndFormGroupClassValue(name: string, value: any): void {\n    this.name = name;\n    this.formGroupClassValue = value;\n  }\n\n  /**\n   * Sets the synchronous validators that are active on this control as well as resetting the dynamic `class-validator`.  Calling\n   * this overwrites any existing sync validators.\n   *\n   * When you add or remove a validator at run time, you must call\n   * `updateValueAndValidity()` for the new validation to take effect.\n   *\n   */\n  public setValidatorsWithDynamicValidation(newValidator: ValidatorFn | ValidatorFn[] | AbstractControlOptions | undefined): void {\n    this.setValidators(\n      newValidator\n        ? [this.composeValidators(newValidator), this.dynamicValidator]\n        : this.dynamicValidator);\n  }\n\n  private composeValidators(validator: ValidatorFn | ValidatorFn[] | AbstractControlOptions): ValidatorFn {\n    if (validator instanceof Array) {\n      return Validators.compose(validator);\n    }\n\n    if ((validator as AbstractControlOptions).validators) {\n      return this.composeValidators((validator as AbstractControlOptions).validators);\n    }\n\n    return validator as ValidatorFn;\n  }\n\n  private readonly dynamicValidator = (control: ClassValidatorFormControl): ValidationErrors => {\n    this.formGroupClassValue[this.name] = control.value;\n\n    const validationErrors = validateSync(this.formGroupClassValue)\n      .find(error => error.property === this.name);\n\n    return validationErrors ? validationErrors.constraints : undefined;\n  };\n}\n","import {\n  AbstractControl,\n  AbstractControlOptions,\n  AsyncValidatorFn,\n  FormGroup,\n  ValidatorFn,\n  ɵOptionalKeys\n} from '@angular/forms';\n\nimport { ClassValidatorFormControl } from './class-validator-form-control';\nimport { ClassType } from './types';\n\nexport class ClassValidatorFormGroup<TControl extends {\n  [K in keyof TControl]: AbstractControl<any>;\n} = any> extends FormGroup<TControl> {\n  private classValue: any;\n\n  /**\n   * Creates a new `ClassValidatorFormGroup` instance.\n   *\n   * @param formClassType the `classType` containing `class-validator` decorators to be used to validate form\n   * @param controls A collection of child controls. The key for each child is the name\n   * under which it is registered.\n   *\n   * @param validatorOrOpts A synchronous validator function, or an array of\n   * such functions, or an `AbstractControlOptions` object that contains validation functions\n   * and a validation trigger.\n   *\n   * @param asyncValidator A single async validator or array of async validator functions\n   *\n   */\n  public constructor(\n    private readonly formClassType: ClassType<any>,\n    controls: TControl,\n    validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null,\n    asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null,\n  ) {\n    super(controls, validatorOrOpts, asyncValidator);\n\n    this.assignFormValueToClassValue();\n    this.setClassValidatorControlsContainerGroupClassValue();\n  }\n\n  /**\n   * Add a control to this group.\n   *\n   * This method also updates the value and validity of the control.\n   *\n   * @param name The control name to add to the collection\n   * @param control Provides the control for the given name\n   * @param options Specifies whether this FormGroup instance should emit events after a new\n   *     control is added.\n   * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n   * `valueChanges` observables emit events with the latest status and value when the control is\n   * added. When false, no events are emitted.\n   *\n   */\n  public addControl<K extends string&keyof TControl>(\n    name: K,\n    control: Required<TControl>[K],\n    options?: {\n      emitEvent?: boolean;\n    },\n  ): void {\n    super.addControl(name, control, options);\n    this.assignFormValueToClassValue();\n    this.setClassValidatorControlsContainerGroupClassValue();\n  }\n\n  /**\n   * Remove a control from this group.\n   *\n   * @param name The control name to remove from the collection\n   * @param options Specifies whether this FormGroup instance should emit events after a\n   *     control is removed.\n   * * `emitEvent`: When true or not supplied (the default), both the `statusChanges` and\n   * `valueChanges` observables emit events with the latest status and value when the control is\n   * removed. When false, no events are emitted.\n   */\n  public removeControl<S extends string>(\n    name: ɵOptionalKeys<TControl>&S, options: {emitEvent?: boolean;} = {}\n  ): void {\n    super.removeControl(name, options);\n    this.assignFormValueToClassValue();\n    this.setClassValidatorControlsContainerGroupClassValue();\n  }\n\n  private setClassValidatorControlsContainerGroupClassValue(): void {\n    Object.entries(this.controls).forEach(([controlName, control]) => {\n      if (control instanceof ClassValidatorFormControl) {\n        (this.controls[controlName] as ClassValidatorFormControl)\n          .setNameAndFormGroupClassValue(controlName, this.classValue);\n      }\n    });\n  }\n\n  private assignFormValueToClassValue(): void {\n    this.classValue = Object.assign(new this.formClassType(), this.value);\n  }\n}\n\n","import { Injectable } from '@angular/core';\nimport {\n  AbstractControl,\n  AbstractControlOptions,\n  AsyncValidatorFn,\n  FormArray,\n  FormControl,\n  FormControlState,\n  FormGroup,\n  ValidatorFn\n} from '@angular/forms';\n\nimport { ClassValidatorFormGroup } from './class-validator-form-group';\nimport { ClassValidatorFormControl } from './class-validator-form-control';\nimport { ClassValidatorFormArray } from './class-validator-form-array';\nimport { ClassType } from './types';\n\n// Coming from https://github.com/angular/angular/blob/3b0b7d22109c79b4dceb4ae069c3927894cf1bd6/packages/forms/src/form_builder.ts#L14\nconst isAbstractControlOptions = (options: AbstractControlOptions | { [key: string]: any }): options is AbstractControlOptions =>\n  (options as AbstractControlOptions).asyncValidators !== undefined ||\n  (options as AbstractControlOptions).validators !== undefined ||\n  (options as AbstractControlOptions).updateOn !== undefined;\n\n@Injectable()\nexport class ClassValidatorFormBuilderService {\n  /**\n   * @description\n   * Construct a new `FormGroup` instance.\n   *\n   * @param formClassType the `classType` containing `class-validator` decorators to be used to validate form\n   * @param controlsConfig A collection of child controls. The key for each child is the name\n   * under which it is registered.\n   *\n   * @param options Configuration options object for the `FormGroup`. The object can\n   * have two shapes:\n   *\n   * 1) `AbstractControlOptions` object (preferred), which consists of:\n   * * `validators`: A synchronous validator function, or an array of validator functions\n   * * `asyncValidators`: A single async validator or array of async validator functions\n   * * `updateOn`: The event upon which the control should be updated (options: 'change' | 'blur' |\n   * submit')\n   *\n   * 2) Legacy configuration object, which consists of:\n   * * `validator`: A synchronous validator function, or an array of validator functions\n   * * `asyncValidator`: A single async validator or array of async validator functions\n   *\n   */\n  public group(\n    formClassType: ClassType<any>,\n    controlsConfig: { [p: string]: any },\n    options?: AbstractControlOptions | { [p: string]: any } | null\n  ): ClassValidatorFormGroup {\n    // Coming from https://github.com/angular/angular/blob/3b0b7d22109c79b4dceb4ae069c3927894cf1bd6/packages/forms/src/form_builder.ts#L59\n    const controls = this.reduceControls(controlsConfig);\n\n    let validators: ValidatorFn | ValidatorFn[] | null = null;\n    let asyncValidators: AsyncValidatorFn | AsyncValidatorFn[] | null = null;\n    let updateOn;\n\n    if (options) {\n      if (isAbstractControlOptions(options)) {\n        // `options` are `AbstractControlOptions`\n        validators = options.validators ? options.validators : null;\n        asyncValidators = options.asyncValidators ? options.asyncValidators : null;\n        updateOn = options.updateOn ? options.updateOn : undefined;\n      } else {\n        // `options` are legacy form group options\n        validators = options['validator'] !== null ? options['validator'] : null;\n        asyncValidators = options['asyncValidator'] !== null ? options['asyncValidator'] : null;\n      }\n    }\n\n    return new ClassValidatorFormGroup(formClassType, controls, { asyncValidators, updateOn, validators });\n  }\n\n  /**\n   * Constructs a new `FormArray` from the given array of configurations,\n   * validators and options.\n   *\n   * @param controlsConfig An array of child controls or control configs. Each\n   * child control is given an index when it is registered.\n   *\n   * @param validatorOrOpts A synchronous validator function, or an array of\n   * such functions, or an `AbstractControlOptions` object that contains\n   * validation functions and a validation trigger.\n   *\n   * @param asyncValidator A single async validator or array of async validator\n   * functions.\n   */\n  public array<T>(\n    controlsConfig: Array<T>,\n    validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null,\n    asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null\n  ): FormArray {\n    const controls = controlsConfig.map(control => this.createControl(control));\n\n    return new ClassValidatorFormArray(controls, validatorOrOpts, asyncValidator);\n  }\n\n\n  /**\n   * @description\n   * Construct a new `FormControl` with the given state, validators and options.\n   *\n   * @param formState Initializes the control with an initial state value, or\n   * with an object that contains both a value and a disabled status.\n   *\n   * @param validatorOrOpts A synchronous validator function, or an array of\n   * such functions, or an `AbstractControlOptions` object that contains\n   * validation functions and a validation trigger.\n   *\n   * @param asyncValidator A single async validator or array of async validator\n   * functions.\n   *\n   * @usageNotes\n   *\n   * ### Initialize a control as disabled\n   *\n   * The following example returns a control with an initial value in a disabled state.\n   *\n   * <code-example path=\"forms/ts/formBuilder/form_builder_example.ts\" region=\"disabled-control\">\n   * </code-example>\n   */\n  public control<T>(\n    formState: T|FormControlState<T>,\n    validatorOrOpts?: ValidatorFn | ValidatorFn[] | AbstractControlOptions | null,\n    asyncValidator?: AsyncValidatorFn | AsyncValidatorFn[] | null\n  ): ClassValidatorFormControl {\n    return new ClassValidatorFormControl(formState, validatorOrOpts, asyncValidator);\n  }\n\n  // Coming from https://github.com/angular/angular/blob/3b0b7d22109c79b4dceb4ae069c3927894cf1bd6/packages/forms/src/form_builder.ts#L133\n  private reduceControls(controlsConfig: { [k: string]: any }): { [key: string]: AbstractControl } {\n    const controls: { [key: string]: AbstractControl } = {};\n\n    Object.keys(controlsConfig).forEach(controlName => {\n      controls[controlName] = this.createControl(controlsConfig[controlName]);\n    });\n\n    return controls;\n  }\n\n  private createControl(controlConfig: any): AbstractControl {\n    if (\n      controlConfig instanceof FormControl\n      || controlConfig instanceof FormGroup\n      || controlConfig instanceof FormArray\n    ) {\n      return controlConfig;\n    } else if (Array.isArray(controlConfig)) {\n      const value = controlConfig[0];\n      const validator: ValidatorFn = controlConfig.length > 1 ? controlConfig[1] : null;\n      const asyncValidator: AsyncValidatorFn = controlConfig.length > 2 ? controlConfig[2] : null;\n\n      return this.control(value, validator, asyncValidator);\n    } else {\n      return this.control(controlConfig);\n    }\n  }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { ClassValidatorFormBuilderService } from './class-validator-form-builder.service';\n\n@NgModule({\n  imports: [CommonModule],\n  providers: [ClassValidatorFormBuilderService],\n})\nexport class ClassValidatorFormBuilderModule {\n  public static forRoot(): ModuleWithProviders<ClassValidatorFormBuilderModule> {\n    return {\n      ngModule: ClassValidatorFormBuilderModule,\n      providers: [\n        ClassValidatorFormBuilderService,\n      ],\n    };\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}