{"version":3,"file":"ngx-error-message.mjs","sources":["../../../projects/ngx-error-message/src/lib/ngx-error-message.component.ts","../../../projects/ngx-error-message/src/lib/ngx-error-message-constant.ts","../../../projects/ngx-error-message/src/lib/ngx-error-message.token.ts","../../../projects/ngx-error-message/src/lib/ngx-error-message.translator.ts","../../../projects/ngx-error-message/src/lib/ngx-error-message.service.ts","../../../projects/ngx-error-message/src/lib/ngx-error-message.directive.ts","../../../projects/ngx-error-message/src/lib/ngx-error-message.pipe.ts","../../../projects/ngx-error-message/src/lib/provide-ngx-error-message.ts","../../../projects/ngx-error-message/src/lib/ngx-error-message.module.ts","../../../projects/ngx-error-message/src/public-api.ts","../../../projects/ngx-error-message/src/ngx-error-message.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, input } from '@angular/core'\n\n@Component({\n  selector: 'ngx-error-message',\n  template: `\n    @if (message()) {\n      <small [class]=\"messageClass()\" role=\"alert\" aria-live=\"polite\">{{\n        message()\n      }}</small>\n    }\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgxErrorMessageComponent {\n  readonly message = input('')\n  readonly messageClass = input('error-message')\n}\n","const octetPattern = '(25[0-5]|2[0-4]\\\\d|1\\\\d{2}|\\\\d{1,2})'\nconst countryCode = '\\\\+?[-.\\\\s]?\\\\d{1,2}[-.\\\\s]?'\nconst areaCode = '\\\\(?\\\\d{3}\\\\)?'\nconst phoneNumber = '\\\\d{3}[-.\\\\s]?\\\\d{4}'\nconst protocol = '(https?:\\\\/\\\\/)?'\nconst domain = '[\\\\w\\\\d-]+(\\\\.[\\\\w\\\\d-]+)+'\nconst path = '(\\\\/[-\\\\w\\\\d.]*)*\\\\/?'\nconst query = '(\\\\?[\\\\w\\\\d=&]*)?'\nconst fragment = '(#[\\\\w\\\\d-]*)?'\n\nexport const regEx = {\n  phoneNumber: new RegExp(\n    `^(${countryCode})?${areaCode}[-.\\\\s]?${phoneNumber}$`,\n  ),\n  websiteUrl: new RegExp(`^${protocol}${domain}${path}${query}${fragment}$`),\n  numeric: /^\\d+$/,\n  smallLetters: /^[a-z]+$/,\n  capitalLetters: /^[A-Z]+$/,\n  alphabet: /^[a-zA-Z\\s\\u00C0-\\u017F]+$/,\n  alphaNumeric: /^[a-zA-Z0-9\\s\\u00C0-\\u017F]+$/,\n  ip: new RegExp(`^(${octetPattern})(\\\\.(${octetPattern})){3}$`),\n}\n\nexport const requiredRegex = /^((?!actual).)*$/\n\nexport const DEFAULT_ERROR_PRIORITY = [\n  'required',\n  'email',\n  'pattern',\n  'minlength',\n  'maxlength',\n  'min',\n  'max',\n]\n","import { InjectionToken } from '@angular/core'\nimport { ResolvedErrorMessageConfig } from './ngx-error-message-interfaces'\n\nexport const ERROR_MESSAGE_CONFIG =\n  new InjectionToken<ResolvedErrorMessageConfig>('ERROR_MESSAGE_CONFIG')\n","import { InjectionToken } from '@angular/core'\n\n/**\n * Resolves a translation key to a message. The default implementation is a\n * zero-dependency no-op; `withNgxTranslate()` from the\n * `ngx-error-message/ngx-translate` secondary entry point overrides it with\n * an `@ngx-translate/core`-backed adapter.\n *\n * `translate()` is a plain synchronous method - implementations that read\n * signals while computing their result get reactivity for free, since\n * callers only ever invoke it from inside the directive's `computed()`.\n */\nexport interface NgxErrorMessageTranslator {\n  translate(key: string, params?: Record<string, string>): string\n}\n\nclass NoopTranslator implements NgxErrorMessageTranslator {\n  translate(): string {\n    return ''\n  }\n}\n\nexport const NGX_ERROR_MESSAGE_TRANSLATOR =\n  new InjectionToken<NgxErrorMessageTranslator>(\n    'NGX_ERROR_MESSAGE_TRANSLATOR',\n    {\n      providedIn: 'root',\n      factory: () => new NoopTranslator(),\n    },\n  )\n","import { Injectable, inject } from '@angular/core'\nimport { ValidationErrors } from '@angular/forms'\n\nimport { regEx, requiredRegex } from './ngx-error-message-constant'\nimport {\n  ErrorPriority,\n  ResolvedErrorMessageConfig,\n} from './ngx-error-message-interfaces'\nimport { ERROR_MESSAGE_CONFIG } from './ngx-error-message.token'\nimport { NGX_ERROR_MESSAGE_TRANSLATOR } from './ngx-error-message.translator'\n\n@Injectable()\nexport class NgxErrorMessageService {\n  private readonly config =\n    inject<ResolvedErrorMessageConfig>(ERROR_MESSAGE_CONFIG)\n  private readonly translator = inject(NGX_ERROR_MESSAGE_TRANSLATOR)\n\n  getErrorMessage(\n    controlErrors: ValidationErrors,\n    patternKey?: string,\n    fieldName?: string,\n    errorPriority?: ErrorPriority[],\n  ): string {\n    const errorKey = this.pickErrorKey(\n      controlErrors,\n      errorPriority ?? this.config.errorPriority,\n    )\n    if (!errorKey) {\n      return ''\n    }\n\n    const errorValue: unknown = controlErrors[errorKey]\n\n    if (typeof errorValue === 'boolean') {\n      return this.getMessage(errorKey, fieldName)\n    }\n\n    if (errorKey === 'pattern') {\n      const patternErrorKey = this.patternMatchExpression(\n        errorValue as Record<string, unknown>,\n        patternKey,\n      )\n      return this.getMessage(patternErrorKey, fieldName)\n    }\n    const requiredValue = this.getValueByRegexFromObject(\n      errorValue as Record<string, unknown>,\n      requiredRegex,\n    )\n    return this.getMessage(errorKey, fieldName, requiredValue)\n  }\n\n  private pickErrorKey(\n    controlErrors: ValidationErrors,\n    priority: ErrorPriority[],\n  ): string | undefined {\n    return (\n      priority.find((key) => key in controlErrors) ??\n      Object.keys(controlErrors).pop()\n    )\n  }\n\n  private patternMatchExpression(\n    value: Record<string, unknown>,\n    patternKey?: string,\n  ): string {\n    const pattern = value['requiredPattern'] as string\n    const regExpDefault = Object.entries(regEx).find(\n      ([, val]) => val.toString() === pattern,\n    )\n    return `${this.config.patternsPrefix}.${regExpDefault ? regExpDefault[0] : patternKey}`\n  }\n\n  private getValueByRegexFromObject(\n    obj: Record<string, unknown>,\n    regex: RegExp,\n  ): string | undefined {\n    const [, findValue] =\n      Object.entries(obj).find(([key]) => regex.test(key)) ?? []\n    // minLength/maxLength/min/max errors carry numbers, not strings.\n    return findValue === undefined ? undefined : String(findValue)\n  }\n\n  private interpolateMessage(\n    message: string,\n    params: Record<string, string>,\n  ): string {\n    return message.replace(/\\{\\{(\\w+)\\}\\}/g, (_, key) => params[key] ?? '')\n  }\n\n  private getNestedMessage(\n    dict: Record<string, unknown>,\n    path: string,\n  ): string | undefined {\n    const value = path\n      .split('.')\n      .reduce<unknown>(\n        (acc, key) =>\n          acc && typeof acc === 'object'\n            ? (acc as Record<string, unknown>)[key]\n            : undefined,\n        dict,\n      )\n    return typeof value === 'string' ? value : undefined\n  }\n\n  private getMessage(key: string, fieldName?: string, param?: string): string {\n    const options: Record<string, string> = {\n      ...(fieldName && { fieldName }),\n      ...(param !== undefined && { param }),\n    }\n    if (Object.keys(this.config.errorMessages).length > 0) {\n      const messageTemplate =\n        this.getNestedMessage(this.config.errorMessages, key) ?? ''\n      return this.interpolateMessage(messageTemplate, options)\n    }\n\n    return this.translator.translate(\n      `${this.config.validationsPrefix}.${key}`,\n      options,\n    )\n  }\n}\n","import {\n  ComponentRef,\n  Directive,\n  DestroyRef,\n  ElementRef,\n  OnInit,\n  Renderer2,\n  ViewContainerRef,\n  computed,\n  effect,\n  inject,\n  input,\n  signal,\n} from '@angular/core'\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop'\nimport { NgControl } from '@angular/forms'\nimport { NgxErrorMessageComponent } from './ngx-error-message.component'\nimport {\n  ClassNames,\n  ErrorPriority,\n  ErrorWhenType,\n} from './ngx-error-message-interfaces'\nimport { NgxErrorMessageService } from './ngx-error-message.service'\n\n@Directive({\n  selector: '[ngxErrorMessage]',\n  exportAs: 'ngxErrorMessage',\n})\nexport class NgxErrorMessageDirective implements OnInit {\n  readonly fieldName = input('', { alias: 'ngxErrorMessage' })\n  readonly classNames = input<ClassNames>({\n    control: 'error-container',\n    message: 'error-message',\n  })\n  readonly patternKey = input<string>()\n  readonly when = input<ErrorWhenType | ErrorWhenType[]>(['invalid', 'touched'])\n  readonly errorPriority = input<ErrorPriority[]>()\n\n  private readonly ngControl = inject(NgControl)\n  private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef)\n  private readonly renderer = inject(Renderer2)\n  private readonly container = inject(ViewContainerRef)\n  private readonly errorMessageService = inject(NgxErrorMessageService)\n  private readonly destroyRef = inject(DestroyRef)\n\n  // `NgControl`'s invalid/touched/etc. getters aren't signals, so this is\n  // bumped on every control event to force `hasError`/`message` to recompute.\n  private readonly revision = signal(0)\n  private componentRef?: ComponentRef<NgxErrorMessageComponent>\n\n  readonly hasError = computed(() => {\n    this.revision()\n    const condition = this.when()\n    return Array.isArray(condition)\n      ? condition.every((c) => !!this.ngControl[c])\n      : !!this.ngControl[condition]\n  })\n\n  readonly message = computed(() => {\n    // Read even though `hasError()` below already depends on it: `errors`\n    // can change (e.g. `required` -> `email`) while `hasError()`'s boolean\n    // output stays the same, and computed() only reruns on a value change.\n    this.revision()\n    return this.hasError()\n      ? this.errorMessageService.getErrorMessage(\n          this.ngControl.errors ?? {},\n          this.patternKey(),\n          this.fieldName(),\n          this.errorPriority(),\n        )\n      : ''\n  })\n\n  constructor() {\n    effect(() => {\n      const errorClass = this.classNames().control\n      this.hasError()\n        ? this.renderer.addClass(this.elementRef.nativeElement, errorClass)\n        : this.renderer.removeClass(this.elementRef.nativeElement, errorClass)\n    })\n\n    effect(() => {\n      const message = this.message()\n      if (!message && !this.componentRef) {\n        return\n      }\n      this.componentRef ??= this.container.createComponent(\n        NgxErrorMessageComponent,\n      )\n      this.componentRef.setInput('message', message)\n      this.componentRef.setInput('messageClass', this.classNames().message)\n    })\n  }\n\n  ngOnInit(): void {\n    this.ngControl.control?.events\n      .pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe(() => this.revision.update((value) => value + 1))\n  }\n}\n","import { Pipe, PipeTransform, inject } from '@angular/core'\nimport { ValidationErrors } from '@angular/forms'\nimport { ErrorPriority } from './ngx-error-message-interfaces'\nimport { NgxErrorMessageService } from './ngx-error-message.service'\n\n/** For consumers rendering messages manually (e.g. via `exportAs`); the directive itself calls `NgxErrorMessageService` directly. */\n@Pipe({\n  name: 'ngxErrorMessage',\n})\nexport class NgxErrorMessagePipe implements PipeTransform {\n  private readonly errorMessageService = inject(NgxErrorMessageService)\n\n  transform(\n    value: ValidationErrors | null,\n    patternKey?: string,\n    fieldName?: string,\n    errorPriority?: ErrorPriority[],\n  ): string {\n    if (!value) {\n      return ''\n    }\n    return this.errorMessageService.getErrorMessage(\n      value,\n      patternKey,\n      fieldName,\n      errorPriority,\n    )\n  }\n}\n","import { Provider } from '@angular/core'\nimport { DEFAULT_ERROR_PRIORITY } from './ngx-error-message-constant'\nimport { ErrorMessageConfig } from './ngx-error-message-interfaces'\nimport { ERROR_MESSAGE_CONFIG } from './ngx-error-message.token'\nimport { NgxErrorMessageService } from './ngx-error-message.service'\n\nfunction resolveConfig(config: ErrorMessageConfig) {\n  return {\n    validationsPrefix: config.validationsPrefix ?? 'validations',\n    patternsPrefix: config.patternsPrefix ?? 'pattern',\n    errorMessages: config.errorMessages ?? {},\n    errorPriority: config.errorPriority ?? DEFAULT_ERROR_PRIORITY,\n  }\n}\n\n/**\n * Composable, like `provideHttpClient(withXhr(), ...)`:\n * `provideNgxErrorMessage(withErrorMessageConfig({...}), withNgxTranslate())`.\n */\nexport function provideNgxErrorMessage(...features: Provider[][]): Provider[] {\n  return [\n    { provide: ERROR_MESSAGE_CONFIG, useValue: resolveConfig({}) },\n    NgxErrorMessageService,\n    ...features.flat(),\n  ]\n}\n\nexport function withErrorMessageConfig(config: ErrorMessageConfig): Provider[] {\n  return [{ provide: ERROR_MESSAGE_CONFIG, useValue: resolveConfig(config) }]\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\n\nimport { NgxErrorMessageComponent } from './ngx-error-message.component'\nimport { NgxErrorMessageDirective } from './ngx-error-message.directive'\nimport { NgxErrorMessagePipe } from './ngx-error-message.pipe'\nimport { ErrorMessageConfig } from './ngx-error-message-interfaces'\nimport {\n  provideNgxErrorMessage,\n  withErrorMessageConfig,\n} from './provide-ngx-error-message'\n\n/**\n * @deprecated Use `provideNgxErrorMessage()` instead. Will be removed in a\n * future major version. Note: `NgxErrorMessageModule` alone doesn't wire up\n * `@ngx-translate/core` - add `withNgxTranslate()` (from the\n * `ngx-error-message/ngx-translate` secondary entry point) to your own\n * providers if you need it.\n */\n@NgModule({\n  imports: [\n    CommonModule,\n    NgxErrorMessageComponent,\n    NgxErrorMessageDirective,\n    NgxErrorMessagePipe,\n  ],\n  exports: [NgxErrorMessageDirective],\n})\nexport class NgxErrorMessageModule {\n  static forRoot(\n    config?: ErrorMessageConfig,\n  ): ModuleWithProviders<NgxErrorMessageModule> {\n    return {\n      ngModule: NgxErrorMessageModule,\n      providers: provideNgxErrorMessage(withErrorMessageConfig(config ?? {})),\n    }\n  }\n\n  static forChild(\n    config?: ErrorMessageConfig,\n  ): ModuleWithProviders<NgxErrorMessageModule> {\n    return this.forRoot(config)\n  }\n}\n","/*\n * Public API Surface of ngx-error-message\n */\n\nexport * from './lib/ngx-error-message.directive'\nexport * from './lib/ngx-error-message.service'\nexport * from './lib/ngx-error-message.pipe'\nexport * from './lib/ngx-error-message.component'\nexport * from './lib/ngx-error-message.module'\nexport * from './lib/ngx-error-message.token'\nexport * from './lib/ngx-error-message.translator'\nexport * from './lib/ngx-error-message-interfaces'\nexport * from './lib/provide-ngx-error-message'\nexport { regEx, DEFAULT_ERROR_PRIORITY } from './lib/ngx-error-message-constant'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}