@graphql-box/cache-manager 3.1.2 → 3.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/browser/index.js +1 -1
- package/lib/browser/index.js.map +1 -1
- package/lib/browser/production.analysis.txt +44 -56
- package/lib/main/debug/log-cache-entry/index.js +8 -3
- package/lib/main/debug/log-cache-entry/index.js.map +1 -1
- package/lib/main/debug/log-cache-query/index.js +8 -3
- package/lib/main/debug/log-cache-query/index.js.map +1 -1
- package/lib/main/helpers/createFragmentSpreadChecklist.js +10 -15
- package/lib/main/helpers/createFragmentSpreadChecklist.js.map +1 -1
- package/lib/main/helpers/filterField.js +1 -3
- package/lib/main/helpers/filterField.js.map +1 -1
- package/lib/main/helpers/filterFragmentDefinitions.js +3 -3
- package/lib/main/helpers/filterFragmentDefinitions.js.map +1 -1
- package/lib/main/helpers/filterOutPropsWithArgsOrDirectives.js +1 -3
- package/lib/main/helpers/filterOutPropsWithArgsOrDirectives.js.map +1 -1
- package/lib/main/helpers/filterQuery.js +2 -4
- package/lib/main/helpers/filterQuery.js.map +1 -1
- package/lib/main/main/index.js +25 -14
- package/lib/main/main/index.js.map +1 -1
- package/lib/module/debug/log-cache-entry/index.js +8 -3
- package/lib/module/debug/log-cache-entry/index.js.map +1 -1
- package/lib/module/debug/log-cache-query/index.js +8 -3
- package/lib/module/debug/log-cache-query/index.js.map +1 -1
- package/lib/module/helpers/createFragmentSpreadChecklist.js +10 -14
- package/lib/module/helpers/createFragmentSpreadChecklist.js.map +1 -1
- package/lib/module/helpers/filterField.js +1 -2
- package/lib/module/helpers/filterField.js.map +1 -1
- package/lib/module/helpers/filterFragmentDefinitions.js +4 -4
- package/lib/module/helpers/filterFragmentDefinitions.js.map +1 -1
- package/lib/module/helpers/filterOutPropsWithArgsOrDirectives.js +1 -2
- package/lib/module/helpers/filterOutPropsWithArgsOrDirectives.js.map +1 -1
- package/lib/module/helpers/filterQuery.js +2 -3
- package/lib/module/helpers/filterQuery.js.map +1 -1
- package/lib/module/main/index.js +22 -10
- package/lib/module/main/index.js.map +1 -1
- package/lib/types/debug/log-cache-entry/index.d.ts.map +1 -1
- package/lib/types/debug/log-cache-query/index.d.ts.map +1 -1
- package/lib/types/defs/index.d.ts +3 -16
- package/lib/types/defs/index.d.ts.map +1 -1
- package/lib/types/helpers/createFragmentSpreadChecklist.d.ts +2 -1
- package/lib/types/helpers/createFragmentSpreadChecklist.d.ts.map +1 -1
- package/lib/types/helpers/filterField.d.ts.map +1 -1
- package/lib/types/helpers/filterOutPropsWithArgsOrDirectives.d.ts +2 -1
- package/lib/types/helpers/filterOutPropsWithArgsOrDirectives.d.ts.map +1 -1
- package/lib/types/helpers/filterQuery.d.ts.map +1 -1
- package/lib/types/main/index.d.ts +6 -3
- package/lib/types/main/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/__snapshots__/index.test.ts.snap +1082 -1082
- package/src/debug/log-cache-entry/index.ts +8 -3
- package/src/debug/log-cache-query/index.ts +8 -3
- package/src/defs/index.ts +8 -17
- package/src/helpers/createFragmentSpreadChecklist.ts +3 -3
- package/src/helpers/filterField.ts +8 -2
- package/src/helpers/filterFragmentDefinitions.ts +2 -2
- package/src/helpers/filterOutPropsWithArgsOrDirectives.ts +2 -3
- package/src/helpers/filterQuery.ts +7 -3
- package/src/main/index.ts +30 -14
- package/lib/main/helpers/buildKeysAndPaths.js +0 -73
- package/lib/main/helpers/buildKeysAndPaths.js.map +0 -1
- package/lib/module/helpers/buildKeysAndPaths.js +0 -54
- package/lib/module/helpers/buildKeysAndPaths.js.map +0 -1
- package/lib/types/helpers/buildKeysAndPaths.d.ts +0 -10
- package/lib/types/helpers/buildKeysAndPaths.d.ts.map +0 -1
- package/src/helpers/buildKeysAndPaths.ts +0 -71
package/lib/browser/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../cache-manager/src/consts/index.ts","../cache-manager/src/helpers/buildKeysAndPaths.ts","../cache-manager/src/helpers/filterOutPropsWithArgsOrDirectives.ts","../cache-manager/src/helpers/checkFieldPathChecklist.ts","../cache-manager/src/helpers/filterField.ts","../cache-manager/src/helpers/filterFragmentSpreads.ts","../cache-manager/src/helpers/filterInlineFragments.ts","../cache-manager/src/helpers/filterIDsAndTypeNames.ts","../cache-manager/src/helpers/filterQuery.ts","../cache-manager/src/helpers/createFragmentSpreadChecklist.ts","../cache-manager/src/helpers/filterFragmentDefinitions.ts","../cache-manager/src/helpers/isLastResponseChunk.ts","../cache-manager/src/helpers/isNotLastResponseChunk.ts","../cache-manager/src/helpers/isNotResponseChunk.ts","../cache-manager/src/helpers/normalizePatchResponseData.ts","../cache-manager/src/helpers/validTypeIDValue.ts","../cache-manager/src/main/index.ts","../cache-manager/src/debug/log-cache-query/index.ts","../cache-manager/src/debug/log-cache-entry/index.ts","../cache-manager/src/debug/log-partial-compiled/index.ts","../cache-manager/src/helpers/deriveOpCacheability.ts","../cache-manager/src/helpers/mergeResponseDataSets.ts"],"sourcesContent":["export const METADATA = \"metadata\";\nexport const CACHE_CONTROL = \"cacheControl\";\nexport const NO_CACHE = \"noCache\";\n\nexport const HEADER_CACHE_CONTROL = \"cache-control\";\nexport const HEADER_NO_CACHE = \"no-cache\";\n\nexport const CACHE_ENTRY_ADDED = \"cache_entry_added\";\nexport const CACHE_ENTRY_QUERIED = \"cache_entry_queried\";\nexport const PARTIAL_QUERY_COMPILED = \"partial_query_compiled\";\n","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","import { PlainObjectMap } from \"@graphql-box/core\";\nimport { getName, resolveFragments } from \"@graphql-box/helpers\";\nimport { FieldNode, SelectionNode } from \"graphql\";\nimport { keys } from \"lodash\";\nimport { CacheManagerContext, KeysAndPaths } from \"../defs\";\nimport { buildFieldKeysAndPaths } from \"./buildKeysAndPaths\";\n\nexport default (\n fieldData: PlainObjectMap,\n selectionNodes: readonly SelectionNode[],\n ancestorKeysAndPaths: KeysAndPaths,\n context: CacheManagerContext,\n) => {\n const fieldAndTypeName = resolveFragments(selectionNodes, context.fragmentDefinitions);\n\n return keys(fieldData).reduce((acc: PlainObjectMap, key) => {\n const match = fieldAndTypeName.find(({ fieldNode }) => (getName(fieldNode) as FieldNode[\"name\"][\"value\"]) === key);\n\n if (match) {\n const { requestFieldPath } = buildFieldKeysAndPaths(match.fieldNode, ancestorKeysAndPaths, context);\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath);\n\n if (!fieldTypeInfo?.hasArguments && !fieldTypeInfo?.hasDirectives) {\n acc[key] = fieldData[key];\n }\n }\n\n return acc;\n }, {});\n};\n","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","import { TYPE_NAME_KEY } from \"@graphql-box/core\";\nimport { FRAGMENT_SPREAD, deleteChildFields, getChildFields, getName, hasChildFields } from \"@graphql-box/helpers\";\nimport { FieldNode, FragmentDefinitionNode, OperationDefinitionNode } from \"graphql\";\nimport { CacheManagerContext, FieldPathChecklist, FragmentSpreadFieldCounter } from \"../defs\";\nimport { buildFieldKeysAndPaths } from \"./buildKeysAndPaths\";\nimport checkFieldPathChecklist from \"./checkFieldPathChecklist\";\nimport { FragmentSpreadCheckist } from \"./createFragmentSpreadChecklist\";\nimport filterFragmentSpreads from \"./filterFragmentSpreads\";\nimport filterIDsAndTypeNames from \"./filterIDsAndTypeNames\";\nimport filterInlineFragments from \"./filterInlineFragments\";\n\nconst filterField = (\n field: FieldNode | FragmentDefinitionNode | OperationDefinitionNode,\n fieldPathChecklist: FieldPathChecklist,\n fragmentSpreadChecklist: FragmentSpreadCheckist,\n ancestorRequestFieldPath: string,\n context: CacheManagerContext,\n): boolean => {\n const { fragmentDefinitions, typeIDKey } = context;\n const fieldsAndTypeNames = getChildFields(field, { fragmentDefinitions });\n\n if (!fieldsAndTypeNames) {\n return false;\n }\n\n const fragmentSpreadFieldCounter: FragmentSpreadFieldCounter = {};\n\n for (let i = fieldsAndTypeNames.length - 1; i >= 0; i -= 1) {\n const { fieldNode: childField, fragmentKind, fragmentName, typeName: childTypeName } = fieldsAndTypeNames[i];\n\n if (fragmentKind === FRAGMENT_SPREAD && fragmentName && !fragmentSpreadFieldCounter[fragmentName]) {\n fragmentSpreadFieldCounter[fragmentName] = {\n hasData: 0,\n total: fragmentDefinitions?.[fragmentName]\n ? getChildFields(fragmentDefinitions?.[fragmentName], { fragmentDefinitions })?.length ?? 0\n : 0,\n };\n }\n\n const childFieldName = getName(childField);\n\n if (childFieldName === typeIDKey || childFieldName === TYPE_NAME_KEY) {\n continue;\n }\n\n const { requestFieldPath } = buildFieldKeysAndPaths(\n childField,\n {\n requestFieldPath: ancestorRequestFieldPath,\n },\n context,\n );\n\n const { hasData, typeUnused } = checkFieldPathChecklist(fieldPathChecklist.get(requestFieldPath), childTypeName);\n\n if (hasData || typeUnused) {\n if (fragmentKind === FRAGMENT_SPREAD) {\n fragmentSpreadFieldCounter[fragmentName as string].hasData += 1;\n } else if (!hasChildFields(childField, { fragmentDefinitions })) {\n deleteChildFields(field, childField);\n } else if (filterField(childField, fieldPathChecklist, fragmentSpreadChecklist, requestFieldPath, context)) {\n deleteChildFields(field, childField);\n }\n }\n }\n\n filterFragmentSpreads(field, fragmentSpreadFieldCounter, fragmentSpreadChecklist, ancestorRequestFieldPath);\n filterInlineFragments(field, context);\n filterIDsAndTypeNames(field, context);\n return !hasChildFields(field, { fragmentDefinitions });\n};\n\nexport default filterField;\n","import { deleteFragmentSpreads } from \"@graphql-box/helpers\";\nimport { FieldNode, FragmentDefinitionNode, OperationDefinitionNode } from \"graphql\";\nimport { isEmpty, keys } from \"lodash\";\nimport { FragmentSpreadFieldCounter } from \"../defs\";\nimport { FragmentSpreadCheckist } from \"./createFragmentSpreadChecklist\";\n\nexport default (\n field: FieldNode | FragmentDefinitionNode | OperationDefinitionNode,\n fragmentSpreadFieldCounter: FragmentSpreadFieldCounter,\n fragmentSpreadChecklist: FragmentSpreadCheckist,\n ancestorRequestFieldPath: string,\n) => {\n if (isEmpty(fragmentSpreadFieldCounter)) {\n return;\n }\n\n keys(fragmentSpreadFieldCounter).forEach(key => {\n fragmentSpreadChecklist[key].paths.push(ancestorRequestFieldPath);\n\n const { hasData, total } = fragmentSpreadFieldCounter[key];\n\n if (hasData === total) {\n deleteFragmentSpreads(field, key);\n fragmentSpreadChecklist[key].deleted += 1;\n }\n });\n};\n","import { deleteInlineFragments, getChildFields, getInlineFragments, getName } from \"@graphql-box/helpers\";\nimport { FieldNode, FragmentDefinitionNode, OperationDefinitionNode } from \"graphql\";\nimport { CacheManagerContext } from \"..\";\n\nexport default (\n field: FieldNode | FragmentDefinitionNode | OperationDefinitionNode,\n { fragmentDefinitions, typeIDKey }: CacheManagerContext,\n) => {\n const inlineFragments = getInlineFragments(field);\n let filtered = false;\n\n inlineFragments.forEach(fragment => {\n const fieldsAndTypeNames = getChildFields(fragment, { fragmentDefinitions });\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) === typeIDKey) {\n deleteInlineFragments(field, fragment);\n filtered = true;\n }\n }\n });\n\n return filtered;\n};\n","import { TYPE_NAME_KEY } from \"@graphql-box/core\";\nimport { deleteChildFields, getChildFields, getName } from \"@graphql-box/helpers\";\nimport { FieldNode, FragmentDefinitionNode, OperationDefinitionNode } from \"graphql\";\nimport { CacheManagerContext } from \"../defs\";\n\nexport default (\n field: FieldNode | FragmentDefinitionNode | OperationDefinitionNode,\n { fragmentDefinitions, typeIDKey }: CacheManagerContext,\n) => {\n const fieldsAndTypeNames = getChildFields(field, { fragmentDefinitions });\n\n if (!fieldsAndTypeNames || fieldsAndTypeNames.length > 3) {\n return false;\n }\n\n const fieldNames = fieldsAndTypeNames.map(({ fieldNode }) => getName(fieldNode) as FieldNode[\"name\"][\"value\"]);\n\n if (fieldNames.length === 2 && fieldNames.every(name => name === 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] === 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","import { RequestData } from \"@graphql-box/core\";\nimport { deleteChildFields, getChildFields, getOperationDefinitions } from \"@graphql-box/helpers\";\nimport { CacheManagerContext, CachedResponseData } from \"../defs\";\nimport { buildFieldKeysAndPaths } from \"./buildKeysAndPaths\";\nimport createFragmentSpreadChecklist from \"./createFragmentSpreadChecklist\";\nimport filterField from \"./filterField\";\nimport filterFragmentDefinitions from \"./filterFragmentDefinitions\";\n\nexport default (requestData: RequestData, { fieldPathChecklist }: CachedResponseData, context: CacheManagerContext) => {\n const { ast } = requestData;\n const queryNode = getOperationDefinitions(ast, context.operation)[0];\n const { fragmentDefinitions } = context;\n const fieldsAndTypeNames = getChildFields(queryNode, { fragmentDefinitions });\n\n if (!fieldsAndTypeNames) {\n return ast;\n }\n\n const fragmentSpreadChecklist = createFragmentSpreadChecklist(requestData);\n\n for (let i = fieldsAndTypeNames.length - 1; i >= 0; i -= 1) {\n const { fieldNode } = fieldsAndTypeNames[i];\n\n const { requestFieldPath } = buildFieldKeysAndPaths(\n fieldNode,\n {\n requestFieldPath: context.operation,\n },\n context,\n );\n\n if (filterField(fieldNode, fieldPathChecklist, fragmentSpreadChecklist, requestFieldPath, context)) {\n deleteChildFields(queryNode, fieldNode);\n }\n }\n\n context.queryFiltered = true;\n return filterFragmentDefinitions(ast, fieldPathChecklist, fragmentSpreadChecklist, context);\n};\n","import { RequestData } from \"@graphql-box/core\";\nimport { getFragmentDefinitions } from \"@graphql-box/helpers\";\nimport { keys } from \"lodash\";\n\nexport type FragmentSpreadCheckist = {\n [key: string]: {\n deleted: number;\n paths: string[];\n total: number;\n };\n};\n\nexport default ({ ast, request }: RequestData) =>\n keys(getFragmentDefinitions(ast) ?? {}).reduce((acc: FragmentSpreadCheckist, name) => {\n acc[name] = { deleted: 0, paths: [], total: (request.match(new RegExp(`\\\\.\\\\.\\\\.${name}`, \"g\")) || []).length };\n return acc;\n }, {});\n","import { deleteFragmentDefinitions, getFragmentDefinitions } from \"@graphql-box/helpers\";\nimport { DocumentNode } from \"graphql\";\nimport { keys } from \"lodash\";\nimport { CacheManagerContext, FieldPathChecklist } from \"../defs\";\nimport { FragmentSpreadCheckist } from \"./createFragmentSpreadChecklist\";\nimport filterField from \"./filterField\";\n\nexport default (\n ast: DocumentNode,\n fieldPathChecklist: FieldPathChecklist,\n fragmentSpreadChecklist: FragmentSpreadCheckist,\n context: CacheManagerContext,\n) => {\n const definitionsToFilter = keys(fragmentSpreadChecklist).reduce(\n (namesAndPaths: { name: string; path: string }[], key) => {\n const { deleted, total } = fragmentSpreadChecklist[key];\n\n return deleted === 0 && total === 1\n ? [...namesAndPaths, { name: key, path: fragmentSpreadChecklist[key].paths[0] as string }]\n : namesAndPaths;\n },\n [],\n );\n\n const fragmentDefinitions = getFragmentDefinitions(ast) ?? {};\n\n definitionsToFilter.forEach(({ name, path }) => {\n const fragmentDefinition = fragmentDefinitions[name];\n filterField(fragmentDefinition, fieldPathChecklist, fragmentSpreadChecklist, path, context);\n });\n\n const definitionsToDelete = keys(fragmentSpreadChecklist).reduce((names: string[], key) => {\n const { deleted, total } = fragmentSpreadChecklist[key];\n return deleted > 0 && deleted === total ? [...names, key] : names;\n }, []);\n\n if (!definitionsToDelete.length) {\n return ast;\n }\n\n return deleteFragmentDefinitions(ast, {\n include: definitionsToDelete,\n });\n};\n","import { RawResponseDataWithMaybeCacheMetadata } from \"@graphql-box/core\";\nimport { CacheManagerContext } from \"..\";\n\nexport default (rawResponseData: RawResponseDataWithMaybeCacheMetadata, context: CacheManagerContext) =>\n context.hasDeferOrStream && !rawResponseData.hasNext && rawResponseData.paths;\n","import { RawResponseDataWithMaybeCacheMetadata } from \"@graphql-box/core\";\nimport { CacheManagerContext } from \"..\";\n\nexport default (rawResponseData: RawResponseDataWithMaybeCacheMetadata, context: CacheManagerContext) =>\n context.hasDeferOrStream && rawResponseData.hasNext;\n","import { RawResponseDataWithMaybeCacheMetadata } from \"@graphql-box/core\";\nimport { CacheManagerContext } from \"..\";\n\nexport default (rawResponseData: RawResponseDataWithMaybeCacheMetadata, context: CacheManagerContext) =>\n !context.hasDeferOrStream && !rawResponseData.hasNext && !rawResponseData.paths;\n","import { RawResponseDataWithMaybeCacheMetadata } from \"@graphql-box/core\";\nimport { set } from \"lodash\";\nimport { CacheManagerContext } from \"..\";\n\nexport default (rawResponseData: RawResponseDataWithMaybeCacheMetadata, context: CacheManagerContext) => {\n if (!context.normalizePatchResponseData) {\n return rawResponseData;\n }\n\n const { data, paths, ...rest } = rawResponseData;\n\n return {\n ...rest,\n data: set({}, (paths as string[])[0], data),\n paths,\n };\n};\n","import { FieldTypeInfo } from \"@graphql-box/core\";\nimport { isPlainObject } from \"lodash\";\n\nexport const getValidTypeIDValue = (\n requestFieldPathData: any,\n { typeIDValue }: FieldTypeInfo,\n typeIDKey: string,\n): string | number | undefined => {\n const requestFieldPathDataIDValue = isPlainObject(requestFieldPathData) ? requestFieldPathData[typeIDKey] : undefined;\n return typeIDValue || requestFieldPathDataIDValue;\n};\n","import Cachemap from \"@cachemap/core\";\nimport {\n CacheMetadata,\n CacheTypes,\n DATA_ENTITIES,\n FieldTypeInfo,\n PlainObjectMap,\n PlainObjectStringMap,\n QUERY,\n QUERY_RESPONSES,\n REQUEST_FIELD_PATHS,\n RawResponseDataWithMaybeCacheMetadata,\n RequestContext,\n RequestData,\n RequestOptions,\n ResponseData,\n TYPE_NAME_KEY,\n} from \"@graphql-box/core\";\nimport {\n FRAGMENT_SPREAD,\n dehydrateCacheMetadata,\n getChildFields,\n getFragmentDefinitions,\n getOperationDefinitions,\n hasChildFields,\n hashRequest,\n iterateChildFields,\n mergeObjects,\n rehydrateCacheMetadata,\n} from \"@graphql-box/helpers\";\nimport Cacheability from \"cacheability\";\nimport { FieldNode, print } from \"graphql\";\nimport { assign, cloneDeep, get, isArray, isObjectLike, isPlainObject, isUndefined, set, unset } from \"lodash\";\nimport { CACHE_CONTROL, HEADER_NO_CACHE, METADATA, NO_CACHE } from \"../consts\";\nimport { logCacheEntry, logCacheQuery, logPartialCompiled } from \"../debug\";\nimport {\n AnalyzeQueryResult,\n AncestorKeysAndPaths,\n CacheManagerContext,\n CacheManagerDef,\n CacheManagerInit,\n CachedAncestorFieldData,\n CachedResponseData,\n CachemapOptions,\n CheckCacheEntryResult,\n ClientOptions,\n ConstructorOptions,\n DataForCachingEntry,\n FieldCount,\n FieldPathChecklist,\n FieldPathChecklistValue,\n KeysAndPaths,\n MergedCachedFieldData,\n PartialQueryResponse,\n PartialQueryResponses,\n QueryResponseCacheEntry,\n ResponseDataForCaching,\n TypeNamesAndKind,\n UserOptions,\n} from \"../defs\";\nimport { buildFieldKeysAndPaths } from \"../helpers/buildKeysAndPaths\";\nimport deriveOpCacheability from \"../helpers/deriveOpCacheability\";\nimport filterOutPropsWithArgsOrDirectives from \"../helpers/filterOutPropsWithArgsOrDirectives\";\nimport filterQuery from \"../helpers/filterQuery\";\nimport isLastResponseChunk from \"../helpers/isLastResponseChunk\";\nimport isNotLastResponseChunk from \"../helpers/isNotLastResponseChunk\";\nimport isNotResponseChunk from \"../helpers/isNotResponseChunk\";\nimport mergeResponseDataSets from \"../helpers/mergeResponseDataSets\";\nimport normalizePatchResponseData from \"../helpers/normalizePatchResponseData\";\nimport { getValidTypeIDValue } from \"../helpers/validTypeIDValue\";\n\nexport class CacheManager implements CacheManagerDef {\n private static _countFieldPathChecklist(fieldPathChecklist: FieldPathChecklist): FieldCount {\n const fieldCount: FieldCount = { missing: 0, total: 0 };\n\n fieldPathChecklist.forEach(checklistValues => {\n fieldCount.total += checklistValues.length;\n const missing = checklistValues.filter(({ hasData }) => !hasData);\n fieldCount.missing += missing.length;\n });\n\n return fieldCount;\n }\n\n private static _getFieldDataFromAncestor(ancestorFieldData: any, propNameOrIndex: string | number): any {\n return isObjectLike(ancestorFieldData) ? cloneDeep(ancestorFieldData[propNameOrIndex]) : undefined;\n }\n\n private static _getOperationCacheControl(cacheMetadata: CacheMetadata | undefined, operation: string): string {\n const defaultCacheControl = HEADER_NO_CACHE;\n\n if (!cacheMetadata) {\n return defaultCacheControl;\n }\n\n const cacheability = cacheMetadata.get(operation);\n return cacheability ? cacheability.printCacheControl() : defaultCacheControl;\n }\n\n private static _isNodeEntity(fieldTypeInfo?: FieldTypeInfo): boolean {\n if (!fieldTypeInfo) {\n return false;\n }\n\n const { isEntity, possibleTypes } = fieldTypeInfo;\n return isEntity || possibleTypes.some(type => !!type.isEntity);\n }\n\n private static _isNodeRequestFieldPath(fieldTypeInfo?: FieldTypeInfo): boolean {\n return (\n !!fieldTypeInfo &&\n (this._isNodeEntity(fieldTypeInfo) || fieldTypeInfo.hasArguments || fieldTypeInfo.hasDirectives)\n );\n }\n\n private static _isValid(cacheability: Cacheability): boolean {\n const noCache = get(cacheability, [METADATA, CACHE_CONTROL, NO_CACHE], false);\n return !noCache && cacheability.checkTTL();\n }\n\n private static _mergeResponseCacheMetadata(\n cacheMetadata: CacheMetadata,\n partialQueryResponse?: PartialQueryResponse,\n ): CacheMetadata {\n if (!partialQueryResponse) {\n return cacheMetadata;\n }\n\n return new Map([...partialQueryResponse.cacheMetadata, ...cacheMetadata]);\n }\n\n private static _setCachedData(\n requestData: PlainObjectMap,\n { data }: MergedCachedFieldData,\n propNameOrIndex: string | number,\n ): void {\n if (!isObjectLike(data) && !isUndefined(data)) {\n requestData[propNameOrIndex] = data as string | number | boolean | null;\n } else if (isObjectLike(data)) {\n const objectLikeData = data as PlainObjectMap | any[];\n requestData[propNameOrIndex] = isArray(objectLikeData) ? [] : {};\n }\n }\n\n private static _setCachedResponseData(\n cachedFieldData: MergedCachedFieldData,\n { cacheMetadata, data, fieldPathChecklist }: CachedResponseData,\n { propNameOrIndex, requestFieldPath }: KeysAndPaths,\n typeNamesAndKind: TypeNamesAndKind,\n _options: RequestOptions,\n { operation }: CacheManagerContext,\n ) {\n CacheManager._setCacheMetadata(cacheMetadata, cachedFieldData.cacheability, requestFieldPath, operation);\n CacheManager._setFieldPathChecklist(fieldPathChecklist, cachedFieldData, requestFieldPath, typeNamesAndKind);\n CacheManager._setCachedData(data, cachedFieldData, propNameOrIndex);\n }\n\n private static _setCacheMetadata(\n cacheMetadata: CacheMetadata,\n cacheability: Cacheability | undefined,\n requestFieldPath: string,\n operation: string,\n ): void {\n if (!cacheability) {\n return;\n }\n\n cacheMetadata.set(requestFieldPath, cacheability);\n const operationCacheability = cacheMetadata.get(operation);\n\n if (!operationCacheability || operationCacheability.metadata.ttl > cacheability.metadata.ttl) {\n cacheMetadata.set(operation, cacheability);\n }\n }\n\n private static _setFieldPathChecklist(\n fieldPathChecklist: FieldPathChecklist,\n { data }: MergedCachedFieldData,\n requestFieldPath: string,\n { dataTypeName, fieldTypeName, fragmentKind, fragmentName }: TypeNamesAndKind,\n ): void {\n if (isUndefined(fieldTypeName) || fragmentKind === FRAGMENT_SPREAD) {\n if (fieldPathChecklist.has(requestFieldPath)) {\n return;\n }\n\n fieldPathChecklist.set(requestFieldPath, [{ fragmentKind, fragmentName, hasData: !isUndefined(data) }]);\n return;\n }\n\n if (dataTypeName !== fieldTypeName) {\n return;\n }\n\n const entry = fieldPathChecklist.get(requestFieldPath);\n const checklistValues = entry ? (entry as FieldPathChecklistValue[]) : [];\n\n if (checklistValues.some(({ typeName }) => typeName === dataTypeName)) {\n return;\n }\n\n fieldPathChecklist.set(requestFieldPath, [\n ...checklistValues,\n { fragmentKind, fragmentName, hasData: !isUndefined(data), typeName: dataTypeName as string },\n ]);\n }\n\n private _cache: Cachemap;\n private _cascadeCacheControl: boolean;\n private _fallbackOperationCacheability: string;\n private _partialQueryResponses: PartialQueryResponses = new Map();\n private _responseChunksAwaitingCaching: Map<string, RawResponseDataWithMaybeCacheMetadata[]> = new Map();\n private _typeCacheDirectives: PlainObjectStringMap;\n private _typeIDKey: string;\n\n constructor(options: ConstructorOptions) {\n const errors: TypeError[] = [];\n\n if (!options.cache) {\n errors.push(new TypeError(\"@graphql-box/cache-manager expected options.cache.\"));\n }\n\n if (!!options.typeCacheDirectives && !isPlainObject(options.typeCacheDirectives)) {\n const message = \"@graphql-box/cache-manager expected options.typeCacheDirectives to be a plain object.\";\n errors.push(new TypeError(message));\n }\n\n if (errors.length) {\n throw errors;\n }\n\n this._cache = options.cache;\n this._cascadeCacheControl = options.cascadeCacheControl || false;\n this._fallbackOperationCacheability = options.fallbackOperationCacheability || NO_CACHE;\n this._typeCacheDirectives = options.typeCacheDirectives || {};\n this._typeIDKey = options.typeIDKey;\n }\n\n get cache(): Cachemap {\n return this._cache;\n }\n\n public async analyzeQuery(\n requestData: RequestData,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<AnalyzeQueryResult> {\n const { ast, hash } = requestData;\n\n if (!ast) {\n return Promise.reject(new TypeError(\"@graphql-box/cache-manager expected an AST.\"));\n }\n\n const cacheManagerContext: CacheManagerContext = {\n ...context,\n fragmentDefinitions: getFragmentDefinitions(ast),\n typeIDKey: this._typeIDKey,\n };\n\n const cachedResponseData = await this._retrieveCachedResponseData(requestData, options, cacheManagerContext);\n const { cacheMetadata, data, fieldCount } = cachedResponseData;\n\n if (fieldCount.missing === fieldCount.total) {\n return { updated: requestData };\n }\n\n if (!fieldCount.missing) {\n const dataCaching = this._setQueryResponseCacheEntry(hash, { cacheMetadata, data }, options, cacheManagerContext);\n\n if (options.awaitDataCaching) {\n await dataCaching;\n }\n\n return { response: { cacheMetadata, data } };\n }\n\n this._setPartialQueryResponse(hash, { cacheMetadata, data }, options, cacheManagerContext);\n const filteredAST = filterQuery(requestData, cachedResponseData, cacheManagerContext);\n const { fragmentDefinitions, typeIDKey, ...rest } = cacheManagerContext;\n assign(context, rest);\n const request = print(filteredAST);\n return { updated: { ast: filteredAST, hash: hashRequest(request), request } };\n }\n\n public async cacheQuery(\n requestData: RequestData,\n updatedRequestData: RequestData,\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<ResponseData> {\n const cacheManagerContext: CacheManagerContext = {\n ...context,\n fragmentDefinitions: getFragmentDefinitions(updatedRequestData.ast),\n typeIDKey: this._typeIDKey,\n };\n\n return this._cacheResponse(requestData, updatedRequestData, rawResponseData, options, cacheManagerContext);\n }\n\n public async cacheResponse(\n requestData: RequestData,\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<ResponseData> {\n const cacheManagerContext: CacheManagerContext = {\n ...context,\n fragmentDefinitions: getFragmentDefinitions(requestData.ast),\n typeIDKey: this._typeIDKey,\n };\n\n return this._cacheResponse(requestData, undefined, rawResponseData, options, cacheManagerContext);\n }\n\n public async checkCacheEntry(\n cacheType: CacheTypes,\n hash: string,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<CheckCacheEntryResult | false> {\n return this._checkCacheEntry(cacheType, hash, options, context);\n }\n\n public async checkQueryResponseCacheEntry(\n hash: string,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<ResponseData | false> {\n const result = await this._checkCacheEntry(QUERY_RESPONSES, hash, options, context);\n\n if (!result) {\n return false;\n }\n\n const { cacheMetadata, data } = result.entry as QueryResponseCacheEntry;\n\n return {\n cacheMetadata: rehydrateCacheMetadata(cacheMetadata),\n data,\n };\n }\n\n public deletePartialQueryResponse(hash: string): void {\n this._partialQueryResponses.delete(hash);\n }\n\n private async _analyzeFieldNode(\n fieldNode: FieldNode,\n cachedAncestorFieldData: CachedAncestorFieldData,\n cachedResponseData: CachedResponseData,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n if (hasChildFields(fieldNode, { fragmentDefinitions: context.fragmentDefinitions })) {\n await this._analyzeParentFieldNode(fieldNode, cachedAncestorFieldData, cachedResponseData, options, context);\n } else {\n await this._analyzeLeafFieldNode(fieldNode, cachedAncestorFieldData, cachedResponseData, options, context);\n }\n }\n\n private async _analyzeLeafFieldNode(\n fieldNode: FieldNode,\n cachedAncestorFieldData: CachedAncestorFieldData,\n cachedResponseData: CachedResponseData,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n const keysAndPaths = buildFieldKeysAndPaths(fieldNode, cachedAncestorFieldData, context);\n const { hashedRequestFieldCacheKey, propNameOrIndex, requestFieldPath } = keysAndPaths;\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath);\n const { entityData, fragmentKind, fragmentName, requestFieldPathData, typeName } = cachedAncestorFieldData;\n\n const typeNamesAndKind = {\n dataTypeName: entityData?.__typename || requestFieldPathData?.__typename,\n fieldTypeName: typeName,\n fragmentKind,\n fragmentName,\n };\n\n if (CacheManager._isNodeRequestFieldPath(fieldTypeInfo)) {\n const { cacheability, entry } = await this._retrieveCachedRequestFieldPathData(\n hashedRequestFieldCacheKey,\n options,\n context,\n );\n\n CacheManager._setCachedResponseData(\n { cacheability, data: entry },\n cachedResponseData,\n keysAndPaths,\n typeNamesAndKind,\n options,\n context,\n );\n } else {\n const cachedFieldData =\n CacheManager._getFieldDataFromAncestor(entityData, propNameOrIndex) ||\n CacheManager._getFieldDataFromAncestor(requestFieldPathData, propNameOrIndex);\n\n CacheManager._setFieldPathChecklist(\n cachedResponseData.fieldPathChecklist,\n { data: cachedFieldData },\n requestFieldPath,\n typeNamesAndKind,\n );\n\n CacheManager._setCachedData(cachedResponseData.data, { data: cachedFieldData }, propNameOrIndex);\n }\n }\n\n private async _analyzeParentFieldNode(\n fieldNode: FieldNode,\n cachedAncestorFieldData: CachedAncestorFieldData,\n cachedResponseData: CachedResponseData,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n const keysAndPaths = buildFieldKeysAndPaths(fieldNode, cachedAncestorFieldData, context);\n const { propNameOrIndex, requestFieldCacheKey, requestFieldPath } = keysAndPaths;\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath) as FieldTypeInfo;\n\n const { cacheability, data, entityData, requestFieldPathData } = await this._retrieveCachedParentNodeData(\n cachedAncestorFieldData,\n keysAndPaths,\n fieldTypeInfo,\n options,\n context,\n );\n\n const { fragmentKind, fragmentName, typeName } = cachedAncestorFieldData;\n\n CacheManager._setCachedResponseData(\n { cacheability, data },\n cachedResponseData,\n keysAndPaths,\n { dataTypeName: get(data, TYPE_NAME_KEY), fieldTypeName: typeName, fragmentKind, fragmentName },\n options,\n context,\n );\n\n if (!isObjectLike(data)) {\n return;\n }\n\n const objectLikeData = data as PlainObjectMap | any[];\n const promises: Promise<void>[] = [];\n\n iterateChildFields(\n fieldNode,\n objectLikeData,\n context.fragmentDefinitions,\n (\n childField: FieldNode,\n childTypeName: string | undefined,\n childFragmentKind: string | undefined,\n childFragmentName: string | undefined,\n childIndex?: number,\n ) => {\n promises.push(\n this._analyzeFieldNode(\n childField,\n {\n cacheability,\n entityData,\n fragmentKind: childFragmentKind,\n fragmentName: childFragmentName,\n index: childIndex,\n requestFieldCacheKey,\n requestFieldPath,\n requestFieldPathData,\n typeName: childTypeName,\n },\n { ...cachedResponseData, data: cachedResponseData.data[propNameOrIndex] },\n options,\n context,\n ),\n );\n },\n );\n\n await Promise.all(promises);\n }\n\n private _buildCacheMetadata(\n { ast }: RequestData,\n { data, ...otherProps }: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: CacheManagerContext,\n ): CacheMetadata {\n const cacheMetadata = this._createCacheMetadata({ data, ...otherProps }, context);\n const queryNode = getOperationDefinitions(ast, context.operation)[0];\n const fieldsAndTypeNames = getChildFields(queryNode);\n\n if (!fieldsAndTypeNames) {\n return cacheMetadata;\n }\n\n fieldsAndTypeNames.forEach(({ fieldNode }) =>\n this._setFieldCacheability(\n fieldNode,\n { requestFieldPath: context.operation },\n { cacheMetadata, data },\n options,\n context,\n ),\n );\n\n return cacheMetadata;\n }\n\n private async _cacheResponse(\n requestData: RequestData,\n updatedRequestData: RequestData | undefined,\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<ResponseData> {\n const normalizedResponseData = normalizePatchResponseData(rawResponseData, context);\n let responseDataForCaching: RawResponseDataWithMaybeCacheMetadata | undefined = normalizedResponseData;\n\n if (isNotLastResponseChunk(rawResponseData, context)) {\n this._setResponseChunksAwaitingCaching(normalizedResponseData, context);\n responseDataForCaching = undefined;\n }\n\n if (isLastResponseChunk(rawResponseData, context)) {\n responseDataForCaching = this._retrieveResponseDataForCaching(normalizedResponseData, context);\n }\n\n const dataCaching: Promise<void>[] = [];\n\n if (responseDataForCaching) {\n const { data } = responseDataForCaching;\n const cacheMetadata = this._buildCacheMetadata(requestData, responseDataForCaching, options, context);\n\n dataCaching.push(\n this._setEntityAndRequestFieldPathCacheEntries(\n requestData,\n {\n cacheMetadata,\n entityData: cloneDeep(data),\n requestFieldPathData: cloneDeep(data),\n },\n options,\n context,\n ),\n );\n\n let queryCacheMetadata: CacheMetadata | undefined;\n let queryData: PlainObjectMap | undefined;\n\n if (context.operation === QUERY) {\n let partialQueryResponse: PartialQueryResponse | undefined;\n\n if (context.queryFiltered && updatedRequestData) {\n dataCaching.push(\n this._setQueryResponseCacheEntry(updatedRequestData.hash, { cacheMetadata, data }, options, context),\n );\n\n partialQueryResponse = this._getPartialQueryResponse(requestData.hash);\n }\n\n queryCacheMetadata = CacheManager._mergeResponseCacheMetadata(cacheMetadata, partialQueryResponse);\n queryData = this._mergeResponseData(data, partialQueryResponse);\n\n dataCaching.push(\n this._setQueryResponseCacheEntry(\n requestData.hash,\n { cacheMetadata: queryCacheMetadata, data: queryData },\n options,\n context,\n ),\n );\n }\n\n if (options.awaitDataCaching) {\n await Promise.all(dataCaching);\n }\n\n if (isNotResponseChunk(normalizedResponseData, context) && queryCacheMetadata && queryData) {\n return {\n cacheMetadata: queryCacheMetadata,\n data: queryData,\n };\n }\n }\n\n const { data, hasNext, paths } = normalizedResponseData;\n\n return {\n cacheMetadata: this._buildCacheMetadata(requestData, normalizedResponseData, options, context),\n data,\n hasNext,\n paths,\n };\n }\n\n private async _checkCacheEntry(\n cacheType: CacheTypes,\n hash: string,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<CheckCacheEntryResult | false> {\n try {\n const cacheability = await this._hasCacheEntry(cacheType, hash);\n\n if (!cacheability || !CacheManager._isValid(cacheability)) {\n return false;\n }\n\n const entry = await this._getCacheEntry(cacheType, hash, options, context);\n\n if (isUndefined(entry)) {\n return false;\n }\n\n return { cacheability, entry };\n } catch (error) {\n return false;\n }\n }\n\n private _createCacheMetadata(\n { _cacheMetadata, headers }: RawResponseDataWithMaybeCacheMetadata,\n { operation }: CacheManagerContext,\n ): CacheMetadata {\n const cacheMetadata = new Map();\n\n const cacheability = deriveOpCacheability({\n _cacheMetadata,\n fallback: this._fallbackOperationCacheability,\n headers,\n });\n\n cacheMetadata.set(operation, cacheability);\n\n if (_cacheMetadata) {\n rehydrateCacheMetadata(_cacheMetadata, cacheMetadata);\n }\n\n return cacheMetadata;\n }\n\n @logCacheQuery()\n private async _getCacheEntry(\n cacheType: CacheTypes,\n hash: string,\n _options: RequestOptions,\n _context: CacheManagerContext,\n ): Promise<any> {\n try {\n return await this._cache.get(`${cacheType}::${hash}`);\n } catch (errors) {\n return Promise.reject(errors);\n }\n }\n\n private _getPartialQueryResponse(hash: string): PartialQueryResponse | undefined {\n const partialQueryResponse = this._partialQueryResponses.get(hash);\n this._partialQueryResponses.delete(hash);\n return partialQueryResponse;\n }\n\n private async _hasCacheEntry(cacheType: CacheTypes, hash: string): Promise<Cacheability | false> {\n try {\n return await this._cache.has(`${cacheType}::${hash}`);\n } catch (error) {\n return false;\n }\n }\n\n private _isFieldEntity(fieldData: any, { isEntity, possibleTypes }: FieldTypeInfo): boolean {\n if (!get(fieldData, this._typeIDKey, null)) {\n return false;\n }\n\n if (isEntity) {\n return true;\n }\n\n if (!possibleTypes.length) {\n return false;\n }\n\n return possibleTypes.some(type => type.typeName === fieldData.__typename);\n }\n\n private _mergeObjects<T>(obj: T, src: T): T {\n return mergeObjects(obj, src, (_key: string, val: any): string | number | undefined => {\n return isPlainObject(val) && val[this._typeIDKey] ? val[this._typeIDKey] : undefined;\n });\n }\n\n private _mergeResponseData(\n responseData: PlainObjectMap,\n partialQueryResponse?: PartialQueryResponse,\n ): PlainObjectMap {\n if (!partialQueryResponse) {\n return responseData;\n }\n\n return this._mergeObjects(partialQueryResponse.data, responseData);\n }\n\n private async _parseEntityAndRequestFieldPathCacheEntryData(\n field: FieldNode,\n ancestorKeysAndPaths: AncestorKeysAndPaths,\n { cacheMetadata, entityData, requestFieldPathData }: ResponseDataForCaching,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n const keysAndPaths = buildFieldKeysAndPaths(field, ancestorKeysAndPaths, context);\n const { requestFieldCacheKey, requestFieldPath, responseDataPath } = keysAndPaths;\n const fieldData = get(requestFieldPathData, responseDataPath);\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath);\n\n if (!isObjectLike(fieldData) && !fieldTypeInfo?.hasDirectives) {\n return;\n }\n\n if (isObjectLike(fieldData)) {\n const promises: Promise<void>[] = [];\n\n iterateChildFields(\n field,\n fieldData as PlainObjectMap | any[],\n context.fragmentDefinitions,\n (\n childField: FieldNode,\n _typeName: string | undefined,\n _fragmentKind: string | undefined,\n _fragmentName: string | undefined,\n childIndex?: number,\n ) => {\n promises.push(\n this._parseEntityAndRequestFieldPathCacheEntryData(\n childField,\n { index: childIndex, requestFieldCacheKey, requestFieldPath, responseDataPath },\n { cacheMetadata, entityData, requestFieldPathData },\n options,\n context,\n ),\n );\n },\n );\n\n await Promise.all(promises);\n }\n\n await this._setEntityAndRequestFieldPathCacheEntry(\n field,\n keysAndPaths,\n { cacheMetadata, entityData, requestFieldPathData },\n options,\n context,\n );\n }\n\n private async _retrieveCachedEntityData(\n validTypeIDValue: string | number,\n { possibleTypes, typeName }: FieldTypeInfo,\n options: RequestOptions,\n context: CacheManagerContext,\n ) {\n const typeNames = [...possibleTypes.map(type => type.typeName), typeName];\n\n const checkResults = await Promise.all(\n typeNames.map(name => this._checkCacheEntry(DATA_ENTITIES, `${name}::${validTypeIDValue}`, options, context)),\n );\n\n const validResults = checkResults.filter(result => !!result) as CheckCacheEntryResult[];\n let validResult: CheckCacheEntryResult | undefined;\n\n if (validResults.length === 1) {\n validResult = validResults[0];\n } else if (validResults.length > 1) {\n validResults.sort(({ cacheability: a }, { cacheability: b }) => a.metadata.ttl - b.metadata.ttl);\n\n validResult = {\n cacheability: validResults[0].cacheability,\n entry: validResults.reduce((obj, { entry }) => this._mergeObjects(obj, entry), {}),\n };\n }\n\n return (validResult || {}) as Partial<CheckCacheEntryResult>;\n }\n\n private async _retrieveCachedParentNodeData(\n { entityData: ancestorEntityData, requestFieldPathData: ancestorRequestFieldPathData }: CachedAncestorFieldData,\n { hashedRequestFieldCacheKey, propNameOrIndex }: KeysAndPaths,\n fieldTypeInfo: FieldTypeInfo,\n options: RequestOptions,\n context: CacheManagerContext,\n ) {\n let entityData = CacheManager._getFieldDataFromAncestor(ancestorEntityData, propNameOrIndex);\n let requestFieldPathData = CacheManager._getFieldDataFromAncestor(ancestorRequestFieldPathData, propNameOrIndex);\n let cacheability: Cacheability | undefined;\n\n if (CacheManager._isNodeRequestFieldPath(fieldTypeInfo)) {\n const { cacheability: entryCacheability, entry } = await this._retrieveCachedRequestFieldPathData(\n hashedRequestFieldCacheKey,\n options,\n context,\n );\n\n if (entry) {\n requestFieldPathData = this._mergeObjects(requestFieldPathData, entry);\n }\n\n if (entryCacheability) {\n cacheability = entryCacheability;\n }\n }\n\n const validTypeIDValue = getValidTypeIDValue(requestFieldPathData, fieldTypeInfo, this._typeIDKey);\n\n if (CacheManager._isNodeEntity(fieldTypeInfo) && validTypeIDValue) {\n const { cacheability: entryCacheability, entry } = await this._retrieveCachedEntityData(\n validTypeIDValue,\n fieldTypeInfo,\n options,\n context,\n );\n\n if (entry) {\n entityData = this._mergeObjects(entityData, entry);\n }\n\n if (entryCacheability && (!cacheability || entryCacheability.metadata.ttl > cacheability?.metadata.ttl)) {\n cacheability = entryCacheability;\n }\n }\n\n const data =\n !isUndefined(requestFieldPathData) || !isUndefined(entityData)\n ? this._mergeObjects(requestFieldPathData, entityData)\n : entityData ?? requestFieldPathData;\n\n return {\n cacheability,\n data,\n entityData,\n requestFieldPathData,\n };\n }\n\n private async _retrieveCachedRequestFieldPathData(\n hash: string,\n options: RequestOptions,\n context: CacheManagerContext,\n ) {\n return (this._checkCacheEntry(REQUEST_FIELD_PATHS, hash, options, context) || {}) as Partial<CheckCacheEntryResult>;\n }\n\n private async _retrieveCachedResponseData(\n { ast }: RequestData,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<CachedResponseData> {\n const cachedResponseData: CachedResponseData = {\n cacheMetadata: new Map(),\n data: {},\n fieldCount: { missing: 0, total: 0 },\n fieldPathChecklist: new Map(),\n };\n\n const queryNode = getOperationDefinitions(ast, context.operation)[0];\n const fieldsAndTypeNames = getChildFields(queryNode);\n\n if (!fieldsAndTypeNames) {\n return cachedResponseData;\n }\n\n await Promise.all(\n fieldsAndTypeNames.map(({ fieldNode }) =>\n this._analyzeFieldNode(\n fieldNode,\n { requestFieldPath: context.operation },\n cachedResponseData,\n options,\n context,\n ),\n ),\n );\n\n cachedResponseData.fieldCount = CacheManager._countFieldPathChecklist(cachedResponseData.fieldPathChecklist);\n return cachedResponseData;\n }\n\n private _retrieveResponseDataForCaching(\n normalizedResponseData: RawResponseDataWithMaybeCacheMetadata,\n context: CacheManagerContext,\n ) {\n const responseChunks = this._responseChunksAwaitingCaching.get(\n context.boxID,\n ) as RawResponseDataWithMaybeCacheMetadata[];\n\n this._responseChunksAwaitingCaching.delete(context.boxID);\n return mergeResponseDataSets([...responseChunks, normalizedResponseData]);\n }\n\n @logCacheEntry()\n private async _setCacheEntry(\n cacheType: CacheTypes,\n hash: string,\n value: any,\n cachemapOptions: CachemapOptions,\n _options: RequestOptions,\n _context: CacheManagerContext,\n ): Promise<void> {\n try {\n await this._cache.set(`${cacheType}::${hash}`, cloneDeep(value), cachemapOptions);\n } catch (error) {\n // no catch\n }\n }\n\n private async _setEntityAndRequestFieldPathCacheEntries(\n requestData: RequestData,\n responseData: ResponseDataForCaching,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n const operationNode = getOperationDefinitions(requestData.ast, context.operation)[0];\n const fieldsAndTypeNames = getChildFields(operationNode);\n\n if (!fieldsAndTypeNames) {\n return;\n }\n\n await Promise.all(\n fieldsAndTypeNames.map(({ fieldNode }) => {\n return this._parseEntityAndRequestFieldPathCacheEntryData(\n fieldNode,\n { requestFieldPath: context.operation },\n responseData,\n options,\n context,\n );\n }),\n );\n }\n\n private async _setEntityAndRequestFieldPathCacheEntry(\n field: FieldNode,\n keysAndPaths: KeysAndPaths,\n { cacheMetadata, entityData, requestFieldPathData }: ResponseDataForCaching,\n options: RequestOptions,\n context: CacheManagerContext,\n ) {\n const { requestFieldPath, responseDataPath } = keysAndPaths;\n const fieldData = get(entityData, responseDataPath);\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath);\n const cacheability = cacheMetadata.get(requestFieldPath);\n\n if (isUndefined(fieldData) || !fieldTypeInfo || !cacheability) {\n return;\n }\n\n const promises: Promise<void>[] = [];\n\n promises.push(\n this._setRequestFieldPathCacheEntry(\n field,\n keysAndPaths,\n { cacheability, data: requestFieldPathData, fieldTypeInfo },\n options,\n context,\n ),\n );\n\n const isEntity = this._isFieldEntity(fieldData, fieldTypeInfo);\n\n if (!isEntity && fieldTypeInfo.hasArguments) {\n unset(entityData, responseDataPath);\n }\n\n if (isEntity) {\n promises.push(\n this._setEntityCacheEntry(keysAndPaths, { cacheability, data: entityData, fieldTypeInfo }, options, context),\n );\n }\n\n await Promise.all(promises);\n }\n\n private async _setEntityCacheEntry(\n { responseDataPath }: KeysAndPaths,\n { cacheability, data, fieldTypeInfo }: DataForCachingEntry,\n options: RequestOptions,\n context: CacheManagerContext,\n ) {\n let fieldData = get(data, responseDataPath);\n const fieldTypeName = fieldTypeInfo.isEntity ? fieldTypeInfo.typeName : fieldData.__typename;\n const entityDataKey = `${fieldTypeName}::${fieldData[this._typeIDKey]}`;\n const result = await this._checkCacheEntry(DATA_ENTITIES, entityDataKey, options, context);\n\n if (result) {\n fieldData = this._mergeObjects(result.entry, fieldData);\n }\n\n await this._setCacheEntry(\n DATA_ENTITIES,\n entityDataKey,\n fieldData,\n { cacheHeaders: { cacheControl: cacheability.printCacheControl() }, tag: options.tag },\n options,\n context,\n );\n\n set(data, responseDataPath, { __cacheKey: `${DATA_ENTITIES}::${entityDataKey}` });\n }\n\n private _setFieldCacheability(\n field: FieldNode,\n ancestorKeysAndPaths: AncestorKeysAndPaths,\n { cacheMetadata, data }: ResponseData,\n options: RequestOptions,\n context: CacheManagerContext,\n ): void {\n const { requestFieldPath: ancestorRequestFieldPath } = ancestorKeysAndPaths;\n const keysAndPaths = buildFieldKeysAndPaths(field, ancestorKeysAndPaths, context);\n const { requestFieldPath, responseDataPath } = keysAndPaths;\n const fieldData = get(data, responseDataPath);\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath);\n\n if (!isObjectLike(fieldData) && !fieldTypeInfo?.hasDirectives) {\n return;\n }\n\n this._setFieldTypeCacheDirective(cacheMetadata, { ancestorRequestFieldPath, requestFieldPath }, context);\n\n if (isObjectLike(fieldData)) {\n iterateChildFields(\n field,\n fieldData as PlainObjectMap | any[],\n context.fragmentDefinitions,\n (\n childField: FieldNode,\n _typeName: string | undefined,\n _fragmentKind: string | undefined,\n _fragmentName: string | undefined,\n childIndex?: number,\n ) => {\n this._setFieldCacheability(\n childField,\n { index: childIndex, requestFieldPath, responseDataPath },\n { cacheMetadata, data },\n options,\n context,\n );\n },\n );\n }\n }\n\n private _setFieldTypeCacheDirective(\n cacheMetadata: CacheMetadata,\n { ancestorRequestFieldPath, requestFieldPath }: { ancestorRequestFieldPath?: string; requestFieldPath: string },\n { fieldTypeMap, operation }: CacheManagerContext,\n ): void {\n if (cacheMetadata.has(requestFieldPath)) {\n return;\n }\n\n const fieldTypeInfo = fieldTypeMap.get(requestFieldPath);\n\n if (fieldTypeInfo && this._typeCacheDirectives[fieldTypeInfo.typeName]) {\n const cacheability = new Cacheability({ cacheControl: this._typeCacheDirectives[fieldTypeInfo.typeName] });\n CacheManager._setCacheMetadata(cacheMetadata, cacheability, requestFieldPath, operation);\n } else if (this._cascadeCacheControl && ancestorRequestFieldPath) {\n CacheManager._setCacheMetadata(\n cacheMetadata,\n cacheMetadata.get(ancestorRequestFieldPath),\n requestFieldPath,\n operation,\n );\n }\n }\n\n @logPartialCompiled()\n private async _setPartialQueryResponse(\n hash: string,\n partialQueryResponse: PartialQueryResponse,\n _options: RequestOptions,\n _context: CacheManagerContext,\n ): Promise<void> {\n this._partialQueryResponses.set(hash, partialQueryResponse);\n }\n\n private async _setQueryResponseCacheEntry(\n hash: string,\n { cacheMetadata, data }: ResponseData,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n const dehydratedCacheMetadata = dehydrateCacheMetadata(cacheMetadata);\n const cacheControl = CacheManager._getOperationCacheControl(cacheMetadata, context.operation);\n\n await this._setCacheEntry(\n QUERY_RESPONSES,\n hash,\n { cacheMetadata: dehydratedCacheMetadata, data },\n { cacheHeaders: { cacheControl }, tag: options.tag },\n options,\n context,\n );\n }\n\n private async _setRequestFieldPathCacheEntry(\n field: FieldNode,\n keysAndPaths: KeysAndPaths,\n { cacheability, data, fieldTypeInfo }: DataForCachingEntry,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n const { hashedRequestFieldCacheKey, responseDataPath } = keysAndPaths;\n let fieldData = get(data, responseDataPath);\n const isEntity = this._isFieldEntity(fieldData, fieldTypeInfo);\n const hasArgsOrDirectives = fieldTypeInfo.hasArguments || fieldTypeInfo.hasDirectives;\n\n if (context.operation === QUERY && (isEntity || hasArgsOrDirectives)) {\n if (isPlainObject(fieldData) && field.selectionSet?.selections) {\n fieldData = filterOutPropsWithArgsOrDirectives(fieldData, field.selectionSet.selections, keysAndPaths, context);\n }\n\n const result = await this._checkCacheEntry(REQUEST_FIELD_PATHS, hashedRequestFieldCacheKey, options, context);\n\n if (result && isObjectLike(fieldData)) {\n fieldData = this._mergeObjects(result.entry, fieldData);\n }\n\n await this._setCacheEntry(\n REQUEST_FIELD_PATHS,\n hashedRequestFieldCacheKey,\n fieldData,\n { cacheHeaders: { cacheControl: cacheability.printCacheControl() }, tag: options.tag },\n options,\n context,\n );\n\n if (hasChildFields(field, { fragmentDefinitions: context.fragmentDefinitions })) {\n if (isEntity) {\n set(data, responseDataPath, { __cacheKey: `${REQUEST_FIELD_PATHS}::${hashedRequestFieldCacheKey}` });\n } else {\n unset(data, responseDataPath);\n }\n }\n }\n }\n\n private _setResponseChunksAwaitingCaching(\n normalizedResponseData: RawResponseDataWithMaybeCacheMetadata,\n context: CacheManagerContext,\n ) {\n const responseChunks = this._responseChunksAwaitingCaching.get(context.boxID);\n\n if (responseChunks) {\n this._responseChunksAwaitingCaching.set(context.boxID, [...responseChunks, normalizedResponseData]);\n } else {\n this._responseChunksAwaitingCaching.set(context.boxID, [normalizedResponseData]);\n }\n }\n}\n\nexport default function init(userOptions: UserOptions): CacheManagerInit {\n if (!isPlainObject(userOptions)) {\n throw new TypeError(\"@graphql-box/cache-manager expected userOptions to be a plain object.\");\n }\n\n return (clientOptions: ClientOptions) => new CacheManager({ ...clientOptions, ...userOptions });\n}\n","import { RequestContext } from \"@graphql-box/core\";\nimport { CACHE_ENTRY_QUERIED } from \"../../consts\";\n\nexport default function logCacheQuery() {\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 try {\n return new Promise(async resolve => {\n const { debugManager, ...otherContext } = args[3] as RequestContext;\n\n if (!debugManager) {\n resolve(await method.apply(this, args));\n return;\n }\n\n const startTime = debugManager.now();\n const result = await method.apply(this, args);\n const endTime = debugManager.now();\n const duration = endTime - startTime;\n resolve(result);\n\n debugManager.emit(CACHE_ENTRY_QUERIED, {\n cacheType: args[0],\n context: otherContext,\n hash: args[1],\n options: args[2],\n result,\n stats: { duration, endTime, startTime },\n });\n });\n } catch (error) {\n return Promise.reject(error);\n }\n };\n };\n}\n","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","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","import { DehydratedCacheMetadata } from \"@graphql-box/core\";\nimport Cacheability from \"cacheability\";\nimport { isEmpty } from \"lodash\";\nimport { HEADER_CACHE_CONTROL } from \"../consts\";\n\nexport type Params = {\n _cacheMetadata?: DehydratedCacheMetadata;\n fallback: string;\n headers?: Headers;\n};\n\nexport default ({ _cacheMetadata, fallback, headers }: Params): Cacheability => {\n if (_cacheMetadata && !isEmpty(_cacheMetadata)) {\n const [first, ...rest] = Object.values(_cacheMetadata);\n\n return new Cacheability({\n metadata: rest.reduce((acc, metadata) => {\n if (metadata.ttl < acc.ttl) {\n return metadata;\n }\n\n return acc;\n }, first),\n });\n }\n\n if (headers && headers.has(HEADER_CACHE_CONTROL)) {\n return new Cacheability({ headers });\n }\n\n return new Cacheability({ cacheControl: fallback });\n};\n","import { RawResponseDataWithMaybeCacheMetadata } from \"@graphql-box/core\";\nimport { merge } from \"lodash\";\n\nexport default (responseDataSets: RawResponseDataWithMaybeCacheMetadata[]) => {\n return responseDataSets.reduce(\n (acc: RawResponseDataWithMaybeCacheMetadata, dataSet, index) => {\n const { _cacheMetadata, data, hasNext, headers, paths } = dataSet;\n\n if (_cacheMetadata) {\n acc._cacheMetadata = acc._cacheMetadata ? { ...acc._cacheMetadata, ..._cacheMetadata } : _cacheMetadata;\n }\n\n acc.data = acc.data ? merge(acc.data, data) : data;\n\n if (index === 0) {\n acc.headers = headers;\n }\n\n if (index === responseDataSets.length - 1) {\n acc.hasNext = hasNext;\n }\n\n if (paths) {\n if (!acc.paths) {\n acc.paths = [];\n }\n\n acc.paths.push(paths[0]);\n }\n\n return acc;\n },\n { data: {} },\n );\n};\n"],"names":["CACHE_ENTRY_ADDED","CACHE_ENTRY_QUERIED","PARTIAL_QUERY_COMPILED","buildKey","path","key","paths","length","push","join","buildFieldKeysAndPaths","field","options","context","name","getName","index","requestFieldCacheKey","requestFieldPath","responseDataPath","fieldAliasOrName","getAlias","updatedRequestFieldPath","_isNumber","fieldTypeInfo","fieldTypeMap","get","updatedRequestFieldCacheKey","args","directives","JSON","stringify","inherited","_directives$inherited","own","_directives$own","buildRequestFieldCacheKey","getArguments","propNameOrIndex","updatedResponseDataPath","hashedRequestFieldCacheKey","hashRequest","fieldData","selectionNodes","ancestorKeysAndPaths","fieldAndTypeName","resolveFragments","fragmentDefinitions","_keys","reduce","acc","match","find","fieldNode","hasArguments","hasDirectives","fieldPathChecklistValues","fieldTypeName","hasData","typeUnused","typeName","undefined","some","every","filterField","fieldPathChecklist","fragmentSpreadChecklist","ancestorRequestFieldPath","typeIDKey","fieldsAndTypeNames","getChildFields","fragmentSpreadFieldCounter","i","childField","fragmentKind","fragmentName","childTypeName","FRAGMENT_SPREAD","total","_getChildFields","childFieldName","TYPE_NAME_KEY","checkFieldPathChecklist","hasChildFields","deleteChildFields","_isEmpty","forEach","deleteFragmentSpreads","deleted","filterFragmentSpreads","inlineFragments","getInlineFragments","filtered","fragment","deleteInlineFragments","filterInlineFragments","fieldNames","map","filterIDsAndTypeNames","requestData","ast","queryNode","getOperationDefinitions","operation","request","getFragmentDefinitions","RegExp","createFragmentSpreadChecklist","queryFiltered","definitionsToFilter","namesAndPaths","fragmentDefinition","definitionsToDelete","names","deleteFragmentDefinitions","include","filterFragmentDefinitions","rawResponseData","hasDeferOrStream","hasNext","normalizePatchResponseData","data","_set","getValidTypeIDValue","requestFieldPathData","typeIDValue","requestFieldPathDataIDValue","_isPlainObject","CacheManager","_target","_propertyName","descriptor","method","value","Promise","resolve","debugManager","otherContext","apply","_this","startTime","now","result","endTime","duration","emit","cacheType","hash","stats","reject","cachemapOptions","partialQueryResponse","Map","errors","cache","TypeError","typeCacheDirectives","_cache","_cascadeCacheControl","cascadeCacheControl","_fallbackOperationCacheability","fallbackOperationCacheability","_typeCacheDirectives","_typeIDKey","this","cacheManagerContext","_retrieveCachedResponseData","cachedResponseData","cacheMetadata","fieldCount","missing","updated","dataCaching","_setQueryResponseCacheEntry","awaitDataCaching","response","_setPartialQueryResponse","filteredAST","filterQuery","rest","print","updatedRequestData","_cacheResponse","_checkCacheEntry","QUERY_RESPONSES","entry","rehydrateCacheMetadata","_partialQueryResponses","delete","cachedAncestorFieldData","_analyzeParentFieldNode","_analyzeLeafFieldNode","keysAndPaths","entityData","typeNamesAndKind","dataTypeName","__typename","_isNodeRequestFieldPath","_retrieveCachedRequestFieldPathData","cacheability","_setCachedResponseData","cachedFieldData","_getFieldDataFromAncestor","_setFieldPathChecklist","_setCachedData","_retrieveCachedParentNodeData","_get","_isObjectLike","promises","iterateChildFields","childFragmentKind","childFragmentName","childIndex","_analyzeFieldNode","all","otherProps","_createCacheMetadata","_this2","_setFieldCacheability","normalizedResponseData","responseDataForCaching","isNotLastResponseChunk","_setResponseChunksAwaitingCaching","isLastResponseChunk","_retrieveResponseDataForCaching","_buildCacheMetadata","_setEntityAndRequestFieldPathCacheEntries","_cloneDeep","QUERY","_getPartialQueryResponse","queryCacheMetadata","_mergeResponseCacheMetadata","queryData","_mergeResponseData","isNotResponseChunk","_hasCacheEntry","_isValid","_getCacheEntry","_isUndefined","_cacheMetadata","headers","fallback","Object","values","first","Cacheability","metadata","ttl","has","cacheControl","deriveOpCacheability","set","_options","_context","isEntity","possibleTypes","type","obj","src","mergeObjects","_key","val","_this3","responseData","_mergeObjects","_typeName","_fragmentKind","_fragmentName","_this4","_parseEntityAndRequestFieldPathCacheEntryData","_setEntityAndRequestFieldPathCacheEntry","validTypeIDValue","typeNames","_this5","DATA_ENTITIES","checkResults","validResults","filter","validResult","sort","a","b","ancestorEntityData","ancestorRequestFieldPathData","entryCacheability","_isNodeEntity","_retrieveCachedEntityData","_cacheability","REQUEST_FIELD_PATHS","_this6","_countFieldPathChecklist","responseDataSets","responseChunks","_responseChunksAwaitingCaching","boxID","dataSet","_merge","operationNode","_this7","_setRequestFieldPathCacheEntry","_isFieldEntity","_setEntityCacheEntry","entityDataKey","_setCacheEntry","cacheHeaders","printCacheControl","tag","__cacheKey","_setFieldTypeCacheDirective","_this8","_setCacheMetadata","dehydratedCacheMetadata","dehydrateCacheMetadata","_getOperationCacheControl","hasArgsOrDirectives","selectionSet","_field$selectionSet","selections","filterOutPropsWithArgsOrDirectives","checklistValues","ancestorFieldData","checkTTL","objectLikeData","_isArray","operationCacheability","userOptions","clientOptions"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../cache-manager/src/consts/index.ts","../cache-manager/src/helpers/deriveOpCacheability.ts","../cache-manager/src/helpers/filterOutPropsWithArgsOrDirectives.ts","../cache-manager/src/helpers/checkFieldPathChecklist.ts","../cache-manager/src/helpers/filterField.ts","../cache-manager/src/helpers/filterFragmentSpreads.ts","../cache-manager/src/helpers/filterInlineFragments.ts","../cache-manager/src/helpers/filterIDsAndTypeNames.ts","../cache-manager/src/helpers/filterQuery.ts","../cache-manager/src/helpers/createFragmentSpreadChecklist.ts","../cache-manager/src/helpers/filterFragmentDefinitions.ts","../cache-manager/src/helpers/isLastResponseChunk.ts","../cache-manager/src/helpers/isNotLastResponseChunk.ts","../cache-manager/src/helpers/isNotResponseChunk.ts","../cache-manager/src/helpers/normalizePatchResponseData.ts","../cache-manager/src/helpers/validTypeIDValue.ts","../cache-manager/src/main/index.ts","../cache-manager/src/debug/log-cache-query/index.ts","../cache-manager/src/debug/log-cache-entry/index.ts","../cache-manager/src/debug/log-partial-compiled/index.ts","../cache-manager/src/helpers/mergeResponseDataSets.ts"],"sourcesContent":["export const METADATA = \"metadata\";\nexport const CACHE_CONTROL = \"cacheControl\";\nexport const NO_CACHE = \"noCache\";\n\nexport const HEADER_CACHE_CONTROL = \"cache-control\";\nexport const HEADER_NO_CACHE = \"no-cache\";\n\nexport const CACHE_ENTRY_ADDED = \"cache_entry_added\";\nexport const CACHE_ENTRY_QUERIED = \"cache_entry_queried\";\nexport const PARTIAL_QUERY_COMPILED = \"partial_query_compiled\";\n","import { DehydratedCacheMetadata } from \"@graphql-box/core\";\nimport Cacheability from \"cacheability\";\nimport { isEmpty } from \"lodash\";\nimport { HEADER_CACHE_CONTROL } from \"../consts\";\n\nexport type Params = {\n _cacheMetadata?: DehydratedCacheMetadata;\n fallback: string;\n headers?: Headers;\n};\n\nexport default ({ _cacheMetadata, fallback, headers }: Params): Cacheability => {\n if (_cacheMetadata && !isEmpty(_cacheMetadata)) {\n const [first, ...rest] = Object.values(_cacheMetadata);\n\n return new Cacheability({\n metadata: rest.reduce((acc, metadata) => {\n if (metadata.ttl < acc.ttl) {\n return metadata;\n }\n\n return acc;\n }, first),\n });\n }\n\n if (headers && headers.has(HEADER_CACHE_CONTROL)) {\n return new Cacheability({ headers });\n }\n\n return new Cacheability({ cacheControl: fallback });\n};\n","import { PlainObjectMap } from \"@graphql-box/core\";\nimport { KeysAndPaths, buildFieldKeysAndPaths, getName, resolveFragments } from \"@graphql-box/helpers\";\nimport { FieldNode, SelectionNode } from \"graphql\";\nimport { keys } from \"lodash\";\nimport { CacheManagerContext } from \"../defs\";\n\nexport default (\n fieldData: PlainObjectMap,\n selectionNodes: readonly SelectionNode[],\n ancestorKeysAndPaths: KeysAndPaths,\n context: CacheManagerContext,\n) => {\n const fieldAndTypeName = resolveFragments(selectionNodes, context.fragmentDefinitions);\n\n return keys(fieldData).reduce((acc: PlainObjectMap, key) => {\n const match = fieldAndTypeName.find(({ fieldNode }) => (getName(fieldNode) as FieldNode[\"name\"][\"value\"]) === key);\n\n if (match) {\n const { requestFieldPath } = buildFieldKeysAndPaths(match.fieldNode, ancestorKeysAndPaths, context);\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath);\n\n if (!fieldTypeInfo?.hasArguments && !fieldTypeInfo?.hasDirectives) {\n acc[key] = fieldData[key];\n }\n }\n\n return acc;\n }, {});\n};\n","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","import { TYPE_NAME_KEY } from \"@graphql-box/core\";\nimport {\n FRAGMENT_SPREAD,\n buildFieldKeysAndPaths,\n deleteChildFields,\n getChildFields,\n getName,\n hasChildFields,\n} from \"@graphql-box/helpers\";\nimport { FieldNode, FragmentDefinitionNode, OperationDefinitionNode } from \"graphql\";\nimport { CacheManagerContext, FieldPathChecklist, FragmentSpreadFieldCounter } from \"../defs\";\nimport checkFieldPathChecklist from \"./checkFieldPathChecklist\";\nimport { FragmentSpreadCheckist } from \"./createFragmentSpreadChecklist\";\nimport filterFragmentSpreads from \"./filterFragmentSpreads\";\nimport filterIDsAndTypeNames from \"./filterIDsAndTypeNames\";\nimport filterInlineFragments from \"./filterInlineFragments\";\n\nconst filterField = (\n field: FieldNode | FragmentDefinitionNode | OperationDefinitionNode,\n fieldPathChecklist: FieldPathChecklist,\n fragmentSpreadChecklist: FragmentSpreadCheckist,\n ancestorRequestFieldPath: string,\n context: CacheManagerContext,\n): boolean => {\n const { fragmentDefinitions, typeIDKey } = context;\n const fieldsAndTypeNames = getChildFields(field, { fragmentDefinitions });\n\n if (!fieldsAndTypeNames) {\n return false;\n }\n\n const fragmentSpreadFieldCounter: FragmentSpreadFieldCounter = {};\n\n for (let i = fieldsAndTypeNames.length - 1; i >= 0; i -= 1) {\n const { fieldNode: childField, fragmentKind, fragmentName, typeName: childTypeName } = fieldsAndTypeNames[i];\n\n if (fragmentKind === FRAGMENT_SPREAD && fragmentName && !fragmentSpreadFieldCounter[fragmentName]) {\n fragmentSpreadFieldCounter[fragmentName] = {\n hasData: 0,\n total: fragmentDefinitions?.[fragmentName]\n ? getChildFields(fragmentDefinitions?.[fragmentName], { fragmentDefinitions })?.length ?? 0\n : 0,\n };\n }\n\n const childFieldName = getName(childField);\n\n if (childFieldName === typeIDKey || childFieldName === TYPE_NAME_KEY) {\n continue;\n }\n\n const { requestFieldPath } = buildFieldKeysAndPaths(\n childField,\n {\n requestFieldPath: ancestorRequestFieldPath,\n },\n context,\n );\n\n const { hasData, typeUnused } = checkFieldPathChecklist(fieldPathChecklist.get(requestFieldPath), childTypeName);\n\n if (hasData || typeUnused) {\n if (fragmentKind === FRAGMENT_SPREAD) {\n fragmentSpreadFieldCounter[fragmentName as string].hasData += 1;\n } else if (!hasChildFields(childField, { fragmentDefinitions })) {\n deleteChildFields(field, childField);\n } else if (filterField(childField, fieldPathChecklist, fragmentSpreadChecklist, requestFieldPath, context)) {\n deleteChildFields(field, childField);\n }\n }\n }\n\n filterFragmentSpreads(field, fragmentSpreadFieldCounter, fragmentSpreadChecklist, ancestorRequestFieldPath);\n filterInlineFragments(field, context);\n filterIDsAndTypeNames(field, context);\n return !hasChildFields(field, { fragmentDefinitions });\n};\n\nexport default filterField;\n","import { deleteFragmentSpreads } from \"@graphql-box/helpers\";\nimport { FieldNode, FragmentDefinitionNode, OperationDefinitionNode } from \"graphql\";\nimport { isEmpty, keys } from \"lodash\";\nimport { FragmentSpreadFieldCounter } from \"../defs\";\nimport { FragmentSpreadCheckist } from \"./createFragmentSpreadChecklist\";\n\nexport default (\n field: FieldNode | FragmentDefinitionNode | OperationDefinitionNode,\n fragmentSpreadFieldCounter: FragmentSpreadFieldCounter,\n fragmentSpreadChecklist: FragmentSpreadCheckist,\n ancestorRequestFieldPath: string,\n) => {\n if (isEmpty(fragmentSpreadFieldCounter)) {\n return;\n }\n\n keys(fragmentSpreadFieldCounter).forEach(key => {\n fragmentSpreadChecklist[key].paths.push(ancestorRequestFieldPath);\n\n const { hasData, total } = fragmentSpreadFieldCounter[key];\n\n if (hasData === total) {\n deleteFragmentSpreads(field, key);\n fragmentSpreadChecklist[key].deleted += 1;\n }\n });\n};\n","import { deleteInlineFragments, getChildFields, getInlineFragments, getName } from \"@graphql-box/helpers\";\nimport { FieldNode, FragmentDefinitionNode, OperationDefinitionNode } from \"graphql\";\nimport { CacheManagerContext } from \"..\";\n\nexport default (\n field: FieldNode | FragmentDefinitionNode | OperationDefinitionNode,\n { fragmentDefinitions, typeIDKey }: CacheManagerContext,\n) => {\n const inlineFragments = getInlineFragments(field);\n let filtered = false;\n\n inlineFragments.forEach(fragment => {\n const fieldsAndTypeNames = getChildFields(fragment, { fragmentDefinitions });\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) === typeIDKey) {\n deleteInlineFragments(field, fragment);\n filtered = true;\n }\n }\n });\n\n return filtered;\n};\n","import { TYPE_NAME_KEY } from \"@graphql-box/core\";\nimport { deleteChildFields, getChildFields, getName } from \"@graphql-box/helpers\";\nimport { FieldNode, FragmentDefinitionNode, OperationDefinitionNode } from \"graphql\";\nimport { CacheManagerContext } from \"../defs\";\n\nexport default (\n field: FieldNode | FragmentDefinitionNode | OperationDefinitionNode,\n { fragmentDefinitions, typeIDKey }: CacheManagerContext,\n) => {\n const fieldsAndTypeNames = getChildFields(field, { fragmentDefinitions });\n\n if (!fieldsAndTypeNames || fieldsAndTypeNames.length > 3) {\n return false;\n }\n\n const fieldNames = fieldsAndTypeNames.map(({ fieldNode }) => getName(fieldNode) as FieldNode[\"name\"][\"value\"]);\n\n if (fieldNames.length === 2 && fieldNames.every(name => name === 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] === 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","import { RequestData } from \"@graphql-box/core\";\nimport {\n buildFieldKeysAndPaths,\n deleteChildFields,\n getChildFields,\n getOperationDefinitions,\n} from \"@graphql-box/helpers\";\nimport { CacheManagerContext, CachedResponseData } from \"../defs\";\nimport createFragmentSpreadChecklist from \"./createFragmentSpreadChecklist\";\nimport filterField from \"./filterField\";\nimport filterFragmentDefinitions from \"./filterFragmentDefinitions\";\n\nexport default (requestData: RequestData, { fieldPathChecklist }: CachedResponseData, context: CacheManagerContext) => {\n const { ast } = requestData;\n const queryNode = getOperationDefinitions(ast, context.operation)[0];\n const { fragmentDefinitions } = context;\n const fieldsAndTypeNames = getChildFields(queryNode, { fragmentDefinitions });\n\n if (!fieldsAndTypeNames) {\n return ast;\n }\n\n const fragmentSpreadChecklist = createFragmentSpreadChecklist(requestData, context);\n\n for (let i = fieldsAndTypeNames.length - 1; i >= 0; i -= 1) {\n const { fieldNode } = fieldsAndTypeNames[i];\n\n const { requestFieldPath } = buildFieldKeysAndPaths(\n fieldNode,\n {\n requestFieldPath: context.operation,\n },\n context,\n );\n\n if (filterField(fieldNode, fieldPathChecklist, fragmentSpreadChecklist, requestFieldPath, context)) {\n deleteChildFields(queryNode, fieldNode);\n }\n }\n\n context.queryFiltered = true;\n return filterFragmentDefinitions(ast, fieldPathChecklist, fragmentSpreadChecklist, context);\n};\n","import { RequestData } from \"@graphql-box/core\";\nimport { keys } from \"lodash\";\nimport { CacheManagerContext } from \"../defs\";\n\nexport type FragmentSpreadCheckist = {\n [key: string]: {\n deleted: number;\n paths: string[];\n total: number;\n };\n};\n\nexport default ({ request }: RequestData, { fragmentDefinitions }: CacheManagerContext) =>\n keys(fragmentDefinitions ?? {}).reduce((acc: FragmentSpreadCheckist, name) => {\n acc[name] = { deleted: 0, paths: [], total: (request.match(new RegExp(`\\\\.\\\\.\\\\.${name}`, \"g\")) || []).length };\n return acc;\n }, {});\n","import { deleteFragmentDefinitions } from \"@graphql-box/helpers\";\nimport { DocumentNode } from \"graphql\";\nimport { keys } from \"lodash\";\nimport { CacheManagerContext, FieldPathChecklist } from \"../defs\";\nimport { FragmentSpreadCheckist } from \"./createFragmentSpreadChecklist\";\nimport filterField from \"./filterField\";\n\nexport default (\n ast: DocumentNode,\n fieldPathChecklist: FieldPathChecklist,\n fragmentSpreadChecklist: FragmentSpreadCheckist,\n context: CacheManagerContext,\n) => {\n const definitionsToFilter = keys(fragmentSpreadChecklist).reduce(\n (namesAndPaths: { name: string; path: string }[], key) => {\n const { deleted, total } = fragmentSpreadChecklist[key];\n\n return deleted === 0 && total === 1\n ? [...namesAndPaths, { name: key, path: fragmentSpreadChecklist[key].paths[0] as string }]\n : namesAndPaths;\n },\n [],\n );\n\n const { fragmentDefinitions = {} } = context;\n\n definitionsToFilter.forEach(({ name, path }) => {\n const fragmentDefinition = fragmentDefinitions[name];\n filterField(fragmentDefinition, fieldPathChecklist, fragmentSpreadChecklist, path, context);\n });\n\n const definitionsToDelete = keys(fragmentSpreadChecklist).reduce((names: string[], key) => {\n const { deleted, total } = fragmentSpreadChecklist[key];\n return deleted > 0 && deleted === total ? [...names, key] : names;\n }, []);\n\n if (!definitionsToDelete.length) {\n return ast;\n }\n\n return deleteFragmentDefinitions(ast, {\n include: definitionsToDelete,\n });\n};\n","import { RawResponseDataWithMaybeCacheMetadata } from \"@graphql-box/core\";\nimport { CacheManagerContext } from \"..\";\n\nexport default (rawResponseData: RawResponseDataWithMaybeCacheMetadata, context: CacheManagerContext) =>\n context.hasDeferOrStream && !rawResponseData.hasNext && rawResponseData.paths;\n","import { RawResponseDataWithMaybeCacheMetadata } from \"@graphql-box/core\";\nimport { CacheManagerContext } from \"..\";\n\nexport default (rawResponseData: RawResponseDataWithMaybeCacheMetadata, context: CacheManagerContext) =>\n context.hasDeferOrStream && rawResponseData.hasNext;\n","import { RawResponseDataWithMaybeCacheMetadata } from \"@graphql-box/core\";\nimport { CacheManagerContext } from \"..\";\n\nexport default (rawResponseData: RawResponseDataWithMaybeCacheMetadata, context: CacheManagerContext) =>\n !context.hasDeferOrStream && !rawResponseData.hasNext && !rawResponseData.paths;\n","import { RawResponseDataWithMaybeCacheMetadata } from \"@graphql-box/core\";\nimport { set } from \"lodash\";\nimport { CacheManagerContext } from \"..\";\n\nexport default (rawResponseData: RawResponseDataWithMaybeCacheMetadata, context: CacheManagerContext) => {\n if (!context.normalizePatchResponseData) {\n return rawResponseData;\n }\n\n const { data, paths, ...rest } = rawResponseData;\n\n return {\n ...rest,\n data: set({}, (paths as string[])[0], data),\n paths,\n };\n};\n","import { FieldTypeInfo } from \"@graphql-box/core\";\nimport { isPlainObject } from \"lodash\";\n\nexport const getValidTypeIDValue = (\n requestFieldPathData: any,\n { typeIDValue }: FieldTypeInfo,\n typeIDKey: string,\n): string | number | undefined => {\n const requestFieldPathDataIDValue = isPlainObject(requestFieldPathData) ? requestFieldPathData[typeIDKey] : undefined;\n return typeIDValue || requestFieldPathDataIDValue;\n};\n","import Cachemap from \"@cachemap/core\";\nimport {\n CacheMetadata,\n CacheTypes,\n DATA_ENTITIES,\n FieldTypeInfo,\n PlainObjectMap,\n PlainObjectStringMap,\n QUERY,\n QUERY_RESPONSES,\n REQUEST_FIELD_PATHS,\n RawResponseDataWithMaybeCacheMetadata,\n RequestContext,\n RequestData,\n RequestOptions,\n ResponseData,\n TYPE_NAME_KEY,\n} from \"@graphql-box/core\";\nimport {\n FRAGMENT_SPREAD,\n KeysAndPaths,\n buildFieldKeysAndPaths,\n dehydrateCacheMetadata,\n getChildFields,\n getFragmentDefinitions,\n getOperationDefinitions,\n hasChildFields,\n hashRequest,\n iterateChildFields,\n mergeObjects,\n rehydrateCacheMetadata,\n} from \"@graphql-box/helpers\";\nimport Cacheability from \"cacheability\";\nimport { FieldNode, print } from \"graphql\";\nimport { assign, cloneDeep, get, isArray, isObjectLike, isPlainObject, isUndefined, set, unset } from \"lodash\";\nimport { CACHE_CONTROL, HEADER_NO_CACHE, METADATA, NO_CACHE } from \"../consts\";\nimport { logCacheEntry, logCacheQuery, logPartialCompiled } from \"../debug\";\nimport {\n AnalyzeQueryResult,\n AncestorKeysAndPaths,\n CacheManagerContext,\n CacheManagerDef,\n CacheManagerInit,\n CachedAncestorFieldData,\n CachedResponseData,\n CachemapOptions,\n CheckCacheEntryResult,\n ClientOptions,\n ConstructorOptions,\n DataForCachingEntry,\n FieldCount,\n FieldPathChecklist,\n FieldPathChecklistValue,\n MergedCachedFieldData,\n PartialQueryResponse,\n PartialQueryResponses,\n QueryResponseCacheEntry,\n ResponseDataForCaching,\n TypeNamesAndKind,\n UserOptions,\n} from \"../defs\";\nimport deriveOpCacheability from \"../helpers/deriveOpCacheability\";\nimport filterOutPropsWithArgsOrDirectives from \"../helpers/filterOutPropsWithArgsOrDirectives\";\nimport filterQuery from \"../helpers/filterQuery\";\nimport isLastResponseChunk from \"../helpers/isLastResponseChunk\";\nimport isNotLastResponseChunk from \"../helpers/isNotLastResponseChunk\";\nimport isNotResponseChunk from \"../helpers/isNotResponseChunk\";\nimport mergeResponseDataSets from \"../helpers/mergeResponseDataSets\";\nimport normalizePatchResponseData from \"../helpers/normalizePatchResponseData\";\nimport { getValidTypeIDValue } from \"../helpers/validTypeIDValue\";\n\nexport class CacheManager implements CacheManagerDef {\n private static _countFieldPathChecklist(fieldPathChecklist: FieldPathChecklist): FieldCount {\n const fieldCount: FieldCount = { missing: 0, total: 0 };\n\n fieldPathChecklist.forEach(checklistValues => {\n fieldCount.total += checklistValues.length;\n const missing = checklistValues.filter(({ hasData }) => !hasData);\n fieldCount.missing += missing.length;\n });\n\n return fieldCount;\n }\n\n private static _getFieldDataFromAncestor(ancestorFieldData: any, propNameOrIndex: string | number): any {\n return isObjectLike(ancestorFieldData) ? cloneDeep(ancestorFieldData[propNameOrIndex]) : undefined;\n }\n\n private static _getOperationCacheControl(cacheMetadata: CacheMetadata | undefined, operation: string): string {\n const defaultCacheControl = HEADER_NO_CACHE;\n\n if (!cacheMetadata) {\n return defaultCacheControl;\n }\n\n const cacheability = cacheMetadata.get(operation);\n return cacheability ? cacheability.printCacheControl() : defaultCacheControl;\n }\n\n private static _isNodeEntity(fieldTypeInfo?: FieldTypeInfo): boolean {\n if (!fieldTypeInfo) {\n return false;\n }\n\n const { isEntity, possibleTypes } = fieldTypeInfo;\n return isEntity || possibleTypes.some(type => !!type.isEntity);\n }\n\n private static _isNodeRequestFieldPath(fieldTypeInfo?: FieldTypeInfo): boolean {\n return (\n !!fieldTypeInfo &&\n (this._isNodeEntity(fieldTypeInfo) || fieldTypeInfo.hasArguments || fieldTypeInfo.hasDirectives)\n );\n }\n\n private static _isValid(cacheability: Cacheability): boolean {\n const noCache = get(cacheability, [METADATA, CACHE_CONTROL, NO_CACHE], false);\n return !noCache && cacheability.checkTTL();\n }\n\n private static _mergeResponseCacheMetadata(\n cacheMetadata: CacheMetadata,\n partialQueryResponse?: PartialQueryResponse,\n ): CacheMetadata {\n if (!partialQueryResponse) {\n return cacheMetadata;\n }\n\n return new Map([...partialQueryResponse.cacheMetadata, ...cacheMetadata]);\n }\n\n private static _setCachedData(\n requestData: PlainObjectMap,\n { data }: MergedCachedFieldData,\n propNameOrIndex: string | number,\n ): void {\n if (!isObjectLike(data) && !isUndefined(data)) {\n requestData[propNameOrIndex] = data as string | number | boolean | null;\n } else if (isObjectLike(data)) {\n const objectLikeData = data as PlainObjectMap | any[];\n requestData[propNameOrIndex] = isArray(objectLikeData) ? [] : {};\n }\n }\n\n private static _setCachedResponseData(\n cachedFieldData: MergedCachedFieldData,\n { cacheMetadata, data, fieldPathChecklist }: CachedResponseData,\n { propNameOrIndex, requestFieldPath }: KeysAndPaths,\n typeNamesAndKind: TypeNamesAndKind,\n _options: RequestOptions,\n { operation }: CacheManagerContext,\n ) {\n CacheManager._setCacheMetadata(cacheMetadata, cachedFieldData.cacheability, requestFieldPath, operation);\n CacheManager._setFieldPathChecklist(fieldPathChecklist, cachedFieldData, requestFieldPath, typeNamesAndKind);\n CacheManager._setCachedData(data, cachedFieldData, propNameOrIndex);\n }\n\n private static _setCacheMetadata(\n cacheMetadata: CacheMetadata,\n cacheability: Cacheability | undefined,\n requestFieldPath: string,\n operation: string,\n ): void {\n if (!cacheability) {\n return;\n }\n\n cacheMetadata.set(requestFieldPath, cacheability);\n const operationCacheability = cacheMetadata.get(operation);\n\n if (!operationCacheability || operationCacheability.metadata.ttl > cacheability.metadata.ttl) {\n cacheMetadata.set(operation, cacheability);\n }\n }\n\n private static _setFieldPathChecklist(\n fieldPathChecklist: FieldPathChecklist,\n { data }: MergedCachedFieldData,\n requestFieldPath: string,\n { dataTypeName, fieldTypeName, fragmentKind, fragmentName }: TypeNamesAndKind,\n ): void {\n if (isUndefined(fieldTypeName) || fragmentKind === FRAGMENT_SPREAD) {\n if (fieldPathChecklist.has(requestFieldPath)) {\n return;\n }\n\n fieldPathChecklist.set(requestFieldPath, [{ fragmentKind, fragmentName, hasData: !isUndefined(data) }]);\n return;\n }\n\n if (dataTypeName !== fieldTypeName) {\n return;\n }\n\n const entry = fieldPathChecklist.get(requestFieldPath);\n const checklistValues = entry ? (entry as FieldPathChecklistValue[]) : [];\n\n if (checklistValues.some(({ typeName }) => typeName === dataTypeName)) {\n return;\n }\n\n fieldPathChecklist.set(requestFieldPath, [\n ...checklistValues,\n { fragmentKind, fragmentName, hasData: !isUndefined(data), typeName: dataTypeName as string },\n ]);\n }\n\n private _cache: Cachemap;\n private _cascadeCacheControl: boolean;\n private _fallbackOperationCacheability: string;\n private _partialQueryResponses: PartialQueryResponses = new Map();\n private _responseChunksAwaitingCaching: Map<string, RawResponseDataWithMaybeCacheMetadata[]> = new Map();\n private _typeCacheDirectives: PlainObjectStringMap;\n private _typeIDKey: string;\n\n constructor(options: ConstructorOptions) {\n const errors: TypeError[] = [];\n\n if (!options.cache) {\n errors.push(new TypeError(\"@graphql-box/cache-manager expected options.cache.\"));\n }\n\n if (!!options.typeCacheDirectives && !isPlainObject(options.typeCacheDirectives)) {\n const message = \"@graphql-box/cache-manager expected options.typeCacheDirectives to be a plain object.\";\n errors.push(new TypeError(message));\n }\n\n if (errors.length) {\n throw errors;\n }\n\n this._cache = options.cache;\n this._cascadeCacheControl = options.cascadeCacheControl || false;\n this._fallbackOperationCacheability = options.fallbackOperationCacheability || NO_CACHE;\n this._typeCacheDirectives = options.typeCacheDirectives || {};\n this._typeIDKey = options.typeIDKey;\n }\n\n get cache(): Cachemap {\n return this._cache;\n }\n\n public async analyzeQuery(\n requestData: RequestData,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<AnalyzeQueryResult> {\n const { ast, hash } = requestData;\n\n if (!ast) {\n return Promise.reject(new TypeError(\"@graphql-box/cache-manager expected an AST.\"));\n }\n\n const cacheManagerContext: CacheManagerContext = {\n ...context,\n fragmentDefinitions: getFragmentDefinitions(ast),\n typeIDKey: this._typeIDKey,\n };\n\n const cachedResponseData = await this._retrieveCachedResponseData(requestData, options, cacheManagerContext);\n const { cacheMetadata, data, fieldCount } = cachedResponseData;\n\n if (fieldCount.missing === fieldCount.total) {\n return { updated: requestData };\n }\n\n if (!fieldCount.missing) {\n const dataCaching = this._setQueryResponseCacheEntry(hash, { cacheMetadata, data }, options, cacheManagerContext);\n\n if (options.awaitDataCaching) {\n await dataCaching;\n }\n\n return { response: { cacheMetadata, data } };\n }\n\n this._setPartialQueryResponse(hash, { cacheMetadata, data }, options, cacheManagerContext);\n const filteredAST = filterQuery(requestData, cachedResponseData, cacheManagerContext);\n const { fragmentDefinitions, typeIDKey, ...rest } = cacheManagerContext;\n assign(context, rest);\n const request = print(filteredAST);\n return { updated: { ast: filteredAST, hash: hashRequest(request), request } };\n }\n\n public async cacheQuery(\n requestData: RequestData,\n updatedRequestData: RequestData | undefined,\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<ResponseData> {\n const cacheManagerContext: CacheManagerContext = {\n ...context,\n fragmentDefinitions: getFragmentDefinitions((updatedRequestData ?? requestData).ast),\n typeIDKey: this._typeIDKey,\n };\n\n return this._cacheResponse(requestData, updatedRequestData, rawResponseData, options, cacheManagerContext);\n }\n\n public async cacheResponse(\n requestData: RequestData,\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<ResponseData> {\n const cacheManagerContext: CacheManagerContext = {\n ...context,\n fragmentDefinitions: getFragmentDefinitions(requestData.ast),\n typeIDKey: this._typeIDKey,\n };\n\n return this._cacheResponse(requestData, undefined, rawResponseData, options, cacheManagerContext);\n }\n\n public async checkCacheEntry(\n cacheType: CacheTypes,\n hash: string,\n options: RequestOptions,\n context: RequestContext & { requestFieldCacheKey?: string },\n ): Promise<CheckCacheEntryResult | false> {\n return this._checkCacheEntry(cacheType, hash, options, context);\n }\n\n public async checkQueryResponseCacheEntry(\n hash: string,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<ResponseData | false> {\n const result = await this._checkCacheEntry(QUERY_RESPONSES, hash, options, context);\n\n if (!result) {\n return false;\n }\n\n const { cacheMetadata, data } = result.entry as QueryResponseCacheEntry;\n\n return {\n cacheMetadata: rehydrateCacheMetadata(cacheMetadata),\n data,\n };\n }\n\n public deletePartialQueryResponse(hash: string): void {\n this._partialQueryResponses.delete(hash);\n }\n\n public async setQueryResponseCacheEntry(\n requestData: RequestData,\n responseData: ResponseData,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n return this._setQueryResponseCacheEntry(requestData.hash, responseData, options, context);\n }\n\n private async _analyzeFieldNode(\n fieldNode: FieldNode,\n cachedAncestorFieldData: CachedAncestorFieldData,\n cachedResponseData: CachedResponseData,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n if (hasChildFields(fieldNode, { fragmentDefinitions: context.fragmentDefinitions })) {\n await this._analyzeParentFieldNode(fieldNode, cachedAncestorFieldData, cachedResponseData, options, context);\n } else {\n await this._analyzeLeafFieldNode(fieldNode, cachedAncestorFieldData, cachedResponseData, options, context);\n }\n }\n\n private async _analyzeLeafFieldNode(\n fieldNode: FieldNode,\n cachedAncestorFieldData: CachedAncestorFieldData,\n cachedResponseData: CachedResponseData,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n const keysAndPaths = buildFieldKeysAndPaths(fieldNode, cachedAncestorFieldData, context);\n const { hashedRequestFieldCacheKey, propNameOrIndex, requestFieldCacheKey, 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 requestFieldCacheKey,\n options,\n context,\n );\n\n CacheManager._setCachedResponseData(\n { cacheability, data: entry },\n cachedResponseData,\n keysAndPaths,\n typeNamesAndKind,\n options,\n context,\n );\n } else {\n const cachedFieldData =\n CacheManager._getFieldDataFromAncestor(entityData, propNameOrIndex) ||\n CacheManager._getFieldDataFromAncestor(requestFieldPathData, propNameOrIndex);\n\n CacheManager._setFieldPathChecklist(\n cachedResponseData.fieldPathChecklist,\n { data: cachedFieldData },\n requestFieldPath,\n typeNamesAndKind,\n );\n\n CacheManager._setCachedData(cachedResponseData.data, { data: cachedFieldData }, propNameOrIndex);\n }\n }\n\n private async _analyzeParentFieldNode(\n fieldNode: FieldNode,\n cachedAncestorFieldData: CachedAncestorFieldData,\n cachedResponseData: CachedResponseData,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n const keysAndPaths = buildFieldKeysAndPaths(fieldNode, cachedAncestorFieldData, context);\n const { propNameOrIndex, requestFieldCacheKey, requestFieldPath } = keysAndPaths;\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath) as FieldTypeInfo;\n\n const { cacheability, data, entityData, requestFieldPathData } = await this._retrieveCachedParentNodeData(\n cachedAncestorFieldData,\n keysAndPaths,\n fieldTypeInfo,\n options,\n context,\n );\n\n const { fragmentKind, fragmentName, typeName } = cachedAncestorFieldData;\n\n CacheManager._setCachedResponseData(\n { cacheability, data },\n cachedResponseData,\n keysAndPaths,\n { dataTypeName: get(data, TYPE_NAME_KEY), fieldTypeName: typeName, fragmentKind, fragmentName },\n options,\n context,\n );\n\n if (!isObjectLike(data)) {\n return;\n }\n\n const objectLikeData = data as PlainObjectMap | any[];\n const promises: Promise<void>[] = [];\n\n iterateChildFields(\n fieldNode,\n objectLikeData,\n context.fragmentDefinitions,\n (\n childField: FieldNode,\n childTypeName: string | undefined,\n childFragmentKind: string | undefined,\n childFragmentName: string | undefined,\n childIndex?: number,\n ) => {\n promises.push(\n this._analyzeFieldNode(\n childField,\n {\n cacheability,\n entityData,\n fragmentKind: childFragmentKind,\n fragmentName: childFragmentName,\n index: childIndex,\n requestFieldCacheKey,\n requestFieldPath,\n requestFieldPathData,\n typeName: childTypeName,\n },\n { ...cachedResponseData, data: cachedResponseData.data[propNameOrIndex] },\n options,\n context,\n ),\n );\n },\n );\n\n await Promise.all(promises);\n }\n\n private _buildCacheMetadata(\n { ast }: RequestData,\n { data, ...otherProps }: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: CacheManagerContext,\n ): CacheMetadata {\n const cacheMetadata = this._createCacheMetadata({ data, ...otherProps }, context);\n const queryNode = getOperationDefinitions(ast, context.operation)[0];\n const fieldsAndTypeNames = getChildFields(queryNode);\n\n if (!fieldsAndTypeNames) {\n return cacheMetadata;\n }\n\n fieldsAndTypeNames.forEach(({ fieldNode }) =>\n this._setFieldCacheability(\n fieldNode,\n { requestFieldPath: context.operation },\n { cacheMetadata, data },\n options,\n context,\n ),\n );\n\n return cacheMetadata;\n }\n\n private async _cacheResponse(\n requestData: RequestData,\n updatedRequestData: RequestData | undefined,\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<ResponseData> {\n const normalizedResponseData = normalizePatchResponseData(rawResponseData, context);\n let responseDataForCaching: RawResponseDataWithMaybeCacheMetadata | undefined = normalizedResponseData;\n\n if (isNotLastResponseChunk(rawResponseData, context)) {\n this._setResponseChunksAwaitingCaching(normalizedResponseData, context);\n responseDataForCaching = undefined;\n }\n\n if (isLastResponseChunk(rawResponseData, context)) {\n responseDataForCaching = this._retrieveResponseDataForCaching(normalizedResponseData, context);\n }\n\n const dataCaching: Promise<void>[] = [];\n\n if (responseDataForCaching) {\n const { data } = responseDataForCaching;\n const cacheMetadata = this._buildCacheMetadata(requestData, responseDataForCaching, options, context);\n\n dataCaching.push(\n this._setEntityAndRequestFieldPathCacheEntries(\n requestData,\n {\n cacheMetadata,\n entityData: cloneDeep(data),\n requestFieldPathData: cloneDeep(data),\n },\n options,\n context,\n ),\n );\n\n let queryCacheMetadata: CacheMetadata | undefined;\n let queryData: PlainObjectMap | undefined;\n\n if (context.operation === QUERY) {\n let partialQueryResponse: PartialQueryResponse | undefined;\n\n if (context.queryFiltered && updatedRequestData) {\n dataCaching.push(\n this._setQueryResponseCacheEntry(updatedRequestData.hash, { cacheMetadata, data }, options, context),\n );\n\n partialQueryResponse = this._getPartialQueryResponse(requestData.hash);\n }\n\n queryCacheMetadata = CacheManager._mergeResponseCacheMetadata(cacheMetadata, partialQueryResponse);\n queryData = this._mergeResponseData(data, partialQueryResponse);\n\n dataCaching.push(\n this._setQueryResponseCacheEntry(\n requestData.hash,\n { cacheMetadata: queryCacheMetadata, data: queryData },\n options,\n context,\n ),\n );\n }\n\n if (options.awaitDataCaching) {\n await Promise.all(dataCaching);\n }\n\n if (isNotResponseChunk(normalizedResponseData, context) && queryCacheMetadata && queryData) {\n return {\n cacheMetadata: queryCacheMetadata,\n data: queryData,\n };\n }\n }\n\n const { data, hasNext, paths } = normalizedResponseData;\n\n return {\n cacheMetadata: this._buildCacheMetadata(requestData, normalizedResponseData, options, context),\n data,\n hasNext,\n paths,\n };\n }\n\n private async _checkCacheEntry(\n cacheType: CacheTypes,\n hash: string,\n options: RequestOptions,\n context: CacheManagerContext & { requestFieldCacheKey?: string },\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 & { requestFieldCacheKey?: string },\n ): Promise<any> {\n try {\n return await this._cache.get(`${cacheType}::${hash}`);\n } catch (errors) {\n return Promise.reject(errors);\n }\n }\n\n private _getPartialQueryResponse(hash: string): PartialQueryResponse | undefined {\n const partialQueryResponse = this._partialQueryResponses.get(hash);\n this._partialQueryResponses.delete(hash);\n return partialQueryResponse;\n }\n\n private async _hasCacheEntry(cacheType: CacheTypes, hash: string): Promise<Cacheability | false> {\n try {\n return await this._cache.has(`${cacheType}::${hash}`);\n } catch (error) {\n return false;\n }\n }\n\n private _isFieldEntity(fieldData: any, { isEntity, possibleTypes }: FieldTypeInfo): boolean {\n if (!get(fieldData, this._typeIDKey, null)) {\n return false;\n }\n\n if (isEntity) {\n return true;\n }\n\n if (!possibleTypes.length) {\n return false;\n }\n\n return possibleTypes.some(type => type.typeName === fieldData.__typename);\n }\n\n private _mergeObjects<T>(obj: T, src: T): T {\n return mergeObjects(obj, src, (_key: string, val: any): string | number | undefined => {\n return isPlainObject(val) && val[this._typeIDKey] ? val[this._typeIDKey] : undefined;\n });\n }\n\n private _mergeResponseData(\n responseData: PlainObjectMap,\n partialQueryResponse?: PartialQueryResponse,\n ): PlainObjectMap {\n if (!partialQueryResponse) {\n return responseData;\n }\n\n return this._mergeObjects(partialQueryResponse.data, responseData);\n }\n\n private async _parseEntityAndRequestFieldPathCacheEntryData(\n field: FieldNode,\n ancestorKeysAndPaths: AncestorKeysAndPaths,\n { cacheMetadata, entityData, requestFieldPathData }: ResponseDataForCaching,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n const keysAndPaths = buildFieldKeysAndPaths(field, ancestorKeysAndPaths, context);\n const { requestFieldCacheKey, requestFieldPath, responseDataPath } = keysAndPaths;\n const fieldData = get(requestFieldPathData, responseDataPath);\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath);\n\n if (!isObjectLike(fieldData) && !fieldTypeInfo?.hasDirectives) {\n return;\n }\n\n if (isObjectLike(fieldData)) {\n const promises: Promise<void>[] = [];\n\n iterateChildFields(\n field,\n fieldData as PlainObjectMap | any[],\n context.fragmentDefinitions,\n (\n childField: FieldNode,\n _typeName: string | undefined,\n _fragmentKind: string | undefined,\n _fragmentName: string | undefined,\n childIndex?: number,\n ) => {\n promises.push(\n this._parseEntityAndRequestFieldPathCacheEntryData(\n childField,\n { index: childIndex, requestFieldCacheKey, requestFieldPath, responseDataPath },\n { cacheMetadata, entityData, requestFieldPathData },\n options,\n context,\n ),\n );\n },\n );\n\n await Promise.all(promises);\n }\n\n await this._setEntityAndRequestFieldPathCacheEntry(\n field,\n keysAndPaths,\n { cacheMetadata, entityData, requestFieldPathData },\n options,\n context,\n );\n }\n\n private async _retrieveCachedEntityData(\n validTypeIDValue: string | number,\n { possibleTypes, typeName }: FieldTypeInfo,\n options: RequestOptions,\n context: CacheManagerContext,\n ) {\n const typeNames = [...possibleTypes.map(type => type.typeName), typeName];\n\n const checkResults = await Promise.all(\n typeNames.map(name => this._checkCacheEntry(DATA_ENTITIES, `${name}::${validTypeIDValue}`, options, context)),\n );\n\n const validResults = checkResults.filter(result => !!result) as CheckCacheEntryResult[];\n let validResult: CheckCacheEntryResult | undefined;\n\n if (validResults.length === 1) {\n validResult = validResults[0];\n } else if (validResults.length > 1) {\n validResults.sort(({ cacheability: a }, { cacheability: b }) => a.metadata.ttl - b.metadata.ttl);\n\n validResult = {\n cacheability: validResults[0].cacheability,\n entry: validResults.reduce((obj, { entry }) => this._mergeObjects(obj, entry), {}),\n };\n }\n\n return (validResult || {}) as Partial<CheckCacheEntryResult>;\n }\n\n private async _retrieveCachedParentNodeData(\n { entityData: ancestorEntityData, requestFieldPathData: ancestorRequestFieldPathData }: CachedAncestorFieldData,\n { hashedRequestFieldCacheKey, propNameOrIndex, requestFieldCacheKey }: 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 requestFieldCacheKey,\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 requestFieldCacheKey: string,\n options: RequestOptions,\n context: CacheManagerContext,\n ) {\n return (this._checkCacheEntry(REQUEST_FIELD_PATHS, hash, options, { ...context, requestFieldCacheKey }) ||\n {}) as Partial<CheckCacheEntryResult>;\n }\n\n private async _retrieveCachedResponseData(\n { ast }: RequestData,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<CachedResponseData> {\n const cachedResponseData: CachedResponseData = {\n cacheMetadata: new Map(),\n data: {},\n fieldCount: { missing: 0, total: 0 },\n fieldPathChecklist: new Map(),\n };\n\n const queryNode = getOperationDefinitions(ast, context.operation)[0];\n const fieldsAndTypeNames = getChildFields(queryNode);\n\n if (!fieldsAndTypeNames) {\n return cachedResponseData;\n }\n\n await Promise.all(\n fieldsAndTypeNames.map(({ fieldNode }) =>\n this._analyzeFieldNode(\n fieldNode,\n { requestFieldPath: context.operation },\n cachedResponseData,\n options,\n context,\n ),\n ),\n );\n\n cachedResponseData.fieldCount = CacheManager._countFieldPathChecklist(cachedResponseData.fieldPathChecklist);\n return cachedResponseData;\n }\n\n private _retrieveResponseDataForCaching(\n normalizedResponseData: RawResponseDataWithMaybeCacheMetadata,\n context: CacheManagerContext,\n ) {\n const responseChunks = this._responseChunksAwaitingCaching.get(\n context.boxID,\n ) as RawResponseDataWithMaybeCacheMetadata[];\n\n this._responseChunksAwaitingCaching.delete(context.boxID);\n return mergeResponseDataSets([...responseChunks, normalizedResponseData]);\n }\n\n @logCacheEntry()\n private async _setCacheEntry(\n cacheType: CacheTypes,\n hash: string,\n value: any,\n cachemapOptions: CachemapOptions,\n _options: RequestOptions,\n _context: CacheManagerContext & { requestFieldCacheKey?: string },\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, requestFieldCacheKey, 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, {\n ...context,\n requestFieldCacheKey,\n });\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, requestFieldCacheKey },\n );\n\n if (hasChildFields(field, { fragmentDefinitions: context.fragmentDefinitions })) {\n if (isEntity) {\n set(data, responseDataPath, { __cacheKey: `${REQUEST_FIELD_PATHS}::${hashedRequestFieldCacheKey}` });\n } else {\n unset(data, responseDataPath);\n }\n }\n }\n }\n\n private _setResponseChunksAwaitingCaching(\n normalizedResponseData: RawResponseDataWithMaybeCacheMetadata,\n context: CacheManagerContext,\n ) {\n const responseChunks = this._responseChunksAwaitingCaching.get(context.boxID);\n\n if (responseChunks) {\n this._responseChunksAwaitingCaching.set(context.boxID, [...responseChunks, normalizedResponseData]);\n } else {\n this._responseChunksAwaitingCaching.set(context.boxID, [normalizedResponseData]);\n }\n }\n}\n\nexport default function init(userOptions: UserOptions): CacheManagerInit {\n if (!isPlainObject(userOptions)) {\n throw new TypeError(\"@graphql-box/cache-manager expected userOptions to be a plain object.\");\n }\n\n return (clientOptions: ClientOptions) => new CacheManager({ ...clientOptions, ...userOptions });\n}\n","import { RequestContext } from \"@graphql-box/core\";\nimport { CACHE_ENTRY_QUERIED } from \"../../consts\";\n\nexport default function logCacheQuery() {\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 try {\n return new Promise(async resolve => {\n const { debugManager, requestFieldCacheKey, ...otherContext } = args[3] as RequestContext & {\n requestFieldCacheKey?: string;\n };\n\n if (!debugManager) {\n resolve(await method.apply(this, args));\n return;\n }\n\n const startTime = debugManager.now();\n const result = await method.apply(this, args);\n const endTime = debugManager.now();\n const duration = endTime - startTime;\n resolve(result);\n\n const payload = {\n cacheType: args[0],\n context: otherContext,\n hash: args[1],\n options: args[2],\n result,\n stats: { duration, endTime, startTime },\n ...(requestFieldCacheKey ? { decryptedCacheKey: requestFieldCacheKey } : {}),\n };\n\n debugManager.emit(CACHE_ENTRY_QUERIED, payload);\n });\n } catch (error) {\n return Promise.reject(error);\n }\n };\n };\n}\n","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, requestFieldCacheKey, ...otherContext } = args[5] as RequestContext & {\n requestFieldCacheKey?: string;\n };\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 const payload = {\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 ...(requestFieldCacheKey ? { decryptedCacheKey: requestFieldCacheKey } : {}),\n };\n\n debugManager.emit(CACHE_ENTRY_ADDED, payload);\n });\n };\n };\n}\n","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","import { RawResponseDataWithMaybeCacheMetadata } from \"@graphql-box/core\";\nimport { merge } from \"lodash\";\n\nexport default (responseDataSets: RawResponseDataWithMaybeCacheMetadata[]) => {\n return responseDataSets.reduce(\n (acc: RawResponseDataWithMaybeCacheMetadata, dataSet, index) => {\n const { _cacheMetadata, data, hasNext, headers, paths } = dataSet;\n\n if (_cacheMetadata) {\n acc._cacheMetadata = acc._cacheMetadata ? { ...acc._cacheMetadata, ..._cacheMetadata } : _cacheMetadata;\n }\n\n acc.data = acc.data ? merge(acc.data, data) : data;\n\n if (index === 0) {\n acc.headers = headers;\n }\n\n if (index === responseDataSets.length - 1) {\n acc.hasNext = hasNext;\n }\n\n if (paths) {\n if (!acc.paths) {\n acc.paths = [];\n }\n\n acc.paths.push(paths[0]);\n }\n\n return acc;\n },\n { data: {} },\n );\n};\n"],"names":["CACHE_ENTRY_ADDED","CACHE_ENTRY_QUERIED","PARTIAL_QUERY_COMPILED","fieldData","selectionNodes","ancestorKeysAndPaths","context","fieldAndTypeName","resolveFragments","fragmentDefinitions","_keys","reduce","acc","key","match","find","fieldNode","getName","requestFieldPath","buildFieldKeysAndPaths","fieldTypeInfo","fieldTypeMap","get","hasArguments","hasDirectives","fieldPathChecklistValues","fieldTypeName","length","hasData","typeUnused","typeName","undefined","some","every","filterField","field","fieldPathChecklist","fragmentSpreadChecklist","ancestorRequestFieldPath","typeIDKey","fieldsAndTypeNames","getChildFields","fragmentSpreadFieldCounter","i","childField","fragmentKind","fragmentName","childTypeName","FRAGMENT_SPREAD","total","_getChildFields","childFieldName","TYPE_NAME_KEY","checkFieldPathChecklist","hasChildFields","deleteChildFields","_isEmpty","forEach","paths","push","deleteFragmentSpreads","deleted","filterFragmentSpreads","inlineFragments","getInlineFragments","filtered","fragment","deleteInlineFragments","filterInlineFragments","fieldNames","map","name","filterIDsAndTypeNames","requestData","ast","queryNode","getOperationDefinitions","operation","request","RegExp","createFragmentSpreadChecklist","queryFiltered","definitionsToFilter","namesAndPaths","path","fragmentDefinition","definitionsToDelete","names","deleteFragmentDefinitions","include","filterFragmentDefinitions","rawResponseData","hasDeferOrStream","hasNext","normalizePatchResponseData","data","_set","getValidTypeIDValue","requestFieldPathData","typeIDValue","requestFieldPathDataIDValue","_isPlainObject","CacheManager","_target","_propertyName","descriptor","method","value","args","Promise","resolve","debugManager","requestFieldCacheKey","otherContext","apply","_this","startTime","now","result","endTime","duration","payload","cacheType","hash","options","stats","decryptedCacheKey","emit","reject","cachemapOptions","partialQueryResponse","Map","errors","cache","TypeError","typeCacheDirectives","_cache","_cascadeCacheControl","cascadeCacheControl","_fallbackOperationCacheability","fallbackOperationCacheability","_typeCacheDirectives","_typeIDKey","this","cacheManagerContext","getFragmentDefinitions","_retrieveCachedResponseData","cachedResponseData","cacheMetadata","fieldCount","missing","updated","dataCaching","_setQueryResponseCacheEntry","awaitDataCaching","response","_setPartialQueryResponse","filteredAST","filterQuery","rest","print","hashRequest","updatedRequestData","_cacheResponse","_checkCacheEntry","QUERY_RESPONSES","entry","rehydrateCacheMetadata","_partialQueryResponses","delete","responseData","cachedAncestorFieldData","_analyzeParentFieldNode","_analyzeLeafFieldNode","keysAndPaths","hashedRequestFieldCacheKey","propNameOrIndex","entityData","typeNamesAndKind","dataTypeName","__typename","_isNodeRequestFieldPath","_retrieveCachedRequestFieldPathData","cacheability","_setCachedResponseData","cachedFieldData","_getFieldDataFromAncestor","_setFieldPathChecklist","_setCachedData","_retrieveCachedParentNodeData","_get","_isObjectLike","promises","iterateChildFields","childFragmentKind","childFragmentName","childIndex","_analyzeFieldNode","index","all","otherProps","_createCacheMetadata","_this2","_setFieldCacheability","normalizedResponseData","responseDataForCaching","isNotLastResponseChunk","_setResponseChunksAwaitingCaching","isLastResponseChunk","_retrieveResponseDataForCaching","_buildCacheMetadata","_setEntityAndRequestFieldPathCacheEntries","_cloneDeep","QUERY","_getPartialQueryResponse","queryCacheMetadata","_mergeResponseCacheMetadata","queryData","_mergeResponseData","isNotResponseChunk","_hasCacheEntry","_isValid","_getCacheEntry","_isUndefined","_cacheMetadata","headers","fallback","Object","values","first","Cacheability","metadata","ttl","has","cacheControl","deriveOpCacheability","set","_options","_context","isEntity","possibleTypes","type","obj","src","mergeObjects","_key","val","_this3","_mergeObjects","responseDataPath","_typeName","_fragmentKind","_fragmentName","_this4","_parseEntityAndRequestFieldPathCacheEntryData","_setEntityAndRequestFieldPathCacheEntry","validTypeIDValue","typeNames","_this5","DATA_ENTITIES","checkResults","validResults","filter","validResult","sort","a","b","ancestorEntityData","ancestorRequestFieldPathData","entryCacheability","_isNodeEntity","_retrieveCachedEntityData","_cacheability","REQUEST_FIELD_PATHS","_this6","_countFieldPathChecklist","responseDataSets","responseChunks","_responseChunksAwaitingCaching","boxID","dataSet","_merge","operationNode","_this7","_setRequestFieldPathCacheEntry","_isFieldEntity","_setEntityCacheEntry","entityDataKey","_setCacheEntry","cacheHeaders","printCacheControl","tag","__cacheKey","_setFieldTypeCacheDirective","_this8","_setCacheMetadata","dehydratedCacheMetadata","dehydrateCacheMetadata","_getOperationCacheControl","hasArgsOrDirectives","selectionSet","_field$selectionSet","selections","filterOutPropsWithArgsOrDirectives","checklistValues","ancestorFieldData","checkTTL","objectLikeData","_isArray","operationCacheability","userOptions","clientOptions"],"mappings":"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"}
|