{"version":3,"sources":["../src/headers.ts"],"sourcesContent":["import { getCurrentRequest } from \"./server/request\";\n\nexport interface RequestCookie {\n  name: string;\n  value: string;\n}\n\nexport interface ReadonlyHeaders extends Iterable<[string, string]> {\n  get(name: string): string | null;\n  has(name: string): boolean;\n  forEach(callbackfn: (value: string, key: string, parent: Headers) => void, thisArg?: any): void;\n  entries(): IterableIterator<[string, string]>;\n  keys(): IterableIterator<string>;\n  values(): IterableIterator<string>;\n}\n\nexport interface ReadonlyRequestCookies extends Iterable<RequestCookie> {\n  get(name: string): RequestCookie | undefined;\n  getAll(name?: string): RequestCookie[];\n  has(name: string): boolean;\n  toString(): string;\n}\n\nexport function headers(): ReadonlyHeaders {\n  return new Headers(getCurrentRequest().headers) as ReadonlyHeaders;\n}\n\nexport function cookies(): ReadonlyRequestCookies {\n  const cookieHeader = getCurrentRequest().headers.get(\"cookie\") || \"\";\n  const parsed = parseCookieHeader(cookieHeader);\n\n  return {\n    get(name) {\n      return parsed.find((cookie) => cookie.name === name);\n    },\n    getAll(name) {\n      return name ? parsed.filter((cookie) => cookie.name === name) : [...parsed];\n    },\n    has(name) {\n      return parsed.some((cookie) => cookie.name === name);\n    },\n    toString() {\n      return cookieHeader;\n    },\n    [Symbol.iterator]() {\n      return parsed[Symbol.iterator]();\n    },\n  };\n}\n\nfunction parseCookieHeader(header: string): RequestCookie[] {\n  if (!header.trim()) return [];\n\n  return header\n    .split(\";\")\n    .map((part) => part.trim())\n    .filter(Boolean)\n    .map((part) => {\n      const separatorIndex = part.indexOf(\"=\");\n      if (separatorIndex === -1) {\n        return {\n          name: decodeCookiePart(part),\n          value: \"\",\n        };\n      }\n\n      return {\n        name: decodeCookiePart(part.slice(0, separatorIndex).trim()),\n        value: decodeCookiePart(part.slice(separatorIndex + 1).trim()),\n      };\n    })\n    .filter((cookie) => cookie.name.length > 0);\n}\n\nfunction decodeCookiePart(value: string) {\n  try {\n    return decodeURIComponent(value);\n  } catch {\n    return value;\n  }\n}\n"],"mappings":";;;;;;;;AAuBO,SAAS,UAA2B;AACzC,SAAO,IAAI,QAAQ,kBAAkB,EAAE,OAAO;AAChD;AAFgB;AAIT,SAAS,UAAkC;AAChD,QAAM,eAAe,kBAAkB,EAAE,QAAQ,IAAI,QAAQ,KAAK;AAClE,QAAM,SAAS,kBAAkB,YAAY;AAE7C,SAAO;AAAA,IACL,IAAI,MAAM;AACR,aAAO,OAAO,KAAK,CAAC,WAAW,OAAO,SAAS,IAAI;AAAA,IACrD;AAAA,IACA,OAAO,MAAM;AACX,aAAO,OAAO,OAAO,OAAO,CAAC,WAAW,OAAO,SAAS,IAAI,IAAI,CAAC,GAAG,MAAM;AAAA,IAC5E;AAAA,IACA,IAAI,MAAM;AACR,aAAO,OAAO,KAAK,CAAC,WAAW,OAAO,SAAS,IAAI;AAAA,IACrD;AAAA,IACA,WAAW;AACT,aAAO;AAAA,IACT;AAAA,IACA,CAAC,OAAO,QAAQ,IAAI;AAClB,aAAO,OAAO,OAAO,QAAQ,EAAE;AAAA,IACjC;AAAA,EACF;AACF;AArBgB;AAuBhB,SAAS,kBAAkB,QAAiC;AAC1D,MAAI,CAAC,OAAO,KAAK,EAAG,QAAO,CAAC;AAE5B,SAAO,OACJ,MAAM,GAAG,EACT,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,EACzB,OAAO,OAAO,EACd,IAAI,CAAC,SAAS;AACb,UAAM,iBAAiB,KAAK,QAAQ,GAAG;AACvC,QAAI,mBAAmB,IAAI;AACzB,aAAO;AAAA,QACL,MAAM,iBAAiB,IAAI;AAAA,QAC3B,OAAO;AAAA,MACT;AAAA,IACF;AAEA,WAAO;AAAA,MACL,MAAM,iBAAiB,KAAK,MAAM,GAAG,cAAc,EAAE,KAAK,CAAC;AAAA,MAC3D,OAAO,iBAAiB,KAAK,MAAM,iBAAiB,CAAC,EAAE,KAAK,CAAC;AAAA,IAC/D;AAAA,EACF,CAAC,EACA,OAAO,CAAC,WAAW,OAAO,KAAK,SAAS,CAAC;AAC9C;AAtBS;AAwBT,SAAS,iBAAiB,OAAe;AACvC,MAAI;AACF,WAAO,mBAAmB,KAAK;AAAA,EACjC,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AANS;","names":[]}