@graphql-box/cache-manager 2.0.4 → 2.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- import"core-js/modules/es.object.keys.js";import"core-js/modules/es.symbol.js";import"core-js/modules/es.object.get-own-property-descriptors.js";import e from"@babel/runtime/helpers/toConsumableArray";import t from"@babel/runtime/helpers/objectWithoutProperties";import a from"@babel/runtime/helpers/asyncToGenerator";import r from"@babel/runtime/helpers/classCallCheck";import n from"@babel/runtime/helpers/createClass";import i from"@babel/runtime/helpers/defineProperty";import s from"@babel/runtime/helpers/applyDecoratedDescriptor";import c from"lodash/unset";import u from"lodash/set";import o from"lodash/isUndefined";import h from"lodash/isPlainObject";import p from"lodash/isObjectLike";import l from"lodash/isNumber";import d from"lodash/isArray";import y from"lodash/get";import f from"lodash/cloneDeep";import m from"@babel/runtime/regenerator";import"core-js/modules/es.array.iterator.js";import"core-js/modules/es.map.js";import"core-js/modules/es.object.to-string.js";import"core-js/modules/es.string.iterator.js";import"core-js/modules/web.dom-collections.iterator.js";import"core-js/modules/es.promise.js";import"core-js/modules/web.dom-collections.for-each.js";import"core-js/modules/es.array.map.js";import"core-js/modules/es.array.concat.js";import"core-js/modules/es.array.filter.js";import"core-js/modules/es.array.join.js";import"core-js/modules/es.object.get-own-property-descriptor.js";import{QUERY_RESPONSES as v,TYPE_NAME_KEY as _,DATA_ENTITIES as b,REQUEST_FIELD_PATHS as k,QUERY as C}from"@graphql-box/core";import{hashRequest as g,rehydrateCacheMetadata as D,hasChildFields as P,iterateChildFields as x,getOperationDefinitions as F,getChildFields as w,getName as q,deleteChildFields as E,getInlineFragments as j,deleteInlineFragments as R,mergeObjects as M,dehydrateCacheMetadata as O,getArguments as N,getDirectives as K,getAlias as T}from"@graphql-box/helpers";import A from"cacheability";import{print as I}from"graphql";var Q,z,S,U,L="cache_entry_added",H="cache_entry_queried",V="partial_query_compiled";function J(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function G(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?J(Object(a),!0).forEach((function(t){i(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):J(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}var W=(Q=function(e,r,n){var i,s=n.value;s&&(n.value=(i=a(m.mark((function e(){var r,n,i,c=this,u=arguments;return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:for(r=u.length,n=new Array(r),i=0;i<r;i++)n[i]=u[i];return e.prev=1,e.abrupt("return",new Promise(function(){var e=a(m.mark((function e(a){var r,i,u,o,h,p,l;return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=n[3],i=r.debugManager,u=t(r,["debugManager"]),i){e.next=8;break}return e.t0=a,e.next=5,s.apply(c,n);case 5:return e.t1=e.sent,(0,e.t0)(e.t1),e.abrupt("return");case 8:return o=i.now(),e.next=11,s.apply(c,n);case 11:h=e.sent,p=i.now(),l=p-o,a(h),i.emit("cache_entry_queried",{cacheType:n[0],context:u,hash:n[1],options:n[2],result:h,stats:{duration:l,endTime:p,startTime:o}});case 16:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()));case 5:return e.prev=5,e.t0=e.catch(1),e.abrupt("return",Promise.reject(e.t0));case 8:case"end":return e.stop()}}),e,null,[[1,5]])}))),function(){return i.apply(this,arguments)}))},z=function(e,r,n){var i,s=n.value;s&&(n.value=(i=a(m.mark((function e(){var r,n,i,c=this,u=arguments;return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:for(r=u.length,n=new Array(r),i=0;i<r;i++)n[i]=u[i];return e.abrupt("return",new Promise(function(){var e=a(m.mark((function e(a){var r,i,u,o,h,p;return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=n[5],i=r.debugManager,u=t(r,["debugManager"]),i){e.next=6;break}return e.next=4,s.apply(c,n);case 4:return a(),e.abrupt("return");case 6:return o=i.now(),e.next=9,s.apply(c,n);case 9:h=i.now(),p=h-o,a(),i.emit("cache_entry_added",{cachemapOptions:n[3],cacheType:n[0],context:u,hash:n[1],options:n[4],stats:{duration:p,endTime:h,startTime:o},value:n[2]});case 13:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()));case 2:case"end":return e.stop()}}),e)}))),function(){return i.apply(this,arguments)}))},S=function(e,r,n){var i,s=n.value;s&&(n.value=(i=a(m.mark((function e(){var r,n,i,c=this,u=arguments;return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:for(r=u.length,n=new Array(r),i=0;i<r;i++)n[i]=u[i];return e.abrupt("return",new Promise(function(){var e=a(m.mark((function e(a){var r,i,u,o,h,p;return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=n[3],i=r.debugManager,u=t(r,["debugManager"]),i){e.next=6;break}return e.next=4,s.apply(c,n);case 4:return a(),e.abrupt("return");case 6:return o=i.now(),e.next=9,s.apply(c,n);case 9:h=i.now(),p=h-o,a(),i.emit("partial_query_compiled",{context:u,hash:n[0],options:n[2],partialQueryResponse:n[1],stats:{duration:p,endTime:h,startTime:o}});case 13:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()));case 2:case"end":return e.stop()}}),e)}))),function(){return i.apply(this,arguments)}))},s((U=function(){function s(e){r(this,s),i(this,"_cache",void 0),i(this,"_cascadeCacheControl",void 0),i(this,"_fallbackOperationCacheability",void 0),i(this,"_partialQueryResponses",new Map),i(this,"_typeCacheDirectives",void 0),i(this,"_typeIDKey",void 0);var t=e.cache,a=e.cascadeCacheControl,n=e.fallbackOperationCacheability,c=e.typeCacheDirectives,u=e.typeIDKey;this._cache=t,this._cascadeCacheControl=a||!1,this._fallbackOperationCacheability=n||"noCache",this._typeCacheDirectives=c||{},this._typeIDKey=u}var Q,z,S,U,L,H,V,J,W,B,X,Y,Z,$,ee,te,ae,re,ne,ie,se,ce,ue;return n(s,[{key:"cache",get:function(){return this._cache}},{key:"analyzeQuery",value:(ue=a(m.mark((function e(t,a,r){var n,i,s,c,u,o,h,p;return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=t.ast,i=t.hash,n){e.next=3;break}return e.abrupt("return",Promise.reject(new TypeError("@graphql-box/cache-manager expected an AST.")));case 3:return e.next=5,this._getCachedResponseData(t,a,r);case 5:if(s=e.sent,c=s.cacheMetadata,u=s.data,(o=s.fieldCount).missing!==o.total){e.next=9;break}return e.abrupt("return",{updated:t});case 9:if(o.missing){e.next=15;break}if(h=this._setQueryResponseCacheEntry(i,{cacheMetadata:c,data:u},a,r),!a.awaitDataCaching){e.next=14;break}return e.next=14,h;case 14:return e.abrupt("return",{response:{cacheMetadata:c,data:u}});case 15:return this._setPartialQueryResponse(i,{cacheMetadata:c,data:u},a,r),this._filterQuery(t,s,r),p=I(n),e.abrupt("return",{updated:{ast:n,hash:g(p),request:p}});case 19:case"end":return e.stop()}}),e,this)}))),function(e,t,a){return ue.apply(this,arguments)})},{key:"checkCacheEntry",value:(ce=a(m.mark((function e(t,a,r,n){return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this._checkCacheEntry(t,a,r,n));case 1:case"end":return e.stop()}}),e,this)}))),function(e,t,a,r){return ce.apply(this,arguments)})},{key:"checkQueryResponseCacheEntry",value:(se=a(m.mark((function e(t,a,r){var n,i,s,c;return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._checkCacheEntry(v,t,a,r);case 2:if(n=e.sent){e.next=5;break}return e.abrupt("return",!1);case 5:return i=n.entry,s=i.cacheMetadata,c=i.data,e.abrupt("return",{cacheMetadata:D(s),data:c});case 7:case"end":return e.stop()}}),e,this)}))),function(e,t,a){return se.apply(this,arguments)})},{key:"deletePartialQueryResponse",value:function(e){this._partialQueryResponses.delete(e)}},{key:"resolveQuery",value:(ie=a(m.mark((function e(t,a,r,n,i){var c,u,o,h,p,l,d;return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return c=[],e.next=3,this._resolveRequest(a,r,n,i);case 3:if(u=e.sent,o=u.cacheMetadata,h=u.data,i.queryFiltered&&(c.push(this._setQueryResponseCacheEntry(a.hash,{cacheMetadata:o,data:h},n,i)),p=this._getPartialQueryResponse(t.hash)),l=s._getResponseCacheMetadata(o,p),d=this._getResponseData(h,p),c.push(this._setQueryResponseCacheEntry(t.hash,{cacheMetadata:l,data:d},n,i)),!n.awaitDataCaching){e.next=13;break}return e.next=13,Promise.all(c);case 13:return e.abrupt("return",{cacheMetadata:l,data:d});case 14:case"end":return e.stop()}}),e,this)}))),function(e,t,a,r,n){return ie.apply(this,arguments)})},{key:"resolveRequest",value:(ne=a(m.mark((function e(t,a,r,n){return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this._resolveRequest(t,a,r,n));case 1:case"end":return e.stop()}}),e,this)}))),function(e,t,a,r){return ne.apply(this,arguments)})},{key:"_analyzeField",value:(re=a(m.mark((function e(t,a,r,n,i){return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!P(t)){e.next=5;break}return e.next=3,this._analyzeParentField(t,a,r,n,i);case 3:e.next=7;break;case 5:return e.next=7,s._analyzeLeafField(t,a,r,n,i);case 7:case"end":return e.stop()}}),e,this)}))),function(e,t,a,r,n){return re.apply(this,arguments)})},{key:"_analyzeParentField",value:(ae=a(m.mark((function e(t,a,r,n,i){var c,u,h,l,d,f,v,b,k,C,g,D,P,F,w,q=this;return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(c=s._getFieldKeysAndPaths(t,a),u=c.hashedRequestFieldCacheKey,h=c.propNameOrIndex,l=c.requestFieldCacheKey,d=c.requestFieldPath,f=i.fieldTypeMap.get(d),v=a.dataEntityData,b=a.requestFieldPathData,k=a.typeName,C={dataEntityData:s._getFieldDataFromAncestor(v,h),requestFieldPathData:s._getFieldDataFromAncestor(b,h)},!s._isRequestFieldPath(f)){e.next=8;break}return e.next=8,this._setRequestFieldPathData(C,u,n,i);case 8:if(!s._isDataEntity(f)){e.next=11;break}return e.next=11,this._setDataEntityData(C,f,n,i);case 11:if(g=C.cacheability,D=C.dataEntityData,P=C.requestFieldPathData,F=o(P)&&o(D)?void 0:this._mergeObjects(P,D),s._setCachedResponseData({cacheability:g,data:F},r,c,{dataTypeName:y(F,_),fieldTypeName:k},n,i),p(F)){e.next=16;break}return e.abrupt("return");case 16:return w=[],x(t,F,(function(e,t,a){w.push(q._analyzeField(e,G({index:a,requestFieldCacheKey:l,requestFieldPath:d,typeName:t},C),G(G({},r),{},{data:r.data[h]}),n,i))})),e.next=21,Promise.all(w);case 21:case"end":return e.stop()}}),e,this)}))),function(e,t,a,r,n){return ae.apply(this,arguments)})},{key:"_buildCacheMetadata",value:function(e,a,r,n){var i=this,s=e.ast,c=a.data,u=t(a,["data"]),o=this._createCacheMetadata(G({data:c},u),n),h=F(s,n.operation)[0],p=w(h);return p?(p.forEach((function(e){var t=e.fieldNode;return i._setFieldCacheability(t,{requestFieldPath:n.operation},{cacheMetadata:o,data:c},r,n)})),o):o}},{key:"_checkCacheEntry",value:(te=a(m.mark((function e(t,a,r,n){var i,c;return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,this._hasCacheEntry(t,a);case 3:if((i=e.sent)&&s._isValid(i)){e.next=6;break}return e.abrupt("return",!1);case 6:return e.next=8,this._getCacheEntry(t,a,r,n);case 8:if(c=e.sent){e.next=11;break}return e.abrupt("return",!1);case 11:return e.abrupt("return",{cacheability:i,entry:c});case 14:return e.prev=14,e.t0=e.catch(0),e.abrupt("return",!1);case 17:case"end":return e.stop()}}),e,this,[[0,14]])}))),function(e,t,a,r){return te.apply(this,arguments)})},{key:"_createCacheMetadata",value:function(e,t){var a=e._cacheMetadata,r=e.headers,n=t.operation,i=new Map,s=r&&r.get("cache-control")||this._fallbackOperationCacheability,c=new A({cacheControl:s});return i.set(n,c),a&&D(a,i),i}},{key:"_filterField",value:function(e,t,a,r){var n=w(e);if(!n)return!1;for(var i=n.length-1;i>=0;i-=1){var c=n[i],u=c.fieldNode,o=c.typeName,h=q(u);if(h!==this._typeIDKey&&h!==_){var p=s._getFieldKeysAndPaths(u,{requestFieldPath:a}).requestFieldPath,l=s._checkFieldPathChecklist(t.get(p),o),d=l.hasData,y=l.typeUnused;(d||y)&&(P(u)?this._filterField(u,t,p,r)&&E(e,u):E(e,u))}}return this._filterInlineFragments(e),this._filterIDsAndTypeNames(e),!P(e)}},{key:"_filterIDsAndTypeNames",value:function(e){var t=this,a=w(e);if(!a||a.length>3)return!1;var r=a.map((function(e){var t=e.fieldNode;return q(t)}));if(2===r.length&&r.every((function(e){return e===t._typeIDKey||e===_})))return E(e,a.map((function(e){return e.fieldNode}))),!0;if(1===r.length&&r[0]===this._typeIDKey||r[0]===_){var n=a[0].fieldNode;return E(e,n),!0}return!1}},{key:"_filterInlineFragments",value:function(e){var t=this,a=j(e),r=!1;return a.forEach((function(a){var n=w(a);if(!n||!n.length)return R(e,a),void(r=!0);if(1===n.length){var i=n[0].fieldNode;q(i)===t._typeIDKey&&(R(e,a),r=!0)}})),r}},{key:"_filterQuery",value:function(e,t,a){var r=e.ast,n=t.fieldPathChecklist,i=F(r,a.operation)[0],c=w(i);if(c){for(var u=c.length-1;u>=0;u-=1){var o=c[u].fieldNode,h=s._getFieldKeysAndPaths(o,{requestFieldPath:a.operation}).requestFieldPath;this._filterField(o,n,h,a)&&E(i,o)}a.queryFiltered=!0}}},{key:"_getCachedResponseData",value:(ee=a(m.mark((function e(t,a,r){var n,i,c,u,o=this;return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=t.ast,i={cacheMetadata:new Map,data:{},fieldCount:{missing:0,total:0},fieldPathChecklist:new Map},c=F(n,r.operation)[0],u=w(c)){e.next=6;break}return e.abrupt("return",i);case 6:return e.next=8,Promise.all(u.map((function(e){var t=e.fieldNode;return o._analyzeField(t,{requestFieldPath:r.operation},i,a,r)})));case 8:return i.fieldCount=s._countFieldPathChecklist(i.fieldPathChecklist),e.abrupt("return",i);case 10:case"end":return e.stop()}}),e)}))),function(e,t,a){return ee.apply(this,arguments)})},{key:"_getCacheEntry",value:($=a(m.mark((function e(t,a,r,n){return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,this._cache.get("".concat(t,"::").concat(a));case 3:return e.abrupt("return",e.sent);case 6:return e.prev=6,e.t0=e.catch(0),e.abrupt("return",Promise.reject(e.t0));case 9:case"end":return e.stop()}}),e,this,[[0,6]])}))),function(e,t,a,r){return $.apply(this,arguments)})},{key:"_getPartialQueryResponse",value:function(e){var t=this._partialQueryResponses.get(e);return this._partialQueryResponses.delete(e),t}},{key:"_getResponseData",value:function(e,t){return t?this._mergeObjects(t.data,e):e}},{key:"_hasCacheEntry",value:(Z=a(m.mark((function e(t,a){return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,this._cache.has("".concat(t,"::").concat(a));case 3:return e.abrupt("return",e.sent);case 6:return e.prev=6,e.t0=e.catch(0),e.abrupt("return",!1);case 9:case"end":return e.stop()}}),e,this,[[0,6]])}))),function(e,t){return Z.apply(this,arguments)})},{key:"_isFieldEntity",value:function(e,t){var a=t.isEntity,r=t.possibleTypes;return!!y(e,this._typeIDKey,null)&&(!!a||!!r.length&&r.some((function(t){return t.typeName===e.__typename})))}},{key:"_mergeObjects",value:function(e,t){var a=this;return M(e,t,(function(e,t){return h(t)&&t[a._typeIDKey]?t[a._typeIDKey]:void 0}))}},{key:"_parseFieldDataEntityAndRequestFieldPathCacheEntryData",value:(Y=a(m.mark((function e(t,a,r,n,i){var c,u,o,h,l,d,f,v,_,b=this;return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(c=r.cacheMetadata,u=r.dataEntityData,o=r.requestFieldPathData,h=s._getFieldKeysAndPaths(t,a),l=h.requestFieldCacheKey,d=h.requestFieldPath,f=h.responseDataPath,v=y(o,f,null),p(v)){e.next=6;break}return e.abrupt("return");case 6:return _=[],x(t,v,(function(e,t,a){_.push(b._parseFieldDataEntityAndRequestFieldPathCacheEntryData(e,{index:a,requestFieldCacheKey:l,requestFieldPath:d,responseDataPath:f},{cacheMetadata:c,dataEntityData:u,requestFieldPathData:o},n,i))})),e.next=11,Promise.all(_);case 11:return e.next=13,this._setFieldDataEntityAndRequestFieldPathCacheEntry(t,h,{cacheMetadata:c,dataEntityData:u,requestFieldPathData:o},n,i);case 13:case"end":return e.stop()}}),e,this)}))),function(e,t,a,r,n){return Y.apply(this,arguments)})},{key:"_resolveRequest",value:(X=a(m.mark((function e(t,a,r,n){var i,s,c;return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(i=[],s=this._buildCacheMetadata(t,a,r,n),c=a.data,i.push(this._setDataEntityAndRequestFieldPathCacheEntries(t,{cacheMetadata:s,dataEntityData:f(c),requestFieldPathData:f(c)},r,n)),!r.awaitDataCaching){e.next=7;break}return e.next=7,Promise.all(i);case 7:return e.abrupt("return",{cacheMetadata:s,data:c});case 8:case"end":return e.stop()}}),e,this)}))),function(e,t,a,r){return X.apply(this,arguments)})},{key:"_setCacheEntry",value:(B=a(m.mark((function e(t,a,r,n,i,s){return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,this._cache.set("".concat(t,"::").concat(a),f(r),n);case 3:e.next=7;break;case 5:e.prev=5,e.t0=e.catch(0);case 7:case"end":return e.stop()}}),e,this,[[0,5]])}))),function(e,t,a,r,n,i){return B.apply(this,arguments)})},{key:"_setDataEntityAndRequestFieldPathCacheEntries",value:(W=a(m.mark((function e(t,a,r,n){var i,s,c=this;return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(i=F(t.ast,n.operation)[0],s=w(i)){e.next=4;break}return e.abrupt("return");case 4:return e.next=6,Promise.all(s.map((function(e){var t=e.fieldNode;return c._parseFieldDataEntityAndRequestFieldPathCacheEntryData(t,{requestFieldPath:n.operation},a,r,n)})));case 6:case"end":return e.stop()}}),e)}))),function(e,t,a,r){return W.apply(this,arguments)})},{key:"_setDataEntityCacheEntry",value:(J=a(m.mark((function e(t,a,r,n){var i,s,o,h,p,l,d,f,v,_;return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(i=t.responseDataPath,s=a.cacheability,o=a.data,h=a.fieldTypeInfo,p=h.hasArguments||h.hasDirectives,l=y(o,i,null),!(d=this._isFieldEntity(l,h))&&p&&c(o,i),!d){e.next=16;break}return f=h.isEntity?h.typeName:l.__typename,v="".concat(f,"::").concat(l[this._typeIDKey]),e.next=11,this._checkCacheEntry(b,v,r,n);case 11:return(_=e.sent)&&(l=this._mergeObjects(_.entry,l)),e.next=15,this._setCacheEntry(b,v,l,{cacheHeaders:{cacheControl:s.printCacheControl()},tag:r.tag},r,n);case 15:u(o,i,{__cacheKey:"".concat(b,"::").concat(v)});case 16:case"end":return e.stop()}}),e,this)}))),function(e,t,a,r){return J.apply(this,arguments)})},{key:"_setDataEntityData",value:(V=a(m.mark((function t(a,r,n,i){var s,c,u,o,p,l,d,y,f,v,_,k,C=this;return m.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(s=r.possibleTypes,c=r.typeIDValue,u=r.typeName,o=h(a.requestFieldPathData)?a.requestFieldPathData[this._typeIDKey]:void 0,p=c||o){t.next=5;break}return t.abrupt("return");case 5:return l=[].concat(e(s.map((function(e){return e.typeName}))),[u]),t.next=8,Promise.all(l.map((function(e){return C._checkCacheEntry(b,"".concat(e,"::").concat(p),n,i)})));case 8:d=t.sent,1===(y=d.filter((function(e){return!!e}))).length?f=y[0]:y.length>1&&(y.sort((function(e,t){var a=e.cacheability,r=t.cacheability;return a.metadata.ttl-r.metadata.ttl})),f={cacheability:y[0].cacheability,entry:y.reduce((function(e,t){var a=t.entry;return C._mergeObjects(e,a)}),{})}),f&&(_=(v=f).cacheability,k=v.entry,_&&!a.cacheability&&(a.cacheability=_),k&&(a.dataEntityData=k));case 12:case"end":return t.stop()}}),t,this)}))),function(e,t,a,r){return V.apply(this,arguments)})},{key:"_setFieldCacheability",value:function(e,t,a,r,n){var i=this,c=a.cacheMetadata,u=a.data,o=t.requestFieldPath,h=s._getFieldKeysAndPaths(e,t),l=h.requestFieldPath,d=h.responseDataPath,f=y(u,d,null);if(p(f)){var m=f;this._setFieldTypeCacheDirective(c,{ancestorRequestFieldPath:o,requestFieldPath:l},n),x(e,m,(function(e,t,a){i._setFieldCacheability(e,{index:a,requestFieldPath:l,responseDataPath:d},{cacheMetadata:c,data:u},r,n)}))}}},{key:"_setFieldDataEntityAndRequestFieldPathCacheEntry",value:(H=a(m.mark((function e(t,a,r,n,i){var s,c,u,o,h,p,l;return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(s=r.cacheMetadata,c=r.dataEntityData,u=r.requestFieldPathData,o=a.requestFieldPath,h=i.fieldTypeMap.get(o),p=s.get(o),h&&p){e.next=6;break}return e.abrupt("return");case 6:return(l=[]).push(this._setRequestFieldPathCacheEntry(t,a,{cacheability:p,data:u,fieldTypeInfo:h},n,i)),l.push(this._setDataEntityCacheEntry(a,{cacheability:p,data:c,fieldTypeInfo:h},n,i)),e.next=11,Promise.all(l);case 11:case"end":return e.stop()}}),e,this)}))),function(e,t,a,r,n){return H.apply(this,arguments)})},{key:"_setFieldTypeCacheDirective",value:function(e,t,a){var r=t.ancestorRequestFieldPath,n=t.requestFieldPath,i=a.fieldTypeMap,c=a.operation;if(!e.has(n)){var u=i.get(n);if(u&&this._typeCacheDirectives[u.typeName]){var o=new A({cacheControl:this._typeCacheDirectives[u.typeName]});s._setCacheMetadata(e,o,n,c)}else this._cascadeCacheControl&&r&&s._setCacheMetadata(e,e.get(r),n,c)}}},{key:"_setPartialQueryResponse",value:(L=a(m.mark((function e(t,a,r,n){return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:this._partialQueryResponses.set(t,a);case 1:case"end":return e.stop()}}),e,this)}))),function(e,t,a,r){return L.apply(this,arguments)})},{key:"_setQueryResponseCacheEntry",value:(U=a(m.mark((function e(t,a,r,n){var i,c,u,o;return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return i=a.cacheMetadata,c=a.data,u=O(i),o=s._getOperationCacheControl(i,n.operation),e.next=5,this._setCacheEntry(v,t,{cacheMetadata:u,data:c},{cacheHeaders:{cacheControl:o},tag:r.tag},r,n);case 5:case"end":return e.stop()}}),e,this)}))),function(e,t,a,r){return U.apply(this,arguments)})},{key:"_setRequestFieldPathCacheEntry",value:(S=a(m.mark((function e(t,a,r,n,i){var s,o,h,p,l,d,f,v,_;return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(s=a.hashedRequestFieldCacheKey,o=a.responseDataPath,h=r.cacheability,p=r.data,l=r.fieldTypeInfo,d=l.hasArguments||l.hasDirectives,f=y(p,o,null),v=this._isFieldEntity(f,l),i.operation!==C||!v&&!d){e.next=13;break}return e.next=8,this._checkCacheEntry(k,s,n,i);case 8:return(_=e.sent)&&(f=this._mergeObjects(_.entry,f)),e.next=12,this._setCacheEntry(k,s,f,{cacheHeaders:{cacheControl:h.printCacheControl()},tag:n.tag},n,i);case 12:P(t)&&(v?u(p,o,{__cacheKey:"".concat(k,"::").concat(s)}):c(p,o));case 13:case"end":return e.stop()}}),e,this)}))),function(e,t,a,r,n){return S.apply(this,arguments)})},{key:"_setRequestFieldPathData",value:(z=a(m.mark((function e(t,a,r,n){var i,s,c;return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._checkCacheEntry(k,a,r,n);case 2:(i=e.sent)&&(s=i.cacheability,c=i.entry,s&&(t.cacheability=s),c&&(t.requestFieldPathData=c));case 4:case"end":return e.stop()}}),e,this)}))),function(e,t,a,r){return z.apply(this,arguments)})}],[{key:"init",value:(Q=a(m.mark((function e(t){var a;return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(a=[],t.cache||a.push(new TypeError("@graphql-box/cache-manager expected options.cache.")),t.typeCacheDirectives&&!h(t.typeCacheDirectives)&&a.push(new TypeError("@graphql-box/cache-manager expected options.typeCacheDirectives to be a plain object.")),!a.length){e.next=5;break}return e.abrupt("return",Promise.reject(a));case 5:return e.abrupt("return",new s(t));case 6:case"end":return e.stop()}}),e)}))),function(e){return Q.apply(this,arguments)})},{key:"_analyzeLeafField",value:function(e,t,a,r,n){var i=a.data,c=a.fieldPathChecklist,u=s._getFieldKeysAndPaths(e,t),o=u.propNameOrIndex,h=u.requestFieldPath,p=t.dataEntityData,l=t.requestFieldPathData,d=t.typeName,y=s._getFieldDataFromAncestor(p,o)||s._getFieldDataFromAncestor(l,o),f={dataTypeName:p.__typename||l.__typename,fieldTypeName:d};s._setFieldPathChecklist(c,{data:y},h,f),s._setCachedData(i,{data:y},o)}},{key:"_buildKey",value:function(e,t){var a=[];return t.length&&a.push(t),a.push(e),a.join(".")}},{key:"_buildRequestFieldCacheKey",value:function(e,t,a,r,n){var i="".concat(l(n)?n:e);return a&&(i="".concat(i,"(").concat(JSON.stringify(a),")")),r&&(i="".concat(i,"(").concat(JSON.stringify(r),")")),s._buildKey(i,t)}},{key:"_checkFieldPathChecklist",value:function(e,t){if(!e||!e.length)return{hasData:!1,typeUnused:!!t};if(1===e.length){var a=e[0],r=a.hasData,n=a.typeName;return{hasData:r,typeUnused:n?n!==t:void 0}}return{hasData:e.some((function(e){var a=e.hasData;return e.typeName===t&&a})),typeUnused:!e.every((function(e){return e.typeName===t}))}}},{key:"_countFieldPathChecklist",value:function(e){var t={missing:0,total:0};return e.forEach((function(e){t.total+=e.length;var a=e.filter((function(e){return!e.hasData}));t.missing+=a.length})),t}},{key:"_getFieldDataFromAncestor",value:function(e,t){return p(e)?e[t]:void 0}},{key:"_getFieldKeysAndPaths",value:function(e,t){var a=t.index,r=t.requestFieldCacheKey,n=void 0===r?"":r,i=t.requestFieldPath,c=void 0===i?"":i,u=t.responseDataPath,o=void 0===u?"":u,h=q(e),p=s._buildRequestFieldCacheKey(h,n,N(e),K(e),a),d=T(e)||h,y=l(a)?c:s._buildKey(d,c),f=l(a)?a:d,m=s._buildKey(f,o);return{hashedRequestFieldCacheKey:g(p),propNameOrIndex:f,requestFieldCacheKey:p,requestFieldPath:y,responseDataPath:m}}},{key:"_getOperationCacheControl",value:function(e,t){if(!e)return"no-cache";var a=e.get(t);return a?a.printCacheControl():"no-cache"}},{key:"_getResponseCacheMetadata",value:function(t,a){return a?new Map([].concat(e(a.cacheMetadata),e(t))):t}},{key:"_isDataEntity",value:function(e){if(!e)return!1;var t=e.isEntity,a=e.possibleTypes;return t||a.some((function(e){return!!e.isEntity}))}},{key:"_isRequestFieldPath",value:function(e){return!!e&&(this._isDataEntity(e)||e.hasArguments||e.hasDirectives)}},{key:"_isValid",value:function(e){return!y(e,["metadata","cacheControl","noCache"],!1)&&e.checkTTL()}},{key:"_setCachedData",value:function(e,t,a){var r=t.data;if(p(r)||o(r)){if(p(r)){var n=r;e[a]=d(n)?[]:{}}}else e[a]=r}},{key:"_setCachedResponseData",value:function(e,t,a,r,n,i){var c=t.cacheMetadata,u=t.data,o=t.fieldPathChecklist,h=a.propNameOrIndex,p=a.requestFieldPath,l=i.operation;s._setCacheMetadata(c,e.cacheability,p,l),s._setFieldPathChecklist(o,e,p,r),s._setCachedData(u,e,h)}},{key:"_setCacheMetadata",value:function(e,t,a,r){if(t){e.set(a,t);var n=e.get(r);(!n||n.metadata.ttl>t.metadata.ttl)&&e.set(r,t)}}},{key:"_setFieldPathChecklist",value:function(t,a,r,n){var i=a.data,s=n.dataTypeName,c=n.fieldTypeName;if(o(c)){if(t.has(r))return;t.set(r,[{hasData:!o(i)}])}else if(s===c){var u=t.get(r),h=u||[];h.some((function(e){return e.typeName===s}))||t.set(r,[].concat(e(h),[{hasData:!o(i),typeName:s}]))}}}]),s}()).prototype,"_getCacheEntry",[Q],Object.getOwnPropertyDescriptor(U.prototype,"_getCacheEntry"),U.prototype),s(U.prototype,"_setCacheEntry",[z],Object.getOwnPropertyDescriptor(U.prototype,"_setCacheEntry"),U.prototype),s(U.prototype,"_setPartialQueryResponse",[S],Object.getOwnPropertyDescriptor(U.prototype,"_setPartialQueryResponse"),U.prototype),U);export default function(e){if(!h(e))throw new TypeError("@graphql-box/cache-manager expected userOptions to be a plain object.");return function(t){return W.init(G(G({},t),e))}}export{L as CACHE_ENTRY_ADDED,H as CACHE_ENTRY_QUERIED,W as CacheManager,V as PARTIAL_QUERY_COMPILED};
1
+ import"core-js/modules/es.object.keys.js";import"core-js/modules/es.symbol.js";import"core-js/modules/es.object.get-own-property-descriptors.js";import e from"@babel/runtime/helpers/toConsumableArray";import t from"@babel/runtime/helpers/objectWithoutProperties";import a from"@babel/runtime/helpers/asyncToGenerator";import r from"@babel/runtime/helpers/classCallCheck";import n from"@babel/runtime/helpers/createClass";import s from"@babel/runtime/helpers/defineProperty";import i from"@babel/runtime/helpers/applyDecoratedDescriptor";import c from"lodash/unset";import u from"lodash/set";import o from"lodash/isUndefined";import h from"lodash/isPlainObject";import p from"lodash/isObjectLike";import l from"lodash/isNumber";import d from"lodash/isArray";import y from"lodash/get";import f from"lodash/cloneDeep";import m from"@babel/runtime/regenerator";import"core-js/modules/es.array.iterator.js";import"core-js/modules/es.map.js";import"core-js/modules/es.object.to-string.js";import"core-js/modules/es.string.iterator.js";import"core-js/modules/web.dom-collections.iterator.js";import"core-js/modules/es.promise.js";import"core-js/modules/web.dom-collections.for-each.js";import"core-js/modules/es.array.map.js";import"core-js/modules/es.array.concat.js";import"core-js/modules/es.array.filter.js";import"core-js/modules/es.array.join.js";import"core-js/modules/es.object.get-own-property-descriptor.js";import{QUERY_RESPONSES as v,TYPE_NAME_KEY as _,DATA_ENTITIES as b,REQUEST_FIELD_PATHS as k,QUERY as C}from"@graphql-box/core";import{hashRequest as g,rehydrateCacheMetadata as D,hasChildFields as P,iterateChildFields as x,getOperationDefinitions as F,getChildFields as w,getName as q,deleteChildFields as E,getInlineFragments as j,deleteInlineFragments as M,mergeObjects as R,dehydrateCacheMetadata as O,getArguments as N,getDirectives as K,getAlias as T}from"@graphql-box/helpers";import A from"cacheability";import{print as I}from"graphql";import Q from"@babel/runtime/helpers/toArray";import z from"lodash/isEmpty";import"core-js/modules/es.object.values.js";import"core-js/modules/es.array.slice.js";var S="cache_entry_added",U="cache_entry_queried",L="partial_query_compiled";var H,V,J,G;function W(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function B(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?W(Object(a),!0).forEach((function(t){s(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):W(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}var X=(H=function(e,r,n){var s,i=n.value;i&&(n.value=(s=a(m.mark((function e(){var r,n,s,c=this,u=arguments;return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:for(r=u.length,n=new Array(r),s=0;s<r;s++)n[s]=u[s];return e.prev=1,e.abrupt("return",new Promise(function(){var e=a(m.mark((function e(a){var r,s,u,o,h,p,l;return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=n[3],s=r.debugManager,u=t(r,["debugManager"]),s){e.next=8;break}return e.t0=a,e.next=5,i.apply(c,n);case 5:return e.t1=e.sent,(0,e.t0)(e.t1),e.abrupt("return");case 8:return o=s.now(),e.next=11,i.apply(c,n);case 11:h=e.sent,p=s.now(),l=p-o,a(h),s.emit("cache_entry_queried",{cacheType:n[0],context:u,hash:n[1],options:n[2],result:h,stats:{duration:l,endTime:p,startTime:o}});case 16:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()));case 5:return e.prev=5,e.t0=e.catch(1),e.abrupt("return",Promise.reject(e.t0));case 8:case"end":return e.stop()}}),e,null,[[1,5]])}))),function(){return s.apply(this,arguments)}))},V=function(e,r,n){var s,i=n.value;i&&(n.value=(s=a(m.mark((function e(){var r,n,s,c=this,u=arguments;return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:for(r=u.length,n=new Array(r),s=0;s<r;s++)n[s]=u[s];return e.abrupt("return",new Promise(function(){var e=a(m.mark((function e(a){var r,s,u,o,h,p;return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=n[5],s=r.debugManager,u=t(r,["debugManager"]),s){e.next=6;break}return e.next=4,i.apply(c,n);case 4:return a(),e.abrupt("return");case 6:return o=s.now(),e.next=9,i.apply(c,n);case 9:h=s.now(),p=h-o,a(),s.emit("cache_entry_added",{cachemapOptions:n[3],cacheType:n[0],context:u,hash:n[1],options:n[4],stats:{duration:p,endTime:h,startTime:o},value:n[2]});case 13:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()));case 2:case"end":return e.stop()}}),e)}))),function(){return s.apply(this,arguments)}))},J=function(e,r,n){var s,i=n.value;i&&(n.value=(s=a(m.mark((function e(){var r,n,s,c=this,u=arguments;return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:for(r=u.length,n=new Array(r),s=0;s<r;s++)n[s]=u[s];return e.abrupt("return",new Promise(function(){var e=a(m.mark((function e(a){var r,s,u,o,h,p;return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=n[3],s=r.debugManager,u=t(r,["debugManager"]),s){e.next=6;break}return e.next=4,i.apply(c,n);case 4:return a(),e.abrupt("return");case 6:return o=s.now(),e.next=9,i.apply(c,n);case 9:h=s.now(),p=h-o,a(),s.emit("partial_query_compiled",{context:u,hash:n[0],options:n[2],partialQueryResponse:n[1],stats:{duration:p,endTime:h,startTime:o}});case 13:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()));case 2:case"end":return e.stop()}}),e)}))),function(){return s.apply(this,arguments)}))},i((G=function(){function i(e){r(this,i),s(this,"_cache",void 0),s(this,"_cascadeCacheControl",void 0),s(this,"_fallbackOperationCacheability",void 0),s(this,"_partialQueryResponses",new Map),s(this,"_typeCacheDirectives",void 0),s(this,"_typeIDKey",void 0);var t=e.cache,a=e.cascadeCacheControl,n=e.fallbackOperationCacheability,c=e.typeCacheDirectives,u=e.typeIDKey;this._cache=t,this._cascadeCacheControl=a||!1,this._fallbackOperationCacheability=n||"noCache",this._typeCacheDirectives=c||{},this._typeIDKey=u}var S,U,L,H,V,J,G,W,X,Y,Z,$,ee,te,ae,re,ne,se,ie,ce,ue,oe,he;return n(i,[{key:"cache",get:function(){return this._cache}},{key:"analyzeQuery",value:(he=a(m.mark((function e(t,a,r){var n,s,i,c,u,o,h,p;return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=t.ast,s=t.hash,n){e.next=3;break}return e.abrupt("return",Promise.reject(new TypeError("@graphql-box/cache-manager expected an AST.")));case 3:return e.next=5,this._getCachedResponseData(t,a,r);case 5:if(i=e.sent,c=i.cacheMetadata,u=i.data,(o=i.fieldCount).missing!==o.total){e.next=9;break}return e.abrupt("return",{updated:t});case 9:if(o.missing){e.next=15;break}if(h=this._setQueryResponseCacheEntry(s,{cacheMetadata:c,data:u},a,r),!a.awaitDataCaching){e.next=14;break}return e.next=14,h;case 14:return e.abrupt("return",{response:{cacheMetadata:c,data:u}});case 15:return this._setPartialQueryResponse(s,{cacheMetadata:c,data:u},a,r),this._filterQuery(t,i,r),p=I(n),e.abrupt("return",{updated:{ast:n,hash:g(p),request:p}});case 19:case"end":return e.stop()}}),e,this)}))),function(e,t,a){return he.apply(this,arguments)})},{key:"checkCacheEntry",value:(oe=a(m.mark((function e(t,a,r,n){return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this._checkCacheEntry(t,a,r,n));case 1:case"end":return e.stop()}}),e,this)}))),function(e,t,a,r){return oe.apply(this,arguments)})},{key:"checkQueryResponseCacheEntry",value:(ue=a(m.mark((function e(t,a,r){var n,s,i,c;return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._checkCacheEntry(v,t,a,r);case 2:if(n=e.sent){e.next=5;break}return e.abrupt("return",!1);case 5:return s=n.entry,i=s.cacheMetadata,c=s.data,e.abrupt("return",{cacheMetadata:D(i),data:c});case 7:case"end":return e.stop()}}),e,this)}))),function(e,t,a){return ue.apply(this,arguments)})},{key:"deletePartialQueryResponse",value:function(e){this._partialQueryResponses.delete(e)}},{key:"resolveQuery",value:(ce=a(m.mark((function e(t,a,r,n,s){var c,u,o,h,p,l,d;return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return c=[],e.next=3,this._resolveRequest(a,r,n,s);case 3:if(u=e.sent,o=u.cacheMetadata,h=u.data,s.queryFiltered&&(c.push(this._setQueryResponseCacheEntry(a.hash,{cacheMetadata:o,data:h},n,s)),p=this._getPartialQueryResponse(t.hash)),l=i._getResponseCacheMetadata(o,p),d=this._getResponseData(h,p),c.push(this._setQueryResponseCacheEntry(t.hash,{cacheMetadata:l,data:d},n,s)),!n.awaitDataCaching){e.next=13;break}return e.next=13,Promise.all(c);case 13:return e.abrupt("return",{cacheMetadata:l,data:d});case 14:case"end":return e.stop()}}),e,this)}))),function(e,t,a,r,n){return ce.apply(this,arguments)})},{key:"resolveRequest",value:(ie=a(m.mark((function e(t,a,r,n){return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this._resolveRequest(t,a,r,n));case 1:case"end":return e.stop()}}),e,this)}))),function(e,t,a,r){return ie.apply(this,arguments)})},{key:"_analyzeField",value:(se=a(m.mark((function e(t,a,r,n,s){return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!P(t)){e.next=5;break}return e.next=3,this._analyzeParentField(t,a,r,n,s);case 3:e.next=7;break;case 5:return e.next=7,i._analyzeLeafField(t,a,r,n,s);case 7:case"end":return e.stop()}}),e,this)}))),function(e,t,a,r,n){return se.apply(this,arguments)})},{key:"_analyzeParentField",value:(ne=a(m.mark((function e(t,a,r,n,s){var c,u,h,l,d,f,v,b,k,C,g,D,P,F,w,q=this;return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(c=i._getFieldKeysAndPaths(t,a),u=c.hashedRequestFieldCacheKey,h=c.propNameOrIndex,l=c.requestFieldCacheKey,d=c.requestFieldPath,f=s.fieldTypeMap.get(d),v=a.dataEntityData,b=a.requestFieldPathData,k=a.typeName,C={dataEntityData:i._getFieldDataFromAncestor(v,h),requestFieldPathData:i._getFieldDataFromAncestor(b,h)},!i._isRequestFieldPath(f)){e.next=8;break}return e.next=8,this._setRequestFieldPathData(C,u,n,s);case 8:if(!i._isDataEntity(f)){e.next=11;break}return e.next=11,this._setDataEntityData(C,f,n,s);case 11:if(g=C.cacheability,D=C.dataEntityData,P=C.requestFieldPathData,F=o(P)&&o(D)?void 0:this._mergeObjects(P,D),i._setCachedResponseData({cacheability:g,data:F},r,c,{dataTypeName:y(F,_),fieldTypeName:k},n,s),p(F)){e.next=16;break}return e.abrupt("return");case 16:return w=[],x(t,F,(function(e,t,a){w.push(q._analyzeField(e,B({index:a,requestFieldCacheKey:l,requestFieldPath:d,typeName:t},C),B(B({},r),{},{data:r.data[h]}),n,s))})),e.next=21,Promise.all(w);case 21:case"end":return e.stop()}}),e,this)}))),function(e,t,a,r,n){return ne.apply(this,arguments)})},{key:"_buildCacheMetadata",value:function(e,a,r,n){var s=this,i=e.ast,c=a.data,u=t(a,["data"]),o=this._createCacheMetadata(B({data:c},u),n),h=F(i,n.operation)[0],p=w(h);return p?(p.forEach((function(e){var t=e.fieldNode;return s._setFieldCacheability(t,{requestFieldPath:n.operation},{cacheMetadata:o,data:c},r,n)})),o):o}},{key:"_checkCacheEntry",value:(re=a(m.mark((function e(t,a,r,n){var s,c;return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,this._hasCacheEntry(t,a);case 3:if((s=e.sent)&&i._isValid(s)){e.next=6;break}return e.abrupt("return",!1);case 6:return e.next=8,this._getCacheEntry(t,a,r,n);case 8:if(c=e.sent){e.next=11;break}return e.abrupt("return",!1);case 11:return e.abrupt("return",{cacheability:s,entry:c});case 14:return e.prev=14,e.t0=e.catch(0),e.abrupt("return",!1);case 17:case"end":return e.stop()}}),e,this,[[0,14]])}))),function(e,t,a,r){return re.apply(this,arguments)})},{key:"_createCacheMetadata",value:function(e,t){var a=e._cacheMetadata,r=e.headers,n=t.operation,s=new Map,i=function(e){var t=e._cacheMetadata,a=e.fallback,r=e.headers;if(t&&!z(t)){var n=Object.values(t),s=Q(n),i=s[0],c=s.slice(1);return new A({metadata:c.reduce((function(e,t){return t.ttl<e.ttl?t:e}),i)})}return r&&r.has("cache-control")?new A({headers:r}):new A({cacheControl:a})}({_cacheMetadata:a,fallback:this._fallbackOperationCacheability,headers:r});return s.set(n,i),a&&D(a,s),s}},{key:"_filterField",value:function(e,t,a,r){var n=w(e);if(!n)return!1;for(var s=n.length-1;s>=0;s-=1){var c=n[s],u=c.fieldNode,o=c.typeName,h=q(u);if(h!==this._typeIDKey&&h!==_){var p=i._getFieldKeysAndPaths(u,{requestFieldPath:a}).requestFieldPath,l=i._checkFieldPathChecklist(t.get(p),o),d=l.hasData,y=l.typeUnused;(d||y)&&(P(u)?this._filterField(u,t,p,r)&&E(e,u):E(e,u))}}return this._filterInlineFragments(e),this._filterIDsAndTypeNames(e),!P(e)}},{key:"_filterIDsAndTypeNames",value:function(e){var t=this,a=w(e);if(!a||a.length>3)return!1;var r=a.map((function(e){var t=e.fieldNode;return q(t)}));if(2===r.length&&r.every((function(e){return e===t._typeIDKey||e===_})))return E(e,a.map((function(e){return e.fieldNode}))),!0;if(1===r.length&&r[0]===this._typeIDKey||r[0]===_){var n=a[0].fieldNode;return E(e,n),!0}return!1}},{key:"_filterInlineFragments",value:function(e){var t=this,a=j(e),r=!1;return a.forEach((function(a){var n=w(a);if(!n||!n.length)return M(e,a),void(r=!0);if(1===n.length){var s=n[0].fieldNode;q(s)===t._typeIDKey&&(M(e,a),r=!0)}})),r}},{key:"_filterQuery",value:function(e,t,a){var r=e.ast,n=t.fieldPathChecklist,s=F(r,a.operation)[0],c=w(s);if(c){for(var u=c.length-1;u>=0;u-=1){var o=c[u].fieldNode,h=i._getFieldKeysAndPaths(o,{requestFieldPath:a.operation}).requestFieldPath;this._filterField(o,n,h,a)&&E(s,o)}a.queryFiltered=!0}}},{key:"_getCachedResponseData",value:(ae=a(m.mark((function e(t,a,r){var n,s,c,u,o=this;return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=t.ast,s={cacheMetadata:new Map,data:{},fieldCount:{missing:0,total:0},fieldPathChecklist:new Map},c=F(n,r.operation)[0],u=w(c)){e.next=6;break}return e.abrupt("return",s);case 6:return e.next=8,Promise.all(u.map((function(e){var t=e.fieldNode;return o._analyzeField(t,{requestFieldPath:r.operation},s,a,r)})));case 8:return s.fieldCount=i._countFieldPathChecklist(s.fieldPathChecklist),e.abrupt("return",s);case 10:case"end":return e.stop()}}),e)}))),function(e,t,a){return ae.apply(this,arguments)})},{key:"_getCacheEntry",value:(te=a(m.mark((function e(t,a,r,n){return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,this._cache.get("".concat(t,"::").concat(a));case 3:return e.abrupt("return",e.sent);case 6:return e.prev=6,e.t0=e.catch(0),e.abrupt("return",Promise.reject(e.t0));case 9:case"end":return e.stop()}}),e,this,[[0,6]])}))),function(e,t,a,r){return te.apply(this,arguments)})},{key:"_getPartialQueryResponse",value:function(e){var t=this._partialQueryResponses.get(e);return this._partialQueryResponses.delete(e),t}},{key:"_getResponseData",value:function(e,t){return t?this._mergeObjects(t.data,e):e}},{key:"_hasCacheEntry",value:(ee=a(m.mark((function e(t,a){return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,this._cache.has("".concat(t,"::").concat(a));case 3:return e.abrupt("return",e.sent);case 6:return e.prev=6,e.t0=e.catch(0),e.abrupt("return",!1);case 9:case"end":return e.stop()}}),e,this,[[0,6]])}))),function(e,t){return ee.apply(this,arguments)})},{key:"_isFieldEntity",value:function(e,t){var a=t.isEntity,r=t.possibleTypes;return!!y(e,this._typeIDKey,null)&&(!!a||!!r.length&&r.some((function(t){return t.typeName===e.__typename})))}},{key:"_mergeObjects",value:function(e,t){var a=this;return R(e,t,(function(e,t){return h(t)&&t[a._typeIDKey]?t[a._typeIDKey]:void 0}))}},{key:"_parseFieldDataEntityAndRequestFieldPathCacheEntryData",value:($=a(m.mark((function e(t,a,r,n,s){var c,u,o,h,l,d,f,v,_,b=this;return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(c=r.cacheMetadata,u=r.dataEntityData,o=r.requestFieldPathData,h=i._getFieldKeysAndPaths(t,a),l=h.requestFieldCacheKey,d=h.requestFieldPath,f=h.responseDataPath,v=y(o,f,null),p(v)){e.next=6;break}return e.abrupt("return");case 6:return _=[],x(t,v,(function(e,t,a){_.push(b._parseFieldDataEntityAndRequestFieldPathCacheEntryData(e,{index:a,requestFieldCacheKey:l,requestFieldPath:d,responseDataPath:f},{cacheMetadata:c,dataEntityData:u,requestFieldPathData:o},n,s))})),e.next=11,Promise.all(_);case 11:return e.next=13,this._setFieldDataEntityAndRequestFieldPathCacheEntry(t,h,{cacheMetadata:c,dataEntityData:u,requestFieldPathData:o},n,s);case 13:case"end":return e.stop()}}),e,this)}))),function(e,t,a,r,n){return $.apply(this,arguments)})},{key:"_resolveRequest",value:(Z=a(m.mark((function e(t,a,r,n){var s,i,c;return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(s=[],i=this._buildCacheMetadata(t,a,r,n),c=a.data,s.push(this._setDataEntityAndRequestFieldPathCacheEntries(t,{cacheMetadata:i,dataEntityData:f(c),requestFieldPathData:f(c)},r,n)),!r.awaitDataCaching){e.next=7;break}return e.next=7,Promise.all(s);case 7:return e.abrupt("return",{cacheMetadata:i,data:c});case 8:case"end":return e.stop()}}),e,this)}))),function(e,t,a,r){return Z.apply(this,arguments)})},{key:"_setCacheEntry",value:(Y=a(m.mark((function e(t,a,r,n,s,i){return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,this._cache.set("".concat(t,"::").concat(a),f(r),n);case 3:e.next=7;break;case 5:e.prev=5,e.t0=e.catch(0);case 7:case"end":return e.stop()}}),e,this,[[0,5]])}))),function(e,t,a,r,n,s){return Y.apply(this,arguments)})},{key:"_setDataEntityAndRequestFieldPathCacheEntries",value:(X=a(m.mark((function e(t,a,r,n){var s,i,c=this;return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(s=F(t.ast,n.operation)[0],i=w(s)){e.next=4;break}return e.abrupt("return");case 4:return e.next=6,Promise.all(i.map((function(e){var t=e.fieldNode;return c._parseFieldDataEntityAndRequestFieldPathCacheEntryData(t,{requestFieldPath:n.operation},a,r,n)})));case 6:case"end":return e.stop()}}),e)}))),function(e,t,a,r){return X.apply(this,arguments)})},{key:"_setDataEntityCacheEntry",value:(W=a(m.mark((function e(t,a,r,n){var s,i,o,h,p,l,d,f,v,_;return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(s=t.responseDataPath,i=a.cacheability,o=a.data,h=a.fieldTypeInfo,p=h.hasArguments||h.hasDirectives,l=y(o,s,null),!(d=this._isFieldEntity(l,h))&&p&&c(o,s),!d){e.next=16;break}return f=h.isEntity?h.typeName:l.__typename,v="".concat(f,"::").concat(l[this._typeIDKey]),e.next=11,this._checkCacheEntry(b,v,r,n);case 11:return(_=e.sent)&&(l=this._mergeObjects(_.entry,l)),e.next=15,this._setCacheEntry(b,v,l,{cacheHeaders:{cacheControl:i.printCacheControl()},tag:r.tag},r,n);case 15:u(o,s,{__cacheKey:"".concat(b,"::").concat(v)});case 16:case"end":return e.stop()}}),e,this)}))),function(e,t,a,r){return W.apply(this,arguments)})},{key:"_setDataEntityData",value:(G=a(m.mark((function t(a,r,n,s){var i,c,u,o,p,l,d,y,f,v,_,k,C=this;return m.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(i=r.possibleTypes,c=r.typeIDValue,u=r.typeName,o=h(a.requestFieldPathData)?a.requestFieldPathData[this._typeIDKey]:void 0,p=c||o){t.next=5;break}return t.abrupt("return");case 5:return l=[].concat(e(i.map((function(e){return e.typeName}))),[u]),t.next=8,Promise.all(l.map((function(e){return C._checkCacheEntry(b,"".concat(e,"::").concat(p),n,s)})));case 8:d=t.sent,1===(y=d.filter((function(e){return!!e}))).length?f=y[0]:y.length>1&&(y.sort((function(e,t){var a=e.cacheability,r=t.cacheability;return a.metadata.ttl-r.metadata.ttl})),f={cacheability:y[0].cacheability,entry:y.reduce((function(e,t){var a=t.entry;return C._mergeObjects(e,a)}),{})}),f&&(_=(v=f).cacheability,k=v.entry,_&&!a.cacheability&&(a.cacheability=_),k&&(a.dataEntityData=k));case 12:case"end":return t.stop()}}),t,this)}))),function(e,t,a,r){return G.apply(this,arguments)})},{key:"_setFieldCacheability",value:function(e,t,a,r,n){var s=this,c=a.cacheMetadata,u=a.data,o=t.requestFieldPath,h=i._getFieldKeysAndPaths(e,t),l=h.requestFieldPath,d=h.responseDataPath,f=y(u,d,null);if(p(f)){var m=f;this._setFieldTypeCacheDirective(c,{ancestorRequestFieldPath:o,requestFieldPath:l},n),x(e,m,(function(e,t,a){s._setFieldCacheability(e,{index:a,requestFieldPath:l,responseDataPath:d},{cacheMetadata:c,data:u},r,n)}))}}},{key:"_setFieldDataEntityAndRequestFieldPathCacheEntry",value:(J=a(m.mark((function e(t,a,r,n,s){var i,c,u,o,h,p,l;return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(i=r.cacheMetadata,c=r.dataEntityData,u=r.requestFieldPathData,o=a.requestFieldPath,h=s.fieldTypeMap.get(o),p=i.get(o),h&&p){e.next=6;break}return e.abrupt("return");case 6:return(l=[]).push(this._setRequestFieldPathCacheEntry(t,a,{cacheability:p,data:u,fieldTypeInfo:h},n,s)),l.push(this._setDataEntityCacheEntry(a,{cacheability:p,data:c,fieldTypeInfo:h},n,s)),e.next=11,Promise.all(l);case 11:case"end":return e.stop()}}),e,this)}))),function(e,t,a,r,n){return J.apply(this,arguments)})},{key:"_setFieldTypeCacheDirective",value:function(e,t,a){var r=t.ancestorRequestFieldPath,n=t.requestFieldPath,s=a.fieldTypeMap,c=a.operation;if(!e.has(n)){var u=s.get(n);if(u&&this._typeCacheDirectives[u.typeName]){var o=new A({cacheControl:this._typeCacheDirectives[u.typeName]});i._setCacheMetadata(e,o,n,c)}else this._cascadeCacheControl&&r&&i._setCacheMetadata(e,e.get(r),n,c)}}},{key:"_setPartialQueryResponse",value:(V=a(m.mark((function e(t,a,r,n){return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:this._partialQueryResponses.set(t,a);case 1:case"end":return e.stop()}}),e,this)}))),function(e,t,a,r){return V.apply(this,arguments)})},{key:"_setQueryResponseCacheEntry",value:(H=a(m.mark((function e(t,a,r,n){var s,c,u,o;return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return s=a.cacheMetadata,c=a.data,u=O(s),o=i._getOperationCacheControl(s,n.operation),e.next=5,this._setCacheEntry(v,t,{cacheMetadata:u,data:c},{cacheHeaders:{cacheControl:o},tag:r.tag},r,n);case 5:case"end":return e.stop()}}),e,this)}))),function(e,t,a,r){return H.apply(this,arguments)})},{key:"_setRequestFieldPathCacheEntry",value:(L=a(m.mark((function e(t,a,r,n,s){var i,o,h,p,l,d,f,v,_;return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(i=a.hashedRequestFieldCacheKey,o=a.responseDataPath,h=r.cacheability,p=r.data,l=r.fieldTypeInfo,d=l.hasArguments||l.hasDirectives,f=y(p,o,null),v=this._isFieldEntity(f,l),s.operation!==C||!v&&!d){e.next=13;break}return e.next=8,this._checkCacheEntry(k,i,n,s);case 8:return(_=e.sent)&&(f=this._mergeObjects(_.entry,f)),e.next=12,this._setCacheEntry(k,i,f,{cacheHeaders:{cacheControl:h.printCacheControl()},tag:n.tag},n,s);case 12:P(t)&&(v?u(p,o,{__cacheKey:"".concat(k,"::").concat(i)}):c(p,o));case 13:case"end":return e.stop()}}),e,this)}))),function(e,t,a,r,n){return L.apply(this,arguments)})},{key:"_setRequestFieldPathData",value:(U=a(m.mark((function e(t,a,r,n){var s,i,c;return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this._checkCacheEntry(k,a,r,n);case 2:(s=e.sent)&&(i=s.cacheability,c=s.entry,i&&(t.cacheability=i),c&&(t.requestFieldPathData=c));case 4:case"end":return e.stop()}}),e,this)}))),function(e,t,a,r){return U.apply(this,arguments)})}],[{key:"init",value:(S=a(m.mark((function e(t){var a;return m.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(a=[],t.cache||a.push(new TypeError("@graphql-box/cache-manager expected options.cache.")),t.typeCacheDirectives&&!h(t.typeCacheDirectives)&&a.push(new TypeError("@graphql-box/cache-manager expected options.typeCacheDirectives to be a plain object.")),!a.length){e.next=5;break}return e.abrupt("return",Promise.reject(a));case 5:return e.abrupt("return",new i(t));case 6:case"end":return e.stop()}}),e)}))),function(e){return S.apply(this,arguments)})},{key:"_analyzeLeafField",value:function(e,t,a,r,n){var s=a.data,c=a.fieldPathChecklist,u=i._getFieldKeysAndPaths(e,t),o=u.propNameOrIndex,h=u.requestFieldPath,p=t.dataEntityData,l=t.requestFieldPathData,d=t.typeName,y=i._getFieldDataFromAncestor(p,o)||i._getFieldDataFromAncestor(l,o),f={dataTypeName:p.__typename||l.__typename,fieldTypeName:d};i._setFieldPathChecklist(c,{data:y},h,f),i._setCachedData(s,{data:y},o)}},{key:"_buildKey",value:function(e,t){var a=[];return t.length&&a.push(t),a.push(e),a.join(".")}},{key:"_buildRequestFieldCacheKey",value:function(e,t,a,r,n){var s="".concat(l(n)?n:e);return a&&(s="".concat(s,"(").concat(JSON.stringify(a),")")),r&&(s="".concat(s,"(").concat(JSON.stringify(r),")")),i._buildKey(s,t)}},{key:"_checkFieldPathChecklist",value:function(e,t){if(!e||!e.length)return{hasData:!1,typeUnused:!!t};if(1===e.length){var a=e[0],r=a.hasData,n=a.typeName;return{hasData:r,typeUnused:n?n!==t:void 0}}return{hasData:e.some((function(e){var a=e.hasData;return e.typeName===t&&a})),typeUnused:!e.every((function(e){return e.typeName===t}))}}},{key:"_countFieldPathChecklist",value:function(e){var t={missing:0,total:0};return e.forEach((function(e){t.total+=e.length;var a=e.filter((function(e){return!e.hasData}));t.missing+=a.length})),t}},{key:"_getFieldDataFromAncestor",value:function(e,t){return p(e)?e[t]:void 0}},{key:"_getFieldKeysAndPaths",value:function(e,t){var a=t.index,r=t.requestFieldCacheKey,n=void 0===r?"":r,s=t.requestFieldPath,c=void 0===s?"":s,u=t.responseDataPath,o=void 0===u?"":u,h=q(e),p=i._buildRequestFieldCacheKey(h,n,N(e),K(e),a),d=T(e)||h,y=l(a)?c:i._buildKey(d,c),f=l(a)?a:d,m=i._buildKey(f,o);return{hashedRequestFieldCacheKey:g(p),propNameOrIndex:f,requestFieldCacheKey:p,requestFieldPath:y,responseDataPath:m}}},{key:"_getOperationCacheControl",value:function(e,t){if(!e)return"no-cache";var a=e.get(t);return a?a.printCacheControl():"no-cache"}},{key:"_getResponseCacheMetadata",value:function(t,a){return a?new Map([].concat(e(a.cacheMetadata),e(t))):t}},{key:"_isDataEntity",value:function(e){if(!e)return!1;var t=e.isEntity,a=e.possibleTypes;return t||a.some((function(e){return!!e.isEntity}))}},{key:"_isRequestFieldPath",value:function(e){return!!e&&(this._isDataEntity(e)||e.hasArguments||e.hasDirectives)}},{key:"_isValid",value:function(e){return!y(e,["metadata","cacheControl","noCache"],!1)&&e.checkTTL()}},{key:"_setCachedData",value:function(e,t,a){var r=t.data;if(p(r)||o(r)){if(p(r)){var n=r;e[a]=d(n)?[]:{}}}else e[a]=r}},{key:"_setCachedResponseData",value:function(e,t,a,r,n,s){var c=t.cacheMetadata,u=t.data,o=t.fieldPathChecklist,h=a.propNameOrIndex,p=a.requestFieldPath,l=s.operation;i._setCacheMetadata(c,e.cacheability,p,l),i._setFieldPathChecklist(o,e,p,r),i._setCachedData(u,e,h)}},{key:"_setCacheMetadata",value:function(e,t,a,r){if(t){e.set(a,t);var n=e.get(r);(!n||n.metadata.ttl>t.metadata.ttl)&&e.set(r,t)}}},{key:"_setFieldPathChecklist",value:function(t,a,r,n){var s=a.data,i=n.dataTypeName,c=n.fieldTypeName;if(o(c)){if(t.has(r))return;t.set(r,[{hasData:!o(s)}])}else if(i===c){var u=t.get(r),h=u||[];h.some((function(e){return e.typeName===i}))||t.set(r,[].concat(e(h),[{hasData:!o(s),typeName:i}]))}}}]),i}()).prototype,"_getCacheEntry",[H],Object.getOwnPropertyDescriptor(G.prototype,"_getCacheEntry"),G.prototype),i(G.prototype,"_setCacheEntry",[V],Object.getOwnPropertyDescriptor(G.prototype,"_setCacheEntry"),G.prototype),i(G.prototype,"_setPartialQueryResponse",[J],Object.getOwnPropertyDescriptor(G.prototype,"_setPartialQueryResponse"),G.prototype),G);export default function(e){if(!h(e))throw new TypeError("@graphql-box/cache-manager expected userOptions to be a plain object.");return function(t){return X.init(B(B({},t),e))}}export{S as CACHE_ENTRY_ADDED,U as CACHE_ENTRY_QUERIED,X as CacheManager,L as PARTIAL_QUERY_COMPILED};
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../cache-manager/src/consts/index.ts","../cache-manager/src/main/index.ts","../cache-manager/src/debug/log-cache-query/index.ts","../cache-manager/src/debug/log-cache-entry/index.ts","../cache-manager/src/debug/log-partial-compiled/index.ts"],"sourcesContent":["export const METADATA = \"metadata\";\nexport const CACHE_CONTROL = \"cacheControl\";\nexport const NO_CACHE = \"noCache\";\n\nexport const HEADER_CACHE_CONTROL = \"cache-control\";\nexport const HEADER_NO_CACHE = \"no-cache\";\n\nexport const CACHE_ENTRY_ADDED = \"cache_entry_added\";\nexport const CACHE_ENTRY_QUERIED = \"cache_entry_queried\";\nexport const PARTIAL_QUERY_COMPILED = \"partial_query_compiled\";\n","import Cachemap from \"@cachemap/core\";\nimport {\n CacheMetadata,\n CacheTypes,\n DATA_ENTITIES,\n FieldTypeInfo,\n PlainObjectMap,\n PlainObjectStringMap,\n QUERY,\n QUERY_RESPONSES,\n REQUEST_FIELD_PATHS,\n RawResponseDataWithMaybeCacheMetadata,\n RequestContext,\n RequestData,\n RequestOptions,\n ResponseData,\n TYPE_NAME_KEY,\n} from \"@graphql-box/core\";\nimport {\n dehydrateCacheMetadata,\n deleteChildFields,\n deleteInlineFragments,\n getAlias,\n getArguments,\n getChildFields,\n getDirectives,\n getInlineFragments,\n getName,\n getOperationDefinitions,\n hasChildFields,\n hashRequest,\n iterateChildFields,\n mergeObjects,\n rehydrateCacheMetadata,\n} from \"@graphql-box/helpers\";\nimport Cacheability from \"cacheability\";\nimport { FieldNode, print } from \"graphql\";\nimport { cloneDeep, get, isArray, isNumber, isObjectLike, isPlainObject, isUndefined, set, unset } from \"lodash\";\nimport { CACHE_CONTROL, HEADER_CACHE_CONTROL, HEADER_NO_CACHE, METADATA, NO_CACHE } from \"../consts\";\nimport { logCacheEntry, logCacheQuery, logPartialCompiled } from \"../debug\";\nimport {\n AnalyzeQueryResult,\n AncestorKeysAndPaths,\n CacheManagerDef,\n CacheManagerInit,\n CachedAncestorFieldData,\n CachedFieldData,\n CachedResponseData,\n CachemapOptions,\n CheckCacheEntryResult,\n CheckFieldPathChecklistResult,\n ClientOptions,\n ConstructorOptions,\n DataForCachingEntry,\n FieldCount,\n FieldPathChecklist,\n FieldPathChecklistValue,\n InitOptions,\n KeysAndPaths,\n KeysAndPathsOptions,\n MergedCachedFieldData,\n PartialQueryResponse,\n PartialQueryResponses,\n QueryResponseCacheEntry,\n ResponseDataForCaching,\n TypeNames,\n UserOptions,\n} from \"../defs\";\n\nexport class CacheManager implements CacheManagerDef {\n public static async init(options: InitOptions): Promise<CacheManager> {\n const errors: TypeError[] = [];\n\n if (!options.cache) {\n errors.push(new TypeError(\"@graphql-box/cache-manager expected options.cache.\"));\n }\n\n if (!!options.typeCacheDirectives && !isPlainObject(options.typeCacheDirectives)) {\n const message = \"@graphql-box/cache-manager expected options.typeCacheDirectives to be a plain object.\";\n errors.push(new TypeError(message));\n }\n\n if (errors.length) return Promise.reject(errors);\n\n return new CacheManager(options);\n }\n\n private static _analyzeLeafField(\n field: FieldNode,\n cachedAncestorFieldData: CachedAncestorFieldData,\n { data, fieldPathChecklist }: CachedResponseData,\n _options: RequestOptions,\n _context: RequestContext,\n ): void {\n const keysAndPaths = CacheManager._getFieldKeysAndPaths(field, cachedAncestorFieldData);\n const { propNameOrIndex, requestFieldPath } = keysAndPaths;\n const { dataEntityData, requestFieldPathData, typeName } = cachedAncestorFieldData;\n\n const cachedFieldData =\n CacheManager._getFieldDataFromAncestor(dataEntityData, propNameOrIndex) ||\n CacheManager._getFieldDataFromAncestor(requestFieldPathData, propNameOrIndex);\n\n const typeNames = {\n dataTypeName: dataEntityData.__typename || requestFieldPathData.__typename,\n fieldTypeName: typeName,\n };\n\n CacheManager._setFieldPathChecklist(fieldPathChecklist, { data: cachedFieldData }, requestFieldPath, typeNames);\n CacheManager._setCachedData(data, { data: cachedFieldData }, propNameOrIndex);\n }\n\n private static _buildKey(key: string | number, path: string): string {\n const paths: (string | number)[] = [];\n if (path.length) paths.push(path);\n paths.push(key);\n return paths.join(\".\");\n }\n\n private static _buildRequestFieldCacheKey(\n name: string,\n requestFieldCacheKey: string,\n args?: PlainObjectMap,\n directives?: PlainObjectMap,\n index?: number,\n ): string {\n let key = `${isNumber(index) ? index : name}`;\n if (args) key = `${key}(${JSON.stringify(args)})`;\n if (directives) key = `${key}(${JSON.stringify(directives)})`;\n return CacheManager._buildKey(key, requestFieldCacheKey);\n }\n\n private static _checkFieldPathChecklist(\n fieldPathChecklistValues: FieldPathChecklistValue[] | undefined,\n fieldTypeName: string | undefined,\n ): CheckFieldPathChecklistResult {\n if (!fieldPathChecklistValues || !fieldPathChecklistValues.length) {\n return { hasData: false, typeUnused: !!fieldTypeName };\n }\n\n if (fieldPathChecklistValues.length === 1) {\n const { hasData, typeName } = fieldPathChecklistValues[0];\n const typeUnused = !typeName ? undefined : typeName !== fieldTypeName;\n return { hasData, typeUnused };\n }\n\n return {\n hasData: fieldPathChecklistValues.some(({ hasData, typeName }) => typeName === fieldTypeName && hasData),\n typeUnused: !fieldPathChecklistValues.every(({ typeName }) => typeName === fieldTypeName),\n };\n }\n\n private static _countFieldPathChecklist(fieldPathChecklist: FieldPathChecklist): FieldCount {\n const fieldCount: FieldCount = { missing: 0, total: 0 };\n\n fieldPathChecklist.forEach(checklistValues => {\n fieldCount.total += checklistValues.length;\n const missing = checklistValues.filter(({ hasData }) => !hasData);\n fieldCount.missing += missing.length;\n });\n\n return fieldCount;\n }\n\n private static _getFieldDataFromAncestor(ancestorFieldData: any, propNameOrIndex: string | number): any {\n return isObjectLike(ancestorFieldData) ? ancestorFieldData[propNameOrIndex] : undefined;\n }\n\n private static _getFieldKeysAndPaths(field: FieldNode, options: KeysAndPathsOptions): KeysAndPaths {\n const { index, requestFieldCacheKey = \"\", requestFieldPath = \"\", responseDataPath = \"\" } = options;\n const name = getName(field) as string;\n\n const updatedRequestFieldCacheKey = CacheManager._buildRequestFieldCacheKey(\n name,\n requestFieldCacheKey,\n getArguments(field),\n getDirectives(field),\n index,\n );\n\n const fieldAliasOrName = getAlias(field) || name;\n\n const updatedRequestFieldPath = isNumber(index)\n ? requestFieldPath\n : CacheManager._buildKey(fieldAliasOrName, requestFieldPath);\n\n const propNameOrIndex = isNumber(index) ? index : fieldAliasOrName;\n const updatedResponseDataPath = CacheManager._buildKey(propNameOrIndex, responseDataPath);\n\n return {\n hashedRequestFieldCacheKey: hashRequest(updatedRequestFieldCacheKey),\n propNameOrIndex,\n requestFieldCacheKey: updatedRequestFieldCacheKey,\n requestFieldPath: updatedRequestFieldPath,\n responseDataPath: updatedResponseDataPath,\n };\n }\n\n private static _getOperationCacheControl(cacheMetadata: CacheMetadata | undefined, operation: string): string {\n const defaultCacheControl = HEADER_NO_CACHE;\n if (!cacheMetadata) return defaultCacheControl;\n\n const cacheability = cacheMetadata.get(operation);\n return cacheability ? cacheability.printCacheControl() : defaultCacheControl;\n }\n\n private static _getResponseCacheMetadata(\n cacheMetadata: CacheMetadata,\n partialQueryResponse?: PartialQueryResponse,\n ): CacheMetadata {\n if (!partialQueryResponse) return cacheMetadata;\n\n return new Map([...partialQueryResponse.cacheMetadata, ...cacheMetadata]);\n }\n\n private static _isDataEntity(fieldTypeInfo?: FieldTypeInfo): boolean {\n if (!fieldTypeInfo) return false;\n\n const { isEntity, possibleTypes } = fieldTypeInfo;\n return isEntity || possibleTypes.some(type => !!type.isEntity);\n }\n\n private static _isRequestFieldPath(fieldTypeInfo?: FieldTypeInfo): boolean {\n return (\n !!fieldTypeInfo &&\n (this._isDataEntity(fieldTypeInfo) || fieldTypeInfo.hasArguments || fieldTypeInfo.hasDirectives)\n );\n }\n\n private static _isValid(cacheability: Cacheability): boolean {\n const noCache = get(cacheability, [METADATA, CACHE_CONTROL, NO_CACHE], false);\n return !noCache && cacheability.checkTTL();\n }\n\n private static _setCachedData(\n requestData: PlainObjectMap,\n { data }: MergedCachedFieldData,\n propNameOrIndex: string | number,\n ): void {\n if (!isObjectLike(data) && !isUndefined(data)) {\n requestData[propNameOrIndex] = data as string | number | boolean | null;\n } else if (isObjectLike(data)) {\n const objectLikeData = data as PlainObjectMap | any[];\n requestData[propNameOrIndex] = isArray(objectLikeData) ? [] : {};\n }\n }\n\n private static _setCachedResponseData(\n cachedFieldData: MergedCachedFieldData,\n { cacheMetadata, data, fieldPathChecklist }: CachedResponseData,\n { propNameOrIndex, requestFieldPath }: KeysAndPaths,\n typeNames: TypeNames,\n _options: RequestOptions,\n { operation }: RequestContext,\n ) {\n CacheManager._setCacheMetadata(cacheMetadata, cachedFieldData.cacheability, requestFieldPath, operation);\n CacheManager._setFieldPathChecklist(fieldPathChecklist, cachedFieldData, requestFieldPath, typeNames);\n CacheManager._setCachedData(data, cachedFieldData, propNameOrIndex);\n }\n\n private static _setCacheMetadata(\n cacheMetadata: CacheMetadata,\n cacheability: Cacheability | undefined,\n requestFieldPath: string,\n operation: string,\n ): void {\n if (!cacheability) return;\n\n cacheMetadata.set(requestFieldPath, cacheability);\n const operationCacheability = cacheMetadata.get(operation);\n\n if (!operationCacheability || operationCacheability.metadata.ttl > cacheability.metadata.ttl) {\n cacheMetadata.set(operation, cacheability);\n }\n }\n\n private static _setFieldPathChecklist(\n fieldPathChecklist: FieldPathChecklist,\n { data }: MergedCachedFieldData,\n requestFieldPath: string,\n { dataTypeName, fieldTypeName }: TypeNames,\n ): void {\n if (isUndefined(fieldTypeName)) {\n if (fieldPathChecklist.has(requestFieldPath)) return;\n fieldPathChecklist.set(requestFieldPath, [{ hasData: !isUndefined(data) }]);\n return;\n }\n\n if (dataTypeName !== fieldTypeName) return;\n\n const entry = fieldPathChecklist.get(requestFieldPath);\n const checklistValues = entry ? (entry as FieldPathChecklistValue[]) : [];\n if (checklistValues.some(({ typeName }) => typeName === dataTypeName)) return;\n\n fieldPathChecklist.set(requestFieldPath, [\n ...checklistValues,\n { hasData: !isUndefined(data), typeName: dataTypeName as string },\n ]);\n }\n\n private _cache: Cachemap;\n private _cascadeCacheControl: boolean;\n private _fallbackOperationCacheability: string;\n private _partialQueryResponses: PartialQueryResponses = new Map();\n private _typeCacheDirectives: PlainObjectStringMap;\n private _typeIDKey: string;\n\n constructor(options: ConstructorOptions) {\n const { cache, cascadeCacheControl, fallbackOperationCacheability, typeCacheDirectives, typeIDKey } = options;\n this._cache = cache;\n this._cascadeCacheControl = cascadeCacheControl || false;\n this._fallbackOperationCacheability = fallbackOperationCacheability || NO_CACHE;\n this._typeCacheDirectives = typeCacheDirectives || {};\n this._typeIDKey = typeIDKey;\n }\n\n get cache(): Cachemap {\n return this._cache;\n }\n\n public async analyzeQuery(\n requestData: RequestData,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<AnalyzeQueryResult> {\n const { ast, hash } = requestData;\n\n if (!ast) {\n return Promise.reject(new TypeError(\"@graphql-box/cache-manager expected an AST.\"));\n }\n\n const cachedResponseData = await this._getCachedResponseData(requestData, options, context);\n\n const { cacheMetadata, data, fieldCount } = cachedResponseData;\n if (fieldCount.missing === fieldCount.total) return { updated: requestData };\n\n if (!fieldCount.missing) {\n const dataCaching = this._setQueryResponseCacheEntry(hash, { cacheMetadata, data }, options, context);\n if (options.awaitDataCaching) await dataCaching;\n\n return { response: { cacheMetadata, data } };\n }\n\n this._setPartialQueryResponse(hash, { cacheMetadata, data }, options, context);\n this._filterQuery(requestData, cachedResponseData, context);\n const request = print(ast);\n return { updated: { ast, hash: hashRequest(request), request } };\n }\n\n public async checkCacheEntry(\n cacheType: CacheTypes,\n hash: string,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<CheckCacheEntryResult | false> {\n return this._checkCacheEntry(cacheType, hash, options, context);\n }\n\n public async checkQueryResponseCacheEntry(\n hash: string,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<ResponseData | false> {\n const result = await this._checkCacheEntry(QUERY_RESPONSES, hash, options, context);\n\n if (!result) return false;\n\n const { cacheMetadata, data } = result.entry as QueryResponseCacheEntry;\n\n return {\n cacheMetadata: rehydrateCacheMetadata(cacheMetadata),\n data,\n };\n }\n\n public deletePartialQueryResponse(hash: string): void {\n this._partialQueryResponses.delete(hash);\n }\n\n public async resolveQuery(\n requestData: RequestData,\n updatedRequestData: RequestData,\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<ResponseData> {\n const dataCaching: Promise<void>[] = [];\n const { cacheMetadata, data } = await this._resolveRequest(updatedRequestData, rawResponseData, options, context);\n\n let partialQueryResponse: PartialQueryResponse | undefined;\n\n if (context.queryFiltered) {\n dataCaching.push(\n this._setQueryResponseCacheEntry(updatedRequestData.hash, { cacheMetadata, data }, options, context),\n );\n\n partialQueryResponse = this._getPartialQueryResponse(requestData.hash);\n }\n\n const responseCacheMetadata = CacheManager._getResponseCacheMetadata(cacheMetadata, partialQueryResponse);\n const responseData = this._getResponseData(data, partialQueryResponse);\n\n dataCaching.push(\n this._setQueryResponseCacheEntry(\n requestData.hash,\n { cacheMetadata: responseCacheMetadata, data: responseData },\n options,\n context,\n ),\n );\n\n if (options.awaitDataCaching) await Promise.all(dataCaching);\n\n return { cacheMetadata: responseCacheMetadata, data: responseData };\n }\n\n public async resolveRequest(\n requestData: RequestData,\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<ResponseData> {\n return this._resolveRequest(requestData, rawResponseData, options, context);\n }\n\n private async _analyzeField(\n field: FieldNode,\n cachedAncestorFieldData: CachedAncestorFieldData,\n cachedResponseData: CachedResponseData,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<void> {\n if (hasChildFields(field)) {\n await this._analyzeParentField(field, cachedAncestorFieldData, cachedResponseData, options, context);\n } else {\n await CacheManager._analyzeLeafField(field, cachedAncestorFieldData, cachedResponseData, options, context);\n }\n }\n\n private async _analyzeParentField(\n field: FieldNode,\n cachedAncestorFieldData: CachedAncestorFieldData,\n cachedResponseData: CachedResponseData,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<void> {\n const keysAndPaths = CacheManager._getFieldKeysAndPaths(field, cachedAncestorFieldData);\n const { hashedRequestFieldCacheKey, propNameOrIndex, requestFieldCacheKey, requestFieldPath } = keysAndPaths;\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath);\n\n const {\n dataEntityData: ancestorDataEntityData,\n requestFieldPathData: ancestorRequestFieldPathData,\n typeName,\n } = cachedAncestorFieldData;\n\n const cachedFieldData: CachedFieldData = {\n dataEntityData: CacheManager._getFieldDataFromAncestor(ancestorDataEntityData, propNameOrIndex),\n requestFieldPathData: CacheManager._getFieldDataFromAncestor(ancestorRequestFieldPathData, propNameOrIndex),\n };\n\n if (CacheManager._isRequestFieldPath(fieldTypeInfo)) {\n await this._setRequestFieldPathData(cachedFieldData, hashedRequestFieldCacheKey, options, context);\n }\n\n if (CacheManager._isDataEntity(fieldTypeInfo)) {\n await this._setDataEntityData(cachedFieldData, fieldTypeInfo as FieldTypeInfo, options, context);\n }\n\n const { cacheability, dataEntityData, requestFieldPathData } = cachedFieldData;\n\n const data =\n !isUndefined(requestFieldPathData) || !isUndefined(dataEntityData)\n ? this._mergeObjects(requestFieldPathData, dataEntityData)\n : undefined;\n\n CacheManager._setCachedResponseData(\n { cacheability, data },\n cachedResponseData,\n keysAndPaths,\n { dataTypeName: get(data, TYPE_NAME_KEY), fieldTypeName: typeName },\n options,\n context,\n );\n\n if (!isObjectLike(data)) return;\n\n const objectLikeData = data as PlainObjectMap | any[];\n const promises: Promise<void>[] = [];\n\n iterateChildFields(\n field,\n objectLikeData,\n (childField: FieldNode, childTypeName: string | undefined, childIndex?: number) => {\n promises.push(\n this._analyzeField(\n childField,\n { index: childIndex, requestFieldCacheKey, requestFieldPath, typeName: childTypeName, ...cachedFieldData },\n { ...cachedResponseData, data: cachedResponseData.data[propNameOrIndex] },\n options,\n context,\n ),\n );\n },\n );\n\n await Promise.all(promises);\n }\n\n private _buildCacheMetadata(\n { ast }: RequestData,\n { data, ...otherProps }: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: RequestContext,\n ): CacheMetadata {\n const cacheMetadata = this._createCacheMetadata({ data, ...otherProps }, context);\n const queryNode = getOperationDefinitions(ast, context.operation)[0];\n const fieldsAndTypeNames = getChildFields(queryNode);\n if (!fieldsAndTypeNames) return cacheMetadata;\n\n fieldsAndTypeNames.forEach(({ fieldNode }) =>\n this._setFieldCacheability(\n fieldNode,\n { requestFieldPath: context.operation },\n { cacheMetadata, data },\n options,\n context,\n ),\n );\n\n return cacheMetadata;\n }\n\n private async _checkCacheEntry(\n cacheType: CacheTypes,\n hash: string,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<CheckCacheEntryResult | false> {\n try {\n const cacheability = await this._hasCacheEntry(cacheType, hash);\n\n if (!cacheability || !CacheManager._isValid(cacheability)) return false;\n\n const entry = await this._getCacheEntry(cacheType, hash, options, context);\n\n if (!entry) return false;\n\n return { cacheability, entry };\n } catch (error) {\n return false;\n }\n }\n\n private _createCacheMetadata(\n { _cacheMetadata, headers }: RawResponseDataWithMaybeCacheMetadata,\n { operation }: RequestContext,\n ): CacheMetadata {\n const cacheMetadata = new Map();\n const cacheControl = (headers && headers.get(HEADER_CACHE_CONTROL)) || this._fallbackOperationCacheability;\n const cacheability = new Cacheability({ cacheControl });\n cacheMetadata.set(operation, cacheability);\n if (_cacheMetadata) rehydrateCacheMetadata(_cacheMetadata, cacheMetadata);\n return cacheMetadata;\n }\n\n private _filterField(\n field: FieldNode,\n fieldPathChecklist: FieldPathChecklist,\n ancestorRequestFieldPath: string,\n context: RequestContext,\n ): boolean {\n const fieldsAndTypeNames = getChildFields(field);\n if (!fieldsAndTypeNames) return false;\n\n for (let i = fieldsAndTypeNames.length - 1; i >= 0; i -= 1) {\n const { fieldNode: childField, typeName: childTypeName } = fieldsAndTypeNames[i];\n const childFieldName = getName(childField);\n\n if (childFieldName === this._typeIDKey || childFieldName === TYPE_NAME_KEY) continue;\n\n const { requestFieldPath } = CacheManager._getFieldKeysAndPaths(childField, {\n requestFieldPath: ancestorRequestFieldPath,\n });\n\n const { hasData, typeUnused } = CacheManager._checkFieldPathChecklist(\n fieldPathChecklist.get(requestFieldPath),\n childTypeName,\n );\n\n if (hasData || typeUnused) {\n if (!hasChildFields(childField)) {\n deleteChildFields(field, childField);\n } else if (this._filterField(childField, fieldPathChecklist, requestFieldPath, context)) {\n deleteChildFields(field, childField);\n }\n }\n }\n\n this._filterInlineFragments(field);\n this._filterIDsAndTypeNames(field);\n return !hasChildFields(field);\n }\n\n private _filterIDsAndTypeNames(field: FieldNode): boolean {\n const fieldsAndTypeNames = getChildFields(field);\n if (!fieldsAndTypeNames || fieldsAndTypeNames.length > 3) return false;\n\n const fieldNames = fieldsAndTypeNames.map(({ fieldNode }) => getName(fieldNode) as string);\n\n if (fieldNames.length === 2 && fieldNames.every(name => name === this._typeIDKey || name === TYPE_NAME_KEY)) {\n deleteChildFields(\n field,\n fieldsAndTypeNames.map(({ fieldNode }) => fieldNode),\n );\n\n return true;\n }\n\n if ((fieldNames.length === 1 && fieldNames[0] === this._typeIDKey) || fieldNames[0] === TYPE_NAME_KEY) {\n const { fieldNode } = fieldsAndTypeNames[0];\n deleteChildFields(field, fieldNode);\n return true;\n }\n\n return false;\n }\n\n private _filterInlineFragments(field: FieldNode): boolean {\n const inlineFragments = getInlineFragments(field);\n let filtered = false;\n\n inlineFragments.forEach(fragment => {\n const fieldsAndTypeNames = getChildFields(fragment);\n\n if (!fieldsAndTypeNames || !fieldsAndTypeNames.length) {\n deleteInlineFragments(field, fragment);\n filtered = true;\n return;\n }\n\n if (fieldsAndTypeNames.length === 1) {\n const { fieldNode } = fieldsAndTypeNames[0];\n\n if (getName(fieldNode) === this._typeIDKey) {\n deleteInlineFragments(field, fragment);\n filtered = true;\n }\n }\n });\n\n return filtered;\n }\n\n private _filterQuery(\n { ast }: RequestData,\n { fieldPathChecklist }: CachedResponseData,\n context: RequestContext,\n ): void {\n const queryNode = getOperationDefinitions(ast, context.operation)[0];\n const fieldsAndTypeNames = getChildFields(queryNode);\n if (!fieldsAndTypeNames) return;\n\n for (let i = fieldsAndTypeNames.length - 1; i >= 0; i -= 1) {\n const { fieldNode } = fieldsAndTypeNames[i];\n\n const { requestFieldPath } = CacheManager._getFieldKeysAndPaths(fieldNode, {\n requestFieldPath: context.operation,\n });\n\n if (this._filterField(fieldNode, fieldPathChecklist, requestFieldPath, context)) {\n deleteChildFields(queryNode, fieldNode);\n }\n }\n\n context.queryFiltered = true;\n }\n\n private async _getCachedResponseData(\n { ast }: RequestData,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<CachedResponseData> {\n const cachedResponseData: CachedResponseData = {\n cacheMetadata: new Map(),\n data: {},\n fieldCount: { missing: 0, total: 0 },\n fieldPathChecklist: new Map(),\n };\n\n const queryNode = getOperationDefinitions(ast, context.operation)[0];\n const fieldsAndTypeNames = getChildFields(queryNode);\n if (!fieldsAndTypeNames) return cachedResponseData;\n\n await Promise.all(\n fieldsAndTypeNames.map(({ fieldNode }) =>\n this._analyzeField(fieldNode, { requestFieldPath: context.operation }, cachedResponseData, options, context),\n ),\n );\n\n cachedResponseData.fieldCount = CacheManager._countFieldPathChecklist(cachedResponseData.fieldPathChecklist);\n return cachedResponseData;\n }\n\n @logCacheQuery()\n private async _getCacheEntry(\n cacheType: CacheTypes,\n hash: string,\n _options: RequestOptions,\n _context: RequestContext,\n ): Promise<ResponseData> {\n try {\n return await this._cache.get(`${cacheType}::${hash}`);\n } catch (errors) {\n return Promise.reject(errors);\n }\n }\n\n private _getPartialQueryResponse(hash: string): PartialQueryResponse | undefined {\n const partialQueryResponse = this._partialQueryResponses.get(hash);\n this._partialQueryResponses.delete(hash);\n return partialQueryResponse;\n }\n\n private _getResponseData(responseData: PlainObjectMap, partialQueryResponse?: PartialQueryResponse): PlainObjectMap {\n if (!partialQueryResponse) return responseData;\n\n return this._mergeObjects(partialQueryResponse.data, responseData);\n }\n\n private async _hasCacheEntry(cacheType: CacheTypes, hash: string): Promise<Cacheability | false> {\n try {\n return await this._cache.has(`${cacheType}::${hash}`);\n } catch (error) {\n return false;\n }\n }\n\n private _isFieldEntity(fieldData: any, { isEntity, possibleTypes }: FieldTypeInfo): boolean {\n if (!get(fieldData, this._typeIDKey, null)) return false;\n if (isEntity) return true;\n if (!possibleTypes.length) return false;\n return possibleTypes.some(type => type.typeName === fieldData.__typename);\n }\n\n private _mergeObjects<T>(obj: T, src: T): T {\n return mergeObjects(obj, src, (_key: string, val: any): string | number | undefined => {\n return isPlainObject(val) && val[this._typeIDKey] ? val[this._typeIDKey] : undefined;\n });\n }\n\n private async _parseFieldDataEntityAndRequestFieldPathCacheEntryData(\n field: FieldNode,\n ancestorKeysAndPaths: AncestorKeysAndPaths,\n { cacheMetadata, dataEntityData, requestFieldPathData }: ResponseDataForCaching,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<void> {\n const keysAndPaths = CacheManager._getFieldKeysAndPaths(field, ancestorKeysAndPaths);\n const { requestFieldCacheKey, requestFieldPath, responseDataPath } = keysAndPaths;\n const fieldData = get(requestFieldPathData, responseDataPath, null);\n if (!isObjectLike(fieldData)) return;\n\n const objectLikeFieldData = fieldData as PlainObjectMap | any[];\n const promises: Promise<void>[] = [];\n\n iterateChildFields(\n field,\n objectLikeFieldData,\n (childField: FieldNode, _typeName: string | undefined, childIndex?: number) => {\n promises.push(\n this._parseFieldDataEntityAndRequestFieldPathCacheEntryData(\n childField,\n { index: childIndex, requestFieldCacheKey, requestFieldPath, responseDataPath },\n { cacheMetadata, dataEntityData, requestFieldPathData },\n options,\n context,\n ),\n );\n },\n );\n\n await Promise.all(promises);\n\n await this._setFieldDataEntityAndRequestFieldPathCacheEntry(\n field,\n keysAndPaths,\n { cacheMetadata, dataEntityData, requestFieldPathData },\n options,\n context,\n );\n }\n\n private async _resolveRequest(\n requestData: RequestData,\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<ResponseData> {\n const dataCaching: Promise<void>[] = [];\n const cacheMetadata = this._buildCacheMetadata(requestData, rawResponseData, options, context);\n const { data } = rawResponseData;\n\n dataCaching.push(\n this._setDataEntityAndRequestFieldPathCacheEntries(\n requestData,\n { cacheMetadata, dataEntityData: cloneDeep(data), requestFieldPathData: cloneDeep(data) },\n options,\n context,\n ),\n );\n\n if (options.awaitDataCaching) await Promise.all(dataCaching);\n\n return { cacheMetadata, data };\n }\n\n @logCacheEntry()\n private async _setCacheEntry(\n cacheType: CacheTypes,\n hash: string,\n value: any,\n cachemapOptions: CachemapOptions,\n _options: RequestOptions,\n _context: RequestContext,\n ): Promise<void> {\n try {\n await this._cache.set(`${cacheType}::${hash}`, cloneDeep(value), cachemapOptions);\n } catch (error) {\n // no catch\n }\n }\n\n private async _setDataEntityAndRequestFieldPathCacheEntries(\n requestData: RequestData,\n responseData: ResponseDataForCaching,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<void> {\n const operationNode = getOperationDefinitions(requestData.ast, context.operation)[0];\n const fieldsAndTypeNames = getChildFields(operationNode);\n if (!fieldsAndTypeNames) return;\n\n await Promise.all(\n fieldsAndTypeNames.map(({ fieldNode }) => {\n return this._parseFieldDataEntityAndRequestFieldPathCacheEntryData(\n fieldNode,\n { requestFieldPath: context.operation },\n responseData,\n options,\n context,\n );\n }),\n );\n }\n\n private async _setDataEntityCacheEntry(\n { responseDataPath }: KeysAndPaths,\n { cacheability, data, fieldTypeInfo }: DataForCachingEntry,\n options: RequestOptions,\n context: RequestContext,\n ) {\n const hasArgsOrDirectives = fieldTypeInfo.hasArguments || fieldTypeInfo.hasDirectives;\n let fieldData = get(data, responseDataPath, null);\n const isEntity = this._isFieldEntity(fieldData, fieldTypeInfo);\n\n if (!isEntity && hasArgsOrDirectives) {\n unset(data, responseDataPath);\n }\n\n if (isEntity) {\n const fieldTypeName = fieldTypeInfo.isEntity ? fieldTypeInfo.typeName : fieldData.__typename;\n const entityDataKey = `${fieldTypeName}::${fieldData[this._typeIDKey]}`;\n const result = await this._checkCacheEntry(DATA_ENTITIES, entityDataKey, options, context);\n\n if (result) {\n fieldData = this._mergeObjects(result.entry, fieldData);\n }\n\n await this._setCacheEntry(\n DATA_ENTITIES,\n entityDataKey,\n fieldData,\n { cacheHeaders: { cacheControl: cacheability.printCacheControl() }, tag: options.tag },\n options,\n context,\n );\n\n set(data, responseDataPath, { __cacheKey: `${DATA_ENTITIES}::${entityDataKey}` });\n }\n }\n\n private async _setDataEntityData(\n cachedFieldData: CachedFieldData,\n { possibleTypes, typeIDValue, typeName }: FieldTypeInfo,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<void> {\n const requestFieldPathDataIDValue = isPlainObject(cachedFieldData.requestFieldPathData)\n ? cachedFieldData.requestFieldPathData[this._typeIDKey]\n : undefined;\n\n const validTypeIDValue = typeIDValue || requestFieldPathDataIDValue;\n if (!validTypeIDValue) return;\n\n const typeNames = [...possibleTypes.map(type => type.typeName), typeName];\n\n const checkResults = await Promise.all(\n typeNames.map(name => this._checkCacheEntry(DATA_ENTITIES, `${name}::${validTypeIDValue}`, options, context)),\n );\n\n const validResults = checkResults.filter(result => !!result) as CheckCacheEntryResult[];\n let validResult: CheckCacheEntryResult | undefined;\n\n if (validResults.length === 1) {\n validResult = validResults[0];\n } else if (validResults.length > 1) {\n validResults.sort(({ cacheability: a }, { cacheability: b }) => a.metadata.ttl - b.metadata.ttl);\n\n validResult = {\n cacheability: validResults[0].cacheability,\n entry: validResults.reduce((obj, { entry }) => this._mergeObjects(obj, entry), {}),\n };\n }\n\n if (validResult) {\n const { cacheability, entry } = validResult;\n if (cacheability && !cachedFieldData.cacheability) cachedFieldData.cacheability = cacheability;\n if (entry) cachedFieldData.dataEntityData = entry;\n }\n }\n\n private _setFieldCacheability(\n field: FieldNode,\n ancestorKeysAndPaths: AncestorKeysAndPaths,\n { cacheMetadata, data }: ResponseData,\n options: RequestOptions,\n context: RequestContext,\n ): void {\n const { requestFieldPath: ancestorRequestFieldPath } = ancestorKeysAndPaths;\n const keysAndPaths = CacheManager._getFieldKeysAndPaths(field, ancestorKeysAndPaths);\n const { requestFieldPath, responseDataPath } = keysAndPaths;\n const fieldData = get(data, responseDataPath, null);\n if (!isObjectLike(fieldData)) return;\n\n const objectLikeFieldData = fieldData as PlainObjectMap | any[];\n this._setFieldTypeCacheDirective(cacheMetadata, { ancestorRequestFieldPath, requestFieldPath }, context);\n\n iterateChildFields(\n field,\n objectLikeFieldData,\n (childField: FieldNode, _typeName: string | undefined, childIndex?: number) => {\n this._setFieldCacheability(\n childField,\n { index: childIndex, requestFieldPath, responseDataPath },\n { cacheMetadata, data },\n options,\n context,\n );\n },\n );\n }\n\n private async _setFieldDataEntityAndRequestFieldPathCacheEntry(\n field: FieldNode,\n keysAndPaths: KeysAndPaths,\n { cacheMetadata, dataEntityData, requestFieldPathData }: ResponseDataForCaching,\n options: RequestOptions,\n context: RequestContext,\n ) {\n const { requestFieldPath } = keysAndPaths;\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath);\n const cacheability = cacheMetadata.get(requestFieldPath);\n if (!fieldTypeInfo || !cacheability) return;\n\n const promises: Promise<void>[] = [];\n\n promises.push(\n this._setRequestFieldPathCacheEntry(\n field,\n keysAndPaths,\n { cacheability, data: requestFieldPathData, fieldTypeInfo },\n options,\n context,\n ),\n );\n\n promises.push(\n this._setDataEntityCacheEntry(\n keysAndPaths,\n { cacheability, data: dataEntityData, fieldTypeInfo },\n options,\n context,\n ),\n );\n\n await Promise.all(promises);\n }\n\n private _setFieldTypeCacheDirective(\n cacheMetadata: CacheMetadata,\n { ancestorRequestFieldPath, requestFieldPath }: { ancestorRequestFieldPath?: string; requestFieldPath: string },\n { fieldTypeMap, operation }: RequestContext,\n ): void {\n if (cacheMetadata.has(requestFieldPath)) return;\n\n const fieldTypeInfo = fieldTypeMap.get(requestFieldPath);\n\n if (fieldTypeInfo && this._typeCacheDirectives[fieldTypeInfo.typeName]) {\n const cacheability = new Cacheability({ cacheControl: this._typeCacheDirectives[fieldTypeInfo.typeName] });\n CacheManager._setCacheMetadata(cacheMetadata, cacheability, requestFieldPath, operation);\n } else if (this._cascadeCacheControl && ancestorRequestFieldPath) {\n CacheManager._setCacheMetadata(\n cacheMetadata,\n cacheMetadata.get(ancestorRequestFieldPath),\n requestFieldPath,\n operation,\n );\n }\n }\n\n @logPartialCompiled()\n private async _setPartialQueryResponse(\n hash: string,\n partialQueryResponse: PartialQueryResponse,\n _options: RequestOptions,\n _context: RequestContext,\n ): Promise<void> {\n this._partialQueryResponses.set(hash, partialQueryResponse);\n }\n\n private async _setQueryResponseCacheEntry(\n hash: string,\n { cacheMetadata, data }: ResponseData,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<void> {\n const dehydratedCacheMetadata = dehydrateCacheMetadata(cacheMetadata);\n const cacheControl = CacheManager._getOperationCacheControl(cacheMetadata, context.operation);\n\n await this._setCacheEntry(\n QUERY_RESPONSES,\n hash,\n { cacheMetadata: dehydratedCacheMetadata, data },\n { cacheHeaders: { cacheControl }, tag: options.tag },\n options,\n context,\n );\n }\n\n private async _setRequestFieldPathCacheEntry(\n field: FieldNode,\n { hashedRequestFieldCacheKey, responseDataPath }: KeysAndPaths,\n { cacheability, data, fieldTypeInfo }: DataForCachingEntry,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<void> {\n const hasArgsOrDirectives = fieldTypeInfo.hasArguments || fieldTypeInfo.hasDirectives;\n let fieldData = get(data, responseDataPath, null);\n const isEntity = this._isFieldEntity(fieldData, fieldTypeInfo);\n\n if (context.operation === QUERY && (isEntity || hasArgsOrDirectives)) {\n const result = await this._checkCacheEntry(REQUEST_FIELD_PATHS, hashedRequestFieldCacheKey, options, context);\n\n if (result) {\n fieldData = this._mergeObjects(result.entry, fieldData);\n }\n\n await this._setCacheEntry(\n REQUEST_FIELD_PATHS,\n hashedRequestFieldCacheKey,\n fieldData,\n { cacheHeaders: { cacheControl: cacheability.printCacheControl() }, tag: options.tag },\n options,\n context,\n );\n\n if (hasChildFields(field)) {\n if (isEntity) {\n set(data, responseDataPath, { __cacheKey: `${REQUEST_FIELD_PATHS}::${hashedRequestFieldCacheKey}` });\n } else {\n unset(data, responseDataPath);\n }\n }\n }\n }\n\n private async _setRequestFieldPathData(\n cachedFieldData: CachedFieldData,\n hash: string,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<void> {\n const checkResult = await this._checkCacheEntry(REQUEST_FIELD_PATHS, hash, options, context);\n\n if (checkResult) {\n const { cacheability, entry } = checkResult;\n if (cacheability) cachedFieldData.cacheability = cacheability;\n if (entry) cachedFieldData.requestFieldPathData = entry;\n }\n }\n}\n\nexport default function init(userOptions: UserOptions): CacheManagerInit {\n if (!isPlainObject(userOptions)) {\n throw new TypeError(\"@graphql-box/cache-manager expected userOptions to be a plain object.\");\n }\n\n return (clientOptions: ClientOptions) => CacheManager.init({ ...clientOptions, ...userOptions });\n}\n","import { RequestContext } from \"@graphql-box/core\";\nimport { CACHE_ENTRY_QUERIED } from \"../../consts\";\n\nexport default function logCacheQuery() {\n return (\n _target: any,\n _propertyName: string,\n descriptor: TypedPropertyDescriptor<(...args: any[]) => Promise<any>>,\n ): void => {\n const method = descriptor.value;\n if (!method) return;\n\n descriptor.value = async function descriptorValue(...args: any[]): Promise<any> {\n try {\n return new Promise(async resolve => {\n const { debugManager, ...otherContext } = args[3] as RequestContext;\n\n if (!debugManager) {\n resolve(await method.apply(this, args));\n return;\n }\n\n const startTime = debugManager.now();\n const result = await method.apply(this, args);\n const endTime = debugManager.now();\n const duration = endTime - startTime;\n resolve(result);\n\n debugManager.emit(CACHE_ENTRY_QUERIED, {\n cacheType: args[0],\n context: otherContext,\n hash: args[1],\n options: args[2],\n result,\n stats: { duration, endTime, startTime },\n });\n });\n } catch (error) {\n return Promise.reject(error);\n }\n };\n };\n}\n","import { RequestContext } from \"@graphql-box/core\";\nimport { CACHE_ENTRY_ADDED } from \"../../consts\";\n\nexport default function logCacheEntry() {\n return (\n _target: any,\n _propertyName: string,\n descriptor: TypedPropertyDescriptor<(...args: any[]) => Promise<any>>,\n ): void => {\n const method = descriptor.value;\n if (!method) return;\n\n descriptor.value = async function descriptorValue(...args: any[]): Promise<any> {\n return new Promise(async resolve => {\n const { debugManager, ...otherContext } = args[5] as RequestContext;\n\n if (!debugManager) {\n await method.apply(this, args);\n resolve();\n return;\n }\n\n const startTime = debugManager.now();\n await method.apply(this, args);\n const endTime = debugManager.now();\n const duration = endTime - startTime;\n resolve();\n\n debugManager.emit(CACHE_ENTRY_ADDED, {\n cachemapOptions: args[3],\n cacheType: args[0],\n context: otherContext,\n hash: args[1],\n options: args[4],\n stats: { duration, endTime, startTime },\n value: args[2],\n });\n });\n };\n };\n}\n","import { RequestContext } from \"@graphql-box/core\";\nimport { PARTIAL_QUERY_COMPILED } from \"../../consts\";\n\nexport default function logPartialCompiled() {\n return (\n _target: any,\n _propertyName: string,\n descriptor: TypedPropertyDescriptor<(...args: any[]) => Promise<any>>,\n ): void => {\n const method = descriptor.value;\n if (!method) return;\n\n descriptor.value = async function descriptorValue(...args: any[]): Promise<any> {\n return new Promise(async resolve => {\n const { debugManager, ...otherContext } = args[3] as RequestContext;\n\n if (!debugManager) {\n await method.apply(this, args);\n resolve();\n return;\n }\n\n const startTime = debugManager.now();\n await method.apply(this, args);\n const endTime = debugManager.now();\n const duration = endTime - startTime;\n resolve();\n\n debugManager.emit(PARTIAL_QUERY_COMPILED, {\n context: otherContext,\n hash: args[0],\n options: args[2],\n partialQueryResponse: args[1],\n stats: { duration, endTime, startTime },\n });\n });\n };\n };\n}\n"],"names":["CACHE_ENTRY_ADDED","CACHE_ENTRY_QUERIED","PARTIAL_QUERY_COMPILED","CacheManager","_target","_propertyName","descriptor","method","value","args","Promise","resolve","debugManager","otherContext","apply","_this","startTime","now","result","endTime","duration","emit","cacheType","context","hash","options","stats","reject","cachemapOptions","partialQueryResponse","Map","cache","cascadeCacheControl","fallbackOperationCacheability","typeCacheDirectives","typeIDKey","_cache","_cascadeCacheControl","_fallbackOperationCacheability","_typeCacheDirectives","_typeIDKey","this","requestData","ast","TypeError","_getCachedResponseData","cachedResponseData","cacheMetadata","data","fieldCount","missing","total","updated","dataCaching","_setQueryResponseCacheEntry","awaitDataCaching","response","_setPartialQueryResponse","_filterQuery","request","print","hashRequest","_checkCacheEntry","QUERY_RESPONSES","entry","rehydrateCacheMetadata","_partialQueryResponses","delete","updatedRequestData","rawResponseData","_resolveRequest","queryFiltered","push","_getPartialQueryResponse","responseCacheMetadata","_getResponseCacheMetadata","responseData","_getResponseData","all","field","cachedAncestorFieldData","hasChildFields","_analyzeParentField","_analyzeLeafField","keysAndPaths","_getFieldKeysAndPaths","hashedRequestFieldCacheKey","propNameOrIndex","requestFieldCacheKey","requestFieldPath","fieldTypeInfo","fieldTypeMap","get","ancestorDataEntityData","dataEntityData","ancestorRequestFieldPathData","requestFieldPathData","typeName","cachedFieldData","_getFieldDataFromAncestor","_isRequestFieldPath","_setRequestFieldPathData","_isDataEntity","_setDataEntityData","cacheability","_isUndefined","undefined","_mergeObjects","_setCachedResponseData","dataTypeName","_get","TYPE_NAME_KEY","fieldTypeName","_isObjectLike","promises","iterateChildFields","childField","childTypeName","childIndex","_analyzeField","index","otherProps","_createCacheMetadata","queryNode","getOperationDefinitions","operation","fieldsAndTypeNames","getChildFields","forEach","fieldNode","_this2","_setFieldCacheability","_hasCacheEntry","_isValid","_getCacheEntry","_cacheMetadata","headers","cacheControl","Cacheability","set","fieldPathChecklist","ancestorRequestFieldPath","i","length","childFieldName","getName","_checkFieldPathChecklist","hasData","typeUnused","_filterField","deleteChildFields","_filterInlineFragments","_filterIDsAndTypeNames","fieldNames","map","every","name","_this3","inlineFragments","getInlineFragments","filtered","fragment","deleteInlineFragments","_this4","_this5","_countFieldPathChecklist","_options","_context","has","fieldData","isEntity","possibleTypes","some","type","__typename","obj","src","mergeObjects","_key","val","_isPlainObject","_this6","ancestorKeysAndPaths","responseDataPath","_typeName","_this7","_parseFieldDataEntityAndRequestFieldPathCacheEntryData","_setFieldDataEntityAndRequestFieldPathCacheEntry","_buildCacheMetadata","_setDataEntityAndRequestFieldPathCacheEntries","_cloneDeep","operationNode","_this8","hasArgsOrDirectives","hasArguments","hasDirectives","_isFieldEntity","entityDataKey","DATA_ENTITIES","_setCacheEntry","cacheHeaders","printCacheControl","tag","__cacheKey","typeIDValue","requestFieldPathDataIDValue","validTypeIDValue","typeNames","_this9","checkResults","validResults","filter","validResult","sort","a","b","metadata","ttl","reduce","objectLikeFieldData","_setFieldTypeCacheDirective","_this10","_setRequestFieldPathCacheEntry","_setDataEntityCacheEntry","_setCacheMetadata","dehydratedCacheMetadata","dehydrateCacheMetadata","_getOperationCacheControl","QUERY","REQUEST_FIELD_PATHS","checkResult","errors","_setFieldPathChecklist","_setCachedData","key","path","paths","join","directives","_isNumber","JSON","stringify","_buildKey","fieldPathChecklistValues","checklistValues","ancestorFieldData","updatedRequestFieldCacheKey","_buildRequestFieldCacheKey","getArguments","getDirectives","fieldAliasOrName","getAlias","updatedRequestFieldPath","updatedResponseDataPath","checkTTL","objectLikeData","_isArray","operationCacheability","userOptions","clientOptions","init"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../cache-manager/src/consts/index.ts","../cache-manager/src/helpers/deriveOpCacheability.ts","../cache-manager/src/main/index.ts","../cache-manager/src/debug/log-cache-query/index.ts","../cache-manager/src/debug/log-cache-entry/index.ts","../cache-manager/src/debug/log-partial-compiled/index.ts"],"sourcesContent":["export const METADATA = \"metadata\";\nexport const CACHE_CONTROL = \"cacheControl\";\nexport const NO_CACHE = \"noCache\";\n\nexport const HEADER_CACHE_CONTROL = \"cache-control\";\nexport const HEADER_NO_CACHE = \"no-cache\";\n\nexport const CACHE_ENTRY_ADDED = \"cache_entry_added\";\nexport const CACHE_ENTRY_QUERIED = \"cache_entry_queried\";\nexport const PARTIAL_QUERY_COMPILED = \"partial_query_compiled\";\n","import { DehydratedCacheMetadata } from \"@graphql-box/core\";\nimport Cacheability from \"cacheability\";\nimport { isEmpty } from \"lodash\";\nimport { HEADER_CACHE_CONTROL } from \"../consts\";\n\nexport type Params = {\n _cacheMetadata?: DehydratedCacheMetadata;\n fallback: string;\n headers?: Headers;\n};\n\nexport default ({ _cacheMetadata, fallback, headers }: Params): Cacheability => {\n if (_cacheMetadata && !isEmpty(_cacheMetadata)) {\n const [first, ...rest] = Object.values(_cacheMetadata);\n\n return new Cacheability({\n metadata: rest.reduce((acc, metadata) => {\n if (metadata.ttl < acc.ttl) {\n return metadata;\n }\n\n return acc;\n }, first),\n });\n }\n\n if (headers && headers.has(HEADER_CACHE_CONTROL)) {\n return new Cacheability({ headers });\n }\n\n return new Cacheability({ cacheControl: fallback });\n};\n","import Cachemap from \"@cachemap/core\";\nimport {\n CacheMetadata,\n CacheTypes,\n DATA_ENTITIES,\n FieldTypeInfo,\n PlainObjectMap,\n PlainObjectStringMap,\n QUERY,\n QUERY_RESPONSES,\n REQUEST_FIELD_PATHS,\n RawResponseDataWithMaybeCacheMetadata,\n RequestContext,\n RequestData,\n RequestOptions,\n ResponseData,\n TYPE_NAME_KEY,\n} from \"@graphql-box/core\";\nimport {\n dehydrateCacheMetadata,\n deleteChildFields,\n deleteInlineFragments,\n getAlias,\n getArguments,\n getChildFields,\n getDirectives,\n getInlineFragments,\n getName,\n getOperationDefinitions,\n hasChildFields,\n hashRequest,\n iterateChildFields,\n mergeObjects,\n rehydrateCacheMetadata,\n} from \"@graphql-box/helpers\";\nimport Cacheability from \"cacheability\";\nimport { FieldNode, print } from \"graphql\";\nimport { cloneDeep, get, isArray, isNumber, isObjectLike, isPlainObject, isUndefined, set, unset } from \"lodash\";\nimport { CACHE_CONTROL, HEADER_NO_CACHE, METADATA, NO_CACHE } from \"../consts\";\nimport { logCacheEntry, logCacheQuery, logPartialCompiled } from \"../debug\";\nimport {\n AnalyzeQueryResult,\n AncestorKeysAndPaths,\n CacheManagerDef,\n CacheManagerInit,\n CachedAncestorFieldData,\n CachedFieldData,\n CachedResponseData,\n CachemapOptions,\n CheckCacheEntryResult,\n CheckFieldPathChecklistResult,\n ClientOptions,\n ConstructorOptions,\n DataForCachingEntry,\n FieldCount,\n FieldPathChecklist,\n FieldPathChecklistValue,\n InitOptions,\n KeysAndPaths,\n KeysAndPathsOptions,\n MergedCachedFieldData,\n PartialQueryResponse,\n PartialQueryResponses,\n QueryResponseCacheEntry,\n ResponseDataForCaching,\n TypeNames,\n UserOptions,\n} from \"../defs\";\nimport deriveOpCacheability from \"../helpers/deriveOpCacheability\";\n\nexport class CacheManager implements CacheManagerDef {\n public static async init(options: InitOptions): Promise<CacheManager> {\n const errors: TypeError[] = [];\n\n if (!options.cache) {\n errors.push(new TypeError(\"@graphql-box/cache-manager expected options.cache.\"));\n }\n\n if (!!options.typeCacheDirectives && !isPlainObject(options.typeCacheDirectives)) {\n const message = \"@graphql-box/cache-manager expected options.typeCacheDirectives to be a plain object.\";\n errors.push(new TypeError(message));\n }\n\n if (errors.length) return Promise.reject(errors);\n\n return new CacheManager(options);\n }\n\n private static _analyzeLeafField(\n field: FieldNode,\n cachedAncestorFieldData: CachedAncestorFieldData,\n { data, fieldPathChecklist }: CachedResponseData,\n _options: RequestOptions,\n _context: RequestContext,\n ): void {\n const keysAndPaths = CacheManager._getFieldKeysAndPaths(field, cachedAncestorFieldData);\n const { propNameOrIndex, requestFieldPath } = keysAndPaths;\n const { dataEntityData, requestFieldPathData, typeName } = cachedAncestorFieldData;\n\n const cachedFieldData =\n CacheManager._getFieldDataFromAncestor(dataEntityData, propNameOrIndex) ||\n CacheManager._getFieldDataFromAncestor(requestFieldPathData, propNameOrIndex);\n\n const typeNames = {\n dataTypeName: dataEntityData.__typename || requestFieldPathData.__typename,\n fieldTypeName: typeName,\n };\n\n CacheManager._setFieldPathChecklist(fieldPathChecklist, { data: cachedFieldData }, requestFieldPath, typeNames);\n CacheManager._setCachedData(data, { data: cachedFieldData }, propNameOrIndex);\n }\n\n private static _buildKey(key: string | number, path: string): string {\n const paths: (string | number)[] = [];\n if (path.length) paths.push(path);\n paths.push(key);\n return paths.join(\".\");\n }\n\n private static _buildRequestFieldCacheKey(\n name: string,\n requestFieldCacheKey: string,\n args?: PlainObjectMap,\n directives?: PlainObjectMap,\n index?: number,\n ): string {\n let key = `${isNumber(index) ? index : name}`;\n if (args) key = `${key}(${JSON.stringify(args)})`;\n if (directives) key = `${key}(${JSON.stringify(directives)})`;\n return CacheManager._buildKey(key, requestFieldCacheKey);\n }\n\n private static _checkFieldPathChecklist(\n fieldPathChecklistValues: FieldPathChecklistValue[] | undefined,\n fieldTypeName: string | undefined,\n ): CheckFieldPathChecklistResult {\n if (!fieldPathChecklistValues || !fieldPathChecklistValues.length) {\n return { hasData: false, typeUnused: !!fieldTypeName };\n }\n\n if (fieldPathChecklistValues.length === 1) {\n const { hasData, typeName } = fieldPathChecklistValues[0];\n const typeUnused = !typeName ? undefined : typeName !== fieldTypeName;\n return { hasData, typeUnused };\n }\n\n return {\n hasData: fieldPathChecklistValues.some(({ hasData, typeName }) => typeName === fieldTypeName && hasData),\n typeUnused: !fieldPathChecklistValues.every(({ typeName }) => typeName === fieldTypeName),\n };\n }\n\n private static _countFieldPathChecklist(fieldPathChecklist: FieldPathChecklist): FieldCount {\n const fieldCount: FieldCount = { missing: 0, total: 0 };\n\n fieldPathChecklist.forEach(checklistValues => {\n fieldCount.total += checklistValues.length;\n const missing = checklistValues.filter(({ hasData }) => !hasData);\n fieldCount.missing += missing.length;\n });\n\n return fieldCount;\n }\n\n private static _getFieldDataFromAncestor(ancestorFieldData: any, propNameOrIndex: string | number): any {\n return isObjectLike(ancestorFieldData) ? ancestorFieldData[propNameOrIndex] : undefined;\n }\n\n private static _getFieldKeysAndPaths(field: FieldNode, options: KeysAndPathsOptions): KeysAndPaths {\n const { index, requestFieldCacheKey = \"\", requestFieldPath = \"\", responseDataPath = \"\" } = options;\n const name = getName(field) as string;\n\n const updatedRequestFieldCacheKey = CacheManager._buildRequestFieldCacheKey(\n name,\n requestFieldCacheKey,\n getArguments(field),\n getDirectives(field),\n index,\n );\n\n const fieldAliasOrName = getAlias(field) || name;\n\n const updatedRequestFieldPath = isNumber(index)\n ? requestFieldPath\n : CacheManager._buildKey(fieldAliasOrName, requestFieldPath);\n\n const propNameOrIndex = isNumber(index) ? index : fieldAliasOrName;\n const updatedResponseDataPath = CacheManager._buildKey(propNameOrIndex, responseDataPath);\n\n return {\n hashedRequestFieldCacheKey: hashRequest(updatedRequestFieldCacheKey),\n propNameOrIndex,\n requestFieldCacheKey: updatedRequestFieldCacheKey,\n requestFieldPath: updatedRequestFieldPath,\n responseDataPath: updatedResponseDataPath,\n };\n }\n\n private static _getOperationCacheControl(cacheMetadata: CacheMetadata | undefined, operation: string): string {\n const defaultCacheControl = HEADER_NO_CACHE;\n if (!cacheMetadata) return defaultCacheControl;\n\n const cacheability = cacheMetadata.get(operation);\n return cacheability ? cacheability.printCacheControl() : defaultCacheControl;\n }\n\n private static _getResponseCacheMetadata(\n cacheMetadata: CacheMetadata,\n partialQueryResponse?: PartialQueryResponse,\n ): CacheMetadata {\n if (!partialQueryResponse) return cacheMetadata;\n\n return new Map([...partialQueryResponse.cacheMetadata, ...cacheMetadata]);\n }\n\n private static _isDataEntity(fieldTypeInfo?: FieldTypeInfo): boolean {\n if (!fieldTypeInfo) return false;\n\n const { isEntity, possibleTypes } = fieldTypeInfo;\n return isEntity || possibleTypes.some(type => !!type.isEntity);\n }\n\n private static _isRequestFieldPath(fieldTypeInfo?: FieldTypeInfo): boolean {\n return (\n !!fieldTypeInfo &&\n (this._isDataEntity(fieldTypeInfo) || fieldTypeInfo.hasArguments || fieldTypeInfo.hasDirectives)\n );\n }\n\n private static _isValid(cacheability: Cacheability): boolean {\n const noCache = get(cacheability, [METADATA, CACHE_CONTROL, NO_CACHE], false);\n return !noCache && cacheability.checkTTL();\n }\n\n private static _setCachedData(\n requestData: PlainObjectMap,\n { data }: MergedCachedFieldData,\n propNameOrIndex: string | number,\n ): void {\n if (!isObjectLike(data) && !isUndefined(data)) {\n requestData[propNameOrIndex] = data as string | number | boolean | null;\n } else if (isObjectLike(data)) {\n const objectLikeData = data as PlainObjectMap | any[];\n requestData[propNameOrIndex] = isArray(objectLikeData) ? [] : {};\n }\n }\n\n private static _setCachedResponseData(\n cachedFieldData: MergedCachedFieldData,\n { cacheMetadata, data, fieldPathChecklist }: CachedResponseData,\n { propNameOrIndex, requestFieldPath }: KeysAndPaths,\n typeNames: TypeNames,\n _options: RequestOptions,\n { operation }: RequestContext,\n ) {\n CacheManager._setCacheMetadata(cacheMetadata, cachedFieldData.cacheability, requestFieldPath, operation);\n CacheManager._setFieldPathChecklist(fieldPathChecklist, cachedFieldData, requestFieldPath, typeNames);\n CacheManager._setCachedData(data, cachedFieldData, propNameOrIndex);\n }\n\n private static _setCacheMetadata(\n cacheMetadata: CacheMetadata,\n cacheability: Cacheability | undefined,\n requestFieldPath: string,\n operation: string,\n ): void {\n if (!cacheability) return;\n\n cacheMetadata.set(requestFieldPath, cacheability);\n const operationCacheability = cacheMetadata.get(operation);\n\n if (!operationCacheability || operationCacheability.metadata.ttl > cacheability.metadata.ttl) {\n cacheMetadata.set(operation, cacheability);\n }\n }\n\n private static _setFieldPathChecklist(\n fieldPathChecklist: FieldPathChecklist,\n { data }: MergedCachedFieldData,\n requestFieldPath: string,\n { dataTypeName, fieldTypeName }: TypeNames,\n ): void {\n if (isUndefined(fieldTypeName)) {\n if (fieldPathChecklist.has(requestFieldPath)) return;\n fieldPathChecklist.set(requestFieldPath, [{ hasData: !isUndefined(data) }]);\n return;\n }\n\n if (dataTypeName !== fieldTypeName) return;\n\n const entry = fieldPathChecklist.get(requestFieldPath);\n const checklistValues = entry ? (entry as FieldPathChecklistValue[]) : [];\n if (checklistValues.some(({ typeName }) => typeName === dataTypeName)) return;\n\n fieldPathChecklist.set(requestFieldPath, [\n ...checklistValues,\n { hasData: !isUndefined(data), typeName: dataTypeName as string },\n ]);\n }\n\n private _cache: Cachemap;\n private _cascadeCacheControl: boolean;\n private _fallbackOperationCacheability: string;\n private _partialQueryResponses: PartialQueryResponses = new Map();\n private _typeCacheDirectives: PlainObjectStringMap;\n private _typeIDKey: string;\n\n constructor(options: ConstructorOptions) {\n const { cache, cascadeCacheControl, fallbackOperationCacheability, typeCacheDirectives, typeIDKey } = options;\n this._cache = cache;\n this._cascadeCacheControl = cascadeCacheControl || false;\n this._fallbackOperationCacheability = fallbackOperationCacheability || NO_CACHE;\n this._typeCacheDirectives = typeCacheDirectives || {};\n this._typeIDKey = typeIDKey;\n }\n\n get cache(): Cachemap {\n return this._cache;\n }\n\n public async analyzeQuery(\n requestData: RequestData,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<AnalyzeQueryResult> {\n const { ast, hash } = requestData;\n\n if (!ast) {\n return Promise.reject(new TypeError(\"@graphql-box/cache-manager expected an AST.\"));\n }\n\n const cachedResponseData = await this._getCachedResponseData(requestData, options, context);\n\n const { cacheMetadata, data, fieldCount } = cachedResponseData;\n if (fieldCount.missing === fieldCount.total) return { updated: requestData };\n\n if (!fieldCount.missing) {\n const dataCaching = this._setQueryResponseCacheEntry(hash, { cacheMetadata, data }, options, context);\n if (options.awaitDataCaching) await dataCaching;\n\n return { response: { cacheMetadata, data } };\n }\n\n this._setPartialQueryResponse(hash, { cacheMetadata, data }, options, context);\n this._filterQuery(requestData, cachedResponseData, context);\n const request = print(ast);\n return { updated: { ast, hash: hashRequest(request), request } };\n }\n\n public async checkCacheEntry(\n cacheType: CacheTypes,\n hash: string,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<CheckCacheEntryResult | false> {\n return this._checkCacheEntry(cacheType, hash, options, context);\n }\n\n public async checkQueryResponseCacheEntry(\n hash: string,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<ResponseData | false> {\n const result = await this._checkCacheEntry(QUERY_RESPONSES, hash, options, context);\n\n if (!result) return false;\n\n const { cacheMetadata, data } = result.entry as QueryResponseCacheEntry;\n\n return {\n cacheMetadata: rehydrateCacheMetadata(cacheMetadata),\n data,\n };\n }\n\n public deletePartialQueryResponse(hash: string): void {\n this._partialQueryResponses.delete(hash);\n }\n\n public async resolveQuery(\n requestData: RequestData,\n updatedRequestData: RequestData,\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<ResponseData> {\n const dataCaching: Promise<void>[] = [];\n const { cacheMetadata, data } = await this._resolveRequest(updatedRequestData, rawResponseData, options, context);\n\n let partialQueryResponse: PartialQueryResponse | undefined;\n\n if (context.queryFiltered) {\n dataCaching.push(\n this._setQueryResponseCacheEntry(updatedRequestData.hash, { cacheMetadata, data }, options, context),\n );\n\n partialQueryResponse = this._getPartialQueryResponse(requestData.hash);\n }\n\n const responseCacheMetadata = CacheManager._getResponseCacheMetadata(cacheMetadata, partialQueryResponse);\n const responseData = this._getResponseData(data, partialQueryResponse);\n\n dataCaching.push(\n this._setQueryResponseCacheEntry(\n requestData.hash,\n { cacheMetadata: responseCacheMetadata, data: responseData },\n options,\n context,\n ),\n );\n\n if (options.awaitDataCaching) await Promise.all(dataCaching);\n\n return { cacheMetadata: responseCacheMetadata, data: responseData };\n }\n\n public async resolveRequest(\n requestData: RequestData,\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<ResponseData> {\n return this._resolveRequest(requestData, rawResponseData, options, context);\n }\n\n private async _analyzeField(\n field: FieldNode,\n cachedAncestorFieldData: CachedAncestorFieldData,\n cachedResponseData: CachedResponseData,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<void> {\n if (hasChildFields(field)) {\n await this._analyzeParentField(field, cachedAncestorFieldData, cachedResponseData, options, context);\n } else {\n await CacheManager._analyzeLeafField(field, cachedAncestorFieldData, cachedResponseData, options, context);\n }\n }\n\n private async _analyzeParentField(\n field: FieldNode,\n cachedAncestorFieldData: CachedAncestorFieldData,\n cachedResponseData: CachedResponseData,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<void> {\n const keysAndPaths = CacheManager._getFieldKeysAndPaths(field, cachedAncestorFieldData);\n const { hashedRequestFieldCacheKey, propNameOrIndex, requestFieldCacheKey, requestFieldPath } = keysAndPaths;\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath);\n\n const {\n dataEntityData: ancestorDataEntityData,\n requestFieldPathData: ancestorRequestFieldPathData,\n typeName,\n } = cachedAncestorFieldData;\n\n const cachedFieldData: CachedFieldData = {\n dataEntityData: CacheManager._getFieldDataFromAncestor(ancestorDataEntityData, propNameOrIndex),\n requestFieldPathData: CacheManager._getFieldDataFromAncestor(ancestorRequestFieldPathData, propNameOrIndex),\n };\n\n if (CacheManager._isRequestFieldPath(fieldTypeInfo)) {\n await this._setRequestFieldPathData(cachedFieldData, hashedRequestFieldCacheKey, options, context);\n }\n\n if (CacheManager._isDataEntity(fieldTypeInfo)) {\n await this._setDataEntityData(cachedFieldData, fieldTypeInfo as FieldTypeInfo, options, context);\n }\n\n const { cacheability, dataEntityData, requestFieldPathData } = cachedFieldData;\n\n const data =\n !isUndefined(requestFieldPathData) || !isUndefined(dataEntityData)\n ? this._mergeObjects(requestFieldPathData, dataEntityData)\n : undefined;\n\n CacheManager._setCachedResponseData(\n { cacheability, data },\n cachedResponseData,\n keysAndPaths,\n { dataTypeName: get(data, TYPE_NAME_KEY), fieldTypeName: typeName },\n options,\n context,\n );\n\n if (!isObjectLike(data)) return;\n\n const objectLikeData = data as PlainObjectMap | any[];\n const promises: Promise<void>[] = [];\n\n iterateChildFields(\n field,\n objectLikeData,\n (childField: FieldNode, childTypeName: string | undefined, childIndex?: number) => {\n promises.push(\n this._analyzeField(\n childField,\n { index: childIndex, requestFieldCacheKey, requestFieldPath, typeName: childTypeName, ...cachedFieldData },\n { ...cachedResponseData, data: cachedResponseData.data[propNameOrIndex] },\n options,\n context,\n ),\n );\n },\n );\n\n await Promise.all(promises);\n }\n\n private _buildCacheMetadata(\n { ast }: RequestData,\n { data, ...otherProps }: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: RequestContext,\n ): CacheMetadata {\n const cacheMetadata = this._createCacheMetadata({ data, ...otherProps }, context);\n const queryNode = getOperationDefinitions(ast, context.operation)[0];\n const fieldsAndTypeNames = getChildFields(queryNode);\n if (!fieldsAndTypeNames) return cacheMetadata;\n\n fieldsAndTypeNames.forEach(({ fieldNode }) =>\n this._setFieldCacheability(\n fieldNode,\n { requestFieldPath: context.operation },\n { cacheMetadata, data },\n options,\n context,\n ),\n );\n\n return cacheMetadata;\n }\n\n private async _checkCacheEntry(\n cacheType: CacheTypes,\n hash: string,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<CheckCacheEntryResult | false> {\n try {\n const cacheability = await this._hasCacheEntry(cacheType, hash);\n\n if (!cacheability || !CacheManager._isValid(cacheability)) return false;\n\n const entry = await this._getCacheEntry(cacheType, hash, options, context);\n\n if (!entry) return false;\n\n return { cacheability, entry };\n } catch (error) {\n return false;\n }\n }\n\n private _createCacheMetadata(\n { _cacheMetadata, headers }: RawResponseDataWithMaybeCacheMetadata,\n { operation }: RequestContext,\n ): CacheMetadata {\n const cacheMetadata = new Map();\n\n const cacheability = deriveOpCacheability({\n _cacheMetadata,\n fallback: this._fallbackOperationCacheability,\n headers,\n });\n\n cacheMetadata.set(operation, cacheability);\n\n if (_cacheMetadata) {\n rehydrateCacheMetadata(_cacheMetadata, cacheMetadata);\n }\n\n return cacheMetadata;\n }\n\n private _filterField(\n field: FieldNode,\n fieldPathChecklist: FieldPathChecklist,\n ancestorRequestFieldPath: string,\n context: RequestContext,\n ): boolean {\n const fieldsAndTypeNames = getChildFields(field);\n if (!fieldsAndTypeNames) return false;\n\n for (let i = fieldsAndTypeNames.length - 1; i >= 0; i -= 1) {\n const { fieldNode: childField, typeName: childTypeName } = fieldsAndTypeNames[i];\n const childFieldName = getName(childField);\n\n if (childFieldName === this._typeIDKey || childFieldName === TYPE_NAME_KEY) continue;\n\n const { requestFieldPath } = CacheManager._getFieldKeysAndPaths(childField, {\n requestFieldPath: ancestorRequestFieldPath,\n });\n\n const { hasData, typeUnused } = CacheManager._checkFieldPathChecklist(\n fieldPathChecklist.get(requestFieldPath),\n childTypeName,\n );\n\n if (hasData || typeUnused) {\n if (!hasChildFields(childField)) {\n deleteChildFields(field, childField);\n } else if (this._filterField(childField, fieldPathChecklist, requestFieldPath, context)) {\n deleteChildFields(field, childField);\n }\n }\n }\n\n this._filterInlineFragments(field);\n this._filterIDsAndTypeNames(field);\n return !hasChildFields(field);\n }\n\n private _filterIDsAndTypeNames(field: FieldNode): boolean {\n const fieldsAndTypeNames = getChildFields(field);\n if (!fieldsAndTypeNames || fieldsAndTypeNames.length > 3) return false;\n\n const fieldNames = fieldsAndTypeNames.map(({ fieldNode }) => getName(fieldNode) as string);\n\n if (fieldNames.length === 2 && fieldNames.every(name => name === this._typeIDKey || name === TYPE_NAME_KEY)) {\n deleteChildFields(\n field,\n fieldsAndTypeNames.map(({ fieldNode }) => fieldNode),\n );\n\n return true;\n }\n\n if ((fieldNames.length === 1 && fieldNames[0] === this._typeIDKey) || fieldNames[0] === TYPE_NAME_KEY) {\n const { fieldNode } = fieldsAndTypeNames[0];\n deleteChildFields(field, fieldNode);\n return true;\n }\n\n return false;\n }\n\n private _filterInlineFragments(field: FieldNode): boolean {\n const inlineFragments = getInlineFragments(field);\n let filtered = false;\n\n inlineFragments.forEach(fragment => {\n const fieldsAndTypeNames = getChildFields(fragment);\n\n if (!fieldsAndTypeNames || !fieldsAndTypeNames.length) {\n deleteInlineFragments(field, fragment);\n filtered = true;\n return;\n }\n\n if (fieldsAndTypeNames.length === 1) {\n const { fieldNode } = fieldsAndTypeNames[0];\n\n if (getName(fieldNode) === this._typeIDKey) {\n deleteInlineFragments(field, fragment);\n filtered = true;\n }\n }\n });\n\n return filtered;\n }\n\n private _filterQuery(\n { ast }: RequestData,\n { fieldPathChecklist }: CachedResponseData,\n context: RequestContext,\n ): void {\n const queryNode = getOperationDefinitions(ast, context.operation)[0];\n const fieldsAndTypeNames = getChildFields(queryNode);\n if (!fieldsAndTypeNames) return;\n\n for (let i = fieldsAndTypeNames.length - 1; i >= 0; i -= 1) {\n const { fieldNode } = fieldsAndTypeNames[i];\n\n const { requestFieldPath } = CacheManager._getFieldKeysAndPaths(fieldNode, {\n requestFieldPath: context.operation,\n });\n\n if (this._filterField(fieldNode, fieldPathChecklist, requestFieldPath, context)) {\n deleteChildFields(queryNode, fieldNode);\n }\n }\n\n context.queryFiltered = true;\n }\n\n private async _getCachedResponseData(\n { ast }: RequestData,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<CachedResponseData> {\n const cachedResponseData: CachedResponseData = {\n cacheMetadata: new Map(),\n data: {},\n fieldCount: { missing: 0, total: 0 },\n fieldPathChecklist: new Map(),\n };\n\n const queryNode = getOperationDefinitions(ast, context.operation)[0];\n const fieldsAndTypeNames = getChildFields(queryNode);\n if (!fieldsAndTypeNames) return cachedResponseData;\n\n await Promise.all(\n fieldsAndTypeNames.map(({ fieldNode }) =>\n this._analyzeField(fieldNode, { requestFieldPath: context.operation }, cachedResponseData, options, context),\n ),\n );\n\n cachedResponseData.fieldCount = CacheManager._countFieldPathChecklist(cachedResponseData.fieldPathChecklist);\n return cachedResponseData;\n }\n\n @logCacheQuery()\n private async _getCacheEntry(\n cacheType: CacheTypes,\n hash: string,\n _options: RequestOptions,\n _context: RequestContext,\n ): Promise<ResponseData> {\n try {\n return await this._cache.get(`${cacheType}::${hash}`);\n } catch (errors) {\n return Promise.reject(errors);\n }\n }\n\n private _getPartialQueryResponse(hash: string): PartialQueryResponse | undefined {\n const partialQueryResponse = this._partialQueryResponses.get(hash);\n this._partialQueryResponses.delete(hash);\n return partialQueryResponse;\n }\n\n private _getResponseData(responseData: PlainObjectMap, partialQueryResponse?: PartialQueryResponse): PlainObjectMap {\n if (!partialQueryResponse) return responseData;\n\n return this._mergeObjects(partialQueryResponse.data, responseData);\n }\n\n private async _hasCacheEntry(cacheType: CacheTypes, hash: string): Promise<Cacheability | false> {\n try {\n return await this._cache.has(`${cacheType}::${hash}`);\n } catch (error) {\n return false;\n }\n }\n\n private _isFieldEntity(fieldData: any, { isEntity, possibleTypes }: FieldTypeInfo): boolean {\n if (!get(fieldData, this._typeIDKey, null)) return false;\n if (isEntity) return true;\n if (!possibleTypes.length) return false;\n return possibleTypes.some(type => type.typeName === fieldData.__typename);\n }\n\n private _mergeObjects<T>(obj: T, src: T): T {\n return mergeObjects(obj, src, (_key: string, val: any): string | number | undefined => {\n return isPlainObject(val) && val[this._typeIDKey] ? val[this._typeIDKey] : undefined;\n });\n }\n\n private async _parseFieldDataEntityAndRequestFieldPathCacheEntryData(\n field: FieldNode,\n ancestorKeysAndPaths: AncestorKeysAndPaths,\n { cacheMetadata, dataEntityData, requestFieldPathData }: ResponseDataForCaching,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<void> {\n const keysAndPaths = CacheManager._getFieldKeysAndPaths(field, ancestorKeysAndPaths);\n const { requestFieldCacheKey, requestFieldPath, responseDataPath } = keysAndPaths;\n const fieldData = get(requestFieldPathData, responseDataPath, null);\n if (!isObjectLike(fieldData)) return;\n\n const objectLikeFieldData = fieldData as PlainObjectMap | any[];\n const promises: Promise<void>[] = [];\n\n iterateChildFields(\n field,\n objectLikeFieldData,\n (childField: FieldNode, _typeName: string | undefined, childIndex?: number) => {\n promises.push(\n this._parseFieldDataEntityAndRequestFieldPathCacheEntryData(\n childField,\n { index: childIndex, requestFieldCacheKey, requestFieldPath, responseDataPath },\n { cacheMetadata, dataEntityData, requestFieldPathData },\n options,\n context,\n ),\n );\n },\n );\n\n await Promise.all(promises);\n\n await this._setFieldDataEntityAndRequestFieldPathCacheEntry(\n field,\n keysAndPaths,\n { cacheMetadata, dataEntityData, requestFieldPathData },\n options,\n context,\n );\n }\n\n private async _resolveRequest(\n requestData: RequestData,\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<ResponseData> {\n const dataCaching: Promise<void>[] = [];\n const cacheMetadata = this._buildCacheMetadata(requestData, rawResponseData, options, context);\n const { data } = rawResponseData;\n\n dataCaching.push(\n this._setDataEntityAndRequestFieldPathCacheEntries(\n requestData,\n { cacheMetadata, dataEntityData: cloneDeep(data), requestFieldPathData: cloneDeep(data) },\n options,\n context,\n ),\n );\n\n if (options.awaitDataCaching) await Promise.all(dataCaching);\n\n return { cacheMetadata, data };\n }\n\n @logCacheEntry()\n private async _setCacheEntry(\n cacheType: CacheTypes,\n hash: string,\n value: any,\n cachemapOptions: CachemapOptions,\n _options: RequestOptions,\n _context: RequestContext,\n ): Promise<void> {\n try {\n await this._cache.set(`${cacheType}::${hash}`, cloneDeep(value), cachemapOptions);\n } catch (error) {\n // no catch\n }\n }\n\n private async _setDataEntityAndRequestFieldPathCacheEntries(\n requestData: RequestData,\n responseData: ResponseDataForCaching,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<void> {\n const operationNode = getOperationDefinitions(requestData.ast, context.operation)[0];\n const fieldsAndTypeNames = getChildFields(operationNode);\n if (!fieldsAndTypeNames) return;\n\n await Promise.all(\n fieldsAndTypeNames.map(({ fieldNode }) => {\n return this._parseFieldDataEntityAndRequestFieldPathCacheEntryData(\n fieldNode,\n { requestFieldPath: context.operation },\n responseData,\n options,\n context,\n );\n }),\n );\n }\n\n private async _setDataEntityCacheEntry(\n { responseDataPath }: KeysAndPaths,\n { cacheability, data, fieldTypeInfo }: DataForCachingEntry,\n options: RequestOptions,\n context: RequestContext,\n ) {\n const hasArgsOrDirectives = fieldTypeInfo.hasArguments || fieldTypeInfo.hasDirectives;\n let fieldData = get(data, responseDataPath, null);\n const isEntity = this._isFieldEntity(fieldData, fieldTypeInfo);\n\n if (!isEntity && hasArgsOrDirectives) {\n unset(data, responseDataPath);\n }\n\n if (isEntity) {\n const fieldTypeName = fieldTypeInfo.isEntity ? fieldTypeInfo.typeName : fieldData.__typename;\n const entityDataKey = `${fieldTypeName}::${fieldData[this._typeIDKey]}`;\n const result = await this._checkCacheEntry(DATA_ENTITIES, entityDataKey, options, context);\n\n if (result) {\n fieldData = this._mergeObjects(result.entry, fieldData);\n }\n\n await this._setCacheEntry(\n DATA_ENTITIES,\n entityDataKey,\n fieldData,\n { cacheHeaders: { cacheControl: cacheability.printCacheControl() }, tag: options.tag },\n options,\n context,\n );\n\n set(data, responseDataPath, { __cacheKey: `${DATA_ENTITIES}::${entityDataKey}` });\n }\n }\n\n private async _setDataEntityData(\n cachedFieldData: CachedFieldData,\n { possibleTypes, typeIDValue, typeName }: FieldTypeInfo,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<void> {\n const requestFieldPathDataIDValue = isPlainObject(cachedFieldData.requestFieldPathData)\n ? cachedFieldData.requestFieldPathData[this._typeIDKey]\n : undefined;\n\n const validTypeIDValue = typeIDValue || requestFieldPathDataIDValue;\n if (!validTypeIDValue) return;\n\n const typeNames = [...possibleTypes.map(type => type.typeName), typeName];\n\n const checkResults = await Promise.all(\n typeNames.map(name => this._checkCacheEntry(DATA_ENTITIES, `${name}::${validTypeIDValue}`, options, context)),\n );\n\n const validResults = checkResults.filter(result => !!result) as CheckCacheEntryResult[];\n let validResult: CheckCacheEntryResult | undefined;\n\n if (validResults.length === 1) {\n validResult = validResults[0];\n } else if (validResults.length > 1) {\n validResults.sort(({ cacheability: a }, { cacheability: b }) => a.metadata.ttl - b.metadata.ttl);\n\n validResult = {\n cacheability: validResults[0].cacheability,\n entry: validResults.reduce((obj, { entry }) => this._mergeObjects(obj, entry), {}),\n };\n }\n\n if (validResult) {\n const { cacheability, entry } = validResult;\n if (cacheability && !cachedFieldData.cacheability) cachedFieldData.cacheability = cacheability;\n if (entry) cachedFieldData.dataEntityData = entry;\n }\n }\n\n private _setFieldCacheability(\n field: FieldNode,\n ancestorKeysAndPaths: AncestorKeysAndPaths,\n { cacheMetadata, data }: ResponseData,\n options: RequestOptions,\n context: RequestContext,\n ): void {\n const { requestFieldPath: ancestorRequestFieldPath } = ancestorKeysAndPaths;\n const keysAndPaths = CacheManager._getFieldKeysAndPaths(field, ancestorKeysAndPaths);\n const { requestFieldPath, responseDataPath } = keysAndPaths;\n const fieldData = get(data, responseDataPath, null);\n if (!isObjectLike(fieldData)) return;\n\n const objectLikeFieldData = fieldData as PlainObjectMap | any[];\n this._setFieldTypeCacheDirective(cacheMetadata, { ancestorRequestFieldPath, requestFieldPath }, context);\n\n iterateChildFields(\n field,\n objectLikeFieldData,\n (childField: FieldNode, _typeName: string | undefined, childIndex?: number) => {\n this._setFieldCacheability(\n childField,\n { index: childIndex, requestFieldPath, responseDataPath },\n { cacheMetadata, data },\n options,\n context,\n );\n },\n );\n }\n\n private async _setFieldDataEntityAndRequestFieldPathCacheEntry(\n field: FieldNode,\n keysAndPaths: KeysAndPaths,\n { cacheMetadata, dataEntityData, requestFieldPathData }: ResponseDataForCaching,\n options: RequestOptions,\n context: RequestContext,\n ) {\n const { requestFieldPath } = keysAndPaths;\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath);\n const cacheability = cacheMetadata.get(requestFieldPath);\n if (!fieldTypeInfo || !cacheability) return;\n\n const promises: Promise<void>[] = [];\n\n promises.push(\n this._setRequestFieldPathCacheEntry(\n field,\n keysAndPaths,\n { cacheability, data: requestFieldPathData, fieldTypeInfo },\n options,\n context,\n ),\n );\n\n promises.push(\n this._setDataEntityCacheEntry(\n keysAndPaths,\n { cacheability, data: dataEntityData, fieldTypeInfo },\n options,\n context,\n ),\n );\n\n await Promise.all(promises);\n }\n\n private _setFieldTypeCacheDirective(\n cacheMetadata: CacheMetadata,\n { ancestorRequestFieldPath, requestFieldPath }: { ancestorRequestFieldPath?: string; requestFieldPath: string },\n { fieldTypeMap, operation }: RequestContext,\n ): void {\n if (cacheMetadata.has(requestFieldPath)) return;\n\n const fieldTypeInfo = fieldTypeMap.get(requestFieldPath);\n\n if (fieldTypeInfo && this._typeCacheDirectives[fieldTypeInfo.typeName]) {\n const cacheability = new Cacheability({ cacheControl: this._typeCacheDirectives[fieldTypeInfo.typeName] });\n CacheManager._setCacheMetadata(cacheMetadata, cacheability, requestFieldPath, operation);\n } else if (this._cascadeCacheControl && ancestorRequestFieldPath) {\n CacheManager._setCacheMetadata(\n cacheMetadata,\n cacheMetadata.get(ancestorRequestFieldPath),\n requestFieldPath,\n operation,\n );\n }\n }\n\n @logPartialCompiled()\n private async _setPartialQueryResponse(\n hash: string,\n partialQueryResponse: PartialQueryResponse,\n _options: RequestOptions,\n _context: RequestContext,\n ): Promise<void> {\n this._partialQueryResponses.set(hash, partialQueryResponse);\n }\n\n private async _setQueryResponseCacheEntry(\n hash: string,\n { cacheMetadata, data }: ResponseData,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<void> {\n const dehydratedCacheMetadata = dehydrateCacheMetadata(cacheMetadata);\n const cacheControl = CacheManager._getOperationCacheControl(cacheMetadata, context.operation);\n\n await this._setCacheEntry(\n QUERY_RESPONSES,\n hash,\n { cacheMetadata: dehydratedCacheMetadata, data },\n { cacheHeaders: { cacheControl }, tag: options.tag },\n options,\n context,\n );\n }\n\n private async _setRequestFieldPathCacheEntry(\n field: FieldNode,\n { hashedRequestFieldCacheKey, responseDataPath }: KeysAndPaths,\n { cacheability, data, fieldTypeInfo }: DataForCachingEntry,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<void> {\n const hasArgsOrDirectives = fieldTypeInfo.hasArguments || fieldTypeInfo.hasDirectives;\n let fieldData = get(data, responseDataPath, null);\n const isEntity = this._isFieldEntity(fieldData, fieldTypeInfo);\n\n if (context.operation === QUERY && (isEntity || hasArgsOrDirectives)) {\n const result = await this._checkCacheEntry(REQUEST_FIELD_PATHS, hashedRequestFieldCacheKey, options, context);\n\n if (result) {\n fieldData = this._mergeObjects(result.entry, fieldData);\n }\n\n await this._setCacheEntry(\n REQUEST_FIELD_PATHS,\n hashedRequestFieldCacheKey,\n fieldData,\n { cacheHeaders: { cacheControl: cacheability.printCacheControl() }, tag: options.tag },\n options,\n context,\n );\n\n if (hasChildFields(field)) {\n if (isEntity) {\n set(data, responseDataPath, { __cacheKey: `${REQUEST_FIELD_PATHS}::${hashedRequestFieldCacheKey}` });\n } else {\n unset(data, responseDataPath);\n }\n }\n }\n }\n\n private async _setRequestFieldPathData(\n cachedFieldData: CachedFieldData,\n hash: string,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<void> {\n const checkResult = await this._checkCacheEntry(REQUEST_FIELD_PATHS, hash, options, context);\n\n if (checkResult) {\n const { cacheability, entry } = checkResult;\n if (cacheability) cachedFieldData.cacheability = cacheability;\n if (entry) cachedFieldData.requestFieldPathData = entry;\n }\n }\n}\n\nexport default function init(userOptions: UserOptions): CacheManagerInit {\n if (!isPlainObject(userOptions)) {\n throw new TypeError(\"@graphql-box/cache-manager expected userOptions to be a plain object.\");\n }\n\n return (clientOptions: ClientOptions) => CacheManager.init({ ...clientOptions, ...userOptions });\n}\n","import { RequestContext } from \"@graphql-box/core\";\nimport { CACHE_ENTRY_QUERIED } from \"../../consts\";\n\nexport default function logCacheQuery() {\n return (\n _target: any,\n _propertyName: string,\n descriptor: TypedPropertyDescriptor<(...args: any[]) => Promise<any>>,\n ): void => {\n const method = descriptor.value;\n if (!method) return;\n\n descriptor.value = async function descriptorValue(...args: any[]): Promise<any> {\n try {\n return new Promise(async resolve => {\n const { debugManager, ...otherContext } = args[3] as RequestContext;\n\n if (!debugManager) {\n resolve(await method.apply(this, args));\n return;\n }\n\n const startTime = debugManager.now();\n const result = await method.apply(this, args);\n const endTime = debugManager.now();\n const duration = endTime - startTime;\n resolve(result);\n\n debugManager.emit(CACHE_ENTRY_QUERIED, {\n cacheType: args[0],\n context: otherContext,\n hash: args[1],\n options: args[2],\n result,\n stats: { duration, endTime, startTime },\n });\n });\n } catch (error) {\n return Promise.reject(error);\n }\n };\n };\n}\n","import { RequestContext } from \"@graphql-box/core\";\nimport { CACHE_ENTRY_ADDED } from \"../../consts\";\n\nexport default function logCacheEntry() {\n return (\n _target: any,\n _propertyName: string,\n descriptor: TypedPropertyDescriptor<(...args: any[]) => Promise<any>>,\n ): void => {\n const method = descriptor.value;\n if (!method) return;\n\n descriptor.value = async function descriptorValue(...args: any[]): Promise<any> {\n return new Promise(async resolve => {\n const { debugManager, ...otherContext } = args[5] as RequestContext;\n\n if (!debugManager) {\n await method.apply(this, args);\n resolve();\n return;\n }\n\n const startTime = debugManager.now();\n await method.apply(this, args);\n const endTime = debugManager.now();\n const duration = endTime - startTime;\n resolve();\n\n debugManager.emit(CACHE_ENTRY_ADDED, {\n cachemapOptions: args[3],\n cacheType: args[0],\n context: otherContext,\n hash: args[1],\n options: args[4],\n stats: { duration, endTime, startTime },\n value: args[2],\n });\n });\n };\n };\n}\n","import { RequestContext } from \"@graphql-box/core\";\nimport { PARTIAL_QUERY_COMPILED } from \"../../consts\";\n\nexport default function logPartialCompiled() {\n return (\n _target: any,\n _propertyName: string,\n descriptor: TypedPropertyDescriptor<(...args: any[]) => Promise<any>>,\n ): void => {\n const method = descriptor.value;\n if (!method) return;\n\n descriptor.value = async function descriptorValue(...args: any[]): Promise<any> {\n return new Promise(async resolve => {\n const { debugManager, ...otherContext } = args[3] as RequestContext;\n\n if (!debugManager) {\n await method.apply(this, args);\n resolve();\n return;\n }\n\n const startTime = debugManager.now();\n await method.apply(this, args);\n const endTime = debugManager.now();\n const duration = endTime - startTime;\n resolve();\n\n debugManager.emit(PARTIAL_QUERY_COMPILED, {\n context: otherContext,\n hash: args[0],\n options: args[2],\n partialQueryResponse: args[1],\n stats: { duration, endTime, startTime },\n });\n });\n };\n };\n}\n"],"names":["CACHE_ENTRY_ADDED","CACHE_ENTRY_QUERIED","PARTIAL_QUERY_COMPILED","CacheManager","_target","_propertyName","descriptor","method","value","args","Promise","resolve","debugManager","otherContext","apply","_this","startTime","now","result","endTime","duration","emit","cacheType","context","hash","options","stats","reject","cachemapOptions","partialQueryResponse","Map","cache","cascadeCacheControl","fallbackOperationCacheability","typeCacheDirectives","typeIDKey","_cache","_cascadeCacheControl","_fallbackOperationCacheability","_typeCacheDirectives","_typeIDKey","this","requestData","ast","TypeError","_getCachedResponseData","cachedResponseData","cacheMetadata","data","fieldCount","missing","total","updated","dataCaching","_setQueryResponseCacheEntry","awaitDataCaching","response","_setPartialQueryResponse","_filterQuery","request","print","hashRequest","_checkCacheEntry","QUERY_RESPONSES","entry","rehydrateCacheMetadata","_partialQueryResponses","delete","updatedRequestData","rawResponseData","_resolveRequest","queryFiltered","push","_getPartialQueryResponse","responseCacheMetadata","_getResponseCacheMetadata","responseData","_getResponseData","all","field","cachedAncestorFieldData","hasChildFields","_analyzeParentField","_analyzeLeafField","keysAndPaths","_getFieldKeysAndPaths","hashedRequestFieldCacheKey","propNameOrIndex","requestFieldCacheKey","requestFieldPath","fieldTypeInfo","fieldTypeMap","get","ancestorDataEntityData","dataEntityData","ancestorRequestFieldPathData","requestFieldPathData","typeName","cachedFieldData","_getFieldDataFromAncestor","_isRequestFieldPath","_setRequestFieldPathData","_isDataEntity","_setDataEntityData","cacheability","_isUndefined","undefined","_mergeObjects","_setCachedResponseData","dataTypeName","_get","TYPE_NAME_KEY","fieldTypeName","_isObjectLike","promises","iterateChildFields","childField","childTypeName","childIndex","_analyzeField","index","otherProps","_createCacheMetadata","queryNode","getOperationDefinitions","operation","fieldsAndTypeNames","getChildFields","forEach","fieldNode","_this2","_setFieldCacheability","_hasCacheEntry","_isValid","_getCacheEntry","_cacheMetadata","headers","fallback","_isEmpty","Object","values","first","rest","Cacheability","metadata","reduce","acc","ttl","has","cacheControl","deriveOpCacheability","set","fieldPathChecklist","ancestorRequestFieldPath","i","length","childFieldName","getName","_checkFieldPathChecklist","hasData","typeUnused","_filterField","deleteChildFields","_filterInlineFragments","_filterIDsAndTypeNames","fieldNames","map","every","name","_this3","inlineFragments","getInlineFragments","filtered","fragment","deleteInlineFragments","_this4","_this5","_countFieldPathChecklist","_options","_context","fieldData","isEntity","possibleTypes","some","type","__typename","obj","src","mergeObjects","_key","val","_isPlainObject","_this6","ancestorKeysAndPaths","responseDataPath","_typeName","_this7","_parseFieldDataEntityAndRequestFieldPathCacheEntryData","_setFieldDataEntityAndRequestFieldPathCacheEntry","_buildCacheMetadata","_setDataEntityAndRequestFieldPathCacheEntries","_cloneDeep","operationNode","_this8","hasArgsOrDirectives","hasArguments","hasDirectives","_isFieldEntity","entityDataKey","DATA_ENTITIES","_setCacheEntry","cacheHeaders","printCacheControl","tag","__cacheKey","typeIDValue","requestFieldPathDataIDValue","validTypeIDValue","typeNames","_this9","checkResults","validResults","filter","validResult","sort","a","b","objectLikeFieldData","_setFieldTypeCacheDirective","_this10","_setRequestFieldPathCacheEntry","_setDataEntityCacheEntry","_setCacheMetadata","dehydratedCacheMetadata","dehydrateCacheMetadata","_getOperationCacheControl","QUERY","REQUEST_FIELD_PATHS","checkResult","errors","_setFieldPathChecklist","_setCachedData","key","path","paths","join","directives","_isNumber","JSON","stringify","_buildKey","fieldPathChecklistValues","checklistValues","ancestorFieldData","updatedRequestFieldCacheKey","_buildRequestFieldCacheKey","getArguments","getDirectives","fieldAliasOrName","getAlias","updatedRequestFieldPath","updatedResponseDataPath","checkTTL","objectLikeData","_isArray","operationCacheability","userOptions","clientOptions","init"],"mappings":"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"}
@@ -1,23 +1,23 @@
1
1
  -----------------------------
2
2
  Rollup File Analysis
3
3
  -----------------------------
4
- bundle size: 75.478 KB
5
- original size: 46.825 KB
4
+ bundle size: 76.261 KB
5
+ original size: 47.72 KB
6
6
  code reduction: 0 %
7
- module count: 8
7
+ module count: 9
8
8
 
9
9
  ██████████████████████████████████████████░░░░░░░░
10
10
  file: /src/main/index.ts
11
- bundle space: 85.46 %
12
- rendered size: 64.503 KB
13
- original size: 37.354 KB
11
+ bundle space: 84.58 %
12
+ rendered size: 64.5 KB
13
+ original size: 37.391 KB
14
14
  code reduction: 0 %
15
15
  dependents: 1
16
16
  - /src/index.ts
17
17
 
18
18
  ██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
19
19
  file: /src/debug/log-cache-query/index.ts
20
- bundle space: 5.09 %
20
+ bundle space: 5.03 %
21
21
  rendered size: 3.839 KB
22
22
  original size: 1.282 KB
23
23
  code reduction: 0 %
@@ -26,7 +26,7 @@ dependents: 1
26
26
 
27
27
  ██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
28
28
  file: /src/debug/log-cache-entry/index.ts
29
- bundle space: 4.57 %
29
+ bundle space: 4.53 %
30
30
  rendered size: 3.451 KB
31
31
  original size: 1.191 KB
32
32
  code reduction: 0 %
@@ -35,23 +35,33 @@ dependents: 1
35
35
 
36
36
  ██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
37
37
  file: /src/debug/log-partial-compiled/index.ts
38
- bundle space: 4.46 %
38
+ bundle space: 4.42 %
39
39
  rendered size: 3.37 KB
40
40
  original size: 1.155 KB
41
41
  code reduction: 0 %
42
42
  dependents: 1
43
43
  - /src/debug/index.ts
44
44
 
45
+ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
46
+ file: /src/helpers/deriveOpCacheability.ts
47
+ bundle space: 1.03 %
48
+ rendered size: 786 Bytes
49
+ original size: 858 Bytes
50
+ code reduction: 8.39 %
51
+ dependents: 1
52
+ - /src/main/index.ts
53
+
45
54
  ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
46
55
  file: /src/consts/index.ts
47
- bundle space: 0.42 %
56
+ bundle space: 0.41 %
48
57
  rendered size: 315 Bytes
49
58
  original size: 390 Bytes
50
59
  code reduction: 19.23 %
51
- dependents: 5
60
+ dependents: 6
52
61
  - /src/debug/log-cache-entry/index.ts
53
62
  - /src/debug/log-cache-query/index.ts
54
63
  - /src/debug/log-partial-compiled/index.ts
64
+ - /src/helpers/deriveOpCacheability.ts
55
65
  - /src/main/index.ts
56
66
  - /src/index.ts
57
67
 
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _isEmpty2 = _interopRequireDefault(require("lodash/isEmpty"));
11
+
12
+ var _cacheability = _interopRequireDefault(require("cacheability"));
13
+
14
+ var _consts = require("../consts");
15
+
16
+ var _default = ({
17
+ _cacheMetadata,
18
+ fallback,
19
+ headers
20
+ }) => {
21
+ if (_cacheMetadata && !(0, _isEmpty2.default)(_cacheMetadata)) {
22
+ const [first, ...rest] = Object.values(_cacheMetadata);
23
+ return new _cacheability.default({
24
+ metadata: rest.reduce((acc, metadata) => {
25
+ if (metadata.ttl < acc.ttl) {
26
+ return metadata;
27
+ }
28
+
29
+ return acc;
30
+ }, first)
31
+ });
32
+ }
33
+
34
+ if (headers && headers.has(_consts.HEADER_CACHE_CONTROL)) {
35
+ return new _cacheability.default({
36
+ headers
37
+ });
38
+ }
39
+
40
+ return new _cacheability.default({
41
+ cacheControl: fallback
42
+ });
43
+ };
44
+
45
+ exports.default = _default;
46
+ //# sourceMappingURL=deriveOpCacheability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/helpers/deriveOpCacheability.ts"],"names":["_cacheMetadata","fallback","headers","first","rest","Object","values","Cacheability","metadata","reduce","acc","ttl","has","HEADER_CACHE_CONTROL","cacheControl"],"mappings":";;;;;;;;;;;AACA;;AAEA;;eAQe,CAAC;AAAEA,EAAAA,cAAF;AAAkBC,EAAAA,QAAlB;AAA4BC,EAAAA;AAA5B,CAAD,KAAiE;AAC9E,MAAIF,cAAc,IAAI,CAAC,uBAAQA,cAAR,CAAvB,EAAgD;AAC9C,UAAM,CAACG,KAAD,EAAQ,GAAGC,IAAX,IAAmBC,MAAM,CAACC,MAAP,CAAcN,cAAd,CAAzB;AAEA,WAAO,IAAIO,qBAAJ,CAAiB;AACtBC,MAAAA,QAAQ,EAAEJ,IAAI,CAACK,MAAL,CAAY,CAACC,GAAD,EAAMF,QAAN,KAAmB;AACvC,YAAIA,QAAQ,CAACG,GAAT,GAAeD,GAAG,CAACC,GAAvB,EAA4B;AAC1B,iBAAOH,QAAP;AACD;;AAED,eAAOE,GAAP;AACD,OANS,EAMPP,KANO;AADY,KAAjB,CAAP;AASD;;AAED,MAAID,OAAO,IAAIA,OAAO,CAACU,GAAR,CAAYC,4BAAZ,CAAf,EAAkD;AAChD,WAAO,IAAIN,qBAAJ,CAAiB;AAAEL,MAAAA;AAAF,KAAjB,CAAP;AACD;;AAED,SAAO,IAAIK,qBAAJ,CAAiB;AAAEO,IAAAA,YAAY,EAAEb;AAAhB,GAAjB,CAAP;AACD,C","sourcesContent":["import { DehydratedCacheMetadata } from \"@graphql-box/core\";\nimport Cacheability from \"cacheability\";\nimport { isEmpty } from \"lodash\";\nimport { HEADER_CACHE_CONTROL } from \"../consts\";\n\nexport type Params = {\n _cacheMetadata?: DehydratedCacheMetadata;\n fallback: string;\n headers?: Headers;\n};\n\nexport default ({ _cacheMetadata, fallback, headers }: Params): Cacheability => {\n if (_cacheMetadata && !isEmpty(_cacheMetadata)) {\n const [first, ...rest] = Object.values(_cacheMetadata);\n\n return new Cacheability({\n metadata: rest.reduce((acc, metadata) => {\n if (metadata.ttl < acc.ttl) {\n return metadata;\n }\n\n return acc;\n }, first),\n });\n }\n\n if (headers && headers.has(HEADER_CACHE_CONTROL)) {\n return new Cacheability({ headers });\n }\n\n return new Cacheability({ cacheControl: fallback });\n};\n"],"file":"deriveOpCacheability.js"}