@graphql-box/cache-manager 5.3.3 → 5.4.1

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.
Files changed (78) hide show
  1. package/dist/cjs/index.cjs +1 -1
  2. package/dist/cjs/index.cjs.map +1 -1
  3. package/dist/esm/index.mjs +1 -1
  4. package/dist/esm/index.mjs.map +1 -1
  5. package/dist/production.analysis.txt +148 -148
  6. package/dist/types/cjs/constants.d.cts +5 -5
  7. package/dist/types/cjs/constants.d.cts.map +1 -1
  8. package/dist/types/cjs/debug/logCacheEntry.d.cts.map +1 -1
  9. package/dist/types/cjs/debug/logCacheQuery.d.cts.map +1 -1
  10. package/dist/types/cjs/debug/logPartialCompiled.d.cts.map +1 -1
  11. package/dist/types/cjs/helpers/createEntityDataKey.d.cts.map +1 -1
  12. package/dist/types/cjs/helpers/filterField.d.cts.map +1 -1
  13. package/dist/types/cjs/helpers/filterFragmentDefinitions.d.cts.map +1 -1
  14. package/dist/types/cjs/helpers/filterOutPropsWithEntityArgsOrDirectives.d.cts.map +1 -1
  15. package/dist/types/cjs/helpers/filterOutPropsWithEntityOrArgs.d.cts.map +1 -1
  16. package/dist/types/cjs/helpers/filterQuery.d.cts.map +1 -1
  17. package/dist/types/cjs/helpers/getDataValue.d.cts.map +1 -1
  18. package/dist/types/cjs/helpers/hasTypename.d.cts.map +1 -1
  19. package/dist/types/cjs/helpers/isFieldEntity.d.cts.map +1 -1
  20. package/dist/types/cjs/helpers/mergeObjects.d.cts.map +1 -1
  21. package/dist/types/cjs/helpers/normalizePatchResponseData.d.cts +4 -4
  22. package/dist/types/cjs/helpers/validTypeIdValue.d.cts.map +1 -1
  23. package/dist/types/cjs/main.d.cts +6 -6
  24. package/dist/types/cjs/main.d.cts.map +1 -1
  25. package/dist/types/cjs/types.d.cts +4 -4
  26. package/dist/types/cjs/types.d.cts.map +1 -1
  27. package/dist/types/esm/constants.d.ts +5 -5
  28. package/dist/types/esm/constants.d.ts.map +1 -1
  29. package/dist/types/esm/debug/logCacheEntry.d.ts.map +1 -1
  30. package/dist/types/esm/debug/logCacheQuery.d.ts.map +1 -1
  31. package/dist/types/esm/debug/logPartialCompiled.d.ts.map +1 -1
  32. package/dist/types/esm/helpers/createEntityDataKey.d.ts.map +1 -1
  33. package/dist/types/esm/helpers/filterField.d.ts.map +1 -1
  34. package/dist/types/esm/helpers/filterFragmentDefinitions.d.ts.map +1 -1
  35. package/dist/types/esm/helpers/filterOutPropsWithEntityArgsOrDirectives.d.ts.map +1 -1
  36. package/dist/types/esm/helpers/filterOutPropsWithEntityOrArgs.d.ts.map +1 -1
  37. package/dist/types/esm/helpers/filterQuery.d.ts.map +1 -1
  38. package/dist/types/esm/helpers/getDataValue.d.ts.map +1 -1
  39. package/dist/types/esm/helpers/hasTypename.d.ts.map +1 -1
  40. package/dist/types/esm/helpers/isFieldEntity.d.ts.map +1 -1
  41. package/dist/types/esm/helpers/mergeObjects.d.ts.map +1 -1
  42. package/dist/types/esm/helpers/normalizePatchResponseData.d.ts +4 -4
  43. package/dist/types/esm/helpers/validTypeIdValue.d.ts.map +1 -1
  44. package/dist/types/esm/main.d.ts +6 -6
  45. package/dist/types/esm/main.d.ts.map +1 -1
  46. package/dist/types/esm/types.d.ts +4 -4
  47. package/dist/types/esm/types.d.ts.map +1 -1
  48. package/dist/types/tsconfig.build.tsbuildinfo +1 -1
  49. package/package.json +17 -19
  50. package/src/__snapshots__/index.test.ts.snap +2592 -2592
  51. package/src/constants.ts +5 -5
  52. package/src/debug/logCacheEntry.ts +5 -3
  53. package/src/debug/logCacheQuery.ts +14 -4
  54. package/src/debug/logPartialCompiled.ts +1 -1
  55. package/src/helpers/checkFieldPathChecklist.ts +1 -1
  56. package/src/helpers/createEntityDataKey.ts +3 -1
  57. package/src/helpers/filterField.ts +3 -3
  58. package/src/helpers/filterFragmentDefinitions.ts +4 -2
  59. package/src/helpers/filterFragmentSpreads.ts +3 -3
  60. package/src/helpers/filterIDsAndTypeNames.ts +4 -4
  61. package/src/helpers/filterInlineFragments.ts +1 -1
  62. package/src/helpers/filterOperationAndFragmentDefinitions.ts +2 -2
  63. package/src/helpers/filterOutPropsWithEntityArgsOrDirectives.ts +4 -1
  64. package/src/helpers/filterOutPropsWithEntityOrArgs.ts +7 -3
  65. package/src/helpers/filterQuery.ts +4 -2
  66. package/src/helpers/getDataValue.ts +4 -0
  67. package/src/helpers/isFieldEntity.ts +1 -1
  68. package/src/helpers/isFirstResponseChunk.ts +1 -1
  69. package/src/helpers/isLastResponseChunk.ts +1 -1
  70. package/src/helpers/isNotLastResponseChunk.ts +1 -1
  71. package/src/helpers/isNotResponseChunk.ts +1 -1
  72. package/src/helpers/mergeObjects.ts +2 -0
  73. package/src/helpers/mergeResponseDataSets.ts +1 -1
  74. package/src/helpers/normalizePatchResponseData.ts +1 -1
  75. package/src/helpers/validTypeIdValue.ts +3 -1
  76. package/src/index.test.ts +84 -84
  77. package/src/main.ts +150 -109
  78. package/src/types.ts +9 -9
@@ -1,2 +1,2 @@
1
- "use strict";var e=require("@babel/runtime/helpers/defineProperty"),t=require("@babel/runtime/helpers/applyDecoratedDescriptor");require("core-js/modules/web.structured-clone.js"),require("core-js/modules/es.array.push.js");var a=require("@graphql-box/core"),i=require("@graphql-box/helpers"),s=require("cacheability"),n=require("graphql"),r=require("lodash-es");const c="noCache",h=(e,t)=>i.isArray(e)?e.reduce(((e,a)=>!!e&&h(a,t)),!0):!!i.isPlainObject(e)&&d(e,t),d=(e,t)=>{const a=i.isPlainObject(e)?Object.keys(e):[...e.keys()];return!(1!==a.length||!i.isPlainObject(e)||!e[t])||a.reduce(((a,s)=>!!a&&(r.isNumber(s)&&i.isArray(e)||r.isString(s)&&i.isPlainObject(e)?h(e[s],t):a)),!0)},o=({entity:e,queryResponse:t,requestPath:a})=>!e&&!t&&!a,l=e=>!!e.entity,y=({entity:e,requestPath:t})=>!!(e??t),u=e=>!!e.queryResponse,p=e=>!!e.requestPath,_=(e,t,a)=>i.mergeObjects(e,t,((e,t)=>i.isPlainObject(t)&&t[a]?t[a]:void 0)),f=(e,t,a)=>!e&&t?t:i.isObjectLike(e)&&i.isObjectLike(t)?_(e,t,a):e,g=(e,t,a)=>`${t.isEntity?t.typeName:e.__typename}::${String(e[a.typeIDKey])}`,C=({_cacheMetadata:e,fallback:t,headers:a})=>{if(e&&!r.isEmpty(e)){const[t,...a]=Object.values(e);return new s.Cacheability({metadata:a.reduce(((e,t)=>e?t.ttl<e.ttl?t:e:t),t)})}return a?.has("cache-control")?new s.Cacheability({headers:a}):new s.Cacheability({cacheControl:t})},m=(e,t,a)=>{if(!i.isPlainObject(e)||!(a in e))return!1;const{isEntity:s=!1,possibleTypes:n=[]}=t??{};return!!s||0!==n.length&&n.some((t=>t.typeName===e.__typename))},D=(e,t,a,s)=>{if(!i.isPlainObject(e))return e;const n=i.resolveFragments(t.selectionSet?.selections,s.fragmentDefinitions);return r.keys(e).reduce(((t,r)=>{const c=n.find((({fieldNode:e})=>i.getName(e)===r));if(c){const t=i.buildFieldKeysAndPaths(c.fieldNode,a,s),n=s.fieldTypeMap.get(t.requestFieldPath);(m(e[r],n,s.typeIDKey)||n?.hasArguments||n?.hasDirectives)&&delete e[r]}return t}),e)},E=(e,t,a,s)=>{const n=i.resolveFragments(t.selectionSet?.selections,s.fragmentDefinitions);return r.keys(e).reduce(((t,r)=>{const c=n.find((({fieldNode:e})=>i.getName(e)===r));if(c){const{requestFieldPath:t}=i.buildFieldKeysAndPaths(c.fieldNode,a,s),n=s.fieldTypeMap.get(t);(m(e[r],n,s.typeIDKey)||n?.hasArguments)&&delete e[r]}return t}),e)},F=(e,t)=>{if(!e||0===e.length)return{hasData:!1,typeUnused:!!t};const[a]=e;if(a){const{hasData:e,typeName:i}=a;return{hasData:e,typeUnused:i?i!==t:void 0}}return{hasData:e.some((({hasData:e,typeName:a})=>a===t&&e)),typeUnused:!e.every((({typeName:e})=>e===t))}},P=(e,t,s,c,h)=>{const{fragmentDefinitions:d,typeIDKey:o}=h,l=i.getChildFields(e,{fragmentDefinitions:d});if(!l)return!1;const y={};for(let r=l.length-1;r>=0;r-=1){const u=l[r];if(!u)continue;const{fieldNode:p,fragmentKind:_,fragmentName:f,typeName:g}=u;_===n.Kind.FRAGMENT_SPREAD&&f&&!y[f]&&(y[f]={hasData:0,total:d?.[f]?i.getChildFields(d[f],{fragmentDefinitions:d})?.length??0:0});const C=i.getName(p);if(C===o||C===a.TYPE_NAME_KEY)continue;const{requestFieldPath:m}=i.buildFieldKeysAndPaths(p,{requestFieldPath:c},h),{hasData:D,typeUnused:E}=F(t.get(m),g);if(D||E)if(_===n.Kind.FRAGMENT_SPREAD&&f){const e=y[f];e&&(e.hasData+=1)}else i.hasChildFields(p,{fragmentDefinitions:d})?P(p,t,s,m,h)&&i.deleteChildFields(e,p):i.deleteChildFields(e,p)}return((e,t,a,s)=>{if(!r.isEmpty(t))for(const n of Object.keys(t)){const r=a[n];if(!r)continue;r.paths.push(s);const{hasData:c,total:h}=t[n];c===h&&(i.deleteFragmentSpreads(e,n),r.deleted+=1)}})(e,y,s,c),((e,{fragmentDefinitions:t,typeIDKey:a})=>{const s=i.getInlineFragments(e);let n=!1;for(const r of s){const s=i.getChildFields(r,{fragmentDefinitions:t});if(!s||0===s.length){i.deleteInlineFragments(e,r),n=!0;continue}const[c]=s;if(c){const{fieldNode:t}=c;i.getName(t)===a&&(i.deleteInlineFragments(e,r),n=!0)}}})(e,h),((e,{fragmentDefinitions:t,typeIDKey:s})=>{const n=i.getChildFields(e,{fragmentDefinitions:t});if(!n||n.length>3)return!1;const r=n.map((({fieldNode:e})=>i.getName(e)));if(2===r.length&&r.every((e=>e===s||e===a.TYPE_NAME_KEY)))return i.deleteChildFields(e,n.map((({fieldNode:e})=>e))),!0;if(1===r.length&&r[0]===s||r[0]===a.TYPE_NAME_KEY){const[t]=n;if(t){const{fieldNode:a}=t;return i.deleteChildFields(e,a),!0}}})(e,h),!i.hasChildFields(e,{fragmentDefinitions:d})},b=(e,{fieldPathChecklist:t},a)=>{const{ast:s}=e,n=i.getOperationDefinitions(s,a.operation)[0];if(!n)return s;const{fragmentDefinitions:c,operation:h}=a,d=i.getChildFields(n,{fragmentDefinitions:c});if(!d)return s;const o=(({request:e},{fragmentDefinitions:t})=>r.keys(t??{}).reduce(((t,a)=>(t[a]={deleted:0,paths:[],total:(e.match(new RegExp(`\\.\\.\\.${a}`,"g"))??[]).length},t)),{}))(e,a);for(let e=d.length-1;e>=0;e-=1){const{fieldNode:s}=d[e],{requestFieldPath:r}=i.buildFieldKeysAndPaths(s,{requestFieldPath:h},a);P(s,t,o,r,a)&&i.deleteChildFields(n,s)}return a.queryFiltered=!0,((e,t,a,s)=>{const n=r.keys(a).reduce(((e,t)=>{const i=a[t];if(!i)return e;const{deleted:s,paths:n,total:r}=i;return 0===s&&1===r?[...e,{name:t,path:n[0]}]:e}),[]),{fragmentDefinitions:c={}}=s;for(const{name:e,path:i}of n){const n=c[e];n&&P(n,t,a,i,s)}const h=r.keys(a).reduce(((e,t)=>{const i=a[t];if(!i)return e;const{deleted:s,total:n}=i;return s>0&&s===n?[...e,t]:e}),[]);return 0===h.length?e:i.deleteFragmentDefinitions(e,{include:h})})(s,t,o,a)},q=(e,t)=>i.isArray(e)&&r.isNumber(t)||i.isPlainObject(e)&&r.isString(t)?e[t]:void 0,N=e=>!!i.isObjectLike(e)&&(a.TYPE_NAME_KEY in e&&r.isString(e[a.TYPE_NAME_KEY]));var T,R,K,M;let A=(T=(e,t,i)=>{const s=i.value;s&&(i.value=async function(...e){return new Promise((t=>{(async()=>{const{debugManager:i,requestFieldCacheKey:n,...r}=e[3];if(!i)return void t(await s.apply(this,e));const c=i.now(),h=await s.apply(this,e),d=i.now(),o=d-c;t(h);const l={cacheType:e[0],context:r,options:e[2],requestHash:e[1],result:h,stats:{duration:o,endTime:d,startTime:c},...n?{decryptedCacheKey:n}:{}};i.log(a.CACHE_ENTRY_QUERIED,l)})()}))})},R=(e,t,i)=>{const s=i.value;s&&(i.value=async function(...e){return new Promise((t=>{(async()=>{const{debugManager:i,requestFieldCacheKey:n,...r}=e[5];if(!i)return await s.apply(this,e),void t();const c=i.now();await s.apply(this,e);const h=i.now(),d=h-c;t();const o={cacheType:e[0],cachemapOptions:e[3],context:r,options:e[4],requestHash:e[1],stats:{duration:d,endTime:h,startTime:c},value:e[2],...n?{decryptedCacheKey:n}:{}};i.log(a.CACHE_ENTRY_ADDED,o)})()}))})},K=(e,t,i)=>{const s=i.value;s&&(i.value=function(...e){const{debugManager:t,...i}=e[3];if(!t)return void s.apply(this,e);const n=t.now();s.apply(this,e);const r=t.now(),c=r-n;t.log(a.PARTIAL_QUERY_COMPILED,{context:i,options:e[2],requestHash:e[0],result:e[1],stats:{duration:c,endTime:r,startTime:n}})})},M=class t{static _countFieldPathChecklist(e){const t={missing:0,total:0};for(const[,a]of e){t.total+=a.length;const e=a.filter((({hasData:e})=>!e));t.missing+=e.length}return t}static _getFieldDataFromAncestor(e,t){const a=q(e,t);return i.isObjectLike(a)?structuredClone(a):a}static _getOperationCacheControl(e,t){const a="no-cache";if(!e)return a;const i=e.get(t);return i?i.printCacheControl():a}static _isNodeEntity(e){if(!e)return!1;const{isEntity:t,possibleTypes:a}=e;return t||a.some((e=>!!e.isEntity))}static _isNodeRequestFieldPath(e){return!!e&&(this._isNodeEntity(e)||e.hasArguments||e.hasDirectives)}static _isValid(e){return!r.get(e,["metadata","cacheControl",c],!1)&&e.checkTTL()}static _mergeResponseCacheMetadata(e,t){return t?new Map([...t.cacheMetadata,...e]):e}static _setCachedData(e,{data:t},a){const s=t=>{(i.isArray(e)&&r.isNumber(a)||i.isPlainObject(e))&&(e[a]=t)};i.isObjectLike(t)||r.isUndefined(t)?i.isArray(t)?s([]):i.isPlainObject(t)&&s({}):s(t)}static _setCachedResponseSlice(e,{cacheMetadata:a,data:i,fieldPathChecklist:s},{propNameOrIndex:n,requestFieldPath:r},c,h,{operation:d}){t._setCacheMetadata(a,e.cacheability,r,d),t._setFieldPathChecklist(s,e,r,c),t._setCachedData(i,e,n)}static _setCacheMetadata(e,t,a,i){if(!t)return;e.set(a,t);const s=e.get(i);(!s||s.metadata.ttl>t.metadata.ttl)&&e.set(i,t)}static _setFieldPathChecklist(e,{data:t},a,{dataTypename:i,fieldTypename:s,fragmentKind:c,fragmentName:h}){if(r.isUndefined(s)||c===n.Kind.FRAGMENT_SPREAD){if(e.has(a))return;return void e.set(a,[{fragmentKind:c,fragmentName:h,hasData:!r.isUndefined(t)}])}if(i!==s)return;const d=e.get(a)??[];d.some((({typeName:e})=>e===i))||e.set(a,[...d,{fragmentKind:c,fragmentName:h,hasData:!r.isUndefined(t),typeName:i}])}constructor(t){e(this,"_cache",void 0),e(this,"_cacheTiersEnabled",{entity:!1,queryResponse:!0,requestPath:!1}),e(this,"_cascadeCacheControl",void 0),e(this,"_fallbackOperationCacheability",void 0),e(this,"_partialQueryResponses",new Map),e(this,"_responseChunksAwaitingCaching",new Map),e(this,"_typeCacheDirectives",void 0),e(this,"_typeIDKey",void 0);const s=[];if("cache"in t||s.push(new i.ArgsError("@graphql-box/cache-manager expected cache to be in options.")),t.typeCacheDirectives&&!i.isPlainObject(t.typeCacheDirectives)){const e="@graphql-box/cache-manager expected options.typeCacheDirectives to be a plain object.";s.push(new i.ArgsError(e))}if(s.length>0)throw new i.GroupedError("@graphql-box/cache-manager argument validation errors.",s);this._cache=t.cache,this._cacheTiersEnabled={...this._cacheTiersEnabled,...t.cacheTiersEnabled},this._cascadeCacheControl=t.cascadeCacheControl??!1,this._fallbackOperationCacheability=t.fallbackOperationCacheability??c,this._typeCacheDirectives=t.typeCacheDirectives??{},this._typeIDKey=t.typeIDKey??a.DEFAULT_TYPE_ID_KEY}async analyzeQuery(e,t,a){if(!y(this._cacheTiersEnabled))return{updated:e};const{ast:s,hash:c}=e,h={...a,fragmentDefinitions:i.getFragmentDefinitions(s),typeIDKey:this._typeIDKey},o=await this._retrieveCachedResponseData(e,t,h),{cacheMetadata:l,data:p,fieldCount:_}=o;if(_.missing===_.total||((e,t)=>d(e,t))(p,this._typeIDKey))return{updated:e};if(!_.missing&&u(this._cacheTiersEnabled)){const e=this._setQueryResponseCacheEntry(c,{cacheMetadata:l,data:p},t,h);return t.awaitDataCaching&&await e,{response:{cacheMetadata:l,data:p}}}const f=b(e,o,h),g=n.print(f),{fragmentDefinitions:C,typeIDKey:m,...D}=h;return r.assign(a,{...D,filteredRequest:g}),u(this._cacheTiersEnabled)&&this._setPartialQueryResponse(c,{cacheMetadata:l,data:p},t,a),{updated:{ast:f,hash:i.hashRequest(g),request:g}}}get cache(){return this._cache}async cacheQuery(e,t,a,s,n){const r={...n,fragmentDefinitions:i.getFragmentDefinitions((t??e).ast),typeIDKey:this._typeIDKey};return this._cacheResponse(e,t,a,s,r)}async cacheResponse(e,t,a,s){const n={...s,fragmentDefinitions:i.getFragmentDefinitions(e.ast),typeIDKey:this._typeIDKey};return this._cacheResponse(e,void 0,t,a,n)}async checkCacheEntry(e,t,a,i){return!o(this._cacheTiersEnabled)&&this._checkCacheEntry(e,t,a,i)}async checkQueryResponseCacheEntry(e,t,s){if(!u(this._cacheTiersEnabled))return!1;const n=await this._checkCacheEntry(a.QUERY_RESPONSES,e,t,s);if(!n)return!1;const{cacheMetadata:r,data:c}=n.entry;return{cacheMetadata:i.rehydrateCacheMetadata(r),data:c}}deletePartialQueryResponse(e){u(this._cacheTiersEnabled)&&this._partialQueryResponses.delete(e)}async setQueryResponseCacheEntry(e,t,a,i){if(u(this._cacheTiersEnabled))return this._setQueryResponseCacheEntry(e.hash,t,a,i)}async _analyzeFieldNode(e,t,a,s,n){await(i.hasChildFields(e,{fragmentDefinitions:n.fragmentDefinitions})?this._analyzeParentFieldNode(e,t,a,s,n):this._analyzeLeafFieldNode(e,t,a,s,n))}async _analyzeLeafFieldNode(e,a,s,n,r){const c=i.buildFieldKeysAndPaths(e,a,r),{hashedRequestFieldCacheKey:h,propNameOrIndex:d,requestFieldCacheKey:o,requestFieldPath:l}=c,y=r.fieldTypeMap.get(l),{entityData:u,fragmentKind:_,fragmentName:f,requestFieldPathData:g,typeName:C}=a,m={dataTypename:N(u)?u.__typename:N(g)?g.__typename:void 0,fieldTypename:C,fragmentKind:_,fragmentName:f};if(t._isNodeRequestFieldPath(y)){if(p(this._cacheTiersEnabled)){const{cacheability:e,entry:a}=await this._retrieveCachedRequestFieldPathData(h,o,n,r);t._setCachedResponseSlice({cacheability:e,data:a},s,c,m,n,r)}}else{const e=t._getFieldDataFromAncestor(u,d)??t._getFieldDataFromAncestor(g,d);t._setFieldPathChecklist(s.fieldPathChecklist,{data:e},l,m),t._setCachedData(s.data,{data:e},d)}}async _analyzeParentFieldNode(e,s,n,c,h){const d=i.buildFieldKeysAndPaths(e,s,h),{propNameOrIndex:o,requestFieldCacheKey:l,requestFieldPath:y}=d,u=h.fieldTypeMap.get(y),{cacheability:p,data:_,entityData:f,requestFieldPathData:g}=await this._retrieveCachedParentNodeData(s,d,u,c,h),{fragmentKind:C,fragmentName:m,typeName:D}=s;if(t._setCachedResponseSlice({cacheability:p,data:_},n,d,{dataTypename:r.get(_,a.TYPE_NAME_KEY),fieldTypename:D,fragmentKind:C,fragmentName:m},c,h),!i.isObjectLike(_))return;const E=[];i.iterateChildFields(e,_,h.fragmentDefinitions,((e,t,a,i,s)=>{E.push(this._analyzeFieldNode(e,{cacheability:p,entityData:f,fragmentKind:a,fragmentName:i,index:s,requestFieldCacheKey:l,requestFieldPath:y,requestFieldPathData:g,typeName:t},{...n,data:q(n.data,o)},c,h))})),await Promise.all(E)}_buildCacheMetadata({ast:e},{data:t,...a},s,n){const r=this._createCacheMetadata({data:t,...a},n),c=i.getOperationDefinitions(e,n.operation)[0];if(!c)return r;const h=i.getChildFields(c);if(!h)return r;for(const{fieldNode:e}of h)this._setFieldCacheability(e,{requestFieldPath:n.operation},{cacheMetadata:r,data:t},s,n);return r}async _cacheResponse(e,a,i,s,c){const h=((e,t)=>{if(!t.normalizePatchResponseData)return e;const{data:a,paths:i,...s}=e;return i?.length&&r.isString(i[0])?{...s,data:r.set({},i[0],a),paths:i}:e})(i,c);let d=h;((e,t)=>t.hasDeferOrStream&&e.hasNext)(i,c)&&(this._setResponseChunksAwaitingCaching(h,c),d=void 0),((e,t)=>t.hasDeferOrStream&&!e.hasNext&&e.paths)(i,c)&&(d=this._retrieveResponseDataForCaching(h,c));const l=[];if(d&&(p=this._cacheTiersEnabled,!o(p))){const{data:i}=d,r=this._buildCacheMetadata(e,d,s,c);let o,p;if(y(this._cacheTiersEnabled)&&l.push(this._setEntityAndRequestFieldPathCacheEntries(e,{cacheMetadata:r,entityData:structuredClone(i),requestFieldPathData:structuredClone(i)},s,c)),c.operation===n.OperationTypeNode.QUERY&&u(this._cacheTiersEnabled)){let n;c.queryFiltered&&a&&(l.push(this._setQueryResponseCacheEntry(a.hash,{cacheMetadata:r,data:i},s,c)),n=this._getPartialQueryResponse(e.hash)),o=t._mergeResponseCacheMetadata(r,n),p=this._mergeResponseData(i,n),l.push(this._setQueryResponseCacheEntry(e.hash,{cacheMetadata:o,data:p},s,c))}if(s.awaitDataCaching&&await Promise.all(l),((e,t)=>!t.hasDeferOrStream&&!e.hasNext&&!e.paths)(h,c)&&o&&p)return{cacheMetadata:o,data:p}}var p;const{data:_,hasNext:f,paths:g}=h;return{cacheMetadata:this._buildCacheMetadata(e,h,s,c),data:_,hasNext:f,paths:g}}async _checkCacheEntry(e,a,i,s){try{const n=await this._hasCacheEntry(e,a);if(!n||!t._isValid(n))return!1;const c=await this._getCacheEntry(e,a,i,s);return!r.isUndefined(c)&&{cacheability:n,entry:c}}catch{return!1}}_createCacheMetadata({_cacheMetadata:e,headers:t},{operation:a}){const s=new Map,n=C({_cacheMetadata:e,fallback:this._fallbackOperationCacheability,headers:t});return s.set(a,n),e&&i.rehydrateCacheMetadata(e,s),s}async _getCacheEntry(e,t,a,i){return this._cache.get(`${e}::${t}`)}_getPartialQueryResponse(e){const t=this._partialQueryResponses.get(e);return this._partialQueryResponses.delete(e),t}async _hasCacheEntry(e,t){try{return await this._cache.has(`${e}::${t}`)}catch{return!1}}_mergeResponseData(e,t){return t?_(t.data,e,this._typeIDKey):e}async _parseEntityAndRequestFieldPathCacheEntryData(e,t,{cacheMetadata:s,entityData:c,requestFieldPathData:h},d,o){const y=i.buildFieldKeysAndPaths(e,t,o),{hashedRequestFieldCacheKey:u,requestFieldCacheKey:_,requestFieldPath:f,responseDataPath:C}=y,F=r.get(h,C),P=o.fieldTypeMap.get(f),b=s.get(f);if(!i.isObjectLike(F)&&!P?.hasDirectives)return;if(i.isObjectLike(F)){const t=[];i.iterateChildFields(e,F,o.fragmentDefinitions,((e,a,i,n,r)=>{t.push(this._parseEntityAndRequestFieldPathCacheEntryData(e,{index:r,requestFieldCacheKey:_,requestFieldPath:f,responseDataPath:C},{cacheMetadata:s,entityData:c,requestFieldPathData:h},d,o))})),await Promise.all(t)}if(r.isUndefined(F)||!P||!b)return;const q=m(F,P,this._typeIDKey),N=!!P.hasArguments||!!P.hasDirectives;o.operation===n.OperationTypeNode.QUERY&&(q||N)&&p(this._cacheTiersEnabled)&&(await this._setRequestFieldPathCacheEntry(y,{cacheability:b,fieldData:D(structuredClone(F),e,y,o),fieldTypeInfo:P},d,o),i.hasChildFields(e,{fragmentDefinitions:o.fragmentDefinitions})&&(q?r.set(h,C,{__cacheKey:`${a.REQUEST_FIELD_PATHS}::${u}`}):r.unset(h,C))),q&&l(this._cacheTiersEnabled)&&(await this._setEntityCacheEntry({cacheability:b,fieldData:E(structuredClone(r.get(c,C)),e,y,o),fieldTypeInfo:P},d,o),r.set(c,C,{__cacheKey:`${a.DATA_ENTITIES}::${g(F,P,o)}`}))}async _retrieveCachedEntityData(e,{possibleTypes:t,typeName:i},s,n){const r=[...t.map((e=>e.typeName)),i],c=(await Promise.all(r.map((t=>this._checkCacheEntry(a.DATA_ENTITIES,`${t}::${e}`,s,n))))).filter((e=>!!e));let h;return 1===c.length?h=c[0]:c.length>1&&(c.sort((({cacheability:e},{cacheability:t})=>e.metadata.ttl-t.metadata.ttl)),h={cacheability:c[0].cacheability,entry:c.reduce(((e,{entry:t})=>_(e,t,this._typeIDKey)),{})}),h??{}}async _retrieveCachedParentNodeData({entityData:e,requestFieldPathData:a},{hashedRequestFieldCacheKey:s,propNameOrIndex:n,requestFieldCacheKey:c},h,d,o){let y,u=t._getFieldDataFromAncestor(e,n),_=t._getFieldDataFromAncestor(a,n);if(t._isNodeRequestFieldPath(h)&&p(this._cacheTiersEnabled)){const{cacheability:e,entry:t}=await this._retrieveCachedRequestFieldPathData(s,c,d,o);_=f(_,t,this._typeIDKey),e&&(y=e)}const g=((e,{typeIDValue:t},a)=>t||(i.isPlainObject(e)?e[a]:void 0))(_,h,this._typeIDKey);if(t._isNodeEntity(h)&&g&&l(this._cacheTiersEnabled)){const{cacheability:e,entry:t}=await this._retrieveCachedEntityData(g,h,d,o);u=f(u,t,this._typeIDKey),e&&(!y||e.metadata.ttl>y.metadata.ttl)&&(y=e)}return{cacheability:y,data:r.isEqual(u,_)?u:f(u,_,this._typeIDKey),entityData:u,requestFieldPathData:_}}async _retrieveCachedRequestFieldPathData(e,t,i,s){return await this._checkCacheEntry(a.REQUEST_FIELD_PATHS,e,i,{...s,requestFieldCacheKey:t})||{}}async _retrieveCachedResponseData({ast:e},a,s){const n={cacheMetadata:new Map,data:{},fieldCount:{missing:0,total:0},fieldPathChecklist:new Map},r=i.getOperationDefinitions(e,s.operation)[0];if(!r)return n;const c=i.getChildFields(r);return c?(await Promise.all(c.map((({fieldNode:e})=>this._analyzeFieldNode(e,{requestFieldPath:s.operation},n,a,s)))),n.fieldCount=t._countFieldPathChecklist(n.fieldPathChecklist),n):n}_retrieveResponseDataForCaching(e,t){const a=this._responseChunksAwaitingCaching.get(t.requestID);return this._responseChunksAwaitingCaching.delete(t.requestID),(i=[...a,e]).reduce(((e,t,a)=>{const{_cacheMetadata:s,data:n,hasNext:c,headers:h,paths:d}=t;return s&&(e._cacheMetadata=e._cacheMetadata?{...e._cacheMetadata,...s}:s),e.data=r.merge(e.data,n),0===a&&(e.headers=h),a===i.length-1&&(e.hasNext=c),d&&(e.paths||(e.paths=[]),e.paths.push(...d)),e}),{data:{}});var i}async _setCacheEntry(e,t,a,i,s,n){try{await this._cache.set(`${e}::${t}`,structuredClone(a),i)}catch{}}async _setEntityAndRequestFieldPathCacheEntries(e,t,a,s){const n=i.getOperationDefinitions(e.ast,s.operation)[0];if(!n)return;const r=i.getChildFields(n);r&&await Promise.all(r.map((({fieldNode:e})=>this._parseEntityAndRequestFieldPathCacheEntryData(e,{requestFieldPath:s.operation},t,a,s))))}async _setEntityCacheEntry({cacheability:e,fieldData:t,fieldTypeInfo:i},s,n){const r=`${i.isEntity?i.typeName:t.__typename}::${String(t[this._typeIDKey])}`,c=await this._checkCacheEntry(a.DATA_ENTITIES,r,s,n);c&&(t=_(c.entry,t,this._typeIDKey)),await this._setCacheEntry(a.DATA_ENTITIES,r,t,{cacheHeaders:{cacheControl:e.printCacheControl()},tag:s.tag},s,n)}_setFieldCacheability(e,t,{cacheMetadata:a,data:s},n,c){const{requestFieldPath:h}=t,d=i.buildFieldKeysAndPaths(e,t,c),{requestFieldPath:o,responseDataPath:l}=d;if(!i.isObjectLike(s))return;const y=r.get(s,l),u=c.fieldTypeMap.get(o);(i.isObjectLike(y)||u?.hasDirectives)&&(this._setFieldTypeCacheDirective(a,{ancestorRequestFieldPath:h,requestFieldPath:o},c),i.isObjectLike(y)&&i.iterateChildFields(e,y,c.fragmentDefinitions,((e,t,i,r,h)=>{this._setFieldCacheability(e,{index:h,requestFieldPath:o,responseDataPath:l},{cacheMetadata:a,data:s},n,c)})))}_setFieldTypeCacheDirective(e,{ancestorRequestFieldPath:a,requestFieldPath:i},{fieldTypeMap:n,operation:r}){if(e.has(i))return;const c=n.get(i);if(c&&this._typeCacheDirectives[c.typeName]){const a=new s.Cacheability({cacheControl:this._typeCacheDirectives[c.typeName]});t._setCacheMetadata(e,a,i,r)}else this._cascadeCacheControl&&a&&t._setCacheMetadata(e,e.get(a),i,r)}_setPartialQueryResponse(e,t,a,i){this._partialQueryResponses.set(e,t)}async _setQueryResponseCacheEntry(e,{cacheMetadata:s,data:n},r,c){const h=i.dehydrateCacheMetadata(s),d=t._getOperationCacheControl(s,c.operation);await this._setCacheEntry(a.QUERY_RESPONSES,e,{cacheMetadata:h,data:n},{cacheHeaders:{cacheControl:d},tag:r.tag},r,c)}async _setRequestFieldPathCacheEntry(e,{cacheability:t,fieldData:s},n,r){const{hashedRequestFieldCacheKey:c,requestFieldCacheKey:h}=e,d=await this._checkCacheEntry(a.REQUEST_FIELD_PATHS,c,n,{...r,requestFieldCacheKey:h});d&&i.isObjectLike(d.entry)&&i.isObjectLike(s)&&(s=_(d.entry,s,this._typeIDKey)),this._setCacheEntry(a.REQUEST_FIELD_PATHS,c,s,{cacheHeaders:{cacheControl:t.printCacheControl()},tag:n.tag},n,{...r,requestFieldCacheKey:h})}_setResponseChunksAwaitingCaching(e,t){const a=this._responseChunksAwaitingCaching.get(t.requestID);a?this._responseChunksAwaitingCaching.set(t.requestID,[...a,e]):this._responseChunksAwaitingCaching.set(t.requestID,[e])}},t(M.prototype,"_getCacheEntry",[T],Object.getOwnPropertyDescriptor(M.prototype,"_getCacheEntry"),M.prototype),t(M.prototype,"_setCacheEntry",[R],Object.getOwnPropertyDescriptor(M.prototype,"_setCacheEntry"),M.prototype),t(M.prototype,"_setPartialQueryResponse",[K],Object.getOwnPropertyDescriptor(M.prototype,"_setPartialQueryResponse"),M.prototype),M);exports.CacheManager=A;
1
+ "use strict";require("core-js/modules/web.structured-clone.js"),require("core-js/modules/es.array.push.js");var e=require("@graphql-box/core"),t=require("@graphql-box/helpers"),a=require("cacheability"),i=require("graphql"),s=require("lodash-es");const n="noCache",r=(e,a)=>t.isArray(e)?e.reduce(((e,t)=>!!e&&r(t,a)),!0):!!t.isPlainObject(e)&&c(e,a),c=(e,a)=>{const i=t.isPlainObject(e)?Object.keys(e):[...e.keys()];return!(1!==i.length||!t.isPlainObject(e)||!e[a])||i.reduce(((i,n)=>!!i&&(s.isNumber(n)&&t.isArray(e)||s.isString(n)&&t.isPlainObject(e)?r(e[n],a):i)),!0)},h=({entity:e,queryResponse:t,requestPath:a})=>!e&&!t&&!a,d=e=>!!e.entity,o=({entity:e,requestPath:t})=>!!(e??t),l=e=>!!e.queryResponse,y=e=>!!e.requestPath,u=(e,a,i)=>t.mergeObjects(e,a,((e,a)=>t.isPlainObject(a)&&a[i]?a[i]:void 0)),p=(e,a,i)=>!e&&a?a:t.isObjectLike(e)&&t.isObjectLike(a)?u(e,a,i):e,f=(e,t,a)=>`${t.isEntity?t.typeName:e.__typename}::${String(e[a.typeIDKey])}`,_=({_cacheMetadata:e,fallback:t,headers:i})=>{if(e&&!s.isEmpty(e)){const[t,...i]=Object.values(e);return new a.Cacheability({metadata:i.reduce(((e,t)=>e?t.ttl<e.ttl?t:e:t),t)})}return i?.has("cache-control")?new a.Cacheability({headers:i}):new a.Cacheability({cacheControl:t})},g=(e,a,i)=>{if(!t.isPlainObject(e)||!(i in e))return!1;const{isEntity:s=!1,possibleTypes:n=[]}=a??{};return!!s||0!==n.length&&n.some((t=>t.typeName===e.__typename))},C=(e,a,i,n)=>{if(!t.isPlainObject(e))return e;const r=t.resolveFragments(a.selectionSet?.selections,n.fragmentDefinitions);return s.keys(e).reduce(((a,s)=>{const c=r.find((({fieldNode:e})=>t.getName(e)===s));if(c){const a=t.buildFieldKeysAndPaths(c.fieldNode,i,n),r=n.fieldTypeMap.get(a.requestFieldPath);(g(e[s],r,n.typeIDKey)||r?.hasArguments||r?.hasDirectives)&&delete e[s]}return a}),e)},m=(e,a,i,s)=>{const n=t.resolveFragments(a.selectionSet?.selections,s.fragmentDefinitions);return Object.keys(e).reduce(((a,r)=>{const c=n.find((({fieldNode:e})=>t.getName(e)===r));if(c){const{requestFieldPath:a}=t.buildFieldKeysAndPaths(c.fieldNode,i,s),n=s.fieldTypeMap.get(a);(g(e[r],n,s.typeIDKey)||n?.hasArguments)&&delete e[r]}return a}),e)},D=(e,t)=>{if(!e||0===e.length)return{hasData:!1,typeUnused:!!t};const[a]=e;if(a){const{hasData:e,typeName:i}=a;return{hasData:e,typeUnused:i?i!==t:void 0}}return{hasData:e.some((({hasData:e,typeName:a})=>a===t&&e)),typeUnused:!e.every((({typeName:e})=>e===t))}},E=(a,n,r,c,h)=>{const{fragmentDefinitions:d,typeIDKey:o}=h,l=t.getChildFields(a,{fragmentDefinitions:d});if(!l)return!1;const y={};for(let s=l.length-1;s>=0;s-=1){const u=l[s];if(!u)continue;const{fieldNode:p,fragmentKind:f,fragmentName:_,typeName:g}=u;f===i.Kind.FRAGMENT_SPREAD&&_&&!y[_]&&(y[_]={hasData:0,total:d?.[_]?t.getChildFields(d[_],{fragmentDefinitions:d})?.length??0:0});const C=t.getName(p);if(C===o||C===e.TYPE_NAME_KEY)continue;const{requestFieldPath:m}=t.buildFieldKeysAndPaths(p,{requestFieldPath:c},h),{hasData:F,typeUnused:b}=D(n.get(m),g);if(F||b)if(f===i.Kind.FRAGMENT_SPREAD&&_){const e=y[_];e&&(e.hasData+=1)}else t.hasChildFields(p,{fragmentDefinitions:d})?E(p,n,r,m,h)&&t.deleteChildFields(a,p):t.deleteChildFields(a,p)}return((e,a,i,n)=>{if(!s.isEmpty(a))for(const[s,r]of Object.entries(a)){const a=i[s];if(!a)continue;a.paths.push(n);const{hasData:c,total:h}=r;c===h&&(t.deleteFragmentSpreads(e,s),a.deleted+=1)}})(a,y,r,c),((e,{fragmentDefinitions:a,typeIDKey:i})=>{const s=t.getInlineFragments(e);let n=!1;for(const r of s){const s=t.getChildFields(r,{fragmentDefinitions:a});if(!s||0===s.length){t.deleteInlineFragments(e,r),n=!0;continue}const[c]=s;if(c){const{fieldNode:a}=c;t.getName(a)===i&&(t.deleteInlineFragments(e,r),n=!0)}}})(a,h),((a,{fragmentDefinitions:i,typeIDKey:s})=>{const n=t.getChildFields(a,{fragmentDefinitions:i});if(!n||n.length>3)return!1;const r=n.map((({fieldNode:e})=>e.name.value));if(2===r.length&&r.every((t=>t===s||t===e.TYPE_NAME_KEY)))return t.deleteChildFields(a,n.map((({fieldNode:e})=>e))),!0;if(1===r.length&&r[0]===s||r[0]===e.TYPE_NAME_KEY){const[e]=n;if(e){const{fieldNode:i}=e;return t.deleteChildFields(a,i),!0}}})(a,h),!t.hasChildFields(a,{fragmentDefinitions:d})},F=(e,{fieldPathChecklist:a},i)=>{const{ast:n}=e,r=t.getOperationDefinitions(n,i.operation)[0];if(!r)return n;const{fragmentDefinitions:c,operation:h}=i,d=t.getChildFields(r,{fragmentDefinitions:c});if(!d)return n;const o=(({request:e},{fragmentDefinitions:t})=>s.keys(t??{}).reduce(((t,a)=>(t[a]={deleted:0,paths:[],total:(e.match(new RegExp(`\\.\\.\\.${a}`,"g"))??[]).length},t)),{}))(e,i);for(let e=d.length-1;e>=0;e-=1){const{fieldNode:s}=d[e],{requestFieldPath:n}=t.buildFieldKeysAndPaths(s,{requestFieldPath:h},i);E(s,a,o,n,i)&&t.deleteChildFields(r,s)}return i.queryFiltered=!0,((e,a,i,n)=>{const r=s.keys(i).reduce(((e,t)=>{const a=i[t];if(!a)return e;const{deleted:s,paths:n,total:r}=a;return 0===s&&1===r?[...e,{name:t,path:n[0]}]:e}),[]),{fragmentDefinitions:c={}}=n;for(const{name:e,path:t}of r){const s=c[e];s&&E(s,a,i,t,n)}const h=s.keys(i).reduce(((e,t)=>{const a=i[t];if(!a)return e;const{deleted:s,total:n}=a;return s>0&&s===n?[...e,t]:e}),[]);return 0===h.length?e:t.deleteFragmentDefinitions(e,{include:h})})(n,a,o,i)},b=(e,a)=>t.isArray(e)&&s.isNumber(a)||t.isPlainObject(e)&&s.isString(a)?e[a]:void 0,P=a=>!!t.isObjectLike(a)&&(e.TYPE_NAME_KEY in a&&s.isString(a[e.TYPE_NAME_KEY]));function q(e,t,a,i){var s,n=arguments.length,r=n<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,a):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,a,i);else for(var c=e.length-1;c>=0;c--)(s=e[c])&&(r=(n<3?s(r):n>3?s(t,a,r):s(t,a))||r);return n>3&&r&&Object.defineProperty(t,a,r),r}function R(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)}class N{static _countFieldPathChecklist(e){const t={missing:0,total:0};for(const[,a]of e){t.total+=a.length;const e=a.filter((({hasData:e})=>!e));t.missing+=e.length}return t}static _getFieldDataFromAncestor(e,a){const i=b(e,a);return t.isObjectLike(i)?structuredClone(i):i}static _getOperationCacheControl(e,t){const a="no-cache";if(!e)return a;const i=e.get(t);return i?i.printCacheControl():a}static _isNodeEntity(e){if(!e)return!1;const{isEntity:t,possibleTypes:a}=e;return t||a.some((e=>e.isEntity))}static _isNodeRequestFieldPath(e){return!!e&&(this._isNodeEntity(e)||e.hasArguments||e.hasDirectives)}static _isValid(e){return!s.get(e,["metadata","cacheControl",n],!1)&&e.checkTTL()}static _mergeResponseCacheMetadata(e,t){return t?new Map([...t.cacheMetadata,...e]):e}static _setCachedData(e,{data:a},i){const n=a=>{(t.isArray(e)&&s.isNumber(i)||t.isPlainObject(e))&&(e[i]=a)};t.isObjectLike(a)||s.isUndefined(a)?t.isArray(a)?n([]):t.isPlainObject(a)&&n({}):n(a)}static _setCachedResponseSlice(e,{cacheMetadata:t,data:a,fieldPathChecklist:i},{propNameOrIndex:s,requestFieldPath:n},r,c,{operation:h}){N._setCacheMetadata(t,e.cacheability,n,h),N._setFieldPathChecklist(i,e,n,r),N._setCachedData(a,e,s)}static _setCacheMetadata(e,t,a,i){if(!t)return;e.set(a,t);const s=e.get(i);(!s||s.metadata.ttl>t.metadata.ttl)&&e.set(i,t)}static _setFieldPathChecklist(e,{data:t},a,{dataTypename:n,fieldTypename:r,fragmentKind:c,fragmentName:h}){if(s.isUndefined(r)||c===i.Kind.FRAGMENT_SPREAD){if(e.has(a))return;return void e.set(a,[{fragmentKind:c,fragmentName:h,hasData:!s.isUndefined(t)}])}if(n!==r)return;const d=e.get(a)??[];d.some((({typeName:e})=>e===n))||e.set(a,[...d,{fragmentKind:c,fragmentName:h,hasData:!s.isUndefined(t),typeName:n}])}constructor(a){this._cacheTiersEnabled={entity:!1,queryResponse:!0,requestPath:!1},this._partialQueryResponses=new Map,this._responseChunksAwaitingCaching=new Map;const i=[];if("cache"in a||i.push(new t.ArgsError("@graphql-box/cache-manager expected cache to be in options.")),a.typeCacheDirectives&&!t.isPlainObject(a.typeCacheDirectives)){const e="@graphql-box/cache-manager expected options.typeCacheDirectives to be a plain object.";i.push(new t.ArgsError(e))}if(i.length>0)throw new t.GroupedError("@graphql-box/cache-manager argument validation errors.",i);"function"==typeof a.cache?a.cache().then((e=>{this._cache=e})).catch((e=>{throw e})):this._cache=a.cache,this._cacheTiersEnabled={...this._cacheTiersEnabled,...a.cacheTiersEnabled},this._cascadeCacheControl=a.cascadeCacheControl??!1,this._fallbackOperationCacheability=a.fallbackOperationCacheability??n,this._typeCacheDirectives=a.typeCacheDirectives??{},this._typeIDKey=a.typeIDKey??e.DEFAULT_TYPE_ID_KEY}async analyzeQuery(e,a,n){if(!o(this._cacheTiersEnabled))return{updated:e};const{ast:r,hash:h}=e,d={...n,fragmentDefinitions:t.getFragmentDefinitions(r),typeIDKey:this._typeIDKey},y=await this._retrieveCachedResponseData(e,a,d),{cacheMetadata:u,data:p,fieldCount:f}=y;if(f.missing===f.total||((e,t)=>c(e,t))(p,this._typeIDKey))return{updated:e};if(!f.missing&&l(this._cacheTiersEnabled)){const e=this._setQueryResponseCacheEntry(h,{cacheMetadata:u,data:p},a,d);return a.awaitDataCaching&&await e,{response:{cacheMetadata:u,data:p}}}const _=F(e,y,d),g=i.print(_),{fragmentDefinitions:C,typeIDKey:m,...D}=d;return s.assign(n,{...D,filteredRequest:g}),l(this._cacheTiersEnabled)&&this._setPartialQueryResponse(h,{cacheMetadata:u,data:p},a,n),{updated:{ast:_,hash:t.hashRequest(g),request:g}}}get cache(){return this._cache}async cacheQuery(e,a,i,s,n){const r={...n,fragmentDefinitions:t.getFragmentDefinitions((a??e).ast),typeIDKey:this._typeIDKey};return this._cacheResponse(e,a,i,s,r)}async cacheResponse(e,a,i,s){const n={...s,fragmentDefinitions:t.getFragmentDefinitions(e.ast),typeIDKey:this._typeIDKey};return this._cacheResponse(e,void 0,a,i,n)}async checkCacheEntry(e,t,a,i){return!h(this._cacheTiersEnabled)&&this._checkCacheEntry(e,t,a,i)}async checkQueryResponseCacheEntry(a,i,s){if(!l(this._cacheTiersEnabled))return!1;const n=await this._checkCacheEntry(e.QUERY_RESPONSES,a,i,s);if(!n)return!1;const{cacheMetadata:r,data:c}=n.entry;return{cacheMetadata:t.rehydrateCacheMetadata(r),data:c}}deletePartialQueryResponse(e){l(this._cacheTiersEnabled)&&this._partialQueryResponses.delete(e)}async setQueryResponseCacheEntry(e,t,a,i){if(l(this._cacheTiersEnabled))return this._setQueryResponseCacheEntry(e.hash,t,a,i)}async _analyzeFieldNode(e,a,i,s,n){await(t.hasChildFields(e,{fragmentDefinitions:n.fragmentDefinitions})?this._analyzeParentFieldNode(e,a,i,s,n):this._analyzeLeafFieldNode(e,a,i,s,n))}async _analyzeLeafFieldNode(e,a,i,s,n){const r=t.buildFieldKeysAndPaths(e,a,n),{hashedRequestFieldCacheKey:c,propNameOrIndex:h,requestFieldCacheKey:d,requestFieldPath:o}=r,l=n.fieldTypeMap.get(o),{entityData:u,fragmentKind:p,fragmentName:f,requestFieldPathData:_,typeName:g}=a,C={dataTypename:P(u)?u.__typename:P(_)?_.__typename:void 0,fieldTypename:g,fragmentKind:p,fragmentName:f};if(N._isNodeRequestFieldPath(l)){if(y(this._cacheTiersEnabled)){const{cacheability:e,entry:t}=await this._retrieveCachedRequestFieldPathData(c,d,s,n);N._setCachedResponseSlice({cacheability:e,data:t},i,r,C,s,n)}}else{const e=N._getFieldDataFromAncestor(u,h)??N._getFieldDataFromAncestor(_,h);N._setFieldPathChecklist(i.fieldPathChecklist,{data:e},o,C),N._setCachedData(i.data,{data:e},h)}}async _analyzeParentFieldNode(a,i,n,r,c){const h=t.buildFieldKeysAndPaths(a,i,c),{propNameOrIndex:d,requestFieldCacheKey:o,requestFieldPath:l}=h,y=c.fieldTypeMap.get(l);if(!y)return;const{cacheability:u,data:p,entityData:f,requestFieldPathData:_}=await this._retrieveCachedParentNodeData(i,h,y,r,c),{fragmentKind:g,fragmentName:C,typeName:m}=i,D=s.get(p,e.TYPE_NAME_KEY);if(N._setCachedResponseSlice({cacheability:u,data:p},n,h,{dataTypename:D,fieldTypename:m,fragmentKind:g,fragmentName:C},r,c),!t.isObjectLike(p))return;const E=[];t.iterateChildFields(a,p,c.fragmentDefinitions,((e,t,a,i,s)=>{E.push(this._analyzeFieldNode(e,{cacheability:u,entityData:f,fragmentKind:a,fragmentName:i,index:s,requestFieldCacheKey:o,requestFieldPath:l,requestFieldPathData:_,typeName:t},{...n,data:b(n.data,d)},r,c))})),await Promise.all(E)}_buildCacheMetadata({ast:e},{data:a,...i},s,n){const r=this._createCacheMetadata({data:a,...i},n),c=t.getOperationDefinitions(e,n.operation)[0];if(!c)return r;const h=t.getChildFields(c);if(!h)return r;for(const{fieldNode:e}of h)this._setFieldCacheability(e,{requestFieldPath:n.operation},{cacheMetadata:r,data:a},s,n);return r}async _cacheResponse(e,t,a,n,r){const c=((e,t)=>{if(!t.normalizePatchResponseData)return e;const{data:a,paths:i,...n}=e;return i?.length&&s.isString(i[0])?{...n,data:s.set({},i[0],a),paths:i}:e})(a,r);let d=c;((e,t)=>t.hasDeferOrStream&&e.hasNext)(a,r)&&(this._setResponseChunksAwaitingCaching(c,r),d=void 0),((e,t)=>t.hasDeferOrStream&&!e.hasNext&&e.paths)(a,r)&&(d=this._retrieveResponseDataForCaching(c,r));const y=[];if(d&&(u=this._cacheTiersEnabled,!h(u))){const{data:a}=d,s=this._buildCacheMetadata(e,d,n,r);let h,u;if(o(this._cacheTiersEnabled)&&y.push(this._setEntityAndRequestFieldPathCacheEntries(e,{cacheMetadata:s,entityData:structuredClone(a),requestFieldPathData:structuredClone(a)},n,r)),r.operation===i.OperationTypeNode.QUERY&&l(this._cacheTiersEnabled)){let i;r.queryFiltered&&t&&(y.push(this._setQueryResponseCacheEntry(t.hash,{cacheMetadata:s,data:a},n,r)),i=this._getPartialQueryResponse(e.hash)),h=N._mergeResponseCacheMetadata(s,i),u=this._mergeResponseData(a,i),y.push(this._setQueryResponseCacheEntry(e.hash,{cacheMetadata:h,data:u},n,r))}if(n.awaitDataCaching&&await Promise.all(y),((e,t)=>!t.hasDeferOrStream&&!e.hasNext&&!e.paths)(c,r)&&h&&u)return{cacheMetadata:h,data:u}}var u;const{data:p,hasNext:f,paths:_}=c;return{cacheMetadata:this._buildCacheMetadata(e,c,n,r),data:p,hasNext:f,paths:_}}async _checkCacheEntry(e,t,a,i){try{const n=await this._hasCacheEntry(e,t);if(!n||!N._isValid(n))return!1;const r=await this._getCacheEntry(e,t,a,i);return!s.isUndefined(r)&&{cacheability:n,entry:r}}catch{return!1}}_createCacheMetadata({_cacheMetadata:e,headers:a},{operation:i}){const s=new Map,n=_({_cacheMetadata:e,fallback:this._fallbackOperationCacheability,headers:a});return s.set(i,n),e&&t.rehydrateCacheMetadata(e,s),s}async _getCacheEntry(e,t,a,i){return this._cache?.get(`${e}::${t}`)}_getPartialQueryResponse(e){const t=this._partialQueryResponses.get(e);return this._partialQueryResponses.delete(e),t}async _hasCacheEntry(e,t){try{return await(this._cache?.has(`${e}::${t}`))??!1}catch{return!1}}_mergeResponseData(e,t){return t?u(t.data,e,this._typeIDKey):e}async _parseEntityAndRequestFieldPathCacheEntryData(a,n,{cacheMetadata:r,entityData:c,requestFieldPathData:h},o,l){const u=t.buildFieldKeysAndPaths(a,n,l),{hashedRequestFieldCacheKey:p,requestFieldCacheKey:_,requestFieldPath:D,responseDataPath:E}=u,F=s.get(h,E),b=l.fieldTypeMap.get(D),P=r.get(D);if(!t.isObjectLike(F)&&!b?.hasDirectives)return;if(t.isObjectLike(F)){const e=[];t.iterateChildFields(a,F,l.fragmentDefinitions,((t,a,i,s,n)=>{e.push(this._parseEntityAndRequestFieldPathCacheEntryData(t,{index:n,requestFieldCacheKey:_,requestFieldPath:D,responseDataPath:E},{cacheMetadata:r,entityData:c,requestFieldPathData:h},o,l))})),await Promise.all(e)}if(s.isUndefined(F)||!b||!P)return;const q=g(F,b,this._typeIDKey),R=b.hasArguments||b.hasDirectives;l.operation===i.OperationTypeNode.QUERY&&(q||R)&&y(this._cacheTiersEnabled)&&(await this._setRequestFieldPathCacheEntry(u,{cacheability:P,fieldData:C(structuredClone(F),a,u,l),fieldTypeInfo:b},o,l),t.hasChildFields(a,{fragmentDefinitions:l.fragmentDefinitions})&&(q?s.set(h,E,{__cacheKey:`${e.REQUEST_FIELD_PATHS}::${p}`}):s.unset(h,E))),q&&d(this._cacheTiersEnabled)&&(await this._setEntityCacheEntry({cacheability:P,fieldData:m(structuredClone(s.get(c,E)),a,u,l),fieldTypeInfo:b},o,l),s.set(c,E,{__cacheKey:`${e.DATA_ENTITIES}::${f(F,b,l)}`}))}async _retrieveCachedEntityData(t,{possibleTypes:a,typeName:i},s,n){const r=[...a.map((e=>e.typeName)),i],c=(await Promise.all(r.map((a=>this._checkCacheEntry(e.DATA_ENTITIES,`${a}::${String(t)}`,s,n))))).filter((e=>!!e));let h;if(1===c.length)h=c[0];else if(c.length>1){c.sort((({cacheability:e},{cacheability:t})=>e.metadata.ttl-t.metadata.ttl));const e=c[0];e&&(h={cacheability:e.cacheability,entry:c.reduce(((e,{entry:t})=>u(e,t,this._typeIDKey)),{})})}return h??{}}async _retrieveCachedParentNodeData({entityData:e,requestFieldPathData:a},{hashedRequestFieldCacheKey:i,propNameOrIndex:n,requestFieldCacheKey:r},c,h,o){let l,u=N._getFieldDataFromAncestor(e,n),f=N._getFieldDataFromAncestor(a,n);if(N._isNodeRequestFieldPath(c)&&y(this._cacheTiersEnabled)){const{cacheability:e,entry:t}=await this._retrieveCachedRequestFieldPathData(i,r,h,o);f=p(f,t,this._typeIDKey),e&&(l=e)}const _=((e,{typeIDValue:a},i)=>a||(t.isPlainObject(e)?e[i]:void 0))(f,c,this._typeIDKey);if(N._isNodeEntity(c)&&_&&d(this._cacheTiersEnabled)){const{cacheability:e,entry:t}=await this._retrieveCachedEntityData(_,c,h,o);u=p(u,t,this._typeIDKey),e&&(!l||e.metadata.ttl>l.metadata.ttl)&&(l=e)}return{cacheability:l,data:s.isEqual(u,f)?u:p(u,f,this._typeIDKey),entityData:u,requestFieldPathData:f}}async _retrieveCachedRequestFieldPathData(t,a,i,s){return await this._checkCacheEntry(e.REQUEST_FIELD_PATHS,t,i,{...s,requestFieldCacheKey:a})||{}}async _retrieveCachedResponseData({ast:e},a,i){const s={cacheMetadata:new Map,data:{},fieldCount:{missing:0,total:0},fieldPathChecklist:new Map},n=t.getOperationDefinitions(e,i.operation)[0];if(!n)return s;const r=t.getChildFields(n);return r?(await Promise.all(r.map((({fieldNode:e})=>this._analyzeFieldNode(e,{requestFieldPath:i.operation},s,a,i)))),s.fieldCount=N._countFieldPathChecklist(s.fieldPathChecklist),s):s}_retrieveResponseDataForCaching(e,t){const a=this._responseChunksAwaitingCaching.get(t.requestID);return this._responseChunksAwaitingCaching.delete(t.requestID),(i=[...a??[],e]).reduce(((e,t,a)=>{const{_cacheMetadata:n,data:r,hasNext:c,headers:h,paths:d}=t;return n&&(e._cacheMetadata=e._cacheMetadata?{...e._cacheMetadata,...n}:n),e.data=s.merge(e.data,r),0===a&&(e.headers=h),a===i.length-1&&(e.hasNext=c),d&&(e.paths||(e.paths=[]),e.paths.push(...d)),e}),{data:{}});var i}async _setCacheEntry(e,t,a,i,s,n){try{await(this._cache?.set(`${e}::${t}`,structuredClone(a),i))}catch{}}async _setEntityAndRequestFieldPathCacheEntries(e,a,i,s){const n=t.getOperationDefinitions(e.ast,s.operation)[0];if(!n)return;const r=t.getChildFields(n);r&&await Promise.all(r.map((({fieldNode:e})=>this._parseEntityAndRequestFieldPathCacheEntryData(e,{requestFieldPath:s.operation},a,i,s))))}async _setEntityCacheEntry({cacheability:t,fieldData:a,fieldTypeInfo:i},s,n){const r=`${i.isEntity?i.typeName:a.__typename}::${String(a[this._typeIDKey])}`,c=await this._checkCacheEntry(e.DATA_ENTITIES,r,s,n);c&&(a=u(c.entry,a,this._typeIDKey)),await this._setCacheEntry(e.DATA_ENTITIES,r,a,{cacheHeaders:{cacheControl:t.printCacheControl()},tag:s.tag},s,n)}_setFieldCacheability(e,a,{cacheMetadata:i,data:n},r,c){const{requestFieldPath:h}=a,d=t.buildFieldKeysAndPaths(e,a,c),{requestFieldPath:o,responseDataPath:l}=d;if(!t.isObjectLike(n))return;const y=s.get(n,l),u=c.fieldTypeMap.get(o);(t.isObjectLike(y)||u?.hasDirectives)&&(this._setFieldTypeCacheDirective(i,{ancestorRequestFieldPath:h,requestFieldPath:o},c),t.isObjectLike(y)&&t.iterateChildFields(e,y,c.fragmentDefinitions,((e,t,a,s,h)=>{this._setFieldCacheability(e,{index:h,requestFieldPath:o,responseDataPath:l},{cacheMetadata:i,data:n},r,c)})))}_setFieldTypeCacheDirective(e,{ancestorRequestFieldPath:t,requestFieldPath:i},{fieldTypeMap:s,operation:n}){if(e.has(i))return;const r=s.get(i);if(r&&this._typeCacheDirectives[r.typeName]){const t=new a.Cacheability({cacheControl:this._typeCacheDirectives[r.typeName]});N._setCacheMetadata(e,t,i,n)}else this._cascadeCacheControl&&t&&N._setCacheMetadata(e,e.get(t),i,n)}_setPartialQueryResponse(e,t,a,i){this._partialQueryResponses.set(e,t)}async _setQueryResponseCacheEntry(a,{cacheMetadata:i,data:s},n,r){const c=t.dehydrateCacheMetadata(i),h=N._getOperationCacheControl(i,r.operation);await this._setCacheEntry(e.QUERY_RESPONSES,a,{cacheMetadata:c,data:s},{cacheHeaders:{cacheControl:h},tag:n.tag},n,r)}async _setRequestFieldPathCacheEntry(a,{cacheability:i,fieldData:s},n,r){const{hashedRequestFieldCacheKey:c,requestFieldCacheKey:h}=a,d=await this._checkCacheEntry(e.REQUEST_FIELD_PATHS,c,n,{...r,requestFieldCacheKey:h});d&&t.isObjectLike(d.entry)&&t.isObjectLike(s)&&(s=u(d.entry,s,this._typeIDKey)),this._setCacheEntry(e.REQUEST_FIELD_PATHS,c,s,{cacheHeaders:{cacheControl:i.printCacheControl()},tag:n.tag},n,{...r,requestFieldCacheKey:h})}_setResponseChunksAwaitingCaching(e,t){const a=this._responseChunksAwaitingCaching.get(t.requestID);a?this._responseChunksAwaitingCaching.set(t.requestID,[...a,e]):this._responseChunksAwaitingCaching.set(t.requestID,[e])}}q([(t,a,i)=>{const s=i.value;s&&(i.value=async function(...t){return new Promise((a=>{(async()=>{const{debugManager:i,requestFieldCacheKey:n,...r}=t[3];if(!i)return void a(await s.apply(this,t));const c=i.now(),h=await s.apply(this,t),d=i.now(),o=d-c;a(h);const l={cacheType:t[0],context:r,options:t[2],requestHash:t[1],result:h,stats:{duration:o,endTime:d,startTime:c},...n?{decryptedCacheKey:n}:{}};i.log(e.CACHE_ENTRY_QUERIED,l)})()}))})},R("design:type",Function),R("design:paramtypes",["undefined"==typeof CacheTypes?Object:CacheTypes,String,"undefined"==typeof RequestOptions?Object:RequestOptions,Object]),R("design:returntype",Promise)],N.prototype,"_getCacheEntry",null),q([(t,a,i)=>{const s=i.value;s&&(i.value=async function(...t){return new Promise((a=>{(async()=>{const{debugManager:i,requestFieldCacheKey:n,...r}=t[5];if(!i)return await s.apply(this,t),void a();const c=i.now();await s.apply(this,t);const h=i.now(),d=h-c;a();const o={cacheType:t[0],cachemapOptions:t[3],context:r,options:t[4],requestHash:t[1],stats:{duration:d,endTime:h,startTime:c},value:t[2],...n?{decryptedCacheKey:n}:{}};i.log(e.CACHE_ENTRY_ADDED,o)})()}))})},R("design:type",Function),R("design:paramtypes",["undefined"==typeof CacheTypes?Object:CacheTypes,String,Object,"undefined"==typeof CachemapOptions?Object:CachemapOptions,"undefined"==typeof RequestOptions?Object:RequestOptions,Object]),R("design:returntype",Promise)],N.prototype,"_setCacheEntry",null),q([(t,a,i)=>{const s=i.value;s&&(i.value=function(...t){const{debugManager:a,...i}=t[3];if(!a)return void s.apply(this,t);const n=a.now();s.apply(this,t);const r=a.now(),c=r-n;a.log(e.PARTIAL_QUERY_COMPILED,{context:i,options:t[2],requestHash:t[0],result:t[1],stats:{duration:c,endTime:r,startTime:n}})})},R("design:type",Function),R("design:paramtypes",[String,"undefined"==typeof PartialQueryResponse?Object:PartialQueryResponse,"undefined"==typeof RequestOptions?Object:RequestOptions,"undefined"==typeof CacheManagerContext?Object:CacheManagerContext]),R("design:returntype",void 0)],N.prototype,"_setPartialQueryResponse",null),exports.CacheManager=N;
2
2
  //# sourceMappingURL=index.cjs.map