@graphql-box/cache-manager 2.4.1 → 2.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,16 +1,16 @@
1
1
  -----------------------------
2
2
  Rollup File Analysis
3
3
  -----------------------------
4
- bundle size: 90.599 KB
5
- original size: 60.864 KB
4
+ bundle size: 90.647 KB
5
+ original size: 60.94 KB
6
6
  code reduction: 0 %
7
7
  module count: 21
8
8
 
9
9
  ███████████████████████████████████░░░░░░░░░░░░░░░
10
10
  file: /src/main/index.ts
11
- bundle space: 71.58 %
12
- rendered size: 64.851 KB
13
- original size: 35.986 KB
11
+ bundle space: 71.59 %
12
+ rendered size: 64.894 KB
13
+ original size: 36.062 KB
14
14
  code reduction: 0 %
15
15
  dependents: 1
16
16
  - /src/index.ts
@@ -54,7 +54,7 @@ dependents: 2
54
54
 
55
55
  █░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
56
56
  file: /src/helpers/buildKeysAndPaths.ts
57
- bundle space: 2.72 %
57
+ bundle space: 2.71 %
58
58
  rendered size: 2.461 KB
59
59
  original size: 2.196 KB
60
60
  code reduction: 0 %
@@ -74,9 +74,9 @@ dependents: 1
74
74
  - /src/helpers/filterQuery.ts
75
75
 
76
76
  ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
77
- file: /src/helpers/normalizeResponseData.ts
78
- bundle space: 1.28 %
79
- rendered size: 1.161 KB
77
+ file: /src/helpers/normalizePatchResponseData.ts
78
+ bundle space: 1.29 %
79
+ rendered size: 1.166 KB
80
80
  original size: 284 Bytes
81
81
  code reduction: 0 %
82
82
  dependents: 1
@@ -21,4 +21,4 @@ var _default = ({
21
21
  };
22
22
 
23
23
  exports.default = _default;
24
- //# sourceMappingURL=normalizeResponseData.js.map
24
+ //# sourceMappingURL=normalizePatchResponseData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/helpers/normalizePatchResponseData.ts"],"names":["data","paths","rest"],"mappings":";;;;;;;;;;;eAGe,CAAC;AAAEA,EAAAA,IAAF;AAAQC,EAAAA,KAAR;AAAe,KAAGC;AAAlB,CAAD,KAAqE;AAClF,SAAO,EACL,GAAGA,IADE;AAELF,IAAAA,IAAI,EAAE,mBAAI,EAAJ,EAASC,KAAD,CAAoB,CAApB,CAAR,EAAgCD,IAAhC,CAFD;AAGLC,IAAAA;AAHK,GAAP;AAKD,C","sourcesContent":["import { RawResponseDataWithMaybeCacheMetadata } from \"@graphql-box/core\";\nimport { set } from \"lodash\";\n\nexport default ({ data, paths, ...rest }: RawResponseDataWithMaybeCacheMetadata) => {\n return {\n ...rest,\n data: set({}, (paths as string[])[0], data),\n paths,\n };\n};\n"],"file":"normalizePatchResponseData.js"}
@@ -52,7 +52,7 @@ var _filterOutPropsWithArgsOrDirectives = _interopRequireDefault(require("../hel
52
52
 
53
53
  var _filterQuery = _interopRequireDefault(require("../helpers/filterQuery"));
54
54
 
55
- var _normalizeResponseData = _interopRequireDefault(require("../helpers/normalizeResponseData"));
55
+ var _normalizePatchResponseData = _interopRequireDefault(require("../helpers/normalizePatchResponseData"));
56
56
 
57
57
  var _validTypeIDValue = require("../helpers/validTypeIDValue");
58
58
 
@@ -675,7 +675,7 @@ let CacheManager = (_dec = (0, _debug.logCacheQuery)(), _dec2 = (0, _debug.logCa
675
675
  }
676
676
 
677
677
  async _resolveRequest(requestData, rawResponseData, options, context) {
678
- const normalizedResponseData = rawResponseData.paths ? (0, _normalizeResponseData.default)(rawResponseData) : rawResponseData;
678
+ const normalizedResponseData = rawResponseData.paths && context.normalizePatchResponseData ? (0, _normalizePatchResponseData.default)(rawResponseData) : rawResponseData;
679
679
  const dataCaching = [];
680
680
 
681
681
  const cacheMetadata = this._buildCacheMetadata(requestData, normalizedResponseData, options, context);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/main/index.ts"],"names":["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","HEADER_NO_CACHE","cacheability","get","printCacheControl","_isNodeEntity","fieldTypeInfo","isEntity","possibleTypes","some","type","_isNodeRequestFieldPath","hasArguments","hasDirectives","_isValid","noCache","METADATA","CACHE_CONTROL","NO_CACHE","checkTTL","_mergeResponseCacheMetadata","partialQueryResponse","Map","_setCachedData","requestData","data","objectLikeData","_setCachedResponseData","cachedFieldData","requestFieldPath","typeNamesAndKind","_options","_setCacheMetadata","_setFieldPathChecklist","set","operationCacheability","metadata","ttl","dataTypeName","fieldTypeName","fragmentKind","fragmentName","FRAGMENT_SPREAD","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","QUERY_RESPONSES","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","TYPE_NAME_KEY","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","DATA_ENTITIES","validResults","validResult","sort","a","b","reduce","ancestorEntityData","ancestorRequestFieldPathData","entryCacheability","REQUEST_FIELD_PATHS","_setCacheEntry","value","cachemapOptions","operationNode","_setRequestFieldPathCacheEntry","_setEntityCacheEntry","entityDataKey","cacheHeaders","cacheControl","tag","__cacheKey","ancestorRequestFieldPath","_setFieldTypeCacheDirective","Cacheability","dehydratedCacheMetadata","hasArgsOrDirectives","QUERY","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 normalizeResponseData from \"../helpers/normalizeResponseData\";\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 = rawResponseData.paths ? normalizeResponseData(rawResponseData) : rawResponseData;\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":["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","HEADER_NO_CACHE","cacheability","get","printCacheControl","_isNodeEntity","fieldTypeInfo","isEntity","possibleTypes","some","type","_isNodeRequestFieldPath","hasArguments","hasDirectives","_isValid","noCache","METADATA","CACHE_CONTROL","NO_CACHE","checkTTL","_mergeResponseCacheMetadata","partialQueryResponse","Map","_setCachedData","requestData","data","objectLikeData","_setCachedResponseData","cachedFieldData","requestFieldPath","typeNamesAndKind","_options","_setCacheMetadata","_setFieldPathChecklist","set","operationCacheability","metadata","ttl","dataTypeName","fieldTypeName","fragmentKind","fragmentName","FRAGMENT_SPREAD","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","QUERY_RESPONSES","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","TYPE_NAME_KEY","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","normalizePatchResponseData","_setEntityAndRequestFieldPathCacheEntries","_retrieveCachedEntityData","validTypeIDValue","typeNames","map","checkResults","name","DATA_ENTITIES","validResults","validResult","sort","a","b","reduce","ancestorEntityData","ancestorRequestFieldPathData","entryCacheability","REQUEST_FIELD_PATHS","_setCacheEntry","value","cachemapOptions","operationNode","_setRequestFieldPathCacheEntry","_setEntityCacheEntry","entityDataKey","cacheHeaders","cacheControl","tag","__cacheKey","ancestorRequestFieldPath","_setFieldTypeCacheDirective","Cacheability","dehydratedCacheMetadata","hasArgsOrDirectives","QUERY","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"}
@@ -9,4 +9,4 @@ export default (({
9
9
  paths
10
10
  };
11
11
  });
12
- //# sourceMappingURL=normalizeResponseData.js.map
12
+ //# sourceMappingURL=normalizePatchResponseData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/helpers/normalizePatchResponseData.ts"],"names":["data","paths","rest"],"mappings":";AAGA,gBAAe,CAAC;AAAEA,EAAAA,IAAF;AAAQC,EAAAA,KAAR;AAAe,KAAGC;AAAlB,CAAD,KAAqE;AAClF,SAAO,EACL,GAAGA,IADE;AAELF,IAAAA,IAAI,EAAE,KAAI,EAAJ,EAASC,KAAD,CAAoB,CAApB,CAAR,EAAgCD,IAAhC,CAFD;AAGLC,IAAAA;AAHK,GAAP;AAKD,CAND","sourcesContent":["import { RawResponseDataWithMaybeCacheMetadata } from \"@graphql-box/core\";\nimport { set } from \"lodash\";\n\nexport default ({ data, paths, ...rest }: RawResponseDataWithMaybeCacheMetadata) => {\n return {\n ...rest,\n data: set({}, (paths as string[])[0], data),\n paths,\n };\n};\n"],"file":"normalizePatchResponseData.js"}
@@ -23,7 +23,7 @@ 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 normalizeResponseData from "../helpers/normalizeResponseData";
26
+ import normalizePatchResponseData from "../helpers/normalizePatchResponseData";
27
27
  import { getValidTypeIDValue } from "../helpers/validTypeIDValue";
28
28
  export let CacheManager = (_dec = logCacheQuery(), _dec2 = logCacheEntry(), _dec3 = logPartialCompiled(), (_class = class CacheManager {
29
29
  static async init(options) {
@@ -653,7 +653,7 @@ export let CacheManager = (_dec = logCacheQuery(), _dec2 = logCacheEntry(), _dec
653
653
  }
654
654
 
655
655
  async _resolveRequest(requestData, rawResponseData, options, context) {
656
- const normalizedResponseData = rawResponseData.paths ? normalizeResponseData(rawResponseData) : rawResponseData;
656
+ const normalizedResponseData = rawResponseData.paths && context.normalizePatchResponseData ? normalizePatchResponseData(rawResponseData) : rawResponseData;
657
657
  const dataCaching = [];
658
658
 
659
659
  const cacheMetadata = this._buildCacheMetadata(requestData, normalizedResponseData, options, context);