{"version":3,"sources":["../../src/zod/index.ts","../../src/zod/schemas.ts","../../src/core/dimension.ts","../../src/core/errors.ts"],"sourcesContent":["export { dimensionSchema } from \"./schemas.js\";\n","import { z } from \"zod\";\n\nimport { normalizeDimension } from \"../core/dimension.js\";\n\nexport const dimensionSchema = z\n  .object({\n    length: z.string(),\n    width: z.string(),\n    height: z.string(),\n    unit: z.string().optional(),\n  })\n  .transform((value) => normalizeDimension(value));\n","import Decimal from \"decimal.js\";\n\nimport { DimensionParseError } from \"./errors.js\";\nimport type { Dimension, DimensionVolumeOptions } from \"./types.js\";\n\nfunction trimOptional(value: string | undefined): string | undefined {\n  const t = value?.trim();\n  return t ? t : undefined;\n}\n\nfunction parsePositiveDecimal(value: string, field: string): Decimal {\n  const trimmed = value.trim();\n  if (!trimmed) {\n    throw new DimensionParseError(`${field} is required`);\n  }\n  let dec: Decimal;\n  try {\n    dec = new Decimal(trimmed);\n  } catch {\n    throw new DimensionParseError(`${field} must be a decimal string`);\n  }\n  if (!dec.isFinite() || dec.lte(0)) {\n    throw new DimensionParseError(`${field} must be a positive finite number`);\n  }\n  return dec;\n}\n\nexport function normalizeDimension(input: Dimension): Dimension {\n  const length = parsePositiveDecimal(input.length, \"length\").toFixed();\n  const width = parsePositiveDecimal(input.width, \"width\").toFixed();\n  const height = parsePositiveDecimal(input.height, \"height\").toFixed();\n  const unit = trimOptional(input.unit);\n  return { length, width, height, unit };\n}\n\nexport function dimensionVolume(\n  dimension: Dimension,\n  options: DimensionVolumeOptions = {},\n): string {\n  const d = normalizeDimension(dimension);\n  const scale = options.scale ?? 6;\n  const volume = new Decimal(d.length)\n    .mul(d.width)\n    .mul(d.height)\n    .toDecimalPlaces(scale, Decimal.ROUND_HALF_UP);\n  return volume.toFixed(scale);\n}\n\nexport function formatDimension(dimension: Dimension): string {\n  const d = normalizeDimension(dimension);\n  const base = `${d.length} × ${d.width} × ${d.height}`;\n  return d.unit ? `${base} ${d.unit}` : base;\n}\n","export class DimensionParseError extends Error {\n  readonly code = \"DIMENSION_PARSE_ERROR\" as const;\n\n  constructor(message: string) {\n    super(message);\n    this.name = \"DimensionParseError\";\n  }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,iBAAkB;;;ACAlB,qBAAoB;;;ACAb,IAAM,sBAAN,cAAkC,MAAM;AAAA,EACpC,OAAO;AAAA,EAEhB,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;;;ADFA,SAAS,aAAa,OAA+C;AACnE,QAAM,IAAI,OAAO,KAAK;AACtB,SAAO,IAAI,IAAI;AACjB;AAEA,SAAS,qBAAqB,OAAe,OAAwB;AACnE,QAAM,UAAU,MAAM,KAAK;AAC3B,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,oBAAoB,GAAG,KAAK,cAAc;AAAA,EACtD;AACA,MAAI;AACJ,MAAI;AACF,UAAM,IAAI,eAAAA,QAAQ,OAAO;AAAA,EAC3B,QAAQ;AACN,UAAM,IAAI,oBAAoB,GAAG,KAAK,2BAA2B;AAAA,EACnE;AACA,MAAI,CAAC,IAAI,SAAS,KAAK,IAAI,IAAI,CAAC,GAAG;AACjC,UAAM,IAAI,oBAAoB,GAAG,KAAK,mCAAmC;AAAA,EAC3E;AACA,SAAO;AACT;AAEO,SAAS,mBAAmB,OAA6B;AAC9D,QAAM,SAAS,qBAAqB,MAAM,QAAQ,QAAQ,EAAE,QAAQ;AACpE,QAAM,QAAQ,qBAAqB,MAAM,OAAO,OAAO,EAAE,QAAQ;AACjE,QAAM,SAAS,qBAAqB,MAAM,QAAQ,QAAQ,EAAE,QAAQ;AACpE,QAAM,OAAO,aAAa,MAAM,IAAI;AACpC,SAAO,EAAE,QAAQ,OAAO,QAAQ,KAAK;AACvC;;;AD7BO,IAAM,kBAAkB,aAC5B,OAAO;AAAA,EACN,QAAQ,aAAE,OAAO;AAAA,EACjB,OAAO,aAAE,OAAO;AAAA,EAChB,QAAQ,aAAE,OAAO;AAAA,EACjB,MAAM,aAAE,OAAO,EAAE,SAAS;AAC5B,CAAC,EACA,UAAU,CAAC,UAAU,mBAAmB,KAAK,CAAC;","names":["Decimal"]}