{"version":3,"file":"gorniv-ngx-universal.mjs","sources":["../../lib/src/transfer-http/transfer-http.service.ts","../../lib/src/transfer-http/transfer-http.module.ts","../../lib/src/cookie/utils.ts","../../lib/src/cookie/cookie-options-provider.ts","../../lib/src/cookie/cookie.service.ts","../../lib/src/cookie/tokens.ts","../../lib/src/cookie/cookie-backend.service.ts","../../lib/src/cookie/cookie.factory.ts","../../lib/src/cookie/cookie.module.ts","../../lib/src/link/link.service.ts","../../lib/src/link/link.module.ts","../../lib/src/gorniv-ngx-universal.ts"],"sourcesContent":["import { Injectable, Inject, PLATFORM_ID } from '@angular/core';\nimport { TransferState, StateKey, makeStateKey } from '@angular/platform-browser';\nimport { Observable, from } from 'rxjs';\nimport { tap } from 'rxjs/operators';\nimport { isPlatformBrowser, isPlatformServer } from '@angular/common';\nimport { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\n\n@Injectable()\nexport class TransferHttpService {\n  constructor(\n    protected transferState: TransferState,\n    private httpClient: HttpClient,\n    @Inject(PLATFORM_ID) private platformId: Object,\n  ) {\n  }\n\n  request<T>(\n    method: string,\n    uri: string | Request,\n    options?: {\n      body?: any;\n      headers?:\n        | HttpHeaders\n        | {\n        [header: string]: string | string[];\n      };\n      reportProgress?: boolean;\n      observe?: 'response';\n      params?:\n        | HttpParams\n        | {\n        [param: string]: string | string[];\n      };\n      responseType?: 'json';\n      withCredentials?: boolean;\n    },\n  ): Observable<T> {\n    return this.getData<T>(method, uri, options, (method: string, uri: string | Request, options: any) => {\n      return this.httpClient.request<T>(method, typeof uri === 'string' ? uri : uri.url, options);\n    });\n  }\n\n  /**\n   * Performs a request with `get` http method.\n   */\n  get<T>(\n    url: string,\n    options?: {\n      headers?:\n        | HttpHeaders\n        | {\n        [header: string]: string | string[];\n      };\n      observe?: 'response';\n      params?:\n        | HttpParams\n        | {\n        [param: string]: string | string[];\n      };\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n    },\n  ): Observable<T> {\n    return this.getData<T>('get', url, options, (_method: string, uri: string | Request, options: any) => {\n      return this.httpClient.get<T>(url, options);\n    });\n  }\n\n  /**\n   * Performs a request with `post` http method.\n   */\n  post<T>(\n    url: string,\n    body: any,\n    options?: {\n      headers?:\n        | HttpHeaders\n        | {\n        [header: string]: string | string[];\n      };\n      observe?: 'response';\n      params?:\n        | HttpParams\n        | {\n        [param: string]: string | string[];\n      };\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n    },\n  ): Observable<T> {\n    return this.getPostData<T>(\n      'post',\n      url,\n      body,\n      options,\n      (_method: string, uri: string | Request, body: any, options: any) => {\n        return this.httpClient.post<T>(url, body, options);\n      },\n    );\n  }\n\n  /**\n   * Performs a request with `put` http method.\n   */\n  put<T>(\n    url: string,\n    _body: any,\n    options?: {\n      headers?:\n        | HttpHeaders\n        | {\n        [header: string]: string | string[];\n      };\n      observe?: 'body';\n      params?:\n        | HttpParams\n        | {\n        [param: string]: string | string[];\n      };\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n    },\n  ): Observable<T> {\n    return this.getPostData<T>(\n      'put',\n      url,\n      _body,\n      options,\n      (_method: string, uri: string | Request, _body: any, options: any) => {\n        return this.httpClient.put<T>(url, _body, options);\n      },\n    );\n  }\n\n  /**\n   * Performs a request with `delete` http method.\n   */\n  delete<T>(\n    url: string,\n    options?: {\n      headers?:\n        | HttpHeaders\n        | {\n        [header: string]: string | string[];\n      };\n      observe?: 'response';\n      params?:\n        | HttpParams\n        | {\n        [param: string]: string | string[];\n      };\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n    },\n  ): Observable<T> {\n    return this.getData<T>('delete', url, options, (_method: string, uri: string | Request, options: any) => {\n      return this.httpClient.delete<T>(url, options);\n    });\n  }\n\n  /**\n   * Performs a request with `patch` http method.\n   */\n  patch<T>(\n    url: string,\n    body: any,\n    options?: {\n      headers?:\n        | HttpHeaders\n        | {\n        [header: string]: string | string[];\n      };\n      observe?: 'response';\n      params?:\n        | HttpParams\n        | {\n        [param: string]: string | string[];\n      };\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n    },\n  ): Observable<T> {\n    return this.getPostData<T>(\n      'patch',\n      url,\n      body,\n      options,\n      (_method: string, uri: string | Request, body: any, options: any): Observable<any> => {\n        return this.httpClient.patch<T>(url, body, options);\n      },\n    );\n  }\n\n  /**\n   * Performs a request with `head` http method.\n   */\n  head<T>(\n    url: string,\n    options?: {\n      headers?:\n        | HttpHeaders\n        | {\n        [header: string]: string | string[];\n      };\n      observe?: 'response';\n      params?:\n        | HttpParams\n        | {\n        [param: string]: string | string[];\n      };\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n    },\n  ): Observable<T> {\n    return this.getData<T>('head', url, options, (_method: string, uri: string | Request, options: any) => {\n      return this.httpClient.head<T>(url, options);\n    });\n  }\n\n  /**\n   * Performs a request with `options` http method.\n   */\n  options<T>(\n    url: string,\n    options?: {\n      headers?:\n        | HttpHeaders\n        | {\n        [header: string]: string | string[];\n      };\n      observe?: 'response';\n      params?:\n        | HttpParams\n        | {\n        [param: string]: string | string[];\n      };\n      reportProgress?: boolean;\n      responseType?: 'json';\n      withCredentials?: boolean;\n    },\n  ): Observable<T> {\n    return this.getData<T>(\n      'options',\n      url,\n      options,\n      (_method: string, uri: string | Request, options: any) => {\n        return this.httpClient.options<T>(url, options);\n      },\n    );\n  }\n\n  private getData<T>(\n    method: string,\n    uri: string | Request,\n    options: any,\n    callback: (method: string, uri: string | Request, options: any) => Observable<any>,\n  ): Observable<T> {\n    let url = uri;\n\n    if (typeof uri !== 'string') {\n      url = uri.url;\n    }\n\n    const tempKey = url + (options ? JSON.stringify(options) : '');\n    const key = makeStateKey<T>(tempKey);\n    try {\n      return this.resolveData<T>(key);\n    } catch (e) {\n      return callback(method, uri, options).pipe(\n        tap((data: T) => {\n          if (isPlatformBrowser(this.platformId)) {\n            // Client only code.\n            // nothing;\n          }\n          if (isPlatformServer(this.platformId)) {\n            this.setCache<T>(key, data);\n          }\n        }),\n      );\n    }\n  }\n\n  private getPostData<T>(\n    _method: string,\n    uri: string | Request,\n    body: any,\n    options: any,\n    callback: (method: string, uri: string | Request, body: any, options: any) => Observable<any>,\n  ): Observable<T> {\n    let url = uri;\n\n    if (typeof uri !== 'string') {\n      url = uri.url;\n    }\n\n    const tempKey =\n      url + (body ? JSON.stringify(body) : '') + (options ? JSON.stringify(options) : '');\n    const key = makeStateKey<T>(tempKey);\n\n    try {\n      return this.resolveData<T>(key);\n    } catch (e) {\n      return callback(_method, uri, body, options).pipe(\n        tap((data: T) => {\n          if (isPlatformBrowser(this.platformId)) {\n            // Client only code.\n            // nothing;\n          }\n          if (isPlatformServer(this.platformId)) {\n            this.setCache<T>(key, data);\n          }\n        }),\n      );\n    }\n  }\n\n  private resolveData<T>(key: StateKey<T>): Observable<T> {\n    const data = this.getFromCache<T>(key);\n\n    if (!data) {\n      throw new Error();\n    }\n\n    if (isPlatformBrowser(this.platformId)) {\n      // Client only code.\n      this.transferState.remove(key);\n    }\n    if (isPlatformServer(this.platformId)) {\n      // Server only code.\n    }\n\n    return from(Promise.resolve<T>(data));\n  }\n\n  private setCache<T>(key: StateKey<T>, data: T): void {\n    return this.transferState.set<T>(key, data);\n  }\n\n  private getFromCache<T>(key: StateKey<T>): T {\n    return this.transferState.get<T>(key, {} as T);\n  }\n}\n","import { NgModule } from '@angular/core';\n\nimport { TransferHttpService } from './transfer-http.service';\n\n@NgModule({\n  providers: [TransferHttpService],\n})\nexport class TransferHttpModule {}\n","import { CookieOptions } from './cookie-options.model';\n\nexport function isBlank(obj: any): boolean {\n  return obj === undefined || obj === null;\n}\n\nexport function isPresent(obj: any): boolean {\n  return obj !== undefined && obj !== null;\n}\n\nexport function isString(obj: any): obj is string {\n  return typeof obj === 'string';\n}\n\nexport function mergeOptions(oldOptions: CookieOptions, newOptions?: CookieOptions): CookieOptions {\n  if (!newOptions) {\n    return oldOptions;\n  }\n  return {\n    path: isPresent(newOptions.path) ? newOptions.path : oldOptions.path,\n    domain: isPresent(newOptions.domain) ? newOptions.domain : oldOptions.domain,\n    expires: isPresent(newOptions.expires) ? newOptions.expires : oldOptions.expires,\n    secure: isPresent(newOptions.secure) ? newOptions.secure : oldOptions.secure,\n    httpOnly: isPresent(newOptions.httpOnly) ? newOptions.httpOnly : oldOptions.httpOnly,\n    storeUnencoded: isPresent(newOptions.storeUnencoded) ? newOptions.storeUnencoded : oldOptions.storeUnencoded,\n  };\n}\n\nexport function safeDecodeURIComponent(str: string) {\n  try {\n    return decodeURIComponent(str);\n  } catch (e) {\n    return str;\n  }\n}\n\nexport function safeJsonParse(str: string) {\n  try {\n    return JSON.parse(str);\n  } catch (e) {\n    return str;\n  }\n}\n","import { Inject, Injectable, InjectionToken, Injector } from '@angular/core';\nimport { APP_BASE_HREF } from '@angular/common';\n\nimport { CookieOptions } from './cookie-options.model';\nimport { mergeOptions } from './utils';\n\nexport const COOKIE_OPTIONS = new InjectionToken<CookieOptions>('COOKIE_OPTIONS');\n\n@Injectable()\nexport class CookieOptionsProvider {\n\n  private defaultOptions: CookieOptions;\n  private _options: CookieOptions;\n\n  constructor(@Inject(COOKIE_OPTIONS) options: CookieOptions = {},\n              private _injector: Injector) {\n    this.defaultOptions = {\n      path: this._injector.get(APP_BASE_HREF, '/'),\n      domain: null,\n      expires: null,\n      secure: false,\n      httpOnly: false\n    };\n    this._options = mergeOptions(this.defaultOptions, options);\n  }\n\n  get options(): CookieOptions {\n    return this._options;\n  }\n}\n","import { Injectable } from '@angular/core';\n\nimport { CookieOptionsProvider } from './cookie-options-provider';\nimport { CookieOptions } from './cookie-options.model';\nimport { isBlank, isString, mergeOptions, safeDecodeURIComponent, safeJsonParse } from './utils';\n\ndeclare interface Document {\n  cookie: string;\n}\ndeclare const document: Document;\n\nexport interface ICookieService {\n  get(key: string): string;\n  getObject(key: string): Object;\n  getAll(): Object;\n  put(key: string, value: string, options?: CookieOptions): void;\n  putObject(key: string, value: Object, options?: CookieOptions): void;\n  remove(key: string, options?: CookieOptions): void;\n  removeAll(options?: CookieOptions): void;\n}\n\n@Injectable()\nexport class CookieService implements ICookieService {\n\n  protected options: CookieOptions;\n\n  protected get cookieString(): string {\n    return document.cookie || '';\n  }\n\n  protected set cookieString(val: string) {\n    document.cookie = val;\n  }\n\n  constructor(private _optionsProvider: CookieOptionsProvider) {\n    this.options = this._optionsProvider.options;\n  }\n\n  /**\n   * @name CookieService#get\n   *\n   * @description\n   * Returns the value of given cookie key.\n   *\n   * @param key Id to use for lookup.\n   * @returns Raw cookie value.\n   */\n  get(key: string): string {\n    return (<any>this._cookieReader())[key];\n  }\n\n  /**\n   * @name CookieService#getObject\n   *\n   * @description\n   * Returns the deserialized value of given cookie key.\n   *\n   * @param key Id to use for lookup.\n   * @returns Deserialized cookie value.\n   */\n  getObject(key: string): Object {\n    const value = this.get(key);\n    return value ? safeJsonParse(value) : value;\n  }\n\n  /**\n   * @name CookieService#getAll\n   *\n   * @description\n   * Returns a key value object with all the cookies.\n   *\n   * @returns All cookies\n   */\n  getAll(): Object {\n    return <any>this._cookieReader();\n  }\n\n  /**\n   * @name CookieService#put\n   *\n   * @description\n   * Sets a value for given cookie key.\n   *\n   * @param key Id for the `value`.\n   * @param value Raw value to be stored.\n   * @param options (Optional) Options object.\n   */\n  put(key: string, value: string, options?: CookieOptions) {\n    this._cookieWriter()(key, value, options);\n  }\n\n  /**\n   * @name CookieService#putObject\n   *\n   * @description\n   * Serializes and sets a value for given cookie key.\n   *\n   * @param key Id for the `value`.\n   * @param value Value to be stored.\n   * @param options (Optional) Options object.\n   */\n  putObject(key: string, value: Object, options?: CookieOptions) {\n    this.put(key, JSON.stringify(value), options);\n  }\n\n  /**\n   * @name CookieService#remove\n   *\n   * @description\n   * Remove given cookie.\n   *\n   * @param key Id of the key-value pair to delete.\n   * @param options (Optional) Options object.\n   */\n  remove(key: string, options?: CookieOptions): void {\n    this._cookieWriter()(key, undefined, options);\n  }\n\n  /**\n   * @name CookieService#removeAll\n   *\n   * @description\n   * Remove all cookies.\n   */\n  removeAll(options?: CookieOptions): void {\n    const cookies = this.getAll();\n    Object.keys(cookies).forEach(key => {\n      this.remove(key, options);\n    });\n  }\n\n  private _cookieReader(): Object {\n    let lastCookies = {};\n    let lastCookieString = '';\n    let cookieArray: string[], cookie: string, i: number, index: number, name: string;\n    const currentCookieString = this.cookieString;\n    if (currentCookieString !== lastCookieString) {\n      lastCookieString = currentCookieString;\n      cookieArray = lastCookieString.split('; ');\n      lastCookies = {};\n      for (i = 0; i < cookieArray.length; i++) {\n        cookie = cookieArray[i];\n        index = cookie.indexOf('=');\n        if (index > 0) {  // ignore nameless cookies\n          name = safeDecodeURIComponent(cookie.substring(0, index));\n          // the first value that is seen for a cookie is the most\n          // specific one.  values for the same cookie name that\n          // follow are for less specific paths.\n          if (isBlank((<any>lastCookies)[name])) {\n            (<any>lastCookies)[name] = safeDecodeURIComponent(cookie.substring(index + 1));\n          }\n        }\n      }\n    }\n    return lastCookies;\n  }\n\n  private _cookieWriter() {\n    const that = this;\n\n    return function (name: string, value: string | undefined, options?: CookieOptions) {\n      that.cookieString = that._buildCookieString(name, value, options);\n    };\n  }\n\n  private _buildCookieString(name: string, value: string | undefined, options?: CookieOptions): string {\n    const opts: CookieOptions = mergeOptions(this.options, options);\n    let expires: any = opts.expires;\n    if (isBlank(value)) {\n      expires = 'Thu, 01 Jan 1970 00:00:00 GMT';\n      value = '';\n    }\n    if (isString(expires)) {\n      expires = new Date(expires);\n    }\n    const cookieValue = opts.storeUnencoded ? value : encodeURIComponent(value || '');\n    let str = encodeURIComponent(name) + '=' + cookieValue;\n    str += opts.path ? ';path=' + opts.path : '';\n    str += opts.domain ? ';domain=' + opts.domain : '';\n    str += expires ? ';expires=' + expires.toUTCString() : '';\n    str += opts.secure ? ';secure' : '';\n    str += opts.httpOnly ? '; HttpOnly' : '';\n\n    // per http://www.ietf.org/rfc/rfc2109.txt browser must allow at minimum:\n    // - 300 cookies\n    // - 20 cookies per unique domain\n    // - 4096 bytes per cookie\n    const cookieLength = str.length + 1;\n    if (cookieLength > 4096) {\n      console.log(`Cookie \\'${name}\\' possibly not set or overflowed because it was too large (${cookieLength} > 4096 bytes)!`);\n    }\n    return str;\n  }\n}\n","export class NgxRequest {\n\n}\n\nexport class NgxResponse {\n\n}\n","import { Inject, Injectable } from '@angular/core';\n\nimport { CookieService } from './cookie.service';\nimport { CookieOptionsProvider } from './cookie-options-provider';\nimport { CookieOptions } from './cookie-options.model';\nimport { NgxRequest, NgxResponse } from './tokens';\n\n@Injectable()\nexport class CookieBackendService extends CookieService {\n  constructor(\n    @Inject(NgxRequest) private request: any,\n    @Inject(NgxResponse) private response: any,\n    _optionsProvider: CookieOptionsProvider,\n  ) {\n    super(_optionsProvider);\n  }\n\n  protected override get cookieString(): string {\n    return this.request.cookie || this.request.headers['cookie'] || '';\n  }\n\n  protected override set cookieString(val: string) {\n    this.request.cookie = val;\n    this.request.headers.cookie = val;\n  }\n\n  overrideput(key: string, value: string, options: CookieOptions = {}): void {\n    let findKey = false;\n    let newCookie = Object.keys(this.getAll())\n      // tslint:disable-next-line: no-shadowed-variable\n      .map((keyItem) => {\n        if (keyItem === key) {\n          findKey = true;\n          return `${key}=${value}`;\n        }\n        return `${keyItem}=${this.get(keyItem)}`;\n      })\n      .join('; ');\n    if (!findKey) {\n      newCookie += `; ${key}=${value}`;\n    }\n    this.cookieString = newCookie;\n    this.response.cookie(key, value);\n  }\n\n  override remove(key: string, options?: CookieOptions): void {\n    const newCookie = Object.keys(this.getAll())\n      // tslint:disable-next-line: no-shadowed-variable\n      .map((keyItem) => {\n        if (keyItem === key) {\n          return '';\n        }\n        return `${keyItem}=${this.get(keyItem)}`;\n      })\n      .join('; ');\n\n    this.cookieString = newCookie;\n    this.response.clearCookie(key);\n  }\n}\n","import { CookieService } from './cookie.service';\nimport { CookieOptionsProvider } from './cookie-options-provider';\n\nexport function cookieServiceFactory(cookieOptionsProvider: CookieOptionsProvider): CookieService {\n  return new CookieService(cookieOptionsProvider);\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\n\nimport { CookieOptionsProvider, COOKIE_OPTIONS } from './cookie-options-provider';\nimport { CookieService } from './cookie.service';\nimport { CookieOptions } from './cookie-options.model';\nimport { cookieServiceFactory } from './cookie.factory';\n\n@NgModule({\n  providers: [CookieOptionsProvider]\n})\nexport class CookieModule {\n  /**\n   * Use this method in your root module to provide the CookieService\n   */\n  static forRoot(options: CookieOptions = {}): ModuleWithProviders<CookieModule> {\n    return {\n      ngModule: CookieModule,\n      providers: [\n        {provide: COOKIE_OPTIONS, useValue: options},\n        {provide: CookieService, useFactory: cookieServiceFactory, deps: [CookieOptionsProvider]}\n      ]\n    };\n  }\n\n  /**\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 {\n      ngModule: CookieModule,\n      providers: [\n        {provide: COOKIE_OPTIONS, useValue: options},\n        {provide: CookieService, useFactory: cookieServiceFactory, deps: [CookieOptionsProvider]}\n      ]\n    };\n  }\n}\n","// https://github.com/angular/angular/issues/15776#issuecomment-291862953\n\nimport { Injectable, Optional, RendererFactory2, ViewEncapsulation, Inject } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\n@Injectable({\n  providedIn: 'root'\n})\n/*\n * -- LinkService --        [Temporary]\n * @MarkPieszak\n *\n * Similar to Meta service but made to handle <link> creation for SEO purposes\n * -- NOTE: Soon there will be an overall DocumentService within Angular that handles Meta/Link everything\n */\n\n@Injectable()\nexport class LinkService {\n\n    constructor(\n        private rendererFactory: RendererFactory2,\n        @Inject(DOCUMENT) private document: Document\n    ) {\n    }\n\n    /**\n     * Inject the State into the bottom of the <head>\n     */\n    addTag(tag: LinkDefinition, forceCreation?: boolean) {\n\n        try {\n            const renderer = this.rendererFactory.createRenderer(this.document, {\n                id: '-1',\n                encapsulation: ViewEncapsulation.None,\n                styles: [],\n                data: {}\n            });\n\n            const link = renderer.createElement('link');\n            const head = this.document.head;\n            const selector = this._parseSelector(tag);\n\n            if (head === null) {\n                throw new Error('<head> not found within DOCUMENT.');\n            }\n\n            Object.keys(tag).forEach((prop: string) => {\n                return renderer.setAttribute(link, prop, tag[prop]);\n            });\n\n            // [TODO]: get them to update the existing one (if it exists) ?\n            renderer.appendChild(head, link);\n\n        } catch (e) {\n            console.error('Error within linkService : ', e);\n        }\n    }\n\n    private _parseSelector(tag: LinkDefinition): string {\n        // Possibly re-work this\n        const attr: string = tag.rel ? 'rel' : 'hreflang';\n        return `${attr}=\"${tag[attr]}\"`;\n    }\n}\n\nexport declare type LinkDefinition = {\n    charset?: string;\n    crossorigin?: string;\n    href?: string;\n    hreflang?: string;\n    media?: string;\n    rel?: string;\n    rev?: string;\n    sizes?: string;\n    target?: string;\n    type?: string;\n} & {\n        [prop: string]: string;\n    };\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { LinkService } from './link.service';\n\n@NgModule({\n  imports: [\n    CommonModule\n  ],\n  providers: [LinkService]\n})\nexport class LinkModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.CookieOptionsProvider"],"mappings":"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"}