{"version":3,"file":"ngx-toolkit-cookie.mjs","sources":["../../../projects/cookie/src/lib/cookie.token.ts","../../../projects/cookie/src/lib/cookie.service.ts","../../../projects/cookie/src/lib/cookie.model.ts","../../../projects/cookie/src/lib/browser/browser-cookie.factory.ts","../../../projects/cookie/src/lib/cookie.decorator.ts","../../../projects/cookie/src/lib/cookie.module.ts","../../../projects/cookie/src/lib/server/server-cookie.factory.ts","../../../projects/cookie/src/public-api.ts","../../../projects/cookie/src/ngx-toolkit-cookie.ts"],"sourcesContent":["import {InjectionToken} from '@angular/core';\nimport {CookieOptions} from './cookie.model';\n\nexport const COOKIE_OPTIONS = new InjectionToken<CookieOptions>('COOKIE_OPTIONS');\n","import {Inject, Injectable, Optional} from '@angular/core';\nimport {CookieOptions} from './cookie.model';\nimport {COOKIE_OPTIONS} from './cookie.token';\n\nexport const DATE_MAX_EXPIRES: Date = new Date('Fri, 31 Dec 9999 23:59:59 GMT');\nexport const DEFAULT_COOKIE_OPTIONS: CookieOptions = {\n  path: '/',\n  expires: Infinity\n};\n\nexport abstract class CookieFactory {\n  /**\n   * Get all cookies in object format.\n   */\n  abstract getAll(): { [key: string]: string };\n\n  /**\n   * Implementation (create / update / delete)\n   */\n  abstract save(key: string, data: string, options: CookieOptions): void;\n}\n\n@Injectable()\nexport class CookieService {\n  private cookieOptions: CookieOptions;\n\n  constructor(\n    @Optional()\n    @Inject(COOKIE_OPTIONS)\n      cookieOptions: CookieOptions,\n    private cookieFactory: CookieFactory\n  ) {\n    this.cookieOptions = cookieOptions || DEFAULT_COOKIE_OPTIONS;\n  }\n\n  /**\n   * Returns an integer representing the number of cookie items.\n   */\n  get length(): number {\n    return this.keys().length;\n  }\n\n  /**\n   * Transform to expires Date\n   */\n  private static getExpiresDate(expires?: Date | string | number): Date {\n    if (!expires) {\n      return null;\n    }\n\n    switch (expires.constructor) {\n      case Number:\n        return expires === Infinity ? DATE_MAX_EXPIRES : new Date(<number> expires * 1000 + Date.now());\n      case String:\n        return new Date(<string> expires);\n      default:\n        return <Date> expires;\n    }\n  }\n\n  /**\n   * Get all cookies in object format.\n   */\n  getAll(): { [key: string]: string } {\n    return this.cookieFactory.getAll();\n  }\n\n  /**\n   * Read a cookie. If the cookie doesn't exist a null value will be returned.\n   */\n  getItem(key: string): string | null {\n    return this.getAll()[key] || null;\n  }\n\n  /**\n   * Check whether a cookie exists in the current position.\n   */\n  hasItem(key: string): boolean {\n    return Object.prototype.hasOwnProperty.call(this.getAll(), key);\n  }\n\n  /**\n   * Return all cookie names.\n   */\n  keys(): string[] {\n    return Object.keys(this.getAll());\n  }\n\n  /**\n   * Return the cookie name at a index.\n   */\n  key(index: number): string | null {\n    return this.keys()[index] || null;\n  }\n\n  /**\n   * Add that cookie to the storage, or update that cookie's value if it already exists.\n   */\n  setItem(key: string, data?: string, options?: CookieOptions): void {\n    if (!key) {\n      return;\n    }\n\n    // Merge options\n    options = Object.assign({}, this.cookieOptions, options || {});\n\n    // Remove data\n    if (!data) {\n      options.expires = 'Thu, 01 Jan 1970 00:00:00 GMT';\n    }\n\n    // Convert expires to Date\n    if (options.expires) {\n      options.expires = CookieService.getExpiresDate(options.expires);\n    }\n\n    this.cookieFactory.save(key, data, options);\n  }\n\n  /**\n   * Delete a cookie.\n   */\n  removeItem(key: string, options?: CookieOptions): void {\n    return this.setItem(key, null, options);\n  }\n\n  /**\n   * Remove all cookie.\n   */\n  clear(options?: CookieOptions): void {\n    this.keys().forEach(key => {\n      this.removeItem(key, options);\n    });\n  }\n}\n","export interface CookieOptions {\n  /**\n   * The path from where the cookie will be readable.\n   */\n  path?: string;\n  /**\n   * The domain from where the cookie will be readable.\n   */\n  domain?: string;\n  /**\n   * The expiration :\n   *  - in seconds for the max-age\n   *  - Infinity for a never expiration\n   *  - Date in GMTString format\n   *  - Date object\n   *\n   *  If not specified the cookie will expire at the end of the session.\n   */\n  expires?: Date | string | number;\n  /**\n   * If true, the cookie will be transmitted only over secure protocol as https.\n   */\n  secure?: boolean;\n}\n\n/**\n * Convert cookies string to object\n * @param cookiesStr\n */\nexport function cookiesStrToObj(cookiesStr: string): { [key in string]: string } {\n  const cookies: { [key in string]: string } = {};\n  if (!cookiesStr) {\n    return cookies;\n  }\n\n  cookiesStr.split('; ').forEach(cookie => {\n    const cookieSplited: string[] = cookie.split('=');\n    cookies[decodeURIComponent(cookieSplited[0])] = decodeURIComponent(cookieSplited[1]);\n  });\n  return cookies;\n}\n","import {DOCUMENT} from '@angular/common';\nimport {Inject, Injectable} from '@angular/core';\nimport {CookieOptions, cookiesStrToObj} from '../cookie.model';\nimport {CookieFactory} from '../cookie.service';\n\n@Injectable()\nexport class BrowserCookieFactory implements CookieFactory {\n  private lastCookies = '';\n  private cookies: { [key in string]: string } = {};\n\n  constructor(@Inject(DOCUMENT) private document: any) {\n  }\n\n  getAll(): { [p: string]: string } {\n    const cookiesStr: string = this.document.cookie;\n    if (this.lastCookies !== cookiesStr) {\n      this.lastCookies = cookiesStr;\n      this.cookies = cookiesStrToObj(cookiesStr);\n    }\n    return this.cookies;\n  }\n\n  save(key: string, data: string, options: CookieOptions): void {\n    this.document.cookie = `${encodeURIComponent(key)}=${data ? encodeURIComponent(data) : ''}${\n      options.expires ? `; expires=${(<Date> options.expires).toUTCString()}` : ''\n      }${options.domain ? `; domain=${options.domain}` : ''}${options.path ? `; path=${options.path}` : ''}${\n      options.secure ? '; secure' : ''\n      }`;\n  }\n}\n","import {CookieOptions} from './cookie.model';\nimport {CookieService} from './cookie.service';\n\nexport interface CookieDecoratorData {\n  cookieService?: CookieService;\n}\n\nexport const COOKIE_DECORATOR_DATA: CookieDecoratorData = {};\n\n/**\n * Property Decorator to Get / Set cookie\n */\nexport function Cookie(name?: string, options?: CookieOptions): PropertyDecorator {\n  return function(target: any, key: string) {\n    let _value: any;\n\n    if (delete target[key]) {\n      const cookieName: string = name || key;\n\n      Object.defineProperty(target, key, {\n        get: function() {\n          if (COOKIE_DECORATOR_DATA.cookieService) {\n            const cookieValue: string = COOKIE_DECORATOR_DATA.cookieService.getItem(cookieName);\n            try {\n              return JSON.parse(cookieValue);\n            } catch (e) {\n              return cookieValue;\n            }\n          } else {\n            return _value;\n          }\n        },\n        set: function(value) {\n          if (COOKIE_DECORATOR_DATA.cookieService) {\n            COOKIE_DECORATOR_DATA.cookieService.setItem(\n              cookieName,\n              typeof value === 'string' ? value : JSON.stringify(value),\n              options\n            );\n          } else {\n            _value = value;\n          }\n        },\n        enumerable: true,\n        configurable: true\n      });\n    }\n  };\n}\n","import {DOCUMENT} from '@angular/common';\nimport {APP_INITIALIZER, ModuleWithProviders, NgModule} from '@angular/core';\nimport {BrowserCookieFactory} from './browser/index';\nimport {COOKIE_DECORATOR_DATA} from './cookie.decorator';\nimport {CookieOptions} from './cookie.model';\nimport {CookieFactory, CookieService} from './cookie.service';\nimport {COOKIE_OPTIONS} from './cookie.token';\n\nexport function setupCookieDecorator(cookieService: CookieService) {\n  COOKIE_DECORATOR_DATA.cookieService = cookieService;\n  return () => null;\n}\n\nexport function newCookieFactory(document: any) {\n  return new BrowserCookieFactory(document);\n}\n\n@NgModule()\nexport class CookieModule {\n  /**\n   * In root module to provide the CookieService & CookieOptions\n   */\n  static forRoot(cookieOptions?: CookieOptions): ModuleWithProviders<CookieModule> {\n    return {\n      ngModule: CookieModule,\n      providers: [\n        {\n          provide: COOKIE_OPTIONS,\n          useValue: cookieOptions\n        },\n        {\n          provide: CookieFactory,\n          useFactory: newCookieFactory,\n          deps: [DOCUMENT]\n        },\n        CookieService,\n        {\n          provide: APP_INITIALIZER,\n          useFactory: setupCookieDecorator,\n          deps: [CookieService],\n          multi: true\n        }\n      ]\n    };\n  }\n}\n","import {CookieOptions, cookiesStrToObj} from '../cookie.model';\nimport {CookieFactory} from '../cookie.service';\n\nexport class ServerCookieFactory implements CookieFactory {\n  private cookies: { [key in string]: string } = {};\n\n  constructor(request: any, private response: any) {\n    if (request && request.headers) {\n      this.cookies = cookiesStrToObj(request.headers.cookie);\n    }\n  }\n\n  getAll(): { [p: string]: string } {\n    return this.cookies;\n  }\n\n  save(key: string, data: string, options: CookieOptions): void {\n    if (!data) {\n      delete this.cookies[key];\n      this.response.clearCookie(key, options);\n    } else {\n      this.cookies[key] = data;\n      this.response.cookie(key, data, options);\n    }\n  }\n}\n","/*\n * Public API Surface of cookie\n */\n\nexport {CookieOptions} from './lib/cookie.model';\nexport {COOKIE_OPTIONS} from './lib/cookie.token';\nexport {CookieFactory, CookieService} from './lib/cookie.service';\nexport {CookieModule} from './lib/cookie.module';\nexport {BrowserCookieFactory} from './lib/browser/index';\nexport {ServerCookieFactory} from './lib/server/index';\nexport {Cookie} from './lib/cookie.decorator';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}