{"version":3,"sources":["../src/index.ts","../src/core/errors.ts","../src/core/registry.ts"],"sourcesContent":["export { RoundingPolicyNotFoundError } from \"./core/errors.js\";\nexport { createRoundingPolicyRegistry } from \"./core/registry.js\";\nexport type {\n  CurrencyRoundingOverride,\n  RoundingPolicyDefinition,\n} from \"./core/types.js\";\n","export class RoundingPolicyNotFoundError extends Error {\n  constructor(public readonly policyId: string) {\n    super(`Rounding policy not found: ${policyId}`);\n    this.name = \"RoundingPolicyNotFoundError\";\n  }\n}\n","import { Rounding, type MonetaryOperator, type RoundingMode } from \"@eristack/money\";\nimport { RoundingPolicyNotFoundError } from \"./errors.js\";\nimport type { RoundingPolicyDefinition } from \"./types.js\";\n\nfunction resolveOperator(\n  def: RoundingPolicyDefinition,\n  currency?: string,\n): MonetaryOperator {\n  const code = currency?.trim().toUpperCase();\n  const override = code ? def.currencyOverrides?.[code] : undefined;\n\n  if (override?.scale !== undefined) {\n    return Rounding.of(\n      override.scale,\n      override.mode ?? def.mode ?? \"HALF_EVEN\",\n    );\n  }\n\n  if (def.scale !== undefined) {\n    return Rounding.of(def.scale, def.mode ?? \"HALF_EVEN\");\n  }\n\n  return Rounding.currencyDefault(\n    code ?? currency,\n    (def.mode ?? \"HALF_EVEN\") as RoundingMode,\n  );\n}\n\nexport function createRoundingPolicyRegistry(\n  initial: RoundingPolicyDefinition[] = [],\n) {\n  const policies = new Map<string, RoundingPolicyDefinition>();\n\n  function registerPolicy(def: RoundingPolicyDefinition): void {\n    if (!def.id.trim()) {\n      throw new Error(\"Rounding policy id cannot be empty\");\n    }\n    policies.set(def.id, { ...def, id: def.id.trim() });\n  }\n\n  for (const def of initial) {\n    registerPolicy(def);\n  }\n\n  function roundingFor(args: {\n    policyId: string;\n    currency?: string;\n  }): MonetaryOperator {\n    const def = policies.get(args.policyId);\n    if (!def) {\n      throw new RoundingPolicyNotFoundError(args.policyId);\n    }\n    return resolveOperator(def, args.currency);\n  }\n\n  function listPolicies(): RoundingPolicyDefinition[] {\n    return [...policies.values()];\n  }\n\n  return { registerPolicy, roundingFor, listPolicies };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAO,IAAM,8BAAN,cAA0C,MAAM;AAAA,EACrD,YAA4B,UAAkB;AAC5C,UAAM,8BAA8B,QAAQ,EAAE;AADpB;AAE1B,SAAK,OAAO;AAAA,EACd;AAAA,EAH4B;AAI9B;;;ACLA,mBAAmE;AAInE,SAAS,gBACP,KACA,UACkB;AAClB,QAAM,OAAO,UAAU,KAAK,EAAE,YAAY;AAC1C,QAAM,WAAW,OAAO,IAAI,oBAAoB,IAAI,IAAI;AAExD,MAAI,UAAU,UAAU,QAAW;AACjC,WAAO,sBAAS;AAAA,MACd,SAAS;AAAA,MACT,SAAS,QAAQ,IAAI,QAAQ;AAAA,IAC/B;AAAA,EACF;AAEA,MAAI,IAAI,UAAU,QAAW;AAC3B,WAAO,sBAAS,GAAG,IAAI,OAAO,IAAI,QAAQ,WAAW;AAAA,EACvD;AAEA,SAAO,sBAAS;AAAA,IACd,QAAQ;AAAA,IACP,IAAI,QAAQ;AAAA,EACf;AACF;AAEO,SAAS,6BACd,UAAsC,CAAC,GACvC;AACA,QAAM,WAAW,oBAAI,IAAsC;AAE3D,WAAS,eAAe,KAAqC;AAC3D,QAAI,CAAC,IAAI,GAAG,KAAK,GAAG;AAClB,YAAM,IAAI,MAAM,oCAAoC;AAAA,IACtD;AACA,aAAS,IAAI,IAAI,IAAI,EAAE,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;AAAA,EACpD;AAEA,aAAW,OAAO,SAAS;AACzB,mBAAe,GAAG;AAAA,EACpB;AAEA,WAAS,YAAY,MAGA;AACnB,UAAM,MAAM,SAAS,IAAI,KAAK,QAAQ;AACtC,QAAI,CAAC,KAAK;AACR,YAAM,IAAI,4BAA4B,KAAK,QAAQ;AAAA,IACrD;AACA,WAAO,gBAAgB,KAAK,KAAK,QAAQ;AAAA,EAC3C;AAEA,WAAS,eAA2C;AAClD,WAAO,CAAC,GAAG,SAAS,OAAO,CAAC;AAAA,EAC9B;AAEA,SAAO,EAAE,gBAAgB,aAAa,aAAa;AACrD;","names":[]}