@graphql-box/cache-manager 2.1.4 → 2.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 (109) 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 +129 -17
  4. package/lib/main/debug/log-cache-entry/index.js.map +1 -1
  5. package/lib/main/debug/log-partial-compiled/index.js.map +1 -1
  6. package/lib/main/helpers/buildKeysAndPaths.js +73 -0
  7. package/lib/main/helpers/buildKeysAndPaths.js.map +1 -0
  8. package/lib/main/helpers/checkFieldPathChecklist.js +40 -0
  9. package/lib/main/helpers/checkFieldPathChecklist.js.map +1 -0
  10. package/lib/main/helpers/createFragmentSpreadChecklist.js +28 -0
  11. package/lib/main/helpers/createFragmentSpreadChecklist.js.map +1 -0
  12. package/lib/main/helpers/filterField.js +97 -0
  13. package/lib/main/helpers/filterField.js.map +1 -0
  14. package/lib/main/helpers/filterFragmentDefinitions.js +50 -0
  15. package/lib/main/helpers/filterFragmentDefinitions.js.map +1 -0
  16. package/lib/main/helpers/filterFragmentSpreads.js +37 -0
  17. package/lib/main/helpers/filterFragmentSpreads.js.map +1 -0
  18. package/lib/main/helpers/filterIDsAndTypeNames.js +47 -0
  19. package/lib/main/helpers/filterIDsAndTypeNames.js.map +1 -0
  20. package/lib/main/helpers/filterInlineFragments.js +42 -0
  21. package/lib/main/helpers/filterInlineFragments.js.map +1 -0
  22. package/lib/main/helpers/filterOutPropsWithArgsOrDirectives.js +39 -0
  23. package/lib/main/helpers/filterOutPropsWithArgsOrDirectives.js.map +1 -0
  24. package/lib/main/helpers/filterQuery.js +59 -0
  25. package/lib/main/helpers/filterQuery.js.map +1 -0
  26. package/lib/main/helpers/normalizeResponseData.js +23 -0
  27. package/lib/main/helpers/normalizeResponseData.js.map +1 -0
  28. package/lib/main/helpers/validTypeIDValue.js +20 -0
  29. package/lib/main/helpers/validTypeIDValue.js.map +1 -0
  30. package/lib/main/main/index.js +468 -472
  31. package/lib/main/main/index.js.map +1 -1
  32. package/lib/module/debug/log-cache-entry/index.js.map +1 -1
  33. package/lib/module/debug/log-partial-compiled/index.js.map +1 -1
  34. package/lib/module/helpers/buildKeysAndPaths.js +54 -0
  35. package/lib/module/helpers/buildKeysAndPaths.js.map +1 -0
  36. package/lib/module/helpers/checkFieldPathChecklist.js +31 -0
  37. package/lib/module/helpers/checkFieldPathChecklist.js.map +1 -0
  38. package/lib/module/helpers/createFragmentSpreadChecklist.js +15 -0
  39. package/lib/module/helpers/createFragmentSpreadChecklist.js.map +1 -0
  40. package/lib/module/helpers/filterField.js +81 -0
  41. package/lib/module/helpers/filterField.js.map +1 -0
  42. package/lib/module/helpers/filterFragmentDefinitions.js +39 -0
  43. package/lib/module/helpers/filterFragmentDefinitions.js.map +1 -0
  44. package/lib/module/helpers/filterFragmentSpreads.js +23 -0
  45. package/lib/module/helpers/filterFragmentSpreads.js.map +1 -0
  46. package/lib/module/helpers/filterIDsAndTypeNames.js +36 -0
  47. package/lib/module/helpers/filterIDsAndTypeNames.js.map +1 -0
  48. package/lib/module/helpers/filterInlineFragments.js +32 -0
  49. package/lib/module/helpers/filterInlineFragments.js.map +1 -0
  50. package/lib/module/helpers/filterOutPropsWithArgsOrDirectives.js +25 -0
  51. package/lib/module/helpers/filterOutPropsWithArgsOrDirectives.js.map +1 -0
  52. package/lib/module/helpers/filterQuery.js +43 -0
  53. package/lib/module/helpers/filterQuery.js.map +1 -0
  54. package/lib/module/helpers/normalizeResponseData.js +11 -0
  55. package/lib/module/helpers/normalizeResponseData.js.map +1 -0
  56. package/lib/module/helpers/validTypeIDValue.js +8 -0
  57. package/lib/module/helpers/validTypeIDValue.js.map +1 -0
  58. package/lib/module/main/index.js +465 -470
  59. package/lib/module/main/index.js.map +1 -1
  60. package/lib/types/debug/log-cache-entry/index.d.ts.map +1 -1
  61. package/lib/types/debug/log-cache-query/index.d.ts.map +1 -1
  62. package/lib/types/debug/log-partial-compiled/index.d.ts.map +1 -1
  63. package/lib/types/defs/index.d.ts +19 -9
  64. package/lib/types/defs/index.d.ts.map +1 -1
  65. package/lib/types/helpers/buildKeysAndPaths.d.ts +10 -0
  66. package/lib/types/helpers/buildKeysAndPaths.d.ts.map +1 -0
  67. package/lib/types/helpers/checkFieldPathChecklist.d.ts +4 -0
  68. package/lib/types/helpers/checkFieldPathChecklist.d.ts.map +1 -0
  69. package/lib/types/helpers/createFragmentSpreadChecklist.d.ts +11 -0
  70. package/lib/types/helpers/createFragmentSpreadChecklist.d.ts.map +1 -0
  71. package/lib/types/helpers/filterField.d.ts +6 -0
  72. package/lib/types/helpers/filterField.d.ts.map +1 -0
  73. package/lib/types/helpers/filterFragmentDefinitions.d.ts +10 -0
  74. package/lib/types/helpers/filterFragmentDefinitions.d.ts.map +1 -0
  75. package/lib/types/helpers/filterFragmentSpreads.d.ts +6 -0
  76. package/lib/types/helpers/filterFragmentSpreads.d.ts.map +1 -0
  77. package/lib/types/helpers/filterIDsAndTypeNames.d.ts +5 -0
  78. package/lib/types/helpers/filterIDsAndTypeNames.d.ts.map +1 -0
  79. package/lib/types/helpers/filterInlineFragments.d.ts +5 -0
  80. package/lib/types/helpers/filterInlineFragments.d.ts.map +1 -0
  81. package/lib/types/helpers/filterOutPropsWithArgsOrDirectives.d.ts +6 -0
  82. package/lib/types/helpers/filterOutPropsWithArgsOrDirectives.d.ts.map +1 -0
  83. package/lib/types/helpers/filterQuery.d.ts +5 -0
  84. package/lib/types/helpers/filterQuery.d.ts.map +1 -0
  85. package/lib/types/helpers/normalizeResponseData.d.ts +10 -0
  86. package/lib/types/helpers/normalizeResponseData.d.ts.map +1 -0
  87. package/lib/types/helpers/validTypeIDValue.d.ts +3 -0
  88. package/lib/types/helpers/validTypeIDValue.d.ts.map +1 -0
  89. package/lib/types/main/index.d.ts +13 -20
  90. package/lib/types/main/index.d.ts.map +1 -1
  91. package/package.json +2 -2
  92. package/src/__snapshots__/index.test.ts.snap +17449 -7185
  93. package/src/debug/log-cache-entry/index.ts +1 -1
  94. package/src/debug/log-partial-compiled/index.ts +1 -1
  95. package/src/defs/index.ts +18 -10
  96. package/src/helpers/buildKeysAndPaths.ts +71 -0
  97. package/src/helpers/checkFieldPathChecklist.ts +21 -0
  98. package/src/helpers/createFragmentSpreadChecklist.ts +17 -0
  99. package/src/helpers/filterField.ts +73 -0
  100. package/src/helpers/filterFragmentDefinitions.ts +40 -0
  101. package/src/helpers/filterFragmentSpreads.ts +28 -0
  102. package/src/helpers/filterIDsAndTypeNames.ts +31 -0
  103. package/src/helpers/filterInlineFragments.ts +29 -0
  104. package/src/helpers/filterOutPropsWithArgsOrDirectives.ts +30 -0
  105. package/src/helpers/filterQuery.ts +38 -0
  106. package/src/helpers/normalizeResponseData.ts +9 -0
  107. package/src/helpers/validTypeIDValue.ts +11 -0
  108. package/src/index.test.ts +179 -3
  109. package/src/main/index.ts +506 -499
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/main/index.ts"],"names":["CacheManager","init","options","errors","cache","push","TypeError","typeCacheDirectives","message","length","Promise","reject","_analyzeLeafField","field","cachedAncestorFieldData","data","fieldPathChecklist","_options","_context","keysAndPaths","_getFieldKeysAndPaths","propNameOrIndex","requestFieldPath","dataEntityData","requestFieldPathData","typeName","cachedFieldData","_getFieldDataFromAncestor","typeNames","dataTypeName","__typename","fieldTypeName","_setFieldPathChecklist","_setCachedData","_buildKey","key","path","paths","join","_buildRequestFieldCacheKey","name","requestFieldCacheKey","args","directives","index","JSON","stringify","_checkFieldPathChecklist","fieldPathChecklistValues","hasData","typeUnused","undefined","some","every","_countFieldPathChecklist","fieldCount","missing","total","forEach","checklistValues","filter","ancestorFieldData","responseDataPath","updatedRequestFieldCacheKey","fieldAliasOrName","updatedRequestFieldPath","updatedResponseDataPath","hashedRequestFieldCacheKey","_getOperationCacheControl","cacheMetadata","operation","defaultCacheControl","HEADER_NO_CACHE","cacheability","get","printCacheControl","_getResponseCacheMetadata","partialQueryResponse","Map","_isDataEntity","fieldTypeInfo","isEntity","possibleTypes","type","_isRequestFieldPath","hasArguments","hasDirectives","_isValid","noCache","METADATA","CACHE_CONTROL","NO_CACHE","checkTTL","requestData","objectLikeData","_setCachedResponseData","_setCacheMetadata","set","operationCacheability","metadata","ttl","has","entry","constructor","cascadeCacheControl","fallbackOperationCacheability","typeIDKey","_cache","_cascadeCacheControl","_fallbackOperationCacheability","_typeCacheDirectives","_typeIDKey","analyzeQuery","context","ast","hash","cachedResponseData","_getCachedResponseData","updated","dataCaching","_setQueryResponseCacheEntry","awaitDataCaching","response","_setPartialQueryResponse","_filterQuery","request","checkCacheEntry","cacheType","_checkCacheEntry","checkQueryResponseCacheEntry","result","QUERY_RESPONSES","deletePartialQueryResponse","_partialQueryResponses","delete","resolveQuery","updatedRequestData","rawResponseData","_resolveRequest","queryFiltered","_getPartialQueryResponse","responseCacheMetadata","responseData","_getResponseData","all","resolveRequest","_analyzeField","_analyzeParentField","fieldTypeMap","ancestorDataEntityData","ancestorRequestFieldPathData","_setRequestFieldPathData","_setDataEntityData","_mergeObjects","TYPE_NAME_KEY","promises","childField","childTypeName","childIndex","_buildCacheMetadata","otherProps","_createCacheMetadata","queryNode","fieldsAndTypeNames","fieldNode","_setFieldCacheability","_hasCacheEntry","_getCacheEntry","error","_cacheMetadata","headers","fallback","_filterField","ancestorRequestFieldPath","i","childFieldName","_filterInlineFragments","_filterIDsAndTypeNames","fieldNames","map","inlineFragments","filtered","fragment","_isFieldEntity","fieldData","obj","src","_key","val","_parseFieldDataEntityAndRequestFieldPathCacheEntryData","ancestorKeysAndPaths","objectLikeFieldData","_typeName","_setFieldDataEntityAndRequestFieldPathCacheEntry","_setDataEntityAndRequestFieldPathCacheEntries","_setCacheEntry","value","cachemapOptions","operationNode","_setDataEntityCacheEntry","hasArgsOrDirectives","entityDataKey","DATA_ENTITIES","cacheHeaders","cacheControl","tag","__cacheKey","typeIDValue","requestFieldPathDataIDValue","validTypeIDValue","checkResults","validResults","validResult","sort","a","b","reduce","_setFieldTypeCacheDirective","_setRequestFieldPathCacheEntry","Cacheability","dehydratedCacheMetadata","QUERY","REQUEST_FIELD_PATHS","checkResult","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 dehydrateCacheMetadata,\n deleteChildFields,\n deleteInlineFragments,\n getAlias,\n getArguments,\n getChildFields,\n getDirectives,\n getInlineFragments,\n getName,\n getOperationDefinitions,\n hasChildFields,\n hashRequest,\n iterateChildFields,\n mergeObjects,\n rehydrateCacheMetadata,\n} from \"@graphql-box/helpers\";\nimport Cacheability from \"cacheability\";\nimport { FieldNode, print } from \"graphql\";\nimport { cloneDeep, get, isArray, isNumber, isObjectLike, isPlainObject, isUndefined, set, unset } from \"lodash\";\nimport { CACHE_CONTROL, HEADER_NO_CACHE, METADATA, NO_CACHE } from \"../consts\";\nimport { logCacheEntry, logCacheQuery, logPartialCompiled } from \"../debug\";\nimport {\n AnalyzeQueryResult,\n AncestorKeysAndPaths,\n CacheManagerDef,\n CacheManagerInit,\n CachedAncestorFieldData,\n CachedFieldData,\n CachedResponseData,\n CachemapOptions,\n CheckCacheEntryResult,\n CheckFieldPathChecklistResult,\n ClientOptions,\n ConstructorOptions,\n DataForCachingEntry,\n FieldCount,\n FieldPathChecklist,\n FieldPathChecklistValue,\n InitOptions,\n KeysAndPaths,\n KeysAndPathsOptions,\n MergedCachedFieldData,\n PartialQueryResponse,\n PartialQueryResponses,\n QueryResponseCacheEntry,\n ResponseDataForCaching,\n TypeNames,\n UserOptions,\n} from \"../defs\";\nimport deriveOpCacheability from \"../helpers/deriveOpCacheability\";\n\nexport class CacheManager implements CacheManagerDef {\n public static async init(options: InitOptions): Promise<CacheManager> {\n const errors: TypeError[] = [];\n\n if (!options.cache) {\n errors.push(new TypeError(\"@graphql-box/cache-manager expected options.cache.\"));\n }\n\n if (!!options.typeCacheDirectives && !isPlainObject(options.typeCacheDirectives)) {\n const message = \"@graphql-box/cache-manager expected options.typeCacheDirectives to be a plain object.\";\n errors.push(new TypeError(message));\n }\n\n if (errors.length) return Promise.reject(errors);\n\n return new CacheManager(options);\n }\n\n private static _analyzeLeafField(\n field: FieldNode,\n cachedAncestorFieldData: CachedAncestorFieldData,\n { data, fieldPathChecklist }: CachedResponseData,\n _options: RequestOptions,\n _context: RequestContext,\n ): void {\n const keysAndPaths = CacheManager._getFieldKeysAndPaths(field, cachedAncestorFieldData);\n const { propNameOrIndex, requestFieldPath } = keysAndPaths;\n const { dataEntityData, requestFieldPathData, typeName } = cachedAncestorFieldData;\n\n const cachedFieldData =\n CacheManager._getFieldDataFromAncestor(dataEntityData, propNameOrIndex) ||\n CacheManager._getFieldDataFromAncestor(requestFieldPathData, propNameOrIndex);\n\n const typeNames = {\n dataTypeName: dataEntityData?.__typename || requestFieldPathData?.__typename,\n fieldTypeName: typeName,\n };\n\n CacheManager._setFieldPathChecklist(fieldPathChecklist, { data: cachedFieldData }, requestFieldPath, typeNames);\n CacheManager._setCachedData(data, { data: cachedFieldData }, propNameOrIndex);\n }\n\n private static _buildKey(key: string | number, path: string): string {\n const paths: (string | number)[] = [];\n if (path.length) paths.push(path);\n paths.push(key);\n return paths.join(\".\");\n }\n\n private static _buildRequestFieldCacheKey(\n name: string,\n requestFieldCacheKey: string,\n args?: PlainObjectMap,\n directives?: PlainObjectMap,\n index?: number,\n ): string {\n let key = `${isNumber(index) ? index : name}`;\n if (args) key = `${key}(${JSON.stringify(args)})`;\n if (directives) key = `${key}(${JSON.stringify(directives)})`;\n return CacheManager._buildKey(key, requestFieldCacheKey);\n }\n\n private static _checkFieldPathChecklist(\n fieldPathChecklistValues: FieldPathChecklistValue[] | undefined,\n fieldTypeName: string | undefined,\n ): CheckFieldPathChecklistResult {\n if (!fieldPathChecklistValues || !fieldPathChecklistValues.length) {\n return { hasData: false, typeUnused: !!fieldTypeName };\n }\n\n if (fieldPathChecklistValues.length === 1) {\n const { hasData, typeName } = fieldPathChecklistValues[0];\n const typeUnused = !typeName ? undefined : typeName !== fieldTypeName;\n return { hasData, typeUnused };\n }\n\n return {\n hasData: fieldPathChecklistValues.some(({ hasData, typeName }) => typeName === fieldTypeName && hasData),\n typeUnused: !fieldPathChecklistValues.every(({ typeName }) => typeName === fieldTypeName),\n };\n }\n\n private static _countFieldPathChecklist(fieldPathChecklist: FieldPathChecklist): FieldCount {\n const fieldCount: FieldCount = { missing: 0, total: 0 };\n\n fieldPathChecklist.forEach(checklistValues => {\n fieldCount.total += checklistValues.length;\n const missing = checklistValues.filter(({ hasData }) => !hasData);\n fieldCount.missing += missing.length;\n });\n\n return fieldCount;\n }\n\n private static _getFieldDataFromAncestor(ancestorFieldData: any, propNameOrIndex: string | number): any {\n return isObjectLike(ancestorFieldData) ? ancestorFieldData[propNameOrIndex] : undefined;\n }\n\n private static _getFieldKeysAndPaths(field: FieldNode, options: KeysAndPathsOptions): KeysAndPaths {\n const { index, requestFieldCacheKey = \"\", requestFieldPath = \"\", responseDataPath = \"\" } = options;\n const name = getName(field) as string;\n\n const updatedRequestFieldCacheKey = CacheManager._buildRequestFieldCacheKey(\n name,\n requestFieldCacheKey,\n getArguments(field),\n getDirectives(field),\n index,\n );\n\n const fieldAliasOrName = getAlias(field) || name;\n\n const updatedRequestFieldPath = isNumber(index)\n ? requestFieldPath\n : CacheManager._buildKey(fieldAliasOrName, requestFieldPath);\n\n const propNameOrIndex = isNumber(index) ? index : fieldAliasOrName;\n const updatedResponseDataPath = CacheManager._buildKey(propNameOrIndex, responseDataPath);\n\n return {\n hashedRequestFieldCacheKey: hashRequest(updatedRequestFieldCacheKey),\n propNameOrIndex,\n requestFieldCacheKey: updatedRequestFieldCacheKey,\n requestFieldPath: updatedRequestFieldPath,\n responseDataPath: updatedResponseDataPath,\n };\n }\n\n private static _getOperationCacheControl(cacheMetadata: CacheMetadata | undefined, operation: string): string {\n const defaultCacheControl = HEADER_NO_CACHE;\n if (!cacheMetadata) return defaultCacheControl;\n\n const cacheability = cacheMetadata.get(operation);\n return cacheability ? cacheability.printCacheControl() : defaultCacheControl;\n }\n\n private static _getResponseCacheMetadata(\n cacheMetadata: CacheMetadata,\n partialQueryResponse?: PartialQueryResponse,\n ): CacheMetadata {\n if (!partialQueryResponse) return cacheMetadata;\n\n return new Map([...partialQueryResponse.cacheMetadata, ...cacheMetadata]);\n }\n\n private static _isDataEntity(fieldTypeInfo?: FieldTypeInfo): boolean {\n if (!fieldTypeInfo) return false;\n\n const { isEntity, possibleTypes } = fieldTypeInfo;\n return isEntity || possibleTypes.some(type => !!type.isEntity);\n }\n\n private static _isRequestFieldPath(fieldTypeInfo?: FieldTypeInfo): boolean {\n return (\n !!fieldTypeInfo &&\n (this._isDataEntity(fieldTypeInfo) || fieldTypeInfo.hasArguments || fieldTypeInfo.hasDirectives)\n );\n }\n\n private static _isValid(cacheability: Cacheability): boolean {\n const noCache = get(cacheability, [METADATA, CACHE_CONTROL, NO_CACHE], false);\n return !noCache && cacheability.checkTTL();\n }\n\n private static _setCachedData(\n requestData: PlainObjectMap,\n { data }: MergedCachedFieldData,\n propNameOrIndex: string | number,\n ): void {\n if (!isObjectLike(data) && !isUndefined(data)) {\n requestData[propNameOrIndex] = data as string | number | boolean | null;\n } else if (isObjectLike(data)) {\n const objectLikeData = data as PlainObjectMap | any[];\n requestData[propNameOrIndex] = isArray(objectLikeData) ? [] : {};\n }\n }\n\n private static _setCachedResponseData(\n cachedFieldData: MergedCachedFieldData,\n { cacheMetadata, data, fieldPathChecklist }: CachedResponseData,\n { propNameOrIndex, requestFieldPath }: KeysAndPaths,\n typeNames: TypeNames,\n _options: RequestOptions,\n { operation }: RequestContext,\n ) {\n CacheManager._setCacheMetadata(cacheMetadata, cachedFieldData.cacheability, requestFieldPath, operation);\n CacheManager._setFieldPathChecklist(fieldPathChecklist, cachedFieldData, requestFieldPath, typeNames);\n CacheManager._setCachedData(data, cachedFieldData, propNameOrIndex);\n }\n\n private static _setCacheMetadata(\n cacheMetadata: CacheMetadata,\n cacheability: Cacheability | undefined,\n requestFieldPath: string,\n operation: string,\n ): void {\n if (!cacheability) return;\n\n cacheMetadata.set(requestFieldPath, cacheability);\n const operationCacheability = cacheMetadata.get(operation);\n\n if (!operationCacheability || operationCacheability.metadata.ttl > cacheability.metadata.ttl) {\n cacheMetadata.set(operation, cacheability);\n }\n }\n\n private static _setFieldPathChecklist(\n fieldPathChecklist: FieldPathChecklist,\n { data }: MergedCachedFieldData,\n requestFieldPath: string,\n { dataTypeName, fieldTypeName }: TypeNames,\n ): void {\n if (isUndefined(fieldTypeName)) {\n if (fieldPathChecklist.has(requestFieldPath)) return;\n fieldPathChecklist.set(requestFieldPath, [{ hasData: !isUndefined(data) }]);\n return;\n }\n\n if (dataTypeName !== fieldTypeName) return;\n\n const entry = fieldPathChecklist.get(requestFieldPath);\n const checklistValues = entry ? (entry as FieldPathChecklistValue[]) : [];\n if (checklistValues.some(({ typeName }) => typeName === dataTypeName)) return;\n\n fieldPathChecklist.set(requestFieldPath, [\n ...checklistValues,\n { hasData: !isUndefined(data), typeName: dataTypeName as string },\n ]);\n }\n\n private _cache: Cachemap;\n private _cascadeCacheControl: boolean;\n private _fallbackOperationCacheability: string;\n private _partialQueryResponses: PartialQueryResponses = new Map();\n private _typeCacheDirectives: PlainObjectStringMap;\n private _typeIDKey: string;\n\n constructor(options: ConstructorOptions) {\n const { cache, cascadeCacheControl, fallbackOperationCacheability, typeCacheDirectives, typeIDKey } = options;\n this._cache = cache;\n this._cascadeCacheControl = cascadeCacheControl || false;\n this._fallbackOperationCacheability = fallbackOperationCacheability || NO_CACHE;\n this._typeCacheDirectives = typeCacheDirectives || {};\n this._typeIDKey = typeIDKey;\n }\n\n get cache(): Cachemap {\n return this._cache;\n }\n\n public async analyzeQuery(\n requestData: RequestData,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<AnalyzeQueryResult> {\n const { ast, hash } = requestData;\n\n if (!ast) {\n return Promise.reject(new TypeError(\"@graphql-box/cache-manager expected an AST.\"));\n }\n\n const cachedResponseData = await this._getCachedResponseData(requestData, options, context);\n\n const { cacheMetadata, data, fieldCount } = cachedResponseData;\n if (fieldCount.missing === fieldCount.total) return { updated: requestData };\n\n if (!fieldCount.missing) {\n const dataCaching = this._setQueryResponseCacheEntry(hash, { cacheMetadata, data }, options, context);\n if (options.awaitDataCaching) await dataCaching;\n\n return { response: { cacheMetadata, data } };\n }\n\n this._setPartialQueryResponse(hash, { cacheMetadata, data }, options, context);\n this._filterQuery(requestData, cachedResponseData, context);\n const request = print(ast);\n return { updated: { ast, hash: hashRequest(request), request } };\n }\n\n public async checkCacheEntry(\n cacheType: CacheTypes,\n hash: string,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<CheckCacheEntryResult | false> {\n return this._checkCacheEntry(cacheType, hash, options, context);\n }\n\n public async checkQueryResponseCacheEntry(\n hash: string,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<ResponseData | false> {\n const result = await this._checkCacheEntry(QUERY_RESPONSES, hash, options, context);\n\n if (!result) return false;\n\n const { cacheMetadata, data } = result.entry as QueryResponseCacheEntry;\n\n return {\n cacheMetadata: rehydrateCacheMetadata(cacheMetadata),\n data,\n };\n }\n\n public deletePartialQueryResponse(hash: string): void {\n this._partialQueryResponses.delete(hash);\n }\n\n public async resolveQuery(\n requestData: RequestData,\n updatedRequestData: RequestData,\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<ResponseData> {\n const dataCaching: Promise<void>[] = [];\n const { cacheMetadata, data } = await this._resolveRequest(updatedRequestData, rawResponseData, options, context);\n\n let partialQueryResponse: PartialQueryResponse | undefined;\n\n if (context.queryFiltered) {\n dataCaching.push(\n this._setQueryResponseCacheEntry(updatedRequestData.hash, { cacheMetadata, data }, options, context),\n );\n\n partialQueryResponse = this._getPartialQueryResponse(requestData.hash);\n }\n\n const responseCacheMetadata = CacheManager._getResponseCacheMetadata(cacheMetadata, partialQueryResponse);\n const responseData = this._getResponseData(data, partialQueryResponse);\n\n dataCaching.push(\n this._setQueryResponseCacheEntry(\n requestData.hash,\n { cacheMetadata: responseCacheMetadata, data: responseData },\n options,\n context,\n ),\n );\n\n if (options.awaitDataCaching) await Promise.all(dataCaching);\n\n return { cacheMetadata: responseCacheMetadata, data: responseData };\n }\n\n public async resolveRequest(\n requestData: RequestData,\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<ResponseData> {\n return this._resolveRequest(requestData, rawResponseData, options, context);\n }\n\n private async _analyzeField(\n field: FieldNode,\n cachedAncestorFieldData: CachedAncestorFieldData,\n cachedResponseData: CachedResponseData,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<void> {\n if (hasChildFields(field)) {\n await this._analyzeParentField(field, cachedAncestorFieldData, cachedResponseData, options, context);\n } else {\n await CacheManager._analyzeLeafField(field, cachedAncestorFieldData, cachedResponseData, options, context);\n }\n }\n\n private async _analyzeParentField(\n field: FieldNode,\n cachedAncestorFieldData: CachedAncestorFieldData,\n cachedResponseData: CachedResponseData,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<void> {\n const keysAndPaths = CacheManager._getFieldKeysAndPaths(field, cachedAncestorFieldData);\n const { hashedRequestFieldCacheKey, propNameOrIndex, requestFieldCacheKey, requestFieldPath } = keysAndPaths;\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath);\n\n const {\n dataEntityData: ancestorDataEntityData,\n requestFieldPathData: ancestorRequestFieldPathData,\n typeName,\n } = cachedAncestorFieldData;\n\n const cachedFieldData: CachedFieldData = {\n dataEntityData: CacheManager._getFieldDataFromAncestor(ancestorDataEntityData, propNameOrIndex),\n requestFieldPathData: CacheManager._getFieldDataFromAncestor(ancestorRequestFieldPathData, propNameOrIndex),\n };\n\n if (CacheManager._isRequestFieldPath(fieldTypeInfo)) {\n await this._setRequestFieldPathData(cachedFieldData, hashedRequestFieldCacheKey, options, context);\n }\n\n if (CacheManager._isDataEntity(fieldTypeInfo)) {\n await this._setDataEntityData(cachedFieldData, fieldTypeInfo as FieldTypeInfo, options, context);\n }\n\n const { cacheability, dataEntityData, requestFieldPathData } = cachedFieldData;\n\n const data =\n !isUndefined(requestFieldPathData) || !isUndefined(dataEntityData)\n ? this._mergeObjects(requestFieldPathData, dataEntityData)\n : undefined;\n\n CacheManager._setCachedResponseData(\n { cacheability, data },\n cachedResponseData,\n keysAndPaths,\n { dataTypeName: get(data, TYPE_NAME_KEY), fieldTypeName: typeName },\n options,\n context,\n );\n\n if (!isObjectLike(data)) return;\n\n const objectLikeData = data as PlainObjectMap | any[];\n const promises: Promise<void>[] = [];\n\n iterateChildFields(\n field,\n objectLikeData,\n (childField: FieldNode, childTypeName: string | undefined, childIndex?: number) => {\n promises.push(\n this._analyzeField(\n childField,\n { index: childIndex, requestFieldCacheKey, requestFieldPath, typeName: childTypeName, ...cachedFieldData },\n { ...cachedResponseData, data: cachedResponseData.data[propNameOrIndex] },\n options,\n context,\n ),\n );\n },\n );\n\n await Promise.all(promises);\n }\n\n private _buildCacheMetadata(\n { ast }: RequestData,\n { data, ...otherProps }: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: RequestContext,\n ): CacheMetadata {\n const cacheMetadata = this._createCacheMetadata({ data, ...otherProps }, context);\n const queryNode = getOperationDefinitions(ast, context.operation)[0];\n const fieldsAndTypeNames = getChildFields(queryNode);\n if (!fieldsAndTypeNames) return cacheMetadata;\n\n fieldsAndTypeNames.forEach(({ fieldNode }) =>\n this._setFieldCacheability(\n fieldNode,\n { requestFieldPath: context.operation },\n { cacheMetadata, data },\n options,\n context,\n ),\n );\n\n return cacheMetadata;\n }\n\n private async _checkCacheEntry(\n cacheType: CacheTypes,\n hash: string,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<CheckCacheEntryResult | false> {\n try {\n const cacheability = await this._hasCacheEntry(cacheType, hash);\n\n if (!cacheability || !CacheManager._isValid(cacheability)) return false;\n\n const entry = await this._getCacheEntry(cacheType, hash, options, context);\n\n if (!entry) return false;\n\n return { cacheability, entry };\n } catch (error) {\n return false;\n }\n }\n\n private _createCacheMetadata(\n { _cacheMetadata, headers }: RawResponseDataWithMaybeCacheMetadata,\n { operation }: RequestContext,\n ): CacheMetadata {\n const cacheMetadata = new Map();\n\n const cacheability = deriveOpCacheability({\n _cacheMetadata,\n fallback: this._fallbackOperationCacheability,\n headers,\n });\n\n cacheMetadata.set(operation, cacheability);\n\n if (_cacheMetadata) {\n rehydrateCacheMetadata(_cacheMetadata, cacheMetadata);\n }\n\n return cacheMetadata;\n }\n\n private _filterField(\n field: FieldNode,\n fieldPathChecklist: FieldPathChecklist,\n ancestorRequestFieldPath: string,\n context: RequestContext,\n ): boolean {\n const fieldsAndTypeNames = getChildFields(field);\n if (!fieldsAndTypeNames) return false;\n\n for (let i = fieldsAndTypeNames.length - 1; i >= 0; i -= 1) {\n const { fieldNode: childField, typeName: childTypeName } = fieldsAndTypeNames[i];\n const childFieldName = getName(childField);\n\n if (childFieldName === this._typeIDKey || childFieldName === TYPE_NAME_KEY) continue;\n\n const { requestFieldPath } = CacheManager._getFieldKeysAndPaths(childField, {\n requestFieldPath: ancestorRequestFieldPath,\n });\n\n const { hasData, typeUnused } = CacheManager._checkFieldPathChecklist(\n fieldPathChecklist.get(requestFieldPath),\n childTypeName,\n );\n\n if (hasData || typeUnused) {\n if (!hasChildFields(childField)) {\n deleteChildFields(field, childField);\n } else if (this._filterField(childField, fieldPathChecklist, requestFieldPath, context)) {\n deleteChildFields(field, childField);\n }\n }\n }\n\n this._filterInlineFragments(field);\n this._filterIDsAndTypeNames(field);\n return !hasChildFields(field);\n }\n\n private _filterIDsAndTypeNames(field: FieldNode): boolean {\n const fieldsAndTypeNames = getChildFields(field);\n if (!fieldsAndTypeNames || fieldsAndTypeNames.length > 3) return false;\n\n const fieldNames = fieldsAndTypeNames.map(({ fieldNode }) => getName(fieldNode) as string);\n\n if (fieldNames.length === 2 && fieldNames.every(name => name === this._typeIDKey || name === TYPE_NAME_KEY)) {\n deleteChildFields(\n field,\n fieldsAndTypeNames.map(({ fieldNode }) => fieldNode),\n );\n\n return true;\n }\n\n if ((fieldNames.length === 1 && fieldNames[0] === this._typeIDKey) || fieldNames[0] === TYPE_NAME_KEY) {\n const { fieldNode } = fieldsAndTypeNames[0];\n deleteChildFields(field, fieldNode);\n return true;\n }\n\n return false;\n }\n\n private _filterInlineFragments(field: FieldNode): boolean {\n const inlineFragments = getInlineFragments(field);\n let filtered = false;\n\n inlineFragments.forEach(fragment => {\n const fieldsAndTypeNames = getChildFields(fragment);\n\n if (!fieldsAndTypeNames || !fieldsAndTypeNames.length) {\n deleteInlineFragments(field, fragment);\n filtered = true;\n return;\n }\n\n if (fieldsAndTypeNames.length === 1) {\n const { fieldNode } = fieldsAndTypeNames[0];\n\n if (getName(fieldNode) === this._typeIDKey) {\n deleteInlineFragments(field, fragment);\n filtered = true;\n }\n }\n });\n\n return filtered;\n }\n\n private _filterQuery(\n { ast }: RequestData,\n { fieldPathChecklist }: CachedResponseData,\n context: RequestContext,\n ): void {\n const queryNode = getOperationDefinitions(ast, context.operation)[0];\n const fieldsAndTypeNames = getChildFields(queryNode);\n if (!fieldsAndTypeNames) return;\n\n for (let i = fieldsAndTypeNames.length - 1; i >= 0; i -= 1) {\n const { fieldNode } = fieldsAndTypeNames[i];\n\n const { requestFieldPath } = CacheManager._getFieldKeysAndPaths(fieldNode, {\n requestFieldPath: context.operation,\n });\n\n if (this._filterField(fieldNode, fieldPathChecklist, requestFieldPath, context)) {\n deleteChildFields(queryNode, fieldNode);\n }\n }\n\n context.queryFiltered = true;\n }\n\n private async _getCachedResponseData(\n { ast }: RequestData,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<CachedResponseData> {\n const cachedResponseData: CachedResponseData = {\n cacheMetadata: new Map(),\n data: {},\n fieldCount: { missing: 0, total: 0 },\n fieldPathChecklist: new Map(),\n };\n\n const queryNode = getOperationDefinitions(ast, context.operation)[0];\n const fieldsAndTypeNames = getChildFields(queryNode);\n if (!fieldsAndTypeNames) return cachedResponseData;\n\n await Promise.all(\n fieldsAndTypeNames.map(({ fieldNode }) =>\n this._analyzeField(fieldNode, { requestFieldPath: context.operation }, cachedResponseData, options, context),\n ),\n );\n\n cachedResponseData.fieldCount = CacheManager._countFieldPathChecklist(cachedResponseData.fieldPathChecklist);\n return cachedResponseData;\n }\n\n @logCacheQuery()\n private async _getCacheEntry(\n cacheType: CacheTypes,\n hash: string,\n _options: RequestOptions,\n _context: RequestContext,\n ): Promise<ResponseData> {\n try {\n return await this._cache.get(`${cacheType}::${hash}`);\n } catch (errors) {\n return Promise.reject(errors);\n }\n }\n\n private _getPartialQueryResponse(hash: string): PartialQueryResponse | undefined {\n const partialQueryResponse = this._partialQueryResponses.get(hash);\n this._partialQueryResponses.delete(hash);\n return partialQueryResponse;\n }\n\n private _getResponseData(responseData: PlainObjectMap, partialQueryResponse?: PartialQueryResponse): PlainObjectMap {\n if (!partialQueryResponse) return responseData;\n\n return this._mergeObjects(partialQueryResponse.data, responseData);\n }\n\n private async _hasCacheEntry(cacheType: CacheTypes, hash: string): Promise<Cacheability | false> {\n try {\n return await this._cache.has(`${cacheType}::${hash}`);\n } catch (error) {\n return false;\n }\n }\n\n private _isFieldEntity(fieldData: any, { isEntity, possibleTypes }: FieldTypeInfo): boolean {\n if (!get(fieldData, this._typeIDKey, null)) return false;\n if (isEntity) return true;\n if (!possibleTypes.length) return false;\n return possibleTypes.some(type => type.typeName === fieldData.__typename);\n }\n\n private _mergeObjects<T>(obj: T, src: T): T {\n return mergeObjects(obj, src, (_key: string, val: any): string | number | undefined => {\n return isPlainObject(val) && val[this._typeIDKey] ? val[this._typeIDKey] : undefined;\n });\n }\n\n private async _parseFieldDataEntityAndRequestFieldPathCacheEntryData(\n field: FieldNode,\n ancestorKeysAndPaths: AncestorKeysAndPaths,\n { cacheMetadata, dataEntityData, requestFieldPathData }: ResponseDataForCaching,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<void> {\n const keysAndPaths = CacheManager._getFieldKeysAndPaths(field, ancestorKeysAndPaths);\n const { requestFieldCacheKey, requestFieldPath, responseDataPath } = keysAndPaths;\n const fieldData = get(requestFieldPathData, responseDataPath, null);\n if (!isObjectLike(fieldData)) return;\n\n const objectLikeFieldData = fieldData as PlainObjectMap | any[];\n const promises: Promise<void>[] = [];\n\n iterateChildFields(\n field,\n objectLikeFieldData,\n (childField: FieldNode, _typeName: string | undefined, childIndex?: number) => {\n promises.push(\n this._parseFieldDataEntityAndRequestFieldPathCacheEntryData(\n childField,\n { index: childIndex, requestFieldCacheKey, requestFieldPath, responseDataPath },\n { cacheMetadata, dataEntityData, requestFieldPathData },\n options,\n context,\n ),\n );\n },\n );\n\n await Promise.all(promises);\n\n await this._setFieldDataEntityAndRequestFieldPathCacheEntry(\n field,\n keysAndPaths,\n { cacheMetadata, dataEntityData, requestFieldPathData },\n options,\n context,\n );\n }\n\n private async _resolveRequest(\n requestData: RequestData,\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<ResponseData> {\n const dataCaching: Promise<void>[] = [];\n const cacheMetadata = this._buildCacheMetadata(requestData, rawResponseData, options, context);\n const { data } = rawResponseData;\n\n dataCaching.push(\n this._setDataEntityAndRequestFieldPathCacheEntries(\n requestData,\n { cacheMetadata, dataEntityData: cloneDeep(data), requestFieldPathData: cloneDeep(data) },\n options,\n context,\n ),\n );\n\n if (options.awaitDataCaching) await Promise.all(dataCaching);\n\n return { cacheMetadata, data };\n }\n\n @logCacheEntry()\n private async _setCacheEntry(\n cacheType: CacheTypes,\n hash: string,\n value: any,\n cachemapOptions: CachemapOptions,\n _options: RequestOptions,\n _context: RequestContext,\n ): Promise<void> {\n try {\n await this._cache.set(`${cacheType}::${hash}`, cloneDeep(value), cachemapOptions);\n } catch (error) {\n // no catch\n }\n }\n\n private async _setDataEntityAndRequestFieldPathCacheEntries(\n requestData: RequestData,\n responseData: ResponseDataForCaching,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<void> {\n const operationNode = getOperationDefinitions(requestData.ast, context.operation)[0];\n const fieldsAndTypeNames = getChildFields(operationNode);\n if (!fieldsAndTypeNames) return;\n\n await Promise.all(\n fieldsAndTypeNames.map(({ fieldNode }) => {\n return this._parseFieldDataEntityAndRequestFieldPathCacheEntryData(\n fieldNode,\n { requestFieldPath: context.operation },\n responseData,\n options,\n context,\n );\n }),\n );\n }\n\n private async _setDataEntityCacheEntry(\n { responseDataPath }: KeysAndPaths,\n { cacheability, data, fieldTypeInfo }: DataForCachingEntry,\n options: RequestOptions,\n context: RequestContext,\n ) {\n const hasArgsOrDirectives = fieldTypeInfo.hasArguments || fieldTypeInfo.hasDirectives;\n let fieldData = get(data, responseDataPath, null);\n const isEntity = this._isFieldEntity(fieldData, fieldTypeInfo);\n\n if (!isEntity && hasArgsOrDirectives) {\n unset(data, responseDataPath);\n }\n\n if (isEntity) {\n const fieldTypeName = fieldTypeInfo.isEntity ? fieldTypeInfo.typeName : fieldData.__typename;\n const entityDataKey = `${fieldTypeName}::${fieldData[this._typeIDKey]}`;\n const result = await this._checkCacheEntry(DATA_ENTITIES, entityDataKey, options, context);\n\n if (result) {\n fieldData = this._mergeObjects(result.entry, fieldData);\n }\n\n await this._setCacheEntry(\n DATA_ENTITIES,\n entityDataKey,\n fieldData,\n { cacheHeaders: { cacheControl: cacheability.printCacheControl() }, tag: options.tag },\n options,\n context,\n );\n\n set(data, responseDataPath, { __cacheKey: `${DATA_ENTITIES}::${entityDataKey}` });\n }\n }\n\n private async _setDataEntityData(\n cachedFieldData: CachedFieldData,\n { possibleTypes, typeIDValue, typeName }: FieldTypeInfo,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<void> {\n const requestFieldPathDataIDValue = isPlainObject(cachedFieldData.requestFieldPathData)\n ? cachedFieldData.requestFieldPathData[this._typeIDKey]\n : undefined;\n\n const validTypeIDValue = typeIDValue || requestFieldPathDataIDValue;\n if (!validTypeIDValue) return;\n\n const typeNames = [...possibleTypes.map(type => type.typeName), typeName];\n\n const checkResults = await Promise.all(\n typeNames.map(name => this._checkCacheEntry(DATA_ENTITIES, `${name}::${validTypeIDValue}`, options, context)),\n );\n\n const validResults = checkResults.filter(result => !!result) as CheckCacheEntryResult[];\n let validResult: CheckCacheEntryResult | undefined;\n\n if (validResults.length === 1) {\n validResult = validResults[0];\n } else if (validResults.length > 1) {\n validResults.sort(({ cacheability: a }, { cacheability: b }) => a.metadata.ttl - b.metadata.ttl);\n\n validResult = {\n cacheability: validResults[0].cacheability,\n entry: validResults.reduce((obj, { entry }) => this._mergeObjects(obj, entry), {}),\n };\n }\n\n if (validResult) {\n const { cacheability, entry } = validResult;\n if (cacheability && !cachedFieldData.cacheability) cachedFieldData.cacheability = cacheability;\n if (entry) cachedFieldData.dataEntityData = entry;\n }\n }\n\n private _setFieldCacheability(\n field: FieldNode,\n ancestorKeysAndPaths: AncestorKeysAndPaths,\n { cacheMetadata, data }: ResponseData,\n options: RequestOptions,\n context: RequestContext,\n ): void {\n const { requestFieldPath: ancestorRequestFieldPath } = ancestorKeysAndPaths;\n const keysAndPaths = CacheManager._getFieldKeysAndPaths(field, ancestorKeysAndPaths);\n const { requestFieldPath, responseDataPath } = keysAndPaths;\n const fieldData = get(data, responseDataPath, null);\n if (!isObjectLike(fieldData)) return;\n\n const objectLikeFieldData = fieldData as PlainObjectMap | any[];\n this._setFieldTypeCacheDirective(cacheMetadata, { ancestorRequestFieldPath, requestFieldPath }, context);\n\n iterateChildFields(\n field,\n objectLikeFieldData,\n (childField: FieldNode, _typeName: string | undefined, childIndex?: number) => {\n this._setFieldCacheability(\n childField,\n { index: childIndex, requestFieldPath, responseDataPath },\n { cacheMetadata, data },\n options,\n context,\n );\n },\n );\n }\n\n private async _setFieldDataEntityAndRequestFieldPathCacheEntry(\n field: FieldNode,\n keysAndPaths: KeysAndPaths,\n { cacheMetadata, dataEntityData, requestFieldPathData }: ResponseDataForCaching,\n options: RequestOptions,\n context: RequestContext,\n ) {\n const { requestFieldPath } = keysAndPaths;\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath);\n const cacheability = cacheMetadata.get(requestFieldPath);\n if (!fieldTypeInfo || !cacheability) return;\n\n const promises: Promise<void>[] = [];\n\n promises.push(\n this._setRequestFieldPathCacheEntry(\n field,\n keysAndPaths,\n { cacheability, data: requestFieldPathData, fieldTypeInfo },\n options,\n context,\n ),\n );\n\n promises.push(\n this._setDataEntityCacheEntry(\n keysAndPaths,\n { cacheability, data: dataEntityData, fieldTypeInfo },\n options,\n context,\n ),\n );\n\n await Promise.all(promises);\n }\n\n private _setFieldTypeCacheDirective(\n cacheMetadata: CacheMetadata,\n { ancestorRequestFieldPath, requestFieldPath }: { ancestorRequestFieldPath?: string; requestFieldPath: string },\n { fieldTypeMap, operation }: RequestContext,\n ): void {\n if (cacheMetadata.has(requestFieldPath)) return;\n\n const fieldTypeInfo = fieldTypeMap.get(requestFieldPath);\n\n if (fieldTypeInfo && this._typeCacheDirectives[fieldTypeInfo.typeName]) {\n const cacheability = new Cacheability({ cacheControl: this._typeCacheDirectives[fieldTypeInfo.typeName] });\n CacheManager._setCacheMetadata(cacheMetadata, cacheability, requestFieldPath, operation);\n } else if (this._cascadeCacheControl && ancestorRequestFieldPath) {\n CacheManager._setCacheMetadata(\n cacheMetadata,\n cacheMetadata.get(ancestorRequestFieldPath),\n requestFieldPath,\n operation,\n );\n }\n }\n\n @logPartialCompiled()\n private async _setPartialQueryResponse(\n hash: string,\n partialQueryResponse: PartialQueryResponse,\n _options: RequestOptions,\n _context: RequestContext,\n ): Promise<void> {\n this._partialQueryResponses.set(hash, partialQueryResponse);\n }\n\n private async _setQueryResponseCacheEntry(\n hash: string,\n { cacheMetadata, data }: ResponseData,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<void> {\n const dehydratedCacheMetadata = dehydrateCacheMetadata(cacheMetadata);\n const cacheControl = CacheManager._getOperationCacheControl(cacheMetadata, context.operation);\n\n await this._setCacheEntry(\n QUERY_RESPONSES,\n hash,\n { cacheMetadata: dehydratedCacheMetadata, data },\n { cacheHeaders: { cacheControl }, tag: options.tag },\n options,\n context,\n );\n }\n\n private async _setRequestFieldPathCacheEntry(\n field: FieldNode,\n { hashedRequestFieldCacheKey, responseDataPath }: KeysAndPaths,\n { cacheability, data, fieldTypeInfo }: DataForCachingEntry,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<void> {\n const hasArgsOrDirectives = fieldTypeInfo.hasArguments || fieldTypeInfo.hasDirectives;\n let fieldData = get(data, responseDataPath, null);\n const isEntity = this._isFieldEntity(fieldData, fieldTypeInfo);\n\n if (context.operation === QUERY && (isEntity || hasArgsOrDirectives)) {\n const result = await this._checkCacheEntry(REQUEST_FIELD_PATHS, hashedRequestFieldCacheKey, options, context);\n\n if (result) {\n fieldData = this._mergeObjects(result.entry, fieldData);\n }\n\n await this._setCacheEntry(\n REQUEST_FIELD_PATHS,\n hashedRequestFieldCacheKey,\n fieldData,\n { cacheHeaders: { cacheControl: cacheability.printCacheControl() }, tag: options.tag },\n options,\n context,\n );\n\n if (hasChildFields(field)) {\n if (isEntity) {\n set(data, responseDataPath, { __cacheKey: `${REQUEST_FIELD_PATHS}::${hashedRequestFieldCacheKey}` });\n } else {\n unset(data, responseDataPath);\n }\n }\n }\n }\n\n private async _setRequestFieldPathData(\n cachedFieldData: CachedFieldData,\n hash: string,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<void> {\n const checkResult = await this._checkCacheEntry(REQUEST_FIELD_PATHS, hash, options, context);\n\n if (checkResult) {\n const { cacheability, entry } = checkResult;\n if (cacheability) cachedFieldData.cacheability = cacheability;\n if (entry) cachedFieldData.requestFieldPathData = entry;\n }\n }\n}\n\nexport default function init(userOptions: UserOptions): CacheManagerInit {\n if (!isPlainObject(userOptions)) {\n throw new TypeError(\"@graphql-box/cache-manager expected userOptions to be a plain object.\");\n }\n\n return (clientOptions: ClientOptions) => CacheManager.init({ ...clientOptions, ...userOptions });\n}\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../../src/main/index.ts"],"names":["CacheManager","init","options","errors","cache","push","TypeError","typeCacheDirectives","message","length","Promise","reject","_countFieldPathChecklist","fieldPathChecklist","fieldCount","missing","total","forEach","checklistValues","filter","hasData","_getFieldDataFromAncestor","ancestorFieldData","propNameOrIndex","undefined","_getOperationCacheControl","cacheMetadata","operation","defaultCacheControl","HEADER_NO_CACHE","cacheability","get","printCacheControl","_getResponseCacheMetadata","partialQueryResponse","Map","_isNodeEntity","fieldTypeInfo","isEntity","possibleTypes","some","type","_isNodeRequestFieldPath","hasArguments","hasDirectives","_isValid","noCache","METADATA","CACHE_CONTROL","NO_CACHE","checkTTL","_setCachedData","requestData","data","objectLikeData","_setCachedResponseData","cachedFieldData","requestFieldPath","typeNamesAndKind","_options","_setCacheMetadata","_setFieldPathChecklist","set","operationCacheability","metadata","ttl","dataTypeName","fieldTypeName","fragmentKind","fragmentName","FRAGMENT_SPREAD","has","entry","typeName","constructor","cascadeCacheControl","fallbackOperationCacheability","typeIDKey","_cache","_cascadeCacheControl","_fallbackOperationCacheability","_typeCacheDirectives","_typeIDKey","analyzeQuery","context","ast","hash","cacheManagerContext","fragmentDefinitions","cachedResponseData","_retrieveCachedResponseData","updated","dataCaching","_setQueryResponseCacheEntry","awaitDataCaching","response","_setPartialQueryResponse","filteredAST","rest","request","checkCacheEntry","cacheType","_checkCacheEntry","checkQueryResponseCacheEntry","result","QUERY_RESPONSES","deletePartialQueryResponse","_partialQueryResponses","delete","resolveQuery","updatedRequestData","rawResponseData","hasNext","_resolveRequest","queryFiltered","_getPartialQueryResponse","responseCacheMetadata","responseData","_getResponseData","all","resolveRequest","_analyzeFieldNode","fieldNode","cachedAncestorFieldData","_analyzeParentFieldNode","_analyzeLeafFieldNode","keysAndPaths","hashedRequestFieldCacheKey","fieldTypeMap","entityData","requestFieldPathData","__typename","_retrieveCachedRequestFieldPathData","requestFieldCacheKey","_retrieveCachedParentNodeData","TYPE_NAME_KEY","promises","childField","childTypeName","childFragmentKind","childFragmentName","childIndex","index","_buildCacheMetadata","otherProps","_createCacheMetadata","queryNode","fieldsAndTypeNames","_setFieldCacheability","_hasCacheEntry","_getCacheEntry","error","_cacheMetadata","headers","fallback","_context","_mergeObjects","_isFieldEntity","fieldData","obj","src","_key","val","_parseEntityAndRequestFieldPathCacheEntryData","field","ancestorKeysAndPaths","responseDataPath","_typeName","_fragmentKind","_fragmentName","_setEntityAndRequestFieldPathCacheEntry","normalizedResponseData","path","_setEntityAndRequestFieldPathCacheEntries","_retrieveCachedEntityData","validTypeIDValue","typeNames","map","checkResults","name","DATA_ENTITIES","validResults","validResult","sort","a","b","reduce","ancestorEntityData","ancestorRequestFieldPathData","entryCacheability","REQUEST_FIELD_PATHS","_setCacheEntry","value","cachemapOptions","operationNode","_setRequestFieldPathCacheEntry","_setEntityCacheEntry","entityDataKey","cacheHeaders","cacheControl","tag","__cacheKey","ancestorRequestFieldPath","_setFieldTypeCacheDirective","Cacheability","dehydratedCacheMetadata","hasArgsOrDirectives","QUERY","selectionSet","selections","userOptions","clientOptions"],"mappings":"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","sourcesContent":["import Cachemap from \"@cachemap/core\";\nimport {\n CacheMetadata,\n CacheTypes,\n DATA_ENTITIES,\n FieldTypeInfo,\n PlainObjectMap,\n PlainObjectStringMap,\n QUERY,\n QUERY_RESPONSES,\n REQUEST_FIELD_PATHS,\n RawResponseDataWithMaybeCacheMetadata,\n RequestContext,\n RequestData,\n RequestOptions,\n ResponseData,\n TYPE_NAME_KEY,\n} from \"@graphql-box/core\";\nimport {\n FRAGMENT_SPREAD,\n dehydrateCacheMetadata,\n getChildFields,\n getFragmentDefinitions,\n getOperationDefinitions,\n hasChildFields,\n hashRequest,\n iterateChildFields,\n mergeObjects,\n rehydrateCacheMetadata,\n} from \"@graphql-box/helpers\";\nimport Cacheability from \"cacheability\";\nimport { FieldNode, print } from \"graphql\";\nimport { assign, cloneDeep, get, isArray, isObjectLike, isPlainObject, isUndefined, set, unset } from \"lodash\";\nimport { CACHE_CONTROL, HEADER_NO_CACHE, METADATA, NO_CACHE } from \"../consts\";\nimport { logCacheEntry, logCacheQuery, logPartialCompiled } from \"../debug\";\nimport {\n AnalyzeQueryResult,\n AncestorKeysAndPaths,\n CacheManagerContext,\n CacheManagerDef,\n CacheManagerInit,\n CachedAncestorFieldData,\n CachedResponseData,\n CachemapOptions,\n CheckCacheEntryResult,\n ClientOptions,\n ConstructorOptions,\n DataForCachingEntry,\n FieldCount,\n FieldPathChecklist,\n FieldPathChecklistValue,\n InitOptions,\n KeysAndPaths,\n MergedCachedFieldData,\n PartialQueryResponse,\n PartialQueryResponses,\n QueryResponseCacheEntry,\n ResponseDataForCaching,\n TypeNamesAndKind,\n UserOptions,\n} from \"../defs\";\nimport { buildFieldKeysAndPaths } from \"../helpers/buildKeysAndPaths\";\nimport deriveOpCacheability from \"../helpers/deriveOpCacheability\";\nimport filterOutPropsWithArgsOrDirectives from \"../helpers/filterOutPropsWithArgsOrDirectives\";\nimport filterQuery from \"../helpers/filterQuery\";\nimport normalizeResponseData from \"../helpers/normalizeResponseData\";\nimport { getValidTypeIDValue } from \"../helpers/validTypeIDValue\";\n\nexport class CacheManager implements CacheManagerDef {\n public static async init(options: InitOptions): Promise<CacheManager> {\n const errors: TypeError[] = [];\n\n if (!options.cache) {\n errors.push(new TypeError(\"@graphql-box/cache-manager expected options.cache.\"));\n }\n\n if (!!options.typeCacheDirectives && !isPlainObject(options.typeCacheDirectives)) {\n const message = \"@graphql-box/cache-manager expected options.typeCacheDirectives to be a plain object.\";\n errors.push(new TypeError(message));\n }\n\n if (errors.length) {\n return Promise.reject(errors);\n }\n\n return new CacheManager(options);\n }\n\n private static _countFieldPathChecklist(fieldPathChecklist: FieldPathChecklist): FieldCount {\n const fieldCount: FieldCount = { missing: 0, total: 0 };\n\n fieldPathChecklist.forEach(checklistValues => {\n fieldCount.total += checklistValues.length;\n const missing = checklistValues.filter(({ hasData }) => !hasData);\n fieldCount.missing += missing.length;\n });\n\n return fieldCount;\n }\n\n private static _getFieldDataFromAncestor(ancestorFieldData: any, propNameOrIndex: string | number): any {\n return isObjectLike(ancestorFieldData) ? cloneDeep(ancestorFieldData[propNameOrIndex]) : undefined;\n }\n\n private static _getOperationCacheControl(cacheMetadata: CacheMetadata | undefined, operation: string): string {\n const defaultCacheControl = HEADER_NO_CACHE;\n\n if (!cacheMetadata) {\n return defaultCacheControl;\n }\n\n const cacheability = cacheMetadata.get(operation);\n return cacheability ? cacheability.printCacheControl() : defaultCacheControl;\n }\n\n private static _getResponseCacheMetadata(\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 _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 _setCachedData(\n requestData: PlainObjectMap,\n { data }: MergedCachedFieldData,\n propNameOrIndex: string | number,\n ): void {\n if (!isObjectLike(data) && !isUndefined(data)) {\n requestData[propNameOrIndex] = data as string | number | boolean | null;\n } else if (isObjectLike(data)) {\n const objectLikeData = data as PlainObjectMap | any[];\n requestData[propNameOrIndex] = isArray(objectLikeData) ? [] : {};\n }\n }\n\n private static _setCachedResponseData(\n cachedFieldData: MergedCachedFieldData,\n { cacheMetadata, data, fieldPathChecklist }: CachedResponseData,\n { propNameOrIndex, requestFieldPath }: KeysAndPaths,\n typeNamesAndKind: TypeNamesAndKind,\n _options: RequestOptions,\n { operation }: CacheManagerContext,\n ) {\n CacheManager._setCacheMetadata(cacheMetadata, cachedFieldData.cacheability, requestFieldPath, operation);\n CacheManager._setFieldPathChecklist(fieldPathChecklist, cachedFieldData, requestFieldPath, typeNamesAndKind);\n CacheManager._setCachedData(data, cachedFieldData, propNameOrIndex);\n }\n\n private static _setCacheMetadata(\n cacheMetadata: CacheMetadata,\n cacheability: Cacheability | undefined,\n requestFieldPath: string,\n operation: string,\n ): void {\n if (!cacheability) {\n return;\n }\n\n cacheMetadata.set(requestFieldPath, cacheability);\n const operationCacheability = cacheMetadata.get(operation);\n\n if (!operationCacheability || operationCacheability.metadata.ttl > cacheability.metadata.ttl) {\n cacheMetadata.set(operation, cacheability);\n }\n }\n\n private static _setFieldPathChecklist(\n fieldPathChecklist: FieldPathChecklist,\n { data }: MergedCachedFieldData,\n requestFieldPath: string,\n { dataTypeName, fieldTypeName, fragmentKind, fragmentName }: TypeNamesAndKind,\n ): void {\n if (isUndefined(fieldTypeName) || fragmentKind === FRAGMENT_SPREAD) {\n if (fieldPathChecklist.has(requestFieldPath)) {\n return;\n }\n\n fieldPathChecklist.set(requestFieldPath, [{ fragmentKind, fragmentName, hasData: !isUndefined(data) }]);\n return;\n }\n\n if (dataTypeName !== fieldTypeName) {\n return;\n }\n\n const entry = fieldPathChecklist.get(requestFieldPath);\n const checklistValues = entry ? (entry as FieldPathChecklistValue[]) : [];\n\n if (checklistValues.some(({ typeName }) => typeName === dataTypeName)) {\n return;\n }\n\n fieldPathChecklist.set(requestFieldPath, [\n ...checklistValues,\n { fragmentKind, fragmentName, hasData: !isUndefined(data), typeName: dataTypeName as string },\n ]);\n }\n\n private _cache: Cachemap;\n private _cascadeCacheControl: boolean;\n private _fallbackOperationCacheability: string;\n private _partialQueryResponses: PartialQueryResponses = new Map();\n private _typeCacheDirectives: PlainObjectStringMap;\n private _typeIDKey: string;\n\n constructor(options: ConstructorOptions) {\n const { cache, cascadeCacheControl, fallbackOperationCacheability, typeCacheDirectives, typeIDKey } = options;\n this._cache = cache;\n this._cascadeCacheControl = cascadeCacheControl || false;\n this._fallbackOperationCacheability = fallbackOperationCacheability || NO_CACHE;\n this._typeCacheDirectives = typeCacheDirectives || {};\n this._typeIDKey = typeIDKey;\n }\n\n get cache(): Cachemap {\n return this._cache;\n }\n\n public async analyzeQuery(\n requestData: RequestData,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<AnalyzeQueryResult> {\n const { ast, hash } = requestData;\n\n if (!ast) {\n return Promise.reject(new TypeError(\"@graphql-box/cache-manager expected an AST.\"));\n }\n\n const cacheManagerContext: CacheManagerContext = {\n ...context,\n fragmentDefinitions: getFragmentDefinitions(ast),\n typeIDKey: this._typeIDKey,\n };\n\n const cachedResponseData = await this._retrieveCachedResponseData(requestData, options, cacheManagerContext);\n const { cacheMetadata, data, fieldCount } = cachedResponseData;\n\n if (fieldCount.missing === fieldCount.total) {\n return { updated: requestData };\n }\n\n if (!fieldCount.missing) {\n const dataCaching = this._setQueryResponseCacheEntry(hash, { cacheMetadata, data }, options, cacheManagerContext);\n\n if (options.awaitDataCaching) {\n await dataCaching;\n }\n\n return { response: { cacheMetadata, data } };\n }\n\n this._setPartialQueryResponse(hash, { cacheMetadata, data }, options, cacheManagerContext);\n const filteredAST = filterQuery(requestData, cachedResponseData, cacheManagerContext);\n const { fragmentDefinitions, typeIDKey, ...rest } = cacheManagerContext;\n assign(context, rest);\n const request = print(filteredAST);\n return { updated: { ast: filteredAST, hash: hashRequest(request), request } };\n }\n\n public async checkCacheEntry(\n cacheType: CacheTypes,\n hash: string,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<CheckCacheEntryResult | false> {\n return this._checkCacheEntry(cacheType, hash, options, context);\n }\n\n public async checkQueryResponseCacheEntry(\n hash: string,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<ResponseData | false> {\n const result = await this._checkCacheEntry(QUERY_RESPONSES, hash, options, context);\n\n if (!result) {\n return false;\n }\n\n const { cacheMetadata, data } = result.entry as QueryResponseCacheEntry;\n\n return {\n cacheMetadata: rehydrateCacheMetadata(cacheMetadata),\n data,\n };\n }\n\n public deletePartialQueryResponse(hash: string): void {\n this._partialQueryResponses.delete(hash);\n }\n\n public async resolveQuery(\n requestData: RequestData,\n updatedRequestData: RequestData,\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<ResponseData> {\n const cacheManagerContext: CacheManagerContext = {\n ...context,\n fragmentDefinitions: getFragmentDefinitions(updatedRequestData.ast),\n typeIDKey: this._typeIDKey,\n };\n\n const dataCaching: Promise<void>[] = [];\n\n const { cacheMetadata, data, hasNext } = await this._resolveRequest(\n updatedRequestData,\n rawResponseData,\n options,\n cacheManagerContext,\n );\n\n let partialQueryResponse: PartialQueryResponse | undefined;\n\n if (cacheManagerContext.queryFiltered) {\n dataCaching.push(\n this._setQueryResponseCacheEntry(\n updatedRequestData.hash,\n { cacheMetadata, data },\n options,\n cacheManagerContext,\n ),\n );\n\n partialQueryResponse = this._getPartialQueryResponse(requestData.hash);\n }\n\n const responseCacheMetadata = CacheManager._getResponseCacheMetadata(cacheMetadata, partialQueryResponse);\n const responseData = this._getResponseData(data, partialQueryResponse);\n\n dataCaching.push(\n this._setQueryResponseCacheEntry(\n requestData.hash,\n { cacheMetadata: responseCacheMetadata, data: responseData },\n options,\n cacheManagerContext,\n ),\n );\n\n if (options.awaitDataCaching) {\n await Promise.all(dataCaching);\n }\n\n return { cacheMetadata: responseCacheMetadata, data: responseData, hasNext };\n }\n\n public async resolveRequest(\n requestData: RequestData,\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<ResponseData> {\n const cacheManagerContext: CacheManagerContext = {\n ...context,\n fragmentDefinitions: getFragmentDefinitions(requestData.ast),\n typeIDKey: this._typeIDKey,\n };\n\n return this._resolveRequest(requestData, rawResponseData, options, cacheManagerContext);\n }\n\n private async _analyzeFieldNode(\n fieldNode: FieldNode,\n cachedAncestorFieldData: CachedAncestorFieldData,\n cachedResponseData: CachedResponseData,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n if (hasChildFields(fieldNode)) {\n await this._analyzeParentFieldNode(fieldNode, cachedAncestorFieldData, cachedResponseData, options, context);\n } else {\n await this._analyzeLeafFieldNode(fieldNode, cachedAncestorFieldData, cachedResponseData, options, context);\n }\n }\n\n private async _analyzeLeafFieldNode(\n fieldNode: FieldNode,\n cachedAncestorFieldData: CachedAncestorFieldData,\n cachedResponseData: CachedResponseData,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n const keysAndPaths = buildFieldKeysAndPaths(fieldNode, cachedAncestorFieldData, context);\n const { hashedRequestFieldCacheKey, propNameOrIndex, requestFieldPath } = keysAndPaths;\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath);\n const { entityData, fragmentKind, fragmentName, requestFieldPathData, typeName } = cachedAncestorFieldData;\n\n const typeNamesAndKind = {\n dataTypeName: entityData?.__typename || requestFieldPathData?.__typename,\n fieldTypeName: typeName,\n fragmentKind,\n fragmentName,\n };\n\n if (CacheManager._isNodeRequestFieldPath(fieldTypeInfo)) {\n const { cacheability, entry } = await this._retrieveCachedRequestFieldPathData(\n hashedRequestFieldCacheKey,\n options,\n context,\n );\n\n CacheManager._setCachedResponseData(\n { cacheability, data: entry },\n cachedResponseData,\n keysAndPaths,\n typeNamesAndKind,\n options,\n context,\n );\n } else {\n const cachedFieldData =\n CacheManager._getFieldDataFromAncestor(entityData, propNameOrIndex) ||\n CacheManager._getFieldDataFromAncestor(requestFieldPathData, propNameOrIndex);\n\n CacheManager._setFieldPathChecklist(\n cachedResponseData.fieldPathChecklist,\n { data: cachedFieldData },\n requestFieldPath,\n typeNamesAndKind,\n );\n\n CacheManager._setCachedData(cachedResponseData.data, { data: cachedFieldData }, propNameOrIndex);\n }\n }\n\n private async _analyzeParentFieldNode(\n fieldNode: FieldNode,\n cachedAncestorFieldData: CachedAncestorFieldData,\n cachedResponseData: CachedResponseData,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n const keysAndPaths = buildFieldKeysAndPaths(fieldNode, cachedAncestorFieldData, context);\n const { propNameOrIndex, requestFieldCacheKey, requestFieldPath } = keysAndPaths;\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath) as FieldTypeInfo;\n\n const { cacheability, data, entityData, requestFieldPathData } = await this._retrieveCachedParentNodeData(\n cachedAncestorFieldData,\n keysAndPaths,\n fieldTypeInfo,\n options,\n context,\n );\n\n const { fragmentKind, fragmentName, typeName } = cachedAncestorFieldData;\n\n CacheManager._setCachedResponseData(\n { cacheability, data },\n cachedResponseData,\n keysAndPaths,\n { dataTypeName: get(data, TYPE_NAME_KEY), fieldTypeName: typeName, fragmentKind, fragmentName },\n options,\n context,\n );\n\n if (!isObjectLike(data)) {\n return;\n }\n\n const objectLikeData = data as PlainObjectMap | any[];\n const promises: Promise<void>[] = [];\n\n iterateChildFields(\n fieldNode,\n objectLikeData,\n context.fragmentDefinitions,\n (\n childField: FieldNode,\n childTypeName: string | undefined,\n childFragmentKind: string | undefined,\n childFragmentName: string | undefined,\n childIndex?: number,\n ) => {\n promises.push(\n this._analyzeFieldNode(\n childField,\n {\n cacheability,\n entityData,\n fragmentKind: childFragmentKind,\n fragmentName: childFragmentName,\n index: childIndex,\n requestFieldCacheKey,\n requestFieldPath,\n requestFieldPathData,\n typeName: childTypeName,\n },\n { ...cachedResponseData, data: cachedResponseData.data[propNameOrIndex] },\n options,\n context,\n ),\n );\n },\n );\n\n await Promise.all(promises);\n }\n\n private _buildCacheMetadata(\n { ast }: RequestData,\n { data, ...otherProps }: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: CacheManagerContext,\n ): CacheMetadata {\n const cacheMetadata = this._createCacheMetadata({ data, ...otherProps }, context);\n const queryNode = getOperationDefinitions(ast, context.operation)[0];\n const fieldsAndTypeNames = getChildFields(queryNode);\n\n if (!fieldsAndTypeNames) {\n return cacheMetadata;\n }\n\n fieldsAndTypeNames.forEach(({ fieldNode }) =>\n this._setFieldCacheability(\n fieldNode,\n { requestFieldPath: context.operation },\n { cacheMetadata, data },\n options,\n context,\n ),\n );\n\n return cacheMetadata;\n }\n\n private async _checkCacheEntry(\n cacheType: CacheTypes,\n hash: string,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<CheckCacheEntryResult | false> {\n try {\n const cacheability = await this._hasCacheEntry(cacheType, hash);\n\n if (!cacheability || !CacheManager._isValid(cacheability)) {\n return false;\n }\n\n const entry = await this._getCacheEntry(cacheType, hash, options, context);\n\n if (isUndefined(entry)) {\n return false;\n }\n\n return { cacheability, entry };\n } catch (error) {\n return false;\n }\n }\n\n private _createCacheMetadata(\n { _cacheMetadata, headers }: RawResponseDataWithMaybeCacheMetadata,\n { operation }: CacheManagerContext,\n ): CacheMetadata {\n const cacheMetadata = new Map();\n\n const cacheability = deriveOpCacheability({\n _cacheMetadata,\n fallback: this._fallbackOperationCacheability,\n headers,\n });\n\n cacheMetadata.set(operation, cacheability);\n\n if (_cacheMetadata) {\n rehydrateCacheMetadata(_cacheMetadata, cacheMetadata);\n }\n\n return cacheMetadata;\n }\n\n @logCacheQuery()\n private async _getCacheEntry(\n cacheType: CacheTypes,\n hash: string,\n _options: RequestOptions,\n _context: CacheManagerContext,\n ): Promise<any> {\n try {\n return await this._cache.get(`${cacheType}::${hash}`);\n } catch (errors) {\n return Promise.reject(errors);\n }\n }\n\n private _getPartialQueryResponse(hash: string): PartialQueryResponse | undefined {\n const partialQueryResponse = this._partialQueryResponses.get(hash);\n this._partialQueryResponses.delete(hash);\n return partialQueryResponse;\n }\n\n private _getResponseData(responseData: PlainObjectMap, partialQueryResponse?: PartialQueryResponse): PlainObjectMap {\n if (!partialQueryResponse) {\n return responseData;\n }\n\n return this._mergeObjects(partialQueryResponse.data, responseData);\n }\n\n private async _hasCacheEntry(cacheType: CacheTypes, hash: string): Promise<Cacheability | false> {\n try {\n return await this._cache.has(`${cacheType}::${hash}`);\n } catch (error) {\n return false;\n }\n }\n\n private _isFieldEntity(fieldData: any, { isEntity, possibleTypes }: FieldTypeInfo): boolean {\n if (!get(fieldData, this._typeIDKey, null)) {\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 async _parseEntityAndRequestFieldPathCacheEntryData(\n field: FieldNode,\n ancestorKeysAndPaths: AncestorKeysAndPaths,\n { cacheMetadata, entityData, requestFieldPathData }: ResponseDataForCaching,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n const keysAndPaths = buildFieldKeysAndPaths(field, ancestorKeysAndPaths, context);\n const { requestFieldCacheKey, requestFieldPath, responseDataPath } = keysAndPaths;\n const fieldData = get(requestFieldPathData, responseDataPath);\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath);\n\n if (!isObjectLike(fieldData) && !fieldTypeInfo?.hasDirectives) {\n return;\n }\n\n if (isObjectLike(fieldData)) {\n const promises: Promise<void>[] = [];\n\n iterateChildFields(\n field,\n fieldData as PlainObjectMap | any[],\n context.fragmentDefinitions,\n (\n childField: FieldNode,\n _typeName: string | undefined,\n _fragmentKind: string | undefined,\n _fragmentName: string | undefined,\n childIndex?: number,\n ) => {\n promises.push(\n this._parseEntityAndRequestFieldPathCacheEntryData(\n childField,\n { index: childIndex, requestFieldCacheKey, requestFieldPath, responseDataPath },\n { cacheMetadata, entityData, requestFieldPathData },\n options,\n context,\n ),\n );\n },\n );\n\n await Promise.all(promises);\n }\n\n await this._setEntityAndRequestFieldPathCacheEntry(\n field,\n keysAndPaths,\n { cacheMetadata, entityData, requestFieldPathData },\n options,\n context,\n );\n }\n\n private async _resolveRequest(\n requestData: RequestData,\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<ResponseData> {\n const normalizedResponseData = rawResponseData.path ? normalizeResponseData(rawResponseData) : rawResponseData;\n const dataCaching: Promise<void>[] = [];\n const cacheMetadata = this._buildCacheMetadata(requestData, normalizedResponseData, options, context);\n const { data, hasNext } = normalizedResponseData;\n\n dataCaching.push(\n this._setEntityAndRequestFieldPathCacheEntries(\n requestData,\n { cacheMetadata, entityData: cloneDeep(data), requestFieldPathData: cloneDeep(data) },\n options,\n context,\n ),\n );\n\n if (options.awaitDataCaching) {\n await Promise.all(dataCaching);\n }\n\n return { cacheMetadata, data, hasNext };\n }\n\n private async _retrieveCachedEntityData(\n validTypeIDValue: string | number,\n { possibleTypes, typeName }: FieldTypeInfo,\n options: RequestOptions,\n context: CacheManagerContext,\n ) {\n const typeNames = [...possibleTypes.map(type => type.typeName), typeName];\n\n const checkResults = await Promise.all(\n typeNames.map(name => this._checkCacheEntry(DATA_ENTITIES, `${name}::${validTypeIDValue}`, options, context)),\n );\n\n const validResults = checkResults.filter(result => !!result) as CheckCacheEntryResult[];\n let validResult: CheckCacheEntryResult | undefined;\n\n if (validResults.length === 1) {\n validResult = validResults[0];\n } else if (validResults.length > 1) {\n validResults.sort(({ cacheability: a }, { cacheability: b }) => a.metadata.ttl - b.metadata.ttl);\n\n validResult = {\n cacheability: validResults[0].cacheability,\n entry: validResults.reduce((obj, { entry }) => this._mergeObjects(obj, entry), {}),\n };\n }\n\n return (validResult || {}) as Partial<CheckCacheEntryResult>;\n }\n\n private async _retrieveCachedParentNodeData(\n { entityData: ancestorEntityData, requestFieldPathData: ancestorRequestFieldPathData }: CachedAncestorFieldData,\n { hashedRequestFieldCacheKey, propNameOrIndex }: KeysAndPaths,\n fieldTypeInfo: FieldTypeInfo,\n options: RequestOptions,\n context: CacheManagerContext,\n ) {\n let entityData = CacheManager._getFieldDataFromAncestor(ancestorEntityData, propNameOrIndex);\n let requestFieldPathData = CacheManager._getFieldDataFromAncestor(ancestorRequestFieldPathData, propNameOrIndex);\n let cacheability: Cacheability | undefined;\n\n if (CacheManager._isNodeRequestFieldPath(fieldTypeInfo)) {\n const { cacheability: entryCacheability, entry } = await this._retrieveCachedRequestFieldPathData(\n hashedRequestFieldCacheKey,\n options,\n context,\n );\n\n if (entry) {\n requestFieldPathData = this._mergeObjects(requestFieldPathData, entry);\n }\n\n if (entryCacheability) {\n cacheability = entryCacheability;\n }\n }\n\n const validTypeIDValue = getValidTypeIDValue(requestFieldPathData, fieldTypeInfo, this._typeIDKey);\n\n if (CacheManager._isNodeEntity(fieldTypeInfo) && validTypeIDValue) {\n const { cacheability: entryCacheability, entry } = await this._retrieveCachedEntityData(\n validTypeIDValue,\n fieldTypeInfo,\n options,\n context,\n );\n\n if (entry) {\n entityData = this._mergeObjects(entityData, entry);\n }\n\n if (entryCacheability && (!cacheability || entryCacheability.metadata.ttl > cacheability?.metadata.ttl)) {\n cacheability = entryCacheability;\n }\n }\n\n const data =\n !isUndefined(requestFieldPathData) || !isUndefined(entityData)\n ? this._mergeObjects(requestFieldPathData, entityData)\n : entityData ?? requestFieldPathData;\n\n return {\n cacheability,\n data,\n entityData,\n requestFieldPathData,\n };\n }\n\n private async _retrieveCachedRequestFieldPathData(\n hash: string,\n options: RequestOptions,\n context: CacheManagerContext,\n ) {\n return (this._checkCacheEntry(REQUEST_FIELD_PATHS, hash, options, context) || {}) as Partial<CheckCacheEntryResult>;\n }\n\n private async _retrieveCachedResponseData(\n { ast }: RequestData,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<CachedResponseData> {\n const cachedResponseData: CachedResponseData = {\n cacheMetadata: new Map(),\n data: {},\n fieldCount: { missing: 0, total: 0 },\n fieldPathChecklist: new Map(),\n };\n\n const queryNode = getOperationDefinitions(ast, context.operation)[0];\n const fieldsAndTypeNames = getChildFields(queryNode);\n\n if (!fieldsAndTypeNames) {\n return cachedResponseData;\n }\n\n await Promise.all(\n fieldsAndTypeNames.map(({ fieldNode }) =>\n this._analyzeFieldNode(\n fieldNode,\n { requestFieldPath: context.operation },\n cachedResponseData,\n options,\n context,\n ),\n ),\n );\n\n cachedResponseData.fieldCount = CacheManager._countFieldPathChecklist(cachedResponseData.fieldPathChecklist);\n return cachedResponseData;\n }\n\n @logCacheEntry()\n private async _setCacheEntry(\n cacheType: CacheTypes,\n hash: string,\n value: any,\n cachemapOptions: CachemapOptions,\n _options: RequestOptions,\n _context: CacheManagerContext,\n ): Promise<void> {\n try {\n await this._cache.set(`${cacheType}::${hash}`, cloneDeep(value), cachemapOptions);\n } catch (error) {\n // no catch\n }\n }\n\n private async _setEntityAndRequestFieldPathCacheEntries(\n requestData: RequestData,\n responseData: ResponseDataForCaching,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n const operationNode = getOperationDefinitions(requestData.ast, context.operation)[0];\n const fieldsAndTypeNames = getChildFields(operationNode);\n\n if (!fieldsAndTypeNames) {\n return;\n }\n\n await Promise.all(\n fieldsAndTypeNames.map(({ fieldNode }) => {\n return this._parseEntityAndRequestFieldPathCacheEntryData(\n fieldNode,\n { requestFieldPath: context.operation },\n responseData,\n options,\n context,\n );\n }),\n );\n }\n\n private async _setEntityAndRequestFieldPathCacheEntry(\n field: FieldNode,\n keysAndPaths: KeysAndPaths,\n { cacheMetadata, entityData, requestFieldPathData }: ResponseDataForCaching,\n options: RequestOptions,\n context: CacheManagerContext,\n ) {\n const { requestFieldPath, responseDataPath } = keysAndPaths;\n const fieldData = get(entityData, responseDataPath);\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath);\n const cacheability = cacheMetadata.get(requestFieldPath);\n\n if (isUndefined(fieldData) || !fieldTypeInfo || !cacheability) {\n return;\n }\n\n const promises: Promise<void>[] = [];\n\n promises.push(\n this._setRequestFieldPathCacheEntry(\n field,\n keysAndPaths,\n { cacheability, data: requestFieldPathData, fieldTypeInfo },\n options,\n context,\n ),\n );\n\n const isEntity = this._isFieldEntity(fieldData, fieldTypeInfo);\n\n if (!isEntity && fieldTypeInfo.hasArguments) {\n unset(entityData, responseDataPath);\n }\n\n if (isEntity) {\n promises.push(\n this._setEntityCacheEntry(keysAndPaths, { cacheability, data: entityData, fieldTypeInfo }, options, context),\n );\n }\n\n await Promise.all(promises);\n }\n\n private async _setEntityCacheEntry(\n { responseDataPath }: KeysAndPaths,\n { cacheability, data, fieldTypeInfo }: DataForCachingEntry,\n options: RequestOptions,\n context: CacheManagerContext,\n ) {\n let fieldData = get(data, responseDataPath);\n const fieldTypeName = fieldTypeInfo.isEntity ? fieldTypeInfo.typeName : fieldData.__typename;\n const entityDataKey = `${fieldTypeName}::${fieldData[this._typeIDKey]}`;\n const result = await this._checkCacheEntry(DATA_ENTITIES, entityDataKey, options, context);\n\n if (result) {\n fieldData = this._mergeObjects(result.entry, fieldData);\n }\n\n await this._setCacheEntry(\n DATA_ENTITIES,\n entityDataKey,\n fieldData,\n { cacheHeaders: { cacheControl: cacheability.printCacheControl() }, tag: options.tag },\n options,\n context,\n );\n\n set(data, responseDataPath, { __cacheKey: `${DATA_ENTITIES}::${entityDataKey}` });\n }\n\n private _setFieldCacheability(\n field: FieldNode,\n ancestorKeysAndPaths: AncestorKeysAndPaths,\n { cacheMetadata, data }: ResponseData,\n options: RequestOptions,\n context: CacheManagerContext,\n ): void {\n const { requestFieldPath: ancestorRequestFieldPath } = ancestorKeysAndPaths;\n const keysAndPaths = buildFieldKeysAndPaths(field, ancestorKeysAndPaths, context);\n const { requestFieldPath, responseDataPath } = keysAndPaths;\n const fieldData = get(data, responseDataPath);\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath);\n\n if (!isObjectLike(fieldData) && !fieldTypeInfo?.hasDirectives) {\n return;\n }\n\n this._setFieldTypeCacheDirective(cacheMetadata, { ancestorRequestFieldPath, requestFieldPath }, context);\n\n if (isObjectLike(fieldData)) {\n iterateChildFields(\n field,\n fieldData as PlainObjectMap | any[],\n context.fragmentDefinitions,\n (\n childField: FieldNode,\n _typeName: string | undefined,\n _fragmentKind: string | undefined,\n _fragmentName: string | undefined,\n childIndex?: number,\n ) => {\n this._setFieldCacheability(\n childField,\n { index: childIndex, requestFieldPath, responseDataPath },\n { cacheMetadata, data },\n options,\n context,\n );\n },\n );\n }\n }\n\n private _setFieldTypeCacheDirective(\n cacheMetadata: CacheMetadata,\n { ancestorRequestFieldPath, requestFieldPath }: { ancestorRequestFieldPath?: string; requestFieldPath: string },\n { fieldTypeMap, operation }: CacheManagerContext,\n ): void {\n if (cacheMetadata.has(requestFieldPath)) {\n return;\n }\n\n const fieldTypeInfo = fieldTypeMap.get(requestFieldPath);\n\n if (fieldTypeInfo && this._typeCacheDirectives[fieldTypeInfo.typeName]) {\n const cacheability = new Cacheability({ cacheControl: this._typeCacheDirectives[fieldTypeInfo.typeName] });\n CacheManager._setCacheMetadata(cacheMetadata, cacheability, requestFieldPath, operation);\n } else if (this._cascadeCacheControl && ancestorRequestFieldPath) {\n CacheManager._setCacheMetadata(\n cacheMetadata,\n cacheMetadata.get(ancestorRequestFieldPath),\n requestFieldPath,\n operation,\n );\n }\n }\n\n @logPartialCompiled()\n private async _setPartialQueryResponse(\n hash: string,\n partialQueryResponse: PartialQueryResponse,\n _options: RequestOptions,\n _context: CacheManagerContext,\n ): Promise<void> {\n this._partialQueryResponses.set(hash, partialQueryResponse);\n }\n\n private async _setQueryResponseCacheEntry(\n hash: string,\n { cacheMetadata, data }: ResponseData,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n const dehydratedCacheMetadata = dehydrateCacheMetadata(cacheMetadata);\n const cacheControl = CacheManager._getOperationCacheControl(cacheMetadata, context.operation);\n\n await this._setCacheEntry(\n QUERY_RESPONSES,\n hash,\n { cacheMetadata: dehydratedCacheMetadata, data },\n { cacheHeaders: { cacheControl }, tag: options.tag },\n options,\n context,\n );\n }\n\n private async _setRequestFieldPathCacheEntry(\n field: FieldNode,\n keysAndPaths: KeysAndPaths,\n { cacheability, data, fieldTypeInfo }: DataForCachingEntry,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n const { hashedRequestFieldCacheKey, responseDataPath } = keysAndPaths;\n let fieldData = get(data, responseDataPath);\n const isEntity = this._isFieldEntity(fieldData, fieldTypeInfo);\n const hasArgsOrDirectives = fieldTypeInfo.hasArguments || fieldTypeInfo.hasDirectives;\n\n if (context.operation === QUERY && (isEntity || hasArgsOrDirectives)) {\n if (isPlainObject(fieldData) && field.selectionSet?.selections) {\n fieldData = filterOutPropsWithArgsOrDirectives(fieldData, field.selectionSet.selections, keysAndPaths, context);\n }\n\n const result = await this._checkCacheEntry(REQUEST_FIELD_PATHS, hashedRequestFieldCacheKey, options, context);\n\n if (result && isObjectLike(fieldData)) {\n fieldData = this._mergeObjects(result.entry, fieldData);\n }\n\n await this._setCacheEntry(\n REQUEST_FIELD_PATHS,\n hashedRequestFieldCacheKey,\n fieldData,\n { cacheHeaders: { cacheControl: cacheability.printCacheControl() }, tag: options.tag },\n options,\n context,\n );\n\n if (hasChildFields(field)) {\n if (isEntity) {\n set(data, responseDataPath, { __cacheKey: `${REQUEST_FIELD_PATHS}::${hashedRequestFieldCacheKey}` });\n } else {\n unset(data, responseDataPath);\n }\n }\n }\n }\n}\n\nexport default function init(userOptions: UserOptions): CacheManagerInit {\n if (!isPlainObject(userOptions)) {\n throw new TypeError(\"@graphql-box/cache-manager expected userOptions to be a plain object.\");\n }\n\n return (clientOptions: ClientOptions) => CacheManager.init({ ...clientOptions, ...userOptions });\n}\n"],"file":"index.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/debug/log-cache-entry/index.ts"],"names":["CACHE_ENTRY_ADDED","logCacheEntry","_target","_propertyName","descriptor","method","value","descriptorValue","args","Promise","resolve","debugManager","otherContext","apply","startTime","now","endTime","duration","emit","cachemapOptions","cacheType","context","hash","options","stats"],"mappings":";AACA,SAASA,iBAAT,QAAkC,cAAlC;AAEA,eAAe,SAASC,aAAT,GAAyB;AACtC,SAAO,CACLC,OADK,EAELC,aAFK,EAGLC,UAHK,KAII;AACT,UAAMC,MAAM,GAAGD,UAAU,CAACE,KAA1B;AACA,QAAI,CAACD,MAAL,EAAa;;AAEbD,IAAAA,UAAU,CAACE,KAAX,GAAmB,eAAeC,eAAf,CAA+B,GAAGC,IAAlC,EAA6D;AAC9E,aAAO,IAAIC,OAAJ,CAAY,MAAMC,OAAN,IAAiB;AAClC,cAAM;AAAEC,UAAAA,YAAF;AAAgB,aAAGC;AAAnB,YAAoCJ,IAAI,CAAC,CAAD,CAA9C;;AAEA,YAAI,CAACG,YAAL,EAAmB;AACjB,gBAAMN,MAAM,CAACQ,KAAP,CAAa,IAAb,EAAmBL,IAAnB,CAAN;AACAE,UAAAA,OAAO;AACP;AACD;;AAED,cAAMI,SAAS,GAAGH,YAAY,CAACI,GAAb,EAAlB;AACA,cAAMV,MAAM,CAACQ,KAAP,CAAa,IAAb,EAAmBL,IAAnB,CAAN;AACA,cAAMQ,OAAO,GAAGL,YAAY,CAACI,GAAb,EAAhB;AACA,cAAME,QAAQ,GAAGD,OAAO,GAAGF,SAA3B;AACAJ,QAAAA,OAAO;AAEPC,QAAAA,YAAY,CAACO,IAAb,CAAkBlB,iBAAlB,EAAqC;AACnCmB,UAAAA,eAAe,EAAEX,IAAI,CAAC,CAAD,CADc;AAEnCY,UAAAA,SAAS,EAAEZ,IAAI,CAAC,CAAD,CAFoB;AAGnCa,UAAAA,OAAO,EAAET,YAH0B;AAInCU,UAAAA,IAAI,EAAEd,IAAI,CAAC,CAAD,CAJyB;AAKnCe,UAAAA,OAAO,EAAEf,IAAI,CAAC,CAAD,CALsB;AAMnCgB,UAAAA,KAAK,EAAE;AAAEP,YAAAA,QAAF;AAAYD,YAAAA,OAAZ;AAAqBF,YAAAA;AAArB,WAN4B;AAOnCR,UAAAA,KAAK,EAAEE,IAAI,CAAC,CAAD;AAPwB,SAArC;AASD,OAxBM,CAAP;AAyBD,KA1BD;AA2BD,GAnCD;AAoCD","sourcesContent":["import { RequestContext } from \"@graphql-box/core\";\nimport { CACHE_ENTRY_ADDED } from \"../../consts\";\n\nexport default function logCacheEntry() {\n return (\n _target: any,\n _propertyName: string,\n descriptor: TypedPropertyDescriptor<(...args: any[]) => Promise<any>>,\n ): void => {\n const method = descriptor.value;\n if (!method) return;\n\n descriptor.value = async function descriptorValue(...args: any[]): Promise<any> {\n return new Promise(async resolve => {\n const { debugManager, ...otherContext } = args[5] as RequestContext;\n\n if (!debugManager) {\n await method.apply(this, args);\n resolve();\n return;\n }\n\n const startTime = debugManager.now();\n await method.apply(this, args);\n const endTime = debugManager.now();\n const duration = endTime - startTime;\n resolve();\n\n debugManager.emit(CACHE_ENTRY_ADDED, {\n cachemapOptions: args[3],\n cacheType: args[0],\n context: otherContext,\n hash: args[1],\n options: args[4],\n stats: { duration, endTime, startTime },\n value: args[2],\n });\n });\n };\n };\n}\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../../../src/debug/log-cache-entry/index.ts"],"names":["CACHE_ENTRY_ADDED","logCacheEntry","_target","_propertyName","descriptor","method","value","descriptorValue","args","Promise","resolve","debugManager","otherContext","apply","startTime","now","endTime","duration","emit","cachemapOptions","cacheType","context","hash","options","stats"],"mappings":";AACA,SAASA,iBAAT,QAAkC,cAAlC;AAEA,eAAe,SAASC,aAAT,GAAyB;AACtC,SAAO,CACLC,OADK,EAELC,aAFK,EAGLC,UAHK,KAII;AACT,UAAMC,MAAM,GAAGD,UAAU,CAACE,KAA1B;AACA,QAAI,CAACD,MAAL,EAAa;;AAEbD,IAAAA,UAAU,CAACE,KAAX,GAAmB,eAAeC,eAAf,CAA+B,GAAGC,IAAlC,EAA6D;AAC9E,aAAO,IAAIC,OAAJ,CAAkB,MAAMC,OAAN,IAAiB;AACxC,cAAM;AAAEC,UAAAA,YAAF;AAAgB,aAAGC;AAAnB,YAAoCJ,IAAI,CAAC,CAAD,CAA9C;;AAEA,YAAI,CAACG,YAAL,EAAmB;AACjB,gBAAMN,MAAM,CAACQ,KAAP,CAAa,IAAb,EAAmBL,IAAnB,CAAN;AACAE,UAAAA,OAAO;AACP;AACD;;AAED,cAAMI,SAAS,GAAGH,YAAY,CAACI,GAAb,EAAlB;AACA,cAAMV,MAAM,CAACQ,KAAP,CAAa,IAAb,EAAmBL,IAAnB,CAAN;AACA,cAAMQ,OAAO,GAAGL,YAAY,CAACI,GAAb,EAAhB;AACA,cAAME,QAAQ,GAAGD,OAAO,GAAGF,SAA3B;AACAJ,QAAAA,OAAO;AAEPC,QAAAA,YAAY,CAACO,IAAb,CAAkBlB,iBAAlB,EAAqC;AACnCmB,UAAAA,eAAe,EAAEX,IAAI,CAAC,CAAD,CADc;AAEnCY,UAAAA,SAAS,EAAEZ,IAAI,CAAC,CAAD,CAFoB;AAGnCa,UAAAA,OAAO,EAAET,YAH0B;AAInCU,UAAAA,IAAI,EAAEd,IAAI,CAAC,CAAD,CAJyB;AAKnCe,UAAAA,OAAO,EAAEf,IAAI,CAAC,CAAD,CALsB;AAMnCgB,UAAAA,KAAK,EAAE;AAAEP,YAAAA,QAAF;AAAYD,YAAAA,OAAZ;AAAqBF,YAAAA;AAArB,WAN4B;AAOnCR,UAAAA,KAAK,EAAEE,IAAI,CAAC,CAAD;AAPwB,SAArC;AASD,OAxBM,CAAP;AAyBD,KA1BD;AA2BD,GAnCD;AAoCD","sourcesContent":["import { RequestContext } from \"@graphql-box/core\";\nimport { CACHE_ENTRY_ADDED } from \"../../consts\";\n\nexport default function logCacheEntry() {\n return (\n _target: any,\n _propertyName: string,\n descriptor: TypedPropertyDescriptor<(...args: any[]) => Promise<any>>,\n ): void => {\n const method = descriptor.value;\n if (!method) return;\n\n descriptor.value = async function descriptorValue(...args: any[]): Promise<any> {\n return new Promise<void>(async resolve => {\n const { debugManager, ...otherContext } = args[5] as RequestContext;\n\n if (!debugManager) {\n await method.apply(this, args);\n resolve();\n return;\n }\n\n const startTime = debugManager.now();\n await method.apply(this, args);\n const endTime = debugManager.now();\n const duration = endTime - startTime;\n resolve();\n\n debugManager.emit(CACHE_ENTRY_ADDED, {\n cachemapOptions: args[3],\n cacheType: args[0],\n context: otherContext,\n hash: args[1],\n options: args[4],\n stats: { duration, endTime, startTime },\n value: args[2],\n });\n });\n };\n };\n}\n"],"file":"index.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/debug/log-partial-compiled/index.ts"],"names":["PARTIAL_QUERY_COMPILED","logPartialCompiled","_target","_propertyName","descriptor","method","value","descriptorValue","args","Promise","resolve","debugManager","otherContext","apply","startTime","now","endTime","duration","emit","context","hash","options","partialQueryResponse","stats"],"mappings":";AACA,SAASA,sBAAT,QAAuC,cAAvC;AAEA,eAAe,SAASC,kBAAT,GAA8B;AAC3C,SAAO,CACLC,OADK,EAELC,aAFK,EAGLC,UAHK,KAII;AACT,UAAMC,MAAM,GAAGD,UAAU,CAACE,KAA1B;AACA,QAAI,CAACD,MAAL,EAAa;;AAEbD,IAAAA,UAAU,CAACE,KAAX,GAAmB,eAAeC,eAAf,CAA+B,GAAGC,IAAlC,EAA6D;AAC9E,aAAO,IAAIC,OAAJ,CAAY,MAAMC,OAAN,IAAiB;AAClC,cAAM;AAAEC,UAAAA,YAAF;AAAgB,aAAGC;AAAnB,YAAoCJ,IAAI,CAAC,CAAD,CAA9C;;AAEA,YAAI,CAACG,YAAL,EAAmB;AACjB,gBAAMN,MAAM,CAACQ,KAAP,CAAa,IAAb,EAAmBL,IAAnB,CAAN;AACAE,UAAAA,OAAO;AACP;AACD;;AAED,cAAMI,SAAS,GAAGH,YAAY,CAACI,GAAb,EAAlB;AACA,cAAMV,MAAM,CAACQ,KAAP,CAAa,IAAb,EAAmBL,IAAnB,CAAN;AACA,cAAMQ,OAAO,GAAGL,YAAY,CAACI,GAAb,EAAhB;AACA,cAAME,QAAQ,GAAGD,OAAO,GAAGF,SAA3B;AACAJ,QAAAA,OAAO;AAEPC,QAAAA,YAAY,CAACO,IAAb,CAAkBlB,sBAAlB,EAA0C;AACxCmB,UAAAA,OAAO,EAAEP,YAD+B;AAExCQ,UAAAA,IAAI,EAAEZ,IAAI,CAAC,CAAD,CAF8B;AAGxCa,UAAAA,OAAO,EAAEb,IAAI,CAAC,CAAD,CAH2B;AAIxCc,UAAAA,oBAAoB,EAAEd,IAAI,CAAC,CAAD,CAJc;AAKxCe,UAAAA,KAAK,EAAE;AAAEN,YAAAA,QAAF;AAAYD,YAAAA,OAAZ;AAAqBF,YAAAA;AAArB;AALiC,SAA1C;AAOD,OAtBM,CAAP;AAuBD,KAxBD;AAyBD,GAjCD;AAkCD","sourcesContent":["import { RequestContext } from \"@graphql-box/core\";\nimport { PARTIAL_QUERY_COMPILED } from \"../../consts\";\n\nexport default function logPartialCompiled() {\n return (\n _target: any,\n _propertyName: string,\n descriptor: TypedPropertyDescriptor<(...args: any[]) => Promise<any>>,\n ): void => {\n const method = descriptor.value;\n if (!method) return;\n\n descriptor.value = async function descriptorValue(...args: any[]): Promise<any> {\n return new Promise(async resolve => {\n const { debugManager, ...otherContext } = args[3] as RequestContext;\n\n if (!debugManager) {\n await method.apply(this, args);\n resolve();\n return;\n }\n\n const startTime = debugManager.now();\n await method.apply(this, args);\n const endTime = debugManager.now();\n const duration = endTime - startTime;\n resolve();\n\n debugManager.emit(PARTIAL_QUERY_COMPILED, {\n context: otherContext,\n hash: args[0],\n options: args[2],\n partialQueryResponse: args[1],\n stats: { duration, endTime, startTime },\n });\n });\n };\n };\n}\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../../../src/debug/log-partial-compiled/index.ts"],"names":["PARTIAL_QUERY_COMPILED","logPartialCompiled","_target","_propertyName","descriptor","method","value","descriptorValue","args","Promise","resolve","debugManager","otherContext","apply","startTime","now","endTime","duration","emit","context","hash","options","partialQueryResponse","stats"],"mappings":";AACA,SAASA,sBAAT,QAAuC,cAAvC;AAEA,eAAe,SAASC,kBAAT,GAA8B;AAC3C,SAAO,CACLC,OADK,EAELC,aAFK,EAGLC,UAHK,KAII;AACT,UAAMC,MAAM,GAAGD,UAAU,CAACE,KAA1B;AACA,QAAI,CAACD,MAAL,EAAa;;AAEbD,IAAAA,UAAU,CAACE,KAAX,GAAmB,eAAeC,eAAf,CAA+B,GAAGC,IAAlC,EAA6D;AAC9E,aAAO,IAAIC,OAAJ,CAAkB,MAAMC,OAAN,IAAiB;AACxC,cAAM;AAAEC,UAAAA,YAAF;AAAgB,aAAGC;AAAnB,YAAoCJ,IAAI,CAAC,CAAD,CAA9C;;AAEA,YAAI,CAACG,YAAL,EAAmB;AACjB,gBAAMN,MAAM,CAACQ,KAAP,CAAa,IAAb,EAAmBL,IAAnB,CAAN;AACAE,UAAAA,OAAO;AACP;AACD;;AAED,cAAMI,SAAS,GAAGH,YAAY,CAACI,GAAb,EAAlB;AACA,cAAMV,MAAM,CAACQ,KAAP,CAAa,IAAb,EAAmBL,IAAnB,CAAN;AACA,cAAMQ,OAAO,GAAGL,YAAY,CAACI,GAAb,EAAhB;AACA,cAAME,QAAQ,GAAGD,OAAO,GAAGF,SAA3B;AACAJ,QAAAA,OAAO;AAEPC,QAAAA,YAAY,CAACO,IAAb,CAAkBlB,sBAAlB,EAA0C;AACxCmB,UAAAA,OAAO,EAAEP,YAD+B;AAExCQ,UAAAA,IAAI,EAAEZ,IAAI,CAAC,CAAD,CAF8B;AAGxCa,UAAAA,OAAO,EAAEb,IAAI,CAAC,CAAD,CAH2B;AAIxCc,UAAAA,oBAAoB,EAAEd,IAAI,CAAC,CAAD,CAJc;AAKxCe,UAAAA,KAAK,EAAE;AAAEN,YAAAA,QAAF;AAAYD,YAAAA,OAAZ;AAAqBF,YAAAA;AAArB;AALiC,SAA1C;AAOD,OAtBM,CAAP;AAuBD,KAxBD;AAyBD,GAjCD;AAkCD","sourcesContent":["import { RequestContext } from \"@graphql-box/core\";\nimport { PARTIAL_QUERY_COMPILED } from \"../../consts\";\n\nexport default function logPartialCompiled() {\n return (\n _target: any,\n _propertyName: string,\n descriptor: TypedPropertyDescriptor<(...args: any[]) => Promise<any>>,\n ): void => {\n const method = descriptor.value;\n if (!method) return;\n\n descriptor.value = async function descriptorValue(...args: any[]): Promise<any> {\n return new Promise<void>(async resolve => {\n const { debugManager, ...otherContext } = args[3] as RequestContext;\n\n if (!debugManager) {\n await method.apply(this, args);\n resolve();\n return;\n }\n\n const startTime = debugManager.now();\n await method.apply(this, args);\n const endTime = debugManager.now();\n const duration = endTime - startTime;\n resolve();\n\n debugManager.emit(PARTIAL_QUERY_COMPILED, {\n context: otherContext,\n hash: args[0],\n options: args[2],\n partialQueryResponse: args[1],\n stats: { duration, endTime, startTime },\n });\n });\n };\n };\n}\n"],"file":"index.js"}
@@ -0,0 +1,54 @@
1
+ import _isNumber from "lodash/isNumber";
2
+ import { getAlias, getArguments, getName, hashRequest } from "@graphql-box/helpers";
3
+ export const buildKey = (path, key) => {
4
+ const paths = [];
5
+
6
+ if (path.length) {
7
+ paths.push(path);
8
+ }
9
+
10
+ paths.push(key);
11
+ return paths.join(".");
12
+ };
13
+ export const buildRequestFieldCacheKey = (name, requestFieldCacheKey, args, directives, index) => {
14
+ var _directives$inherited, _directives$own;
15
+
16
+ let key = `${_isNumber(index) ? index : name}`;
17
+
18
+ if (args) {
19
+ key = `${key}(${JSON.stringify(args)})`;
20
+ }
21
+
22
+ if (directives !== null && directives !== void 0 && (_directives$inherited = directives.inherited) !== null && _directives$inherited !== void 0 && _directives$inherited.length) {
23
+ key = `${directives.inherited.join(" ")} ${key}`;
24
+ }
25
+
26
+ if (directives !== null && directives !== void 0 && (_directives$own = directives.own) !== null && _directives$own !== void 0 && _directives$own.length) {
27
+ key = `${key} ${directives.own.join(" ")}`;
28
+ }
29
+
30
+ return buildKey(requestFieldCacheKey, key);
31
+ };
32
+ export const buildFieldKeysAndPaths = (field, options, context) => {
33
+ const name = getName(field);
34
+ const {
35
+ index,
36
+ requestFieldCacheKey = "",
37
+ requestFieldPath = "",
38
+ responseDataPath = ""
39
+ } = options;
40
+ const fieldAliasOrName = getAlias(field) || name;
41
+ const updatedRequestFieldPath = _isNumber(index) ? requestFieldPath : buildKey(requestFieldPath, fieldAliasOrName);
42
+ const fieldTypeInfo = context.fieldTypeMap.get(updatedRequestFieldPath);
43
+ const updatedRequestFieldCacheKey = buildRequestFieldCacheKey(name, requestFieldCacheKey, getArguments(field), fieldTypeInfo === null || fieldTypeInfo === void 0 ? void 0 : fieldTypeInfo.directives, index);
44
+ const propNameOrIndex = _isNumber(index) ? index : fieldAliasOrName;
45
+ const updatedResponseDataPath = buildKey(responseDataPath, propNameOrIndex);
46
+ return {
47
+ hashedRequestFieldCacheKey: hashRequest(updatedRequestFieldCacheKey),
48
+ propNameOrIndex,
49
+ requestFieldCacheKey: updatedRequestFieldCacheKey,
50
+ requestFieldPath: updatedRequestFieldPath,
51
+ responseDataPath: updatedResponseDataPath
52
+ };
53
+ };
54
+ //# sourceMappingURL=buildKeysAndPaths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/helpers/buildKeysAndPaths.ts"],"names":["getAlias","getArguments","getName","hashRequest","buildKey","path","key","paths","length","push","join","buildRequestFieldCacheKey","name","requestFieldCacheKey","args","directives","index","JSON","stringify","inherited","own","buildFieldKeysAndPaths","field","options","context","requestFieldPath","responseDataPath","fieldAliasOrName","updatedRequestFieldPath","fieldTypeInfo","fieldTypeMap","get","updatedRequestFieldCacheKey","propNameOrIndex","updatedResponseDataPath","hashedRequestFieldCacheKey"],"mappings":";AACA,SAASA,QAAT,EAAmBC,YAAnB,EAAiCC,OAAjC,EAA0CC,WAA1C,QAA6D,sBAA7D;AAKA,OAAO,MAAMC,QAAQ,GAAG,CAACC,IAAD,EAAeC,GAAf,KAAwC;AAC9D,QAAMC,KAA0B,GAAG,EAAnC;;AAEA,MAAIF,IAAI,CAACG,MAAT,EAAiB;AACfD,IAAAA,KAAK,CAACE,IAAN,CAAWJ,IAAX;AACD;;AAEDE,EAAAA,KAAK,CAACE,IAAN,CAAWH,GAAX;AACA,SAAOC,KAAK,CAACG,IAAN,CAAW,GAAX,CAAP;AACD,CATM;AAWP,OAAO,MAAMC,yBAAyB,GAAG,CACvCC,IADuC,EAEvCC,oBAFuC,EAGvCC,IAHuC,EAIvCC,UAJuC,EAKvCC,KALuC,KAMpC;AAAA;;AACH,MAAIV,GAAG,GAAI,GAAE,UAASU,KAAT,IAAkBA,KAAlB,GAA0BJ,IAAK,EAA5C;;AAEA,MAAIE,IAAJ,EAAU;AACRR,IAAAA,GAAG,GAAI,GAAEA,GAAI,IAAGW,IAAI,CAACC,SAAL,CAAeJ,IAAf,CAAqB,GAArC;AACD;;AAED,MAAIC,UAAJ,aAAIA,UAAJ,wCAAIA,UAAU,CAAEI,SAAhB,kDAAI,sBAAuBX,MAA3B,EAAmC;AACjCF,IAAAA,GAAG,GAAI,GAAES,UAAU,CAACI,SAAX,CAAqBT,IAArB,CAA0B,GAA1B,CAA+B,IAAGJ,GAAI,EAA/C;AACD;;AAED,MAAIS,UAAJ,aAAIA,UAAJ,kCAAIA,UAAU,CAAEK,GAAhB,4CAAI,gBAAiBZ,MAArB,EAA6B;AAC3BF,IAAAA,GAAG,GAAI,GAAEA,GAAI,IAAGS,UAAU,CAACK,GAAX,CAAeV,IAAf,CAAoB,GAApB,CAAyB,EAAzC;AACD;;AAED,SAAON,QAAQ,CAACS,oBAAD,EAAuBP,GAAvB,CAAf;AACD,CAtBM;AAwBP,OAAO,MAAMe,sBAAsB,GAAG,CACpCC,KADoC,EAEpCC,OAFoC,EAGpCC,OAHoC,KAInB;AACjB,QAAMZ,IAAI,GAAGV,OAAO,CAACoB,KAAD,CAApB;AACA,QAAM;AAAEN,IAAAA,KAAF;AAASH,IAAAA,oBAAoB,GAAG,EAAhC;AAAoCY,IAAAA,gBAAgB,GAAG,EAAvD;AAA2DC,IAAAA,gBAAgB,GAAG;AAA9E,MAAqFH,OAA3F;AACA,QAAMI,gBAAgB,GAAG3B,QAAQ,CAACsB,KAAD,CAAR,IAAmBV,IAA5C;AACA,QAAMgB,uBAAuB,GAAG,UAASZ,KAAT,IAAkBS,gBAAlB,GAAqCrB,QAAQ,CAACqB,gBAAD,EAAmBE,gBAAnB,CAA7E;AACA,QAAME,aAAa,GAAGL,OAAO,CAACM,YAAR,CAAqBC,GAArB,CAAyBH,uBAAzB,CAAtB;AAEA,QAAMI,2BAA2B,GAAGrB,yBAAyB,CAC3DC,IAD2D,EAE3DC,oBAF2D,EAG3DZ,YAAY,CAACqB,KAAD,CAH+C,EAI3DO,aAJ2D,aAI3DA,aAJ2D,uBAI3DA,aAAa,CAAEd,UAJ4C,EAK3DC,KAL2D,CAA7D;AAQA,QAAMiB,eAAe,GAAG,UAASjB,KAAT,IAAkBA,KAAlB,GAA0BW,gBAAlD;AACA,QAAMO,uBAAuB,GAAG9B,QAAQ,CAACsB,gBAAD,EAAmBO,eAAnB,CAAxC;AAEA,SAAO;AACLE,IAAAA,0BAA0B,EAAEhC,WAAW,CAAC6B,2BAAD,CADlC;AAELC,IAAAA,eAFK;AAGLpB,IAAAA,oBAAoB,EAAEmB,2BAHjB;AAILP,IAAAA,gBAAgB,EAAEG,uBAJb;AAKLF,IAAAA,gBAAgB,EAAEQ;AALb,GAAP;AAOD,CA7BM","sourcesContent":["import { FieldTypeInfo, PlainObjectMap } from \"@graphql-box/core\";\nimport { getAlias, getArguments, getName, hashRequest } from \"@graphql-box/helpers\";\nimport { FieldNode } from \"graphql\";\nimport { isNumber } from \"lodash\";\nimport { CacheManagerContext, KeysAndPaths, KeysAndPathsOptions } from \"../defs\";\n\nexport const buildKey = (path: string, key: string | number) => {\n const paths: (string | number)[] = [];\n\n if (path.length) {\n paths.push(path);\n }\n\n paths.push(key);\n return paths.join(\".\");\n};\n\nexport const buildRequestFieldCacheKey = (\n name: string,\n requestFieldCacheKey: string,\n args: PlainObjectMap | undefined,\n directives?: FieldTypeInfo[\"directives\"],\n index?: number,\n) => {\n let key = `${isNumber(index) ? index : name}`;\n\n if (args) {\n key = `${key}(${JSON.stringify(args)})`;\n }\n\n if (directives?.inherited?.length) {\n key = `${directives.inherited.join(\" \")} ${key}`;\n }\n\n if (directives?.own?.length) {\n key = `${key} ${directives.own.join(\" \")}`;\n }\n\n return buildKey(requestFieldCacheKey, key);\n};\n\nexport const buildFieldKeysAndPaths = (\n field: FieldNode,\n options: KeysAndPathsOptions,\n context: CacheManagerContext,\n): KeysAndPaths => {\n const name = getName(field) as FieldNode[\"name\"][\"value\"];\n const { index, requestFieldCacheKey = \"\", requestFieldPath = \"\", responseDataPath = \"\" } = options;\n const fieldAliasOrName = getAlias(field) || name;\n const updatedRequestFieldPath = isNumber(index) ? requestFieldPath : buildKey(requestFieldPath, fieldAliasOrName);\n const fieldTypeInfo = context.fieldTypeMap.get(updatedRequestFieldPath);\n\n const updatedRequestFieldCacheKey = buildRequestFieldCacheKey(\n name,\n requestFieldCacheKey,\n getArguments(field),\n fieldTypeInfo?.directives,\n index,\n );\n\n const propNameOrIndex = isNumber(index) ? index : fieldAliasOrName;\n const updatedResponseDataPath = buildKey(responseDataPath, propNameOrIndex);\n\n return {\n hashedRequestFieldCacheKey: hashRequest(updatedRequestFieldCacheKey),\n propNameOrIndex,\n requestFieldCacheKey: updatedRequestFieldCacheKey,\n requestFieldPath: updatedRequestFieldPath,\n responseDataPath: updatedResponseDataPath,\n };\n};\n"],"file":"buildKeysAndPaths.js"}
@@ -0,0 +1,31 @@
1
+ export default ((fieldPathChecklistValues, fieldTypeName) => {
2
+ if (!fieldPathChecklistValues || !fieldPathChecklistValues.length) {
3
+ return {
4
+ hasData: false,
5
+ typeUnused: !!fieldTypeName
6
+ };
7
+ }
8
+
9
+ if (fieldPathChecklistValues.length === 1) {
10
+ const {
11
+ hasData,
12
+ typeName
13
+ } = fieldPathChecklistValues[0];
14
+ const typeUnused = !typeName ? undefined : typeName !== fieldTypeName;
15
+ return {
16
+ hasData,
17
+ typeUnused
18
+ };
19
+ }
20
+
21
+ return {
22
+ hasData: fieldPathChecklistValues.some(({
23
+ hasData,
24
+ typeName
25
+ }) => typeName === fieldTypeName && hasData),
26
+ typeUnused: !fieldPathChecklistValues.every(({
27
+ typeName
28
+ }) => typeName === fieldTypeName)
29
+ };
30
+ });
31
+ //# sourceMappingURL=checkFieldPathChecklist.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/helpers/checkFieldPathChecklist.ts"],"names":["fieldPathChecklistValues","fieldTypeName","length","hasData","typeUnused","typeName","undefined","some","every"],"mappings":"AAEA,gBAAe,CACbA,wBADa,EAEbC,aAFa,KAGqB;AAClC,MAAI,CAACD,wBAAD,IAA6B,CAACA,wBAAwB,CAACE,MAA3D,EAAmE;AACjE,WAAO;AAAEC,MAAAA,OAAO,EAAE,KAAX;AAAkBC,MAAAA,UAAU,EAAE,CAAC,CAACH;AAAhC,KAAP;AACD;;AAED,MAAID,wBAAwB,CAACE,MAAzB,KAAoC,CAAxC,EAA2C;AACzC,UAAM;AAAEC,MAAAA,OAAF;AAAWE,MAAAA;AAAX,QAAwBL,wBAAwB,CAAC,CAAD,CAAtD;AACA,UAAMI,UAAU,GAAG,CAACC,QAAD,GAAYC,SAAZ,GAAwBD,QAAQ,KAAKJ,aAAxD;AACA,WAAO;AAAEE,MAAAA,OAAF;AAAWC,MAAAA;AAAX,KAAP;AACD;;AAED,SAAO;AACLD,IAAAA,OAAO,EAAEH,wBAAwB,CAACO,IAAzB,CAA8B,CAAC;AAAEJ,MAAAA,OAAF;AAAWE,MAAAA;AAAX,KAAD,KAA2BA,QAAQ,KAAKJ,aAAb,IAA8BE,OAAvF,CADJ;AAELC,IAAAA,UAAU,EAAE,CAACJ,wBAAwB,CAACQ,KAAzB,CAA+B,CAAC;AAAEH,MAAAA;AAAF,KAAD,KAAkBA,QAAQ,KAAKJ,aAA9D;AAFR,GAAP;AAID,CAlBD","sourcesContent":["import { CheckFieldPathChecklistResult, FieldPathChecklistValue } from \"../defs\";\n\nexport default (\n fieldPathChecklistValues: FieldPathChecklistValue[] | undefined,\n fieldTypeName: string | undefined,\n): CheckFieldPathChecklistResult => {\n if (!fieldPathChecklistValues || !fieldPathChecklistValues.length) {\n return { hasData: false, typeUnused: !!fieldTypeName };\n }\n\n if (fieldPathChecklistValues.length === 1) {\n const { hasData, typeName } = fieldPathChecklistValues[0];\n const typeUnused = !typeName ? undefined : typeName !== fieldTypeName;\n return { hasData, typeUnused };\n }\n\n return {\n hasData: fieldPathChecklistValues.some(({ hasData, typeName }) => typeName === fieldTypeName && hasData),\n typeUnused: !fieldPathChecklistValues.every(({ typeName }) => typeName === fieldTypeName),\n };\n};\n"],"file":"checkFieldPathChecklist.js"}
@@ -0,0 +1,15 @@
1
+ import _keys from "lodash/keys";
2
+ import { getFragmentDefinitions } from "@graphql-box/helpers";
3
+ export default (ast => {
4
+ var _getFragmentDefinitio;
5
+
6
+ return _keys((_getFragmentDefinitio = getFragmentDefinitions(ast)) !== null && _getFragmentDefinitio !== void 0 ? _getFragmentDefinitio : {}).reduce((acc, name) => {
7
+ acc[name] = {
8
+ deleted: 0,
9
+ paths: [],
10
+ total: 0
11
+ };
12
+ return acc;
13
+ }, {});
14
+ });
15
+ //# sourceMappingURL=createFragmentSpreadChecklist.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/helpers/createFragmentSpreadChecklist.ts"],"names":["getFragmentDefinitions","ast","reduce","acc","name","deleted","paths","total"],"mappings":";AAAA,SAASA,sBAAT,QAAuC,sBAAvC;AAYA,gBAAgBC,GAAD;AAAA;;AAAA,SACb,+BAAKD,sBAAsB,CAACC,GAAD,CAA3B,yEAAoC,EAApC,EAAwCC,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;AAAhC,KAAZ;AACA,WAAOJ,GAAP;AACD,GAHD,EAGG,EAHH,CADa;AAAA,CAAf","sourcesContent":["import { getFragmentDefinitions } from \"@graphql-box/helpers\";\nimport { DocumentNode } from \"graphql\";\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: DocumentNode) =>\n keys(getFragmentDefinitions(ast) ?? {}).reduce((acc: FragmentSpreadCheckist, name) => {\n acc[name] = { deleted: 0, paths: [], total: 0 };\n return acc;\n }, {});\n"],"file":"createFragmentSpreadChecklist.js"}
@@ -0,0 +1,81 @@
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";
4
+ import checkFieldPathChecklist from "./checkFieldPathChecklist";
5
+ import filterFragmentSpreads from "./filterFragmentSpreads";
6
+ import filterIDsAndTypeNames from "./filterIDsAndTypeNames";
7
+ import filterInlineFragments from "./filterInlineFragments";
8
+
9
+ const filterField = (field, fieldPathChecklist, fragmentSpreadChecklist, ancestorRequestFieldPath, context) => {
10
+ const {
11
+ fragmentDefinitions,
12
+ typeIDKey
13
+ } = context;
14
+ const fieldsAndTypeNames = getChildFields(field, {
15
+ fragmentDefinitions
16
+ });
17
+
18
+ if (!fieldsAndTypeNames) {
19
+ return false;
20
+ }
21
+
22
+ const fragmentSpreadFieldCounter = {};
23
+
24
+ for (let i = fieldsAndTypeNames.length - 1; i >= 0; i -= 1) {
25
+ const {
26
+ fieldNode: childField,
27
+ fragmentKind,
28
+ fragmentName,
29
+ typeName: childTypeName
30
+ } = fieldsAndTypeNames[i];
31
+
32
+ if (fragmentKind === FRAGMENT_SPREAD && fragmentName && !fragmentSpreadFieldCounter[fragmentName]) {
33
+ var _getChildFields$lengt, _getChildFields;
34
+
35
+ fragmentSpreadFieldCounter[fragmentName] = {
36
+ hasData: 0,
37
+ total: fragmentDefinitions !== null && fragmentDefinitions !== void 0 && fragmentDefinitions[fragmentName] ? (_getChildFields$lengt = (_getChildFields = getChildFields(fragmentDefinitions === null || fragmentDefinitions === void 0 ? void 0 : fragmentDefinitions[fragmentName], {
38
+ fragmentDefinitions
39
+ })) === null || _getChildFields === void 0 ? void 0 : _getChildFields.length) !== null && _getChildFields$lengt !== void 0 ? _getChildFields$lengt : 0 : 0
40
+ };
41
+ }
42
+
43
+ const childFieldName = getName(childField);
44
+
45
+ if (childFieldName === typeIDKey || childFieldName === TYPE_NAME_KEY) {
46
+ continue;
47
+ }
48
+
49
+ const {
50
+ requestFieldPath
51
+ } = buildFieldKeysAndPaths(childField, {
52
+ requestFieldPath: ancestorRequestFieldPath
53
+ }, context);
54
+ const {
55
+ hasData,
56
+ typeUnused
57
+ } = checkFieldPathChecklist(fieldPathChecklist.get(requestFieldPath), childTypeName);
58
+
59
+ if (hasData || typeUnused) {
60
+ if (fragmentKind === FRAGMENT_SPREAD) {
61
+ fragmentSpreadFieldCounter[fragmentName].hasData += 1;
62
+ } else if (!hasChildFields(childField, {
63
+ fragmentDefinitions
64
+ })) {
65
+ deleteChildFields(field, childField);
66
+ } else if (filterField(childField, fieldPathChecklist, fragmentSpreadChecklist, requestFieldPath, context)) {
67
+ deleteChildFields(field, childField);
68
+ }
69
+ }
70
+ }
71
+
72
+ filterFragmentSpreads(field, fragmentSpreadFieldCounter, fragmentSpreadChecklist, ancestorRequestFieldPath);
73
+ filterInlineFragments(field, context);
74
+ filterIDsAndTypeNames(field, context);
75
+ return !hasChildFields(field, {
76
+ fragmentDefinitions
77
+ });
78
+ };
79
+
80
+ export default filterField;
81
+ //# sourceMappingURL=filterField.js.map
@@ -0,0 +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":"AAAA,SAASA,aAAT,QAA8B,mBAA9B;AACA,SAASC,eAAT,EAA0BC,iBAA1B,EAA6CC,cAA7C,EAA6DC,OAA7D,EAAsEC,cAAtE,QAA4F,sBAA5F;AAGA,SAASC,sBAAT,QAAuC,qBAAvC;AACA,OAAOC,uBAAP,MAAoC,2BAApC;AAEA,OAAOC,qBAAP,MAAkC,yBAAlC;AACA,OAAOC,qBAAP,MAAkC,yBAAlC;AACA,OAAOC,qBAAP,MAAkC,yBAAlC;;AAEA,MAAMC,WAAW,GAAG,CAClBC,KADkB,EAElBC,kBAFkB,EAGlBC,uBAHkB,EAIlBC,wBAJkB,EAKlBC,OALkB,KAMN;AACZ,QAAM;AAAEC,IAAAA,mBAAF;AAAuBC,IAAAA;AAAvB,MAAqCF,OAA3C;AACA,QAAMG,kBAAkB,GAAGhB,cAAc,CAACS,KAAD,EAAQ;AAAEK,IAAAA;AAAF,GAAR,CAAzC;;AAEA,MAAI,CAACE,kBAAL,EAAyB;AACvB,WAAO,KAAP;AACD;;AAED,QAAMC,0BAAsD,GAAG,EAA/D;;AAEA,OAAK,IAAIC,CAAC,GAAGF,kBAAkB,CAACG,MAAnB,GAA4B,CAAzC,EAA4CD,CAAC,IAAI,CAAjD,EAAoDA,CAAC,IAAI,CAAzD,EAA4D;AAC1D,UAAM;AAAEE,MAAAA,SAAS,EAAEC,UAAb;AAAyBC,MAAAA,YAAzB;AAAuCC,MAAAA,YAAvC;AAAqDC,MAAAA,QAAQ,EAAEC;AAA/D,QAAiFT,kBAAkB,CAACE,CAAD,CAAzG;;AAEA,QAAII,YAAY,KAAKxB,eAAjB,IAAoCyB,YAApC,IAAoD,CAACN,0BAA0B,CAACM,YAAD,CAAnF,EAAmG;AAAA;;AACjGN,MAAAA,0BAA0B,CAACM,YAAD,CAA1B,GAA2C;AACzCG,QAAAA,OAAO,EAAE,CADgC;AAEzCC,QAAAA,KAAK,EAAEb,mBAAmB,SAAnB,IAAAA,mBAAmB,WAAnB,IAAAA,mBAAmB,CAAGS,YAAH,CAAnB,+CACHvB,cAAc,CAACc,mBAAD,aAACA,mBAAD,uBAACA,mBAAmB,CAAGS,YAAH,CAApB,EAAsC;AAAET,UAAAA;AAAF,SAAtC,CADX,oDACH,gBAA8EK,MAD3E,yEACqF,CADrF,GAEH;AAJqC,OAA3C;AAMD;;AAED,UAAMS,cAAc,GAAG3B,OAAO,CAACoB,UAAD,CAA9B;;AAEA,QAAIO,cAAc,KAAKb,SAAnB,IAAgCa,cAAc,KAAK/B,aAAvD,EAAsE;AACpE;AACD;;AAED,UAAM;AAAEgC,MAAAA;AAAF,QAAuB1B,sBAAsB,CACjDkB,UADiD,EAEjD;AACEQ,MAAAA,gBAAgB,EAAEjB;AADpB,KAFiD,EAKjDC,OALiD,CAAnD;AAQA,UAAM;AAAEa,MAAAA,OAAF;AAAWI,MAAAA;AAAX,QAA0B1B,uBAAuB,CAACM,kBAAkB,CAACqB,GAAnB,CAAuBF,gBAAvB,CAAD,EAA2CJ,aAA3C,CAAvD;;AAEA,QAAIC,OAAO,IAAII,UAAf,EAA2B;AACzB,UAAIR,YAAY,KAAKxB,eAArB,EAAsC;AACpCmB,QAAAA,0BAA0B,CAACM,YAAD,CAA1B,CAAmDG,OAAnD,IAA8D,CAA9D;AACD,OAFD,MAEO,IAAI,CAACxB,cAAc,CAACmB,UAAD,EAAa;AAAEP,QAAAA;AAAF,OAAb,CAAnB,EAA0D;AAC/Df,QAAAA,iBAAiB,CAACU,KAAD,EAAQY,UAAR,CAAjB;AACD,OAFM,MAEA,IAAIb,WAAW,CAACa,UAAD,EAAaX,kBAAb,EAAiCC,uBAAjC,EAA0DkB,gBAA1D,EAA4EhB,OAA5E,CAAf,EAAqG;AAC1Gd,QAAAA,iBAAiB,CAACU,KAAD,EAAQY,UAAR,CAAjB;AACD;AACF;AACF;;AAEDhB,EAAAA,qBAAqB,CAACI,KAAD,EAAQQ,0BAAR,EAAoCN,uBAApC,EAA6DC,wBAA7D,CAArB;AACAL,EAAAA,qBAAqB,CAACE,KAAD,EAAQI,OAAR,CAArB;AACAP,EAAAA,qBAAqB,CAACG,KAAD,EAAQI,OAAR,CAArB;AACA,SAAO,CAACX,cAAc,CAACO,KAAD,EAAQ;AAAEK,IAAAA;AAAF,GAAR,CAAtB;AACD,CA3DD;;AA6DA,eAAeN,WAAf","sourcesContent":["import { TYPE_NAME_KEY } from \"@graphql-box/core\";\nimport { FRAGMENT_SPREAD, deleteChildFields, getChildFields, getName, hasChildFields } from \"@graphql-box/helpers\";\nimport { FieldNode, FragmentDefinitionNode } 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,\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"}