{"version":3,"file":"ngx-cookie-backend.mjs","sources":["../../../projects/ngx-cookie-backend/src/lib/cookie-backend-writer.service.ts","../../../projects/ngx-cookie-backend/src/lib/cookie-backend.module.ts","../../../projects/ngx-cookie-backend/src/public-api.ts","../../../projects/ngx-cookie-backend/src/ngx-cookie-backend.ts"],"sourcesContent":["import { Inject, Injectable, Optional } from '@angular/core';\nimport { REQUEST, RESPONSE } from '@nguniversal/express-engine/tokens';\nimport { CookieOptions as ExpressCookieOptions, Request, Response } from 'express';\nimport { CookieOptions, ICookieWriterService, isEmpty, isString } from 'ngx-cookie';\n\nconst COOKIE_SEPARATOR = ';';\n\n@Injectable()\nexport class CookieBackendWriterService implements ICookieWriterService {\n  constructor(@Optional() @Inject(REQUEST) private request: Request,\n              @Optional() @Inject(RESPONSE) private response: Response) {}\n\n  readAllAsString(): string {\n    const requestHeadersCookies = this.request?.headers?.cookie;\n    const cookiesFromRequest: string[] = requestHeadersCookies?.split(COOKIE_SEPARATOR) ?? [];\n    const addedCookies: string[] = this.getNormalizedResponseCookies();\n    const allCookies = this.latestUniqueCookieValues(cookiesFromRequest, addedCookies);\n    return allCookies.join(COOKIE_SEPARATOR);\n  }\n\n  write(name: string, value: string | undefined, options?: CookieOptions): void {\n    this.response?.cookie(name, value, this.getOptions(options));\n  }\n\n  private getOptions(options?: CookieOptions): ExpressCookieOptions {\n    if (isEmpty(options)) {\n      return {};\n    }\n    const opts = {...options};\n    if (!isEmpty(options.expires)) {\n      opts.expires = this.getExpires(options.expires);\n    }\n    return opts as ExpressCookieOptions;\n  }\n\n  private getExpires(expires?: string | Date): Date | undefined {\n    return isString(expires) ? new Date(expires as string) : (expires as Date);\n  }\n\n  private getNormalizedResponseCookies(): string[] {\n    const responseCookies = (this.response?.getHeader('Set-Cookie') as string | string[]) ?? '';\n    const addedCookies: string[] = Array.isArray(responseCookies) ? responseCookies : [responseCookies];\n    return addedCookies.flatMap(cookieEntry => cookieEntry.split(COOKIE_SEPARATOR));\n  }\n\n  private latestUniqueCookieValues(oldCookies: string[], newerCookies: string[]): string[] {\n    const cookiesMap = new Map<string, string>();\n    const oldAndNewCookies: string[] = [...oldCookies, ...newerCookies];\n    oldAndNewCookies\n      .filter(value => !isEmpty(value))\n      .map(cookie => cookie.split('='))\n      .forEach(([key, value]) => cookiesMap.set(key.trim(), value));\n    const result: string[] = [];\n    cookiesMap.forEach((value, key) => result.push(`${key}=${value}`));\n    return result;\n  }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { COOKIE_OPTIONS, COOKIE_WRITER, CookieModule, CookieOptions, CookieOptionsProvider } from 'ngx-cookie';\n\nimport { CookieBackendWriterService } from './cookie-backend-writer.service';\n\n\n@NgModule({\n  imports: [CookieModule],\n  providers: [CookieOptionsProvider]\n})\nexport class CookieBackendModule {\n\n  /**\n   * Use this method in your root module to provide the CookieService\n   */\n  static withOptions(options: CookieOptions = {}): ModuleWithProviders<CookieModule> {\n    return {\n      ngModule: CookieModule,\n      providers: [\n        {provide: COOKIE_OPTIONS, useValue: options},\n        {provide: COOKIE_WRITER, useClass: CookieBackendWriterService}\n      ]\n    };\n  }\n\n  /**\n   * @deprecated use `CookieBackendModule.withOptions()` instead\n   * Use this method in your root module to provide the CookieService\n   */\n  static forRoot(options: CookieOptions = {}): ModuleWithProviders<CookieModule> {\n    return this.withOptions(options);\n  }\n\n  /**\n   * @deprecated use `CookieBackendModule.withOptions()` instead\n   * Use this method in your other (non root) modules to import the directive/pipe\n   */\n  static forChild(options: CookieOptions = {}): ModuleWithProviders<CookieModule> {\n    return this.withOptions(options);\n  }\n\n}\n","/*\n * Public API Surface of ngx-cookie-backend\n */\n\nexport * from './lib/cookie-backend-writer.service';\nexport * from './lib/cookie-backend.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;AAKA,MAAM,gBAAgB,GAAG,GAAG,CAAC;MAGhB,0BAA0B,CAAA;IACrC,WAAiD,CAAA,OAAgB,EACf,QAAkB,EAAA;AADnB,QAAA,IAAO,CAAA,OAAA,GAAP,OAAO,CAAS;AACf,QAAA,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAU;KAAI;IAExE,eAAe,GAAA;;QACb,MAAM,qBAAqB,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,CAAC;AAC5D,QAAA,MAAM,kBAAkB,GAAa,CAAA,EAAA,GAAA,qBAAqB,aAArB,qBAAqB,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAArB,qBAAqB,CAAE,KAAK,CAAC,gBAAgB,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,CAAC;AAC1F,QAAA,MAAM,YAAY,GAAa,IAAI,CAAC,4BAA4B,EAAE,CAAC;QACnE,MAAM,UAAU,GAAG,IAAI,CAAC,wBAAwB,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC;AACnF,QAAA,OAAO,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KAC1C;AAED,IAAA,KAAK,CAAC,IAAY,EAAE,KAAyB,EAAE,OAAuB,EAAA;;AACpE,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;KAC9D;AAEO,IAAA,UAAU,CAAC,OAAuB,EAAA;AACxC,QAAA,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;AACpB,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;AACD,QAAA,MAAM,IAAI,GAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAO,OAAO,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;YAC7B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACjD,SAAA;AACD,QAAA,OAAO,IAA4B,CAAC;KACrC;AAEO,IAAA,UAAU,CAAC,OAAuB,EAAA;AACxC,QAAA,OAAO,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,OAAiB,CAAC,GAAI,OAAgB,CAAC;KAC5E;IAEO,4BAA4B,GAAA;;AAClC,QAAA,MAAM,eAAe,GAAI,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAS,CAAC,YAAY,CAAuB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,CAAC;AAC5F,QAAA,MAAM,YAAY,GAAa,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,eAAe,GAAG,CAAC,eAAe,CAAC,CAAC;AACpG,QAAA,OAAO,YAAY,CAAC,OAAO,CAAC,WAAW,IAAI,WAAW,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;KACjF;IAEO,wBAAwB,CAAC,UAAoB,EAAE,YAAsB,EAAA;AAC3E,QAAA,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC7C,MAAM,gBAAgB,GAAa,CAAC,GAAG,UAAU,EAAE,GAAG,YAAY,CAAC,CAAC;QACpE,gBAAgB;aACb,MAAM,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;aAChC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;aAChC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;QAChE,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK,MAAM,CAAC,IAAI,CAAC,CAAG,EAAA,GAAG,IAAI,KAAK,CAAA,CAAE,CAAC,CAAC,CAAC;AACnE,QAAA,OAAO,MAAM,CAAC;KACf;;uHA/CU,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EACL,OAAO,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EACP,QAAQ,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;2HAF7B,0BAA0B,EAAA,CAAA,CAAA;2FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBADtC,UAAU;;;8BAEI,QAAQ;;8BAAI,MAAM;+BAAC,OAAO,CAAA;;8BAC1B,QAAQ;;8BAAI,MAAM;+BAAC,QAAQ,CAAA;;;;MCA7B,mBAAmB,CAAA;AAE9B;;AAEG;AACH,IAAA,OAAO,WAAW,CAAC,OAAA,GAAyB,EAAE,EAAA;QAC5C,OAAO;AACL,YAAA,QAAQ,EAAE,YAAY;AACtB,YAAA,SAAS,EAAE;AACT,gBAAA,EAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAC;AAC5C,gBAAA,EAAC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,0BAA0B,EAAC;AAC/D,aAAA;SACF,CAAC;KACH;AAED;;;AAGG;AACH,IAAA,OAAO,OAAO,CAAC,OAAA,GAAyB,EAAE,EAAA;AACxC,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;KAClC;AAED;;;AAGG;AACH,IAAA,OAAO,QAAQ,CAAC,OAAA,GAAyB,EAAE,EAAA;AACzC,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;KAClC;;gHA7BU,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAnB,mBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,YAHpB,YAAY,CAAA,EAAA,CAAA,CAAA;AAGX,mBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,EAFnB,SAAA,EAAA,CAAC,qBAAqB,CAAC,YADxB,YAAY,CAAA,EAAA,CAAA,CAAA;2FAGX,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAJ/B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,SAAS,EAAE,CAAC,qBAAqB,CAAC;iBACnC,CAAA;;;ACTD;;AAEG;;ACFH;;AAEG;;;;"}