{"version":3,"file":"ngx-cookie-service-ssr.mjs","sources":["../../../projects/ngx-cookie-service-ssr/src/lib/ssr-cookie.service.ts","../../../projects/ngx-cookie-service-ssr/src/public-api.ts","../../../projects/ngx-cookie-service-ssr/src/ngx-cookie-service-ssr.ts"],"sourcesContent":["import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { inject, Injectable, PLATFORM_ID, REQUEST } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class SsrCookieService {\n  private readonly document = inject(DOCUMENT);\n  private readonly platformId = inject(PLATFORM_ID);\n  private readonly request = inject(REQUEST, { optional: true });\n  private readonly documentIsAccessible: boolean = isPlatformBrowser(this.platformId);\n\n  /**\n   * Get cookie Regular Expression\n   *\n   * @param name Cookie name\n   * @returns property RegExp\n   *\n   * @author: Stepan Suvorov\n   * @since: 1.0.0\n   */\n  static getCookieRegExp(name: string): RegExp {\n    const escapedName: string = name.replace(/([\\[\\]{}()|=;+?,.*^$])/gi, '\\\\$1');\n\n    return new RegExp('(?:^' + escapedName + '|;\\\\s*' + escapedName + ')=(.*?)(?:;|$)', 'g');\n  }\n\n  /**\n   * Gets the unencoded version of an encoded component of a Uniform Resource Identifier (URI).\n   *\n   * @param encodedURIComponent A value representing an encoded URI component.\n   *\n   * @returns The unencoded version of an encoded component of a Uniform Resource Identifier (URI).\n   *\n   * @author: Stepan Suvorov\n   * @since: 1.0.0\n   */\n  static safeDecodeURIComponent(encodedURIComponent: string): string {\n    try {\n      return decodeURIComponent(encodedURIComponent);\n    } catch {\n      // probably it is not uri encoded. return as is\n      return encodedURIComponent;\n    }\n  }\n\n  /**\n   * Return `true` if {@link Document} is accessible, otherwise return `false`\n   *\n   * @param name Cookie name\n   * @returns boolean - whether cookie with specified name exists\n   *\n   * @author: Stepan Suvorov\n   * @since: 1.0.0\n   */\n  check(name: string): boolean {\n    name = encodeURIComponent(name);\n    const regExp: RegExp = SsrCookieService.getCookieRegExp(name);\n    return regExp.test(this.documentIsAccessible ? this.document.cookie : this.request?.headers.get('cookie'));\n  }\n\n  /**\n   * Get cookies by name\n   *\n   * @param name Cookie name\n   * @returns property value\n   *\n   * @author: Stepan Suvorov\n   * @since: 1.0.0\n   */\n  get(name: string): string {\n    if (this.check(name)) {\n      name = encodeURIComponent(name);\n      const regExp: RegExp = SsrCookieService.getCookieRegExp(name);\n      const result = regExp.exec(this.documentIsAccessible ? this.document.cookie : this.request?.headers.get('cookie'));\n      return result && result[1] ? SsrCookieService.safeDecodeURIComponent(result[1]) : '';\n    }\n    return '';\n  }\n\n  /**\n   * Get all cookies in JSON format\n   *\n   * @returns all the cookies in json\n   *\n   * @author: Stepan Suvorov\n   * @since: 1.0.0\n   */\n  getAll(): { [key: string]: string } {\n    const cookies: { [key: string]: string } = {};\n    const cookieString: any = this.documentIsAccessible ? this.document?.cookie : this.request?.headers.get('cookie');\n\n    if (cookieString && cookieString !== '') {\n      cookieString.split(';').forEach((currentCookie: string) => {\n        const [cookieName, cookieValue] = currentCookie.split('=');\n        cookies[SsrCookieService.safeDecodeURIComponent(cookieName.replace(/^ /, ''))] = SsrCookieService.safeDecodeURIComponent(cookieValue);\n      });\n    }\n\n    return cookies;\n  }\n\n  /**\n   * Set cookie based on provided information\n   *\n   * @param name     Cookie name\n   * @param value    Cookie value\n   * @param expires  Number of days until the cookies expires or an actual `Date`\n   * @param path     Cookie path\n   * @param domain   Cookie domain\n   * @param secure   Secure flag\n   * @param sameSite OWASP same site token `Lax`, `None`, or `Strict`. Defaults to `Lax`\n   * @param partitioned Partitioned flag\n   *\n   * @author: Stepan Suvorov\n   * @since: 1.0.0\n   */\n  set(\n    name: string,\n    value: string,\n    expires?: number | Date,\n    path?: string,\n    domain?: string,\n    secure?: boolean,\n    sameSite?: 'Lax' | 'None' | 'Strict',\n    partitioned?: boolean\n  ): void;\n\n  /**\n   * Set cookie based on provided information\n   *\n   * Cookie's parameters:\n   * <pre>\n   * expires  Number of days until the cookies expires or an actual `Date`\n   * path     Cookie path\n   * domain   Cookie domain\n   * secure Cookie secure flag\n   * sameSite OWASP same site token `Lax`, `None`, or `Strict`. Defaults to `Lax`\n   * </pre>\n   *\n   * @param name     Cookie name\n   * @param value    Cookie value\n   * @param options  Body with cookie's params\n   *\n   * @author: Stepan Suvorov\n   * @since: 1.0.0\n   */\n  set(\n    name: string,\n    value: string,\n    options?: {\n      expires?: number | Date;\n      path?: string;\n      domain?: string;\n      secure?: boolean;\n      sameSite?: 'Lax' | 'None' | 'Strict';\n      partitioned?: boolean;\n    }\n  ): void;\n\n  set(\n    name: string,\n    value: string,\n    expiresOrOptions?: number | Date | any,\n    path?: string,\n    domain?: string,\n    secure?: boolean,\n    sameSite?: 'Lax' | 'None' | 'Strict',\n    partitioned?: boolean\n  ): void {\n    if (!this.documentIsAccessible) {\n      return;\n    }\n\n    if (typeof expiresOrOptions === 'number' || expiresOrOptions instanceof Date || path || domain || secure || sameSite) {\n      const optionsBody = {\n        expires: expiresOrOptions,\n        path,\n        domain,\n        secure,\n        sameSite: sameSite ? sameSite : 'Lax',\n        partitioned,\n      };\n\n      this.set(name, value, optionsBody);\n      return;\n    }\n\n    let cookieString: string = encodeURIComponent(name) + '=' + encodeURIComponent(value) + ';';\n\n    const options = expiresOrOptions ? expiresOrOptions : {};\n\n    if (options.expires) {\n      if (typeof options.expires === 'number') {\n        const dateExpires: Date = new Date(new Date().getTime() + options.expires * 1000 * 60 * 60 * 24);\n\n        cookieString += 'expires=' + dateExpires.toUTCString() + ';';\n      } else {\n        cookieString += 'expires=' + options.expires.toUTCString() + ';';\n      }\n    }\n\n    if (options.path) {\n      cookieString += 'path=' + options.path + ';';\n    }\n\n    if (options.domain) {\n      cookieString += 'domain=' + options.domain + ';';\n    }\n\n    if (options.secure === false && options.sameSite === 'None') {\n      options.secure = true;\n      console.warn(\n        `[ngx-cookie-service] Cookie ${name} was forced with secure flag because sameSite=None.` +\n          `More details : https://github.com/stevermeister/ngx-cookie-service/issues/86#issuecomment-597720130`\n      );\n    }\n    if (options.secure) {\n      cookieString += 'secure;';\n    }\n\n    if (!options.sameSite) {\n      options.sameSite = 'Lax';\n    }\n\n    cookieString += 'sameSite=' + options.sameSite + ';';\n\n    if (options.partitioned) {\n      cookieString += 'Partitioned;';\n    }\n\n    this.document.cookie = cookieString;\n  }\n\n  /**\n   * Delete cookie by name at given path and domain. If not path is not specified, cookie at '/' path will be deleted.\n   *\n   * @param name   Cookie name\n   * @param path   Cookie path\n   * @param domain Cookie domain\n   * @param secure Cookie secure flag\n   * @param sameSite Cookie sameSite flag - https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite\n   *\n   * @author: Stepan Suvorov\n   * @since: 1.0.0\n   */\n  delete(name: string, path?: string, domain?: string, secure?: boolean, sameSite: 'Lax' | 'None' | 'Strict' = 'Lax'): void {\n    if (!this.documentIsAccessible) {\n      return;\n    }\n    const expiresDate = new Date('Thu, 01 Jan 1970 00:00:01 GMT');\n    this.set(name, '', { expires: expiresDate, path, domain, secure, sameSite });\n  }\n\n  /**\n   * Delete all cookies at given path and domain. If not path is not specified, all cookies at '/' path will be deleted.\n   *\n   * @param path   Cookie path\n   * @param domain Cookie domain\n   * @param secure Is the Cookie secure\n   * @param sameSite Is the cookie same site\n   *\n   * @author: Stepan Suvorov\n   * @since: 1.0.0\n   */\n  deleteAll(path?: string, domain?: string, secure?: boolean, sameSite: 'Lax' | 'None' | 'Strict' = 'Lax'): void {\n    if (!this.documentIsAccessible) {\n      return;\n    }\n\n    const cookies: any = this.getAll();\n\n    for (const cookieName in cookies) {\n      if (cookies.hasOwnProperty(cookieName)) {\n        this.delete(cookieName, path, domain, secure, sameSite);\n      }\n    }\n  }\n}\n","/*\n * Public API Surface of ngx-cookie-service-ssr\n */\n\nexport * from './lib/ssr-cookie.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}