@graphql-box/cache-manager 3.1.2 → 3.2.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.
Files changed (52) hide show
  1. package/lib/browser/index.js +1 -1
  2. package/lib/browser/index.js.map +1 -1
  3. package/lib/browser/production.analysis.txt +38 -50
  4. package/lib/main/helpers/createFragmentSpreadChecklist.js +10 -15
  5. package/lib/main/helpers/createFragmentSpreadChecklist.js.map +1 -1
  6. package/lib/main/helpers/filterField.js +1 -3
  7. package/lib/main/helpers/filterField.js.map +1 -1
  8. package/lib/main/helpers/filterFragmentDefinitions.js +3 -3
  9. package/lib/main/helpers/filterFragmentDefinitions.js.map +1 -1
  10. package/lib/main/helpers/filterOutPropsWithArgsOrDirectives.js +1 -3
  11. package/lib/main/helpers/filterOutPropsWithArgsOrDirectives.js.map +1 -1
  12. package/lib/main/helpers/filterQuery.js +2 -4
  13. package/lib/main/helpers/filterQuery.js.map +1 -1
  14. package/lib/main/main/index.js +9 -7
  15. package/lib/main/main/index.js.map +1 -1
  16. package/lib/module/helpers/createFragmentSpreadChecklist.js +10 -14
  17. package/lib/module/helpers/createFragmentSpreadChecklist.js.map +1 -1
  18. package/lib/module/helpers/filterField.js +1 -2
  19. package/lib/module/helpers/filterField.js.map +1 -1
  20. package/lib/module/helpers/filterFragmentDefinitions.js +4 -4
  21. package/lib/module/helpers/filterFragmentDefinitions.js.map +1 -1
  22. package/lib/module/helpers/filterOutPropsWithArgsOrDirectives.js +1 -2
  23. package/lib/module/helpers/filterOutPropsWithArgsOrDirectives.js.map +1 -1
  24. package/lib/module/helpers/filterQuery.js +2 -3
  25. package/lib/module/helpers/filterQuery.js.map +1 -1
  26. package/lib/module/main/index.js +6 -3
  27. package/lib/module/main/index.js.map +1 -1
  28. package/lib/types/defs/index.d.ts +3 -16
  29. package/lib/types/defs/index.d.ts.map +1 -1
  30. package/lib/types/helpers/createFragmentSpreadChecklist.d.ts +2 -1
  31. package/lib/types/helpers/createFragmentSpreadChecklist.d.ts.map +1 -1
  32. package/lib/types/helpers/filterField.d.ts.map +1 -1
  33. package/lib/types/helpers/filterOutPropsWithArgsOrDirectives.d.ts +2 -1
  34. package/lib/types/helpers/filterOutPropsWithArgsOrDirectives.d.ts.map +1 -1
  35. package/lib/types/helpers/filterQuery.d.ts.map +1 -1
  36. package/lib/types/main/index.d.ts +3 -2
  37. package/lib/types/main/index.d.ts.map +1 -1
  38. package/package.json +1 -1
  39. package/src/defs/index.ts +8 -17
  40. package/src/helpers/createFragmentSpreadChecklist.ts +3 -3
  41. package/src/helpers/filterField.ts +8 -2
  42. package/src/helpers/filterFragmentDefinitions.ts +2 -2
  43. package/src/helpers/filterOutPropsWithArgsOrDirectives.ts +2 -3
  44. package/src/helpers/filterQuery.ts +7 -3
  45. package/src/main/index.ts +13 -4
  46. package/lib/main/helpers/buildKeysAndPaths.js +0 -73
  47. package/lib/main/helpers/buildKeysAndPaths.js.map +0 -1
  48. package/lib/module/helpers/buildKeysAndPaths.js +0 -54
  49. package/lib/module/helpers/buildKeysAndPaths.js.map +0 -1
  50. package/lib/types/helpers/buildKeysAndPaths.d.ts +0 -10
  51. package/lib/types/helpers/buildKeysAndPaths.d.ts.map +0 -1
  52. package/src/helpers/buildKeysAndPaths.ts +0 -71
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/main/index.ts"],"names":["CacheManager","_countFieldPathChecklist","fieldPathChecklist","fieldCount","missing","total","forEach","checklistValues","length","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","options","errors","cache","push","TypeError","typeCacheDirectives","message","_cache","_cascadeCacheControl","cascadeCacheControl","_fallbackOperationCacheability","fallbackOperationCacheability","_typeCacheDirectives","_typeIDKey","typeIDKey","analyzeQuery","context","ast","hash","Promise","reject","cacheManagerContext","fragmentDefinitions","cachedResponseData","_retrieveCachedResponseData","updated","dataCaching","_setQueryResponseCacheEntry","awaitDataCaching","response","_setPartialQueryResponse","filteredAST","rest","request","cacheQuery","updatedRequestData","rawResponseData","_cacheResponse","cacheResponse","checkCacheEntry","cacheType","_checkCacheEntry","checkQueryResponseCacheEntry","result","QUERY_RESPONSES","deletePartialQueryResponse","_partialQueryResponses","delete","_analyzeFieldNode","fieldNode","cachedAncestorFieldData","_analyzeParentFieldNode","_analyzeLeafFieldNode","keysAndPaths","hashedRequestFieldCacheKey","fieldTypeMap","entityData","requestFieldPathData","__typename","_retrieveCachedRequestFieldPathData","requestFieldCacheKey","_retrieveCachedParentNodeData","TYPE_NAME_KEY","promises","childField","childTypeName","childFragmentKind","childFragmentName","childIndex","index","all","_buildCacheMetadata","otherProps","_createCacheMetadata","queryNode","fieldsAndTypeNames","_setFieldCacheability","normalizedResponseData","responseDataForCaching","_setResponseChunksAwaitingCaching","_retrieveResponseDataForCaching","_setEntityAndRequestFieldPathCacheEntries","queryCacheMetadata","queryData","QUERY","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","DATA_ENTITIES","validResults","validResult","sort","a","b","reduce","ancestorEntityData","ancestorRequestFieldPathData","entryCacheability","REQUEST_FIELD_PATHS","responseChunks","_responseChunksAwaitingCaching","boxID","_setCacheEntry","value","cachemapOptions","operationNode","_setRequestFieldPathCacheEntry","_setEntityCacheEntry","entityDataKey","cacheHeaders","cacheControl","tag","__cacheKey","ancestorRequestFieldPath","_setFieldTypeCacheDirective","Cacheability","dehydratedCacheMetadata","hasArgsOrDirectives","selectionSet","selections","init","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 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 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 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 throw errors;\n }\n\n this._cache = options.cache;\n this._cascadeCacheControl = options.cascadeCacheControl || false;\n this._fallbackOperationCacheability = options.fallbackOperationCacheability || NO_CACHE;\n this._typeCacheDirectives = options.typeCacheDirectives || {};\n this._typeIDKey = options.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) => new CacheManager({ ...clientOptions, ...userOptions });\n}\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../../src/main/index.ts"],"names":["CacheManager","_countFieldPathChecklist","fieldPathChecklist","fieldCount","missing","total","forEach","checklistValues","length","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","options","errors","cache","push","TypeError","typeCacheDirectives","message","_cache","_cascadeCacheControl","cascadeCacheControl","_fallbackOperationCacheability","fallbackOperationCacheability","_typeCacheDirectives","_typeIDKey","typeIDKey","analyzeQuery","context","ast","hash","Promise","reject","cacheManagerContext","fragmentDefinitions","cachedResponseData","_retrieveCachedResponseData","updated","dataCaching","_setQueryResponseCacheEntry","awaitDataCaching","response","_setPartialQueryResponse","filteredAST","rest","request","cacheQuery","updatedRequestData","rawResponseData","_cacheResponse","cacheResponse","checkCacheEntry","cacheType","_checkCacheEntry","checkQueryResponseCacheEntry","result","QUERY_RESPONSES","deletePartialQueryResponse","_partialQueryResponses","delete","setQueryResponseCacheEntry","responseData","_analyzeFieldNode","fieldNode","cachedAncestorFieldData","_analyzeParentFieldNode","_analyzeLeafFieldNode","keysAndPaths","hashedRequestFieldCacheKey","fieldTypeMap","entityData","requestFieldPathData","__typename","_retrieveCachedRequestFieldPathData","requestFieldCacheKey","_retrieveCachedParentNodeData","TYPE_NAME_KEY","promises","childField","childTypeName","childFragmentKind","childFragmentName","childIndex","index","all","_buildCacheMetadata","otherProps","_createCacheMetadata","queryNode","fieldsAndTypeNames","_setFieldCacheability","normalizedResponseData","responseDataForCaching","_setResponseChunksAwaitingCaching","_retrieveResponseDataForCaching","_setEntityAndRequestFieldPathCacheEntries","queryCacheMetadata","queryData","QUERY","queryFiltered","_getPartialQueryResponse","_mergeResponseData","hasNext","paths","_hasCacheEntry","_getCacheEntry","error","_cacheMetadata","headers","fallback","_context","_isFieldEntity","fieldData","_mergeObjects","obj","src","_key","val","_parseEntityAndRequestFieldPathCacheEntryData","field","ancestorKeysAndPaths","responseDataPath","_typeName","_fragmentKind","_fragmentName","_setEntityAndRequestFieldPathCacheEntry","_retrieveCachedEntityData","validTypeIDValue","typeNames","map","checkResults","name","DATA_ENTITIES","validResults","validResult","sort","a","b","reduce","ancestorEntityData","ancestorRequestFieldPathData","entryCacheability","REQUEST_FIELD_PATHS","responseChunks","_responseChunksAwaitingCaching","boxID","_setCacheEntry","value","cachemapOptions","operationNode","_setRequestFieldPathCacheEntry","_setEntityCacheEntry","entityDataKey","cacheHeaders","cacheControl","tag","__cacheKey","ancestorRequestFieldPath","_setFieldTypeCacheDirective","Cacheability","dehydratedCacheMetadata","hasArgsOrDirectives","selectionSet","selections","init","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 KeysAndPaths,\n buildFieldKeysAndPaths,\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 MergedCachedFieldData,\n PartialQueryResponse,\n PartialQueryResponses,\n QueryResponseCacheEntry,\n ResponseDataForCaching,\n TypeNamesAndKind,\n UserOptions,\n} from \"../defs\";\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 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 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 throw errors;\n }\n\n this._cache = options.cache;\n this._cascadeCacheControl = options.cascadeCacheControl || false;\n this._fallbackOperationCacheability = options.fallbackOperationCacheability || NO_CACHE;\n this._typeCacheDirectives = options.typeCacheDirectives || {};\n this._typeIDKey = options.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 | undefined,\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<ResponseData> {\n const cacheManagerContext: CacheManagerContext = {\n ...context,\n fragmentDefinitions: getFragmentDefinitions((updatedRequestData ?? requestData).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 public async setQueryResponseCacheEntry(\n requestData: RequestData,\n responseData: ResponseData,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n return this._setQueryResponseCacheEntry(requestData.hash, responseData, options, context);\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) => new CacheManager({ ...clientOptions, ...userOptions });\n}\n"],"file":"index.js"}
@@ -1,18 +1,14 @@
1
1
  import _keys from "lodash/keys";
2
- import { getFragmentDefinitions } from "@graphql-box/helpers";
3
2
  export default (({
4
- ast,
5
3
  request
6
- }) => {
7
- var _getFragmentDefinitio;
8
-
9
- return _keys((_getFragmentDefinitio = getFragmentDefinitions(ast)) !== null && _getFragmentDefinitio !== void 0 ? _getFragmentDefinitio : {}).reduce((acc, name) => {
10
- acc[name] = {
11
- deleted: 0,
12
- paths: [],
13
- total: (request.match(new RegExp(`\\.\\.\\.${name}`, "g")) || []).length
14
- };
15
- return acc;
16
- }, {});
17
- });
4
+ }, {
5
+ fragmentDefinitions
6
+ }) => _keys(fragmentDefinitions !== null && fragmentDefinitions !== void 0 ? fragmentDefinitions : {}).reduce((acc, name) => {
7
+ acc[name] = {
8
+ deleted: 0,
9
+ paths: [],
10
+ total: (request.match(new RegExp(`\\.\\.\\.${name}`, "g")) || []).length
11
+ };
12
+ return acc;
13
+ }, {}));
18
14
  //# sourceMappingURL=createFragmentSpreadChecklist.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/helpers/createFragmentSpreadChecklist.ts"],"names":["getFragmentDefinitions","ast","request","reduce","acc","name","deleted","paths","total","match","RegExp","length"],"mappings":";AACA,SAASA,sBAAT,QAAuC,sBAAvC;AAWA,gBAAe,CAAC;AAAEC,EAAAA,GAAF;AAAOC,EAAAA;AAAP,CAAD;AAAA;;AAAA,SACb,+BAAKF,sBAAsB,CAACC,GAAD,CAA3B,yEAAoC,EAApC,EAAwCE,MAAxC,CAA+C,CAACC,GAAD,EAA8BC,IAA9B,KAAuC;AACpFD,IAAAA,GAAG,CAACC,IAAD,CAAH,GAAY;AAAEC,MAAAA,OAAO,EAAE,CAAX;AAAcC,MAAAA,KAAK,EAAE,EAArB;AAAyBC,MAAAA,KAAK,EAAE,CAACN,OAAO,CAACO,KAAR,CAAc,IAAIC,MAAJ,CAAY,YAAWL,IAAK,EAA5B,EAA+B,GAA/B,CAAd,KAAsD,EAAvD,EAA2DM;AAA3F,KAAZ;AACA,WAAOP,GAAP;AACD,GAHD,EAGG,EAHH,CADa;AAAA,CAAf","sourcesContent":["import { RequestData } from \"@graphql-box/core\";\nimport { getFragmentDefinitions } from \"@graphql-box/helpers\";\nimport { keys } from \"lodash\";\n\nexport type FragmentSpreadCheckist = {\n [key: string]: {\n deleted: number;\n paths: string[];\n total: number;\n };\n};\n\nexport default ({ ast, request }: RequestData) =>\n keys(getFragmentDefinitions(ast) ?? {}).reduce((acc: FragmentSpreadCheckist, name) => {\n acc[name] = { deleted: 0, paths: [], total: (request.match(new RegExp(`\\\\.\\\\.\\\\.${name}`, \"g\")) || []).length };\n return acc;\n }, {});\n"],"file":"createFragmentSpreadChecklist.js"}
1
+ {"version":3,"sources":["../../../src/helpers/createFragmentSpreadChecklist.ts"],"names":["request","fragmentDefinitions","reduce","acc","name","deleted","paths","total","match","RegExp","length"],"mappings":";AAYA,gBAAe,CAAC;AAAEA,EAAAA;AAAF,CAAD,EAA2B;AAAEC,EAAAA;AAAF,CAA3B,KACb,MAAKA,mBAAL,aAAKA,mBAAL,cAAKA,mBAAL,GAA4B,EAA5B,EAAgCC,MAAhC,CAAuC,CAACC,GAAD,EAA8BC,IAA9B,KAAuC;AAC5ED,EAAAA,GAAG,CAACC,IAAD,CAAH,GAAY;AAAEC,IAAAA,OAAO,EAAE,CAAX;AAAcC,IAAAA,KAAK,EAAE,EAArB;AAAyBC,IAAAA,KAAK,EAAE,CAACP,OAAO,CAACQ,KAAR,CAAc,IAAIC,MAAJ,CAAY,YAAWL,IAAK,EAA5B,EAA+B,GAA/B,CAAd,KAAsD,EAAvD,EAA2DM;AAA3F,GAAZ;AACA,SAAOP,GAAP;AACD,CAHD,EAGG,EAHH,CADF","sourcesContent":["import { RequestData } from \"@graphql-box/core\";\nimport { keys } from \"lodash\";\nimport { CacheManagerContext } from \"../defs\";\n\nexport type FragmentSpreadCheckist = {\n [key: string]: {\n deleted: number;\n paths: string[];\n total: number;\n };\n};\n\nexport default ({ request }: RequestData, { fragmentDefinitions }: CacheManagerContext) =>\n keys(fragmentDefinitions ?? {}).reduce((acc: FragmentSpreadCheckist, name) => {\n acc[name] = { deleted: 0, paths: [], total: (request.match(new RegExp(`\\\\.\\\\.\\\\.${name}`, \"g\")) || []).length };\n return acc;\n }, {});\n"],"file":"createFragmentSpreadChecklist.js"}
@@ -1,6 +1,5 @@
1
1
  import { TYPE_NAME_KEY } from "@graphql-box/core";
2
- import { FRAGMENT_SPREAD, deleteChildFields, getChildFields, getName, hasChildFields } from "@graphql-box/helpers";
3
- import { buildFieldKeysAndPaths } from "./buildKeysAndPaths";
2
+ import { FRAGMENT_SPREAD, buildFieldKeysAndPaths, deleteChildFields, getChildFields, getName, hasChildFields } from "@graphql-box/helpers";
4
3
  import checkFieldPathChecklist from "./checkFieldPathChecklist";
5
4
  import filterFragmentSpreads from "./filterFragmentSpreads";
6
5
  import filterIDsAndTypeNames from "./filterIDsAndTypeNames";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/helpers/filterField.ts"],"names":["TYPE_NAME_KEY","FRAGMENT_SPREAD","deleteChildFields","getChildFields","getName","hasChildFields","buildFieldKeysAndPaths","checkFieldPathChecklist","filterFragmentSpreads","filterIDsAndTypeNames","filterInlineFragments","filterField","field","fieldPathChecklist","fragmentSpreadChecklist","ancestorRequestFieldPath","context","fragmentDefinitions","typeIDKey","fieldsAndTypeNames","fragmentSpreadFieldCounter","i","length","fieldNode","childField","fragmentKind","fragmentName","typeName","childTypeName","hasData","total","childFieldName","requestFieldPath","typeUnused","get"],"mappings":"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","sourcesContent":["import { TYPE_NAME_KEY } from \"@graphql-box/core\";\nimport { FRAGMENT_SPREAD, deleteChildFields, getChildFields, getName, hasChildFields } from \"@graphql-box/helpers\";\nimport { FieldNode, FragmentDefinitionNode, OperationDefinitionNode } from \"graphql\";\nimport { CacheManagerContext, FieldPathChecklist, FragmentSpreadFieldCounter } from \"../defs\";\nimport { buildFieldKeysAndPaths } from \"./buildKeysAndPaths\";\nimport checkFieldPathChecklist from \"./checkFieldPathChecklist\";\nimport { FragmentSpreadCheckist } from \"./createFragmentSpreadChecklist\";\nimport filterFragmentSpreads from \"./filterFragmentSpreads\";\nimport filterIDsAndTypeNames from \"./filterIDsAndTypeNames\";\nimport filterInlineFragments from \"./filterInlineFragments\";\n\nconst filterField = (\n field: FieldNode | FragmentDefinitionNode | OperationDefinitionNode,\n fieldPathChecklist: FieldPathChecklist,\n fragmentSpreadChecklist: FragmentSpreadCheckist,\n ancestorRequestFieldPath: string,\n context: CacheManagerContext,\n): boolean => {\n const { fragmentDefinitions, typeIDKey } = context;\n const fieldsAndTypeNames = getChildFields(field, { fragmentDefinitions });\n\n if (!fieldsAndTypeNames) {\n return false;\n }\n\n const fragmentSpreadFieldCounter: FragmentSpreadFieldCounter = {};\n\n for (let i = fieldsAndTypeNames.length - 1; i >= 0; i -= 1) {\n const { fieldNode: childField, fragmentKind, fragmentName, typeName: childTypeName } = fieldsAndTypeNames[i];\n\n if (fragmentKind === FRAGMENT_SPREAD && fragmentName && !fragmentSpreadFieldCounter[fragmentName]) {\n fragmentSpreadFieldCounter[fragmentName] = {\n hasData: 0,\n total: fragmentDefinitions?.[fragmentName]\n ? getChildFields(fragmentDefinitions?.[fragmentName], { fragmentDefinitions })?.length ?? 0\n : 0,\n };\n }\n\n const childFieldName = getName(childField);\n\n if (childFieldName === typeIDKey || childFieldName === TYPE_NAME_KEY) {\n continue;\n }\n\n const { requestFieldPath } = buildFieldKeysAndPaths(\n childField,\n {\n requestFieldPath: ancestorRequestFieldPath,\n },\n context,\n );\n\n const { hasData, typeUnused } = checkFieldPathChecklist(fieldPathChecklist.get(requestFieldPath), childTypeName);\n\n if (hasData || typeUnused) {\n if (fragmentKind === FRAGMENT_SPREAD) {\n fragmentSpreadFieldCounter[fragmentName as string].hasData += 1;\n } else if (!hasChildFields(childField, { fragmentDefinitions })) {\n deleteChildFields(field, childField);\n } else if (filterField(childField, fieldPathChecklist, fragmentSpreadChecklist, requestFieldPath, context)) {\n deleteChildFields(field, childField);\n }\n }\n }\n\n filterFragmentSpreads(field, fragmentSpreadFieldCounter, fragmentSpreadChecklist, ancestorRequestFieldPath);\n filterInlineFragments(field, context);\n filterIDsAndTypeNames(field, context);\n return !hasChildFields(field, { fragmentDefinitions });\n};\n\nexport default filterField;\n"],"file":"filterField.js"}
1
+ {"version":3,"sources":["../../../src/helpers/filterField.ts"],"names":["TYPE_NAME_KEY","FRAGMENT_SPREAD","buildFieldKeysAndPaths","deleteChildFields","getChildFields","getName","hasChildFields","checkFieldPathChecklist","filterFragmentSpreads","filterIDsAndTypeNames","filterInlineFragments","filterField","field","fieldPathChecklist","fragmentSpreadChecklist","ancestorRequestFieldPath","context","fragmentDefinitions","typeIDKey","fieldsAndTypeNames","fragmentSpreadFieldCounter","i","length","fieldNode","childField","fragmentKind","fragmentName","typeName","childTypeName","hasData","total","childFieldName","requestFieldPath","typeUnused","get"],"mappings":"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","sourcesContent":["import { TYPE_NAME_KEY } from \"@graphql-box/core\";\nimport {\n FRAGMENT_SPREAD,\n buildFieldKeysAndPaths,\n deleteChildFields,\n getChildFields,\n getName,\n hasChildFields,\n} from \"@graphql-box/helpers\";\nimport { FieldNode, FragmentDefinitionNode, OperationDefinitionNode } from \"graphql\";\nimport { CacheManagerContext, FieldPathChecklist, FragmentSpreadFieldCounter } from \"../defs\";\nimport checkFieldPathChecklist from \"./checkFieldPathChecklist\";\nimport { FragmentSpreadCheckist } from \"./createFragmentSpreadChecklist\";\nimport filterFragmentSpreads from \"./filterFragmentSpreads\";\nimport filterIDsAndTypeNames from \"./filterIDsAndTypeNames\";\nimport filterInlineFragments from \"./filterInlineFragments\";\n\nconst filterField = (\n field: FieldNode | FragmentDefinitionNode | OperationDefinitionNode,\n fieldPathChecklist: FieldPathChecklist,\n fragmentSpreadChecklist: FragmentSpreadCheckist,\n ancestorRequestFieldPath: string,\n context: CacheManagerContext,\n): boolean => {\n const { fragmentDefinitions, typeIDKey } = context;\n const fieldsAndTypeNames = getChildFields(field, { fragmentDefinitions });\n\n if (!fieldsAndTypeNames) {\n return false;\n }\n\n const fragmentSpreadFieldCounter: FragmentSpreadFieldCounter = {};\n\n for (let i = fieldsAndTypeNames.length - 1; i >= 0; i -= 1) {\n const { fieldNode: childField, fragmentKind, fragmentName, typeName: childTypeName } = fieldsAndTypeNames[i];\n\n if (fragmentKind === FRAGMENT_SPREAD && fragmentName && !fragmentSpreadFieldCounter[fragmentName]) {\n fragmentSpreadFieldCounter[fragmentName] = {\n hasData: 0,\n total: fragmentDefinitions?.[fragmentName]\n ? getChildFields(fragmentDefinitions?.[fragmentName], { fragmentDefinitions })?.length ?? 0\n : 0,\n };\n }\n\n const childFieldName = getName(childField);\n\n if (childFieldName === typeIDKey || childFieldName === TYPE_NAME_KEY) {\n continue;\n }\n\n const { requestFieldPath } = buildFieldKeysAndPaths(\n childField,\n {\n requestFieldPath: ancestorRequestFieldPath,\n },\n context,\n );\n\n const { hasData, typeUnused } = checkFieldPathChecklist(fieldPathChecklist.get(requestFieldPath), childTypeName);\n\n if (hasData || typeUnused) {\n if (fragmentKind === FRAGMENT_SPREAD) {\n fragmentSpreadFieldCounter[fragmentName as string].hasData += 1;\n } else if (!hasChildFields(childField, { fragmentDefinitions })) {\n deleteChildFields(field, childField);\n } else if (filterField(childField, fieldPathChecklist, fragmentSpreadChecklist, requestFieldPath, context)) {\n deleteChildFields(field, childField);\n }\n }\n }\n\n filterFragmentSpreads(field, fragmentSpreadFieldCounter, fragmentSpreadChecklist, ancestorRequestFieldPath);\n filterInlineFragments(field, context);\n filterIDsAndTypeNames(field, context);\n return !hasChildFields(field, { fragmentDefinitions });\n};\n\nexport default filterField;\n"],"file":"filterField.js"}
@@ -1,9 +1,7 @@
1
1
  import _keys from "lodash/keys";
2
- import { deleteFragmentDefinitions, getFragmentDefinitions } from "@graphql-box/helpers";
2
+ import { deleteFragmentDefinitions } from "@graphql-box/helpers";
3
3
  import filterField from "./filterField";
4
4
  export default ((ast, fieldPathChecklist, fragmentSpreadChecklist, context) => {
5
- var _getFragmentDefinitio;
6
-
7
5
  const definitionsToFilter = _keys(fragmentSpreadChecklist).reduce((namesAndPaths, key) => {
8
6
  const {
9
7
  deleted,
@@ -15,7 +13,9 @@ export default ((ast, fieldPathChecklist, fragmentSpreadChecklist, context) => {
15
13
  }] : namesAndPaths;
16
14
  }, []);
17
15
 
18
- const fragmentDefinitions = (_getFragmentDefinitio = getFragmentDefinitions(ast)) !== null && _getFragmentDefinitio !== void 0 ? _getFragmentDefinitio : {};
16
+ const {
17
+ fragmentDefinitions = {}
18
+ } = context;
19
19
  definitionsToFilter.forEach(({
20
20
  name,
21
21
  path
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/helpers/filterFragmentDefinitions.ts"],"names":["deleteFragmentDefinitions","getFragmentDefinitions","filterField","ast","fieldPathChecklist","fragmentSpreadChecklist","context","definitionsToFilter","reduce","namesAndPaths","key","deleted","total","name","path","paths","fragmentDefinitions","forEach","fragmentDefinition","definitionsToDelete","names","length","include"],"mappings":";AAAA,SAASA,yBAAT,EAAoCC,sBAApC,QAAkE,sBAAlE;AAKA,OAAOC,WAAP,MAAwB,eAAxB;AAEA,gBAAe,CACbC,GADa,EAEbC,kBAFa,EAGbC,uBAHa,EAIbC,OAJa,KAKV;AAAA;;AACH,QAAMC,mBAAmB,GAAG,MAAKF,uBAAL,EAA8BG,MAA9B,CAC1B,CAACC,aAAD,EAAkDC,GAAlD,KAA0D;AACxD,UAAM;AAAEC,MAAAA,OAAF;AAAWC,MAAAA;AAAX,QAAqBP,uBAAuB,CAACK,GAAD,CAAlD;AAEA,WAAOC,OAAO,KAAK,CAAZ,IAAiBC,KAAK,KAAK,CAA3B,GACH,CAAC,GAAGH,aAAJ,EAAmB;AAAEI,MAAAA,IAAI,EAAEH,GAAR;AAAaI,MAAAA,IAAI,EAAET,uBAAuB,CAACK,GAAD,CAAvB,CAA6BK,KAA7B,CAAmC,CAAnC;AAAnB,KAAnB,CADG,GAEHN,aAFJ;AAGD,GAPyB,EAQ1B,EAR0B,CAA5B;;AAWA,QAAMO,mBAAmB,4BAAGf,sBAAsB,CAACE,GAAD,CAAzB,yEAAkC,EAA3D;AAEAI,EAAAA,mBAAmB,CAACU,OAApB,CAA4B,CAAC;AAAEJ,IAAAA,IAAF;AAAQC,IAAAA;AAAR,GAAD,KAAoB;AAC9C,UAAMI,kBAAkB,GAAGF,mBAAmB,CAACH,IAAD,CAA9C;AACAX,IAAAA,WAAW,CAACgB,kBAAD,EAAqBd,kBAArB,EAAyCC,uBAAzC,EAAkES,IAAlE,EAAwER,OAAxE,CAAX;AACD,GAHD;;AAKA,QAAMa,mBAAmB,GAAG,MAAKd,uBAAL,EAA8BG,MAA9B,CAAqC,CAACY,KAAD,EAAkBV,GAAlB,KAA0B;AACzF,UAAM;AAAEC,MAAAA,OAAF;AAAWC,MAAAA;AAAX,QAAqBP,uBAAuB,CAACK,GAAD,CAAlD;AACA,WAAOC,OAAO,GAAG,CAAV,IAAeA,OAAO,KAAKC,KAA3B,GAAmC,CAAC,GAAGQ,KAAJ,EAAWV,GAAX,CAAnC,GAAqDU,KAA5D;AACD,GAH2B,EAGzB,EAHyB,CAA5B;;AAKA,MAAI,CAACD,mBAAmB,CAACE,MAAzB,EAAiC;AAC/B,WAAOlB,GAAP;AACD;;AAED,SAAOH,yBAAyB,CAACG,GAAD,EAAM;AACpCmB,IAAAA,OAAO,EAAEH;AAD2B,GAAN,CAAhC;AAGD,CApCD","sourcesContent":["import { deleteFragmentDefinitions, getFragmentDefinitions } from \"@graphql-box/helpers\";\nimport { DocumentNode } from \"graphql\";\nimport { keys } from \"lodash\";\nimport { CacheManagerContext, FieldPathChecklist } from \"../defs\";\nimport { FragmentSpreadCheckist } from \"./createFragmentSpreadChecklist\";\nimport filterField from \"./filterField\";\n\nexport default (\n ast: DocumentNode,\n fieldPathChecklist: FieldPathChecklist,\n fragmentSpreadChecklist: FragmentSpreadCheckist,\n context: CacheManagerContext,\n) => {\n const definitionsToFilter = keys(fragmentSpreadChecklist).reduce(\n (namesAndPaths: { name: string; path: string }[], key) => {\n const { deleted, total } = fragmentSpreadChecklist[key];\n\n return deleted === 0 && total === 1\n ? [...namesAndPaths, { name: key, path: fragmentSpreadChecklist[key].paths[0] as string }]\n : namesAndPaths;\n },\n [],\n );\n\n const fragmentDefinitions = getFragmentDefinitions(ast) ?? {};\n\n definitionsToFilter.forEach(({ name, path }) => {\n const fragmentDefinition = fragmentDefinitions[name];\n filterField(fragmentDefinition, fieldPathChecklist, fragmentSpreadChecklist, path, context);\n });\n\n const definitionsToDelete = keys(fragmentSpreadChecklist).reduce((names: string[], key) => {\n const { deleted, total } = fragmentSpreadChecklist[key];\n return deleted > 0 && deleted === total ? [...names, key] : names;\n }, []);\n\n if (!definitionsToDelete.length) {\n return ast;\n }\n\n return deleteFragmentDefinitions(ast, {\n include: definitionsToDelete,\n });\n};\n"],"file":"filterFragmentDefinitions.js"}
1
+ {"version":3,"sources":["../../../src/helpers/filterFragmentDefinitions.ts"],"names":["deleteFragmentDefinitions","filterField","ast","fieldPathChecklist","fragmentSpreadChecklist","context","definitionsToFilter","reduce","namesAndPaths","key","deleted","total","name","path","paths","fragmentDefinitions","forEach","fragmentDefinition","definitionsToDelete","names","length","include"],"mappings":";AAAA,SAASA,yBAAT,QAA0C,sBAA1C;AAKA,OAAOC,WAAP,MAAwB,eAAxB;AAEA,gBAAe,CACbC,GADa,EAEbC,kBAFa,EAGbC,uBAHa,EAIbC,OAJa,KAKV;AACH,QAAMC,mBAAmB,GAAG,MAAKF,uBAAL,EAA8BG,MAA9B,CAC1B,CAACC,aAAD,EAAkDC,GAAlD,KAA0D;AACxD,UAAM;AAAEC,MAAAA,OAAF;AAAWC,MAAAA;AAAX,QAAqBP,uBAAuB,CAACK,GAAD,CAAlD;AAEA,WAAOC,OAAO,KAAK,CAAZ,IAAiBC,KAAK,KAAK,CAA3B,GACH,CAAC,GAAGH,aAAJ,EAAmB;AAAEI,MAAAA,IAAI,EAAEH,GAAR;AAAaI,MAAAA,IAAI,EAAET,uBAAuB,CAACK,GAAD,CAAvB,CAA6BK,KAA7B,CAAmC,CAAnC;AAAnB,KAAnB,CADG,GAEHN,aAFJ;AAGD,GAPyB,EAQ1B,EAR0B,CAA5B;;AAWA,QAAM;AAAEO,IAAAA,mBAAmB,GAAG;AAAxB,MAA+BV,OAArC;AAEAC,EAAAA,mBAAmB,CAACU,OAApB,CAA4B,CAAC;AAAEJ,IAAAA,IAAF;AAAQC,IAAAA;AAAR,GAAD,KAAoB;AAC9C,UAAMI,kBAAkB,GAAGF,mBAAmB,CAACH,IAAD,CAA9C;AACAX,IAAAA,WAAW,CAACgB,kBAAD,EAAqBd,kBAArB,EAAyCC,uBAAzC,EAAkES,IAAlE,EAAwER,OAAxE,CAAX;AACD,GAHD;;AAKA,QAAMa,mBAAmB,GAAG,MAAKd,uBAAL,EAA8BG,MAA9B,CAAqC,CAACY,KAAD,EAAkBV,GAAlB,KAA0B;AACzF,UAAM;AAAEC,MAAAA,OAAF;AAAWC,MAAAA;AAAX,QAAqBP,uBAAuB,CAACK,GAAD,CAAlD;AACA,WAAOC,OAAO,GAAG,CAAV,IAAeA,OAAO,KAAKC,KAA3B,GAAmC,CAAC,GAAGQ,KAAJ,EAAWV,GAAX,CAAnC,GAAqDU,KAA5D;AACD,GAH2B,EAGzB,EAHyB,CAA5B;;AAKA,MAAI,CAACD,mBAAmB,CAACE,MAAzB,EAAiC;AAC/B,WAAOlB,GAAP;AACD;;AAED,SAAOF,yBAAyB,CAACE,GAAD,EAAM;AACpCmB,IAAAA,OAAO,EAAEH;AAD2B,GAAN,CAAhC;AAGD,CApCD","sourcesContent":["import { deleteFragmentDefinitions } from \"@graphql-box/helpers\";\nimport { DocumentNode } from \"graphql\";\nimport { keys } from \"lodash\";\nimport { CacheManagerContext, FieldPathChecklist } from \"../defs\";\nimport { FragmentSpreadCheckist } from \"./createFragmentSpreadChecklist\";\nimport filterField from \"./filterField\";\n\nexport default (\n ast: DocumentNode,\n fieldPathChecklist: FieldPathChecklist,\n fragmentSpreadChecklist: FragmentSpreadCheckist,\n context: CacheManagerContext,\n) => {\n const definitionsToFilter = keys(fragmentSpreadChecklist).reduce(\n (namesAndPaths: { name: string; path: string }[], key) => {\n const { deleted, total } = fragmentSpreadChecklist[key];\n\n return deleted === 0 && total === 1\n ? [...namesAndPaths, { name: key, path: fragmentSpreadChecklist[key].paths[0] as string }]\n : namesAndPaths;\n },\n [],\n );\n\n const { fragmentDefinitions = {} } = context;\n\n definitionsToFilter.forEach(({ name, path }) => {\n const fragmentDefinition = fragmentDefinitions[name];\n filterField(fragmentDefinition, fieldPathChecklist, fragmentSpreadChecklist, path, context);\n });\n\n const definitionsToDelete = keys(fragmentSpreadChecklist).reduce((names: string[], key) => {\n const { deleted, total } = fragmentSpreadChecklist[key];\n return deleted > 0 && deleted === total ? [...names, key] : names;\n }, []);\n\n if (!definitionsToDelete.length) {\n return ast;\n }\n\n return deleteFragmentDefinitions(ast, {\n include: definitionsToDelete,\n });\n};\n"],"file":"filterFragmentDefinitions.js"}
@@ -1,6 +1,5 @@
1
1
  import _keys from "lodash/keys";
2
- import { getName, resolveFragments } from "@graphql-box/helpers";
3
- import { buildFieldKeysAndPaths } from "./buildKeysAndPaths";
2
+ import { buildFieldKeysAndPaths, getName, resolveFragments } from "@graphql-box/helpers";
4
3
  export default ((fieldData, selectionNodes, ancestorKeysAndPaths, context) => {
5
4
  const fieldAndTypeName = resolveFragments(selectionNodes, context.fragmentDefinitions);
6
5
  return _keys(fieldData).reduce((acc, key) => {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/helpers/filterOutPropsWithArgsOrDirectives.ts"],"names":["getName","resolveFragments","buildFieldKeysAndPaths","fieldData","selectionNodes","ancestorKeysAndPaths","context","fieldAndTypeName","fragmentDefinitions","reduce","acc","key","match","find","fieldNode","requestFieldPath","fieldTypeInfo","fieldTypeMap","get","hasArguments","hasDirectives"],"mappings":";AACA,SAASA,OAAT,EAAkBC,gBAAlB,QAA0C,sBAA1C;AAIA,SAASC,sBAAT,QAAuC,qBAAvC;AAEA,gBAAe,CACbC,SADa,EAEbC,cAFa,EAGbC,oBAHa,EAIbC,OAJa,KAKV;AACH,QAAMC,gBAAgB,GAAGN,gBAAgB,CAACG,cAAD,EAAiBE,OAAO,CAACE,mBAAzB,CAAzC;AAEA,SAAO,MAAKL,SAAL,EAAgBM,MAAhB,CAAuB,CAACC,GAAD,EAAsBC,GAAtB,KAA8B;AAC1D,UAAMC,KAAK,GAAGL,gBAAgB,CAACM,IAAjB,CAAsB,CAAC;AAAEC,MAAAA;AAAF,KAAD,KAAoBd,OAAO,CAACc,SAAD,CAAR,KAAuDH,GAAhG,CAAd;;AAEA,QAAIC,KAAJ,EAAW;AACT,YAAM;AAAEG,QAAAA;AAAF,UAAuBb,sBAAsB,CAACU,KAAK,CAACE,SAAP,EAAkBT,oBAAlB,EAAwCC,OAAxC,CAAnD;AACA,YAAMU,aAAa,GAAGV,OAAO,CAACW,YAAR,CAAqBC,GAArB,CAAyBH,gBAAzB,CAAtB;;AAEA,UAAI,EAACC,aAAD,aAACA,aAAD,eAACA,aAAa,CAAEG,YAAhB,KAAgC,EAACH,aAAD,aAACA,aAAD,eAACA,aAAa,CAAEI,aAAhB,CAApC,EAAmE;AACjEV,QAAAA,GAAG,CAACC,GAAD,CAAH,GAAWR,SAAS,CAACQ,GAAD,CAApB;AACD;AACF;;AAED,WAAOD,GAAP;AACD,GAbM,EAaJ,EAbI,CAAP;AAcD,CAtBD","sourcesContent":["import { PlainObjectMap } from \"@graphql-box/core\";\nimport { getName, resolveFragments } from \"@graphql-box/helpers\";\nimport { FieldNode, SelectionNode } from \"graphql\";\nimport { keys } from \"lodash\";\nimport { CacheManagerContext, KeysAndPaths } from \"../defs\";\nimport { buildFieldKeysAndPaths } from \"./buildKeysAndPaths\";\n\nexport default (\n fieldData: PlainObjectMap,\n selectionNodes: readonly SelectionNode[],\n ancestorKeysAndPaths: KeysAndPaths,\n context: CacheManagerContext,\n) => {\n const fieldAndTypeName = resolveFragments(selectionNodes, context.fragmentDefinitions);\n\n return keys(fieldData).reduce((acc: PlainObjectMap, key) => {\n const match = fieldAndTypeName.find(({ fieldNode }) => (getName(fieldNode) as FieldNode[\"name\"][\"value\"]) === key);\n\n if (match) {\n const { requestFieldPath } = buildFieldKeysAndPaths(match.fieldNode, ancestorKeysAndPaths, context);\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath);\n\n if (!fieldTypeInfo?.hasArguments && !fieldTypeInfo?.hasDirectives) {\n acc[key] = fieldData[key];\n }\n }\n\n return acc;\n }, {});\n};\n"],"file":"filterOutPropsWithArgsOrDirectives.js"}
1
+ {"version":3,"sources":["../../../src/helpers/filterOutPropsWithArgsOrDirectives.ts"],"names":["buildFieldKeysAndPaths","getName","resolveFragments","fieldData","selectionNodes","ancestorKeysAndPaths","context","fieldAndTypeName","fragmentDefinitions","reduce","acc","key","match","find","fieldNode","requestFieldPath","fieldTypeInfo","fieldTypeMap","get","hasArguments","hasDirectives"],"mappings":";AACA,SAAuBA,sBAAvB,EAA+CC,OAA/C,EAAwDC,gBAAxD,QAAgF,sBAAhF;AAKA,gBAAe,CACbC,SADa,EAEbC,cAFa,EAGbC,oBAHa,EAIbC,OAJa,KAKV;AACH,QAAMC,gBAAgB,GAAGL,gBAAgB,CAACE,cAAD,EAAiBE,OAAO,CAACE,mBAAzB,CAAzC;AAEA,SAAO,MAAKL,SAAL,EAAgBM,MAAhB,CAAuB,CAACC,GAAD,EAAsBC,GAAtB,KAA8B;AAC1D,UAAMC,KAAK,GAAGL,gBAAgB,CAACM,IAAjB,CAAsB,CAAC;AAAEC,MAAAA;AAAF,KAAD,KAAoBb,OAAO,CAACa,SAAD,CAAR,KAAuDH,GAAhG,CAAd;;AAEA,QAAIC,KAAJ,EAAW;AACT,YAAM;AAAEG,QAAAA;AAAF,UAAuBf,sBAAsB,CAACY,KAAK,CAACE,SAAP,EAAkBT,oBAAlB,EAAwCC,OAAxC,CAAnD;AACA,YAAMU,aAAa,GAAGV,OAAO,CAACW,YAAR,CAAqBC,GAArB,CAAyBH,gBAAzB,CAAtB;;AAEA,UAAI,EAACC,aAAD,aAACA,aAAD,eAACA,aAAa,CAAEG,YAAhB,KAAgC,EAACH,aAAD,aAACA,aAAD,eAACA,aAAa,CAAEI,aAAhB,CAApC,EAAmE;AACjEV,QAAAA,GAAG,CAACC,GAAD,CAAH,GAAWR,SAAS,CAACQ,GAAD,CAApB;AACD;AACF;;AAED,WAAOD,GAAP;AACD,GAbM,EAaJ,EAbI,CAAP;AAcD,CAtBD","sourcesContent":["import { PlainObjectMap } from \"@graphql-box/core\";\nimport { KeysAndPaths, buildFieldKeysAndPaths, getName, resolveFragments } from \"@graphql-box/helpers\";\nimport { FieldNode, SelectionNode } from \"graphql\";\nimport { keys } from \"lodash\";\nimport { CacheManagerContext } from \"../defs\";\n\nexport default (\n fieldData: PlainObjectMap,\n selectionNodes: readonly SelectionNode[],\n ancestorKeysAndPaths: KeysAndPaths,\n context: CacheManagerContext,\n) => {\n const fieldAndTypeName = resolveFragments(selectionNodes, context.fragmentDefinitions);\n\n return keys(fieldData).reduce((acc: PlainObjectMap, key) => {\n const match = fieldAndTypeName.find(({ fieldNode }) => (getName(fieldNode) as FieldNode[\"name\"][\"value\"]) === key);\n\n if (match) {\n const { requestFieldPath } = buildFieldKeysAndPaths(match.fieldNode, ancestorKeysAndPaths, context);\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath);\n\n if (!fieldTypeInfo?.hasArguments && !fieldTypeInfo?.hasDirectives) {\n acc[key] = fieldData[key];\n }\n }\n\n return acc;\n }, {});\n};\n"],"file":"filterOutPropsWithArgsOrDirectives.js"}
@@ -1,5 +1,4 @@
1
- import { deleteChildFields, getChildFields, getOperationDefinitions } from "@graphql-box/helpers";
2
- import { buildFieldKeysAndPaths } from "./buildKeysAndPaths";
1
+ import { buildFieldKeysAndPaths, deleteChildFields, getChildFields, getOperationDefinitions } from "@graphql-box/helpers";
3
2
  import createFragmentSpreadChecklist from "./createFragmentSpreadChecklist";
4
3
  import filterField from "./filterField";
5
4
  import filterFragmentDefinitions from "./filterFragmentDefinitions";
@@ -21,7 +20,7 @@ export default ((requestData, {
21
20
  return ast;
22
21
  }
23
22
 
24
- const fragmentSpreadChecklist = createFragmentSpreadChecklist(requestData);
23
+ const fragmentSpreadChecklist = createFragmentSpreadChecklist(requestData, context);
25
24
 
26
25
  for (let i = fieldsAndTypeNames.length - 1; i >= 0; i -= 1) {
27
26
  const {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/helpers/filterQuery.ts"],"names":["deleteChildFields","getChildFields","getOperationDefinitions","buildFieldKeysAndPaths","createFragmentSpreadChecklist","filterField","filterFragmentDefinitions","requestData","fieldPathChecklist","context","ast","queryNode","operation","fragmentDefinitions","fieldsAndTypeNames","fragmentSpreadChecklist","i","length","fieldNode","requestFieldPath","queryFiltered"],"mappings":"AACA,SAASA,iBAAT,EAA4BC,cAA5B,EAA4CC,uBAA5C,QAA2E,sBAA3E;AAEA,SAASC,sBAAT,QAAuC,qBAAvC;AACA,OAAOC,6BAAP,MAA0C,iCAA1C;AACA,OAAOC,WAAP,MAAwB,eAAxB;AACA,OAAOC,yBAAP,MAAsC,6BAAtC;AAEA,gBAAe,CAACC,WAAD,EAA2B;AAAEC,EAAAA;AAAF,CAA3B,EAAuEC,OAAvE,KAAwG;AACrH,QAAM;AAAEC,IAAAA;AAAF,MAAUH,WAAhB;AACA,QAAMI,SAAS,GAAGT,uBAAuB,CAACQ,GAAD,EAAMD,OAAO,CAACG,SAAd,CAAvB,CAAgD,CAAhD,CAAlB;AACA,QAAM;AAAEC,IAAAA;AAAF,MAA0BJ,OAAhC;AACA,QAAMK,kBAAkB,GAAGb,cAAc,CAACU,SAAD,EAAY;AAAEE,IAAAA;AAAF,GAAZ,CAAzC;;AAEA,MAAI,CAACC,kBAAL,EAAyB;AACvB,WAAOJ,GAAP;AACD;;AAED,QAAMK,uBAAuB,GAAGX,6BAA6B,CAACG,WAAD,CAA7D;;AAEA,OAAK,IAAIS,CAAC,GAAGF,kBAAkB,CAACG,MAAnB,GAA4B,CAAzC,EAA4CD,CAAC,IAAI,CAAjD,EAAoDA,CAAC,IAAI,CAAzD,EAA4D;AAC1D,UAAM;AAAEE,MAAAA;AAAF,QAAgBJ,kBAAkB,CAACE,CAAD,CAAxC;AAEA,UAAM;AAAEG,MAAAA;AAAF,QAAuBhB,sBAAsB,CACjDe,SADiD,EAEjD;AACEC,MAAAA,gBAAgB,EAAEV,OAAO,CAACG;AAD5B,KAFiD,EAKjDH,OALiD,CAAnD;;AAQA,QAAIJ,WAAW,CAACa,SAAD,EAAYV,kBAAZ,EAAgCO,uBAAhC,EAAyDI,gBAAzD,EAA2EV,OAA3E,CAAf,EAAoG;AAClGT,MAAAA,iBAAiB,CAACW,SAAD,EAAYO,SAAZ,CAAjB;AACD;AACF;;AAEDT,EAAAA,OAAO,CAACW,aAAR,GAAwB,IAAxB;AACA,SAAOd,yBAAyB,CAACI,GAAD,EAAMF,kBAAN,EAA0BO,uBAA1B,EAAmDN,OAAnD,CAAhC;AACD,CA9BD","sourcesContent":["import { RequestData } from \"@graphql-box/core\";\nimport { deleteChildFields, getChildFields, getOperationDefinitions } from \"@graphql-box/helpers\";\nimport { CacheManagerContext, CachedResponseData } from \"../defs\";\nimport { buildFieldKeysAndPaths } from \"./buildKeysAndPaths\";\nimport createFragmentSpreadChecklist from \"./createFragmentSpreadChecklist\";\nimport filterField from \"./filterField\";\nimport filterFragmentDefinitions from \"./filterFragmentDefinitions\";\n\nexport default (requestData: RequestData, { fieldPathChecklist }: CachedResponseData, context: CacheManagerContext) => {\n const { ast } = requestData;\n const queryNode = getOperationDefinitions(ast, context.operation)[0];\n const { fragmentDefinitions } = context;\n const fieldsAndTypeNames = getChildFields(queryNode, { fragmentDefinitions });\n\n if (!fieldsAndTypeNames) {\n return ast;\n }\n\n const fragmentSpreadChecklist = createFragmentSpreadChecklist(requestData);\n\n for (let i = fieldsAndTypeNames.length - 1; i >= 0; i -= 1) {\n const { fieldNode } = fieldsAndTypeNames[i];\n\n const { requestFieldPath } = buildFieldKeysAndPaths(\n fieldNode,\n {\n requestFieldPath: context.operation,\n },\n context,\n );\n\n if (filterField(fieldNode, fieldPathChecklist, fragmentSpreadChecklist, requestFieldPath, context)) {\n deleteChildFields(queryNode, fieldNode);\n }\n }\n\n context.queryFiltered = true;\n return filterFragmentDefinitions(ast, fieldPathChecklist, fragmentSpreadChecklist, context);\n};\n"],"file":"filterQuery.js"}
1
+ {"version":3,"sources":["../../../src/helpers/filterQuery.ts"],"names":["buildFieldKeysAndPaths","deleteChildFields","getChildFields","getOperationDefinitions","createFragmentSpreadChecklist","filterField","filterFragmentDefinitions","requestData","fieldPathChecklist","context","ast","queryNode","operation","fragmentDefinitions","fieldsAndTypeNames","fragmentSpreadChecklist","i","length","fieldNode","requestFieldPath","queryFiltered"],"mappings":"AACA,SACEA,sBADF,EAEEC,iBAFF,EAGEC,cAHF,EAIEC,uBAJF,QAKO,sBALP;AAOA,OAAOC,6BAAP,MAA0C,iCAA1C;AACA,OAAOC,WAAP,MAAwB,eAAxB;AACA,OAAOC,yBAAP,MAAsC,6BAAtC;AAEA,gBAAe,CAACC,WAAD,EAA2B;AAAEC,EAAAA;AAAF,CAA3B,EAAuEC,OAAvE,KAAwG;AACrH,QAAM;AAAEC,IAAAA;AAAF,MAAUH,WAAhB;AACA,QAAMI,SAAS,GAAGR,uBAAuB,CAACO,GAAD,EAAMD,OAAO,CAACG,SAAd,CAAvB,CAAgD,CAAhD,CAAlB;AACA,QAAM;AAAEC,IAAAA;AAAF,MAA0BJ,OAAhC;AACA,QAAMK,kBAAkB,GAAGZ,cAAc,CAACS,SAAD,EAAY;AAAEE,IAAAA;AAAF,GAAZ,CAAzC;;AAEA,MAAI,CAACC,kBAAL,EAAyB;AACvB,WAAOJ,GAAP;AACD;;AAED,QAAMK,uBAAuB,GAAGX,6BAA6B,CAACG,WAAD,EAAcE,OAAd,CAA7D;;AAEA,OAAK,IAAIO,CAAC,GAAGF,kBAAkB,CAACG,MAAnB,GAA4B,CAAzC,EAA4CD,CAAC,IAAI,CAAjD,EAAoDA,CAAC,IAAI,CAAzD,EAA4D;AAC1D,UAAM;AAAEE,MAAAA;AAAF,QAAgBJ,kBAAkB,CAACE,CAAD,CAAxC;AAEA,UAAM;AAAEG,MAAAA;AAAF,QAAuBnB,sBAAsB,CACjDkB,SADiD,EAEjD;AACEC,MAAAA,gBAAgB,EAAEV,OAAO,CAACG;AAD5B,KAFiD,EAKjDH,OALiD,CAAnD;;AAQA,QAAIJ,WAAW,CAACa,SAAD,EAAYV,kBAAZ,EAAgCO,uBAAhC,EAAyDI,gBAAzD,EAA2EV,OAA3E,CAAf,EAAoG;AAClGR,MAAAA,iBAAiB,CAACU,SAAD,EAAYO,SAAZ,CAAjB;AACD;AACF;;AAEDT,EAAAA,OAAO,CAACW,aAAR,GAAwB,IAAxB;AACA,SAAOd,yBAAyB,CAACI,GAAD,EAAMF,kBAAN,EAA0BO,uBAA1B,EAAmDN,OAAnD,CAAhC;AACD,CA9BD","sourcesContent":["import { RequestData } from \"@graphql-box/core\";\nimport {\n buildFieldKeysAndPaths,\n deleteChildFields,\n getChildFields,\n getOperationDefinitions,\n} from \"@graphql-box/helpers\";\nimport { CacheManagerContext, CachedResponseData } from \"../defs\";\nimport createFragmentSpreadChecklist from \"./createFragmentSpreadChecklist\";\nimport filterField from \"./filterField\";\nimport filterFragmentDefinitions from \"./filterFragmentDefinitions\";\n\nexport default (requestData: RequestData, { fieldPathChecklist }: CachedResponseData, context: CacheManagerContext) => {\n const { ast } = requestData;\n const queryNode = getOperationDefinitions(ast, context.operation)[0];\n const { fragmentDefinitions } = context;\n const fieldsAndTypeNames = getChildFields(queryNode, { fragmentDefinitions });\n\n if (!fieldsAndTypeNames) {\n return ast;\n }\n\n const fragmentSpreadChecklist = createFragmentSpreadChecklist(requestData, context);\n\n for (let i = fieldsAndTypeNames.length - 1; i >= 0; i -= 1) {\n const { fieldNode } = fieldsAndTypeNames[i];\n\n const { requestFieldPath } = buildFieldKeysAndPaths(\n fieldNode,\n {\n requestFieldPath: context.operation,\n },\n context,\n );\n\n if (filterField(fieldNode, fieldPathChecklist, fragmentSpreadChecklist, requestFieldPath, context)) {\n deleteChildFields(queryNode, fieldNode);\n }\n }\n\n context.queryFiltered = true;\n return filterFragmentDefinitions(ast, fieldPathChecklist, fragmentSpreadChecklist, context);\n};\n"],"file":"filterQuery.js"}
@@ -14,12 +14,11 @@ var _dec, _dec2, _dec3, _class;
14
14
 
15
15
  import "core-js/modules/es.promise.js";
16
16
  import { DATA_ENTITIES, QUERY, QUERY_RESPONSES, REQUEST_FIELD_PATHS, TYPE_NAME_KEY } from "@graphql-box/core";
17
- import { FRAGMENT_SPREAD, dehydrateCacheMetadata, getChildFields, getFragmentDefinitions, getOperationDefinitions, hasChildFields, hashRequest, iterateChildFields, mergeObjects, rehydrateCacheMetadata } from "@graphql-box/helpers";
17
+ import { FRAGMENT_SPREAD, buildFieldKeysAndPaths, dehydrateCacheMetadata, getChildFields, getFragmentDefinitions, getOperationDefinitions, hasChildFields, hashRequest, iterateChildFields, mergeObjects, rehydrateCacheMetadata } from "@graphql-box/helpers";
18
18
  import Cacheability from "cacheability";
19
19
  import { print } from "graphql";
20
20
  import { CACHE_CONTROL, HEADER_NO_CACHE, METADATA, NO_CACHE } from "../consts";
21
21
  import { logCacheEntry, logCacheQuery, logPartialCompiled } from "../debug";
22
- import { buildFieldKeysAndPaths } from "../helpers/buildKeysAndPaths";
23
22
  import deriveOpCacheability from "../helpers/deriveOpCacheability";
24
23
  import filterOutPropsWithArgsOrDirectives from "../helpers/filterOutPropsWithArgsOrDirectives";
25
24
  import filterQuery from "../helpers/filterQuery";
@@ -285,7 +284,7 @@ export let CacheManager = (_dec = logCacheQuery(), _dec2 = logCacheEntry(), _dec
285
284
 
286
285
  async cacheQuery(requestData, updatedRequestData, rawResponseData, options, context) {
287
286
  const cacheManagerContext = { ...context,
288
- fragmentDefinitions: getFragmentDefinitions(updatedRequestData.ast),
287
+ fragmentDefinitions: getFragmentDefinitions((updatedRequestData !== null && updatedRequestData !== void 0 ? updatedRequestData : requestData).ast),
289
288
  typeIDKey: this._typeIDKey
290
289
  };
291
290
  return this._cacheResponse(requestData, updatedRequestData, rawResponseData, options, cacheManagerContext);
@@ -324,6 +323,10 @@ export let CacheManager = (_dec = logCacheQuery(), _dec2 = logCacheEntry(), _dec
324
323
  this._partialQueryResponses.delete(hash);
325
324
  }
326
325
 
326
+ async setQueryResponseCacheEntry(requestData, responseData, options, context) {
327
+ return this._setQueryResponseCacheEntry(requestData.hash, responseData, options, context);
328
+ }
329
+
327
330
  async _analyzeFieldNode(fieldNode, cachedAncestorFieldData, cachedResponseData, options, context) {
328
331
  if (hasChildFields(fieldNode, {
329
332
  fragmentDefinitions: context.fragmentDefinitions