@graphql-box/cache-manager 5.0.1 → 5.1.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.
- package/dist/cjs/index.cjs +1 -1476
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/esm/index.mjs +1 -1474
- package/dist/esm/index.mjs.map +1 -1
- package/dist/production.analysis.txt +279 -0
- package/dist/types/cjs/helpers/createEntityDataKey.d.cts +4 -0
- package/dist/types/cjs/helpers/createEntityDataKey.d.cts.map +1 -0
- package/dist/types/cjs/helpers/filterOutPropsWithEntityArgsOrDirectives.d.cts +5 -0
- package/dist/types/cjs/helpers/filterOutPropsWithEntityArgsOrDirectives.d.cts.map +1 -0
- package/dist/types/cjs/helpers/filterOutPropsWithEntityOrArgs.d.cts +6 -0
- package/dist/types/cjs/helpers/filterOutPropsWithEntityOrArgs.d.cts.map +1 -0
- package/dist/types/cjs/helpers/isFieldEntity.d.cts +3 -0
- package/dist/types/cjs/helpers/isFieldEntity.d.cts.map +1 -0
- package/dist/types/cjs/helpers/validTypeIdValue.d.cts +1 -1
- package/dist/types/cjs/helpers/validTypeIdValue.d.cts.map +1 -1
- package/dist/types/cjs/main.d.cts +3 -5
- package/dist/types/cjs/main.d.cts.map +1 -1
- package/dist/types/cjs/types.d.cts +5 -5
- package/dist/types/cjs/types.d.cts.map +1 -1
- package/dist/types/esm/helpers/createEntityDataKey.d.ts +4 -0
- package/dist/types/esm/helpers/createEntityDataKey.d.ts.map +1 -0
- package/dist/types/esm/helpers/filterOutPropsWithEntityArgsOrDirectives.d.ts +5 -0
- package/dist/types/esm/helpers/filterOutPropsWithEntityArgsOrDirectives.d.ts.map +1 -0
- package/dist/types/esm/helpers/filterOutPropsWithEntityOrArgs.d.ts +6 -0
- package/dist/types/esm/helpers/filterOutPropsWithEntityOrArgs.d.ts.map +1 -0
- package/dist/types/esm/helpers/isFieldEntity.d.ts +3 -0
- package/dist/types/esm/helpers/isFieldEntity.d.ts.map +1 -0
- package/dist/types/esm/helpers/validTypeIdValue.d.ts +1 -1
- package/dist/types/esm/helpers/validTypeIdValue.d.ts.map +1 -1
- package/dist/types/esm/main.d.ts +3 -5
- package/dist/types/esm/main.d.ts.map +1 -1
- package/dist/types/esm/types.d.ts +5 -5
- package/dist/types/esm/types.d.ts.map +1 -1
- package/dist/types/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +5 -5
- package/src/__snapshots__/index.test.ts.snap +19450 -19450
- package/src/helpers/createEntityDataKey.ts +11 -0
- package/src/helpers/filterOutPropsWithEntityArgsOrDirectives.ts +45 -0
- package/src/helpers/filterOutPropsWithEntityOrArgs.ts +31 -0
- package/src/helpers/isFieldEntity.ts +24 -0
- package/src/helpers/validTypeIdValue.ts +3 -3
- package/src/index.test.ts +153 -127
- package/src/main.ts +122 -179
- package/src/types.ts +5 -5
- package/dist/types/cjs/helpers/filterOutPropsWithArgsOrDirectives.d.cts +0 -6
- package/dist/types/cjs/helpers/filterOutPropsWithArgsOrDirectives.d.cts.map +0 -1
- package/dist/types/esm/helpers/filterOutPropsWithArgsOrDirectives.d.ts +0 -6
- package/dist/types/esm/helpers/filterOutPropsWithArgsOrDirectives.d.ts.map +0 -1
- package/src/helpers/filterOutPropsWithArgsOrDirectives.ts +0 -29
package/dist/cjs/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../cache-manager/src//constants.ts","../cache-manager/src//debug/logCacheEntry.ts","../cache-manager/src//debug/logCacheQuery.ts","../cache-manager/src//debug/logPartialCompiled.ts","../cache-manager/src//helpers/areOnlyPopulatedFieldsTypeIdKeys.ts","../cache-manager/src//helpers/mergeObjects.ts","../cache-manager/src//helpers/combineData.ts","../cache-manager/src//helpers/deriveOpCacheability.ts","../cache-manager/src//helpers/filterOutPropsWithArgsOrDirectives.ts","../cache-manager/src//helpers/createFragmentSpreadChecklist.ts","../cache-manager/src//helpers/checkFieldPathChecklist.ts","../cache-manager/src//helpers/filterFragmentSpreads.ts","../cache-manager/src//helpers/filterIDsAndTypeNames.ts","../cache-manager/src//helpers/filterInlineFragments.ts","../cache-manager/src//helpers/filterField.ts","../cache-manager/src//helpers/filterFragmentDefinitions.ts","../cache-manager/src//helpers/filterQuery.ts","../cache-manager/src//helpers/getDataValue.ts","../cache-manager/src//helpers/hasTypename.ts","../cache-manager/src//helpers/isLastResponseChunk.ts","../cache-manager/src//helpers/isNotLastResponseChunk.ts","../cache-manager/src//helpers/isNotResponseChunk.ts","../cache-manager/src//helpers/mergeResponseDataSets.ts","../cache-manager/src//helpers/normalizePatchResponseData.ts","../cache-manager/src//helpers/validTypeIdValue.ts","../cache-manager/src//main.ts"],"sourcesContent":["export const METADATA = 'metadata' as const;\nexport const CACHE_CONTROL = 'cacheControl' as const;\nexport const NO_CACHE = 'noCache' as const;\n\nexport const HEADER_CACHE_CONTROL = 'cache-control' as const;\nexport const HEADER_NO_CACHE = 'no-cache' as const;\n","import { CACHE_ENTRY_ADDED, type CacheTypes, type CachemapOptions, type RequestOptions } from '@graphql-box/core';\nimport type { CacheManagerContext, CacheManagerDef } from '../types.ts';\n\ntype Descriptor = (\n cacheType: CacheTypes,\n hash: string,\n value: unknown,\n cachemapOptions: CachemapOptions,\n options: RequestOptions,\n context: CacheManagerContext & { requestFieldCacheKey?: string }\n) => Promise<void>;\n\nexport const logCacheEntry = () => {\n return (_target: CacheManagerDef, _propertyName: string, descriptor: TypedPropertyDescriptor<Descriptor>): void => {\n const method = descriptor.value;\n\n if (!method) {\n return;\n }\n\n descriptor.value = async function descriptorValue(...args: Parameters<Descriptor>): ReturnType<Descriptor> {\n return new Promise<void>(resolve => {\n void (async () => {\n const { debugManager, requestFieldCacheKey, ...otherContext } = args[5];\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 cacheType: args[0],\n cachemapOptions: args[3],\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};\n","import { CACHE_ENTRY_QUERIED, type CacheTypes, type RequestOptions } from '@graphql-box/core';\nimport type { CacheManagerContext, CacheManagerDef } from '../types.ts';\n\ntype Descriptor = (\n cacheType: CacheTypes,\n hash: string,\n options: RequestOptions,\n context: CacheManagerContext & { requestFieldCacheKey?: string }\n) => Promise<never | undefined>;\n\nexport const logCacheQuery = () => {\n return (_target: CacheManagerDef, _propertyName: string, descriptor: TypedPropertyDescriptor<Descriptor>): void => {\n const method = descriptor.value;\n\n if (!method) {\n return;\n }\n\n descriptor.value = async function descriptorValue(...args: Parameters<Descriptor>): ReturnType<Descriptor> {\n return new Promise(resolve => {\n void (async () => {\n const { debugManager, requestFieldCacheKey, ...otherContext } = args[3];\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 });\n };\n };\n};\n","import { PARTIAL_QUERY_COMPILED, type RequestOptions } from '@graphql-box/core';\nimport type { CacheManagerContext, CacheManagerDef, PartialQueryResponse } from '../types.ts';\n\ntype Descriptor = (\n hash: string,\n partialQueryResponse: PartialQueryResponse,\n options: RequestOptions,\n context: CacheManagerContext\n) => void;\n\nexport const logPartialCompiled = () => {\n return (_target: CacheManagerDef, _propertyName: string, descriptor: TypedPropertyDescriptor<Descriptor>): void => {\n const method = descriptor.value;\n\n if (!method) {\n return;\n }\n\n descriptor.value = function descriptorValue(...args: Parameters<Descriptor>): ReturnType<Descriptor> {\n const { debugManager, ...otherContext } = args[3];\n\n if (!debugManager) {\n method.apply(this, args);\n return;\n }\n\n const startTime = debugManager.now();\n method.apply(this, args);\n const endTime = debugManager.now();\n const duration = endTime - startTime;\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","import type { PlainData } from '@graphql-box/core';\nimport { isArray, isPlainObject } from '@graphql-box/helpers';\nimport { isNumber, isString } from 'lodash-es';\n\nconst checkValue = (value: unknown, typeIDKey: string): boolean => {\n if (isArray(value)) {\n return value.reduce<boolean>((acc, entry) => {\n if (!acc) {\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: PlainData, typeIDKey: string): boolean => {\n const keys = isPlainObject(data) ? Object.keys(data) : [...data.keys()];\n\n if (keys.length === 1 && isPlainObject(data) && !!data[typeIDKey]) {\n return true;\n }\n\n return keys.reduce<boolean>((acc, key) => {\n if (!acc) {\n return false;\n }\n\n if (isNumber(key) && isArray(data)) {\n return checkValue(data[key], typeIDKey);\n } else if (isString(key) && isPlainObject(data)) {\n return checkValue(data[key], typeIDKey);\n }\n\n return acc;\n }, true);\n};\n\nexport const areOnlyPopulatedFieldsTypeIdKeys = (data: PlainData, typeIDKey: string) => {\n return recursivelyCheckProps(data, typeIDKey);\n};\n","import { isPlainObject, mergeObjects } from '@graphql-box/helpers';\n\nexport const mergeDataSets = <T extends object>(obj: T, source: T, typeIDKey: string): T => {\n return mergeObjects<T>(obj, source, (_key: string, value: unknown): string | number | undefined => {\n return isPlainObject(value) && value[typeIDKey] ? (value[typeIDKey] as string | number) : undefined;\n });\n};\n","import { isObjectLike } from '@graphql-box/helpers';\nimport { mergeDataSets } from './mergeObjects.ts';\n\nexport const combineDataSets = (dataSetA: unknown, dataSetB: unknown, typeIDKey: string) => {\n if (!dataSetA && dataSetB) {\n return dataSetB;\n }\n\n if (isObjectLike(dataSetA) && isObjectLike(dataSetB)) {\n return mergeDataSets(dataSetA, dataSetB, typeIDKey);\n }\n\n return dataSetA;\n};\n","import { type DehydratedCacheMetadata } from '@graphql-box/core';\nimport { Cacheability } from 'cacheability';\nimport { isEmpty } from 'lodash-es';\nimport { HEADER_CACHE_CONTROL } from '../constants.ts';\n\nexport type Params = {\n _cacheMetadata?: DehydratedCacheMetadata;\n fallback: string;\n headers?: Headers;\n};\n\nexport const deriveOpCacheability = ({ _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 (!acc) {\n return metadata;\n }\n\n if (metadata.ttl < acc.ttl) {\n return metadata;\n }\n\n return acc;\n }, first),\n });\n }\n\n if (headers?.has(HEADER_CACHE_CONTROL)) {\n return new Cacheability({ headers });\n }\n\n return new Cacheability({ cacheControl: fallback });\n};\n","import { type PlainObject } from '@graphql-box/core';\nimport { type KeysAndPaths, buildFieldKeysAndPaths, getName, resolveFragments } from '@graphql-box/helpers';\nimport { type SelectionNode } from 'graphql';\nimport { keys } from 'lodash-es';\nimport { type CacheManagerContext } from '../types.ts';\n\nexport const filterOutPropsWithArgsOrDirectives = (\n fieldData: PlainObject,\n selectionNodes: readonly SelectionNode[],\n ancestorKeysAndPaths: KeysAndPaths,\n context: CacheManagerContext\n) => {\n const fieldAndTypeName = resolveFragments(selectionNodes, context.fragmentDefinitions);\n\n return keys(fieldData).reduce<PlainObject>((acc, key) => {\n const match = fieldAndTypeName.find(({ fieldNode }) => getName(fieldNode) === 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 { type RequestData } from '@graphql-box/core';\nimport { keys } from 'lodash-es';\nimport { type CacheManagerContext } from '../types.ts';\n\nexport type FragmentSpreadCheckist = Record<\n string,\n {\n deleted: number;\n paths: string[];\n total: number;\n }\n>;\n\nexport const createFragmentSpreadChecklist = ({ request }: RequestData, { fragmentDefinitions }: CacheManagerContext) =>\n keys(fragmentDefinitions ?? {}).reduce<FragmentSpreadCheckist>((acc, name) => {\n acc[name] = { deleted: 0, paths: [], total: (request.match(new RegExp(`\\\\.\\\\.\\\\.${name}`, 'g')) ?? []).length };\n return acc;\n }, {});\n","import { type CheckFieldPathChecklistResult, type FieldPathChecklistValue } from '../types.ts';\n\nexport const checkFieldPathChecklist = (\n fieldPathChecklistValues: FieldPathChecklistValue[] | undefined,\n fieldTypeName: string | undefined\n): CheckFieldPathChecklistResult => {\n if (!fieldPathChecklistValues || fieldPathChecklistValues.length === 0) {\n return { hasData: false, typeUnused: !!fieldTypeName };\n }\n\n const [fieldPathChecklistValue] = fieldPathChecklistValues;\n\n if (fieldPathChecklistValue) {\n const { hasData, typeName } = fieldPathChecklistValue;\n const typeUnused = typeName ? typeName !== fieldTypeName : undefined;\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 { deleteFragmentSpreads } from '@graphql-box/helpers';\nimport { type FieldNode, type FragmentDefinitionNode, type OperationDefinitionNode } from 'graphql';\nimport { isEmpty } from 'lodash-es';\nimport { type FragmentSpreadFieldCounter } from '../types.ts';\nimport { type FragmentSpreadCheckist } from './createFragmentSpreadChecklist.ts';\n\nexport const filterFragmentSpreads = (\n field: FieldNode | FragmentDefinitionNode | OperationDefinitionNode,\n fragmentSpreadFieldCounter: FragmentSpreadFieldCounter,\n fragmentSpreadChecklist: FragmentSpreadCheckist,\n ancestorRequestFieldPath: string\n) => {\n if (isEmpty(fragmentSpreadFieldCounter)) {\n return;\n }\n\n for (const key of Object.keys(fragmentSpreadFieldCounter)) {\n const checklist = fragmentSpreadChecklist[key];\n\n if (!checklist) {\n continue;\n }\n\n checklist.paths.push(ancestorRequestFieldPath);\n const { hasData, total } = fragmentSpreadFieldCounter[key]!;\n\n if (hasData === total) {\n deleteFragmentSpreads(field, key);\n checklist.deleted += 1;\n }\n }\n};\n","import { TYPE_NAME_KEY } from '@graphql-box/core';\nimport { deleteChildFields, getChildFields, getName } from '@graphql-box/helpers';\nimport { type FieldNode, type FragmentDefinitionNode, type OperationDefinitionNode } from 'graphql';\nimport { type CacheManagerContext } from '../types.ts';\n\nexport const filterIDsAndTypeNames = (\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)!);\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 [fieldAndTypeName] = fieldsAndTypeNames;\n\n if (fieldAndTypeName) {\n const { fieldNode } = fieldAndTypeName;\n deleteChildFields(field, fieldNode);\n return true;\n }\n }\n\n return false;\n};\n","import { deleteInlineFragments, getChildFields, getInlineFragments, getName } from '@graphql-box/helpers';\nimport { type FieldNode, type FragmentDefinitionNode, type OperationDefinitionNode } from 'graphql';\nimport { type CacheManagerContext } from '../types.ts';\n\nexport const filterInlineFragments = (\n field: FieldNode | FragmentDefinitionNode | OperationDefinitionNode,\n { fragmentDefinitions, typeIDKey }: CacheManagerContext\n) => {\n const inlineFragments = getInlineFragments(field);\n let filtered = false;\n\n for (const fragment of inlineFragments) {\n const fieldsAndTypeNames = getChildFields(fragment, { fragmentDefinitions });\n\n if (!fieldsAndTypeNames || fieldsAndTypeNames.length === 0) {\n deleteInlineFragments(field, fragment);\n filtered = true;\n continue;\n }\n\n const [fieldAndTypeName] = fieldsAndTypeNames;\n\n if (fieldAndTypeName) {\n const { fieldNode } = fieldAndTypeName;\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 {\n buildFieldKeysAndPaths,\n deleteChildFields,\n getChildFields,\n getName,\n hasChildFields,\n} from '@graphql-box/helpers';\nimport { type FieldNode, type FragmentDefinitionNode, Kind, type OperationDefinitionNode } from 'graphql';\nimport { type CacheManagerContext, type FieldPathChecklist, type FragmentSpreadFieldCounter } from '../types.ts';\nimport { checkFieldPathChecklist } from './checkFieldPathChecklist.ts';\nimport { type FragmentSpreadCheckist } from './createFragmentSpreadChecklist.ts';\nimport { filterFragmentSpreads } from './filterFragmentSpreads.ts';\nimport { filterIDsAndTypeNames } from './filterIDsAndTypeNames.ts';\nimport { filterInlineFragments } from './filterInlineFragments.ts';\n\nexport const 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 index = fieldsAndTypeNames.length - 1; index >= 0; index -= 1) {\n const fieldAndTypeName = fieldsAndTypeNames[index];\n\n if (!fieldAndTypeName) {\n continue;\n }\n\n const { fieldNode: childField, fragmentKind, fragmentName, typeName: childTypeName } = fieldAndTypeName;\n\n if (fragmentKind === Kind.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 === Kind.FRAGMENT_SPREAD && fragmentName) {\n const counter = fragmentSpreadFieldCounter[fragmentName];\n\n if (counter) {\n counter.hasData += 1;\n }\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","import { deleteFragmentDefinitions } from '@graphql-box/helpers';\nimport { type DocumentNode } from 'graphql';\nimport { keys } from 'lodash-es';\nimport { type CacheManagerContext, type FieldPathChecklist } from '../types.ts';\nimport { type FragmentSpreadCheckist } from './createFragmentSpreadChecklist.ts';\nimport { filterField } from './filterField.ts';\n\nexport const filterFragmentDefinitions = (\n ast: DocumentNode,\n fieldPathChecklist: FieldPathChecklist,\n fragmentSpreadChecklist: FragmentSpreadCheckist,\n context: CacheManagerContext\n) => {\n const definitionsToFilter = keys(fragmentSpreadChecklist).reduce<{ name: string; path: string }[]>(\n (namesAndPaths, key) => {\n const checklist = fragmentSpreadChecklist[key];\n\n if (!checklist) {\n return namesAndPaths;\n }\n\n const { deleted, paths, total } = checklist;\n return deleted === 0 && total === 1 ? [...namesAndPaths, { name: key, path: paths[0]! }] : namesAndPaths;\n },\n []\n );\n\n const { fragmentDefinitions = {} } = context;\n\n for (const { name, path } of definitionsToFilter) {\n const fragmentDefinition = fragmentDefinitions[name];\n\n if (!fragmentDefinition) {\n continue;\n }\n\n filterField(fragmentDefinition, fieldPathChecklist, fragmentSpreadChecklist, path, context);\n }\n\n const definitionsToDelete = keys(fragmentSpreadChecklist).reduce<string[]>((names, key) => {\n const checklist = fragmentSpreadChecklist[key];\n\n if (!checklist) {\n return names;\n }\n\n const { deleted, total } = checklist;\n return deleted > 0 && deleted === total ? [...names, key] : names;\n }, []);\n\n if (definitionsToDelete.length === 0) {\n return ast;\n }\n\n return deleteFragmentDefinitions(ast, {\n include: definitionsToDelete,\n });\n};\n","import { type RequestData } from '@graphql-box/core';\nimport {\n buildFieldKeysAndPaths,\n deleteChildFields,\n getChildFields,\n getOperationDefinitions,\n} from '@graphql-box/helpers';\nimport { type CacheManagerContext, type CachedResponseData } from '../types.ts';\nimport { createFragmentSpreadChecklist } from './createFragmentSpreadChecklist.ts';\nimport { filterField } from './filterField.ts';\nimport { filterFragmentDefinitions } from './filterFragmentDefinitions.ts';\n\nexport const filterQuery = (\n requestData: RequestData,\n { fieldPathChecklist }: CachedResponseData,\n context: CacheManagerContext\n) => {\n const { ast } = requestData;\n const queryNode = getOperationDefinitions(ast, context.operation)[0];\n\n if (!queryNode) {\n return ast;\n }\n\n const { fragmentDefinitions, operation } = 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 index = fieldsAndTypeNames.length - 1; index >= 0; index -= 1) {\n const { fieldNode } = fieldsAndTypeNames[index]!;\n\n const { requestFieldPath } = buildFieldKeysAndPaths(\n fieldNode,\n {\n requestFieldPath: 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 { isArray, isPlainObject } from '@graphql-box/helpers';\nimport { isNumber, isString } from 'lodash-es';\n\nexport const getDataValue = <T>(value: unknown, key: string | number): T | undefined => {\n if (isArray(value) && isNumber(key)) {\n return value[key] as T;\n }\n\n if (isPlainObject(value) && isString(key)) {\n return value[key] as T;\n }\n\n return;\n};\n","import { TYPE_NAME_KEY, type TypedData } from '@graphql-box/core';\nimport { isObjectLike } from '@graphql-box/helpers';\nimport { isString } from 'lodash-es';\n\nexport const hasTypename = (value: unknown): value is TypedData => {\n if (!isObjectLike(value)) {\n return false;\n }\n\n return TYPE_NAME_KEY in value && isString(value[TYPE_NAME_KEY]);\n};\n","import { type RawResponseDataWithMaybeCacheMetadata } from '@graphql-box/core';\nimport { type CacheManagerContext } from '../types.ts';\n\nexport const isLastResponseChunk = (\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n context: CacheManagerContext\n) => context.hasDeferOrStream && !rawResponseData.hasNext && rawResponseData.paths;\n","import { type RawResponseDataWithMaybeCacheMetadata } from '@graphql-box/core';\nimport { type CacheManagerContext } from '../types.ts';\n\nexport const isNotLastResponseChunk = (\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n context: CacheManagerContext\n) => context.hasDeferOrStream && rawResponseData.hasNext;\n","import { type RawResponseDataWithMaybeCacheMetadata } from '@graphql-box/core';\nimport { type CacheManagerContext } from '../types.ts';\n\nexport const isNotResponseChunk = (\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n context: CacheManagerContext\n) => !context.hasDeferOrStream && !rawResponseData.hasNext && !rawResponseData.paths;\n","import { type RawResponseDataWithMaybeCacheMetadata } from '@graphql-box/core';\nimport { merge } from 'lodash-es';\n\nexport const mergeResponseDataSets = (responseDataSets: RawResponseDataWithMaybeCacheMetadata[]) => {\n return responseDataSets.reduce<RawResponseDataWithMaybeCacheMetadata>(\n (acc, 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 = merge(acc.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);\n }\n\n return acc;\n },\n { data: {} }\n );\n};\n","import { type RawResponseDataWithMaybeCacheMetadata } from '@graphql-box/core';\nimport { isString, set } from 'lodash-es';\nimport { type CacheManagerContext } from '../types.ts';\n\nexport const normalizePatchResponseData = (\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n context: CacheManagerContext\n) => {\n if (!context.normalizePatchResponseData) {\n return rawResponseData;\n }\n\n const { data, paths, ...rest } = rawResponseData;\n\n if (!paths?.length || !isString(paths[0])) {\n return rawResponseData;\n }\n\n return {\n ...rest,\n data: set({}, paths[0], data),\n paths,\n };\n};\n","import { type FieldTypeInfo } from '@graphql-box/core';\nimport { isPlainObject } from '@graphql-box/helpers';\n\nexport const getValidTypeIdValue = (\n requestFieldPathData: unknown,\n { typeIDValue }: FieldTypeInfo,\n typeIDKey: string\n): string | number | undefined => {\n if (typeIDValue) {\n return typeIDValue;\n }\n\n if (isPlainObject(requestFieldPathData)) {\n return requestFieldPathData[typeIDKey] as string | number | undefined;\n }\n\n return;\n};\n","import { type Core } from '@cachemap/core';\nimport {\n type CacheMetadata,\n type CacheTypes,\n type CachemapOptions,\n DATA_ENTITIES,\n DEFAULT_TYPE_ID_KEY,\n type EntityData,\n type FieldTypeInfo,\n type PlainData,\n QUERY_RESPONSES,\n REQUEST_FIELD_PATHS,\n type RawResponseDataWithMaybeCacheMetadata,\n type RequestContext,\n type RequestData,\n type RequestOptions,\n type ResponseData,\n TYPE_NAME_KEY,\n} from '@graphql-box/core';\nimport {\n ArgsError,\n GroupedError,\n type KeysAndPaths,\n buildFieldKeysAndPaths,\n dehydrateCacheMetadata,\n getChildFields,\n getFragmentDefinitions,\n getOperationDefinitions,\n hasChildFields,\n hashRequest,\n isArray,\n isObjectLike,\n isPlainObject,\n iterateChildFields,\n rehydrateCacheMetadata,\n} from '@graphql-box/helpers';\nimport { Cacheability } from 'cacheability';\nimport { type FieldNode, Kind, OperationTypeNode, print } from 'graphql';\nimport { assign, cloneDeep, get, isEqual, isNumber, isUndefined, set, unset } from 'lodash-es';\nimport { CACHE_CONTROL, HEADER_NO_CACHE, METADATA, NO_CACHE } from './constants.ts';\nimport { logCacheEntry, logCacheQuery, logPartialCompiled } from './debug/index.ts';\nimport { areOnlyPopulatedFieldsTypeIdKeys } from './helpers/areOnlyPopulatedFieldsTypeIdKeys.ts';\nimport { combineDataSets } from './helpers/combineData.ts';\nimport { deriveOpCacheability } from './helpers/deriveOpCacheability.ts';\nimport { filterOutPropsWithArgsOrDirectives } from './helpers/filterOutPropsWithArgsOrDirectives.ts';\nimport { filterQuery } from './helpers/filterQuery.ts';\nimport { getDataValue } from './helpers/getDataValue.ts';\nimport { hasTypename } from './helpers/hasTypename.ts';\nimport { isLastResponseChunk } from './helpers/isLastResponseChunk.ts';\nimport { isNotLastResponseChunk } from './helpers/isNotLastResponseChunk.ts';\nimport { isNotResponseChunk } from './helpers/isNotResponseChunk.ts';\nimport { mergeDataSets } from './helpers/mergeObjects.ts';\nimport { mergeResponseDataSets } from './helpers/mergeResponseDataSets.ts';\nimport { normalizePatchResponseData } from './helpers/normalizePatchResponseData.ts';\nimport { getValidTypeIdValue } from './helpers/validTypeIdValue.ts';\nimport {\n type AnalyzeQueryResult,\n type AncestorKeysAndPaths,\n type CacheManagerContext,\n type CacheManagerDef,\n type CachedAncestorFieldData,\n type CachedResponseData,\n type CheckCacheEntryResult,\n type DataForCachingEntry,\n type FieldCount,\n type FieldPathChecklist,\n type MergedCachedFieldData,\n type PartialQueryResponse,\n type PartialQueryResponses,\n type QueryResponseCacheEntry,\n type ResponseDataForCaching,\n type TypenamesAndKind,\n type UserOptions,\n} from './types.ts';\n\nexport class CacheManager implements CacheManagerDef {\n private static _countFieldPathChecklist(fieldPathChecklist: FieldPathChecklist): FieldCount {\n const fieldCount: FieldCount = { missing: 0, total: 0 };\n\n for (const [, checklistValues] of fieldPathChecklist) {\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<T>(ancestorFieldData: unknown, propNameOrIndex: string | number) {\n const dataValue = getDataValue<T>(ancestorFieldData, propNameOrIndex);\n return isObjectLike(dataValue) ? cloneDeep(dataValue) : dataValue;\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 responseData: unknown,\n { data }: MergedCachedFieldData,\n propNameOrIndex: string | number\n ): void {\n const setData = (value: unknown) => {\n if (isArray(responseData) && isNumber(propNameOrIndex)) {\n responseData[propNameOrIndex] = value;\n } else if (isPlainObject(responseData)) {\n responseData[propNameOrIndex] = value;\n }\n };\n\n if (!isObjectLike(data) && !isUndefined(data)) {\n setData(data);\n } else if (isArray(data)) {\n setData([]);\n } else if (isPlainObject(data)) {\n setData({});\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: dataTypeName, fieldTypename: fieldTypeName, fragmentKind, fragmentName }: TypenamesAndKind\n ): void {\n if (isUndefined(fieldTypeName) || fragmentKind === Kind.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 ?? [];\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 },\n ]);\n }\n\n private _cache: Core;\n private _cascadeCacheControl: boolean;\n private _fallbackOperationCacheability: string;\n private _partialQueryResponses: PartialQueryResponses = new Map();\n private _responseChunksAwaitingCaching = new Map<string, RawResponseDataWithMaybeCacheMetadata[]>();\n private _typeCacheDirectives: Record<string, string>;\n private _typeIDKey: string;\n\n constructor(options: UserOptions) {\n const errors: ArgsError[] = [];\n\n if (!('cache' in options)) {\n errors.push(new ArgsError('@graphql-box/cache-manager expected cache to be in options.'));\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 ArgsError(message));\n }\n\n if (errors.length > 0) {\n throw new GroupedError('@graphql-box/cache-manager argument validation errors.', 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 public async analyzeQuery(\n requestData: RequestData,\n options: RequestOptions,\n context: RequestContext\n ): Promise<AnalyzeQueryResult> {\n const { ast, hash } = requestData;\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 /**\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 */\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\n return {\n updated: { ast: filteredAST, hash: hashRequest(filteredRequest), request: filteredRequest },\n };\n }\n\n get cache(): Core {\n return this._cache;\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 & { data: unknown },\n options: RequestOptions,\n context: CacheManagerContext\n ): Promise<void> {\n await (hasChildFields(fieldNode, { fragmentDefinitions: context.fragmentDefinitions })\n ? this._analyzeParentFieldNode(fieldNode, cachedAncestorFieldData, cachedResponseData, options, context)\n : this._analyzeLeafFieldNode(fieldNode, cachedAncestorFieldData, cachedResponseData, options, context));\n }\n\n private async _analyzeLeafFieldNode(\n fieldNode: FieldNode,\n cachedAncestorFieldData: CachedAncestorFieldData,\n cachedResponseData: CachedResponseData & { data: unknown },\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 dataTypename = hasTypename(entityData)\n ? entityData.__typename\n : hasTypename(requestFieldPathData)\n ? requestFieldPathData.__typename\n : undefined;\n\n const typenamesAndKind = {\n dataTypename,\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)!;\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 promises: Promise<void>[] = [];\n\n iterateChildFields(\n fieldNode,\n data,\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 {\n ...cachedResponseData,\n /**\n * `cachedResponseData.data[propNameOrIndex]` will always be either an empty array\n * or an empty object at this point as based on whether `data` is object-like\n * `cachedResponseData.data[propNameOrIndex]` is set accordingly in\n * _setCachedResponseData > _setCachedData\n */\n data: getDataValue<PlainData>(cachedResponseData.data, propNameOrIndex)!,\n },\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\n if (!queryNode) {\n return cacheMetadata;\n }\n\n const fieldsAndTypeNames = getChildFields(queryNode);\n\n if (!fieldsAndTypeNames) {\n return cacheMetadata;\n }\n\n for (const { fieldNode } of fieldsAndTypeNames)\n this._setFieldCacheability(\n fieldNode,\n { requestFieldPath: context.operation },\n { cacheMetadata, data },\n options,\n context\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: PlainData | undefined;\n\n if (context.operation === OperationTypeNode.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<T>(\n cacheType: CacheTypes,\n hash: string,\n options: RequestOptions,\n context: CacheManagerContext & { requestFieldCacheKey?: string }\n ): Promise<CheckCacheEntryResult<T> | 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<T>(cacheType, hash, options, context);\n\n if (isUndefined(entry)) {\n return false;\n }\n\n return { cacheability, entry };\n } catch {\n return false;\n }\n }\n\n private _createCacheMetadata(\n { _cacheMetadata, headers }: RawResponseDataWithMaybeCacheMetadata,\n { operation }: CacheManagerContext\n ): CacheMetadata {\n const cacheMetadata = new Map<string, Cacheability>();\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<T>(\n cacheType: CacheTypes,\n hash: string,\n _options: RequestOptions,\n _context: CacheManagerContext & { requestFieldCacheKey?: string }\n ): Promise<T | undefined> {\n return this._cache.get<T>(`${cacheType}::${hash}`);\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 {\n return false;\n }\n }\n\n private _isFieldEntity(fieldData: unknown, { isEntity, possibleTypes }: FieldTypeInfo): boolean {\n if (!isPlainObject(fieldData) || !(this._typeIDKey in fieldData)) {\n return false;\n }\n\n if (isEntity) {\n return true;\n }\n\n if (possibleTypes.length === 0) {\n return false;\n }\n\n return possibleTypes.some(type => type.typeName === fieldData.__typename);\n }\n\n private _mergeResponseData(responseData: PlainData, partialQueryResponse?: PartialQueryResponse): PlainData {\n if (!partialQueryResponse) {\n return responseData;\n }\n\n return mergeDataSets(partialQueryResponse.data, responseData, this._typeIDKey);\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) as unknown;\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,\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 ): Promise<Partial<CheckCacheEntryResult<EntityData>>> {\n const typeNames = [...possibleTypes.map(type => type.typeName), typeName];\n\n const checkResults = await Promise.all(\n typeNames.map(name =>\n this._checkCacheEntry<EntityData>(DATA_ENTITIES, `${name}::${validTypeIDValue}`, options, context)\n )\n );\n\n const validResults = checkResults.filter(result => !!result) as CheckCacheEntryResult<EntityData>[];\n let validResult: CheckCacheEntryResult<EntityData> | 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<Partial<EntityData>>(\n (obj, { entry }) => mergeDataSets(obj, entry, this._typeIDKey),\n {}\n ) as EntityData,\n };\n }\n\n return validResult ?? {};\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 requestFieldPathData = combineDataSets(requestFieldPathData, entry, this._typeIDKey);\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 entityData = combineDataSets(entityData, entry, this._typeIDKey);\n\n if (entryCacheability && (!cacheability || entryCacheability.metadata.ttl > cacheability.metadata.ttl)) {\n cacheability = entryCacheability;\n }\n }\n\n const data = isEqual(entityData, requestFieldPathData)\n ? entityData\n : combineDataSets(entityData, requestFieldPathData, this._typeIDKey);\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 ): Promise<Partial<CheckCacheEntryResult>> {\n return (\n (await this._checkCacheEntry(REQUEST_FIELD_PATHS, hash, options, { ...context, requestFieldCacheKey })) || {}\n );\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\n if (!queryNode) {\n return cachedResponseData;\n }\n\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(fieldNode, { requestFieldPath: context.operation }, cachedResponseData, options, context)\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(context.requestID)!;\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: unknown,\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 {\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\n if (!operationNode) {\n return;\n }\n\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) as unknown;\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) as EntityData;\n const fieldTypeName = fieldTypeInfo.isEntity ? fieldTypeInfo.typeName : fieldData.__typename;\n const entityDataKey = `${fieldTypeName}::${String(fieldData[this._typeIDKey])}`;\n const result = await this._checkCacheEntry<EntityData>(DATA_ENTITIES, entityDataKey, options, context);\n\n if (result) {\n fieldData = mergeDataSets(result.entry, fieldData, this._typeIDKey);\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\n if (!isObjectLike(data)) {\n return;\n }\n\n const fieldData = get(data, responseDataPath) as unknown;\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,\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 _setPartialQueryResponse(\n hash: string,\n partialQueryResponse: PartialQueryResponse,\n _options: RequestOptions,\n _context: CacheManagerContext\n ): 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) as unknown;\n const isEntity = this._isFieldEntity(fieldData, fieldTypeInfo);\n const hasArgsOrDirectives = fieldTypeInfo.hasArguments || fieldTypeInfo.hasDirectives;\n\n if (context.operation === OperationTypeNode.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(result.entry) && isObjectLike(fieldData)) {\n fieldData = mergeDataSets(result.entry, fieldData, this._typeIDKey);\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"],"names":["METADATA","CACHE_CONTROL","NO_CACHE","HEADER_CACHE_CONTROL","HEADER_NO_CACHE","logCacheEntry","_target","_propertyName","descriptor","method","value","descriptorValue","args","Promise","resolve","debugManager","requestFieldCacheKey","otherContext","apply","startTime","now","endTime","duration","payload","cacheType","cachemapOptions","context","options","requestHash","stats","decryptedCacheKey","log","CACHE_ENTRY_ADDED","logCacheQuery","result","CACHE_ENTRY_QUERIED","logPartialCompiled","PARTIAL_QUERY_COMPILED","checkValue","typeIDKey","isArray","reduce","acc","entry","isPlainObject","recursivelyCheckProps","data","keys","Object","length","key","isNumber","isString","areOnlyPopulatedFieldsTypeIdKeys","mergeDataSets","obj","source","mergeObjects","_key","undefined","combineDataSets","dataSetA","dataSetB","isObjectLike","deriveOpCacheability","_cacheMetadata","fallback","headers","isEmpty","first","rest","values","Cacheability","metadata","ttl","has","cacheControl","filterOutPropsWithArgsOrDirectives","fieldData","selectionNodes","ancestorKeysAndPaths","fieldAndTypeName","resolveFragments","fragmentDefinitions","match","find","fieldNode","getName","requestFieldPath","buildFieldKeysAndPaths","fieldTypeInfo","fieldTypeMap","get","hasArguments","hasDirectives","createFragmentSpreadChecklist","request","name","deleted","paths","total","RegExp","checkFieldPathChecklist","fieldPathChecklistValues","fieldTypeName","hasData","typeUnused","fieldPathChecklistValue","typeName","some","every","filterFragmentSpreads","field","fragmentSpreadFieldCounter","fragmentSpreadChecklist","ancestorRequestFieldPath","checklist","push","deleteFragmentSpreads","filterIDsAndTypeNames","fieldsAndTypeNames","getChildFields","fieldNames","map","TYPE_NAME_KEY","deleteChildFields","filterInlineFragments","inlineFragments","getInlineFragments","filtered","fragment","deleteInlineFragments","filterField","fieldPathChecklist","index","childField","fragmentKind","fragmentName","childTypeName","Kind","FRAGMENT_SPREAD","childFieldName","counter","hasChildFields","filterFragmentDefinitions","ast","definitionsToFilter","namesAndPaths","path","fragmentDefinition","definitionsToDelete","names","deleteFragmentDefinitions","include","filterQuery","requestData","queryNode","getOperationDefinitions","operation","queryFiltered","getDataValue","hasTypename","isLastResponseChunk","rawResponseData","hasDeferOrStream","hasNext","isNotLastResponseChunk","isNotResponseChunk","mergeResponseDataSets","responseDataSets","dataSet","merge","normalizePatchResponseData","set","getValidTypeIdValue","requestFieldPathData","typeIDValue","CacheManager","_dec","_dec2","_dec3","_class","_countFieldPathChecklist","fieldCount","missing","checklistValues","filter","_getFieldDataFromAncestor","ancestorFieldData","propNameOrIndex","dataValue","cloneDeep","_getOperationCacheControl","cacheMetadata","defaultCacheControl","cacheability","printCacheControl","_isNodeEntity","isEntity","possibleTypes","type","_isNodeRequestFieldPath","_isValid","noCache","checkTTL","_mergeResponseCacheMetadata","partialQueryResponse","Map","_setCachedData","responseData","setData","isUndefined","_setCachedResponseData","cachedFieldData","typeNamesAndKind","_options","_setCacheMetadata","_setFieldPathChecklist","operationCacheability","dataTypename","dataTypeName","fieldTypename","constructor","_defineProperty","errors","ArgsError","typeCacheDirectives","message","GroupedError","_cache","cache","_cascadeCacheControl","cascadeCacheControl","_fallbackOperationCacheability","fallbackOperationCacheability","_typeCacheDirectives","_typeIDKey","DEFAULT_TYPE_ID_KEY","analyzeQuery","hash","cacheManagerContext","getFragmentDefinitions","cachedResponseData","_retrieveCachedResponseData","updated","dataCaching","_setQueryResponseCacheEntry","awaitDataCaching","response","filteredAST","filteredRequest","print","assign","_setPartialQueryResponse","hashRequest","cacheQuery","updatedRequestData","_cacheResponse","cacheResponse","checkCacheEntry","_checkCacheEntry","checkQueryResponseCacheEntry","QUERY_RESPONSES","rehydrateCacheMetadata","deletePartialQueryResponse","_partialQueryResponses","delete","setQueryResponseCacheEntry","_analyzeFieldNode","cachedAncestorFieldData","_analyzeParentFieldNode","_analyzeLeafFieldNode","keysAndPaths","hashedRequestFieldCacheKey","entityData","__typename","typenamesAndKind","_retrieveCachedRequestFieldPathData","_retrieveCachedParentNodeData","promises","iterateChildFields","childFragmentKind","childFragmentName","childIndex","all","_buildCacheMetadata","otherProps","_createCacheMetadata","_setFieldCacheability","normalizedResponseData","responseDataForCaching","_setResponseChunksAwaitingCaching","_retrieveResponseDataForCaching","_setEntityAndRequestFieldPathCacheEntries","queryCacheMetadata","queryData","OperationTypeNode","QUERY","_getPartialQueryResponse","_mergeResponseData","_hasCacheEntry","_getCacheEntry","_context","_isFieldEntity","_parseEntityAndRequestFieldPathCacheEntryData","responseDataPath","_typeName","_fragmentKind","_fragmentName","_setEntityAndRequestFieldPathCacheEntry","_retrieveCachedEntityData","validTypeIDValue","typeNames","checkResults","DATA_ENTITIES","validResults","validResult","sort","a","b","ancestorEntityData","ancestorRequestFieldPathData","entryCacheability","isEqual","REQUEST_FIELD_PATHS","responseChunks","_responseChunksAwaitingCaching","requestID","_setCacheEntry","operationNode","_setRequestFieldPathCacheEntry","unset","_setEntityCacheEntry","entityDataKey","String","cacheHeaders","tag","__cacheKey","_setFieldTypeCacheDirective","dehydratedCacheMetadata","dehydrateCacheMetadata","hasArgsOrDirectives","selectionSet","selections","_applyDecoratedDescriptor","prototype","getOwnPropertyDescriptor"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../cache-manager/src//constants.ts","../cache-manager/src//helpers/areOnlyPopulatedFieldsTypeIdKeys.ts","../cache-manager/src//helpers/mergeObjects.ts","../cache-manager/src//helpers/combineData.ts","../cache-manager/src//helpers/createEntityDataKey.ts","../cache-manager/src//helpers/deriveOpCacheability.ts","../cache-manager/src//helpers/isFieldEntity.ts","../cache-manager/src//helpers/filterOutPropsWithEntityArgsOrDirectives.ts","../cache-manager/src//helpers/filterOutPropsWithEntityOrArgs.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/getDataValue.ts","../cache-manager/src//helpers/hasTypename.ts","../cache-manager/src//main.ts","../cache-manager/src//debug/logCacheQuery.ts","../cache-manager/src//debug/logCacheEntry.ts","../cache-manager/src//debug/logPartialCompiled.ts","../cache-manager/src//helpers/normalizePatchResponseData.ts","../cache-manager/src//helpers/isNotLastResponseChunk.ts","../cache-manager/src//helpers/isLastResponseChunk.ts","../cache-manager/src//helpers/isNotResponseChunk.ts","../cache-manager/src//helpers/validTypeIdValue.ts","../cache-manager/src//helpers/mergeResponseDataSets.ts"],"sourcesContent":["export const METADATA = 'metadata' as const;\nexport const CACHE_CONTROL = 'cacheControl' as const;\nexport const NO_CACHE = 'noCache' as const;\n\nexport const HEADER_CACHE_CONTROL = 'cache-control' as const;\nexport const HEADER_NO_CACHE = 'no-cache' as const;\n","import type { PlainData } from '@graphql-box/core';\nimport { isArray, isPlainObject } from '@graphql-box/helpers';\nimport { isNumber, isString } from 'lodash-es';\n\nconst checkValue = (value: unknown, typeIDKey: string): boolean => {\n if (isArray(value)) {\n return value.reduce<boolean>((acc, entry) => {\n if (!acc) {\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: PlainData, typeIDKey: string): boolean => {\n const keys = isPlainObject(data) ? Object.keys(data) : [...data.keys()];\n\n if (keys.length === 1 && isPlainObject(data) && !!data[typeIDKey]) {\n return true;\n }\n\n return keys.reduce<boolean>((acc, key) => {\n if (!acc) {\n return false;\n }\n\n if (isNumber(key) && isArray(data)) {\n return checkValue(data[key], typeIDKey);\n } else if (isString(key) && isPlainObject(data)) {\n return checkValue(data[key], typeIDKey);\n }\n\n return acc;\n }, true);\n};\n\nexport const areOnlyPopulatedFieldsTypeIdKeys = (data: PlainData, typeIDKey: string) => {\n return recursivelyCheckProps(data, typeIDKey);\n};\n","import { isPlainObject, mergeObjects } from '@graphql-box/helpers';\n\nexport const mergeDataSets = <T extends object>(obj: T, source: T, typeIDKey: string): T => {\n return mergeObjects<T>(obj, source, (_key: string, value: unknown): string | number | undefined => {\n return isPlainObject(value) && value[typeIDKey] ? (value[typeIDKey] as string | number) : undefined;\n });\n};\n","import { isObjectLike } from '@graphql-box/helpers';\nimport { mergeDataSets } from './mergeObjects.ts';\n\nexport const combineDataSets = (dataSetA: unknown, dataSetB: unknown, typeIDKey: string) => {\n if (!dataSetA && dataSetB) {\n return dataSetB;\n }\n\n if (isObjectLike(dataSetA) && isObjectLike(dataSetB)) {\n return mergeDataSets(dataSetA, dataSetB, typeIDKey);\n }\n\n return dataSetA;\n};\n","import type { EntityData, FieldTypeInfo } from '@graphql-box/core';\nimport type { CacheManagerContext } from '../types.ts';\n\nexport const createEntityDataKey = (\n fieldData: EntityData,\n fieldTypeInfo: FieldTypeInfo,\n context: CacheManagerContext\n) => {\n const fieldTypeName = fieldTypeInfo.isEntity ? fieldTypeInfo.typeName : fieldData.__typename;\n return `${fieldTypeName}::${String(fieldData[context.typeIDKey!])}`;\n};\n","import { type DehydratedCacheMetadata } from '@graphql-box/core';\nimport { Cacheability } from 'cacheability';\nimport { isEmpty } from 'lodash-es';\nimport { HEADER_CACHE_CONTROL } from '../constants.ts';\n\nexport type Params = {\n _cacheMetadata?: DehydratedCacheMetadata;\n fallback: string;\n headers?: Headers;\n};\n\nexport const deriveOpCacheability = ({ _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 (!acc) {\n return metadata;\n }\n\n if (metadata.ttl < acc.ttl) {\n return metadata;\n }\n\n return acc;\n }, first),\n });\n }\n\n if (headers?.has(HEADER_CACHE_CONTROL)) {\n return new Cacheability({ headers });\n }\n\n return new Cacheability({ cacheControl: fallback });\n};\n","import type { EntityData, FieldTypeInfo } from '@graphql-box/core';\nimport { isPlainObject } from '@graphql-box/helpers';\n\nexport const isFieldEntity = (\n fieldData: unknown,\n fieldTypeInfo: FieldTypeInfo | undefined,\n typeIDKey: string\n): fieldData is EntityData => {\n if (!isPlainObject(fieldData) || !(typeIDKey in fieldData)) {\n return false;\n }\n\n const { isEntity = false, possibleTypes = [] } = fieldTypeInfo ?? {};\n\n if (isEntity) {\n return true;\n }\n\n if (possibleTypes.length === 0) {\n return false;\n }\n\n return possibleTypes.some(type => type.typeName === fieldData.__typename);\n};\n","import { type PlainObject } from '@graphql-box/core';\nimport {\n type KeysAndPaths,\n buildFieldKeysAndPaths,\n getName,\n isPlainObject,\n resolveFragments,\n} from '@graphql-box/helpers';\nimport { type FieldNode } from 'graphql';\nimport { keys } from 'lodash-es';\nimport { type CacheManagerContext } from '../types.ts';\nimport { isFieldEntity } from './isFieldEntity.ts';\n\nexport const filterOutPropsWithEntityArgsOrDirectives = (\n fieldData: unknown,\n field: FieldNode,\n ancestorKeysAndPaths: KeysAndPaths,\n context: CacheManagerContext\n) => {\n if (!isPlainObject(fieldData)) {\n return fieldData;\n }\n\n const fieldAndTypeName = resolveFragments(field.selectionSet?.selections, context.fragmentDefinitions);\n\n return keys(fieldData).reduce<PlainObject>((acc, key) => {\n const match = fieldAndTypeName.find(({ fieldNode }) => getName(fieldNode) === key);\n\n if (match) {\n const keysAndPaths = buildFieldKeysAndPaths(match.fieldNode, ancestorKeysAndPaths, context);\n const fieldTypeInfo = context.fieldTypeMap.get(keysAndPaths.requestFieldPath);\n\n if (\n isFieldEntity(fieldData[key], fieldTypeInfo, context.typeIDKey!) ||\n fieldTypeInfo?.hasArguments ||\n fieldTypeInfo?.hasDirectives\n ) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete fieldData[key];\n }\n }\n\n return acc;\n }, fieldData);\n};\n","import { type EntityData } from '@graphql-box/core';\nimport { type KeysAndPaths, buildFieldKeysAndPaths, getName, resolveFragments } from '@graphql-box/helpers';\nimport { type FieldNode } from 'graphql';\nimport { keys } from 'lodash-es';\nimport { type CacheManagerContext } from '../types.ts';\nimport { isFieldEntity } from './isFieldEntity.ts';\n\nexport const filterOutPropsWithEntityOrArgs = (\n fieldData: EntityData,\n field: FieldNode,\n ancestorKeysAndPaths: KeysAndPaths,\n context: CacheManagerContext\n) => {\n const fieldAndTypeName = resolveFragments(field.selectionSet?.selections, context.fragmentDefinitions);\n\n return keys(fieldData).reduce<Partial<EntityData>>((acc, key) => {\n const match = fieldAndTypeName.find(({ fieldNode }) => getName(fieldNode) === key);\n\n if (match) {\n const { requestFieldPath } = buildFieldKeysAndPaths(match.fieldNode, ancestorKeysAndPaths, context);\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath);\n\n if (isFieldEntity(fieldData[key], fieldTypeInfo, context.typeIDKey!) || fieldTypeInfo?.hasArguments) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete fieldData[key];\n }\n }\n\n return acc;\n }, fieldData) as EntityData;\n};\n","import { type CheckFieldPathChecklistResult, type FieldPathChecklistValue } from '../types.ts';\n\nexport const checkFieldPathChecklist = (\n fieldPathChecklistValues: FieldPathChecklistValue[] | undefined,\n fieldTypeName: string | undefined\n): CheckFieldPathChecklistResult => {\n if (!fieldPathChecklistValues || fieldPathChecklistValues.length === 0) {\n return { hasData: false, typeUnused: !!fieldTypeName };\n }\n\n const [fieldPathChecklistValue] = fieldPathChecklistValues;\n\n if (fieldPathChecklistValue) {\n const { hasData, typeName } = fieldPathChecklistValue;\n const typeUnused = typeName ? typeName !== fieldTypeName : undefined;\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 buildFieldKeysAndPaths,\n deleteChildFields,\n getChildFields,\n getName,\n hasChildFields,\n} from '@graphql-box/helpers';\nimport { type FieldNode, type FragmentDefinitionNode, Kind, type OperationDefinitionNode } from 'graphql';\nimport { type CacheManagerContext, type FieldPathChecklist, type FragmentSpreadFieldCounter } from '../types.ts';\nimport { checkFieldPathChecklist } from './checkFieldPathChecklist.ts';\nimport { type FragmentSpreadCheckist } from './createFragmentSpreadChecklist.ts';\nimport { filterFragmentSpreads } from './filterFragmentSpreads.ts';\nimport { filterIDsAndTypeNames } from './filterIDsAndTypeNames.ts';\nimport { filterInlineFragments } from './filterInlineFragments.ts';\n\nexport const 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 index = fieldsAndTypeNames.length - 1; index >= 0; index -= 1) {\n const fieldAndTypeName = fieldsAndTypeNames[index];\n\n if (!fieldAndTypeName) {\n continue;\n }\n\n const { fieldNode: childField, fragmentKind, fragmentName, typeName: childTypeName } = fieldAndTypeName;\n\n if (fragmentKind === Kind.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 === Kind.FRAGMENT_SPREAD && fragmentName) {\n const counter = fragmentSpreadFieldCounter[fragmentName];\n\n if (counter) {\n counter.hasData += 1;\n }\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","import { deleteFragmentSpreads } from '@graphql-box/helpers';\nimport { type FieldNode, type FragmentDefinitionNode, type OperationDefinitionNode } from 'graphql';\nimport { isEmpty } from 'lodash-es';\nimport { type FragmentSpreadFieldCounter } from '../types.ts';\nimport { type FragmentSpreadCheckist } from './createFragmentSpreadChecklist.ts';\n\nexport const filterFragmentSpreads = (\n field: FieldNode | FragmentDefinitionNode | OperationDefinitionNode,\n fragmentSpreadFieldCounter: FragmentSpreadFieldCounter,\n fragmentSpreadChecklist: FragmentSpreadCheckist,\n ancestorRequestFieldPath: string\n) => {\n if (isEmpty(fragmentSpreadFieldCounter)) {\n return;\n }\n\n for (const key of Object.keys(fragmentSpreadFieldCounter)) {\n const checklist = fragmentSpreadChecklist[key];\n\n if (!checklist) {\n continue;\n }\n\n checklist.paths.push(ancestorRequestFieldPath);\n const { hasData, total } = fragmentSpreadFieldCounter[key]!;\n\n if (hasData === total) {\n deleteFragmentSpreads(field, key);\n checklist.deleted += 1;\n }\n }\n};\n","import { deleteInlineFragments, getChildFields, getInlineFragments, getName } from '@graphql-box/helpers';\nimport { type FieldNode, type FragmentDefinitionNode, type OperationDefinitionNode } from 'graphql';\nimport { type CacheManagerContext } from '../types.ts';\n\nexport const filterInlineFragments = (\n field: FieldNode | FragmentDefinitionNode | OperationDefinitionNode,\n { fragmentDefinitions, typeIDKey }: CacheManagerContext\n) => {\n const inlineFragments = getInlineFragments(field);\n let filtered = false;\n\n for (const fragment of inlineFragments) {\n const fieldsAndTypeNames = getChildFields(fragment, { fragmentDefinitions });\n\n if (!fieldsAndTypeNames || fieldsAndTypeNames.length === 0) {\n deleteInlineFragments(field, fragment);\n filtered = true;\n continue;\n }\n\n const [fieldAndTypeName] = fieldsAndTypeNames;\n\n if (fieldAndTypeName) {\n const { fieldNode } = fieldAndTypeName;\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 { type FieldNode, type FragmentDefinitionNode, type OperationDefinitionNode } from 'graphql';\nimport { type CacheManagerContext } from '../types.ts';\n\nexport const filterIDsAndTypeNames = (\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)!);\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 [fieldAndTypeName] = fieldsAndTypeNames;\n\n if (fieldAndTypeName) {\n const { fieldNode } = fieldAndTypeName;\n deleteChildFields(field, fieldNode);\n return true;\n }\n }\n\n return false;\n};\n","import { type RequestData } from '@graphql-box/core';\nimport {\n buildFieldKeysAndPaths,\n deleteChildFields,\n getChildFields,\n getOperationDefinitions,\n} from '@graphql-box/helpers';\nimport { type CacheManagerContext, type CachedResponseData } from '../types.ts';\nimport { createFragmentSpreadChecklist } from './createFragmentSpreadChecklist.ts';\nimport { filterField } from './filterField.ts';\nimport { filterFragmentDefinitions } from './filterFragmentDefinitions.ts';\n\nexport const filterQuery = (\n requestData: RequestData,\n { fieldPathChecklist }: CachedResponseData,\n context: CacheManagerContext\n) => {\n const { ast } = requestData;\n const queryNode = getOperationDefinitions(ast, context.operation)[0];\n\n if (!queryNode) {\n return ast;\n }\n\n const { fragmentDefinitions, operation } = 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 index = fieldsAndTypeNames.length - 1; index >= 0; index -= 1) {\n const { fieldNode } = fieldsAndTypeNames[index]!;\n\n const { requestFieldPath } = buildFieldKeysAndPaths(\n fieldNode,\n {\n requestFieldPath: 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 { type RequestData } from '@graphql-box/core';\nimport { keys } from 'lodash-es';\nimport { type CacheManagerContext } from '../types.ts';\n\nexport type FragmentSpreadCheckist = Record<\n string,\n {\n deleted: number;\n paths: string[];\n total: number;\n }\n>;\n\nexport const createFragmentSpreadChecklist = ({ request }: RequestData, { fragmentDefinitions }: CacheManagerContext) =>\n keys(fragmentDefinitions ?? {}).reduce<FragmentSpreadCheckist>((acc, 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 { type DocumentNode } from 'graphql';\nimport { keys } from 'lodash-es';\nimport { type CacheManagerContext, type FieldPathChecklist } from '../types.ts';\nimport { type FragmentSpreadCheckist } from './createFragmentSpreadChecklist.ts';\nimport { filterField } from './filterField.ts';\n\nexport const filterFragmentDefinitions = (\n ast: DocumentNode,\n fieldPathChecklist: FieldPathChecklist,\n fragmentSpreadChecklist: FragmentSpreadCheckist,\n context: CacheManagerContext\n) => {\n const definitionsToFilter = keys(fragmentSpreadChecklist).reduce<{ name: string; path: string }[]>(\n (namesAndPaths, key) => {\n const checklist = fragmentSpreadChecklist[key];\n\n if (!checklist) {\n return namesAndPaths;\n }\n\n const { deleted, paths, total } = checklist;\n return deleted === 0 && total === 1 ? [...namesAndPaths, { name: key, path: paths[0]! }] : namesAndPaths;\n },\n []\n );\n\n const { fragmentDefinitions = {} } = context;\n\n for (const { name, path } of definitionsToFilter) {\n const fragmentDefinition = fragmentDefinitions[name];\n\n if (!fragmentDefinition) {\n continue;\n }\n\n filterField(fragmentDefinition, fieldPathChecklist, fragmentSpreadChecklist, path, context);\n }\n\n const definitionsToDelete = keys(fragmentSpreadChecklist).reduce<string[]>((names, key) => {\n const checklist = fragmentSpreadChecklist[key];\n\n if (!checklist) {\n return names;\n }\n\n const { deleted, total } = checklist;\n return deleted > 0 && deleted === total ? [...names, key] : names;\n }, []);\n\n if (definitionsToDelete.length === 0) {\n return ast;\n }\n\n return deleteFragmentDefinitions(ast, {\n include: definitionsToDelete,\n });\n};\n","import { isArray, isPlainObject } from '@graphql-box/helpers';\nimport { isNumber, isString } from 'lodash-es';\n\nexport const getDataValue = <T>(value: unknown, key: string | number): T | undefined => {\n if (isArray(value) && isNumber(key)) {\n return value[key] as T;\n }\n\n if (isPlainObject(value) && isString(key)) {\n return value[key] as T;\n }\n\n return;\n};\n","import { TYPE_NAME_KEY, type TypedData } from '@graphql-box/core';\nimport { isObjectLike } from '@graphql-box/helpers';\nimport { isString } from 'lodash-es';\n\nexport const hasTypename = (value: unknown): value is TypedData => {\n if (!isObjectLike(value)) {\n return false;\n }\n\n return TYPE_NAME_KEY in value && isString(value[TYPE_NAME_KEY]);\n};\n","import { type Core } from '@cachemap/core';\nimport {\n type CacheMetadata,\n type CacheTypes,\n type CachemapOptions,\n DATA_ENTITIES,\n DEFAULT_TYPE_ID_KEY,\n type EntityData,\n type FieldTypeInfo,\n type PlainData,\n QUERY_RESPONSES,\n REQUEST_FIELD_PATHS,\n type RawResponseDataWithMaybeCacheMetadata,\n type RequestContext,\n type RequestData,\n type RequestOptions,\n type ResponseData,\n TYPE_NAME_KEY,\n} from '@graphql-box/core';\nimport {\n ArgsError,\n GroupedError,\n type KeysAndPaths,\n buildFieldKeysAndPaths,\n dehydrateCacheMetadata,\n getChildFields,\n getFragmentDefinitions,\n getOperationDefinitions,\n hasChildFields,\n hashRequest,\n isArray,\n isObjectLike,\n isPlainObject,\n iterateChildFields,\n rehydrateCacheMetadata,\n} from '@graphql-box/helpers';\nimport { Cacheability } from 'cacheability';\nimport { type FieldNode, Kind, OperationTypeNode, print } from 'graphql';\nimport { assign, get, isEqual, isNumber, isUndefined, set, unset } from 'lodash-es';\nimport { CACHE_CONTROL, HEADER_NO_CACHE, METADATA, NO_CACHE } from './constants.ts';\nimport { logCacheEntry, logCacheQuery, logPartialCompiled } from './debug/index.ts';\nimport { areOnlyPopulatedFieldsTypeIdKeys } from './helpers/areOnlyPopulatedFieldsTypeIdKeys.ts';\nimport { combineDataSets } from './helpers/combineData.ts';\nimport { createEntityDataKey } from './helpers/createEntityDataKey.ts';\nimport { deriveOpCacheability } from './helpers/deriveOpCacheability.ts';\nimport { filterOutPropsWithEntityArgsOrDirectives } from './helpers/filterOutPropsWithEntityArgsOrDirectives.ts';\nimport { filterOutPropsWithEntityOrArgs } from './helpers/filterOutPropsWithEntityOrArgs.ts';\nimport { filterQuery } from './helpers/filterQuery.ts';\nimport { getDataValue } from './helpers/getDataValue.ts';\nimport { hasTypename } from './helpers/hasTypename.ts';\nimport { isFieldEntity } from './helpers/isFieldEntity.ts';\nimport { isLastResponseChunk } from './helpers/isLastResponseChunk.ts';\nimport { isNotLastResponseChunk } from './helpers/isNotLastResponseChunk.ts';\nimport { isNotResponseChunk } from './helpers/isNotResponseChunk.ts';\nimport { mergeDataSets } from './helpers/mergeObjects.ts';\nimport { mergeResponseDataSets } from './helpers/mergeResponseDataSets.ts';\nimport { normalizePatchResponseData } from './helpers/normalizePatchResponseData.ts';\nimport { getValidTypeIdValue } from './helpers/validTypeIdValue.ts';\nimport {\n type AnalyzeQueryResult,\n type AncestorKeysAndPaths,\n type CacheManagerContext,\n type CacheManagerDef,\n type CachedAncestorFieldData,\n type CachedResponseData,\n type CheckCacheEntryResult,\n type DataForCachingEntry,\n type FieldCount,\n type FieldPathChecklist,\n type MergedCachedFieldData,\n type PartialQueryResponse,\n type PartialQueryResponses,\n type QueryResponseCacheEntry,\n type ResponseDataForCaching,\n type TypenamesAndKind,\n type UserOptions,\n} from './types.ts';\n\nexport class CacheManager implements CacheManagerDef {\n private static _countFieldPathChecklist(fieldPathChecklist: FieldPathChecklist): FieldCount {\n const fieldCount: FieldCount = { missing: 0, total: 0 };\n\n for (const [, checklistValues] of fieldPathChecklist) {\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<T>(ancestorFieldData: unknown, propNameOrIndex: string | number) {\n const dataValue = getDataValue<T>(ancestorFieldData, propNameOrIndex);\n return isObjectLike(dataValue) ? structuredClone(dataValue) : dataValue;\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 responseData: unknown,\n { data }: MergedCachedFieldData,\n propNameOrIndex: string | number\n ): void {\n const setData = (value: unknown) => {\n if (isArray(responseData) && isNumber(propNameOrIndex)) {\n responseData[propNameOrIndex] = value;\n } else if (isPlainObject(responseData)) {\n responseData[propNameOrIndex] = value;\n }\n };\n\n if (!isObjectLike(data) && !isUndefined(data)) {\n setData(data);\n } else if (isArray(data)) {\n setData([]);\n } else if (isPlainObject(data)) {\n setData({});\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: dataTypeName, fieldTypename: fieldTypeName, fragmentKind, fragmentName }: TypenamesAndKind\n ): void {\n if (isUndefined(fieldTypeName) || fragmentKind === Kind.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 ?? [];\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 },\n ]);\n }\n\n private _cache: Core;\n private _cascadeCacheControl: boolean;\n private _fallbackOperationCacheability: string;\n private _partialQueryResponses: PartialQueryResponses = new Map();\n private _responseChunksAwaitingCaching = new Map<string, RawResponseDataWithMaybeCacheMetadata[]>();\n private _typeCacheDirectives: Record<string, string>;\n private _typeIDKey: string;\n\n constructor(options: UserOptions) {\n const errors: ArgsError[] = [];\n\n if (!('cache' in options)) {\n errors.push(new ArgsError('@graphql-box/cache-manager expected cache to be in options.'));\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 ArgsError(message));\n }\n\n if (errors.length > 0) {\n throw new GroupedError('@graphql-box/cache-manager argument validation errors.', 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 public async analyzeQuery(\n requestData: RequestData,\n options: RequestOptions,\n context: RequestContext\n ): Promise<AnalyzeQueryResult> {\n const { ast, hash } = requestData;\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 /**\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 */\n if (fieldCount.missing === fieldCount.total || areOnlyPopulatedFieldsTypeIdKeys(data, this._typeIDKey)) {\n return { updated: requestData };\n }\n\n if (!fieldCount.missing) {\n this._setQueryResponseCacheEntry(hash, { cacheMetadata, data }, options, cacheManagerContext);\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\n return {\n updated: { ast: filteredAST, hash: hashRequest(filteredRequest), request: filteredRequest },\n };\n }\n\n get cache(): Core {\n return this._cache;\n }\n\n public cacheQuery(\n requestData: RequestData,\n updatedRequestData: RequestData | undefined,\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: RequestContext\n ): 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 cacheResponse(\n requestData: RequestData,\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: RequestContext\n ): 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 setQueryResponseCacheEntry(\n requestData: RequestData,\n responseData: ResponseData,\n options: RequestOptions,\n context: CacheManagerContext\n ): void {\n this._setQueryResponseCacheEntry(requestData.hash, responseData, options, context);\n }\n\n private async _analyzeFieldNode(\n fieldNode: FieldNode,\n cachedAncestorFieldData: CachedAncestorFieldData,\n cachedResponseData: CachedResponseData & { data: unknown },\n options: RequestOptions,\n context: CacheManagerContext\n ): Promise<void> {\n await (hasChildFields(fieldNode, { fragmentDefinitions: context.fragmentDefinitions })\n ? this._analyzeParentFieldNode(fieldNode, cachedAncestorFieldData, cachedResponseData, options, context)\n : this._analyzeLeafFieldNode(fieldNode, cachedAncestorFieldData, cachedResponseData, options, context));\n }\n\n private async _analyzeLeafFieldNode(\n fieldNode: FieldNode,\n cachedAncestorFieldData: CachedAncestorFieldData,\n cachedResponseData: CachedResponseData & { data: unknown },\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 dataTypename = hasTypename(entityData)\n ? entityData.__typename\n : hasTypename(requestFieldPathData)\n ? requestFieldPathData.__typename\n : undefined;\n\n const typenamesAndKind = {\n dataTypename,\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);\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 promises: Promise<void>[] = [];\n\n iterateChildFields(\n fieldNode,\n data,\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 {\n ...cachedResponseData,\n /**\n * `cachedResponseData.data[propNameOrIndex]` will always be either an empty array\n * or an empty object at this point as based on whether `data` is object-like\n * `cachedResponseData.data[propNameOrIndex]` is set accordingly in\n * _setCachedResponseData > _setCachedData\n */\n data: getDataValue<PlainData>(cachedResponseData.data, propNameOrIndex)!,\n },\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\n if (!queryNode) {\n return cacheMetadata;\n }\n\n const fieldsAndTypeNames = getChildFields(queryNode);\n\n if (!fieldsAndTypeNames) {\n return cacheMetadata;\n }\n\n for (const { fieldNode } of fieldsAndTypeNames)\n this._setFieldCacheability(\n fieldNode,\n { requestFieldPath: context.operation },\n { cacheMetadata, data },\n options,\n context\n );\n\n return cacheMetadata;\n }\n\n private _cacheResponse(\n requestData: RequestData,\n updatedRequestData: RequestData | undefined,\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: CacheManagerContext\n ): 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 if (responseDataForCaching) {\n const { data } = responseDataForCaching;\n const cacheMetadata = this._buildCacheMetadata(requestData, responseDataForCaching, options, context);\n\n void new Promise(() => {\n this._setEntityAndRequestFieldPathCacheEntries(\n requestData,\n {\n cacheMetadata,\n entityData: structuredClone(data),\n requestFieldPathData: structuredClone(data),\n },\n options,\n context\n );\n });\n\n let queryCacheMetadata: CacheMetadata | undefined;\n let queryData: PlainData | undefined;\n\n if (context.operation === OperationTypeNode.QUERY) {\n let partialQueryResponse: PartialQueryResponse | undefined;\n\n if (context.queryFiltered && updatedRequestData) {\n this._setQueryResponseCacheEntry(updatedRequestData.hash, { cacheMetadata, data }, options, context);\n partialQueryResponse = this._getPartialQueryResponse(requestData.hash);\n }\n\n queryCacheMetadata = CacheManager._mergeResponseCacheMetadata(cacheMetadata, partialQueryResponse);\n queryData = this._mergeResponseData(data, partialQueryResponse);\n\n this._setQueryResponseCacheEntry(\n requestData.hash,\n { cacheMetadata: queryCacheMetadata, data: queryData },\n options,\n context\n );\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<T>(\n cacheType: CacheTypes,\n hash: string,\n options: RequestOptions,\n context: CacheManagerContext & { requestFieldCacheKey?: string }\n ): Promise<CheckCacheEntryResult<T> | 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<T>(cacheType, hash, options, context);\n\n if (isUndefined(entry)) {\n return false;\n }\n\n return { cacheability, entry };\n } catch {\n return false;\n }\n }\n\n private _createCacheMetadata(\n { _cacheMetadata, headers }: RawResponseDataWithMaybeCacheMetadata,\n { operation }: CacheManagerContext\n ): CacheMetadata {\n const cacheMetadata = new Map<string, Cacheability>();\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<T>(\n cacheType: CacheTypes,\n hash: string,\n _options: RequestOptions,\n _context: CacheManagerContext & { requestFieldCacheKey?: string }\n ): Promise<T | undefined> {\n return this._cache.get<T>(`${cacheType}::${hash}`);\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 {\n return false;\n }\n }\n\n private _mergeResponseData(responseData: PlainData, partialQueryResponse?: PartialQueryResponse): PlainData {\n if (!partialQueryResponse) {\n return responseData;\n }\n\n return mergeDataSets(partialQueryResponse.data, responseData, this._typeIDKey);\n }\n\n private _parseEntityAndRequestFieldPathCacheEntryData(\n field: FieldNode,\n ancestorKeysAndPaths: AncestorKeysAndPaths,\n { cacheMetadata, entityData, requestFieldPathData }: ResponseDataForCaching,\n options: RequestOptions,\n context: CacheManagerContext\n ): void {\n const keysAndPaths = buildFieldKeysAndPaths(field, ancestorKeysAndPaths, context);\n const { hashedRequestFieldCacheKey, requestFieldCacheKey, requestFieldPath, responseDataPath } = keysAndPaths;\n const fieldData = get(requestFieldPathData, responseDataPath) as unknown;\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath);\n const cacheability = cacheMetadata.get(requestFieldPath);\n\n if (!isObjectLike(fieldData) && !fieldTypeInfo?.hasDirectives) {\n return;\n }\n\n if (isObjectLike(fieldData)) {\n iterateChildFields(\n field,\n fieldData,\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._parseEntityAndRequestFieldPathCacheEntryData(\n childField,\n { index: childIndex, requestFieldCacheKey, requestFieldPath, responseDataPath },\n { cacheMetadata, entityData, requestFieldPathData },\n options,\n context\n );\n }\n );\n }\n\n if (isUndefined(fieldData) || !fieldTypeInfo || !cacheability) {\n return;\n }\n\n const isEntity = isFieldEntity(fieldData, fieldTypeInfo, this._typeIDKey);\n const hasArgsOrDirectives = !!fieldTypeInfo.hasArguments || !!fieldTypeInfo.hasDirectives;\n\n if (context.operation === OperationTypeNode.QUERY && (isEntity || hasArgsOrDirectives)) {\n void this._setRequestFieldPathCacheEntry(\n keysAndPaths,\n {\n cacheability,\n fieldData: filterOutPropsWithEntityArgsOrDirectives(structuredClone(fieldData), field, keysAndPaths, context),\n fieldTypeInfo,\n },\n options,\n context\n );\n\n if (hasChildFields(field, { fragmentDefinitions: context.fragmentDefinitions })) {\n if (isEntity) {\n set(requestFieldPathData, responseDataPath, {\n __cacheKey: `${REQUEST_FIELD_PATHS}::${hashedRequestFieldCacheKey}`,\n });\n } else {\n unset(requestFieldPathData, responseDataPath);\n }\n }\n }\n\n if (isEntity) {\n void this._setEntityCacheEntry(\n {\n cacheability,\n fieldData: filterOutPropsWithEntityOrArgs(\n structuredClone(get(entityData, responseDataPath)) as EntityData,\n field,\n keysAndPaths,\n context\n ),\n fieldTypeInfo,\n },\n options,\n context\n );\n\n set(entityData, responseDataPath, {\n __cacheKey: `${DATA_ENTITIES}::${createEntityDataKey(fieldData, fieldTypeInfo, context)}`,\n });\n }\n }\n\n private async _retrieveCachedEntityData(\n validTypeIDValue: string | number,\n fieldTypeInfo: FieldTypeInfo | undefined,\n options: RequestOptions,\n context: CacheManagerContext\n ): Promise<Partial<CheckCacheEntryResult<EntityData>>> {\n const { possibleTypes = [], typeName } = fieldTypeInfo ?? {};\n const typeNames = [...possibleTypes.map(type => type.typeName), typeName];\n\n const checkResults = await Promise.all(\n typeNames.map(name =>\n this._checkCacheEntry<EntityData>(DATA_ENTITIES, `${String(name)}::${validTypeIDValue}`, options, context)\n )\n );\n\n const validResults = checkResults.filter(result => !!result) as CheckCacheEntryResult<EntityData>[];\n let validResult: CheckCacheEntryResult<EntityData> | 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<Partial<EntityData>>(\n (obj, { entry }) => mergeDataSets(obj, entry, this._typeIDKey),\n {}\n ) as EntityData,\n };\n }\n\n return validResult ?? {};\n }\n\n private async _retrieveCachedParentNodeData(\n { entityData: ancestorEntityData, requestFieldPathData: ancestorRequestFieldPathData }: CachedAncestorFieldData,\n { hashedRequestFieldCacheKey, propNameOrIndex, requestFieldCacheKey }: KeysAndPaths,\n fieldTypeInfo: FieldTypeInfo | undefined,\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 requestFieldPathData = combineDataSets(requestFieldPathData, entry, this._typeIDKey);\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 entityData = combineDataSets(entityData, entry, this._typeIDKey);\n\n if (entryCacheability && (!cacheability || entryCacheability.metadata.ttl > cacheability.metadata.ttl)) {\n cacheability = entryCacheability;\n }\n }\n\n const data = isEqual(entityData, requestFieldPathData)\n ? entityData\n : combineDataSets(entityData, requestFieldPathData, this._typeIDKey);\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 ): Promise<Partial<CheckCacheEntryResult>> {\n return (\n (await this._checkCacheEntry(REQUEST_FIELD_PATHS, hash, options, { ...context, requestFieldCacheKey })) || {}\n );\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\n if (!queryNode) {\n return cachedResponseData;\n }\n\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(fieldNode, { requestFieldPath: context.operation }, cachedResponseData, options, context)\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(context.requestID)!;\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: unknown,\n cachemapOptions: CachemapOptions,\n _options: RequestOptions,\n _context: CacheManagerContext & { requestFieldCacheKey?: string }\n ): Promise<void> {\n try {\n await this._cache.set(`${cacheType}::${hash}`, value, cachemapOptions);\n } catch {\n // no catch\n }\n }\n\n private _setEntityAndRequestFieldPathCacheEntries(\n requestData: RequestData,\n responseData: ResponseDataForCaching,\n options: RequestOptions,\n context: CacheManagerContext\n ): void {\n const operationNode = getOperationDefinitions(requestData.ast, context.operation)[0];\n\n if (!operationNode) {\n return;\n }\n\n const fieldsAndTypeNames = getChildFields(operationNode);\n\n if (!fieldsAndTypeNames) {\n return;\n }\n\n fieldsAndTypeNames.map(({ fieldNode }) => {\n this._parseEntityAndRequestFieldPathCacheEntryData(\n fieldNode,\n { requestFieldPath: context.operation },\n responseData,\n options,\n context\n );\n });\n }\n\n private async _setEntityCacheEntry(\n { cacheability, fieldData, fieldTypeInfo }: DataForCachingEntry<EntityData>,\n options: RequestOptions,\n context: CacheManagerContext\n ) {\n const fieldTypeName = fieldTypeInfo.isEntity ? fieldTypeInfo.typeName : fieldData.__typename;\n const entityDataKey = `${fieldTypeName}::${String(fieldData[this._typeIDKey])}`;\n const result = await this._checkCacheEntry<EntityData>(DATA_ENTITIES, entityDataKey, options, context);\n\n if (result) {\n fieldData = mergeDataSets(result.entry, fieldData, this._typeIDKey);\n }\n\n void this._setCacheEntry(\n DATA_ENTITIES,\n entityDataKey,\n fieldData,\n { cacheHeaders: { cacheControl: cacheability.printCacheControl() }, tag: options.tag },\n options,\n context\n );\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\n if (!isObjectLike(data)) {\n return;\n }\n\n const fieldData = get(data, responseDataPath) as unknown;\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,\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 _setPartialQueryResponse(\n hash: string,\n partialQueryResponse: PartialQueryResponse,\n _options: RequestOptions,\n _context: CacheManagerContext\n ): void {\n this._partialQueryResponses.set(hash, partialQueryResponse);\n }\n\n private _setQueryResponseCacheEntry(\n hash: string,\n { cacheMetadata, data }: ResponseData,\n options: RequestOptions,\n context: CacheManagerContext\n ): void {\n const dehydratedCacheMetadata = dehydrateCacheMetadata(cacheMetadata);\n const cacheControl = CacheManager._getOperationCacheControl(cacheMetadata, context.operation);\n\n void 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 keysAndPaths: KeysAndPaths,\n { cacheability, fieldData }: DataForCachingEntry,\n options: RequestOptions,\n context: CacheManagerContext\n ): Promise<void> {\n const { hashedRequestFieldCacheKey, requestFieldCacheKey } = keysAndPaths;\n\n const result = await this._checkCacheEntry(REQUEST_FIELD_PATHS, hashedRequestFieldCacheKey, options, {\n ...context,\n requestFieldCacheKey,\n });\n\n if (result && isObjectLike(result.entry) && isObjectLike(fieldData)) {\n fieldData = mergeDataSets(result.entry, fieldData, this._typeIDKey);\n }\n\n void 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\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, type CacheTypes, type RequestOptions } from '@graphql-box/core';\nimport type { CacheManagerContext, CacheManagerDef } from '../types.ts';\n\ntype Descriptor = (\n cacheType: CacheTypes,\n hash: string,\n options: RequestOptions,\n context: CacheManagerContext & { requestFieldCacheKey?: string }\n) => Promise<never | undefined>;\n\nexport const logCacheQuery = () => {\n return (_target: CacheManagerDef, _propertyName: string, descriptor: TypedPropertyDescriptor<Descriptor>): void => {\n const method = descriptor.value;\n\n if (!method) {\n return;\n }\n\n descriptor.value = async function descriptorValue(...args: Parameters<Descriptor>): ReturnType<Descriptor> {\n return new Promise(resolve => {\n void (async () => {\n const { debugManager, requestFieldCacheKey, ...otherContext } = args[3];\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 });\n };\n };\n};\n","import { CACHE_ENTRY_ADDED, type CacheTypes, type CachemapOptions, type RequestOptions } from '@graphql-box/core';\nimport type { CacheManagerContext, CacheManagerDef } from '../types.ts';\n\ntype Descriptor = (\n cacheType: CacheTypes,\n hash: string,\n value: unknown,\n cachemapOptions: CachemapOptions,\n options: RequestOptions,\n context: CacheManagerContext & { requestFieldCacheKey?: string }\n) => Promise<void>;\n\nexport const logCacheEntry = () => {\n return (_target: CacheManagerDef, _propertyName: string, descriptor: TypedPropertyDescriptor<Descriptor>): void => {\n const method = descriptor.value;\n\n if (!method) {\n return;\n }\n\n descriptor.value = async function descriptorValue(...args: Parameters<Descriptor>): ReturnType<Descriptor> {\n return new Promise<void>(resolve => {\n void (async () => {\n const { debugManager, requestFieldCacheKey, ...otherContext } = args[5];\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 cacheType: args[0],\n cachemapOptions: args[3],\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};\n","import { PARTIAL_QUERY_COMPILED, type RequestOptions } from '@graphql-box/core';\nimport type { CacheManagerContext, CacheManagerDef, PartialQueryResponse } from '../types.ts';\n\ntype Descriptor = (\n hash: string,\n partialQueryResponse: PartialQueryResponse,\n options: RequestOptions,\n context: CacheManagerContext\n) => void;\n\nexport const logPartialCompiled = () => {\n return (_target: CacheManagerDef, _propertyName: string, descriptor: TypedPropertyDescriptor<Descriptor>): void => {\n const method = descriptor.value;\n\n if (!method) {\n return;\n }\n\n descriptor.value = function descriptorValue(...args: Parameters<Descriptor>): ReturnType<Descriptor> {\n const { debugManager, ...otherContext } = args[3];\n\n if (!debugManager) {\n method.apply(this, args);\n return;\n }\n\n const startTime = debugManager.now();\n method.apply(this, args);\n const endTime = debugManager.now();\n const duration = endTime - startTime;\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","import { type RawResponseDataWithMaybeCacheMetadata } from '@graphql-box/core';\nimport { isString, set } from 'lodash-es';\nimport { type CacheManagerContext } from '../types.ts';\n\nexport const normalizePatchResponseData = (\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n context: CacheManagerContext\n) => {\n if (!context.normalizePatchResponseData) {\n return rawResponseData;\n }\n\n const { data, paths, ...rest } = rawResponseData;\n\n if (!paths?.length || !isString(paths[0])) {\n return rawResponseData;\n }\n\n return {\n ...rest,\n data: set({}, paths[0], data),\n paths,\n };\n};\n","import { type RawResponseDataWithMaybeCacheMetadata } from '@graphql-box/core';\nimport { type CacheManagerContext } from '../types.ts';\n\nexport const isNotLastResponseChunk = (\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n context: CacheManagerContext\n) => context.hasDeferOrStream && rawResponseData.hasNext;\n","import { type RawResponseDataWithMaybeCacheMetadata } from '@graphql-box/core';\nimport { type CacheManagerContext } from '../types.ts';\n\nexport const isLastResponseChunk = (\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n context: CacheManagerContext\n) => context.hasDeferOrStream && !rawResponseData.hasNext && rawResponseData.paths;\n","import { type RawResponseDataWithMaybeCacheMetadata } from '@graphql-box/core';\nimport { type CacheManagerContext } from '../types.ts';\n\nexport const isNotResponseChunk = (\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n context: CacheManagerContext\n) => !context.hasDeferOrStream && !rawResponseData.hasNext && !rawResponseData.paths;\n","import { type FieldTypeInfo } from '@graphql-box/core';\nimport { isPlainObject } from '@graphql-box/helpers';\n\nexport const getValidTypeIdValue = (\n requestFieldPathData: unknown,\n fieldTypeInfo: FieldTypeInfo | undefined,\n typeIDKey: string\n): string | number | undefined => {\n if (fieldTypeInfo?.typeIDValue) {\n return fieldTypeInfo.typeIDValue;\n }\n\n if (isPlainObject(requestFieldPathData)) {\n return requestFieldPathData[typeIDKey] as string | number | undefined;\n }\n\n return;\n};\n","import { type RawResponseDataWithMaybeCacheMetadata } from '@graphql-box/core';\nimport { merge } from 'lodash-es';\n\nexport const mergeResponseDataSets = (responseDataSets: RawResponseDataWithMaybeCacheMetadata[]) => {\n return responseDataSets.reduce<RawResponseDataWithMaybeCacheMetadata>(\n (acc, 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 = merge(acc.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);\n }\n\n return acc;\n },\n { data: {} }\n );\n};\n"],"names":["NO_CACHE","checkValue","value","typeIDKey","isArray","reduce","acc","entry","isPlainObject","recursivelyCheckProps","data","keys","Object","length","key","isNumber","isString","mergeDataSets","obj","source","mergeObjects","_key","undefined","combineDataSets","dataSetA","dataSetB","isObjectLike","createEntityDataKey","fieldData","fieldTypeInfo","context","isEntity","typeName","__typename","String","deriveOpCacheability","_cacheMetadata","fallback","headers","isEmpty","first","rest","values","Cacheability","metadata","ttl","has","cacheControl","isFieldEntity","possibleTypes","some","type","filterOutPropsWithEntityArgsOrDirectives","field","ancestorKeysAndPaths","fieldAndTypeName","resolveFragments","selectionSet","selections","fragmentDefinitions","match","find","fieldNode","getName","keysAndPaths","buildFieldKeysAndPaths","fieldTypeMap","get","requestFieldPath","hasArguments","hasDirectives","filterOutPropsWithEntityOrArgs","checkFieldPathChecklist","fieldPathChecklistValues","fieldTypeName","hasData","typeUnused","fieldPathChecklistValue","every","filterField","fieldPathChecklist","fragmentSpreadChecklist","ancestorRequestFieldPath","fieldsAndTypeNames","getChildFields","fragmentSpreadFieldCounter","index","childField","fragmentKind","fragmentName","childTypeName","Kind","FRAGMENT_SPREAD","total","childFieldName","TYPE_NAME_KEY","counter","hasChildFields","deleteChildFields","filterFragmentSpreads","checklist","paths","push","deleteFragmentSpreads","deleted","filterInlineFragments","inlineFragments","getInlineFragments","filtered","fragment","deleteInlineFragments","filterIDsAndTypeNames","fieldNames","map","name","filterQuery","requestData","ast","queryNode","getOperationDefinitions","operation","createFragmentSpreadChecklist","request","RegExp","queryFiltered","filterFragmentDefinitions","definitionsToFilter","namesAndPaths","path","fragmentDefinition","definitionsToDelete","names","deleteFragmentDefinitions","include","getDataValue","hasTypename","CacheManager","_dec","_target","_propertyName","descriptor","method","async","args","Promise","resolve","debugManager","requestFieldCacheKey","otherContext","apply","this","startTime","now","result","endTime","duration","payload","cacheType","options","requestHash","stats","decryptedCacheKey","log","CACHE_ENTRY_QUERIED","_dec2","cachemapOptions","CACHE_ENTRY_ADDED","_dec3","PARTIAL_QUERY_COMPILED","_class","_countFieldPathChecklist","fieldCount","missing","checklistValues","filter","_getFieldDataFromAncestor","ancestorFieldData","propNameOrIndex","dataValue","structuredClone","_getOperationCacheControl","cacheMetadata","defaultCacheControl","cacheability","printCacheControl","_isNodeEntity","_isNodeRequestFieldPath","_isValid","checkTTL","_mergeResponseCacheMetadata","partialQueryResponse","Map","_setCachedData","responseData","setData","isUndefined","_setCachedResponseData","cachedFieldData","typeNamesAndKind","_options","_setCacheMetadata","_setFieldPathChecklist","set","operationCacheability","dataTypename","dataTypeName","fieldTypename","constructor","_defineProperty","errors","ArgsError","typeCacheDirectives","message","GroupedError","_cache","cache","_cascadeCacheControl","cascadeCacheControl","_fallbackOperationCacheability","fallbackOperationCacheability","_typeCacheDirectives","_typeIDKey","DEFAULT_TYPE_ID_KEY","analyzeQuery","hash","cacheManagerContext","getFragmentDefinitions","cachedResponseData","_retrieveCachedResponseData","areOnlyPopulatedFieldsTypeIdKeys","updated","_setQueryResponseCacheEntry","response","filteredAST","filteredRequest","print","assign","_setPartialQueryResponse","hashRequest","cacheQuery","updatedRequestData","rawResponseData","_cacheResponse","cacheResponse","checkCacheEntry","_checkCacheEntry","checkQueryResponseCacheEntry","QUERY_RESPONSES","rehydrateCacheMetadata","deletePartialQueryResponse","_partialQueryResponses","delete","setQueryResponseCacheEntry","_analyzeFieldNode","cachedAncestorFieldData","_analyzeParentFieldNode","_analyzeLeafFieldNode","hashedRequestFieldCacheKey","entityData","requestFieldPathData","typenamesAndKind","_retrieveCachedRequestFieldPathData","_retrieveCachedParentNodeData","promises","iterateChildFields","childFragmentKind","childFragmentName","childIndex","all","_buildCacheMetadata","otherProps","_createCacheMetadata","_setFieldCacheability","normalizedResponseData","normalizePatchResponseData","responseDataForCaching","isNotLastResponseChunk","hasDeferOrStream","hasNext","_setResponseChunksAwaitingCaching","isLastResponseChunk","_retrieveResponseDataForCaching","queryCacheMetadata","queryData","_setEntityAndRequestFieldPathCacheEntries","OperationTypeNode","QUERY","_getPartialQueryResponse","_mergeResponseData","isNotResponseChunk","_hasCacheEntry","_getCacheEntry","_context","_parseEntityAndRequestFieldPathCacheEntryData","responseDataPath","_typeName","_fragmentKind","_fragmentName","hasArgsOrDirectives","_setRequestFieldPathCacheEntry","__cacheKey","REQUEST_FIELD_PATHS","unset","_setEntityCacheEntry","DATA_ENTITIES","_retrieveCachedEntityData","validTypeIDValue","typeNames","validResults","validResult","sort","a","b","ancestorEntityData","ancestorRequestFieldPathData","entryCacheability","getValidTypeIdValue","typeIDValue","isEqual","responseChunks","_responseChunksAwaitingCaching","requestID","responseDataSets","dataSet","merge","_setCacheEntry","operationNode","entityDataKey","cacheHeaders","tag","_setFieldTypeCacheDirective","dehydratedCacheMetadata","dehydrateCacheMetadata","_applyDecoratedDescriptor","prototype","getOwnPropertyDescriptor"],"mappings":"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"}
|