@akanass/ng-universal-transfer-http
Version:
TransferHttpCacheModule installs a Http interceptor that avoids duplicate HttpClient requests on the client
2 lines • 10.7 kB
JavaScript
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("@angular/core"),require("@angular/common/http"),require("@angular/platform-browser"),require("@angular/common"),require("create-hash"),require("flatted/esm"),require("rxjs"),require("rxjs/operators")):"function"==typeof define&&define.amd?define("@akanass/ng-universal-transfer-http",["exports","@angular/core","@angular/common/http","@angular/platform-browser","@angular/common","create-hash","flatted/esm","rxjs","rxjs/operators"],e):e(((t=t||self).akanass=t.akanass||{},t.akanass["ng-universal-transfer-http"]={}),t.ng.core,t.ng.common.http,t.ng.platformBrowser,t.ng.common,t.createHash,t.esm,t.rxjs,t.rxjs.operators)}(this,function(t,e,r,n,a,i,o,u,f){"use strict";i=i&&i.hasOwnProperty("default")?i["default"]:i;var s=new e.InjectionToken("ng_universal_transfer_http_config"),p=function(){function t(t){this._transferHttpCacheConfig=t,this._config={prodMode:!0},null!==this._transferHttpCacheConfig&&Object.assign(this._config,this._transferHttpCacheConfig)}return Object.defineProperty(t.prototype,"config",{get:function(){return this._config},enumerable:!0,configurable:!0}),t.decorators=[{type:e.Injectable}],t.ctorParameters=function(){return[{type:undefined,decorators:[{type:e.Optional},{type:e.Inject,args:[s]}]}]},t}(),c=function(){function t(t,e,r,a){this._appRef=t,this._transferState=e,this._platformId=r,this._configService=a,this._id=0,this._serverStateDataStoreKey=n.makeStateKey("server_state_data"),this._lastIdStoreKey=n.makeStateKey("server_state_last_id"),this._isCacheActivatedStoreKey=n.makeStateKey("is_cache_activated"),this._initCacheProcess()}return t.prototype._initCacheProcess=function(){var t=this;u.of(u.of(a.isPlatformServer(this._platformId))).pipe(f.flatMap(function(e){return u.merge(e.pipe(f.filter(function(t){return!!t}),f.tap(function(e){return t._isCacheActivated=e}),f.tap(function(e){return t._transferState.set(t._isCacheActivatedStoreKey,e)})),e.pipe(f.filter(function(t){return!t}),f.tap(function(e){return t._transferState.hasKey(t._isCacheActivatedStoreKey)?t._isCacheActivated=t._transferState.get(t._isCacheActivatedStoreKey,!0):t._isCacheActivated=e})))}),f.flatMap(function(){return u.merge(u.of(t._configService.config.prodMode).pipe(f.filter(function(t){return!t}),f.tap(function(){return console.log("TransferHttpCacheModule is in the development mode. Enable the production mode with Server Side Rendering.")})),t._appRef.isStable.pipe(f.filter(function(t){return!!t}))).pipe(f.first())})).subscribe(function(){return t._isCacheActivated=!1})},t.prototype.intercept=function(t,e){var r=this;return u.of(u.of(this._isCacheActivated)).pipe(f.flatMap(function(n){return u.merge(n.pipe(f.filter(function(t){return!t}),f.flatMap(function(){return e.handle(t).pipe(f.tap(function(){return r._cleanServerState()}))})),n.pipe(f.filter(function(t){return!!t}),f.flatMap(function(){return r._transferStateProcess(t,e)})))}))},t.prototype._cleanServerState=function(){var t=this;u.merge(this._getLastId(!1).pipe(f.tap(function(){return t._transferState.remove(t._lastIdStoreKey)})),this._getServerStateData(!1).pipe(f.tap(function(e){return e.forEach(function(e){return t._transferState.remove(n.makeStateKey(t._createHash(e.reqKey+"_"+e.id)))})}),f.tap(function(){return t._transferState.remove(t._serverStateDataStoreKey)})),u.of(u.of(this._transferState.hasKey(this._isCacheActivatedStoreKey))).pipe(f.flatMap(function(e){return e.pipe(f.filter(function(t){return!!t}),f.tap(function(){return t._transferState.remove(t._isCacheActivatedStoreKey)}))}))).subscribe(function(){return undefined},function(t){throw t})},t.prototype._transferStateProcess=function(t,e){var r=this;return this._createKey(t).pipe(f.flatMap(function(n){return u.of(u.of(r._transferState.hasKey(n))).pipe(f.flatMap(function(a){return u.merge(r._hasKeyProcess(a,n),r._hasNotKeyProcess(t,e,a,n))}))}))},t.prototype._createKey=function(t){var e=this;return this._id++,u.of(u.of(a.isPlatformServer(this._platformId))).pipe(f.flatMap(function(r){return u.merge(r.pipe(f.filter(function(t){return!!t}),f.flatMap(function(){return e._serverKey(t)})),r.pipe(f.filter(function(t){return!t}),f.flatMap(function(){return e._clientKey(t)})))}))},t.prototype._clientKey=function(t){var e=this;return this._requestFormatted(t).pipe(f.map(function(t){return e._createHash(o.stringify(t))}),f.flatMap(function(t){return e._getServerStateData().pipe(f.flatMap(function(t){return u.from(t)}),f.filter(function(e){return e.reqKey===t}),f.defaultIfEmpty(undefined),f.flatMap(function(t){return t?u.of(t):u.throwError(new Error("Request missing in server state data"))}),f.flatMap(function(r){return e._getLastId().pipe(f.flatMap(function(t){return!t||e._id>t?u.throwError(new Error("Wrong id for server state data")):u.of(e._id)}),f.map(function(t){return t===r.id?t:r.id}),f.map(function(r){return e._createHash(t+"_"+r)}),f.map(function(t){return n.makeStateKey(t)}))}))}))},t.prototype._getLastId=function(t){var e=this;return void 0===t&&(t=!0),u.of(this._lastIdStoreKey).pipe(f.flatMap(function(r){return u.of(u.of(e._transferState.hasKey(r))).pipe(f.flatMap(function(n){return u.merge(n.pipe(f.filter(function(t){return!t}),f.flatMap(function(){return u.of(t).pipe(f.filter(function(t){return!!t}),f.flatMap(function(){return u.throwError(new Error("Missing server state last id"))}))})),n.pipe(f.filter(function(t){return!!t}),f.map(function(){return e._transferState.get(r,0)})))}))}))},t.prototype._getServerStateData=function(t){var e=this;return void 0===t&&(t=!0),u.of(this._serverStateDataStoreKey).pipe(f.flatMap(function(r){return u.of(u.of(e._transferState.hasKey(r))).pipe(f.flatMap(function(n){return u.merge(n.pipe(f.filter(function(t){return!t}),f.flatMap(function(){return u.of(t).pipe(f.filter(function(t){return!!t}),f.flatMap(function(){return u.throwError(new Error("Missing server state data"))}))})),n.pipe(f.filter(function(t){return!!t}),f.map(function(){return e._transferState.get(r,[])})))}))}))},t.prototype._serverKey=function(t){var e=this;return this._requestFormatted(t).pipe(f.map(function(t){return e._createHash(o.stringify(t))}),f.tap(function(t){return e._storeServerStateData(t)}),f.map(function(t){return e._createHash(t+"_"+e._id)}),f.map(function(t){return n.makeStateKey(t)}))},t.prototype._storeServerStateData=function(t){var e=this;u.of(this._serverStateDataStoreKey).pipe(f.flatMap(function(r){return u.of(u.of(e._transferState.hasKey(r))).pipe(f.flatMap(function(n){return u.merge(n.pipe(f.filter(function(t){return!t}),f.map(function(){return[]})),n.pipe(f.filter(function(t){return!!t}),f.map(function(){return e._transferState.get(r,[])}),f.flatMap(function(e){return e.find(function(e){return e.reqKey===t})?u.throwError(new Error("Request already stored in server state data")):u.of(e)})))}),f.tap(function(){return e._transferState.set(e._lastIdStoreKey,e._id)}))})).subscribe(function(r){return e._transferState.set(e._serverStateDataStoreKey,r.concat({id:e._id,reqKey:t}))},function(t){throw t})},t.prototype._hasKeyProcess=function(t,e){var n=this;return t.pipe(f.filter(function(t){return!!t}),f.map(function(){return u.of(n._transferState.get(e,{}))}),f.flatMap(function(t){return u.merge(t.pipe(f.filter(function(t){return t.status<400}),f.map(function(t){return new r.HttpResponse({body:t.body,headers:new r.HttpHeaders(t.headers),status:t.status,statusText:t.statusText,url:t.url})})),t.pipe(f.filter(function(t){return t.status>=400}),f.flatMap(function(t){return u.throwError(new r.HttpErrorResponse({error:t.error,headers:new r.HttpHeaders(t.headers),status:t.status,statusText:t.statusText,url:t.url}))})))}))},t.prototype._hasNotKeyProcess=function(t,e,n,a){var i=this;return n.pipe(f.filter(function(t){return!t}),f.flatMap(function(){return e.handle(t).pipe(f.tap(function(t){return u.of(t).pipe(f.filter(function(t){return t instanceof r.HttpResponse})).subscribe(function(t){return i._transferState.set(a,{body:t.body,headers:i._getHeadersMap(t.headers),status:t.status,statusText:t.statusText,url:t.url})})},function(t){return u.of(t).pipe(f.filter(function(t){return t instanceof r.HttpErrorResponse})).subscribe(function(t){return i._transferState.set(a,{error:t.error,headers:i._getHeadersMap(t.headers),status:t.status,statusText:t.statusText,url:t.url})})}))}))},t.prototype._getHeadersMap=function(t){return t.keys().reduce(function(e,r){var n;return Object.assign(e,((n={})[r]=t.getAll(r),n))},{})},t.prototype._createHash=function(t){return i("sha256").update(t).digest("hex")},t.prototype._replaceWithHeader=function(t,e){var r=this;return u.of(u.of(this._getHeadersMap(t.headers)[e])).pipe(f.flatMap(function(n){return u.merge(n.pipe(f.filter(function(t){return!!t&&!!t.length}),f.map(function(t){return u.of(t[t.length-1])}),f.flatMap(function(n){return u.merge(n.pipe(f.filter(function(t){return!!t}),f.flatMap(function(e){return u.merge(r._formatUrlWithHeaderValue(t.url,e),r._formatUrlWithHeaderValue(t.urlWithParams,e)).pipe(f.toArray(),f.map(function(e){return Object.assign({},t,{url:e[0],urlWithParams:e[1]})}))})),n.pipe(f.filter(function(t){return!t}),f.flatMap(function(){return u.throwError(new Error("Missing header '"+e+"' value inside request to generate state key"))})))})),n.pipe(f.filter(function(t){return!t||!t.length}),f.flatMap(function(){return u.throwError(new Error("Missing header '"+e+"' value inside request to generate state key"))})))}))},t.prototype._formatUrlWithHeaderValue=function(t,e){return u.of(t).pipe(f.map(function(t){return t.split("://")[1].split("/")}),f.map(function(t){return t.map(function(t,r){return 0===r?e:t})}),f.map(function(t){return t.join("/")}))},t.prototype._requestFormatted=function(t){var e=this;return u.of(u.of(this._configService.config.headerNameToOverrideUrlInKeyCachingGeneration)).pipe(f.flatMap(function(r){return u.merge(r.pipe(f.filter(function(t){return!!t}),f.flatMap(function(r){return e._replaceWithHeader(t,r)})),r.pipe(f.filter(function(t){return!t}),f.map(function(){return t})))}))},t.decorators=[{type:e.Injectable}],t.ctorParameters=function(){return[{type:e.ApplicationRef},{type:n.TransferState},{type:undefined,decorators:[{type:e.Inject,args:[e.PLATFORM_ID]}]},{type:p}]},t}(),l=function(){function t(){}return t.withConfig=function(e){return{ngModule:t,providers:[{provide:s,useValue:e}]}},t.decorators=[{type:e.NgModule,args:[{imports:[n.BrowserTransferStateModule],providers:[p,{provide:r.HTTP_INTERCEPTORS,useClass:c,multi:!0}]}]}],t}();t.TransferHttpCacheModule=l,t.ɵa=p,t.ɵb=s,t.ɵc=c,Object.defineProperty(t,"__esModule",{value:!0})});
//# sourceMappingURL=akanass-ng-universal-transfer-http.umd.min.js.map