{"version":3,"file":"ngx-vest-forms.mjs","sources":["../../../projects/ngx-vest-forms/src/lib/constants.ts","../../../projects/ngx-vest-forms/src/lib/utils/form-utils.ts","../../../projects/ngx-vest-forms/src/lib/directives/validate-root-form.directive.ts","../../../projects/ngx-vest-forms/src/lib/utils/shape-validation.ts","../../../projects/ngx-vest-forms/src/lib/directives/form.directive.ts","../../../projects/ngx-vest-forms/src/lib/components/control-wrapper/control-wrapper.component.ts","../../../projects/ngx-vest-forms/src/lib/components/control-wrapper/control-wrapper.component.html","../../../projects/ngx-vest-forms/src/lib/directives/form-model.directive.ts","../../../projects/ngx-vest-forms/src/lib/directives/form-model-group.directive.ts","../../../projects/ngx-vest-forms/src/lib/exports.ts","../../../projects/ngx-vest-forms/src/lib/utils/array-to-object.ts","../../../projects/ngx-vest-forms/src/public-api.ts","../../../projects/ngx-vest-forms/src/ngx-vest-forms.ts"],"sourcesContent":["export const ROOT_FORM = 'rootForm';\n","import { AbstractControl, FormArray, FormGroup } from '@angular/forms';\nimport { ROOT_FORM } from '../constants';\n\n/**\n * Recursively calculates the path of a form control\n * @param formGroup\n * @param control\n */\nfunction getControlPath(\n  formGroup: FormGroup,\n  control: AbstractControl\n): string {\n  for (const key in formGroup.controls) {\n    if (formGroup.controls.hasOwnProperty(key)) {\n      const ctrl = formGroup.get(key);\n      if (ctrl instanceof FormGroup) {\n        const path = getControlPath(ctrl, control);\n        if (path) {\n          return key + '.' + path;\n        }\n      } else if (ctrl === control) {\n        return key;\n      }\n    }\n  }\n  return '';\n}\n\n/**\n * Recursively calculates the path of a form group\n * @param formGroup\n * @param control\n */\nfunction getGroupPath(formGroup: FormGroup, control: AbstractControl): string {\n  for (const key in formGroup.controls) {\n    if (formGroup.controls.hasOwnProperty(key)) {\n      const ctrl = formGroup.get(key);\n      if (ctrl === control) {\n        return key;\n      }\n      if (ctrl instanceof FormGroup) {\n        const path = getGroupPath(ctrl, control);\n        if (path) {\n          return key + '.' + path;\n        }\n      }\n    }\n  }\n  return '';\n}\n\n/**\n * Calculates the field name of a form control: Eg: addresses.shippingAddress.street\n * @param rootForm\n * @param control\n */\nexport function getFormControlField(\n  rootForm: FormGroup,\n  control: AbstractControl\n): string {\n  return getControlPath(rootForm, control);\n}\n\n/**\n * Calcuates the field name of a form group Eg: addresses.shippingAddress\n * @param rootForm\n * @param control\n */\nexport function getFormGroupField(\n  rootForm: FormGroup,\n  control: AbstractControl\n): string {\n  return getGroupPath(rootForm, control);\n}\n\n/**\n * This RxJS operator merges the value of the form with the raw value.\n * By doing this we can assure that we don't lose values of disabled form fields\n * @param form\n */\nexport function mergeValuesAndRawValues<T>(form: FormGroup): T {\n  // Retrieve the standard values (respecting references)\n  const value = { ...form.value };\n\n  // Retrieve the raw values (including disabled values)\n  const rawValue = form.getRawValue();\n\n  // Recursive function to merge rawValue into value\n  function mergeRecursive(target: any, source: any) {\n    Object.keys(source).forEach((key) => {\n      if (target[key] === undefined) {\n        // If the key is not in the target, add it directly (for disabled fields)\n        target[key] = source[key];\n      } else if (\n        typeof source[key] === 'object' &&\n        source[key] !== null &&\n        !Array.isArray(source[key])\n      ) {\n        // If the value is an object, merge it recursively\n        mergeRecursive(target[key], source[key]);\n      }\n      // If the target already has the key with a primitive value, it's left as is to maintain references\n    });\n  }\n\n  mergeRecursive(value, rawValue);\n  return value;\n}\n\ntype Primitive = undefined | null | boolean | string | number | Function;\n\nfunction isPrimitive(value: any): value is Primitive {\n  return (\n    value === null || (typeof value !== 'object' && typeof value !== 'function')\n  );\n}\n\n/**\n * Performs a deep-clone of an object\n * @param obj\n */\nexport function cloneDeep<T>(obj: T): T {\n  // Handle primitives (null, undefined, boolean, string, number, function)\n  if (isPrimitive(obj)) {\n    return obj;\n  }\n\n  // Handle Date\n  if (obj instanceof Date) {\n    return new Date(obj.getTime()) as any as T;\n  }\n\n  // Handle Array\n  if (Array.isArray(obj)) {\n    return obj.map((item) => cloneDeep(item)) as any as T;\n  }\n\n  // Handle Object\n  if (obj instanceof Object) {\n    const clonedObj: any = {};\n    for (const key in obj) {\n      if (obj.hasOwnProperty(key)) {\n        clonedObj[key] = cloneDeep((obj as any)[key]);\n      }\n    }\n    return clonedObj as T;\n  }\n\n  throw new Error(\"Unable to copy object! Its type isn't supported.\");\n}\n\n/**\n * Sets a value in an object in the correct path\n * @param obj\n * @param path\n * @param value\n */\nexport function set(obj: object, path: string, value: any): void {\n  const keys = path.split('.');\n  let current: any = obj;\n\n  for (let i = 0; i < keys.length - 1; i++) {\n    const key = keys[i];\n    if (!current[key]) {\n      current[key] = {};\n    }\n    current = current[key];\n  }\n\n  current[keys[keys.length - 1]] = value;\n}\n\n/**\n * Traverses the form and returns the errors by path\n * @param form\n */\nexport function getAllFormErrors(\n  form?: AbstractControl\n): Record<string, string> {\n  const errors: Record<string, string> = {};\n  if (!form) {\n    return errors;\n  }\n\n  function collect(control: AbstractControl, path: string): void {\n    if (control instanceof FormGroup || control instanceof FormArray) {\n      Object.keys(control.controls).forEach((key) => {\n        const childControl = control.get(key);\n        const controlPath = path ? `${path}.${key}` : key;\n        if (path && control.errors && control.enabled) {\n          Object.keys(control.errors).forEach((errorKey) => {\n            errors[path] = control.errors![errorKey];\n          });\n        }\n        if (childControl) {\n          collect(childControl, controlPath);\n        }\n      });\n    } else {\n      if (control.errors && control.enabled) {\n        Object.keys(control.errors).forEach((errorKey) => {\n          errors[path] = control.errors![errorKey];\n        });\n      }\n    }\n  }\n\n  collect(form, '');\n  if (form.errors && form.errors!['errors']) {\n    errors[ROOT_FORM] = form.errors && form.errors!['errors'];\n  }\n\n  return errors;\n}\n","import { Directive, input, OnDestroy } from '@angular/core';\nimport {\n  AbstractControl,\n  AsyncValidator,\n  AsyncValidatorFn,\n  NG_ASYNC_VALIDATORS,\n  ValidationErrors,\n} from '@angular/forms';\nimport {\n  debounceTime,\n  Observable,\n  of,\n  ReplaySubject,\n  Subject,\n  switchMap,\n  take,\n  takeUntil,\n} from 'rxjs';\nimport { StaticSuite } from 'vest';\nimport { cloneDeep, set } from '../utils/form-utils';\nimport { ValidationOptions } from './validation-options';\n\n@Directive({\n  selector: 'form[validateRootForm][formValue][suite]',\n  standalone: true,\n  providers: [\n    {\n      provide: NG_ASYNC_VALIDATORS,\n      useExisting: ValidateRootFormDirective,\n      multi: true,\n    },\n  ],\n})\nexport class ValidateRootFormDirective<T> implements AsyncValidator, OnDestroy {\n  public validationOptions = input<ValidationOptions>({ debounceTime: 0 });\n  private readonly destroy$$ = new Subject<void>();\n\n  public readonly formValue = input<T | null>(null);\n  public readonly suite = input<StaticSuite<\n    string,\n    string,\n    (model: T, field: string) => void\n  > | null>(null);\n\n  /**\n   * Whether the root form should be validated or not\n   * This will use the field rootForm\n   */\n  public readonly validateRootForm = input(false);\n\n  /**\n   * Used to debounce formValues to make sure vest isn't triggered all the time\n   */\n  private readonly formValueCache: {\n    [field: string]: Partial<{\n      sub$$: ReplaySubject<unknown>;\n      debounced: Observable<any>;\n    }>;\n  } = {};\n\n  public validate(\n    control: AbstractControl<any, any>\n  ): Observable<ValidationErrors | null> {\n    if (!this.suite() || !this.formValue()) {\n      return of(null);\n    }\n    return this.createAsyncValidator('rootForm', this.validationOptions())(\n      control.getRawValue()\n    ) as Observable<ValidationErrors | null>;\n  }\n\n  public createAsyncValidator(field: string, validationOptions: ValidationOptions): AsyncValidatorFn {\n    if (!this.suite()) {\n      return () => of(null);\n    }\n    return (value: any) => {\n      if (!this.formValue()) {\n        return of(null);\n      }\n      const mod = cloneDeep(value as T);\n      set(mod as object, field, value); // Update the property with path\n      if (!this.formValueCache[field]) {\n        this.formValueCache[field] = {\n          sub$$: new ReplaySubject(1), // Keep track of the last model\n        };\n        this.formValueCache[field].debounced = this.formValueCache[\n          field\n          ].sub$$!.pipe(debounceTime(validationOptions.debounceTime));\n      }\n      // Next the latest model in the cache for a certain field\n      this.formValueCache[field].sub$$!.next(mod);\n\n      return this.formValueCache[field].debounced!.pipe(\n        // When debounced, take the latest value and perform the asynchronous vest validation\n        take(1),\n        switchMap(() => {\n          return new Observable((observer) => {\n            this.suite()!(mod, field).done((result) => {\n              const errors = result.getErrors()[field];\n              observer.next(errors ? { error: errors[0], errors } : null);\n              observer.complete();\n            });\n          }) as Observable<ValidationErrors | null>;\n        }),\n        takeUntil(this.destroy$$)\n      );\n    };\n  }\n\n  public ngOnDestroy(): void {\n    this.destroy$$.next();\n  }\n}\n","import { isDevMode } from '@angular/core';\n\n/**\n * Clean error that improves the DX when making typo's in the `name` or `ngModelGroup` attributes\n */\nexport class ShapeMismatchError extends Error {\n  constructor(errorList: string[]) {\n    super(`Shape mismatch:\\n\\n${errorList.join('\\n')}\\n\\n`);\n  }\n}\n\n/**\n * Validates a form value against a shape\n * When there is something in the form value that is not in the shape, throw an error\n * This is how we throw runtime errors in develop when the developer has made a typo in the `name` or `ngModelGroup`\n * attributes.\n * @param formVal\n * @param shape\n */\nexport function validateShape(\n  formVal: Record<string, any>,\n  shape: Record<string, any>\n): void {\n  // Only execute in dev mode\n  if (isDevMode()) {\n    const errors = validateFormValue(formVal, shape);\n    if (errors.length) {\n      throw new ShapeMismatchError(errors);\n    }\n  }\n}\n\n/**\n * Validates a form value against a shape value to see if it matches\n * Returns clean errors that have a good DX\n * @param formValue\n * @param shape\n * @param path\n */\nfunction validateFormValue(\n  formValue: Record<string, any>,\n  shape: Record<string, any>,\n  path: string = ''\n): string[] {\n  const errors: string[] = [];\n  for (const key in formValue) {\n    if (Object.keys(formValue).includes(key)) {\n      // In form arrays we don't know how many items there are\n      // This means that we always need to provide one record in the shape of our form array\n      // so every time reset the key to '0' when the key is a number and is bigger than 0\n      let keyToCompareWith = key;\n      if (parseFloat(key) > 0) {\n        keyToCompareWith = '0';\n      }\n      const newPath = path ? `${path}.${key}` : key;\n      if (typeof formValue[key] === 'object' && formValue[key] !== null) {\n        if (\n          (typeof shape[keyToCompareWith] !== 'object' ||\n            shape[keyToCompareWith] === null) &&\n          isNaN(parseFloat(key))\n        ) {\n          errors.push(`[ngModelGroup] Mismatch: '${newPath}'`);\n        }\n        errors.push(\n          ...validateFormValue(formValue[key], shape[keyToCompareWith], newPath)\n        );\n      } else if ((shape ? !(key in shape) : true) && isNaN(parseFloat(key))) {\n        errors.push(`[ngModel] Mismatch '${newPath}'`);\n      }\n    }\n  }\n  return errors;\n}\n","import { Directive, inject, input, OnDestroy, Output } from '@angular/core';\nimport {\n  AsyncValidatorFn,\n  NgForm,\n  PristineChangeEvent,\n  StatusChangeEvent,\n  ValidationErrors,\n  ValueChangeEvent,\n} from '@angular/forms';\nimport {\n  debounceTime,\n  distinctUntilChanged,\n  filter,\n  map,\n  Observable,\n  of,\n  ReplaySubject,\n  startWith,\n  Subject,\n  switchMap,\n  take,\n  takeUntil,\n  tap,\n  zip,\n} from 'rxjs';\nimport { StaticSuite } from 'vest';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { DeepRequired } from '../utils/deep-required';\nimport {\n  cloneDeep,\n  getAllFormErrors,\n  mergeValuesAndRawValues,\n  set,\n} from '../utils/form-utils';\nimport { validateShape } from '../utils/shape-validation';\nimport { ValidationOptions } from './validation-options';\n\n@Directive({\n  selector: 'form[scVestForm]',\n  standalone: true,\n})\nexport class FormDirective<T extends Record<string, any>> implements OnDestroy {\n  public readonly ngForm = inject(NgForm, { self: true, optional: false });\n\n  /**\n   * The value of the form, this is needed for the validation part\n   */\n  public readonly formValue = input<T | null>(null);\n\n  /**\n   * Static vest suite that will be used to feed our angular validators\n   */\n  public readonly suite = input<StaticSuite<\n    string,\n    string,\n    (model: T, field: string) => void\n  > | null>(null);\n\n  /**\n   * The shape of our form model. This is a deep required version of the form model\n   * The goal is to add default values to the shape so when the template-driven form\n   * contains values that shouldn't be there (typo's) that the developer gets run-time\n   * errors in dev mode\n   */\n  public readonly formShape = input<DeepRequired<T> | null>(null);\n\n  /**\n   * Updates the validation config which is a dynamic object that will be used to\n   * trigger validations on the dependant fields\n   * Eg: ```typescript\n   * validationConfig = {\n   *     'passwords.password': ['passwords.confirmPassword']\n   * }\n   * ```\n   *\n   * This will trigger the updateValueAndValidity on passwords.confirmPassword every time the passwords.password gets a new value\n   *\n   * @param v\n   */\n  public readonly validationConfig = input<{ [key: string]: string[] } | null>(\n    null\n  );\n\n  private readonly pending$ = this.ngForm.form.events.pipe(\n    filter((v) => v instanceof StatusChangeEvent),\n    map((v) => (v as StatusChangeEvent).status),\n    filter((v) => v === 'PENDING'),\n    distinctUntilChanged()\n  );\n\n  /**\n   * Emits every time the form status changes in a state\n   * that is not PENDING\n   * We need this to assure that the form is in 'idle' state\n   */\n  public readonly idle$ = this.ngForm.form.events.pipe(\n    filter((v) => v instanceof StatusChangeEvent),\n    map((v) => (v as StatusChangeEvent).status),\n    filter((v) => v !== 'PENDING'),\n    distinctUntilChanged()\n  );\n\n  /**\n   * Triggered as soon as the form value changes\n   * Also every time Angular creates a new control or group\n   * It also contains the disabled values (raw values)\n   */\n  @Output() public readonly formValueChange = this.ngForm.form.events.pipe(\n    filter((v) => v instanceof ValueChangeEvent),\n    map((v) => (v as ValueChangeEvent<any>).value),\n    map(() => mergeValuesAndRawValues<T>(this.ngForm.form))\n  );\n\n  /**\n   * Emits an object with all the errors of the form\n   * every time a form control or form groups changes its status to valid or invalid\n   */\n  @Output() public readonly errorsChange = this.ngForm.form.events.pipe(\n    filter((v) => v instanceof StatusChangeEvent),\n    map((v) => (v as StatusChangeEvent).status),\n    filter((v) => v !== 'PENDING'),\n    map(() => getAllFormErrors(this.ngForm.form))\n  );\n\n  /**\n   * Triggered as soon as the form becomes dirty\n   */\n  @Output() public readonly dirtyChange = this.ngForm.form.events.pipe(\n    filter((v) => v instanceof PristineChangeEvent),\n    map((v) => !(v as PristineChangeEvent).pristine),\n    startWith(this.ngForm.form.dirty),\n    distinctUntilChanged()\n  );\n  private readonly destroy$$ = new Subject<void>();\n\n  /**\n   * Fired when the status of the root form changes.\n   */\n  private readonly statusChanges$ = this.ngForm.form.statusChanges.pipe(\n    startWith(this.ngForm.form.status),\n    distinctUntilChanged()\n  );\n\n  /**\n   * Triggered When the form becomes valid but waits until the form is idle\n   */\n  @Output() public readonly validChange = this.statusChanges$.pipe(\n    filter((e) => e === 'VALID' || e === 'INVALID'),\n    map((v) => v === 'VALID'),\n    distinctUntilChanged()\n  );\n\n  /**\n   * Used to debounce formValues to make sure vest isn't triggered all the time\n   */\n  private readonly formValueCache: {\n    [field: string]: Partial<{\n      sub$$: ReplaySubject<unknown>;\n      debounced: Observable<any>;\n    }>;\n  } = {};\n\n  public constructor() {\n    // When the validation config changes\n    // Listen to changes of the left-side of the config and trigger the updateValueAndValidity\n    // function on the dependant controls or groups at the right-side of the config\n    toObservable(this.validationConfig)\n      .pipe(\n        filter((conf) => !!conf),\n        switchMap((conf) => {\n          if (!conf) {\n            return of(null);\n          }\n          const streams = Object.keys(conf).map((key) => {\n            return this.ngForm?.form.get(key)?.valueChanges.pipe(\n              // Wait until something is pending\n              switchMap(() => this.pending$),\n              // Wait until the form is not pending anymore\n              switchMap(() => this.idle$),\n              map(() => this.ngForm?.form.get(key)?.value),\n              takeUntil(this.destroy$$),\n              tap((v) => {\n                conf[key]?.forEach((path: string) => {\n                  this.ngForm?.form.get(path)?.updateValueAndValidity({\n                    onlySelf: true,\n                    emitEvent: true,\n                  });\n                });\n              })\n            );\n          });\n          return zip(streams);\n        })\n      )\n      .subscribe();\n\n    /**\n     * Trigger shape validations if the form gets updated\n     * This is how we can throw run-time errors\n     */\n    this.formValueChange.pipe(takeUntil(this.destroy$$)).subscribe((v) => {\n      if (this.formShape()) {\n        validateShape(v, this.formShape() as DeepRequired<T>);\n      }\n    });\n\n    /**\n     * Mark all the fields as touched when the form is submitted\n     */\n    this.ngForm.ngSubmit.subscribe(() => {\n      this.ngForm.form.markAllAsTouched();\n    });\n  }\n\n  /**\n   * This will feed the formValueCache, debounce it till the next tick\n   * and create an asynchronous validator that runs a vest suite\n   * @param field\n   * @param validationOptions\n   * @returns an asynchronous validator function\n   */\n  public createAsyncValidator(field: string, validationOptions: ValidationOptions): AsyncValidatorFn {\n    if (!this.suite()) {\n      return () => of(null);\n    }\n    return (value: any) => {\n      if (!this.formValue()) {\n        return of(null);\n      }\n      const mod = cloneDeep(this.formValue() as T);\n      set(mod as object, field, value); // Update the property with path\n      if (!this.formValueCache[field]) {\n        this.formValueCache[field] = {\n          sub$$: new ReplaySubject(1), // Keep track of the last model\n        };\n        this.formValueCache[field].debounced = this.formValueCache[\n          field\n          ].sub$$!.pipe(debounceTime(validationOptions.debounceTime));\n      }\n      // Next the latest model in the cache for a certain field\n      this.formValueCache[field].sub$$!.next(mod);\n\n      return this.formValueCache[field].debounced!.pipe(\n        // When debounced, take the latest value and perform the asynchronous vest validation\n        take(1),\n        switchMap(() => {\n          return new Observable((observer) => {\n            this.suite()!(mod, field).done((result) => {\n              const errors = result.getErrors()[field];\n              observer.next(errors ? { error: errors[0], errors } : null);\n              observer.complete();\n            });\n          }) as Observable<ValidationErrors | null>;\n        }),\n        takeUntil(this.destroy$$)\n      );\n    };\n  }\n\n  public ngOnDestroy(): void {\n    this.destroy$$.next();\n  }\n}\n","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ContentChild,\n  HostBinding,\n  inject,\n  OnDestroy,\n} from '@angular/core';\n\nimport { AbstractControl, NgModel, NgModelGroup } from '@angular/forms';\nimport { mergeWith, of, Subject, switchMap, takeUntil } from 'rxjs';\nimport { FormDirective } from '../../directives/form.directive';\n\n@Component({\n  selector: '[sc-control-wrapper]',\n  standalone: true,\n  templateUrl: './control-wrapper.component.html',\n  styleUrls: ['./control-wrapper.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ControlWrapperComponent implements AfterViewInit, OnDestroy {\n  @ContentChild(NgModel) public ngModel?: NgModel; // Optional ngModel\n  public readonly ngModelGroup: NgModelGroup | null = inject(NgModelGroup, {\n    optional: true,\n    self: true,\n  });\n  private readonly destroy$$ = new Subject<void>();\n  private readonly cdRef = inject(ChangeDetectorRef);\n  private readonly formDirective = inject(FormDirective);\n  // Cache the previous error to avoid 'flickering'\n  private previousError?: string[];\n\n  @HostBinding('class.sc-control-wrapper--invalid')\n  public get invalid() {\n    return this.control?.touched && this.errors;\n  }\n\n  public get errors(): string[] | undefined {\n    if (this.control?.pending) {\n      return this.previousError;\n    } else {\n      this.previousError = this.control?.errors?.['errors'];\n    }\n    return this.control?.errors?.['errors'];\n  }\n\n  private get control(): AbstractControl | undefined {\n    return this.ngModelGroup\n      ? this.ngModelGroup.control\n      : this.ngModel?.control;\n  }\n\n  public ngOnDestroy(): void {\n    this.destroy$$.next();\n  }\n\n  public ngAfterViewInit(): void {\n    // Wait until the form is idle\n    // Then, listen to all events of the ngModelGroup or ngModel\n    // and mark the component and its ancestors as dirty\n    // This allows us to use the OnPush ChangeDetection Strategy\n    this.formDirective.idle$\n      .pipe(\n        switchMap(() => this.ngModelGroup?.control?.events || of(null)),\n        mergeWith(this.control?.events || of(null)),\n        takeUntil(this.destroy$$)\n      )\n      .subscribe(() => {\n        this.cdRef.markForCheck();\n      });\n  }\n}\n","<div class=\"sc-control-wrapper\">\n  <div class=\"sc-control-wrapper__content\">\n    <ng-content></ng-content>\n  </div>\n  <div class=\"sc-control-wrapper__errors\">\n    <ul [hidden]=\"!invalid\">\n      @for (error of errors; track error) {\n        <li>{{ error }}</li>\n      }\n    </ul>\n  </div>\n</div>\n","import { Directive, inject, input } from '@angular/core';\nimport {\n  AbstractControl,\n  AsyncValidator,\n  NG_ASYNC_VALIDATORS,\n  ValidationErrors,\n} from '@angular/forms';\nimport { FormDirective } from './form.directive';\nimport { Observable } from 'rxjs';\nimport { getFormControlField } from '../utils/form-utils';\nimport { ValidationOptions } from './validation-options';\n\n/**\n * Hooks into the ngModel selector and triggers an asynchronous validation for a form model\n * It will use a vest suite behind the scenes\n */\n@Directive({\n  selector: '[ngModel]',\n  standalone: true,\n  providers: [\n    {\n      provide: NG_ASYNC_VALIDATORS,\n      useExisting: FormModelDirective,\n      multi: true,\n    },\n  ],\n})\nexport class FormModelDirective implements AsyncValidator {\n  public validationOptions = input<ValidationOptions>({ debounceTime: 0 });\n  private readonly formDirective = inject(FormDirective);\n\n  public validate(\n    control: AbstractControl\n  ): Observable<ValidationErrors | null> {\n    const { ngForm, suite, formValue } = this.formDirective;\n    const field = getFormControlField(ngForm.control, control);\n    return this.formDirective.createAsyncValidator(field, this.validationOptions())(\n      control.getRawValue()\n    ) as Observable<ValidationErrors | null>;\n  }\n}\n","import { Directive, inject, input } from '@angular/core';\nimport {\n  AbstractControl,\n  AsyncValidator,\n  NG_ASYNC_VALIDATORS,\n  ValidationErrors,\n} from '@angular/forms';\nimport { FormDirective } from './form.directive';\nimport { Observable } from 'rxjs';\nimport { getFormGroupField } from '../utils/form-utils';\nimport { ValidationOptions } from './validation-options';\n\n/**\n * Hooks into the ngModelGroup selector and triggers an asynchronous validation for a form group\n * It will use a vest suite behind the scenes\n */\n@Directive({\n  selector: '[ngModelGroup]',\n  standalone: true,\n  providers: [\n    {\n      provide: NG_ASYNC_VALIDATORS,\n      useExisting: FormModelGroupDirective,\n      multi: true,\n    },\n  ],\n})\nexport class FormModelGroupDirective implements AsyncValidator {\n  public validationOptions = input<ValidationOptions>({ debounceTime: 0 });\n  private readonly formDirective = inject(FormDirective);\n\n  public validate(\n    control: AbstractControl\n  ): Observable<ValidationErrors | null> {\n    const { ngForm } = this.formDirective;\n    const field = getFormGroupField(ngForm.control, control);\n    return this.formDirective.createAsyncValidator(field, this.validationOptions())(\n      control.value\n    ) as Observable<ValidationErrors | null>;\n  }\n}\n","import { Optional, Provider } from '@angular/core';\nimport {\n  ControlContainer,\n  FormsModule,\n  NgForm,\n  NgModelGroup,\n} from '@angular/forms';\nimport { ValidateRootFormDirective } from './directives/validate-root-form.directive';\nimport { ControlWrapperComponent } from './components/control-wrapper/control-wrapper.component';\nimport { FormDirective } from './directives/form.directive';\nimport { FormModelDirective } from './directives/form-model.directive';\nimport { FormModelGroupDirective } from './directives/form-model-group.directive';\n\n/**\n * This is borrowed from  [https://github.com/wardbell/ngc-validate/blob/main/src/app/core/form-container-view-provider.ts](https://github.com/wardbell/ngc-validate/blob/main/src/app/core/form-container-view-provider.ts)\n * Thank you so much Ward Bell for your effort!:\n *\n * Provide a ControlContainer to a form component from the\n * nearest parent NgModelGroup (preferred) or NgForm.\n *\n * Required for Reactive Forms as well (unless you write CVA)\n *\n * @example\n * ```\n *   @Component({\n *     ...\n *    viewProviders[ formViewProvider ]\n *   })\n * ```\n * @see Kara's AngularConnect 2017 talk: https://youtu.be/CD_t3m2WMM8?t=1826\n *\n * Without this provider\n * - Controls are not registered with parent NgForm or NgModelGroup\n * - Form-level flags say \"untouched\" and \"valid\"\n * - No form-level validation roll-up\n * - Controls still validate, update model, and update their statuses\n * - If within NgForm, no compiler error because ControlContainer is optional for ngModel\n *\n * Note: if the SubForm Component that uses this Provider\n * is not within a Form or NgModelGroup, the provider returns `null`\n * resulting in an error, something like\n * ```\n * preview-fef3604083950c709c52b.js:1 ERROR Error:\n *  ngModelGroup cannot be used with a parent formGroup directive.\n *```\n */\nconst formViewProvider: Provider = {\n  provide: ControlContainer,\n  useFactory: _formViewProviderFactory,\n  deps: [\n    [new Optional(), NgForm],\n    [new Optional(), NgModelGroup],\n  ],\n};\n\nfunction _formViewProviderFactory(ngForm: NgForm, ngModelGroup: NgModelGroup) {\n  return ngModelGroup || ngForm || null;\n}\n\n/**\n * The providers we need in every child component that holds an ngModelGroup\n */\nexport const vestFormsViewProviders = [\n  { provide: ControlContainer, useExisting: NgForm },\n  formViewProvider, // very important if we want nested components with ngModelGroup\n];\n\n/**\n * Exports all the stuff we need to use the template driven forms\n */\nexport const vestForms = [\n  ValidateRootFormDirective,\n  ControlWrapperComponent,\n  FormDirective,\n  FormsModule,\n  FormModelDirective,\n  FormModelGroupDirective,\n] as const;\n","export function arrayToObject<T>(arr: T[]): { [key: number]: T } {\n  return arr.reduce((acc, value, index) => ({ ...acc, [index]: value }), {});\n}\n","/*\n * Public API Surface of ngx-vest-forms\n */\n\nexport { vestForms, vestFormsViewProviders } from './lib/exports';\nexport { DeepPartial } from './lib/utils/deep-partial';\nexport { DeepRequired } from './lib/utils/deep-required';\nexport {\n  set,\n  cloneDeep,\n  getAllFormErrors,\n  getFormControlField,\n  getFormGroupField,\n  mergeValuesAndRawValues,\n} from './lib/utils/form-utils';\nexport {\n  validateShape,\n  ShapeMismatchError,\n} from './lib/utils/shape-validation';\nexport { arrayToObject } from './lib/utils/array-to-object';\nexport { ROOT_FORM } from './lib/constants';\nexport { ControlWrapperComponent } from './lib/components/control-wrapper/control-wrapper.component';\nexport { FormDirective } from './lib/directives/form.directive';\nexport { FormModelDirective } from './lib/directives/form-model.directive';\nexport { FormModelGroupDirective } from './lib/directives/form-model-group.directive';\nexport { ValidateRootFormDirective } from './lib/directives/validate-root-form.directive';\nexport { ValidationOptions } from './lib/directives/validation-options';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}