@graphql-box/cache-manager 3.4.3 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../cache-manager/src/helpers/areOnlyPopulatedFieldsTypeIdKeys.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/consts/index.ts","../cache-manager/src/helpers/deriveOpCacheability.ts","../cache-manager/src/helpers/mergeResponseDataSets.ts"],"sourcesContent":["import { PlainObjectMap } from \"@graphql-box/core\";\nimport { isArray, isPlainObject } from \"lodash\";\n\nconst checkValue = (value: any, typeIDKey: string): boolean => {\n if (isArray(value)) {\n return value.reduce((accB: boolean, entry) => {\n if (!accB) {\n return false;\n }\n\n return checkValue(entry, typeIDKey);\n }, true);\n }\n\n if (isPlainObject(value)) {\n return recursivelyCheckProps(value, typeIDKey);\n }\n\n return false;\n};\n\nconst recursivelyCheckProps = (data: PlainObjectMap, typeIDKey: string): boolean => {\n const keys = Object.keys(data);\n\n if (keys.length === 1 && !!data[typeIDKey]) {\n return true;\n }\n\n return keys.reduce((accA: boolean, key) => {\n if (!accA) {\n return false;\n }\n\n return checkValue(data[key], typeIDKey);\n }, true);\n};\n\nexport default (data: PlainObjectMap, typeIDKey: string) => {\n return recursivelyCheckProps(data, typeIDKey);\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 CachemapOptions,\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 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 areOnlyPopulatedFieldsTypeIdKeys from \"../helpers/areOnlyPopulatedFieldsTypeIdKeys\";\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 // Second half of check is required for the scenario where the only matching data is\n // the typeIDKey field, i.e. \"id\", in which case there is no point settings a partial\n // query reponse because we request the typeIDKey field with every request.\n if (fieldCount.missing === fieldCount.total || areOnlyPopulatedFieldsTypeIdKeys(data, this._typeIDKey)) {\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 const filteredAST = filterQuery(requestData, cachedResponseData, cacheManagerContext);\n const filteredRequest = print(filteredAST);\n const { fragmentDefinitions, typeIDKey, ...rest } = cacheManagerContext;\n assign(context, { ...rest, filteredRequest });\n this._setPartialQueryResponse(hash, { cacheMetadata, data }, options, context);\n return { updated: { ast: filteredAST, hash: hashRequest(filteredRequest), request: filteredRequest } };\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.requestID,\n ) as RawResponseDataWithMaybeCacheMetadata[];\n\n this._responseChunksAwaitingCaching.delete(context.requestID);\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.requestID);\n\n if (responseChunks) {\n this._responseChunksAwaitingCaching.set(context.requestID, [...responseChunks, normalizedResponseData]);\n } else {\n this._responseChunksAwaitingCaching.set(context.requestID, [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 { CACHE_ENTRY_QUERIED, RequestContext } from \"@graphql-box/core\";\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 options: args[2],\n requestHash: args[1],\n result,\n stats: { duration, endTime, startTime },\n ...(requestFieldCacheKey ? { decryptedCacheKey: requestFieldCacheKey } : {}),\n };\n\n debugManager.log(CACHE_ENTRY_QUERIED, payload);\n });\n } catch (error) {\n return Promise.reject(error);\n }\n };\n };\n}\n","import { CACHE_ENTRY_ADDED, RequestContext } from \"@graphql-box/core\";\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 options: args[4],\n requestHash: args[1],\n stats: { duration, endTime, startTime },\n value: args[2],\n ...(requestFieldCacheKey ? { decryptedCacheKey: requestFieldCacheKey } : {}),\n };\n\n debugManager.log(CACHE_ENTRY_ADDED, payload);\n });\n };\n };\n}\n","import { PARTIAL_QUERY_COMPILED, RequestContext } from \"@graphql-box/core\";\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.log(PARTIAL_QUERY_COMPILED, {\n context: otherContext,\n options: args[2],\n requestHash: args[0],\n result: args[1],\n stats: { duration, endTime, startTime },\n });\n });\n };\n };\n}\n","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","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":["checkValue","value","typeIDKey","_isArray","reduce","accB","entry","_isPlainObject","recursivelyCheckProps","data","keys","Object","length","accA","key","fieldData","selectionNodes","ancestorKeysAndPaths","context","fieldAndTypeName","resolveFragments","fragmentDefinitions","_keys","acc","match","find","fieldNode","getName","requestFieldPath","buildFieldKeysAndPaths","fieldTypeInfo","fieldTypeMap","get","hasArguments","hasDirectives","fieldPathChecklistValues","fieldTypeName","hasData","typeUnused","typeName","undefined","some","every","filterField","field","fieldPathChecklist","fragmentSpreadChecklist","ancestorRequestFieldPath","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","_set","getValidTypeIDValue","requestFieldPathData","typeIDValue","requestFieldPathDataIDValue","CacheManager","_target","_propertyName","descriptor","method","args","Promise","resolve","debugManager","requestFieldCacheKey","otherContext","apply","_this","startTime","now","result","endTime","duration","payload","cacheType","options","requestHash","stats","decryptedCacheKey","log","CACHE_ENTRY_QUERIED","reject","cachemapOptions","CACHE_ENTRY_ADDED","PARTIAL_QUERY_COMPILED","Map","errors","cache","TypeError","typeCacheDirectives","_cache","_cascadeCacheControl","cascadeCacheControl","_fallbackOperationCacheability","fallbackOperationCacheability","_typeCacheDirectives","_typeIDKey","this","hash","cacheManagerContext","getFragmentDefinitions","_retrieveCachedResponseData","cachedResponseData","cacheMetadata","fieldCount","missing","areOnlyPopulatedFieldsTypeIdKeys","updated","dataCaching","_setQueryResponseCacheEntry","awaitDataCaching","response","filteredAST","filterQuery","filteredRequest","print","rest","_setPartialQueryResponse","hashRequest","updatedRequestData","_cacheResponse","_checkCacheEntry","QUERY_RESPONSES","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","partialQueryResponse","_getPartialQueryResponse","queryCacheMetadata","_mergeResponseCacheMetadata","queryData","_mergeResponseData","isNotResponseChunk","_hasCacheEntry","_isValid","_getCacheEntry","_isUndefined","_cacheMetadata","headers","fallback","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","requestID","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","operationCacheability","userOptions","clientOptions"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../cache-manager/src/helpers/areOnlyPopulatedFieldsTypeIdKeys.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/consts/index.ts","../cache-manager/src/helpers/deriveOpCacheability.ts","../cache-manager/src/helpers/mergeResponseDataSets.ts"],"sourcesContent":["import { PlainObjectMap } from \"@graphql-box/core\";\nimport { isArray, isPlainObject } from \"lodash\";\n\nconst checkValue = (value: any, typeIDKey: string): boolean => {\n if (isArray(value)) {\n return value.reduce((accB: boolean, entry) => {\n if (!accB) {\n return false;\n }\n\n return checkValue(entry, typeIDKey);\n }, true);\n }\n\n if (isPlainObject(value)) {\n return recursivelyCheckProps(value, typeIDKey);\n }\n\n return false;\n};\n\nconst recursivelyCheckProps = (data: PlainObjectMap, typeIDKey: string): boolean => {\n const keys = Object.keys(data);\n\n if (keys.length === 1 && !!data[typeIDKey]) {\n return true;\n }\n\n return keys.reduce((accA: boolean, key) => {\n if (!accA) {\n return false;\n }\n\n return checkValue(data[key], typeIDKey);\n }, true);\n};\n\nexport default (data: PlainObjectMap, typeIDKey: string) => {\n return recursivelyCheckProps(data, typeIDKey);\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 CachemapOptions,\n DATA_ENTITIES,\n DEFAULT_TYPE_ID_KEY,\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 CachedAncestorFieldData,\n CachedResponseData,\n CheckCacheEntryResult,\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 areOnlyPopulatedFieldsTypeIdKeys from \"../helpers/areOnlyPopulatedFieldsTypeIdKeys\";\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 default 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: UserOptions) {\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 ?? DEFAULT_TYPE_ID_KEY;\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 // Second half of check is required for the scenario where the only matching data is\n // the typeIDKey field, i.e. \"id\", in which case there is no point settings a partial\n // query reponse because we request the typeIDKey field with every request.\n if (fieldCount.missing === fieldCount.total || areOnlyPopulatedFieldsTypeIdKeys(data, this._typeIDKey)) {\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 const filteredAST = filterQuery(requestData, cachedResponseData, cacheManagerContext);\n const filteredRequest = print(filteredAST);\n const { fragmentDefinitions, typeIDKey, ...rest } = cacheManagerContext;\n assign(context, { ...rest, filteredRequest });\n this._setPartialQueryResponse(hash, { cacheMetadata, data }, options, context);\n return { updated: { ast: filteredAST, hash: hashRequest(filteredRequest), request: filteredRequest } };\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.requestID,\n ) as RawResponseDataWithMaybeCacheMetadata[];\n\n this._responseChunksAwaitingCaching.delete(context.requestID);\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.requestID);\n\n if (responseChunks) {\n this._responseChunksAwaitingCaching.set(context.requestID, [...responseChunks, normalizedResponseData]);\n } else {\n this._responseChunksAwaitingCaching.set(context.requestID, [normalizedResponseData]);\n }\n }\n}\n","import { CACHE_ENTRY_QUERIED, RequestContext } from \"@graphql-box/core\";\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 options: args[2],\n requestHash: args[1],\n result,\n stats: { duration, endTime, startTime },\n ...(requestFieldCacheKey ? { decryptedCacheKey: requestFieldCacheKey } : {}),\n };\n\n debugManager.log(CACHE_ENTRY_QUERIED, payload);\n });\n } catch (error) {\n return Promise.reject(error);\n }\n };\n };\n}\n","import { CACHE_ENTRY_ADDED, RequestContext } from \"@graphql-box/core\";\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 options: args[4],\n requestHash: args[1],\n stats: { duration, endTime, startTime },\n value: args[2],\n ...(requestFieldCacheKey ? { decryptedCacheKey: requestFieldCacheKey } : {}),\n };\n\n debugManager.log(CACHE_ENTRY_ADDED, payload);\n });\n };\n };\n}\n","import { PARTIAL_QUERY_COMPILED, RequestContext } from \"@graphql-box/core\";\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.log(PARTIAL_QUERY_COMPILED, {\n context: otherContext,\n options: args[2],\n requestHash: args[0],\n result: args[1],\n stats: { duration, endTime, startTime },\n });\n });\n };\n };\n}\n","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","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":["checkValue","value","typeIDKey","_isArray","reduce","accB","entry","_isPlainObject","recursivelyCheckProps","data","keys","Object","length","accA","key","fieldData","selectionNodes","ancestorKeysAndPaths","context","fieldAndTypeName","resolveFragments","fragmentDefinitions","_keys","acc","match","find","fieldNode","getName","requestFieldPath","buildFieldKeysAndPaths","fieldTypeInfo","fieldTypeMap","get","hasArguments","hasDirectives","fieldPathChecklistValues","fieldTypeName","hasData","typeUnused","typeName","undefined","some","every","filterField","field","fieldPathChecklist","fragmentSpreadChecklist","ancestorRequestFieldPath","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","_set","getValidTypeIDValue","requestFieldPathData","typeIDValue","requestFieldPathDataIDValue","CacheManager","_target","_propertyName","descriptor","method","args","Promise","resolve","debugManager","requestFieldCacheKey","otherContext","apply","_this","startTime","now","result","endTime","duration","payload","cacheType","options","requestHash","stats","decryptedCacheKey","log","CACHE_ENTRY_QUERIED","reject","cachemapOptions","CACHE_ENTRY_ADDED","PARTIAL_QUERY_COMPILED","Map","errors","cache","TypeError","typeCacheDirectives","_cache","_cascadeCacheControl","cascadeCacheControl","_fallbackOperationCacheability","fallbackOperationCacheability","_typeCacheDirectives","_typeIDKey","DEFAULT_TYPE_ID_KEY","this","hash","cacheManagerContext","getFragmentDefinitions","_retrieveCachedResponseData","cachedResponseData","cacheMetadata","fieldCount","missing","areOnlyPopulatedFieldsTypeIdKeys","updated","dataCaching","_setQueryResponseCacheEntry","awaitDataCaching","response","filteredAST","filterQuery","filteredRequest","print","rest","_setPartialQueryResponse","hashRequest","updatedRequestData","_cacheResponse","_checkCacheEntry","QUERY_RESPONSES","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","partialQueryResponse","_getPartialQueryResponse","queryCacheMetadata","_mergeResponseCacheMetadata","queryData","_mergeResponseData","isNotResponseChunk","_hasCacheEntry","_isValid","_getCacheEntry","_isUndefined","_cacheMetadata","headers","fallback","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","requestID","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","operationCacheability"],"mappings":"0qHAGMA,GAAa,SAAbA,EAAcC,EAAYC,UAC1BC,EAAQF,GACHA,EAAMG,QAAO,SAACC,EAAeC,WAC7BD,GAIEL,EAAWM,EAAOJ,MACxB,KAGDK,EAAcN,IACTO,GAAsBP,EAAOC,IAMlCM,GAAwB,SAACC,EAAsBP,OAC7CQ,EAAOC,OAAOD,KAAKD,WAEL,IAAhBC,EAAKE,SAAkBH,EAAKP,KAIzBQ,EAAKN,QAAO,SAACS,EAAeC,WAC5BD,GAIEb,GAAWS,EAAKK,GAAMZ,MAC5B,gBAGWO,EAAsBP,UAC7BM,GAAsBC,EAAMP,gBC/BnCa,EACAC,EACAC,EACAC,OAEMC,EAAmBC,EAAiBJ,EAAgBE,EAAQG,4BAE3DC,EAAKP,GAAWX,QAAO,SAACmB,EAAqBT,OAC5CU,EAAQL,EAAiBM,MAAK,gBAAGC,IAAAA,iBAAiBC,EAAQD,KAA8CZ,QAE1GU,EAAO,KACDI,EAAqBC,EAAuBL,EAAME,UAAWT,EAAsBC,GAAnFU,iBACFE,EAAgBZ,EAAQa,aAAaC,IAAIJ,GAE1CE,MAAAA,GAAAA,EAAeG,cAAiBH,MAAAA,GAAAA,EAAeI,gBAClDX,EAAIT,GAAOC,EAAUD,WAIlBS,IACN,iBCxBHY,EACAC,OAEKD,IAA6BA,EAAyBvB,aAClD,CAAEyB,SAAS,EAAOC,aAAcF,MAGD,IAApCD,EAAyBvB,OAAc,OACXuB,EAAyB,GAA/CE,IAAAA,QAASE,IAAAA,eAEV,CAAEF,QAAAA,EAASC,WADEC,EAAuBA,IAAaH,OAAzBI,SAI1B,CACLH,QAASF,EAAyBM,MAAK,gBAAGJ,IAAAA,iBAASE,WAA4BH,GAAiBC,KAChGC,YAAaH,EAAyBO,OAAM,qBAAGH,WAA4BH,OCDzEO,GAAc,SAAdA,EACJC,EACAC,EACAC,EACAC,EACA7B,OAEQG,EAAmCH,EAAnCG,oBAAqBnB,EAAcgB,EAAdhB,UACvB8C,EAAqBC,EAAeL,EAAO,CAAEvB,oBAAAA,QAE9C2B,SACI,UAGHE,EAAyD,GAEtDC,EAAIH,EAAmBpC,OAAS,EAAGuC,GAAK,EAAGA,GAAK,EAAG,WAC6BH,EAAmBG,GAAvFC,IAAX1B,UAAuB2B,IAAAA,aAAcC,IAAAA,aAAwBC,IAAVhB,YAEvDc,IAAiBG,GAAmBF,IAAiBJ,EAA2BI,GAClFJ,EAA2BI,GAAgB,CACzCjB,QAAS,EACToB,MAAOpC,MAAAA,GAAAA,EAAsBiC,wBACzBL,EAAe5B,MAAAA,SAAAA,EAAsBiC,GAAe,CAAEjC,oBAAAA,wBAAtDqC,EAA8E9C,sBAC9E,OAIF+C,EAAiBhC,EAAQyB,MAE3BO,IAAmBzD,GAAayD,IAAmBC,OAI/ChC,EAAqBC,EAC3BuB,EACA,CACExB,iBAAkBmB,GAEpB7B,GALMU,mBAQwBiC,GAAwBhB,EAAmBb,IAAIJ,GAAmB2B,GAA1FlB,IAAAA,QAASC,IAAAA,YAEbD,GAAWC,KACTe,IAAiBG,EACnBN,EAA2BI,GAAwBjB,SAAW,EACpDyB,EAAeV,EAAY,CAAE/B,oBAAAA,IAE9BsB,EAAYS,EAAYP,EAAoBC,EAAyBlB,EAAkBV,IAChG6C,EAAkBnB,EAAOQ,GAFzBW,EAAkBnB,EAAOQ,qBC1D/BR,EACAM,EACAJ,EACAC,GAEIiB,EAAQd,MAIPA,GAA4Be,SAAQ,SAAAnD,GACvCgC,EAAwBhC,GAAKoD,MAAMC,KAAKpB,SAEbG,EAA2BpC,KAA9CuB,YAASoB,QAGfW,EAAsBxB,EAAO9B,GAC7BgC,EAAwBhC,GAAKuD,SAAW,MDiD5CC,CAAsB1B,EAAOM,EAA4BJ,EAAyBC,YEnElFH,SACEvB,IAAAA,oBAAqBnB,IAAAA,UAEjBqE,EAAkBC,EAAmB5B,GACvC6B,GAAW,EAEfF,EAAgBN,SAAQ,SAAAS,OAChB1B,EAAqBC,EAAeyB,EAAU,CAAErD,oBAAAA,QAEjD2B,IAAuBA,EAAmBpC,cAC7C+D,EAAsB/B,EAAO8B,QAC7BD,GAAW,MAIqB,IAA9BzB,EAAmBpC,OAAc,KAC3Bc,EAAcsB,EAAmB,GAAjCtB,UAEJC,EAAQD,KAAexB,IACzByE,EAAsB/B,EAAO8B,GAC7BD,GAAW,OFgDjBG,CAAsBhC,EAAO1B,YGnE7B0B,SACEvB,IAAAA,oBAAqBnB,IAAAA,UAEjB8C,EAAqBC,EAAeL,EAAO,CAAEvB,oBAAAA,QAE9C2B,GAAsBA,EAAmBpC,OAAS,SAC9C,MAGHiE,EAAa7B,EAAmB8B,KAAI,gBAAGpD,IAAAA,iBAAgBC,EAAQD,SAE3C,IAAtBmD,EAAWjE,QAAgBiE,EAAWnC,OAAM,SAAAqC,UAAQA,IAAS7E,GAAa6E,IAASnB,YACrFG,EACEnB,EACAI,EAAmB8B,KAAI,qBAAGpD,eAGrB,KAGkB,IAAtBmD,EAAWjE,QAAgBiE,EAAW,KAAO3E,GAAc2E,EAAW,KAAOjB,EAAe,KACvFlC,EAAcsB,EAAmB,GAAjCtB,iBACRqC,EAAkBnB,EAAOlB,IAClB,GH6CTsD,CAAsBpC,EAAO1B,IACrB4C,EAAelB,EAAO,CAAEvB,oBAAAA,iBI/DlB4D,IAAsE/D,OAA1C2B,IAAAA,mBAClCqC,EAAQD,EAARC,IACFC,EAAYC,EAAwBF,EAAKhE,EAAQmE,WAAW,GAC1DhE,EAAwBH,EAAxBG,oBACF2B,EAAqBC,EAAekC,EAAW,CAAE9D,oBAAAA,QAElD2B,SACIkC,UAGHpC,oBCVUwC,IAAAA,QAA0BjE,IAAAA,2BAC1CC,EAAKD,MAAAA,EAAAA,EAAuB,IAAIjB,QAAO,SAACmB,EAA6BwD,UACnExD,EAAIwD,GAAQ,CAAEV,QAAS,EAAGH,MAAO,GAAIT,OAAQ6B,EAAQ9D,MAAM,IAAI+D,0BAAmBR,GAAQ,OAAS,IAAInE,QAChGW,IACN,IDM6BiE,CAA8BP,EAAa/D,GAElEiC,EAAIH,EAAmBpC,OAAS,EAAGuC,GAAK,EAAGA,GAAK,EAAG,KAClDzB,EAAcsB,EAAmBG,GAAjCzB,UAEAE,EAAqBC,EAC3BH,EACA,CACEE,iBAAkBV,EAAQmE,WAE5BnE,GALMU,iBAQJe,GAAYjB,EAAWmB,EAAoBC,EAAyBlB,EAAkBV,IACxF6C,EAAkBoB,EAAWzD,UAIjCR,EAAQuE,eAAgB,WEhCxBP,EACArC,EACAC,EACA5B,OAEMwE,EAAsBpE,EAAKwB,GAAyB1C,QACxD,SAACuF,EAAiD7E,SACrBgC,EAAwBhC,GAA3CuD,IAAAA,QAASZ,IAAAA,aAEE,IAAZY,GAA2B,IAAVZ,cAChBkC,IAAe,CAAEZ,KAAMjE,EAAK8E,KAAM9C,EAAwBhC,GAAKoD,MAAM,MACzEyB,IAEN,MAGmCzE,EAA7BG,oBAAAA,aAAsB,KAE9BqE,EAAoBzB,SAAQ,gBAAGc,IAAAA,KAAMa,IAAAA,KAC7BC,EAAqBxE,EAAoB0D,GAC/CpC,GAAYkD,EAAoBhD,EAAoBC,EAAyB8C,EAAM1E,UAG/E4E,EAAsBxE,EAAKwB,GAAyB1C,QAAO,SAAC2F,EAAiBjF,SACtDgC,EAAwBhC,GAA3CuD,IAAAA,QAASZ,IAAAA,aACVY,EAAU,GAAKA,IAAYZ,cAAYsC,IAAOjF,IAAOiF,IAC3D,WAEED,EAAoBlF,OAIlBoF,EAA0Bd,EAAK,CACpCe,QAASH,IAJFZ,EFIFgB,CAA0BhB,EAAKrC,EAAoBC,EAAyB5B,gBGtCrEiF,EAAwDjF,UACtEA,EAAQkF,mBAAqBD,EAAgBE,SAAWF,EAAgBjC,mBCD1DiC,EAAwDjF,UACtEA,EAAQkF,kBAAoBD,EAAgBE,qBCD9BF,EAAwDjF,UACrEA,EAAQkF,mBAAqBD,EAAgBE,UAAYF,EAAgBjC,6oCCA5E,4BAAgBiC,EAAwDjF,OACjEA,EAAQoF,kCACJH,MAGD1F,EAAyB0F,EAAzB1F,KAAMyD,EAAmBiC,EAAnBjC,wBAAmBiC,yBAI/B1F,KAAM8F,EAAI,GAAKrC,EAAmB,GAAIzD,GACtCyD,MAAAA,KCXSsC,GAAsB,SACjCC,IAEAvG,OADEwG,IAAAA,YAGIC,EAA8BpG,EAAckG,GAAwBA,EAAqBvG,QAAasC,SACrGkE,GAAeC,0kBC6DHC,OCnEZ,SACLC,EACAC,EACAC,SAEMC,EAASD,EAAW9G,MACrB+G,IAELD,EAAW9G,mBAAQ,wHAAkCgH,2BAAAA,4CAE1C,IAAIC,mCAAQ,WAAMC,6FACyCF,EAAK,GAA7DG,IAAAA,aAAcC,IAAAA,qBAAyBC,+CAI1CF,8BACHD,WAAcH,EAAOO,MAAMC,EAAMP,6EAI7BQ,EAAYL,EAAaM,gBACVV,EAAOO,MAAMC,EAAMP,WAAlCU,SACAC,EAAUR,EAAaM,MACvBG,EAAWD,EAAUH,EAC3BN,EAAQQ,GAEFG,KACJC,UAAWd,EAAK,GAChB/F,QAASoG,EACTU,QAASf,EAAK,GACdgB,YAAahB,EAAK,GAClBU,OAAAA,EACAO,MAAO,CAAEL,SAAAA,EAAUD,QAAAA,EAASH,UAAAA,IACxBJ,EAAuB,CAAEc,kBAAmBd,GAAyB,IAG3ED,EAAagB,IAAIC,EAAqBP,gKAGjCZ,QAAQoB,uHCvCd,SACLzB,EACAC,EACAC,SAEMC,EAASD,EAAW9G,MACrB+G,IAELD,EAAW9G,mBAAQ,wHAAkCgH,2BAAAA,mCAC5C,IAAIC,mCAAc,WAAMC,2FACmCF,EAAK,GAA7DG,IAAAA,aAAcC,IAAAA,qBAAyBC,+CAI1CF,kCACGJ,EAAOO,MAAMC,EAAMP,iBACzBE,qCAIIM,EAAYL,EAAaM,eACzBV,EAAOO,MAAMC,EAAMP,UACnBW,EAAUR,EAAaM,MACvBG,EAAWD,EAAUH,EAC3BN,IAEMW,KACJS,gBAAiBtB,EAAK,GACtBc,UAAWd,EAAK,GAChB/F,QAASoG,EACTU,QAASf,EAAK,GACdgB,YAAahB,EAAK,GAClBiB,MAAO,CAAEL,SAAAA,EAAUD,QAAAA,EAASH,UAAAA,GAC5BxH,MAAOgH,EAAK,IACRI,EAAuB,CAAEc,kBAAmBd,GAAyB,IAG3ED,EAAagB,IAAII,EAAmBV,mMCrCnC,SACLjB,EACAC,EACAC,SAEMC,EAASD,EAAW9G,MACrB+G,IAELD,EAAW9G,mBAAQ,wHAAkCgH,2BAAAA,mCAC5C,IAAIC,mCAAc,WAAMC,uFACaF,EAAK,GAAvCG,IAAAA,aAAiBE,wBAEpBF,kCACGJ,EAAOO,MAAMC,EAAMP,iBACzBE,qCAIIM,EAAYL,EAAaM,eACzBV,EAAOO,MAAMC,EAAMP,UACnBW,EAAUR,EAAaM,MACvBG,EAAWD,EAAUH,EAC3BN,IAEAC,EAAagB,IAAIK,EAAwB,CACvCvH,QAASoG,EACTU,QAASf,EAAK,GACdgB,YAAahB,EAAK,GAClBU,OAAQV,EAAK,GACbiB,MAAO,CAAEL,SAAAA,EAAUD,QAAAA,EAASH,UAAAA,8NHsLxBO,iKAL4C,IAAIU,6CACmC,IAAIA,2EAK3FC,EAAsB,MAEvBX,EAAQY,OACXD,EAAOxE,KAAK,IAAI0E,UAAU,uDAGtBb,EAAQc,sBAAwBvI,EAAcyH,EAAQc,qBAAsB,CAEhFH,EAAOxE,KAAK,IAAI0E,UADA,6FAIdF,EAAO/H,aACH+H,OAGHI,OAASf,EAAQY,WACjBI,qBAAuBhB,EAAQiB,sBAAuB,OACtDC,+BAAiClB,EAAQmB,+BItO1B,eJuOfC,qBAAuBpB,EAAQc,qBAAuB,QACtDO,qBAAarB,EAAQ9H,yBAAaoJ,+FAGzC,kBACSC,KAAKR,iDAGd,WACE9D,EACA+C,EACA9G,+FAEQgE,EAAcD,EAAdC,IAAKsE,EAASvE,EAATuE,KAERtE,2CACIgC,QAAQoB,OAAO,IAAIO,UAAU,+DAGhCY,WACDvI,OACHG,oBAAqBqI,EAAuBxE,GAC5ChF,UAAWqJ,KAAKF,sBAGeE,KAAKI,4BAA4B1E,EAAa+C,EAASyB,aAAlFG,SACEC,EAAoCD,EAApCC,cAAepJ,EAAqBmJ,EAArBnJ,MAAMqJ,EAAeF,EAAfE,YAKdC,UAAYD,EAAWrG,QAASuG,GAAiCvJ,EAAM8I,KAAKF,sDAClF,CAAEY,QAAShF,eAGf6E,EAAWC,4BACRG,EAAcX,KAAKY,4BAA4BX,EAAM,CAAEK,cAAAA,EAAepJ,KAAAA,GAAQuH,EAASyB,IAEzFzB,EAAQoC,mDACJF,mCAGD,CAAEG,SAAU,CAAER,cAAAA,EAAepJ,KAAAA,oBAGhC6J,EAAcC,GAAYtF,EAAa2E,EAAoBH,GAC3De,EAAkBC,EAAMH,GACsBb,EAA5CpI,oBAA4CoI,EAAvBvJ,UAAcwK,IAASjB,yCAC7CvI,WAAcwJ,OAAMF,gBAAAA,UACtBG,yBAAyBnB,EAAM,CAAEK,cAAAA,EAAepJ,KAAAA,GAAQuH,EAAS9G,qBAC/D,CAAE+I,QAAS,CAAE/E,IAAKoF,EAAad,KAAMoB,EAAYJ,GAAkBlF,QAASkF,+IAGrF,WACEvF,EACA4F,EACA1E,EACA6B,EACA9G,+EAEMuI,WACDvI,OACHG,oBAAqBqI,GAAwBmB,MAAAA,EAAAA,EAAsB5F,GAAaC,KAChFhF,UAAWqJ,KAAKF,+BAGXE,KAAKuB,eAAe7F,EAAa4F,EAAoB1E,EAAiB6B,EAASyB,oJAGxF,WACExE,EACAkB,EACA6B,EACA9G,+EAEMuI,WACDvI,OACHG,oBAAqBqI,EAAuBzE,EAAYC,KACxDhF,UAAWqJ,KAAKF,+BAGXE,KAAKuB,eAAe7F,OAAazC,EAAW2D,EAAiB6B,EAASyB,oJAG/E,WACE1B,EACAyB,EACAxB,EACA9G,2FAEOqI,KAAKwB,iBAAiBhD,EAAWyB,EAAMxB,EAAS9G,iKAGzD,WACEsI,EACAxB,EACA9G,8FAEqBqI,KAAKwB,iBAAiBC,EAAiBxB,EAAMxB,EAAS9G,aAArEyG,mDAGG,mBAGuBA,EAAOrH,MAA/BuJ,IAAAA,cAAepJ,IAAAA,uBAEhB,CACLoJ,cAAeoB,EAAuBpB,GACtCpJ,KAAAA,+IAIJ,SAAkC+I,QAC3B0B,uBAAuBC,OAAO3B,2DAGrC,WACEvE,EACAmG,EACApD,EACA9G,2FAEOqI,KAAKY,4BAA4BlF,EAAYuE,KAAM4B,EAAcpD,EAAS9G,sJAGnF,WACEQ,EACA2J,EACAzB,EACA5B,EACA9G,sEAEI4C,EAAepC,EAAW,CAAEL,oBAAqBH,EAAQG,sDACrDkI,KAAK+B,wBAAwB5J,EAAW2J,EAAyBzB,EAAoB5B,EAAS9G,gDAE9FqI,KAAKgC,sBAAsB7J,EAAW2J,EAAyBzB,EAAoB5B,EAAS9G,2JAItG,WACEQ,EACA2J,EACAzB,EACA5B,EACA9G,yGAEMsK,EAAe3J,EAAuBH,EAAW2J,EAAyBnK,GACxEuK,EAAwFD,EAAxFC,2BAA4BC,EAA4DF,EAA5DE,gBAAiBrE,EAA2CmE,EAA3CnE,qBAAsBzF,EAAqB4J,EAArB5J,iBACrEE,EAAgBZ,EAAQa,aAAaC,IAAIJ,GACvC+J,EAA2EN,EAA3EM,WAAYtI,EAA+DgI,EAA/DhI,aAAcC,EAAiD+H,EAAjD/H,aAAcmD,EAAmC4E,EAAnC5E,qBAAsBlE,EAAa8I,EAAb9I,SAEhEqJ,EAAmB,CACvBC,cAAcF,MAAAA,SAAAA,EAAYG,cAAcrF,MAAAA,SAAAA,EAAsBqF,YAC9D1J,cAAeG,EACfc,aAAAA,EACAC,aAAAA,IAGEsD,EAAamF,wBAAwBjK,oCACDyH,KAAKyC,oCACzCP,EACApE,EACAW,EACA9G,mBAJM+K,IAAAA,aAAc3L,IAAAA,MAOtBsG,EAAasF,uBACX,CAAED,aAAAA,EAAcxL,KAAMH,GACtBsJ,EACA4B,EACAI,EACA5D,EACA9G,2BAGIiL,EACJvF,EAAawF,0BAA0BT,EAAYD,IACnD9E,EAAawF,0BAA0B3F,EAAsBiF,GAE/D9E,EAAayF,uBACXzC,EAAmB/G,mBACnB,CAAEpC,KAAM0L,GACRvK,EACAgK,GAGFhF,EAAa0F,eAAe1C,EAAmBnJ,KAAM,CAAEA,KAAM0L,GAAmBT,8JAIpF,WACEhK,EACA2J,EACAzB,EACA5B,EACA9G,gHAEMsK,EAAe3J,EAAuBH,EAAW2J,EAAyBnK,GACxEwK,EAA4DF,EAA5DE,gBAAiBrE,EAA2CmE,EAA3CnE,qBAAsBzF,EAAqB4J,EAArB5J,iBACzCE,EAAgBZ,EAAQa,aAAaC,IAAIJ,YAEwB2H,KAAKgD,8BAC1ElB,EACAG,EACA1J,EACAkG,EACA9G,sBALM+K,IAAAA,aAAcxL,IAAAA,KAAMkL,IAAAA,WAAYlF,IAAAA,qBAQhCpD,EAAyCgI,EAAzChI,aAAcC,EAA2B+H,EAA3B/H,aAAcf,EAAa8I,EAAb9I,SAEpCqE,EAAasF,uBACX,CAAED,aAAAA,EAAcxL,KAAAA,GAChBmJ,EACA4B,EACA,CAAEK,aAAcW,EAAI/L,EAAMmD,GAAgBxB,cAAeG,EAAUc,aAAAA,EAAcC,aAAAA,GACjF0E,EACA9G,GAGGuL,EAAahM,6DAKZiM,EAA4B,GAElCC,EACEjL,EAJqBjB,EAMrBS,EAAQG,qBACR,SACE+B,EACAG,EACAqJ,EACAC,EACAC,GAEAJ,EAASvI,KACPqD,EAAKuF,kBACH3J,EACA,CACE6I,aAAAA,EACAN,WAAAA,EACAtI,aAAcuJ,EACdtJ,aAAcuJ,EACdG,MAAOF,EACPzF,qBAAAA,EACAzF,iBAAAA,EACA6E,qBAAAA,EACAlE,SAAUgB,YAEPqG,OAAoBnJ,KAAMmJ,EAAmBnJ,KAAKiL,KACvD1D,EACA9G,iBAMFgG,QAAQ+F,IAAIP,4IAGpB,aAGE1E,EACA9G,cAHEgE,IAAAA,IACAzE,IAAAA,KAASyM,gBAILrD,EAAgBN,KAAK4D,yBAAuB1M,KAAAA,GAASyM,GAAchM,GACnEiE,EAAYC,EAAwBF,EAAKhE,EAAQmE,WAAW,GAC5DrC,EAAqBC,EAAekC,UAErCnC,GAILA,EAAmBiB,SAAQ,gBAAGvC,IAAAA,iBAC5B0L,EAAKC,sBACH3L,EACA,CAAEE,iBAAkBV,EAAQmE,WAC5B,CAAEwE,cAAAA,EAAepJ,KAAAA,GACjBuH,EACA9G,MAIG2I,GAbEA,8CAgBX,WACE5E,EACA4F,EACA1E,EACA6B,EACA9G,+FAEMoM,EAAyBhH,GAA2BH,EAAiBjF,GACvEqM,EAA4ED,EAE5EE,GAAuBrH,EAAiBjF,UACrCuM,kCAAkCH,EAAwBpM,GAC/DqM,OAAyB/K,GAGvBkL,GAAoBvH,EAAiBjF,KACvCqM,EAAyBhE,KAAKoE,gCAAgCL,EAAwBpM,IAGlFgJ,EAA+B,IAEjCqD,sBACM9M,EAAS8M,EAAT9M,KACFoJ,EAAgBN,KAAKqE,oBAAoB3I,EAAasI,EAAwBvF,EAAS9G,GAE7FgJ,EAAY/F,KACVoF,KAAKsE,0CACH5I,EACA,CACE4E,cAAAA,EACA8B,WAAYmC,EAAUrN,GACtBgG,qBAAsBqH,EAAUrN,IAElCuH,EACA9G,IAOAA,EAAQmE,YAAc0I,IAGpB7M,EAAQuE,eAAiBoF,IAC3BX,EAAY/F,KACVoF,KAAKY,4BAA4BU,EAAmBrB,KAAM,CAAEK,cAAAA,EAAepJ,KAAAA,GAAQuH,EAAS9G,IAG9F8M,EAAuBzE,KAAK0E,yBAAyBhJ,EAAYuE,OAGnE0E,EAAqBtH,EAAauH,4BAA4BtE,EAAemE,GAC7EI,EAAY7E,KAAK8E,mBAAmB5N,EAAMuN,GAE1C9D,EAAY/F,KACVoF,KAAKY,4BACHlF,EAAYuE,KACZ,CAAEK,cAAeqE,EAAoBzN,KAAM2N,GAC3CpG,EACA9G,MAKF8G,EAAQoC,mDACJlD,QAAQ+F,IAAI/C,gBAGhBoE,GAAmBhB,EAAwBpM,IAAYgN,GAAsBE,6CACxE,CACLvE,cAAeqE,EACfzN,KAAM2N,mBAKJ3N,EAAyB6M,EAAzB7M,KAAM4F,EAAmBiH,EAAnBjH,QAASnC,EAAUoJ,EAAVpJ,wBAEhB,CACL2F,cAAeN,KAAKqE,oBAAoB3I,EAAaqI,EAAwBtF,EAAS9G,GACtFT,KAAAA,EACA4F,QAAAA,EACAnC,MAAAA,uJAIJ,WACE6D,EACAyB,EACAxB,EACA9G,mGAG6BqI,KAAKgF,eAAexG,EAAWyB,cAApDyC,WAEgBrF,EAAa4H,SAASvC,6CACnC,0BAGW1C,KAAKkF,eAAe1G,EAAWyB,EAAMxB,EAAS9G,aAA5DZ,UAEFoO,EAAYpO,8CACP,oCAGF,CAAE2L,aAAAA,EAAc3L,MAAAA,gEAEhB,mJAIX,kBACIqO,IAAAA,eAAgBC,IAAAA,QAChBvJ,IAAAA,UAEIwE,EAAgB,IAAInB,IAEpBuD,kBKtnBQ0C,IAAAA,eAAgBE,IAAAA,SAAUD,IAAAA,WACtCD,IAAmB3K,EAAQ2K,GAAiB,OACrBhO,OAAOmO,OAAOH,UAAhCI,OAAUrE,oBAEV,IAAIsE,EAAa,CACtBC,SAAUvE,EAAKtK,QAAO,SAACmB,EAAK0N,UACtBA,EAASC,IAAM3N,EAAI2N,IACdD,EAGF1N,IACNwN,YAIHH,GAAWA,EAAQO,IDtBW,iBCuBzB,IAAIH,EAAa,CAAEJ,QAAAA,IAGrB,IAAII,EAAa,CAAEI,aAAcP,ILmmBjBQ,CAAqB,CACxCV,eAAAA,EACAE,SAAUtF,KAAKL,+BACf0F,QAAAA,WAGF/E,EAAcyF,IAAIjK,EAAW4G,GAEzB0C,GACF1D,EAAuB0D,EAAgB9E,GAGlCA,6CAGT,WAEE9B,EACAyB,EACA+F,EACAC,2FAGejG,KAAKR,OAAO/G,cAAO+F,eAAcyB,qGAEvCtC,QAAQoB,gKAInB,SAAiCkB,OACzBwE,EAAuBzE,KAAK2B,uBAAuBlJ,IAAIwH,eACxD0B,uBAAuBC,OAAO3B,GAC5BwE,6CAGT,WAA6BjG,EAAuByB,2FAEnCD,KAAKR,OAAOoG,cAAOpH,eAAcyB,sGAEvC,uIAIX,SAAuBzI,SAAkB0O,IAAAA,SAAUC,IAAAA,sBAC5ClD,EAAIzL,EAAWwI,KAAKF,WAAY,UAIjCoG,KAICC,EAAc9O,QAIZ8O,EAAcjN,MAAK,SAAAkN,UAAQA,EAAKpN,WAAaxB,EAAU+K,4CAGhE,SAAyB8D,EAAQC,qBACxBC,EAAaF,EAAKC,GAAK,SAACE,EAAcC,UACpCzP,EAAcyP,IAAQA,EAAIC,EAAK5G,YAAc2G,EAAIC,EAAK5G,iBAAc7G,uCAI/E,SACE4I,EACA4C,UAEKA,EAIEzE,KAAK2G,cAAclC,EAAqBvN,KAAM2K,GAH5CA,4EAMX,WACExI,EACA3B,IAEA+G,EACA9G,oGAFE2I,IAAAA,cAAe8B,IAAAA,WAAYlF,IAAAA,qBAIvB+E,EAAe3J,EAAuBe,EAAO3B,EAAsBC,GACjEmG,EAA6DmE,EAA7DnE,qBAAsBzF,EAAuC4J,EAAvC5J,iBAAkBuO,EAAqB3E,EAArB2E,iBAC1CpP,EAAYyL,EAAI/F,EAAsB0J,GACtCrO,EAAgBZ,EAAQa,aAAaC,IAAIJ,GAE1C6K,EAAa1L,IAAee,MAAAA,GAAAA,EAAeI,mEAI5CuK,EAAa1L,2BACT2L,EAA4B,GAElCC,EACE/J,EACA7B,EACAG,EAAQG,qBACR,SACE+B,EACAgN,EACAC,EACAC,EACAxD,GAEAJ,EAASvI,KACPoM,EAAKC,8CACHpN,EACA,CAAE4J,MAAOF,EAAYzF,qBAAAA,EAAsBzF,iBAAAA,EAAkBuO,iBAAAA,GAC7D,CAAEtG,cAAAA,EAAe8B,WAAAA,EAAYlF,qBAAAA,GAC7BuB,EACA9G,iBAMFgG,QAAQ+F,IAAIP,4BAGdnD,KAAKkH,wCACT7N,EACA4I,EACA,CAAE3B,cAAAA,EAAe8B,WAAAA,EAAYlF,qBAAAA,GAC7BuB,EACA9G,8JAIJ,WACEwP,IAEA1I,EACA9G,gGAFEwO,IAAAA,cAAenN,IAAAA,SAIXoO,cAAgBjB,EAAc5K,KAAI,SAAA6K,UAAQA,EAAKpN,cAAWA,aAErC2E,QAAQ+F,IACjC0D,EAAU7L,KAAI,SAAAC,UAAQ6L,EAAK7F,iBAAiB8F,YAAkB9L,eAAS2L,GAAoB1I,EAAS9G,qBADhG4P,SAOsB,KAHtBC,EAAeD,EAAaE,QAAO,SAAArJ,WAAYA,MAGpC/G,OACfqQ,EAAcF,EAAa,GAClBA,EAAanQ,OAAS,IAC/BmQ,EAAaG,MAAK,kBAAiBC,IAAdlF,aAAmCmF,IAAdnF,oBAAsBkF,EAAElC,SAASC,IAAMkC,EAAEnC,SAASC,OAE5F+B,EAAc,CACZhF,aAAc8E,EAAa,GAAG9E,aAC9B3L,MAAOyQ,EAAa3Q,QAAO,SAACwP,SAAOtP,IAAAA,aAAYsQ,EAAKV,cAAcN,EAAKtP,KAAQ,wBAI3E2Q,GAAe,2JAGzB,eAGEnP,EACAkG,EACA9G,6GAJcmQ,IAAZ1F,WAAsD2F,IAAtB7K,qBAChCgF,IAAAA,2BAA4BC,IAAAA,gBAAiBrE,IAAAA,qBAK3CsE,EAAa/E,EAAawF,0BAA0BiF,EAAoB3F,GACxEjF,EAAuBG,EAAawF,0BAA0BkF,EAA8B5F,IAG5F9E,EAAamF,wBAAwBjK,oCACkByH,KAAKyC,oCAC5DP,EACApE,EACAW,EACA9G,mBAJoBqQ,IAAdtF,cAAiC3L,IAAAA,SAQvCmG,EAAuB8C,KAAK2G,cAAczJ,EAAsBnG,IAG9DiR,IACFtF,EAAesF,cAIbb,EAAmBlK,GAAoBC,EAAsB3E,EAAeyH,KAAKF,aAEnFzC,EAAa4K,cAAc1P,KAAkB4O,oCACUnH,KAAKkI,0BAC5Df,EACA5O,EACAkG,EACA9G,oBAJoBqQ,IAAdtF,cAAiC3L,IAAAA,SAQvCqL,EAAapC,KAAK2G,cAAcvE,EAAYrL,IAG1CiR,KAAuBtF,GAAgBsF,EAAkBtC,SAASC,eAAMjD,sBAAAyF,EAAczC,SAASC,QACjGjD,EAAesF,kBAIb9Q,EACHiO,EAAYjI,IAA0BiI,EAAY/C,aAE/CA,iBAAclF,EADd8C,KAAK2G,cAAczJ,EAAsBkF,qBAGxC,CACLM,aAAAA,EACAxL,KAAAA,EACAkL,WAAAA,EACAlF,qBAAAA,yKAIJ,WACE+C,EACAnC,EACAW,EACA9G,2FAEQqI,KAAKwB,iBAAiB4G,EAAqBnI,EAAMxB,WAAc9G,OAASmG,qBAAAA,MAC9E,8JAGJ,aAEEW,EACA9G,wFAFEgE,IAAAA,IAII0E,EAAyC,CAC7CC,cAAe,IAAInB,IACnBjI,KAAM,GACNqJ,WAAY,CAAEC,QAAS,EAAGtG,MAAO,GACjCZ,mBAAoB,IAAI6F,KAGpBvD,EAAYC,EAAwBF,EAAKhE,EAAQmE,WAAW,GAC5DrC,EAAqBC,EAAekC,4CAGjCyE,0BAGH1C,QAAQ+F,IACZjK,EAAmB8B,KAAI,gBAAGpD,IAAAA,iBACxBkQ,EAAK7E,kBACHrL,EACA,CAAEE,iBAAkBV,EAAQmE,WAC5BuE,EACA5B,EACA9G,qBAKN0I,EAAmBE,WAAalD,EAAaiL,yBAAyBjI,EAAmB/G,sCAClF+G,8IAGT,SACE0D,EACApM,OMx4BY4Q,EN04BNC,EAAiBxI,KAAKyI,+BAA+BhQ,IACzDd,EAAQ+Q,uBAGLD,+BAA+B7G,OAAOjK,EAAQ+Q,YM94BvCH,cN+4BqBC,IAAgBzE,KM94B3BlN,QACtB,SAACmB,EAA4C2Q,EAASlF,OAC5C2B,EAAkDuD,EAAlDvD,eAAgBlO,EAAkCyR,EAAlCzR,KAAM4F,EAA4B6L,EAA5B7L,QAASuI,EAAmBsD,EAAnBtD,QAAS1K,EAAUgO,EAAVhO,aAE5CyK,IACFpN,EAAIoN,eAAiBpN,EAAIoN,wBAAsBpN,EAAIoN,gBAAmBA,GAAmBA,GAG3FpN,EAAId,KAAOc,EAAId,KAAO0R,EAAM5Q,EAAId,KAAMA,GAAQA,EAEhC,IAAVuM,IACFzL,EAAIqN,QAAUA,GAGZ5B,IAAU8E,EAAiBlR,OAAS,IACtCW,EAAI8E,QAAUA,GAGZnC,IACG3C,EAAI2C,QACP3C,EAAI2C,MAAQ,IAGd3C,EAAI2C,MAAMC,KAAKD,EAAM,KAGhB3C,IAET,CAAEd,KAAM,gDNq3BV,WAEEsH,EACAyB,EACAvJ,EACAsI,EACAgH,EACAC,2FAGQjG,KAAKR,OAAOuG,cAAOvH,eAAcyB,GAAQsE,EAAU7N,GAAQsI,6OAMrE,WACEtD,EACAmG,EACApD,EACA9G,oFAEMkR,EAAgBhN,EAAwBH,EAAYC,IAAKhE,EAAQmE,WAAW,GAC5ErC,EAAqBC,EAAemP,oEAMpClL,QAAQ+F,IACZjK,EAAmB8B,KAAI,gBAAGpD,IAAAA,iBACjB2Q,EAAK7B,8CACV9O,EACA,CAAEE,iBAAkBV,EAAQmE,WAC5B+F,EACApD,EACA9G,wKAMR,WACE0B,EACA4I,IAEAxD,EACA9G,6FAFE2I,IAAAA,cAAe8B,IAAAA,WAAYlF,IAAAA,qBAIrB7E,EAAuC4J,EAAvC5J,iBAAkBuO,EAAqB3E,EAArB2E,iBACpBpP,EAAYyL,EAAIb,EAAYwE,GAC5BrO,EAAgBZ,EAAQa,aAAaC,IAAIJ,GACzCqK,EAAepC,EAAc7H,IAAIJ,IAEnC8M,EAAY3N,IAAee,GAAkBmK,0DAI3CS,EAA4B,IAEzBvI,KACPoF,KAAK+I,+BACH1P,EACA4I,EACA,CAAES,aAAAA,EAAcxL,KAAMgG,EAAsB3E,cAAAA,GAC5CkG,EACA9G,MAIEuO,EAAWlG,KAAKgJ,eAAexR,EAAWe,KAE/BA,EAAcG,gBACvB0J,EAAYwE,GAGhBV,GACF/C,EAASvI,KACPoF,KAAKiJ,qBAAqBhH,EAAc,CAAES,aAAAA,EAAcxL,KAAMkL,EAAY7J,cAAAA,GAAiBkG,EAAS9G,cAIlGgG,QAAQ+F,IAAIP,yJAGpB,eAGE1E,EACA9G,6FAHEiP,IAAAA,iBACAlE,IAAAA,aAAcxL,IAAAA,KAAMqB,IAAAA,cAIlBf,EAAYyL,EAAI/L,EAAM0P,GACpB/N,EAAgBN,EAAc2N,SAAW3N,EAAcS,SAAWxB,EAAU+K,WAC5E2G,YAAmBrQ,eAAkBrB,EAAUwI,KAAKF,sBACrCE,KAAKwB,iBAAiB8F,EAAe4B,EAAezK,EAAS9G,iBAA5EyG,YAGJ5G,EAAYwI,KAAK2G,cAAcvI,EAAOrH,MAAOS,cAGzCwI,KAAKmJ,eACT7B,EACA4B,EACA1R,EACA,CAAE4R,aAAc,CAAEvD,aAAcnD,EAAa2G,qBAAuBC,IAAK7K,EAAQ6K,KACjF7K,EACA9G,aAGET,EAAM0P,EAAkB,CAAE2C,qBAAejC,eAAkB4B,6IAGjE,SACE7P,EACA3B,IAEA+G,EACA9G,cAFE2I,IAAAA,cAAepJ,IAAAA,KAISsC,EAA6B9B,EAA/CW,iBACF4J,EAAe3J,EAAuBe,EAAO3B,EAAsBC,GACjEU,EAAuC4J,EAAvC5J,iBAAkBuO,EAAqB3E,EAArB2E,iBACpBpP,EAAYyL,EAAI/L,EAAM0P,GACtBrO,EAAgBZ,EAAQa,aAAaC,IAAIJ,IAE1C6K,EAAa1L,IAAee,MAAAA,GAAAA,EAAeI,sBAI3C6Q,4BAA4BlJ,EAAe,CAAE9G,yBAAAA,EAA0BnB,iBAAAA,GAAoBV,GAE5FuL,EAAa1L,IACf4L,EACE/J,EACA7B,EACAG,EAAQG,qBACR,SACE+B,EACAgN,EACAC,EACAC,EACAxD,GAEAkG,EAAK3F,sBACHjK,EACA,CAAE4J,MAAOF,EAAYlL,iBAAAA,EAAkBuO,iBAAAA,GACvC,CAAEtG,cAAAA,EAAepJ,KAAAA,GACjBuH,EACA9G,kDAOV,SACE2I,WACE9G,IAAAA,yBAA0BnB,IAAAA,iBAC1BG,IAAAA,aAAcsD,IAAAA,cAEZwE,EAAcsF,IAAIvN,QAIhBE,EAAgBC,EAAaC,IAAIJ,MAEnCE,GAAiByH,KAAKH,qBAAqBtH,EAAcS,UAAW,KAChE0J,EAAe,IAAI+C,EAAa,CAAEI,aAAc7F,KAAKH,qBAAqBtH,EAAcS,YAC9FqE,EAAaqM,kBAAkBpJ,EAAeoC,EAAcrK,EAAkByD,QACrEkE,KAAKP,sBAAwBjG,GACtC6D,EAAaqM,kBACXpJ,EACAA,EAAc7H,IAAIe,GAClBnB,EACAyD,yDAKN,WAEEmE,EACAwE,EACAuB,EACAC,uEAEKtE,uBAAuBoE,IAAI9F,EAAMwE,6JAGxC,WACExE,IAEAxB,EACA9G,qFAFE2I,IAAAA,cAAepJ,IAAAA,KAIXyS,EAA0BC,EAAuBtJ,GACjDuF,EAAexI,EAAawM,0BAA0BvJ,EAAe3I,EAAQmE,oBAE7EkE,KAAKmJ,eACT1H,EACAxB,EACA,CAAEK,cAAeqJ,EAAyBzS,KAAAA,GAC1C,CAAEkS,aAAc,CAAEvD,aAAAA,GAAgByD,IAAK7K,EAAQ6K,KAC/C7K,EACA9G,gKAIJ,WACE0B,EACA4I,IAEAxD,EACA9G,+FAFE+K,IAAAA,aAAcxL,IAAAA,KAAMqB,IAAAA,cAId2J,EAAuED,EAAvEC,2BAA4BpE,EAA2CmE,EAA3CnE,qBAAsB8I,EAAqB3E,EAArB2E,iBACtDpP,EAAYyL,EAAI/L,EAAM0P,GACpBV,EAAWlG,KAAKgJ,eAAexR,EAAWe,GAC1CuR,EAAsBvR,EAAcG,cAAgBH,EAAcI,cAEpEhB,EAAQmE,YAAc0I,IAAU0B,IAAY4D,0BAC1C9S,EAAcQ,cAAc6B,EAAM0Q,2BAANC,EAAoBC,aAClDzS,EAAY0S,GAAmC1S,EAAW6B,EAAM0Q,aAAaE,WAAYhI,EAActK,aAGpFqI,KAAKwB,iBAAiB4G,EAAqBlG,EAA4BzD,WACvF9G,OACHmG,qBAAAA,mBAFIM,WAKQ8E,EAAa1L,KACzBA,EAAYwI,KAAK2G,cAAcvI,EAAOrH,MAAOS,cAGzCwI,KAAKmJ,eACTf,EACAlG,EACA1K,EACA,CAAE4R,aAAc,CAAEvD,aAAcnD,EAAa2G,qBAAuBC,IAAK7K,EAAQ6K,KACjF7K,WACK9G,OAASmG,qBAAAA,aAGZvD,EAAelB,EAAO,CAAEvB,oBAAqBH,EAAQG,wBACnDoO,IACEhP,EAAM0P,EAAkB,CAAE2C,qBAAenB,eAAwBlG,OAE/DhL,EAAM0P,0JAMpB,SACE7C,EACApM,OAEM6Q,EAAiBxI,KAAKyI,+BAA+BhQ,IAAId,EAAQ+Q,WAEnEF,OACGC,+BAA+B1C,IAAIpO,EAAQ+Q,sBAAeF,IAAgBzE,UAE1E0E,+BAA+B1C,IAAIpO,EAAQ+Q,UAAW,CAAC3E,8CAplChE,SAAwCzK,OAChCiH,EAAyB,CAAEC,QAAS,EAAGtG,MAAO,UAEpDZ,EAAmBoB,SAAQ,SAAAyP,GACzB5J,EAAWrG,OAASiQ,EAAgB9S,WAC9BmJ,EAAU2J,EAAgB1C,QAAO,qBAAG3O,WAC1CyH,EAAWC,SAAWA,EAAQnJ,UAGzBkJ,2CAGT,SAAyC6J,EAAwBjI,UACxDe,EAAakH,GAAqB7F,EAAU6F,EAAkBjI,SAAoBlJ,2CAG3F,SAAyCqH,EAA0CxE,OAG5EwE,QIrFsB,eJyFrBoC,EAAepC,EAAc7H,IAAIqD,UAChC4G,EAAeA,EAAa2G,oBI1FR,wCJ6F7B,SAA6B9Q,OACtBA,SACI,MAGD2N,EAA4B3N,EAA5B2N,SAAUC,EAAkB5N,EAAlB4N,qBACXD,GAAYC,EAAcjN,MAAK,SAAAkN,WAAUA,EAAKF,mDAGvD,SAAuC3N,WAEjCA,IACDyH,KAAKiI,cAAc1P,IAAkBA,EAAcG,cAAgBH,EAAcI,uCAItF,SAAwB+J,UACNO,EAAIP,EAAc,CInHd,WACK,eACL,YJiHmD,IACpDA,EAAa2H,sDAGlC,SACE/J,EACAmE,UAEKA,EAIE,IAAItF,gBAAQsF,EAAqBnE,iBAAkBA,KAHjDA,gCAMX,SACE5E,IAEAyG,OADEjL,IAAAA,QAGGgM,EAAahM,IAAUiO,EAAYjO,IAEjC,GAAIgM,EAAahM,GAAO,KACvBoT,EAAiBpT,EACvBwE,EAAYyG,GAAmBvL,EAAQ0T,GAAkB,GAAK,SAH9D5O,EAAYyG,GAAmBjL,wCAOnC,SACE0L,MAGAP,EACA2D,SAHE1F,IAAAA,cAAepJ,IAAAA,KAAMoC,IAAAA,mBACrB6I,IAAAA,gBAAiB9J,IAAAA,iBAGjByD,IAAAA,UAEFuB,EAAaqM,kBAAkBpJ,EAAesC,EAAgBF,aAAcrK,EAAkByD,GAC9FuB,EAAayF,uBAAuBxJ,EAAoBsJ,EAAiBvK,EAAkBgK,GAC3FhF,EAAa0F,eAAe7L,EAAM0L,EAAiBT,oCAGrD,SACE7B,EACAoC,EACArK,EACAyD,MAEK4G,GAILpC,EAAcyF,IAAI1N,EAAkBqK,OAC9B6H,EAAwBjK,EAAc7H,IAAIqD,KAE3CyO,GAAyBA,EAAsB7E,SAASC,IAAMjD,EAAagD,SAASC,MACvFrF,EAAcyF,IAAIjK,EAAW4G,0CAIjC,SACEpJ,IAEAjB,SADEnB,IAAAA,KAEAoL,IAAAA,aAAczJ,IAAAA,cAAeiB,IAAAA,aAAcC,IAAAA,gBAEzCoL,EAAYtM,IAAkBiB,IAAiBG,MAC7CX,EAAmBsM,IAAIvN,UAI3BiB,EAAmByM,IAAI1N,EAAkB,CAAC,CAAEyB,aAAAA,EAAcC,aAAAA,EAAcjB,SAAUqM,EAAYjO,cAI5FoL,IAAiBzJ,OAIf9B,EAAQuC,EAAmBb,IAAIJ,GAC/B8R,EAAkBpT,GAA+C,GAEnEoT,EAAgBjR,MAAK,qBAAGF,WAA4BsJ,MAIxDhJ,EAAmByM,IAAI1N,cAClB8R,IACH,CAAErQ,aAAAA,EAAcC,aAAAA,EAAcjB,SAAUqM,EAAYjO,GAAO8B,SAAUsJ"}
@@ -1,23 +1,23 @@
1
1
  -----------------------------
2
2
  Rollup File Analysis
3
3
  -----------------------------
4
- bundle size: 95.576 KB
5
- original size: 64.367 KB
4
+ bundle size: 95.405 KB
5
+ original size: 63.84 KB
6
6
  code reduction: 0 %
7
7
  module count: 25
8
8
 
9
9
  ██████████████████████████████████░░░░░░░░░░░░░░░░
10
10
  file: /src/main/index.ts
11
- bundle space: 69.93 %
12
- rendered size: 66.838 KB
13
- original size: 38.946 KB
11
+ bundle space: 69.88 %
12
+ rendered size: 66.667 KB
13
+ original size: 38.617 KB
14
14
  code reduction: 0 %
15
15
  dependents: 1
16
16
  - /src/index.ts
17
17
 
18
18
  ██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
19
19
  file: /src/debug/log-cache-query/index.ts
20
- bundle space: 5.27 %
20
+ bundle space: 5.28 %
21
21
  rendered size: 5.036 KB
22
22
  original size: 1.464 KB
23
23
  code reduction: 0 %
@@ -26,7 +26,7 @@ dependents: 1
26
26
 
27
27
  ██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
28
28
  file: /src/debug/log-cache-entry/index.ts
29
- bundle space: 4.85 %
29
+ bundle space: 4.86 %
30
30
  rendered size: 4.638 KB
31
31
  original size: 1.371 KB
32
32
  code reduction: 0 %
@@ -90,7 +90,7 @@ dependents: 1
90
90
 
91
91
  ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
92
92
  file: /src/helpers/filterIDsAndTypeNames.ts
93
- bundle space: 1.04 %
93
+ bundle space: 1.05 %
94
94
  rendered size: 998 Bytes
95
95
  original size: 1.165 KB
96
96
  code reduction: 14.33 %
@@ -126,7 +126,7 @@ dependents: 1
126
126
 
127
127
  ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
128
128
  file: /src/helpers/filterInlineFragments.ts
129
- bundle space: 0.82 %
129
+ bundle space: 0.83 %
130
130
  rendered size: 788 Bytes
131
131
  original size: 999 Bytes
132
132
  code reduction: 21.12 %
@@ -144,7 +144,7 @@ dependents: 1
144
144
 
145
145
  ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
146
146
  file: /src/helpers/filterFragmentSpreads.ts
147
- bundle space: 0.64 %
147
+ bundle space: 0.65 %
148
148
  rendered size: 616 Bytes
149
149
  original size: 942 Bytes
150
150
  code reduction: 34.61 %
@@ -210,7 +210,7 @@ dependents: 1
210
210
  file: /src/defs/index.ts
211
211
  bundle space: 0 %
212
212
  rendered size: 0 Byte
213
- original size: 4.952 KB
213
+ original size: 4.768 KB
214
214
  code reduction: 100 %
215
215
  dependents: 1
216
216
  - /src/index.ts
@@ -228,7 +228,7 @@ dependents: 1
228
228
  file: /src/index.ts
229
229
  bundle space: 0 %
230
230
  rendered size: 0 Byte
231
- original size: 72 Bytes
231
+ original size: 58 Bytes
232
232
  code reduction: 100 %
233
233
  dependents: 0
234
234
 
package/lib/main/index.js CHANGED
@@ -1,23 +1,17 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
3
5
  Object.defineProperty(exports, "__esModule", {
4
6
  value: true
5
7
  });
6
- var _exportNames = {
7
- CacheManager: true
8
- };
8
+ var _exportNames = {};
9
9
  Object.defineProperty(exports, "default", {
10
10
  enumerable: true,
11
11
  get: function () {
12
12
  return _main.default;
13
13
  }
14
14
  });
15
- Object.defineProperty(exports, "CacheManager", {
16
- enumerable: true,
17
- get: function () {
18
- return _main.CacheManager;
19
- }
20
- });
21
15
 
22
16
  var _defs = require("./defs");
23
17
 
@@ -33,9 +27,5 @@ Object.keys(_defs).forEach(function (key) {
33
27
  });
34
28
  });
35
29
 
36
- var _main = _interopRequireWildcard(require("./main"));
37
-
38
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
39
-
40
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
30
+ var _main = _interopRequireDefault(require("./main"));
41
31
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA","sourcesContent":["export * from \"./defs\";\nexport { default, CacheManager } from \"./main\";\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA","sourcesContent":["export * from \"./defs\";\nexport { default } from \"./main\";\n"],"file":"index.js"}
@@ -5,8 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.default = init;
9
- exports.CacheManager = void 0;
8
+ exports.default = void 0;
10
9
 
11
10
  require("core-js/modules/es.promise.js");
12
11
 
@@ -210,6 +209,8 @@ let CacheManager = (_dec = (0, _debug.logCacheQuery)(), _dec2 = (0, _debug.logCa
210
209
  }
211
210
 
212
211
  constructor(options) {
212
+ var _options$typeIDKey;
213
+
213
214
  (0, _defineProperty2.default)(this, "_cache", void 0);
214
215
  (0, _defineProperty2.default)(this, "_cascadeCacheControl", void 0);
215
216
  (0, _defineProperty2.default)(this, "_fallbackOperationCacheability", void 0);
@@ -236,7 +237,7 @@ let CacheManager = (_dec = (0, _debug.logCacheQuery)(), _dec2 = (0, _debug.logCa
236
237
  this._cascadeCacheControl = options.cascadeCacheControl || false;
237
238
  this._fallbackOperationCacheability = options.fallbackOperationCacheability || _consts.NO_CACHE;
238
239
  this._typeCacheDirectives = options.typeCacheDirectives || {};
239
- this._typeIDKey = options.typeIDKey;
240
+ this._typeIDKey = (_options$typeIDKey = options.typeIDKey) !== null && _options$typeIDKey !== void 0 ? _options$typeIDKey : _core.DEFAULT_TYPE_ID_KEY;
240
241
  }
241
242
 
242
243
  get cache() {
@@ -1085,15 +1086,5 @@ let CacheManager = (_dec = (0, _debug.logCacheQuery)(), _dec2 = (0, _debug.logCa
1085
1086
  }
1086
1087
 
1087
1088
  }, ((0, _applyDecoratedDescriptor2.default)(_class.prototype, "_getCacheEntry", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, "_getCacheEntry"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "_setCacheEntry", [_dec2], Object.getOwnPropertyDescriptor(_class.prototype, "_setCacheEntry"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "_setPartialQueryResponse", [_dec3], Object.getOwnPropertyDescriptor(_class.prototype, "_setPartialQueryResponse"), _class.prototype)), _class));
1088
- exports.CacheManager = CacheManager;
1089
-
1090
- function init(userOptions) {
1091
- if (!(0, _isPlainObject2.default)(userOptions)) {
1092
- throw new TypeError("@graphql-box/cache-manager expected userOptions to be a plain object.");
1093
- }
1094
-
1095
- return clientOptions => new CacheManager({ ...clientOptions,
1096
- ...userOptions
1097
- });
1098
- }
1089
+ exports.default = CacheManager;
1099
1090
  //# sourceMappingURL=index.js.map