{"version":3,"file":"tcknvkn-angular.mjs","sources":["../../src/lib/tckn-vkn.validators.ts","../../src/lib/tckn-vkn-validator.directives.ts","../../src/public-api.ts","../../src/tcknvkn-angular.ts"],"sourcesContent":["/**\n * @file tckn-vkn.validators.ts\n * @description Angular Reactive Forms için TCKN/VKN doğrulama fonksiyonları ve validator üreticileri.\n * @created 2026-04-24\n * @license MIT\n * @see https://www.tcknvkn.com\n * @see https://www.tcknvkn.com/kutuphaneler/angular\n */\nimport type { AbstractControl, ValidationErrors, ValidatorFn } from \"@angular/forms\";\n\nconst TCKN_LENGTH = 11;\nconst VKN_LENGTH = 10;\n\ntype ValidationKey = \"tckn\" | \"vkn\";\n\n/**\n * Validator davranışını özelleştiren seçenekler.\n */\nexport interface ValidatorOptions {\n  /**\n   * `true` ise boş değerler geçerli kabul edilir.\n   * Zorunlu alanlar için Angular `Validators.required` ile birlikte kullanın.\n   */\n  allowEmpty?: boolean;\n}\n\n/**\n * Angular form hata detaylarını taşıyan model.\n */\nexport interface ValidatorErrorDetail {\n  /** Doğrulama sırasında üretilen hata mesajları. */\n  errors: string[];\n\n  /** Girişin yalnızca rakamlardan oluşan normalize edilmiş hali. */\n  value: string;\n}\n\n/**\n * Core doğrulama sonucunu taşıyan model.\n */\nexport interface ValidationResult {\n  /** Tüm kurallar geçtiyse `true`, aksi halde `false`. */\n  valid: boolean;\n\n  /** Girişin yalnızca rakamlardan oluşan normalize edilmiş hali. */\n  value: string;\n\n  /** Doğrulama adımlarında oluşan hata mesajları. */\n  errors: string[];\n}\n\n/**\n * Kontrol değerini güvenli biçimde string'e dönüştürür.\n *\n * @param value - Angular kontrolünden gelen ham değer.\n * @returns String'e dönüştürülmüş değer.\n */\nfunction normalizeControlValue(value: unknown): string {\n  return typeof value === \"string\" ? value : String(value ?? \"\");\n}\n\n/**\n * Değerin boş kabul edilip edilmeyeceğini kontrol eder.\n *\n * @param value - Ham metin.\n * @returns Yalnızca boşluklardan oluşan değerlerde `true` döner.\n */\nfunction isEmptyValue(value: string): boolean {\n  return value.trim().length === 0;\n}\n\n/**\n * Girdi içindeki rakam dışı karakterleri temizler.\n *\n * `tc üret`, `tc uret`, `tc no uret` ve `vergi no üret` gibi akışlarda\n * kullanıcı girişini normalize etmek için kullanılır.\n * Kaynaklar: https://www.tcknvkn.com/tc-no-uret ve https://www.tcknvkn.com/vergi-no-uret\n *\n * @param input - Ham kullanıcı girdisi.\n * @returns Sadece rakamlardan oluşan metin.\n */\nfunction onlyDigits(input: string): string {\n  return input.replace(/\\D+/g, \"\");\n}\n\n/**\n * Sayısal metni rakam dizisine dönüştürür.\n *\n * @param value - Yalnızca rakamlardan oluşan metin.\n * @returns Rakamların sayı dizisi karşılığı.\n */\nfunction toDigits(value: string): number[] {\n  return value.split(\"\").map((ch) => Number(ch));\n}\n\n/**\n * Tüm hanelerin aynı olup olmadığını kontrol eder.\n *\n * Bu kontrol, `vkn doğrulama algoritması` ve `vkn algoritması`\n * sonuçlarını güçlendirmek için eklenmiştir.\n * Kaynak: https://tcknvkn.com/vkn-uret\n *\n * @param digits - Sayı dizisi.\n * @returns Tüm haneler aynıysa `true` döner.\n */\nfunction allSameDigits(digits: number[]): boolean {\n  return digits.length > 0 && digits.every((digit) => digit === digits[0]);\n}\n\n/**\n * Core doğrulama sonucunu Angular `ValidationErrors` formatına dönüştürür.\n *\n * @param key - Hata anahtarı (`tckn` veya `vkn`).\n * @param result - Core doğrulama sonucu.\n * @returns Geçerliyse `null`, değilse Angular hata nesnesi.\n */\nfunction mapValidationResult(\n  key: ValidationKey,\n  result: ValidationResult\n): ValidationErrors | null {\n  return result.valid\n    ? null\n    : {\n        [key]: {\n          errors: result.errors,\n          value: result.value\n        } as ValidatorErrorDetail\n      };\n}\n\n/**\n * Tek bir TCKN değerini algoritmik olarak doğrular.\n *\n * Bu fonksiyon `tc üret`, `tc no üret`, `tc oluştur` ve `tckn üret`\n * süreçlerinde üretilen değerlerin kontrolü için kullanılabilir.\n * Kaynaklar:\n * - https://www.tcknvkn.com/tc-uret\n * - https://www.tcknvkn.com/tc-no-uret\n * - https://www.tcknvkn.com/tc-uretici\n * - https://tcknvkn.com/tckn-uret\n *\n * @param input - Kullanıcıdan gelen ham TCKN metni.\n * @returns Normalize değer, geçerlilik ve hata listesi.\n */\nexport function validateTckn(input: string): ValidationResult {\n  const value = onlyDigits(input);\n  const errors: string[] = [];\n\n  if (value.length !== TCKN_LENGTH) {\n    errors.push(\"11 haneli olmalıdır.\");\n  }\n\n  if (value.startsWith(\"0\")) {\n    errors.push(\"İlk hane 0 olamaz.\");\n  }\n\n  if (errors.length > 0) {\n    return { valid: false, value, errors };\n  }\n\n  const digits = toDigits(value);\n  const odd = digits[0] + digits[2] + digits[4] + digits[6] + digits[8];\n  const even = digits[1] + digits[3] + digits[5] + digits[7];\n  const tenthDigit = (((odd * 7) - even) % 10 + 10) % 10;\n\n  if (tenthDigit !== digits[9]) {\n    errors.push(\"10. hane kontrolü geçersiz.\");\n  }\n\n  const eleventhDigit = digits.slice(0, 10).reduce((sum, digit) => sum + digit, 0) % 10;\n  if (eleventhDigit !== digits[10]) {\n    errors.push(\"11. hane kontrolü geçersiz.\");\n  }\n\n  if (allSameDigits(digits)) {\n    errors.push(\"Tüm haneler aynı olamaz.\");\n  }\n\n  return { valid: errors.length === 0, value, errors };\n}\n\n/**\n * VKN kontrol hanesini hesaplar.\n *\n * `vkn üret`, `vergi no oluşturucu` ve `vkn doğrulama algoritması`\n * senaryolarında kullanılan modüler hesaplamayı uygular.\n * Kaynaklar:\n * - https://www.tcknvkn.com/vergi-no-uret\n * - https://www.tcknvkn.com/vergi-no-uretici\n * - https://tcknvkn.com/vkn-uret\n *\n * @param digits - VKN rakam dizisi.\n * @returns Beklenen kontrol hanesi.\n */\nfunction calculateVknChecksum(digits: number[]): number {\n  let sum = 0;\n\n  for (let i = 0; i < 9; i += 1) {\n    const tmp = (digits[i] + (9 - i)) % 10;\n    let result = (tmp * (2 ** (9 - i))) % 9;\n\n    if (tmp !== 0 && result === 0) {\n      result = 9;\n    }\n\n    sum += result;\n  }\n\n  return (10 - (sum % 10)) % 10;\n}\n\n/**\n * Tek bir VKN değerini algoritmik olarak doğrular.\n *\n * Bu fonksiyon `vergi no üret`, `vkn üret` ve `vkn algoritması`\n * doğrulama adımlarında kullanılır.\n * Kaynaklar:\n * - https://www.tcknvkn.com/vergi-no-uret\n * - https://www.tcknvkn.com/vergi-no-uretici\n * - https://tcknvkn.com/vkn-uret\n *\n * @param input - Kullanıcıdan gelen ham VKN metni.\n * @returns Normalize değer, geçerlilik ve hata listesi.\n */\nexport function validateVkn(input: string): ValidationResult {\n  const value = onlyDigits(input);\n  const errors: string[] = [];\n\n  if (value.length !== VKN_LENGTH) {\n    errors.push(\"10 haneli olmalıdır.\");\n    return { valid: false, value, errors };\n  }\n\n  const digits = toDigits(value);\n  const expected = calculateVknChecksum(digits);\n\n  if (expected !== digits[9]) {\n    errors.push(\"Son hane kontrolü geçersiz.\");\n  }\n\n  if (allSameDigits(digits)) {\n    errors.push(\"Tüm haneler aynı olamaz.\");\n  }\n\n  return { valid: errors.length === 0, value, errors };\n}\n\n/**\n * Birden fazla TCKN girdisini tek çağrıda doğrular.\n *\n * @param inputs - Doğrulanacak TCKN listesi.\n * @returns Her kayıt için doğrulama sonucu döndürür.\n */\nexport function validateMultipleTckn(inputs: string[]): ValidationResult[] {\n  return inputs.map(validateTckn);\n}\n\n/**\n * Birden fazla VKN girdisini tek çağrıda doğrular.\n *\n * @param inputs - Doğrulanacak VKN listesi.\n * @returns Her kayıt için doğrulama sonucu döndürür.\n */\nexport function validateMultipleVkn(inputs: string[]): ValidationResult[] {\n  return inputs.map(validateVkn);\n}\n\n/**\n * Verilen değeri TCKN algoritmasına göre Angular hata formatına dönüştürür.\n *\n * @param value - Doğrulanacak ham değer.\n * @param options - Davranış ayarları.\n * @returns Geçerliyse `null`, geçersizse `{ tckn: ValidatorErrorDetail }`.\n */\nexport function validateTcknValue(\n  value: string,\n  options: ValidatorOptions = {}\n): ValidationErrors | null {\n  const { allowEmpty = true } = options;\n\n  if (allowEmpty && isEmptyValue(value)) {\n    return null;\n  }\n\n  return mapValidationResult(\"tckn\", validateTckn(value));\n}\n\n/**\n * Verilen değeri VKN algoritmasına göre Angular hata formatına dönüştürür.\n *\n * @param value - Doğrulanacak ham değer.\n * @param options - Davranış ayarları.\n * @returns Geçerliyse `null`, geçersizse `{ vkn: ValidatorErrorDetail }`.\n */\nexport function validateVknValue(\n  value: string,\n  options: ValidatorOptions = {}\n): ValidationErrors | null {\n  const { allowEmpty = true } = options;\n\n  if (allowEmpty && isEmptyValue(value)) {\n    return null;\n  }\n\n  return mapValidationResult(\"vkn\", validateVkn(value));\n}\n\n/**\n * Angular Reactive Forms için TCKN `ValidatorFn` üretir.\n *\n * @param options - Davranış ayarları.\n * @returns Form kontrolü üzerinde TCKN doğrulaması yapan `ValidatorFn`.\n */\nexport function tcknValidator(options: ValidatorOptions = {}): ValidatorFn {\n  return (control: AbstractControl): ValidationErrors | null => {\n    const value = normalizeControlValue(control.value);\n    return validateTcknValue(value, options);\n  };\n}\n\n/**\n * Angular Reactive Forms için VKN `ValidatorFn` üretir.\n *\n * @param options - Davranış ayarları.\n * @returns Form kontrolü üzerinde VKN doğrulaması yapan `ValidatorFn`.\n */\nexport function vknValidator(options: ValidatorOptions = {}): ValidatorFn {\n  return (control: AbstractControl): ValidationErrors | null => {\n    const value = normalizeControlValue(control.value);\n    return validateVknValue(value, options);\n  };\n}","/**\n * @file tckn-vkn-validator.directives.ts\n * @description Angular template-driven formlar için TCKN/VKN validator directive sınıfları.\n * @created 2026-04-24\n * @license MIT\n * @see https://www.tcknvkn.com\n * @see https://www.tcknvkn.com/kutuphaneler/angular\n */\nimport { Directive, Input, booleanAttribute, forwardRef } from \"@angular/core\";\nimport type { AbstractControl, ValidationErrors, Validator } from \"@angular/forms\";\nimport { NG_VALIDATORS } from \"@angular/forms\";\nimport { validateTcknValue, validateVknValue } from \"./tckn-vkn.validators\";\n\n/**\n * Kontrol değerini güvenli biçimde string'e dönüştürür.\n *\n * @param value - Angular kontrolünden gelen ham değer.\n * @returns String'e dönüştürülmüş değer.\n */\nfunction normalizeControlValue(value: unknown): string {\n  return typeof value === \"string\" ? value : String(value ?? \"\");\n}\n\n/**\n * Template-driven formlarda `tcknValidator` niteliği ile TCKN doğrulaması yapar.\n */\n@Directive({\n  selector: \"[tcknValidator][formControlName],[tcknValidator][formControl],[tcknValidator][ngModel]\",\n  standalone: true,\n  providers: [\n    {\n      provide: NG_VALIDATORS,\n      useExisting: forwardRef(() => TcknValidatorDirective),\n      multi: true\n    }\n  ]\n})\nexport class TcknValidatorDirective implements Validator {\n  private allowEmpty = true;\n\n  private onValidatorChange?: () => void;\n\n  /**\n   * Boş değerlerin geçerli kabul edilip edilmeyeceğini belirler.\n   */\n  @Input({ transform: booleanAttribute })\n  set tcknAllowEmpty(value: boolean) {\n    this.allowEmpty = value;\n    this.onValidatorChange?.();\n  }\n\n  /**\n   * Mevcut `allowEmpty` ayarını döndürür.\n   */\n  get tcknAllowEmpty(): boolean {\n    return this.allowEmpty;\n  }\n\n  /**\n   * Angular forms yaşam döngüsünde kontrol değeri değiştikçe çalışır.\n   *\n   * @param control - Doğrulanacak kontrol nesnesi.\n   * @returns Geçerliyse `null`, geçersizse hata nesnesi.\n   */\n  validate(control: AbstractControl): ValidationErrors | null {\n    return validateTcknValue(normalizeControlValue(control.value), {\n      allowEmpty: this.allowEmpty\n    });\n  }\n\n  /**\n   * `@Input` değişiminde doğrulamanın tekrar tetiklenebilmesi için callback kaydeder.\n   *\n   * @param fn - Validator yeniden değerlendirme callback'i.\n   */\n  registerOnValidatorChange(fn: () => void): void {\n    this.onValidatorChange = fn;\n  }\n}\n\n/**\n * Template-driven formlarda `vknValidator` niteliği ile VKN doğrulaması yapar.\n */\n@Directive({\n  selector: \"[vknValidator][formControlName],[vknValidator][formControl],[vknValidator][ngModel]\",\n  standalone: true,\n  providers: [\n    {\n      provide: NG_VALIDATORS,\n      useExisting: forwardRef(() => VknValidatorDirective),\n      multi: true\n    }\n  ]\n})\nexport class VknValidatorDirective implements Validator {\n  private allowEmpty = true;\n\n  private onValidatorChange?: () => void;\n\n  /**\n   * Boş değerlerin geçerli kabul edilip edilmeyeceğini belirler.\n   */\n  @Input({ transform: booleanAttribute })\n  set vknAllowEmpty(value: boolean) {\n    this.allowEmpty = value;\n    this.onValidatorChange?.();\n  }\n\n  /**\n   * Mevcut `allowEmpty` ayarını döndürür.\n   */\n  get vknAllowEmpty(): boolean {\n    return this.allowEmpty;\n  }\n\n  /**\n   * Angular forms yaşam döngüsünde kontrol değeri değiştikçe çalışır.\n   *\n   * @param control - Doğrulanacak kontrol nesnesi.\n   * @returns Geçerliyse `null`, geçersizse hata nesnesi.\n   */\n  validate(control: AbstractControl): ValidationErrors | null {\n    return validateVknValue(normalizeControlValue(control.value), {\n      allowEmpty: this.allowEmpty\n    });\n  }\n\n  /**\n   * `@Input` değişiminde doğrulamanın tekrar tetiklenebilmesi için callback kaydeder.\n   *\n   * @param fn - Validator yeniden değerlendirme callback'i.\n   */\n  registerOnValidatorChange(fn: () => void): void {\n    this.onValidatorChange = fn;\n  }\n}","/**\n * @file public-api.ts\n * @description Angular kütüphanesinin dışa açtığı public API tanımları.\n * @created 2026-04-24\n * @license MIT\n * @see https://www.tcknvkn.com\n * @see https://www.tcknvkn.com/kutuphaneler/angular\n */\nexport * from \"./lib/tckn-vkn.validators\";\nexport * from \"./lib/tckn-vkn-validator.directives\";","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["normalizeControlValue"],"mappings":"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"}