UNPKG

@gorniv/ngx-universal

Version:
1 lines 39.9 kB
{"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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"}