@graphql-box/cache-manager 2.4.2 → 2.5.0
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.
- package/lib/browser/index.js +1 -1
- package/lib/browser/index.js.map +1 -1
- package/lib/browser/production.analysis.txt +62 -26
- package/lib/main/helpers/isFirstResponseChunk.js +11 -0
- package/lib/main/helpers/isFirstResponseChunk.js.map +1 -0
- package/lib/main/helpers/isLastResponseChunk.js +11 -0
- package/lib/main/helpers/isLastResponseChunk.js.map +1 -0
- package/lib/main/helpers/isNotLastResponseChunk.js +11 -0
- package/lib/main/helpers/isNotLastResponseChunk.js.map +1 -0
- package/lib/main/helpers/isNotResponseChunk.js +11 -0
- package/lib/main/helpers/isNotResponseChunk.js.map +1 -0
- package/lib/main/helpers/mergeResponseDataSets.js +53 -0
- package/lib/main/helpers/mergeResponseDataSets.js.map +1 -0
- package/lib/main/helpers/normalizePatchResponseData.js +10 -5
- package/lib/main/helpers/normalizePatchResponseData.js.map +1 -1
- package/lib/main/main/index.js +124 -89
- package/lib/main/main/index.js.map +1 -1
- package/lib/module/helpers/isFirstResponseChunk.js +2 -0
- package/lib/module/helpers/isFirstResponseChunk.js.map +1 -0
- package/lib/module/helpers/isLastResponseChunk.js +2 -0
- package/lib/module/helpers/isLastResponseChunk.js.map +1 -0
- package/lib/module/helpers/isNotLastResponseChunk.js +2 -0
- package/lib/module/helpers/isNotLastResponseChunk.js.map +1 -0
- package/lib/module/helpers/isNotResponseChunk.js +2 -0
- package/lib/module/helpers/isNotResponseChunk.js.map +1 -0
- package/lib/module/helpers/mergeResponseDataSets.js +41 -0
- package/lib/module/helpers/mergeResponseDataSets.js.map +1 -0
- package/lib/module/helpers/normalizePatchResponseData.js +10 -5
- package/lib/module/helpers/normalizePatchResponseData.js.map +1 -1
- package/lib/module/main/index.js +121 -89
- package/lib/module/main/index.js.map +1 -1
- package/lib/types/defs/index.d.ts +2 -2
- package/lib/types/defs/index.d.ts.map +1 -1
- package/lib/types/helpers/isFirstResponseChunk.d.ts +5 -0
- package/lib/types/helpers/isFirstResponseChunk.d.ts.map +1 -0
- package/lib/types/helpers/isLastResponseChunk.d.ts +5 -0
- package/lib/types/helpers/isLastResponseChunk.d.ts.map +1 -0
- package/lib/types/helpers/isNotLastResponseChunk.d.ts +5 -0
- package/lib/types/helpers/isNotLastResponseChunk.d.ts.map +1 -0
- package/lib/types/helpers/isNotResponseChunk.d.ts +5 -0
- package/lib/types/helpers/isNotResponseChunk.d.ts.map +1 -0
- package/lib/types/helpers/mergeResponseDataSets.d.ts +4 -0
- package/lib/types/helpers/mergeResponseDataSets.d.ts.map +1 -0
- package/lib/types/helpers/normalizePatchResponseData.d.ts +2 -8
- package/lib/types/helpers/normalizePatchResponseData.d.ts.map +1 -1
- package/lib/types/main/index.d.ts +6 -3
- package/lib/types/main/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/__snapshots__/index.test.ts.snap +12481 -11881
- package/src/defs/index.ts +13 -13
- package/src/helpers/isFirstResponseChunk.ts +5 -0
- package/src/helpers/isLastResponseChunk.ts +5 -0
- package/src/helpers/isNotLastResponseChunk.ts +5 -0
- package/src/helpers/isNotResponseChunk.ts +5 -0
- package/src/helpers/mergeResponseDataSets.ts +35 -0
- package/src/helpers/normalizePatchResponseData.ts +8 -1
- package/src/index.test.ts +162 -86
- package/src/main/index.ts +150 -110
package/lib/module/main/index.js
CHANGED
|
@@ -23,6 +23,10 @@ import { buildFieldKeysAndPaths } from "../helpers/buildKeysAndPaths";
|
|
|
23
23
|
import deriveOpCacheability from "../helpers/deriveOpCacheability";
|
|
24
24
|
import filterOutPropsWithArgsOrDirectives from "../helpers/filterOutPropsWithArgsOrDirectives";
|
|
25
25
|
import filterQuery from "../helpers/filterQuery";
|
|
26
|
+
import isLastResponseChunk from "../helpers/isLastResponseChunk";
|
|
27
|
+
import isNotLastResponseChunk from "../helpers/isNotLastResponseChunk";
|
|
28
|
+
import isNotResponseChunk from "../helpers/isNotResponseChunk";
|
|
29
|
+
import mergeResponseDataSets from "../helpers/mergeResponseDataSets";
|
|
26
30
|
import normalizePatchResponseData from "../helpers/normalizePatchResponseData";
|
|
27
31
|
import { getValidTypeIDValue } from "../helpers/validTypeIDValue";
|
|
28
32
|
export let CacheManager = (_dec = logCacheQuery(), _dec2 = logCacheEntry(), _dec3 = logPartialCompiled(), (_class = class CacheManager {
|
|
@@ -197,6 +201,8 @@ export let CacheManager = (_dec = logCacheQuery(), _dec2 = logCacheEntry(), _dec
|
|
|
197
201
|
|
|
198
202
|
_defineProperty(this, "_partialQueryResponses", new Map());
|
|
199
203
|
|
|
204
|
+
_defineProperty(this, "_responseChunksAwaitingCaching", new Map());
|
|
205
|
+
|
|
200
206
|
_defineProperty(this, "_typeCacheDirectives", void 0);
|
|
201
207
|
|
|
202
208
|
_defineProperty(this, "_typeIDKey", void 0);
|
|
@@ -288,6 +294,22 @@ export let CacheManager = (_dec = logCacheQuery(), _dec2 = logCacheEntry(), _dec
|
|
|
288
294
|
};
|
|
289
295
|
}
|
|
290
296
|
|
|
297
|
+
async cacheQuery(requestData, updatedRequestData, rawResponseData, options, context) {
|
|
298
|
+
const cacheManagerContext = { ...context,
|
|
299
|
+
fragmentDefinitions: getFragmentDefinitions(updatedRequestData.ast),
|
|
300
|
+
typeIDKey: this._typeIDKey
|
|
301
|
+
};
|
|
302
|
+
return this._cacheResponse(requestData, updatedRequestData, rawResponseData, options, cacheManagerContext);
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
async cacheResponse(requestData, rawResponseData, options, context) {
|
|
306
|
+
const cacheManagerContext = { ...context,
|
|
307
|
+
fragmentDefinitions: getFragmentDefinitions(requestData.ast),
|
|
308
|
+
typeIDKey: this._typeIDKey
|
|
309
|
+
};
|
|
310
|
+
return this._cacheResponse(requestData, undefined, rawResponseData, options, cacheManagerContext);
|
|
311
|
+
}
|
|
312
|
+
|
|
291
313
|
async checkCacheEntry(cacheType, hash, options, context) {
|
|
292
314
|
return this._checkCacheEntry(cacheType, hash, options, context);
|
|
293
315
|
}
|
|
@@ -313,66 +335,10 @@ export let CacheManager = (_dec = logCacheQuery(), _dec2 = logCacheEntry(), _dec
|
|
|
313
335
|
this._partialQueryResponses.delete(hash);
|
|
314
336
|
}
|
|
315
337
|
|
|
316
|
-
async resolveQuery(requestData, updatedRequestData, rawResponseData, options, context) {
|
|
317
|
-
const cacheManagerContext = { ...context,
|
|
318
|
-
fragmentDefinitions: getFragmentDefinitions(updatedRequestData.ast),
|
|
319
|
-
typeIDKey: this._typeIDKey
|
|
320
|
-
};
|
|
321
|
-
const dataCaching = [];
|
|
322
|
-
const {
|
|
323
|
-
cacheMetadata,
|
|
324
|
-
data,
|
|
325
|
-
hasNext,
|
|
326
|
-
paths
|
|
327
|
-
} = await this._resolveRequest(updatedRequestData, rawResponseData, options, cacheManagerContext);
|
|
328
|
-
let partialQueryResponse;
|
|
329
|
-
|
|
330
|
-
if (cacheManagerContext.queryFiltered) {
|
|
331
|
-
if (!(rawResponseData.hasNext || rawResponseData.paths)) {
|
|
332
|
-
dataCaching.push(this._setQueryResponseCacheEntry(updatedRequestData.hash, {
|
|
333
|
-
cacheMetadata,
|
|
334
|
-
data
|
|
335
|
-
}, options, cacheManagerContext));
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
if (!rawResponseData.paths) {
|
|
339
|
-
partialQueryResponse = this._getPartialQueryResponse(requestData.hash);
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
const responseCacheMetadata = CacheManager._mergeResponseCacheMetadata(cacheMetadata, partialQueryResponse);
|
|
344
|
-
|
|
345
|
-
const responseData = this._mergeResponseData(data, partialQueryResponse);
|
|
346
|
-
|
|
347
|
-
if (!(rawResponseData.hasNext || rawResponseData.paths)) {
|
|
348
|
-
dataCaching.push(this._setQueryResponseCacheEntry(requestData.hash, {
|
|
349
|
-
cacheMetadata: responseCacheMetadata,
|
|
350
|
-
data: responseData
|
|
351
|
-
}, options, cacheManagerContext));
|
|
352
|
-
}
|
|
353
|
-
|
|
354
|
-
if (options.awaitDataCaching) {
|
|
355
|
-
await Promise.all(dataCaching);
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
return {
|
|
359
|
-
cacheMetadata: responseCacheMetadata,
|
|
360
|
-
data: responseData,
|
|
361
|
-
hasNext,
|
|
362
|
-
paths
|
|
363
|
-
};
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
async resolveRequest(requestData, rawResponseData, options, context) {
|
|
367
|
-
const cacheManagerContext = { ...context,
|
|
368
|
-
fragmentDefinitions: getFragmentDefinitions(requestData.ast),
|
|
369
|
-
typeIDKey: this._typeIDKey
|
|
370
|
-
};
|
|
371
|
-
return this._resolveRequest(requestData, rawResponseData, options, cacheManagerContext);
|
|
372
|
-
}
|
|
373
|
-
|
|
374
338
|
async _analyzeFieldNode(fieldNode, cachedAncestorFieldData, cachedResponseData, options, context) {
|
|
375
|
-
if (hasChildFields(fieldNode
|
|
339
|
+
if (hasChildFields(fieldNode, {
|
|
340
|
+
fragmentDefinitions: context.fragmentDefinitions
|
|
341
|
+
})) {
|
|
376
342
|
await this._analyzeParentFieldNode(fieldNode, cachedAncestorFieldData, cachedResponseData, options, context);
|
|
377
343
|
} else {
|
|
378
344
|
await this._analyzeLeafFieldNode(fieldNode, cachedAncestorFieldData, cachedResponseData, options, context);
|
|
@@ -507,6 +473,81 @@ export let CacheManager = (_dec = logCacheQuery(), _dec2 = logCacheEntry(), _dec
|
|
|
507
473
|
return cacheMetadata;
|
|
508
474
|
}
|
|
509
475
|
|
|
476
|
+
async _cacheResponse(requestData, updatedRequestData, rawResponseData, options, context) {
|
|
477
|
+
const normalizedResponseData = normalizePatchResponseData(rawResponseData, context);
|
|
478
|
+
let responseDataForCaching = normalizedResponseData;
|
|
479
|
+
|
|
480
|
+
if (isNotLastResponseChunk(rawResponseData, context)) {
|
|
481
|
+
this._setResponseChunksAwaitingCaching(normalizedResponseData, context);
|
|
482
|
+
|
|
483
|
+
responseDataForCaching = undefined;
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
if (isLastResponseChunk(rawResponseData, context)) {
|
|
487
|
+
responseDataForCaching = this._retrieveResponseDataForCaching(normalizedResponseData, context);
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
const dataCaching = [];
|
|
491
|
+
|
|
492
|
+
if (responseDataForCaching) {
|
|
493
|
+
const {
|
|
494
|
+
data
|
|
495
|
+
} = responseDataForCaching;
|
|
496
|
+
|
|
497
|
+
const cacheMetadata = this._buildCacheMetadata(requestData, responseDataForCaching, options, context);
|
|
498
|
+
|
|
499
|
+
dataCaching.push(this._setEntityAndRequestFieldPathCacheEntries(requestData, {
|
|
500
|
+
cacheMetadata,
|
|
501
|
+
entityData: _cloneDeep(data),
|
|
502
|
+
requestFieldPathData: _cloneDeep(data)
|
|
503
|
+
}, options, context));
|
|
504
|
+
let queryCacheMetadata;
|
|
505
|
+
let queryData;
|
|
506
|
+
|
|
507
|
+
if (context.operation === QUERY) {
|
|
508
|
+
let partialQueryResponse;
|
|
509
|
+
|
|
510
|
+
if (context.queryFiltered && updatedRequestData) {
|
|
511
|
+
dataCaching.push(this._setQueryResponseCacheEntry(updatedRequestData.hash, {
|
|
512
|
+
cacheMetadata,
|
|
513
|
+
data
|
|
514
|
+
}, options, context));
|
|
515
|
+
partialQueryResponse = this._getPartialQueryResponse(requestData.hash);
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
queryCacheMetadata = CacheManager._mergeResponseCacheMetadata(cacheMetadata, partialQueryResponse);
|
|
519
|
+
queryData = this._mergeResponseData(data, partialQueryResponse);
|
|
520
|
+
dataCaching.push(this._setQueryResponseCacheEntry(requestData.hash, {
|
|
521
|
+
cacheMetadata: queryCacheMetadata,
|
|
522
|
+
data: queryData
|
|
523
|
+
}, options, context));
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
if (options.awaitDataCaching) {
|
|
527
|
+
await Promise.all(dataCaching);
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
if (isNotResponseChunk(normalizedResponseData, context) && queryCacheMetadata && queryData) {
|
|
531
|
+
return {
|
|
532
|
+
cacheMetadata: queryCacheMetadata,
|
|
533
|
+
data: queryData
|
|
534
|
+
};
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
const {
|
|
539
|
+
data,
|
|
540
|
+
hasNext,
|
|
541
|
+
paths
|
|
542
|
+
} = normalizedResponseData;
|
|
543
|
+
return {
|
|
544
|
+
cacheMetadata: this._buildCacheMetadata(requestData, normalizedResponseData, options, context),
|
|
545
|
+
data,
|
|
546
|
+
hasNext,
|
|
547
|
+
paths
|
|
548
|
+
};
|
|
549
|
+
}
|
|
550
|
+
|
|
510
551
|
async _checkCacheEntry(cacheType, hash, options, context) {
|
|
511
552
|
try {
|
|
512
553
|
const cacheability = await this._hasCacheEntry(cacheType, hash);
|
|
@@ -652,35 +693,6 @@ export let CacheManager = (_dec = logCacheQuery(), _dec2 = logCacheEntry(), _dec
|
|
|
652
693
|
}, options, context);
|
|
653
694
|
}
|
|
654
695
|
|
|
655
|
-
async _resolveRequest(requestData, rawResponseData, options, context) {
|
|
656
|
-
const normalizedResponseData = rawResponseData.paths && context.normalizePatchResponseData ? normalizePatchResponseData(rawResponseData) : rawResponseData;
|
|
657
|
-
const dataCaching = [];
|
|
658
|
-
|
|
659
|
-
const cacheMetadata = this._buildCacheMetadata(requestData, normalizedResponseData, options, context);
|
|
660
|
-
|
|
661
|
-
const {
|
|
662
|
-
data,
|
|
663
|
-
hasNext,
|
|
664
|
-
paths
|
|
665
|
-
} = normalizedResponseData;
|
|
666
|
-
dataCaching.push(this._setEntityAndRequestFieldPathCacheEntries(requestData, {
|
|
667
|
-
cacheMetadata,
|
|
668
|
-
entityData: _cloneDeep(data),
|
|
669
|
-
requestFieldPathData: _cloneDeep(data)
|
|
670
|
-
}, options, context));
|
|
671
|
-
|
|
672
|
-
if (options.awaitDataCaching) {
|
|
673
|
-
await Promise.all(dataCaching);
|
|
674
|
-
}
|
|
675
|
-
|
|
676
|
-
return {
|
|
677
|
-
cacheMetadata,
|
|
678
|
-
data,
|
|
679
|
-
hasNext,
|
|
680
|
-
paths
|
|
681
|
-
};
|
|
682
|
-
}
|
|
683
|
-
|
|
684
696
|
async _retrieveCachedEntityData(validTypeIDValue, {
|
|
685
697
|
possibleTypes,
|
|
686
698
|
typeName
|
|
@@ -799,6 +811,14 @@ export let CacheManager = (_dec = logCacheQuery(), _dec2 = logCacheEntry(), _dec
|
|
|
799
811
|
return cachedResponseData;
|
|
800
812
|
}
|
|
801
813
|
|
|
814
|
+
_retrieveResponseDataForCaching(normalizedResponseData, context) {
|
|
815
|
+
const responseChunks = this._responseChunksAwaitingCaching.get(context.boxID);
|
|
816
|
+
|
|
817
|
+
this._responseChunksAwaitingCaching.delete(context.boxID);
|
|
818
|
+
|
|
819
|
+
return mergeResponseDataSets([...responseChunks, normalizedResponseData]);
|
|
820
|
+
}
|
|
821
|
+
|
|
802
822
|
async _setCacheEntry(cacheType, hash, value, cachemapOptions, _options, _context) {
|
|
803
823
|
try {
|
|
804
824
|
await this._cache.set(`${cacheType}::${hash}`, _cloneDeep(value), cachemapOptions);
|
|
@@ -1017,7 +1037,9 @@ export let CacheManager = (_dec = logCacheQuery(), _dec2 = logCacheEntry(), _dec
|
|
|
1017
1037
|
tag: options.tag
|
|
1018
1038
|
}, options, context);
|
|
1019
1039
|
|
|
1020
|
-
if (hasChildFields(field
|
|
1040
|
+
if (hasChildFields(field, {
|
|
1041
|
+
fragmentDefinitions: context.fragmentDefinitions
|
|
1042
|
+
})) {
|
|
1021
1043
|
if (isEntity) {
|
|
1022
1044
|
_set(data, responseDataPath, {
|
|
1023
1045
|
__cacheKey: `${REQUEST_FIELD_PATHS}::${hashedRequestFieldCacheKey}`
|
|
@@ -1029,6 +1051,16 @@ export let CacheManager = (_dec = logCacheQuery(), _dec2 = logCacheEntry(), _dec
|
|
|
1029
1051
|
}
|
|
1030
1052
|
}
|
|
1031
1053
|
|
|
1054
|
+
_setResponseChunksAwaitingCaching(normalizedResponseData, context) {
|
|
1055
|
+
const responseChunks = this._responseChunksAwaitingCaching.get(context.boxID);
|
|
1056
|
+
|
|
1057
|
+
if (responseChunks) {
|
|
1058
|
+
this._responseChunksAwaitingCaching.set(context.boxID, [...responseChunks, normalizedResponseData]);
|
|
1059
|
+
} else {
|
|
1060
|
+
this._responseChunksAwaitingCaching.set(context.boxID, [normalizedResponseData]);
|
|
1061
|
+
}
|
|
1062
|
+
}
|
|
1063
|
+
|
|
1032
1064
|
}, (_applyDecoratedDescriptor(_class.prototype, "_getCacheEntry", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, "_getCacheEntry"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, "_setCacheEntry", [_dec2], Object.getOwnPropertyDescriptor(_class.prototype, "_setCacheEntry"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, "_setPartialQueryResponse", [_dec3], Object.getOwnPropertyDescriptor(_class.prototype, "_setPartialQueryResponse"), _class.prototype)), _class));
|
|
1033
1065
|
export default function init(userOptions) {
|
|
1034
1066
|
if (!_isPlainObject(userOptions)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/main/index.ts"],"names":["DATA_ENTITIES","QUERY","QUERY_RESPONSES","REQUEST_FIELD_PATHS","TYPE_NAME_KEY","FRAGMENT_SPREAD","dehydrateCacheMetadata","getChildFields","getFragmentDefinitions","getOperationDefinitions","hasChildFields","hashRequest","iterateChildFields","mergeObjects","rehydrateCacheMetadata","Cacheability","print","CACHE_CONTROL","HEADER_NO_CACHE","METADATA","NO_CACHE","logCacheEntry","logCacheQuery","logPartialCompiled","buildFieldKeysAndPaths","deriveOpCacheability","filterOutPropsWithArgsOrDirectives","filterQuery","normalizePatchResponseData","getValidTypeIDValue","CacheManager","init","options","errors","cache","push","TypeError","typeCacheDirectives","message","length","Promise","reject","_countFieldPathChecklist","fieldPathChecklist","fieldCount","missing","total","forEach","checklistValues","filter","hasData","_getFieldDataFromAncestor","ancestorFieldData","propNameOrIndex","undefined","_getOperationCacheControl","cacheMetadata","operation","defaultCacheControl","cacheability","get","printCacheControl","_isNodeEntity","fieldTypeInfo","isEntity","possibleTypes","some","type","_isNodeRequestFieldPath","hasArguments","hasDirectives","_isValid","noCache","checkTTL","_mergeResponseCacheMetadata","partialQueryResponse","Map","_setCachedData","requestData","data","objectLikeData","_setCachedResponseData","cachedFieldData","requestFieldPath","typeNamesAndKind","_options","_setCacheMetadata","_setFieldPathChecklist","set","operationCacheability","metadata","ttl","dataTypeName","fieldTypeName","fragmentKind","fragmentName","has","entry","typeName","constructor","cascadeCacheControl","fallbackOperationCacheability","typeIDKey","_cache","_cascadeCacheControl","_fallbackOperationCacheability","_typeCacheDirectives","_typeIDKey","analyzeQuery","context","ast","hash","cacheManagerContext","fragmentDefinitions","cachedResponseData","_retrieveCachedResponseData","updated","dataCaching","_setQueryResponseCacheEntry","awaitDataCaching","response","_setPartialQueryResponse","filteredAST","rest","request","checkCacheEntry","cacheType","_checkCacheEntry","checkQueryResponseCacheEntry","result","deletePartialQueryResponse","_partialQueryResponses","delete","resolveQuery","updatedRequestData","rawResponseData","hasNext","paths","_resolveRequest","queryFiltered","_getPartialQueryResponse","responseCacheMetadata","responseData","_mergeResponseData","all","resolveRequest","_analyzeFieldNode","fieldNode","cachedAncestorFieldData","_analyzeParentFieldNode","_analyzeLeafFieldNode","keysAndPaths","hashedRequestFieldCacheKey","fieldTypeMap","entityData","requestFieldPathData","__typename","_retrieveCachedRequestFieldPathData","requestFieldCacheKey","_retrieveCachedParentNodeData","promises","childField","childTypeName","childFragmentKind","childFragmentName","childIndex","index","_buildCacheMetadata","otherProps","_createCacheMetadata","queryNode","fieldsAndTypeNames","_setFieldCacheability","_hasCacheEntry","_getCacheEntry","error","_cacheMetadata","headers","fallback","_context","_isFieldEntity","fieldData","_mergeObjects","obj","src","_key","val","_parseEntityAndRequestFieldPathCacheEntryData","field","ancestorKeysAndPaths","responseDataPath","_typeName","_fragmentKind","_fragmentName","_setEntityAndRequestFieldPathCacheEntry","normalizedResponseData","_setEntityAndRequestFieldPathCacheEntries","_retrieveCachedEntityData","validTypeIDValue","typeNames","map","checkResults","name","validResults","validResult","sort","a","b","reduce","ancestorEntityData","ancestorRequestFieldPathData","entryCacheability","_setCacheEntry","value","cachemapOptions","operationNode","_setRequestFieldPathCacheEntry","_setEntityCacheEntry","entityDataKey","cacheHeaders","cacheControl","tag","__cacheKey","ancestorRequestFieldPath","_setFieldTypeCacheDirective","dehydratedCacheMetadata","hasArgsOrDirectives","selectionSet","selections","userOptions","clientOptions"],"mappings":"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","sourcesContent":["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 FRAGMENT_SPREAD,\n dehydrateCacheMetadata,\n getChildFields,\n getFragmentDefinitions,\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 { assign, cloneDeep, get, isArray, 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 CacheManagerContext,\n CacheManagerDef,\n CacheManagerInit,\n CachedAncestorFieldData,\n CachedResponseData,\n CachemapOptions,\n CheckCacheEntryResult,\n ClientOptions,\n ConstructorOptions,\n DataForCachingEntry,\n FieldCount,\n FieldPathChecklist,\n FieldPathChecklistValue,\n InitOptions,\n KeysAndPaths,\n MergedCachedFieldData,\n PartialQueryResponse,\n PartialQueryResponses,\n QueryResponseCacheEntry,\n ResponseDataForCaching,\n TypeNamesAndKind,\n UserOptions,\n} from \"../defs\";\nimport { buildFieldKeysAndPaths } from \"../helpers/buildKeysAndPaths\";\nimport deriveOpCacheability from \"../helpers/deriveOpCacheability\";\nimport filterOutPropsWithArgsOrDirectives from \"../helpers/filterOutPropsWithArgsOrDirectives\";\nimport filterQuery from \"../helpers/filterQuery\";\nimport normalizePatchResponseData from \"../helpers/normalizePatchResponseData\";\nimport { getValidTypeIDValue } from \"../helpers/validTypeIDValue\";\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) {\n return Promise.reject(errors);\n }\n\n return new CacheManager(options);\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) ? cloneDeep(ancestorFieldData[propNameOrIndex]) : undefined;\n }\n\n private static _getOperationCacheControl(cacheMetadata: CacheMetadata | undefined, operation: string): string {\n const defaultCacheControl = HEADER_NO_CACHE;\n\n if (!cacheMetadata) {\n return defaultCacheControl;\n }\n\n const cacheability = cacheMetadata.get(operation);\n return cacheability ? cacheability.printCacheControl() : defaultCacheControl;\n }\n\n private static _isNodeEntity(fieldTypeInfo?: FieldTypeInfo): boolean {\n if (!fieldTypeInfo) {\n return false;\n }\n\n const { isEntity, possibleTypes } = fieldTypeInfo;\n return isEntity || possibleTypes.some(type => !!type.isEntity);\n }\n\n private static _isNodeRequestFieldPath(fieldTypeInfo?: FieldTypeInfo): boolean {\n return (\n !!fieldTypeInfo &&\n (this._isNodeEntity(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 _mergeResponseCacheMetadata(\n cacheMetadata: CacheMetadata,\n partialQueryResponse?: PartialQueryResponse,\n ): CacheMetadata {\n if (!partialQueryResponse) {\n return cacheMetadata;\n }\n\n return new Map([...partialQueryResponse.cacheMetadata, ...cacheMetadata]);\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 typeNamesAndKind: TypeNamesAndKind,\n _options: RequestOptions,\n { operation }: CacheManagerContext,\n ) {\n CacheManager._setCacheMetadata(cacheMetadata, cachedFieldData.cacheability, requestFieldPath, operation);\n CacheManager._setFieldPathChecklist(fieldPathChecklist, cachedFieldData, requestFieldPath, typeNamesAndKind);\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) {\n return;\n }\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, fragmentKind, fragmentName }: TypeNamesAndKind,\n ): void {\n if (isUndefined(fieldTypeName) || fragmentKind === FRAGMENT_SPREAD) {\n if (fieldPathChecklist.has(requestFieldPath)) {\n return;\n }\n\n fieldPathChecklist.set(requestFieldPath, [{ fragmentKind, fragmentName, hasData: !isUndefined(data) }]);\n return;\n }\n\n if (dataTypeName !== fieldTypeName) {\n return;\n }\n\n const entry = fieldPathChecklist.get(requestFieldPath);\n const checklistValues = entry ? (entry as FieldPathChecklistValue[]) : [];\n\n if (checklistValues.some(({ typeName }) => typeName === dataTypeName)) {\n return;\n }\n\n fieldPathChecklist.set(requestFieldPath, [\n ...checklistValues,\n { fragmentKind, fragmentName, 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 cacheManagerContext: CacheManagerContext = {\n ...context,\n fragmentDefinitions: getFragmentDefinitions(ast),\n typeIDKey: this._typeIDKey,\n };\n\n const cachedResponseData = await this._retrieveCachedResponseData(requestData, options, cacheManagerContext);\n const { cacheMetadata, data, fieldCount } = cachedResponseData;\n\n if (fieldCount.missing === fieldCount.total) {\n return { updated: requestData };\n }\n\n if (!fieldCount.missing) {\n const dataCaching = this._setQueryResponseCacheEntry(hash, { cacheMetadata, data }, options, cacheManagerContext);\n\n if (options.awaitDataCaching) {\n await dataCaching;\n }\n\n return { response: { cacheMetadata, data } };\n }\n\n this._setPartialQueryResponse(hash, { cacheMetadata, data }, options, cacheManagerContext);\n const filteredAST = filterQuery(requestData, cachedResponseData, cacheManagerContext);\n const { fragmentDefinitions, typeIDKey, ...rest } = cacheManagerContext;\n assign(context, rest);\n const request = print(filteredAST);\n return { updated: { ast: filteredAST, 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) {\n return false;\n }\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 cacheManagerContext: CacheManagerContext = {\n ...context,\n fragmentDefinitions: getFragmentDefinitions(updatedRequestData.ast),\n typeIDKey: this._typeIDKey,\n };\n\n const dataCaching: Promise<void>[] = [];\n\n const { cacheMetadata, data, hasNext, paths } = await this._resolveRequest(\n updatedRequestData,\n rawResponseData,\n options,\n cacheManagerContext,\n );\n\n let partialQueryResponse: PartialQueryResponse | undefined;\n\n if (cacheManagerContext.queryFiltered) {\n if (!(rawResponseData.hasNext || rawResponseData.paths)) {\n dataCaching.push(\n this._setQueryResponseCacheEntry(\n updatedRequestData.hash,\n { cacheMetadata, data },\n options,\n cacheManagerContext,\n ),\n );\n }\n\n if (!rawResponseData.paths) {\n partialQueryResponse = this._getPartialQueryResponse(requestData.hash);\n }\n }\n\n const responseCacheMetadata = CacheManager._mergeResponseCacheMetadata(cacheMetadata, partialQueryResponse);\n const responseData = this._mergeResponseData(data, partialQueryResponse);\n\n if (!(rawResponseData.hasNext || rawResponseData.paths)) {\n dataCaching.push(\n this._setQueryResponseCacheEntry(\n requestData.hash,\n { cacheMetadata: responseCacheMetadata, data: responseData },\n options,\n cacheManagerContext,\n ),\n );\n }\n\n if (options.awaitDataCaching) {\n await Promise.all(dataCaching);\n }\n\n return { cacheMetadata: responseCacheMetadata, data: responseData, hasNext, paths };\n }\n\n public async resolveRequest(\n requestData: RequestData,\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<ResponseData> {\n const cacheManagerContext: CacheManagerContext = {\n ...context,\n fragmentDefinitions: getFragmentDefinitions(requestData.ast),\n typeIDKey: this._typeIDKey,\n };\n\n return this._resolveRequest(requestData, rawResponseData, options, cacheManagerContext);\n }\n\n private async _analyzeFieldNode(\n fieldNode: FieldNode,\n cachedAncestorFieldData: CachedAncestorFieldData,\n cachedResponseData: CachedResponseData,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n if (hasChildFields(fieldNode)) {\n await this._analyzeParentFieldNode(fieldNode, cachedAncestorFieldData, cachedResponseData, options, context);\n } else {\n await this._analyzeLeafFieldNode(fieldNode, cachedAncestorFieldData, cachedResponseData, options, context);\n }\n }\n\n private async _analyzeLeafFieldNode(\n fieldNode: FieldNode,\n cachedAncestorFieldData: CachedAncestorFieldData,\n cachedResponseData: CachedResponseData,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n const keysAndPaths = buildFieldKeysAndPaths(fieldNode, cachedAncestorFieldData, context);\n const { hashedRequestFieldCacheKey, propNameOrIndex, requestFieldPath } = keysAndPaths;\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath);\n const { entityData, fragmentKind, fragmentName, requestFieldPathData, typeName } = cachedAncestorFieldData;\n\n const typeNamesAndKind = {\n dataTypeName: entityData?.__typename || requestFieldPathData?.__typename,\n fieldTypeName: typeName,\n fragmentKind,\n fragmentName,\n };\n\n if (CacheManager._isNodeRequestFieldPath(fieldTypeInfo)) {\n const { cacheability, entry } = await this._retrieveCachedRequestFieldPathData(\n hashedRequestFieldCacheKey,\n options,\n context,\n );\n\n CacheManager._setCachedResponseData(\n { cacheability, data: entry },\n cachedResponseData,\n keysAndPaths,\n typeNamesAndKind,\n options,\n context,\n );\n } else {\n const cachedFieldData =\n CacheManager._getFieldDataFromAncestor(entityData, propNameOrIndex) ||\n CacheManager._getFieldDataFromAncestor(requestFieldPathData, propNameOrIndex);\n\n CacheManager._setFieldPathChecklist(\n cachedResponseData.fieldPathChecklist,\n { data: cachedFieldData },\n requestFieldPath,\n typeNamesAndKind,\n );\n\n CacheManager._setCachedData(cachedResponseData.data, { data: cachedFieldData }, propNameOrIndex);\n }\n }\n\n private async _analyzeParentFieldNode(\n fieldNode: FieldNode,\n cachedAncestorFieldData: CachedAncestorFieldData,\n cachedResponseData: CachedResponseData,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n const keysAndPaths = buildFieldKeysAndPaths(fieldNode, cachedAncestorFieldData, context);\n const { propNameOrIndex, requestFieldCacheKey, requestFieldPath } = keysAndPaths;\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath) as FieldTypeInfo;\n\n const { cacheability, data, entityData, requestFieldPathData } = await this._retrieveCachedParentNodeData(\n cachedAncestorFieldData,\n keysAndPaths,\n fieldTypeInfo,\n options,\n context,\n );\n\n const { fragmentKind, fragmentName, typeName } = cachedAncestorFieldData;\n\n CacheManager._setCachedResponseData(\n { cacheability, data },\n cachedResponseData,\n keysAndPaths,\n { dataTypeName: get(data, TYPE_NAME_KEY), fieldTypeName: typeName, fragmentKind, fragmentName },\n options,\n context,\n );\n\n if (!isObjectLike(data)) {\n return;\n }\n\n const objectLikeData = data as PlainObjectMap | any[];\n const promises: Promise<void>[] = [];\n\n iterateChildFields(\n fieldNode,\n objectLikeData,\n context.fragmentDefinitions,\n (\n childField: FieldNode,\n childTypeName: string | undefined,\n childFragmentKind: string | undefined,\n childFragmentName: string | undefined,\n childIndex?: number,\n ) => {\n promises.push(\n this._analyzeFieldNode(\n childField,\n {\n cacheability,\n entityData,\n fragmentKind: childFragmentKind,\n fragmentName: childFragmentName,\n index: childIndex,\n requestFieldCacheKey,\n requestFieldPath,\n requestFieldPathData,\n typeName: childTypeName,\n },\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: CacheManagerContext,\n ): CacheMetadata {\n const cacheMetadata = this._createCacheMetadata({ data, ...otherProps }, context);\n const queryNode = getOperationDefinitions(ast, context.operation)[0];\n const fieldsAndTypeNames = getChildFields(queryNode);\n\n if (!fieldsAndTypeNames) {\n return cacheMetadata;\n }\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: CacheManagerContext,\n ): Promise<CheckCacheEntryResult | false> {\n try {\n const cacheability = await this._hasCacheEntry(cacheType, hash);\n\n if (!cacheability || !CacheManager._isValid(cacheability)) {\n return false;\n }\n\n const entry = await this._getCacheEntry(cacheType, hash, options, context);\n\n if (isUndefined(entry)) {\n return false;\n }\n\n return { cacheability, entry };\n } catch (error) {\n return false;\n }\n }\n\n private _createCacheMetadata(\n { _cacheMetadata, headers }: RawResponseDataWithMaybeCacheMetadata,\n { operation }: CacheManagerContext,\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 @logCacheQuery()\n private async _getCacheEntry(\n cacheType: CacheTypes,\n hash: string,\n _options: RequestOptions,\n _context: CacheManagerContext,\n ): Promise<any> {\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 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)) {\n return false;\n }\n\n if (isEntity) {\n return true;\n }\n\n if (!possibleTypes.length) {\n return false;\n }\n\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 _mergeResponseData(\n responseData: PlainObjectMap,\n partialQueryResponse?: PartialQueryResponse,\n ): PlainObjectMap {\n if (!partialQueryResponse) {\n return responseData;\n }\n\n return this._mergeObjects(partialQueryResponse.data, responseData);\n }\n\n private async _parseEntityAndRequestFieldPathCacheEntryData(\n field: FieldNode,\n ancestorKeysAndPaths: AncestorKeysAndPaths,\n { cacheMetadata, entityData, requestFieldPathData }: ResponseDataForCaching,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n const keysAndPaths = buildFieldKeysAndPaths(field, ancestorKeysAndPaths, context);\n const { requestFieldCacheKey, requestFieldPath, responseDataPath } = keysAndPaths;\n const fieldData = get(requestFieldPathData, responseDataPath);\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath);\n\n if (!isObjectLike(fieldData) && !fieldTypeInfo?.hasDirectives) {\n return;\n }\n\n if (isObjectLike(fieldData)) {\n const promises: Promise<void>[] = [];\n\n iterateChildFields(\n field,\n fieldData as PlainObjectMap | any[],\n context.fragmentDefinitions,\n (\n childField: FieldNode,\n _typeName: string | undefined,\n _fragmentKind: string | undefined,\n _fragmentName: string | undefined,\n childIndex?: number,\n ) => {\n promises.push(\n this._parseEntityAndRequestFieldPathCacheEntryData(\n childField,\n { index: childIndex, requestFieldCacheKey, requestFieldPath, responseDataPath },\n { cacheMetadata, entityData, requestFieldPathData },\n options,\n context,\n ),\n );\n },\n );\n\n await Promise.all(promises);\n }\n\n await this._setEntityAndRequestFieldPathCacheEntry(\n field,\n keysAndPaths,\n { cacheMetadata, entityData, requestFieldPathData },\n options,\n context,\n );\n }\n\n private async _resolveRequest(\n requestData: RequestData,\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<ResponseData> {\n const normalizedResponseData =\n rawResponseData.paths && context.normalizePatchResponseData\n ? normalizePatchResponseData(rawResponseData)\n : rawResponseData;\n\n const dataCaching: Promise<void>[] = [];\n const cacheMetadata = this._buildCacheMetadata(requestData, normalizedResponseData, options, context);\n const { data, hasNext, paths } = normalizedResponseData;\n\n dataCaching.push(\n this._setEntityAndRequestFieldPathCacheEntries(\n requestData,\n { cacheMetadata, entityData: cloneDeep(data), requestFieldPathData: cloneDeep(data) },\n options,\n context,\n ),\n );\n\n if (options.awaitDataCaching) {\n await Promise.all(dataCaching);\n }\n\n return { cacheMetadata, data, hasNext, paths };\n }\n\n private async _retrieveCachedEntityData(\n validTypeIDValue: string | number,\n { possibleTypes, typeName }: FieldTypeInfo,\n options: RequestOptions,\n context: CacheManagerContext,\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 return (validResult || {}) as Partial<CheckCacheEntryResult>;\n }\n\n private async _retrieveCachedParentNodeData(\n { entityData: ancestorEntityData, requestFieldPathData: ancestorRequestFieldPathData }: CachedAncestorFieldData,\n { hashedRequestFieldCacheKey, propNameOrIndex }: KeysAndPaths,\n fieldTypeInfo: FieldTypeInfo,\n options: RequestOptions,\n context: CacheManagerContext,\n ) {\n let entityData = CacheManager._getFieldDataFromAncestor(ancestorEntityData, propNameOrIndex);\n let requestFieldPathData = CacheManager._getFieldDataFromAncestor(ancestorRequestFieldPathData, propNameOrIndex);\n let cacheability: Cacheability | undefined;\n\n if (CacheManager._isNodeRequestFieldPath(fieldTypeInfo)) {\n const { cacheability: entryCacheability, entry } = await this._retrieveCachedRequestFieldPathData(\n hashedRequestFieldCacheKey,\n options,\n context,\n );\n\n if (entry) {\n requestFieldPathData = this._mergeObjects(requestFieldPathData, entry);\n }\n\n if (entryCacheability) {\n cacheability = entryCacheability;\n }\n }\n\n const validTypeIDValue = getValidTypeIDValue(requestFieldPathData, fieldTypeInfo, this._typeIDKey);\n\n if (CacheManager._isNodeEntity(fieldTypeInfo) && validTypeIDValue) {\n const { cacheability: entryCacheability, entry } = await this._retrieveCachedEntityData(\n validTypeIDValue,\n fieldTypeInfo,\n options,\n context,\n );\n\n if (entry) {\n entityData = this._mergeObjects(entityData, entry);\n }\n\n if (entryCacheability && (!cacheability || entryCacheability.metadata.ttl > cacheability?.metadata.ttl)) {\n cacheability = entryCacheability;\n }\n }\n\n const data =\n !isUndefined(requestFieldPathData) || !isUndefined(entityData)\n ? this._mergeObjects(requestFieldPathData, entityData)\n : entityData ?? requestFieldPathData;\n\n return {\n cacheability,\n data,\n entityData,\n requestFieldPathData,\n };\n }\n\n private async _retrieveCachedRequestFieldPathData(\n hash: string,\n options: RequestOptions,\n context: CacheManagerContext,\n ) {\n return (this._checkCacheEntry(REQUEST_FIELD_PATHS, hash, options, context) || {}) as Partial<CheckCacheEntryResult>;\n }\n\n private async _retrieveCachedResponseData(\n { ast }: RequestData,\n options: RequestOptions,\n context: CacheManagerContext,\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\n if (!fieldsAndTypeNames) {\n return cachedResponseData;\n }\n\n await Promise.all(\n fieldsAndTypeNames.map(({ fieldNode }) =>\n this._analyzeFieldNode(\n fieldNode,\n { requestFieldPath: context.operation },\n cachedResponseData,\n options,\n context,\n ),\n ),\n );\n\n cachedResponseData.fieldCount = CacheManager._countFieldPathChecklist(cachedResponseData.fieldPathChecklist);\n return cachedResponseData;\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: CacheManagerContext,\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 _setEntityAndRequestFieldPathCacheEntries(\n requestData: RequestData,\n responseData: ResponseDataForCaching,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n const operationNode = getOperationDefinitions(requestData.ast, context.operation)[0];\n const fieldsAndTypeNames = getChildFields(operationNode);\n\n if (!fieldsAndTypeNames) {\n return;\n }\n\n await Promise.all(\n fieldsAndTypeNames.map(({ fieldNode }) => {\n return this._parseEntityAndRequestFieldPathCacheEntryData(\n fieldNode,\n { requestFieldPath: context.operation },\n responseData,\n options,\n context,\n );\n }),\n );\n }\n\n private async _setEntityAndRequestFieldPathCacheEntry(\n field: FieldNode,\n keysAndPaths: KeysAndPaths,\n { cacheMetadata, entityData, requestFieldPathData }: ResponseDataForCaching,\n options: RequestOptions,\n context: CacheManagerContext,\n ) {\n const { requestFieldPath, responseDataPath } = keysAndPaths;\n const fieldData = get(entityData, responseDataPath);\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath);\n const cacheability = cacheMetadata.get(requestFieldPath);\n\n if (isUndefined(fieldData) || !fieldTypeInfo || !cacheability) {\n return;\n }\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 const isEntity = this._isFieldEntity(fieldData, fieldTypeInfo);\n\n if (!isEntity && fieldTypeInfo.hasArguments) {\n unset(entityData, responseDataPath);\n }\n\n if (isEntity) {\n promises.push(\n this._setEntityCacheEntry(keysAndPaths, { cacheability, data: entityData, fieldTypeInfo }, options, context),\n );\n }\n\n await Promise.all(promises);\n }\n\n private async _setEntityCacheEntry(\n { responseDataPath }: KeysAndPaths,\n { cacheability, data, fieldTypeInfo }: DataForCachingEntry,\n options: RequestOptions,\n context: CacheManagerContext,\n ) {\n let fieldData = get(data, responseDataPath);\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 private _setFieldCacheability(\n field: FieldNode,\n ancestorKeysAndPaths: AncestorKeysAndPaths,\n { cacheMetadata, data }: ResponseData,\n options: RequestOptions,\n context: CacheManagerContext,\n ): void {\n const { requestFieldPath: ancestorRequestFieldPath } = ancestorKeysAndPaths;\n const keysAndPaths = buildFieldKeysAndPaths(field, ancestorKeysAndPaths, context);\n const { requestFieldPath, responseDataPath } = keysAndPaths;\n const fieldData = get(data, responseDataPath);\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath);\n\n if (!isObjectLike(fieldData) && !fieldTypeInfo?.hasDirectives) {\n return;\n }\n\n this._setFieldTypeCacheDirective(cacheMetadata, { ancestorRequestFieldPath, requestFieldPath }, context);\n\n if (isObjectLike(fieldData)) {\n iterateChildFields(\n field,\n fieldData as PlainObjectMap | any[],\n context.fragmentDefinitions,\n (\n childField: FieldNode,\n _typeName: string | undefined,\n _fragmentKind: string | undefined,\n _fragmentName: string | undefined,\n childIndex?: number,\n ) => {\n this._setFieldCacheability(\n childField,\n { index: childIndex, requestFieldPath, responseDataPath },\n { cacheMetadata, data },\n options,\n context,\n );\n },\n );\n }\n }\n\n private _setFieldTypeCacheDirective(\n cacheMetadata: CacheMetadata,\n { ancestorRequestFieldPath, requestFieldPath }: { ancestorRequestFieldPath?: string; requestFieldPath: string },\n { fieldTypeMap, operation }: CacheManagerContext,\n ): void {\n if (cacheMetadata.has(requestFieldPath)) {\n return;\n }\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: CacheManagerContext,\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: CacheManagerContext,\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 keysAndPaths: KeysAndPaths,\n { cacheability, data, fieldTypeInfo }: DataForCachingEntry,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n const { hashedRequestFieldCacheKey, responseDataPath } = keysAndPaths;\n let fieldData = get(data, responseDataPath);\n const isEntity = this._isFieldEntity(fieldData, fieldTypeInfo);\n const hasArgsOrDirectives = fieldTypeInfo.hasArguments || fieldTypeInfo.hasDirectives;\n\n if (context.operation === QUERY && (isEntity || hasArgsOrDirectives)) {\n if (isPlainObject(fieldData) && field.selectionSet?.selections) {\n fieldData = filterOutPropsWithArgsOrDirectives(fieldData, field.selectionSet.selections, keysAndPaths, context);\n }\n\n const result = await this._checkCacheEntry(REQUEST_FIELD_PATHS, hashedRequestFieldCacheKey, options, context);\n\n if (result && isObjectLike(fieldData)) {\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\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"],"file":"index.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/main/index.ts"],"names":["DATA_ENTITIES","QUERY","QUERY_RESPONSES","REQUEST_FIELD_PATHS","TYPE_NAME_KEY","FRAGMENT_SPREAD","dehydrateCacheMetadata","getChildFields","getFragmentDefinitions","getOperationDefinitions","hasChildFields","hashRequest","iterateChildFields","mergeObjects","rehydrateCacheMetadata","Cacheability","print","CACHE_CONTROL","HEADER_NO_CACHE","METADATA","NO_CACHE","logCacheEntry","logCacheQuery","logPartialCompiled","buildFieldKeysAndPaths","deriveOpCacheability","filterOutPropsWithArgsOrDirectives","filterQuery","isLastResponseChunk","isNotLastResponseChunk","isNotResponseChunk","mergeResponseDataSets","normalizePatchResponseData","getValidTypeIDValue","CacheManager","init","options","errors","cache","push","TypeError","typeCacheDirectives","message","length","Promise","reject","_countFieldPathChecklist","fieldPathChecklist","fieldCount","missing","total","forEach","checklistValues","filter","hasData","_getFieldDataFromAncestor","ancestorFieldData","propNameOrIndex","undefined","_getOperationCacheControl","cacheMetadata","operation","defaultCacheControl","cacheability","get","printCacheControl","_isNodeEntity","fieldTypeInfo","isEntity","possibleTypes","some","type","_isNodeRequestFieldPath","hasArguments","hasDirectives","_isValid","noCache","checkTTL","_mergeResponseCacheMetadata","partialQueryResponse","Map","_setCachedData","requestData","data","objectLikeData","_setCachedResponseData","cachedFieldData","requestFieldPath","typeNamesAndKind","_options","_setCacheMetadata","_setFieldPathChecklist","set","operationCacheability","metadata","ttl","dataTypeName","fieldTypeName","fragmentKind","fragmentName","has","entry","typeName","constructor","cascadeCacheControl","fallbackOperationCacheability","typeIDKey","_cache","_cascadeCacheControl","_fallbackOperationCacheability","_typeCacheDirectives","_typeIDKey","analyzeQuery","context","ast","hash","cacheManagerContext","fragmentDefinitions","cachedResponseData","_retrieveCachedResponseData","updated","dataCaching","_setQueryResponseCacheEntry","awaitDataCaching","response","_setPartialQueryResponse","filteredAST","rest","request","cacheQuery","updatedRequestData","rawResponseData","_cacheResponse","cacheResponse","checkCacheEntry","cacheType","_checkCacheEntry","checkQueryResponseCacheEntry","result","deletePartialQueryResponse","_partialQueryResponses","delete","_analyzeFieldNode","fieldNode","cachedAncestorFieldData","_analyzeParentFieldNode","_analyzeLeafFieldNode","keysAndPaths","hashedRequestFieldCacheKey","fieldTypeMap","entityData","requestFieldPathData","__typename","_retrieveCachedRequestFieldPathData","requestFieldCacheKey","_retrieveCachedParentNodeData","promises","childField","childTypeName","childFragmentKind","childFragmentName","childIndex","index","all","_buildCacheMetadata","otherProps","_createCacheMetadata","queryNode","fieldsAndTypeNames","_setFieldCacheability","normalizedResponseData","responseDataForCaching","_setResponseChunksAwaitingCaching","_retrieveResponseDataForCaching","_setEntityAndRequestFieldPathCacheEntries","queryCacheMetadata","queryData","queryFiltered","_getPartialQueryResponse","_mergeResponseData","hasNext","paths","_hasCacheEntry","_getCacheEntry","error","_cacheMetadata","headers","fallback","_context","_isFieldEntity","fieldData","_mergeObjects","obj","src","_key","val","responseData","_parseEntityAndRequestFieldPathCacheEntryData","field","ancestorKeysAndPaths","responseDataPath","_typeName","_fragmentKind","_fragmentName","_setEntityAndRequestFieldPathCacheEntry","_retrieveCachedEntityData","validTypeIDValue","typeNames","map","checkResults","name","validResults","validResult","sort","a","b","reduce","ancestorEntityData","ancestorRequestFieldPathData","entryCacheability","responseChunks","_responseChunksAwaitingCaching","boxID","_setCacheEntry","value","cachemapOptions","operationNode","_setRequestFieldPathCacheEntry","_setEntityCacheEntry","entityDataKey","cacheHeaders","cacheControl","tag","__cacheKey","ancestorRequestFieldPath","_setFieldTypeCacheDirective","dehydratedCacheMetadata","hasArgsOrDirectives","selectionSet","selections","userOptions","clientOptions"],"mappings":"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","sourcesContent":["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 FRAGMENT_SPREAD,\n dehydrateCacheMetadata,\n getChildFields,\n getFragmentDefinitions,\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 { assign, cloneDeep, get, isArray, 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 CacheManagerContext,\n CacheManagerDef,\n CacheManagerInit,\n CachedAncestorFieldData,\n CachedResponseData,\n CachemapOptions,\n CheckCacheEntryResult,\n ClientOptions,\n ConstructorOptions,\n DataForCachingEntry,\n FieldCount,\n FieldPathChecklist,\n FieldPathChecklistValue,\n InitOptions,\n KeysAndPaths,\n MergedCachedFieldData,\n PartialQueryResponse,\n PartialQueryResponses,\n QueryResponseCacheEntry,\n ResponseDataForCaching,\n TypeNamesAndKind,\n UserOptions,\n} from \"../defs\";\nimport { buildFieldKeysAndPaths } from \"../helpers/buildKeysAndPaths\";\nimport deriveOpCacheability from \"../helpers/deriveOpCacheability\";\nimport filterOutPropsWithArgsOrDirectives from \"../helpers/filterOutPropsWithArgsOrDirectives\";\nimport filterQuery from \"../helpers/filterQuery\";\nimport isLastResponseChunk from \"../helpers/isLastResponseChunk\";\nimport isNotLastResponseChunk from \"../helpers/isNotLastResponseChunk\";\nimport isNotResponseChunk from \"../helpers/isNotResponseChunk\";\nimport mergeResponseDataSets from \"../helpers/mergeResponseDataSets\";\nimport normalizePatchResponseData from \"../helpers/normalizePatchResponseData\";\nimport { getValidTypeIDValue } from \"../helpers/validTypeIDValue\";\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) {\n return Promise.reject(errors);\n }\n\n return new CacheManager(options);\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) ? cloneDeep(ancestorFieldData[propNameOrIndex]) : undefined;\n }\n\n private static _getOperationCacheControl(cacheMetadata: CacheMetadata | undefined, operation: string): string {\n const defaultCacheControl = HEADER_NO_CACHE;\n\n if (!cacheMetadata) {\n return defaultCacheControl;\n }\n\n const cacheability = cacheMetadata.get(operation);\n return cacheability ? cacheability.printCacheControl() : defaultCacheControl;\n }\n\n private static _isNodeEntity(fieldTypeInfo?: FieldTypeInfo): boolean {\n if (!fieldTypeInfo) {\n return false;\n }\n\n const { isEntity, possibleTypes } = fieldTypeInfo;\n return isEntity || possibleTypes.some(type => !!type.isEntity);\n }\n\n private static _isNodeRequestFieldPath(fieldTypeInfo?: FieldTypeInfo): boolean {\n return (\n !!fieldTypeInfo &&\n (this._isNodeEntity(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 _mergeResponseCacheMetadata(\n cacheMetadata: CacheMetadata,\n partialQueryResponse?: PartialQueryResponse,\n ): CacheMetadata {\n if (!partialQueryResponse) {\n return cacheMetadata;\n }\n\n return new Map([...partialQueryResponse.cacheMetadata, ...cacheMetadata]);\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 typeNamesAndKind: TypeNamesAndKind,\n _options: RequestOptions,\n { operation }: CacheManagerContext,\n ) {\n CacheManager._setCacheMetadata(cacheMetadata, cachedFieldData.cacheability, requestFieldPath, operation);\n CacheManager._setFieldPathChecklist(fieldPathChecklist, cachedFieldData, requestFieldPath, typeNamesAndKind);\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) {\n return;\n }\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, fragmentKind, fragmentName }: TypeNamesAndKind,\n ): void {\n if (isUndefined(fieldTypeName) || fragmentKind === FRAGMENT_SPREAD) {\n if (fieldPathChecklist.has(requestFieldPath)) {\n return;\n }\n\n fieldPathChecklist.set(requestFieldPath, [{ fragmentKind, fragmentName, hasData: !isUndefined(data) }]);\n return;\n }\n\n if (dataTypeName !== fieldTypeName) {\n return;\n }\n\n const entry = fieldPathChecklist.get(requestFieldPath);\n const checklistValues = entry ? (entry as FieldPathChecklistValue[]) : [];\n\n if (checklistValues.some(({ typeName }) => typeName === dataTypeName)) {\n return;\n }\n\n fieldPathChecklist.set(requestFieldPath, [\n ...checklistValues,\n { fragmentKind, fragmentName, 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 _responseChunksAwaitingCaching: Map<string, RawResponseDataWithMaybeCacheMetadata[]> = 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 cacheManagerContext: CacheManagerContext = {\n ...context,\n fragmentDefinitions: getFragmentDefinitions(ast),\n typeIDKey: this._typeIDKey,\n };\n\n const cachedResponseData = await this._retrieveCachedResponseData(requestData, options, cacheManagerContext);\n const { cacheMetadata, data, fieldCount } = cachedResponseData;\n\n if (fieldCount.missing === fieldCount.total) {\n return { updated: requestData };\n }\n\n if (!fieldCount.missing) {\n const dataCaching = this._setQueryResponseCacheEntry(hash, { cacheMetadata, data }, options, cacheManagerContext);\n\n if (options.awaitDataCaching) {\n await dataCaching;\n }\n\n return { response: { cacheMetadata, data } };\n }\n\n this._setPartialQueryResponse(hash, { cacheMetadata, data }, options, cacheManagerContext);\n const filteredAST = filterQuery(requestData, cachedResponseData, cacheManagerContext);\n const { fragmentDefinitions, typeIDKey, ...rest } = cacheManagerContext;\n assign(context, rest);\n const request = print(filteredAST);\n return { updated: { ast: filteredAST, hash: hashRequest(request), request } };\n }\n\n public async cacheQuery(\n requestData: RequestData,\n updatedRequestData: RequestData,\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<ResponseData> {\n const cacheManagerContext: CacheManagerContext = {\n ...context,\n fragmentDefinitions: getFragmentDefinitions(updatedRequestData.ast),\n typeIDKey: this._typeIDKey,\n };\n\n return this._cacheResponse(requestData, updatedRequestData, rawResponseData, options, cacheManagerContext);\n }\n\n public async cacheResponse(\n requestData: RequestData,\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<ResponseData> {\n const cacheManagerContext: CacheManagerContext = {\n ...context,\n fragmentDefinitions: getFragmentDefinitions(requestData.ast),\n typeIDKey: this._typeIDKey,\n };\n\n return this._cacheResponse(requestData, undefined, rawResponseData, options, cacheManagerContext);\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) {\n return false;\n }\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 private async _analyzeFieldNode(\n fieldNode: FieldNode,\n cachedAncestorFieldData: CachedAncestorFieldData,\n cachedResponseData: CachedResponseData,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n if (hasChildFields(fieldNode, { fragmentDefinitions: context.fragmentDefinitions })) {\n await this._analyzeParentFieldNode(fieldNode, cachedAncestorFieldData, cachedResponseData, options, context);\n } else {\n await this._analyzeLeafFieldNode(fieldNode, cachedAncestorFieldData, cachedResponseData, options, context);\n }\n }\n\n private async _analyzeLeafFieldNode(\n fieldNode: FieldNode,\n cachedAncestorFieldData: CachedAncestorFieldData,\n cachedResponseData: CachedResponseData,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n const keysAndPaths = buildFieldKeysAndPaths(fieldNode, cachedAncestorFieldData, context);\n const { hashedRequestFieldCacheKey, propNameOrIndex, requestFieldPath } = keysAndPaths;\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath);\n const { entityData, fragmentKind, fragmentName, requestFieldPathData, typeName } = cachedAncestorFieldData;\n\n const typeNamesAndKind = {\n dataTypeName: entityData?.__typename || requestFieldPathData?.__typename,\n fieldTypeName: typeName,\n fragmentKind,\n fragmentName,\n };\n\n if (CacheManager._isNodeRequestFieldPath(fieldTypeInfo)) {\n const { cacheability, entry } = await this._retrieveCachedRequestFieldPathData(\n hashedRequestFieldCacheKey,\n options,\n context,\n );\n\n CacheManager._setCachedResponseData(\n { cacheability, data: entry },\n cachedResponseData,\n keysAndPaths,\n typeNamesAndKind,\n options,\n context,\n );\n } else {\n const cachedFieldData =\n CacheManager._getFieldDataFromAncestor(entityData, propNameOrIndex) ||\n CacheManager._getFieldDataFromAncestor(requestFieldPathData, propNameOrIndex);\n\n CacheManager._setFieldPathChecklist(\n cachedResponseData.fieldPathChecklist,\n { data: cachedFieldData },\n requestFieldPath,\n typeNamesAndKind,\n );\n\n CacheManager._setCachedData(cachedResponseData.data, { data: cachedFieldData }, propNameOrIndex);\n }\n }\n\n private async _analyzeParentFieldNode(\n fieldNode: FieldNode,\n cachedAncestorFieldData: CachedAncestorFieldData,\n cachedResponseData: CachedResponseData,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n const keysAndPaths = buildFieldKeysAndPaths(fieldNode, cachedAncestorFieldData, context);\n const { propNameOrIndex, requestFieldCacheKey, requestFieldPath } = keysAndPaths;\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath) as FieldTypeInfo;\n\n const { cacheability, data, entityData, requestFieldPathData } = await this._retrieveCachedParentNodeData(\n cachedAncestorFieldData,\n keysAndPaths,\n fieldTypeInfo,\n options,\n context,\n );\n\n const { fragmentKind, fragmentName, typeName } = cachedAncestorFieldData;\n\n CacheManager._setCachedResponseData(\n { cacheability, data },\n cachedResponseData,\n keysAndPaths,\n { dataTypeName: get(data, TYPE_NAME_KEY), fieldTypeName: typeName, fragmentKind, fragmentName },\n options,\n context,\n );\n\n if (!isObjectLike(data)) {\n return;\n }\n\n const objectLikeData = data as PlainObjectMap | any[];\n const promises: Promise<void>[] = [];\n\n iterateChildFields(\n fieldNode,\n objectLikeData,\n context.fragmentDefinitions,\n (\n childField: FieldNode,\n childTypeName: string | undefined,\n childFragmentKind: string | undefined,\n childFragmentName: string | undefined,\n childIndex?: number,\n ) => {\n promises.push(\n this._analyzeFieldNode(\n childField,\n {\n cacheability,\n entityData,\n fragmentKind: childFragmentKind,\n fragmentName: childFragmentName,\n index: childIndex,\n requestFieldCacheKey,\n requestFieldPath,\n requestFieldPathData,\n typeName: childTypeName,\n },\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: CacheManagerContext,\n ): CacheMetadata {\n const cacheMetadata = this._createCacheMetadata({ data, ...otherProps }, context);\n const queryNode = getOperationDefinitions(ast, context.operation)[0];\n const fieldsAndTypeNames = getChildFields(queryNode);\n\n if (!fieldsAndTypeNames) {\n return cacheMetadata;\n }\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 _cacheResponse(\n requestData: RequestData,\n updatedRequestData: RequestData | undefined,\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<ResponseData> {\n const normalizedResponseData = normalizePatchResponseData(rawResponseData, context);\n let responseDataForCaching: RawResponseDataWithMaybeCacheMetadata | undefined = normalizedResponseData;\n\n if (isNotLastResponseChunk(rawResponseData, context)) {\n this._setResponseChunksAwaitingCaching(normalizedResponseData, context);\n responseDataForCaching = undefined;\n }\n\n if (isLastResponseChunk(rawResponseData, context)) {\n responseDataForCaching = this._retrieveResponseDataForCaching(normalizedResponseData, context);\n }\n\n const dataCaching: Promise<void>[] = [];\n\n if (responseDataForCaching) {\n const { data } = responseDataForCaching;\n const cacheMetadata = this._buildCacheMetadata(requestData, responseDataForCaching, options, context);\n\n dataCaching.push(\n this._setEntityAndRequestFieldPathCacheEntries(\n requestData,\n {\n cacheMetadata,\n entityData: cloneDeep(data),\n requestFieldPathData: cloneDeep(data),\n },\n options,\n context,\n ),\n );\n\n let queryCacheMetadata: CacheMetadata | undefined;\n let queryData: PlainObjectMap | undefined;\n\n if (context.operation === QUERY) {\n let partialQueryResponse: PartialQueryResponse | undefined;\n\n if (context.queryFiltered && updatedRequestData) {\n dataCaching.push(\n this._setQueryResponseCacheEntry(updatedRequestData.hash, { cacheMetadata, data }, options, context),\n );\n\n partialQueryResponse = this._getPartialQueryResponse(requestData.hash);\n }\n\n queryCacheMetadata = CacheManager._mergeResponseCacheMetadata(cacheMetadata, partialQueryResponse);\n queryData = this._mergeResponseData(data, partialQueryResponse);\n\n dataCaching.push(\n this._setQueryResponseCacheEntry(\n requestData.hash,\n { cacheMetadata: queryCacheMetadata, data: queryData },\n options,\n context,\n ),\n );\n }\n\n if (options.awaitDataCaching) {\n await Promise.all(dataCaching);\n }\n\n if (isNotResponseChunk(normalizedResponseData, context) && queryCacheMetadata && queryData) {\n return {\n cacheMetadata: queryCacheMetadata,\n data: queryData,\n };\n }\n }\n\n const { data, hasNext, paths } = normalizedResponseData;\n\n return {\n cacheMetadata: this._buildCacheMetadata(requestData, normalizedResponseData, options, context),\n data,\n hasNext,\n paths,\n };\n }\n\n private async _checkCacheEntry(\n cacheType: CacheTypes,\n hash: string,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<CheckCacheEntryResult | false> {\n try {\n const cacheability = await this._hasCacheEntry(cacheType, hash);\n\n if (!cacheability || !CacheManager._isValid(cacheability)) {\n return false;\n }\n\n const entry = await this._getCacheEntry(cacheType, hash, options, context);\n\n if (isUndefined(entry)) {\n return false;\n }\n\n return { cacheability, entry };\n } catch (error) {\n return false;\n }\n }\n\n private _createCacheMetadata(\n { _cacheMetadata, headers }: RawResponseDataWithMaybeCacheMetadata,\n { operation }: CacheManagerContext,\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 @logCacheQuery()\n private async _getCacheEntry(\n cacheType: CacheTypes,\n hash: string,\n _options: RequestOptions,\n _context: CacheManagerContext,\n ): Promise<any> {\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 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)) {\n return false;\n }\n\n if (isEntity) {\n return true;\n }\n\n if (!possibleTypes.length) {\n return false;\n }\n\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 _mergeResponseData(\n responseData: PlainObjectMap,\n partialQueryResponse?: PartialQueryResponse,\n ): PlainObjectMap {\n if (!partialQueryResponse) {\n return responseData;\n }\n\n return this._mergeObjects(partialQueryResponse.data, responseData);\n }\n\n private async _parseEntityAndRequestFieldPathCacheEntryData(\n field: FieldNode,\n ancestorKeysAndPaths: AncestorKeysAndPaths,\n { cacheMetadata, entityData, requestFieldPathData }: ResponseDataForCaching,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n const keysAndPaths = buildFieldKeysAndPaths(field, ancestorKeysAndPaths, context);\n const { requestFieldCacheKey, requestFieldPath, responseDataPath } = keysAndPaths;\n const fieldData = get(requestFieldPathData, responseDataPath);\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath);\n\n if (!isObjectLike(fieldData) && !fieldTypeInfo?.hasDirectives) {\n return;\n }\n\n if (isObjectLike(fieldData)) {\n const promises: Promise<void>[] = [];\n\n iterateChildFields(\n field,\n fieldData as PlainObjectMap | any[],\n context.fragmentDefinitions,\n (\n childField: FieldNode,\n _typeName: string | undefined,\n _fragmentKind: string | undefined,\n _fragmentName: string | undefined,\n childIndex?: number,\n ) => {\n promises.push(\n this._parseEntityAndRequestFieldPathCacheEntryData(\n childField,\n { index: childIndex, requestFieldCacheKey, requestFieldPath, responseDataPath },\n { cacheMetadata, entityData, requestFieldPathData },\n options,\n context,\n ),\n );\n },\n );\n\n await Promise.all(promises);\n }\n\n await this._setEntityAndRequestFieldPathCacheEntry(\n field,\n keysAndPaths,\n { cacheMetadata, entityData, requestFieldPathData },\n options,\n context,\n );\n }\n\n private async _retrieveCachedEntityData(\n validTypeIDValue: string | number,\n { possibleTypes, typeName }: FieldTypeInfo,\n options: RequestOptions,\n context: CacheManagerContext,\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 return (validResult || {}) as Partial<CheckCacheEntryResult>;\n }\n\n private async _retrieveCachedParentNodeData(\n { entityData: ancestorEntityData, requestFieldPathData: ancestorRequestFieldPathData }: CachedAncestorFieldData,\n { hashedRequestFieldCacheKey, propNameOrIndex }: KeysAndPaths,\n fieldTypeInfo: FieldTypeInfo,\n options: RequestOptions,\n context: CacheManagerContext,\n ) {\n let entityData = CacheManager._getFieldDataFromAncestor(ancestorEntityData, propNameOrIndex);\n let requestFieldPathData = CacheManager._getFieldDataFromAncestor(ancestorRequestFieldPathData, propNameOrIndex);\n let cacheability: Cacheability | undefined;\n\n if (CacheManager._isNodeRequestFieldPath(fieldTypeInfo)) {\n const { cacheability: entryCacheability, entry } = await this._retrieveCachedRequestFieldPathData(\n hashedRequestFieldCacheKey,\n options,\n context,\n );\n\n if (entry) {\n requestFieldPathData = this._mergeObjects(requestFieldPathData, entry);\n }\n\n if (entryCacheability) {\n cacheability = entryCacheability;\n }\n }\n\n const validTypeIDValue = getValidTypeIDValue(requestFieldPathData, fieldTypeInfo, this._typeIDKey);\n\n if (CacheManager._isNodeEntity(fieldTypeInfo) && validTypeIDValue) {\n const { cacheability: entryCacheability, entry } = await this._retrieveCachedEntityData(\n validTypeIDValue,\n fieldTypeInfo,\n options,\n context,\n );\n\n if (entry) {\n entityData = this._mergeObjects(entityData, entry);\n }\n\n if (entryCacheability && (!cacheability || entryCacheability.metadata.ttl > cacheability?.metadata.ttl)) {\n cacheability = entryCacheability;\n }\n }\n\n const data =\n !isUndefined(requestFieldPathData) || !isUndefined(entityData)\n ? this._mergeObjects(requestFieldPathData, entityData)\n : entityData ?? requestFieldPathData;\n\n return {\n cacheability,\n data,\n entityData,\n requestFieldPathData,\n };\n }\n\n private async _retrieveCachedRequestFieldPathData(\n hash: string,\n options: RequestOptions,\n context: CacheManagerContext,\n ) {\n return (this._checkCacheEntry(REQUEST_FIELD_PATHS, hash, options, context) || {}) as Partial<CheckCacheEntryResult>;\n }\n\n private async _retrieveCachedResponseData(\n { ast }: RequestData,\n options: RequestOptions,\n context: CacheManagerContext,\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\n if (!fieldsAndTypeNames) {\n return cachedResponseData;\n }\n\n await Promise.all(\n fieldsAndTypeNames.map(({ fieldNode }) =>\n this._analyzeFieldNode(\n fieldNode,\n { requestFieldPath: context.operation },\n cachedResponseData,\n options,\n context,\n ),\n ),\n );\n\n cachedResponseData.fieldCount = CacheManager._countFieldPathChecklist(cachedResponseData.fieldPathChecklist);\n return cachedResponseData;\n }\n\n private _retrieveResponseDataForCaching(\n normalizedResponseData: RawResponseDataWithMaybeCacheMetadata,\n context: CacheManagerContext,\n ) {\n const responseChunks = this._responseChunksAwaitingCaching.get(\n context.boxID,\n ) as RawResponseDataWithMaybeCacheMetadata[];\n\n this._responseChunksAwaitingCaching.delete(context.boxID);\n return mergeResponseDataSets([...responseChunks, normalizedResponseData]);\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: CacheManagerContext,\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 _setEntityAndRequestFieldPathCacheEntries(\n requestData: RequestData,\n responseData: ResponseDataForCaching,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n const operationNode = getOperationDefinitions(requestData.ast, context.operation)[0];\n const fieldsAndTypeNames = getChildFields(operationNode);\n\n if (!fieldsAndTypeNames) {\n return;\n }\n\n await Promise.all(\n fieldsAndTypeNames.map(({ fieldNode }) => {\n return this._parseEntityAndRequestFieldPathCacheEntryData(\n fieldNode,\n { requestFieldPath: context.operation },\n responseData,\n options,\n context,\n );\n }),\n );\n }\n\n private async _setEntityAndRequestFieldPathCacheEntry(\n field: FieldNode,\n keysAndPaths: KeysAndPaths,\n { cacheMetadata, entityData, requestFieldPathData }: ResponseDataForCaching,\n options: RequestOptions,\n context: CacheManagerContext,\n ) {\n const { requestFieldPath, responseDataPath } = keysAndPaths;\n const fieldData = get(entityData, responseDataPath);\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath);\n const cacheability = cacheMetadata.get(requestFieldPath);\n\n if (isUndefined(fieldData) || !fieldTypeInfo || !cacheability) {\n return;\n }\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 const isEntity = this._isFieldEntity(fieldData, fieldTypeInfo);\n\n if (!isEntity && fieldTypeInfo.hasArguments) {\n unset(entityData, responseDataPath);\n }\n\n if (isEntity) {\n promises.push(\n this._setEntityCacheEntry(keysAndPaths, { cacheability, data: entityData, fieldTypeInfo }, options, context),\n );\n }\n\n await Promise.all(promises);\n }\n\n private async _setEntityCacheEntry(\n { responseDataPath }: KeysAndPaths,\n { cacheability, data, fieldTypeInfo }: DataForCachingEntry,\n options: RequestOptions,\n context: CacheManagerContext,\n ) {\n let fieldData = get(data, responseDataPath);\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 private _setFieldCacheability(\n field: FieldNode,\n ancestorKeysAndPaths: AncestorKeysAndPaths,\n { cacheMetadata, data }: ResponseData,\n options: RequestOptions,\n context: CacheManagerContext,\n ): void {\n const { requestFieldPath: ancestorRequestFieldPath } = ancestorKeysAndPaths;\n const keysAndPaths = buildFieldKeysAndPaths(field, ancestorKeysAndPaths, context);\n const { requestFieldPath, responseDataPath } = keysAndPaths;\n const fieldData = get(data, responseDataPath);\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath);\n\n if (!isObjectLike(fieldData) && !fieldTypeInfo?.hasDirectives) {\n return;\n }\n\n this._setFieldTypeCacheDirective(cacheMetadata, { ancestorRequestFieldPath, requestFieldPath }, context);\n\n if (isObjectLike(fieldData)) {\n iterateChildFields(\n field,\n fieldData as PlainObjectMap | any[],\n context.fragmentDefinitions,\n (\n childField: FieldNode,\n _typeName: string | undefined,\n _fragmentKind: string | undefined,\n _fragmentName: string | undefined,\n childIndex?: number,\n ) => {\n this._setFieldCacheability(\n childField,\n { index: childIndex, requestFieldPath, responseDataPath },\n { cacheMetadata, data },\n options,\n context,\n );\n },\n );\n }\n }\n\n private _setFieldTypeCacheDirective(\n cacheMetadata: CacheMetadata,\n { ancestorRequestFieldPath, requestFieldPath }: { ancestorRequestFieldPath?: string; requestFieldPath: string },\n { fieldTypeMap, operation }: CacheManagerContext,\n ): void {\n if (cacheMetadata.has(requestFieldPath)) {\n return;\n }\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: CacheManagerContext,\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: CacheManagerContext,\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 keysAndPaths: KeysAndPaths,\n { cacheability, data, fieldTypeInfo }: DataForCachingEntry,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n const { hashedRequestFieldCacheKey, responseDataPath } = keysAndPaths;\n let fieldData = get(data, responseDataPath);\n const isEntity = this._isFieldEntity(fieldData, fieldTypeInfo);\n const hasArgsOrDirectives = fieldTypeInfo.hasArguments || fieldTypeInfo.hasDirectives;\n\n if (context.operation === QUERY && (isEntity || hasArgsOrDirectives)) {\n if (isPlainObject(fieldData) && field.selectionSet?.selections) {\n fieldData = filterOutPropsWithArgsOrDirectives(fieldData, field.selectionSet.selections, keysAndPaths, context);\n }\n\n const result = await this._checkCacheEntry(REQUEST_FIELD_PATHS, hashedRequestFieldCacheKey, options, context);\n\n if (result && isObjectLike(fieldData)) {\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, { fragmentDefinitions: context.fragmentDefinitions })) {\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 _setResponseChunksAwaitingCaching(\n normalizedResponseData: RawResponseDataWithMaybeCacheMetadata,\n context: CacheManagerContext,\n ) {\n const responseChunks = this._responseChunksAwaitingCaching.get(context.boxID);\n\n if (responseChunks) {\n this._responseChunksAwaitingCaching.set(context.boxID, [...responseChunks, normalizedResponseData]);\n } else {\n this._responseChunksAwaitingCaching.set(context.boxID, [normalizedResponseData]);\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"],"file":"index.js"}
|
|
@@ -150,11 +150,11 @@ export interface CachemapOptions {
|
|
|
150
150
|
export interface CacheManagerDef {
|
|
151
151
|
cache: Cachemap;
|
|
152
152
|
analyzeQuery(requestData: RequestData, options: RequestOptions, context: RequestContext): Promise<AnalyzeQueryResult>;
|
|
153
|
+
cacheQuery(requestData: RequestData, updatedRequestData: RequestData, responseData: RawResponseDataWithMaybeCacheMetadata, options: RequestOptions, context: RequestContext): Promise<ResponseData>;
|
|
154
|
+
cacheResponse(requestData: RequestData, responseData: RawResponseDataWithMaybeCacheMetadata, options: RequestOptions, context: RequestContext): Promise<ResponseData>;
|
|
153
155
|
checkCacheEntry(cacheType: CacheTypes, hash: string, options: RequestOptions, context: RequestContext): Promise<CheckCacheEntryResult | false>;
|
|
154
156
|
checkQueryResponseCacheEntry(hash: string, options: RequestOptions, context: RequestContext): Promise<ResponseData | false>;
|
|
155
157
|
deletePartialQueryResponse(hash: string): void;
|
|
156
|
-
resolveQuery(requestData: RequestData, updatedRequestData: RequestData, responseData: RawResponseDataWithMaybeCacheMetadata, options: RequestOptions, context: RequestContext): Promise<ResponseData>;
|
|
157
|
-
resolveRequest(requestData: RequestData, responseData: RawResponseDataWithMaybeCacheMetadata, options: RequestOptions, context: RequestContext): Promise<ResponseData>;
|
|
158
158
|
}
|
|
159
159
|
export declare type CacheManagerInit = (options: ClientOptions) => Promise<CacheManagerDef>;
|
|
160
160
|
//# sourceMappingURL=index.d.ts.map
|