{"version":3,"sources":["../src/lib/parsers.ts"],"names":["parseAsTimestamp","options","value","num","parseAsIsoDateTime","date","parseAsStringEnum","enumValues","parseAsNumber","parseAsBoolean"],"mappings":"aAYO,SAASA,EAAiBC,CAAiC,CAAA,GAAI,CACpE,OAAO,CACL,KAAQC,CAAAA,CAAAA,EAAkB,CACxB,IAAMC,EAAM,MAAOD,CAAAA,CAAK,EACxB,OAAI,KAAA,CAAMC,CAAG,CAAUF,CAAAA,CAAAA,CAAQ,YACxBE,CAAAA,CACT,EACA,SAAYD,CAAAA,CAAAA,EAAkBA,EAAM,QAAS,EAAA,CAC7C,SAAUD,CAAQ,CAAA,QACpB,CACF,CAEO,SAASG,EAAmBH,CAA+B,CAAA,GAAI,CACpE,OAAO,CACL,KAAQC,CAAAA,CAAAA,EAAkB,CACxB,IAAMG,EAAO,IAAI,IAAA,CAAKH,CAAK,CAC3B,CAAA,OAAO,MAAMG,CAAK,CAAA,OAAA,EAAS,CAAA,CAAIJ,EAAQ,YAAeI,CAAAA,CACxD,EACA,SAAYH,CAAAA,CAAAA,EAAgBA,EAAM,WAAY,EAAA,CAC9C,QAAUD,CAAAA,CAAAA,CAAQ,QACpB,CACF,CAGO,SAASK,CACdC,CAAAA,CAAAA,CACAN,EAA4B,EAAC,CAC7B,CACA,OAAO,CACL,MAAQC,CACCK,EAAAA,CAAAA,CAAW,SAASL,CAAU,CAAA,CAChCA,EACDD,CAAQ,CAAA,YAAA,CAEd,SAAYC,CAAAA,CAAAA,EAAaA,EACzB,QAAUD,CAAAA,CAAAA,CAAQ,WAAcC,CAAaK,EAAAA,CAAAA,CAAW,SAASL,CAAK,CAAA,CACxE,CACF,CAGO,SAASM,CACdP,CAAAA,CAAAA,CAGI,EACJ,CAAA,CACA,OAAO,CACL,KAAA,CAAQC,CAAkB,EAAA,CACxB,IAAMC,CAAM,CAAA,MAAA,CAAOD,CAAK,CACxB,CAAA,OAAI,MAAMC,CAAG,CAAA,CAAUF,EAAQ,YAC3BA,CAAAA,CAAAA,CAAQ,MAAQ,KAAaE,CAAAA,EAAAA,CAAAA,CAAMF,EAAQ,GAAYA,CAAAA,CAAAA,CAAQ,IAC/DA,CAAQ,CAAA,GAAA,GAAQ,KAAaE,CAAAA,EAAAA,CAAAA,CAAMF,EAAQ,GAAYA,CAAAA,CAAAA,CAAQ,IAC5DE,CACT,CAAA,CACA,UAAYD,CAAkBA,EAAAA,CAAAA,CAAM,UACpC,CAAA,QAAA,CAAUD,EAAQ,QACpB,CACF,CAGO,SAASQ,CAAAA,CAAeR,EAAkC,EAAC,CAAG,CACnE,OAAO,CACL,KAAQC,CAAAA,CAAAA,EACFA,IAAU,MAAe,CAAA,CAAA,CAAA,CACzBA,IAAU,OAAgB,CAAA,CAAA,CAAA,CACvBD,EAAQ,YAEjB,CAAA,SAAA,CAAYC,GAAmBA,CAAM,CAAA,QAAA,GACrC,QAAUD,CAAAA,CAAAA,CAAQ,QACpB,CACF","file":"parsers.cjs","sourcesContent":["export interface ParserOptions<T> {\n  defaultValue?: T;\n  validate?: (value: T) => boolean;\n}\n\nexport interface Parser<T> {\n  parse: (value: string) => T | undefined;\n  serialize: (value: T) => string;\n  validate?: (value: T) => boolean;\n}\n\n// Date Parsers\nexport function parseAsTimestamp(options: ParserOptions<number> = {}) {\n  return {\n    parse: (value: string) => {\n      const num = Number(value);\n      if (isNaN(num)) return options.defaultValue;\n      return num;\n    },\n    serialize: (value: number) => value.toString(),\n    validate: options.validate,\n  };\n}\n\nexport function parseAsIsoDateTime(options: ParserOptions<Date> = {}) {\n  return {\n    parse: (value: string) => {\n      const date = new Date(value);\n      return isNaN(date.getTime()) ? options.defaultValue : date;\n    },\n    serialize: (value: Date) => value.toISOString(),\n    validate: options.validate,\n  };\n}\n\n// Enum Parser\nexport function parseAsStringEnum<T extends string>(\n  enumValues: readonly T[],\n  options: ParserOptions<T> = {}\n) {\n  return {\n    parse: (value: string) => {\n      return enumValues.includes(value as T)\n        ? (value as T)\n        : options.defaultValue;\n    },\n    serialize: (value: T) => value,\n    validate: options.validate ?? ((value: T) => enumValues.includes(value)),\n  };\n}\n\n// Number Parser with Range\nexport function parseAsNumber(\n  options: ParserOptions<number> & {\n    min?: number;\n    max?: number;\n  } = {}\n) {\n  return {\n    parse: (value: string) => {\n      const num = Number(value);\n      if (isNaN(num)) return options.defaultValue;\n      if (options.min !== undefined && num < options.min) return options.min;\n      if (options.max !== undefined && num > options.max) return options.max;\n      return num;\n    },\n    serialize: (value: number) => value.toString(),\n    validate: options.validate,\n  };\n}\n\n// Boolean Parser\nexport function parseAsBoolean(options: ParserOptions<boolean> = {}) {\n  return {\n    parse: (value: string) => {\n      if (value === \"true\") return true;\n      if (value === \"false\") return false;\n      return options.defaultValue;\n    },\n    serialize: (value: boolean) => value.toString(),\n    validate: options.validate,\n  };\n}\n"]}