{"version":3,"sources":["../src/i18n.ts","../src/utils.ts","../src/errorMap.ts","../src/locales/en.ts","../src/locales/bn.ts","../src/locales/es.ts","../src/locales/ru.ts","../src/index.ts"],"names":["locales","registerLocale","code","pack","format","template","params","_","k","humanType","t","normalizeValidation","valid","getErrorMap","locale","issue","T","base","setLocale","z","en","bn","es","ru"],"mappings":"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","file":"index.cjs","sourcesContent":["export type LocaleCode = \"en\" | \"bn\" | \"es\" | \"ru\" | \"jp\" | \"ko\" | \"ar\" | \"cn\" | \"in\";\r\n\r\nexport type MessageTemplates = {\r\n  // keys map to ZodIssueCode buckets in Zod v4\r\n  invalid_type: string;        // {expected} {received}\r\n  invalid_format: string;      // {format} {validation}\r\n  invalid_union: string;\r\n  invalid_value: string;       // {options} {received}\r\n  unrecognized_keys: string;   // {keys}\r\n  invalid_key: string;\r\n  invalid_element: string;\r\n  too_small: string;           // {minimum} {inclusive} {origin} {exact?}\r\n  too_big: string;             // {maximum} {inclusive} {origin} {exact?}\r\n  not_multiple_of: string;     // {divisor}\r\n  custom: string;              // generic fallback\r\n};\r\n\r\nexport type LocalePack = {\r\n  name: string;\r\n  templates: MessageTemplates;\r\n};\r\n\r\nexport const locales: Record<LocaleCode, LocalePack> = {} as any;\r\n\r\nexport function registerLocale(code: LocaleCode, pack: LocalePack) {\r\n  locales[code] = pack;\r\n}\r\n","export type Dict = Record<string, unknown>;\r\n\r\nexport function format(template: string, params: Dict): string {\r\n  return template.replace(/\\{(\\w+)\\}/g, (_, k) =>\r\n    params[k] === undefined || params[k] === null ? \"\" : String(params[k])\r\n  );\r\n}\r\n\r\nexport function pick<T extends Dict, K extends keyof T>(obj: T, keys: K[]): Pick<T, K> {\r\n  const out = {} as Pick<T, K>;\r\n  keys.forEach(k => (out[k] = obj[k]));\r\n  return out;\r\n}\r\n","import { z } from \"zod\";\r\nimport { locales } from \"./i18n\";\r\nimport type { LocaleCode } from \"./i18n\";\r\nimport { format, pick } from \"./utils\";\r\n\r\n// Import v4 types\r\ntype ZodErrorMap = z.core.$ZodErrorMap;\r\ntype ZodRawIssue = z.core.$ZodRawIssue;\r\n\r\nfunction humanType(t: unknown): string {\r\n  if (typeof t === \"string\") return t;\r\n  if (typeof t === \"number\") return \"number\";\r\n  if (typeof t === \"boolean\") return \"boolean\";\r\n  if (t instanceof Date) return \"date\";\r\n  if (Array.isArray(t)) return \"array\";\r\n  if (t === null) return \"null\";\r\n  if (t === undefined) return \"undefined\";\r\n  return typeof t;\r\n}\r\n\r\nfunction normalizeValidation(valid?: string) {\r\n  if (!valid) return \"\";\r\n  // e.g. \" (email)\" when validation = \"email\"\r\n  return ` (${valid})`;\r\n}\r\n\r\nexport function getErrorMap(locale: LocaleCode): ZodErrorMap {\r\n  const pack = locales[locale] ?? locales[\"en\"]; // fallback\r\n\r\n  return (issue: ZodRawIssue) => {\r\n    const T = pack.templates;\r\n\r\n    // If user manually set message on schema, prefer it.\r\n    if (issue.message) return { message: issue.message };\r\n\r\n    // per-issue parameters used in templates\r\n    const params: Record<string, unknown> = {};\r\n\r\n    switch (issue.code) {\r\n      case \"invalid_type\":\r\n        Object.assign(params, {\r\n          expected: (issue as any).expected,\r\n          received: humanType((issue as any).input)\r\n        });\r\n        return { message: format(T.invalid_type, params) };\r\n\r\n      case \"invalid_format\":\r\n        Object.assign(params, {\r\n          format: (issue as any).format,\r\n          validation: normalizeValidation((issue as any).format)\r\n        });\r\n        return { message: format(T.invalid_format, params) };\r\n\r\n      case \"invalid_union\":\r\n        return { message: T.invalid_union };\r\n\r\n      case \"invalid_value\":\r\n        Object.assign(params, {\r\n          options: (issue as any).values?.join(\", \"),\r\n          received: String((issue as any).input)\r\n        });\r\n        return { message: format(T.invalid_value, params) };\r\n\r\n      case \"unrecognized_keys\":\r\n        Object.assign(params, { keys: (issue as any).keys?.join(\", \") });\r\n        return { message: format(T.unrecognized_keys, params) };\r\n\r\n      case \"invalid_key\":\r\n        return { message: T.invalid_key };\r\n\r\n      case \"invalid_element\":\r\n        return { message: T.invalid_element };\r\n\r\n      case \"too_small\": {\r\n        const base = {\r\n          minimum: (issue as any).minimum,\r\n          inclusive: (issue as any).inclusive ? \"\" : \"+\",\r\n          exact: (issue as any).exact,\r\n          origin: (issue as any).origin\r\n        };\r\n        return { message: format(T.too_small, base) };\r\n      }\r\n\r\n      case \"too_big\": {\r\n        const base = {\r\n          maximum: (issue as any).maximum,\r\n          inclusive: (issue as any).inclusive ? \"\" : \"-\",\r\n          exact: (issue as any).exact,\r\n          origin: (issue as any).origin\r\n        };\r\n        return { message: format(T.too_big, base) };\r\n      }\r\n\r\n      case \"not_multiple_of\":\r\n        return { message: format(T.not_multiple_of, { divisor: (issue as any).divisor }) };\r\n\r\n      case \"custom\":\r\n      default:\r\n        return { message: T.custom };\r\n    }\r\n  };\r\n}\r\n\r\nexport function setLocale(locale: LocaleCode) {\r\n  z.config({\r\n    customError: getErrorMap(locale)\r\n  });\r\n}\r\n","import type { LocalePack } from \"../i18n\";\r\n\r\nexport const en: LocalePack = {\r\n  name: \"English\",\r\n  templates: {\r\n    invalid_type: \"Expected {expected}, received {received}.\",\r\n    invalid_format: \"Invalid {format}{validation}.\",\r\n    invalid_union: \"Invalid input: did not match any of the union types.\",\r\n    invalid_value: \"Invalid enum value. Expected one of {options}, received {received}.\",\r\n    unrecognized_keys: \"Unrecognized key(s) in object: {keys}.\",\r\n    invalid_key: \"Invalid key.\",\r\n    invalid_element: \"Invalid element.\",\r\n    too_small: \"{origin} must be at least {minimum}{inclusive}.\",\r\n    too_big: \"{origin} must be at most {maximum}{inclusive}.\",\r\n    not_multiple_of: \"Number must be a multiple of {divisor}.\",\r\n    custom: \"Invalid input.\"\r\n  }\r\n};\r\n","import type { LocalePack } from \"../i18n\";\r\n// Bengali\r\nexport const bn: LocalePack = {\r\n  name: \"বাংলা\",\r\n  templates: {\r\n    invalid_type: \"প্রত্যাশিত {expected}, পাওয়া গেছে {received}।\",\r\n    invalid_format: \"ভুল {format} ফরম্যাট{validation}।\",\r\n    invalid_union: \"ভুল ইনপুট: কোনো ইউনিয়ন টাইপের সাথে মিল নেই।\",\r\n    invalid_value: \"ভুল enum মান। প্রত্যাশিত {options} এর একটি, পাওয়া গেছে {received}।\",\r\n    unrecognized_keys: \"অজানা কী(সমূহ) অবজেক্টে: {keys}।\",\r\n    invalid_key: \"ভুল কী।\",\r\n    invalid_element: \"ভুল উপাদান।\",\r\n    too_small: \"{origin} অন্তত {minimum}{inclusive} হতে হবে।\",\r\n    too_big: \"{origin} সর্বোচ্চ {maximum}{inclusive} হতে হবে।\",\r\n    not_multiple_of: \"সংখ্যাটি {divisor} এর গুণিতক হতে হবে।\",\r\n    custom: \"ভুল ইনপুট।\"\r\n  }\r\n};\r\n","import type { LocalePack } from \"../i18n\";\r\n// Spanish\r\nexport const es: LocalePack = {\r\n  name: \"Español\",\r\n  templates: {\r\n    invalid_type: \"Se esperaba {expected}, se recibió {received}.\",\r\n    invalid_format: \"Formato {format} inválido{validation}.\",\r\n    invalid_union: \"Entrada inválida: no coincide con ningún tipo de unión.\",\r\n    invalid_value: \"Valor de enumeración inválido. Se esperaba uno de {options}, se recibió {received}.\",\r\n    unrecognized_keys: \"Clave(s) no reconocida(s) en el objeto: {keys}.\",\r\n    invalid_key: \"Clave inválida.\",\r\n    invalid_element: \"Elemento inválido.\",\r\n    too_small: \"{origin} debe ser al menos {minimum}{inclusive}.\",\r\n    too_big: \"{origin} debe ser como máximo {maximum}{inclusive}.\",\r\n    not_multiple_of: \"El número debe ser múltiplo de {divisor}.\",\r\n    custom: \"Entrada inválida.\"\r\n  }\r\n};","import type { LocalePack } from \"../i18n\";\r\n// Russian\r\nexport const ru: LocalePack = {\r\n  name: \"Русский\",\r\n  templates: {\r\n    invalid_type: \"Ожидалось {expected}, получено {received}.\",\r\n    invalid_format: \"Неверный формат {format}{validation}.\",\r\n    invalid_union: \"Неверный ввод: не соответствует ни одному из типов объединения.\",\r\n    invalid_value: \"Неверное значение перечисления. Ожидалось одно из {options}, получено {received}.\",\r\n    unrecognized_keys: \"Нераспознанные ключи в объекте: {keys}.\",\r\n    invalid_key: \"Неверный ключ.\",\r\n    invalid_element: \"Неверный элемент.\",\r\n    too_small: \"{origin} должно быть не меньше {minimum}{inclusive}.\",\r\n    too_big: \"{origin} должно быть не больше {maximum}{inclusive}.\",\r\n    not_multiple_of: \"Число должно быть кратно {divisor}.\",\r\n    custom: \"Неверный ввод.\"\r\n  }\r\n};","// Export the main functions\r\nexport { getErrorMap, setLocale } from \"./errorMap\";\r\nexport type { LocaleCode, MessageTemplates, LocalePack } from \"./i18n\";\r\nexport { registerLocale } from \"./i18n\";\r\n\r\n// Import and register built-in locales\r\nimport { registerLocale } from \"./i18n\";\r\nimport { en } from \"./locales/en\";\r\nimport { bn } from \"./locales/bn\";\r\nimport { es } from \"./locales/es\";\r\nimport { ru } from \"./locales/ru\";\r\n\r\n// Register built-in locales\r\nregisterLocale(\"en\", en);\r\nregisterLocale(\"bn\", bn);\r\nregisterLocale(\"es\", es);\r\nregisterLocale(\"ru\", ru);\r\n"]}