{
  "version": 3,
  "sources": ["../index.ts"],
  "sourcesContent": [
    "/**\n * Special symbol to indicate that an infer function did not match/process the value.\n */\nconst NO_MATCH: unique symbol = Symbol(\"≇\");\n\ntype inferType = string | number | boolean | null | undefined | object;\n\n/**\n * Parse a value and run it through a transformer for custom behavior.\n */\nexport function enval<T, R>(value: unknown, transformer: (inferred: T, raw: unknown) => R): R;\n\n/**\n * Parse a value into a typed representation based on env-style input.\n */\nexport function enval<T = inferType>(value: unknown): T;\n\n/**\n * Parse a value into a boolean, number, null/undefined, JSON, or keep it as a string.\n */\nexport function enval<T>(\n  value: unknown,\n  transformer?: (inferred: inferType, raw: unknown) => T,\n): T {\n  const inferred = infer(value);\n\n  if (transformer) {\n    return transformer(inferred, value);\n  }\n\n  return inferred as T;\n}\n\nfunction infer(value: unknown): inferType {\n  if (typeof value !== \"string\") {\n    return value as inferType;\n  }\n\n  const text = value.trim();\n\n  if (text === \"\") {\n    return text;\n  }\n\n  const unquoted = text.replace(/^(['\"])(.*)\\1$/, \"$2\");\n  const lower = unquoted.toLowerCase();\n\n  for (const fn of inferFns) {\n    const result = fn(lower);\n    if (result !== NO_MATCH) return result;\n  }\n\n  return unquoted;\n}\n\nconst inferFns = [\n  function inferNullish(text: string) {\n    if (text === \"null\") return null;\n    if (text === \"undefined\") return undefined;\n    return NO_MATCH;\n  },\n  function inferBoolean(text: string) {\n    if ([\"true\", \"yes\", \"on\"].includes(text)) return true;\n    if ([\"false\", \"no\", \"off\"].includes(text)) return false;\n    return NO_MATCH;\n  },\n  function inferNumber(text: string) {\n    const numberPattern = /^-?\\d+(\\.\\d+)?([eE][+-]?\\d+)?$/;\n    if (!numberPattern.test(text)) return NO_MATCH;\n\n    const num = Number(text);\n    return Number.isSafeInteger(num) || !Number.isInteger(num) ? num : NO_MATCH;\n  },\n  function inferJson(text: string) {\n    if (\n      (text.startsWith(\"{\") && text.endsWith(\"}\")) ||\n      (text.startsWith(\"[\") && text.endsWith(\"]\"))\n    ) {\n      try {\n        return JSON.parse(text);\n      } catch {\n        return NO_MATCH;\n      }\n    }\n    return NO_MATCH;\n  },\n];\n"
  ],
  "mappings": "yfAGA,IAAM,EAA0B,OAAO,GAAE,EAiBlC,SAAS,CAAQ,CACtB,EACA,EACG,CACH,IAAM,EAAW,EAAM,CAAK,EAE5B,GAAI,EACF,OAAO,EAAY,EAAU,CAAK,EAGpC,OAAO,EAGT,SAAS,CAAK,CAAC,EAA2B,CACxC,GAAI,OAAO,IAAU,SACnB,OAAO,EAGT,IAAM,EAAO,EAAM,KAAK,EAExB,GAAI,IAAS,GACX,OAAO,EAGT,IAAM,EAAW,EAAK,QAAQ,iBAAkB,IAAI,EAC9C,EAAQ,EAAS,YAAY,EAEnC,QAAW,KAAM,EAAU,CACzB,IAAM,EAAS,EAAG,CAAK,EACvB,GAAI,IAAW,EAAU,OAAO,EAGlC,OAAO,EAGT,IAAM,EAAW,CACf,QAAqB,CAAC,EAAc,CAClC,GAAI,IAAS,OAAQ,OAAO,KAC5B,GAAI,IAAS,YAAa,OAC1B,OAAO,GAET,QAAqB,CAAC,EAAc,CAClC,GAAI,CAAC,OAAQ,MAAO,IAAI,EAAE,SAAS,CAAI,EAAG,MAAO,GACjD,GAAI,CAAC,QAAS,KAAM,KAAK,EAAE,SAAS,CAAI,EAAG,MAAO,GAClD,OAAO,GAET,QAAoB,CAAC,EAAc,CAEjC,GAAI,CADkB,iCACH,KAAK,CAAI,EAAG,OAAO,EAEtC,IAAM,EAAM,OAAO,CAAI,EACvB,OAAO,OAAO,cAAc,CAAG,GAAK,CAAC,OAAO,UAAU,CAAG,EAAI,EAAM,GAErE,QAAkB,CAAC,EAAc,CAC/B,GACG,EAAK,WAAW,GAAG,GAAK,EAAK,SAAS,GAAG,GACzC,EAAK,WAAW,GAAG,GAAK,EAAK,SAAS,GAAG,EAE1C,GAAI,CACF,OAAO,KAAK,MAAM,CAAI,EACtB,KAAM,CACN,OAAO,EAGX,OAAO,EAEX",
  "debugId": "95EE037A4AB542B064756E2164756E21",
  "names": []
}