{"version":3,"file":"ngwr-cookie.mjs","sources":["../../../projects/lib/cookie/cookie.ts","../../../projects/lib/cookie/ngwr-cookie.ts"],"sourcesContent":["/**\n * @license\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/thekhegay/ngwr/blob/main/LICENSE\n */\n\nimport { DOCUMENT } from '@angular/common';\nimport { Service, inject } from '@angular/core';\n\nimport type { WrCookieOptions } from './interfaces';\n\nconst DEFAULT_OPTS: Required<Pick<WrCookieOptions, 'path' | 'sameSite'>> = {\n  path: '/',\n  sameSite: 'Lax',\n};\n\n/**\n * Thin, SSR-safe `document.cookie` wrapper modelled after {@link WrStorage}.\n *\n * - Read/write/delete cookies through a typed API.\n * - `set()` serialises `expires` as either an HTTP-date or `Max-Age`.\n * - Every method short-circuits when there's no DOM (SSR / unit tests\n *   without a document) — reads return the fallback, writes are no-ops.\n *\n * @example\n * ```ts\n * const cookies = inject(WrCookie);\n *\n * cookies.set('theme', 'dark', { expires: 60 * 60 * 24 * 30 });  // 30 days\n * cookies.get('theme');                                          // 'dark'\n * cookies.has('theme');                                          // true\n * cookies.remove('theme');\n * cookies.keys();                                                // readonly string[]\n * ```\n *\n * @see https://ngwr.dev/services/cookie\n */\n@Service()\nexport class WrCookie {\n  private readonly doc = inject(DOCUMENT);\n\n  /** Is `key` present (regardless of value)? */\n  has(key: string): boolean {\n    return this.get(key) !== null;\n  }\n\n  /** Read `key`. Returns `fallback` (default `null`) when the key is missing. */\n  get(key: string, fallback: string | null = null): string | null {\n    const raw = this.doc.cookie;\n    if (!raw) return fallback;\n    const needle = `${encodeURIComponent(key)}=`;\n    for (const part of raw.split(';')) {\n      const trimmed = part.trim();\n      if (trimmed.startsWith(needle)) {\n        try {\n          return decodeURIComponent(trimmed.slice(needle.length));\n        } catch {\n          return trimmed.slice(needle.length);\n        }\n      }\n    }\n    return fallback;\n  }\n\n  /** Write `key=value` with optional attributes. */\n  set(key: string, value: string, options?: WrCookieOptions): void {\n    const opts = { ...DEFAULT_OPTS, ...options };\n    const parts: string[] = [`${encodeURIComponent(key)}=${encodeURIComponent(value)}`];\n\n    if (opts.expires !== undefined) {\n      if (opts.expires instanceof Date) {\n        parts.push(`expires=${opts.expires.toUTCString()}`);\n      } else {\n        parts.push(`max-age=${Math.max(0, Math.floor(opts.expires))}`);\n      }\n    }\n\n    parts.push(`path=${opts.path}`);\n    if (opts.domain) parts.push(`domain=${opts.domain}`);\n    if (opts.secure) parts.push('secure');\n    parts.push(`samesite=${opts.sameSite}`);\n\n    try {\n      this.doc.cookie = parts.join('; ');\n    } catch {\n      // SSR / sandboxed iframes: silently no-op.\n    }\n  }\n\n  /** Remove `key`. Path / domain must match what was used in `set()`. */\n  remove(key: string, options?: Pick<WrCookieOptions, 'path' | 'domain'>): void {\n    this.set(key, '', { ...options, expires: new Date(0) });\n  }\n\n  /** Every cookie key visible to this document. */\n  keys(): readonly string[] {\n    const raw = this.doc.cookie;\n    if (!raw) return [];\n    const out: string[] = [];\n    for (const part of raw.split(';')) {\n      const trimmed = part.trim();\n      const eq = trimmed.indexOf('=');\n      if (eq < 0) continue;\n      try {\n        out.push(decodeURIComponent(trimmed.slice(0, eq)));\n      } catch {\n        out.push(trimmed.slice(0, eq));\n      }\n    }\n    return out;\n  }\n\n  /** Remove every cookie visible to this document. Uses `path: '/'`. */\n  clear(): void {\n    for (const k of this.keys()) this.remove(k);\n  }\n}\n\nexport type { WrCookieOptions } from './interfaces';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}