@graphql-box/cache-manager 2.5.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/browser/index.js +1 -1
- package/lib/browser/index.js.map +1 -1
- package/lib/browser/production.analysis.txt +24 -24
- package/lib/main/main/index.js +21 -32
- package/lib/main/main/index.js.map +1 -1
- package/lib/module/main/index.js +21 -32
- package/lib/module/main/index.js.map +1 -1
- package/lib/types/defs/index.d.ts +1 -8
- package/lib/types/defs/index.d.ts.map +1 -1
- package/lib/types/main/index.d.ts +1 -2
- package/lib/types/main/index.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/defs/index.ts +1 -9
- package/src/index.test.ts +29 -29
- package/src/main/index.ts +21 -27
package/lib/browser/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../cache-manager/src/consts/index.ts","../cache-manager/src/helpers/buildKeysAndPaths.ts","../cache-manager/src/helpers/filterOutPropsWithArgsOrDirectives.ts","../cache-manager/src/helpers/checkFieldPathChecklist.ts","../cache-manager/src/helpers/filterField.ts","../cache-manager/src/helpers/filterFragmentSpreads.ts","../cache-manager/src/helpers/filterInlineFragments.ts","../cache-manager/src/helpers/filterIDsAndTypeNames.ts","../cache-manager/src/helpers/filterQuery.ts","../cache-manager/src/helpers/createFragmentSpreadChecklist.ts","../cache-manager/src/helpers/filterFragmentDefinitions.ts","../cache-manager/src/helpers/isLastResponseChunk.ts","../cache-manager/src/helpers/isNotLastResponseChunk.ts","../cache-manager/src/helpers/isNotResponseChunk.ts","../cache-manager/src/helpers/normalizePatchResponseData.ts","../cache-manager/src/helpers/validTypeIDValue.ts","../cache-manager/src/main/index.ts","../cache-manager/src/debug/log-cache-query/index.ts","../cache-manager/src/debug/log-cache-entry/index.ts","../cache-manager/src/debug/log-partial-compiled/index.ts","../cache-manager/src/helpers/deriveOpCacheability.ts","../cache-manager/src/helpers/mergeResponseDataSets.ts"],"sourcesContent":["export const METADATA = \"metadata\";\nexport const CACHE_CONTROL = \"cacheControl\";\nexport const NO_CACHE = \"noCache\";\n\nexport const HEADER_CACHE_CONTROL = \"cache-control\";\nexport const HEADER_NO_CACHE = \"no-cache\";\n\nexport const CACHE_ENTRY_ADDED = \"cache_entry_added\";\nexport const CACHE_ENTRY_QUERIED = \"cache_entry_queried\";\nexport const PARTIAL_QUERY_COMPILED = \"partial_query_compiled\";\n","import { FieldTypeInfo, PlainObjectMap } from \"@graphql-box/core\";\nimport { getAlias, getArguments, getName, hashRequest } from \"@graphql-box/helpers\";\nimport { FieldNode } from \"graphql\";\nimport { isNumber } from \"lodash\";\nimport { CacheManagerContext, KeysAndPaths, KeysAndPathsOptions } from \"../defs\";\n\nexport const buildKey = (path: string, key: string | number) => {\n const paths: (string | number)[] = [];\n\n if (path.length) {\n paths.push(path);\n }\n\n paths.push(key);\n return paths.join(\".\");\n};\n\nexport const buildRequestFieldCacheKey = (\n name: string,\n requestFieldCacheKey: string,\n args: PlainObjectMap | undefined,\n directives?: FieldTypeInfo[\"directives\"],\n index?: number,\n) => {\n let key = `${isNumber(index) ? index : name}`;\n\n if (args) {\n key = `${key}(${JSON.stringify(args)})`;\n }\n\n if (directives?.inherited?.length) {\n key = `${directives.inherited.join(\" \")} ${key}`;\n }\n\n if (directives?.own?.length) {\n key = `${key} ${directives.own.join(\" \")}`;\n }\n\n return buildKey(requestFieldCacheKey, key);\n};\n\nexport const buildFieldKeysAndPaths = (\n field: FieldNode,\n options: KeysAndPathsOptions,\n context: CacheManagerContext,\n): KeysAndPaths => {\n const name = getName(field) as FieldNode[\"name\"][\"value\"];\n const { index, requestFieldCacheKey = \"\", requestFieldPath = \"\", responseDataPath = \"\" } = options;\n const fieldAliasOrName = getAlias(field) || name;\n const updatedRequestFieldPath = isNumber(index) ? requestFieldPath : buildKey(requestFieldPath, fieldAliasOrName);\n const fieldTypeInfo = context.fieldTypeMap.get(updatedRequestFieldPath);\n\n const updatedRequestFieldCacheKey = buildRequestFieldCacheKey(\n name,\n requestFieldCacheKey,\n getArguments(field),\n fieldTypeInfo?.directives,\n index,\n );\n\n const propNameOrIndex = isNumber(index) ? index : fieldAliasOrName;\n const updatedResponseDataPath = buildKey(responseDataPath, propNameOrIndex);\n\n return {\n hashedRequestFieldCacheKey: hashRequest(updatedRequestFieldCacheKey),\n propNameOrIndex,\n requestFieldCacheKey: updatedRequestFieldCacheKey,\n requestFieldPath: updatedRequestFieldPath,\n responseDataPath: updatedResponseDataPath,\n };\n};\n","import { PlainObjectMap } from \"@graphql-box/core\";\nimport { getName, resolveFragments } from \"@graphql-box/helpers\";\nimport { FieldNode, SelectionNode } from \"graphql\";\nimport { keys } from \"lodash\";\nimport { CacheManagerContext, KeysAndPaths } from \"../defs\";\nimport { buildFieldKeysAndPaths } from \"./buildKeysAndPaths\";\n\nexport default (\n fieldData: PlainObjectMap,\n selectionNodes: readonly SelectionNode[],\n ancestorKeysAndPaths: KeysAndPaths,\n context: CacheManagerContext,\n) => {\n const fieldAndTypeName = resolveFragments(selectionNodes, context.fragmentDefinitions);\n\n return keys(fieldData).reduce((acc: PlainObjectMap, key) => {\n const match = fieldAndTypeName.find(({ fieldNode }) => (getName(fieldNode) as FieldNode[\"name\"][\"value\"]) === key);\n\n if (match) {\n const { requestFieldPath } = buildFieldKeysAndPaths(match.fieldNode, ancestorKeysAndPaths, context);\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath);\n\n if (!fieldTypeInfo?.hasArguments && !fieldTypeInfo?.hasDirectives) {\n acc[key] = fieldData[key];\n }\n }\n\n return acc;\n }, {});\n};\n","import { CheckFieldPathChecklistResult, FieldPathChecklistValue } from \"../defs\";\n\nexport default (\n fieldPathChecklistValues: FieldPathChecklistValue[] | undefined,\n fieldTypeName: string | undefined,\n): CheckFieldPathChecklistResult => {\n if (!fieldPathChecklistValues || !fieldPathChecklistValues.length) {\n return { hasData: false, typeUnused: !!fieldTypeName };\n }\n\n if (fieldPathChecklistValues.length === 1) {\n const { hasData, typeName } = fieldPathChecklistValues[0];\n const typeUnused = !typeName ? undefined : typeName !== fieldTypeName;\n return { hasData, typeUnused };\n }\n\n return {\n hasData: fieldPathChecklistValues.some(({ hasData, typeName }) => typeName === fieldTypeName && hasData),\n typeUnused: !fieldPathChecklistValues.every(({ typeName }) => typeName === fieldTypeName),\n };\n};\n","import { TYPE_NAME_KEY } from \"@graphql-box/core\";\nimport { FRAGMENT_SPREAD, deleteChildFields, getChildFields, getName, hasChildFields } from \"@graphql-box/helpers\";\nimport { FieldNode, FragmentDefinitionNode } from \"graphql\";\nimport { CacheManagerContext, FieldPathChecklist, FragmentSpreadFieldCounter } from \"../defs\";\nimport { buildFieldKeysAndPaths } from \"./buildKeysAndPaths\";\nimport checkFieldPathChecklist from \"./checkFieldPathChecklist\";\nimport { FragmentSpreadCheckist } from \"./createFragmentSpreadChecklist\";\nimport filterFragmentSpreads from \"./filterFragmentSpreads\";\nimport filterIDsAndTypeNames from \"./filterIDsAndTypeNames\";\nimport filterInlineFragments from \"./filterInlineFragments\";\n\nconst filterField = (\n field: FieldNode | FragmentDefinitionNode,\n fieldPathChecklist: FieldPathChecklist,\n fragmentSpreadChecklist: FragmentSpreadCheckist,\n ancestorRequestFieldPath: string,\n context: CacheManagerContext,\n): boolean => {\n const { fragmentDefinitions, typeIDKey } = context;\n const fieldsAndTypeNames = getChildFields(field, { fragmentDefinitions });\n\n if (!fieldsAndTypeNames) {\n return false;\n }\n\n const fragmentSpreadFieldCounter: FragmentSpreadFieldCounter = {};\n\n for (let i = fieldsAndTypeNames.length - 1; i >= 0; i -= 1) {\n const { fieldNode: childField, fragmentKind, fragmentName, typeName: childTypeName } = fieldsAndTypeNames[i];\n\n if (fragmentKind === FRAGMENT_SPREAD && fragmentName && !fragmentSpreadFieldCounter[fragmentName]) {\n fragmentSpreadFieldCounter[fragmentName] = {\n hasData: 0,\n total: fragmentDefinitions?.[fragmentName]\n ? getChildFields(fragmentDefinitions?.[fragmentName], { fragmentDefinitions })?.length ?? 0\n : 0,\n };\n }\n\n const childFieldName = getName(childField);\n\n if (childFieldName === typeIDKey || childFieldName === TYPE_NAME_KEY) {\n continue;\n }\n\n const { requestFieldPath } = buildFieldKeysAndPaths(\n childField,\n {\n requestFieldPath: ancestorRequestFieldPath,\n },\n context,\n );\n\n const { hasData, typeUnused } = checkFieldPathChecklist(fieldPathChecklist.get(requestFieldPath), childTypeName);\n\n if (hasData || typeUnused) {\n if (fragmentKind === FRAGMENT_SPREAD) {\n fragmentSpreadFieldCounter[fragmentName as string].hasData += 1;\n } else if (!hasChildFields(childField, { fragmentDefinitions })) {\n deleteChildFields(field, childField);\n } else if (filterField(childField, fieldPathChecklist, fragmentSpreadChecklist, requestFieldPath, context)) {\n deleteChildFields(field, childField);\n }\n }\n }\n\n filterFragmentSpreads(field, fragmentSpreadFieldCounter, fragmentSpreadChecklist, ancestorRequestFieldPath);\n filterInlineFragments(field, context);\n filterIDsAndTypeNames(field, context);\n return !hasChildFields(field, { fragmentDefinitions });\n};\n\nexport default filterField;\n","import { deleteFragmentSpreads } from \"@graphql-box/helpers\";\nimport { FieldNode, FragmentDefinitionNode } from \"graphql\";\nimport { isEmpty, keys } from \"lodash\";\nimport { FragmentSpreadFieldCounter } from \"../defs\";\nimport { FragmentSpreadCheckist } from \"./createFragmentSpreadChecklist\";\n\nexport default (\n field: FieldNode | FragmentDefinitionNode,\n fragmentSpreadFieldCounter: FragmentSpreadFieldCounter,\n fragmentSpreadChecklist: FragmentSpreadCheckist,\n ancestorRequestFieldPath: string,\n) => {\n if (isEmpty(fragmentSpreadFieldCounter)) {\n return;\n }\n\n keys(fragmentSpreadFieldCounter).forEach(key => {\n fragmentSpreadChecklist[key].total += 1;\n fragmentSpreadChecklist[key].paths.push(ancestorRequestFieldPath);\n\n const { hasData, total } = fragmentSpreadFieldCounter[key];\n\n if (hasData === total) {\n deleteFragmentSpreads(field, key);\n fragmentSpreadChecklist[key].deleted += 1;\n }\n });\n};\n","import { deleteInlineFragments, getChildFields, getInlineFragments, getName } from \"@graphql-box/helpers\";\nimport { FieldNode, FragmentDefinitionNode } from \"graphql\";\nimport { CacheManagerContext } from \"..\";\n\nexport default (field: FieldNode | FragmentDefinitionNode, { fragmentDefinitions, typeIDKey }: CacheManagerContext) => {\n const inlineFragments = getInlineFragments(field);\n let filtered = false;\n\n inlineFragments.forEach(fragment => {\n const fieldsAndTypeNames = getChildFields(fragment, { fragmentDefinitions });\n\n if (!fieldsAndTypeNames || !fieldsAndTypeNames.length) {\n deleteInlineFragments(field, fragment);\n filtered = true;\n return;\n }\n\n if (fieldsAndTypeNames.length === 1) {\n const { fieldNode } = fieldsAndTypeNames[0];\n\n if (getName(fieldNode) === typeIDKey) {\n deleteInlineFragments(field, fragment);\n filtered = true;\n }\n }\n });\n\n return filtered;\n};\n","import { TYPE_NAME_KEY } from \"@graphql-box/core\";\nimport { deleteChildFields, getChildFields, getName } from \"@graphql-box/helpers\";\nimport { FieldNode, FragmentDefinitionNode } from \"graphql\";\nimport { CacheManagerContext } from \"../defs\";\n\nexport default (field: FieldNode | FragmentDefinitionNode, { fragmentDefinitions, typeIDKey }: CacheManagerContext) => {\n const fieldsAndTypeNames = getChildFields(field, { fragmentDefinitions });\n\n if (!fieldsAndTypeNames || fieldsAndTypeNames.length > 3) {\n return false;\n }\n\n const fieldNames = fieldsAndTypeNames.map(({ fieldNode }) => getName(fieldNode) as FieldNode[\"name\"][\"value\"]);\n\n if (fieldNames.length === 2 && fieldNames.every(name => name === typeIDKey || name === TYPE_NAME_KEY)) {\n deleteChildFields(\n field,\n fieldsAndTypeNames.map(({ fieldNode }) => fieldNode),\n );\n\n return true;\n }\n\n if ((fieldNames.length === 1 && fieldNames[0] === typeIDKey) || fieldNames[0] === TYPE_NAME_KEY) {\n const { fieldNode } = fieldsAndTypeNames[0];\n deleteChildFields(field, fieldNode);\n return true;\n }\n\n return false;\n};\n","import { RequestData } from \"@graphql-box/core\";\nimport { deleteChildFields, getChildFields, getOperationDefinitions } from \"@graphql-box/helpers\";\nimport { CacheManagerContext, CachedResponseData } from \"../defs\";\nimport { buildFieldKeysAndPaths } from \"./buildKeysAndPaths\";\nimport createFragmentSpreadChecklist from \"./createFragmentSpreadChecklist\";\nimport filterField from \"./filterField\";\nimport filterFragmentDefinitions from \"./filterFragmentDefinitions\";\n\nexport default ({ ast }: RequestData, { fieldPathChecklist }: CachedResponseData, context: CacheManagerContext) => {\n const queryNode = getOperationDefinitions(ast, context.operation)[0];\n const { fragmentDefinitions } = context;\n const fieldsAndTypeNames = getChildFields(queryNode, { fragmentDefinitions });\n\n if (!fieldsAndTypeNames) {\n return ast;\n }\n\n const fragmentSpreadChecklist = createFragmentSpreadChecklist(ast);\n\n for (let i = fieldsAndTypeNames.length - 1; i >= 0; i -= 1) {\n const { fieldNode } = fieldsAndTypeNames[i];\n\n const { requestFieldPath } = buildFieldKeysAndPaths(\n fieldNode,\n {\n requestFieldPath: context.operation,\n },\n context,\n );\n\n if (filterField(fieldNode, fieldPathChecklist, fragmentSpreadChecklist, requestFieldPath, context)) {\n deleteChildFields(queryNode, fieldNode);\n }\n }\n\n context.queryFiltered = true;\n return filterFragmentDefinitions(ast, fieldPathChecklist, fragmentSpreadChecklist, context);\n};\n","import { getFragmentDefinitions } from \"@graphql-box/helpers\";\nimport { DocumentNode } from \"graphql\";\nimport { keys } from \"lodash\";\n\nexport type FragmentSpreadCheckist = {\n [key: string]: {\n deleted: number;\n paths: string[];\n total: number;\n };\n};\n\nexport default (ast: DocumentNode) =>\n keys(getFragmentDefinitions(ast) ?? {}).reduce((acc: FragmentSpreadCheckist, name) => {\n acc[name] = { deleted: 0, paths: [], total: 0 };\n return acc;\n }, {});\n","import { deleteFragmentDefinitions, getFragmentDefinitions } from \"@graphql-box/helpers\";\nimport { DocumentNode } from \"graphql\";\nimport { keys } from \"lodash\";\nimport { CacheManagerContext, FieldPathChecklist } from \"../defs\";\nimport { FragmentSpreadCheckist } from \"./createFragmentSpreadChecklist\";\nimport filterField from \"./filterField\";\n\nexport default (\n ast: DocumentNode,\n fieldPathChecklist: FieldPathChecklist,\n fragmentSpreadChecklist: FragmentSpreadCheckist,\n context: CacheManagerContext,\n) => {\n const definitionsToFilter = keys(fragmentSpreadChecklist).reduce(\n (namesAndPaths: { name: string; path: string }[], key) => {\n const { deleted, total } = fragmentSpreadChecklist[key];\n\n return deleted === 0 && total === 1\n ? [...namesAndPaths, { name: key, path: fragmentSpreadChecklist[key].paths[0] as string }]\n : namesAndPaths;\n },\n [],\n );\n\n const fragmentDefinitions = getFragmentDefinitions(ast) ?? {};\n\n definitionsToFilter.forEach(({ name, path }) => {\n const fragmentDefinition = fragmentDefinitions[name];\n filterField(fragmentDefinition, fieldPathChecklist, fragmentSpreadChecklist, path, context);\n });\n\n const definitionsToDelete = keys(fragmentSpreadChecklist).reduce((names: string[], key) => {\n const { deleted, total } = fragmentSpreadChecklist[key];\n return deleted > 0 && deleted === total ? [...names, key] : names;\n }, []);\n\n return deleteFragmentDefinitions(ast, {\n include: definitionsToDelete,\n });\n};\n","import { RawResponseDataWithMaybeCacheMetadata } from \"@graphql-box/core\";\nimport { CacheManagerContext } from \"..\";\n\nexport default (rawResponseData: RawResponseDataWithMaybeCacheMetadata, context: CacheManagerContext) =>\n context.hasDeferOrStream && !rawResponseData.hasNext && rawResponseData.paths;\n","import { RawResponseDataWithMaybeCacheMetadata } from \"@graphql-box/core\";\nimport { CacheManagerContext } from \"..\";\n\nexport default (rawResponseData: RawResponseDataWithMaybeCacheMetadata, context: CacheManagerContext) =>\n context.hasDeferOrStream && rawResponseData.hasNext;\n","import { RawResponseDataWithMaybeCacheMetadata } from \"@graphql-box/core\";\nimport { CacheManagerContext } from \"..\";\n\nexport default (rawResponseData: RawResponseDataWithMaybeCacheMetadata, context: CacheManagerContext) =>\n !context.hasDeferOrStream && !rawResponseData.hasNext && !rawResponseData.paths;\n","import { RawResponseDataWithMaybeCacheMetadata } from \"@graphql-box/core\";\nimport { set } from \"lodash\";\nimport { CacheManagerContext } from \"..\";\n\nexport default (rawResponseData: RawResponseDataWithMaybeCacheMetadata, context: CacheManagerContext) => {\n if (!context.normalizePatchResponseData) {\n return rawResponseData;\n }\n\n const { data, paths, ...rest } = rawResponseData;\n\n return {\n ...rest,\n data: set({}, (paths as string[])[0], data),\n paths,\n };\n};\n","import { FieldTypeInfo } from \"@graphql-box/core\";\nimport { isPlainObject } from \"lodash\";\n\nexport const getValidTypeIDValue = (\n requestFieldPathData: any,\n { typeIDValue }: FieldTypeInfo,\n typeIDKey: string,\n): string | number | undefined => {\n const requestFieldPathDataIDValue = isPlainObject(requestFieldPathData) ? requestFieldPathData[typeIDKey] : undefined;\n return typeIDValue || requestFieldPathDataIDValue;\n};\n","import Cachemap from \"@cachemap/core\";\nimport {\n CacheMetadata,\n CacheTypes,\n DATA_ENTITIES,\n FieldTypeInfo,\n PlainObjectMap,\n PlainObjectStringMap,\n QUERY,\n QUERY_RESPONSES,\n REQUEST_FIELD_PATHS,\n RawResponseDataWithMaybeCacheMetadata,\n RequestContext,\n RequestData,\n RequestOptions,\n ResponseData,\n TYPE_NAME_KEY,\n} from \"@graphql-box/core\";\nimport {\n FRAGMENT_SPREAD,\n dehydrateCacheMetadata,\n getChildFields,\n getFragmentDefinitions,\n getOperationDefinitions,\n hasChildFields,\n hashRequest,\n iterateChildFields,\n mergeObjects,\n rehydrateCacheMetadata,\n} from \"@graphql-box/helpers\";\nimport Cacheability from \"cacheability\";\nimport { FieldNode, print } from \"graphql\";\nimport { assign, cloneDeep, get, isArray, isObjectLike, isPlainObject, isUndefined, set, unset } from \"lodash\";\nimport { CACHE_CONTROL, HEADER_NO_CACHE, METADATA, NO_CACHE } from \"../consts\";\nimport { logCacheEntry, logCacheQuery, logPartialCompiled } from \"../debug\";\nimport {\n AnalyzeQueryResult,\n AncestorKeysAndPaths,\n CacheManagerContext,\n CacheManagerDef,\n CacheManagerInit,\n CachedAncestorFieldData,\n CachedResponseData,\n CachemapOptions,\n CheckCacheEntryResult,\n ClientOptions,\n ConstructorOptions,\n DataForCachingEntry,\n FieldCount,\n FieldPathChecklist,\n FieldPathChecklistValue,\n InitOptions,\n KeysAndPaths,\n MergedCachedFieldData,\n PartialQueryResponse,\n PartialQueryResponses,\n QueryResponseCacheEntry,\n ResponseDataForCaching,\n TypeNamesAndKind,\n UserOptions,\n} from \"../defs\";\nimport { buildFieldKeysAndPaths } from \"../helpers/buildKeysAndPaths\";\nimport deriveOpCacheability from \"../helpers/deriveOpCacheability\";\nimport filterOutPropsWithArgsOrDirectives from \"../helpers/filterOutPropsWithArgsOrDirectives\";\nimport filterQuery from \"../helpers/filterQuery\";\nimport isLastResponseChunk from \"../helpers/isLastResponseChunk\";\nimport isNotLastResponseChunk from \"../helpers/isNotLastResponseChunk\";\nimport isNotResponseChunk from \"../helpers/isNotResponseChunk\";\nimport mergeResponseDataSets from \"../helpers/mergeResponseDataSets\";\nimport normalizePatchResponseData from \"../helpers/normalizePatchResponseData\";\nimport { getValidTypeIDValue } from \"../helpers/validTypeIDValue\";\n\nexport class CacheManager implements CacheManagerDef {\n public static async init(options: InitOptions): Promise<CacheManager> {\n const errors: TypeError[] = [];\n\n if (!options.cache) {\n errors.push(new TypeError(\"@graphql-box/cache-manager expected options.cache.\"));\n }\n\n if (!!options.typeCacheDirectives && !isPlainObject(options.typeCacheDirectives)) {\n const message = \"@graphql-box/cache-manager expected options.typeCacheDirectives to be a plain object.\";\n errors.push(new TypeError(message));\n }\n\n if (errors.length) {\n return Promise.reject(errors);\n }\n\n return new CacheManager(options);\n }\n\n private static _countFieldPathChecklist(fieldPathChecklist: FieldPathChecklist): FieldCount {\n const fieldCount: FieldCount = { missing: 0, total: 0 };\n\n fieldPathChecklist.forEach(checklistValues => {\n fieldCount.total += checklistValues.length;\n const missing = checklistValues.filter(({ hasData }) => !hasData);\n fieldCount.missing += missing.length;\n });\n\n return fieldCount;\n }\n\n private static _getFieldDataFromAncestor(ancestorFieldData: any, propNameOrIndex: string | number): any {\n return isObjectLike(ancestorFieldData) ? cloneDeep(ancestorFieldData[propNameOrIndex]) : undefined;\n }\n\n private static _getOperationCacheControl(cacheMetadata: CacheMetadata | undefined, operation: string): string {\n const defaultCacheControl = HEADER_NO_CACHE;\n\n if (!cacheMetadata) {\n return defaultCacheControl;\n }\n\n const cacheability = cacheMetadata.get(operation);\n return cacheability ? cacheability.printCacheControl() : defaultCacheControl;\n }\n\n private static _isNodeEntity(fieldTypeInfo?: FieldTypeInfo): boolean {\n if (!fieldTypeInfo) {\n return false;\n }\n\n const { isEntity, possibleTypes } = fieldTypeInfo;\n return isEntity || possibleTypes.some(type => !!type.isEntity);\n }\n\n private static _isNodeRequestFieldPath(fieldTypeInfo?: FieldTypeInfo): boolean {\n return (\n !!fieldTypeInfo &&\n (this._isNodeEntity(fieldTypeInfo) || fieldTypeInfo.hasArguments || fieldTypeInfo.hasDirectives)\n );\n }\n\n private static _isValid(cacheability: Cacheability): boolean {\n const noCache = get(cacheability, [METADATA, CACHE_CONTROL, NO_CACHE], false);\n return !noCache && cacheability.checkTTL();\n }\n\n private static _mergeResponseCacheMetadata(\n cacheMetadata: CacheMetadata,\n partialQueryResponse?: PartialQueryResponse,\n ): CacheMetadata {\n if (!partialQueryResponse) {\n return cacheMetadata;\n }\n\n return new Map([...partialQueryResponse.cacheMetadata, ...cacheMetadata]);\n }\n\n private static _setCachedData(\n requestData: PlainObjectMap,\n { data }: MergedCachedFieldData,\n propNameOrIndex: string | number,\n ): void {\n if (!isObjectLike(data) && !isUndefined(data)) {\n requestData[propNameOrIndex] = data as string | number | boolean | null;\n } else if (isObjectLike(data)) {\n const objectLikeData = data as PlainObjectMap | any[];\n requestData[propNameOrIndex] = isArray(objectLikeData) ? [] : {};\n }\n }\n\n private static _setCachedResponseData(\n cachedFieldData: MergedCachedFieldData,\n { cacheMetadata, data, fieldPathChecklist }: CachedResponseData,\n { propNameOrIndex, requestFieldPath }: KeysAndPaths,\n typeNamesAndKind: TypeNamesAndKind,\n _options: RequestOptions,\n { operation }: CacheManagerContext,\n ) {\n CacheManager._setCacheMetadata(cacheMetadata, cachedFieldData.cacheability, requestFieldPath, operation);\n CacheManager._setFieldPathChecklist(fieldPathChecklist, cachedFieldData, requestFieldPath, typeNamesAndKind);\n CacheManager._setCachedData(data, cachedFieldData, propNameOrIndex);\n }\n\n private static _setCacheMetadata(\n cacheMetadata: CacheMetadata,\n cacheability: Cacheability | undefined,\n requestFieldPath: string,\n operation: string,\n ): void {\n if (!cacheability) {\n return;\n }\n\n cacheMetadata.set(requestFieldPath, cacheability);\n const operationCacheability = cacheMetadata.get(operation);\n\n if (!operationCacheability || operationCacheability.metadata.ttl > cacheability.metadata.ttl) {\n cacheMetadata.set(operation, cacheability);\n }\n }\n\n private static _setFieldPathChecklist(\n fieldPathChecklist: FieldPathChecklist,\n { data }: MergedCachedFieldData,\n requestFieldPath: string,\n { dataTypeName, fieldTypeName, fragmentKind, fragmentName }: TypeNamesAndKind,\n ): void {\n if (isUndefined(fieldTypeName) || fragmentKind === FRAGMENT_SPREAD) {\n if (fieldPathChecklist.has(requestFieldPath)) {\n return;\n }\n\n fieldPathChecklist.set(requestFieldPath, [{ fragmentKind, fragmentName, hasData: !isUndefined(data) }]);\n return;\n }\n\n if (dataTypeName !== fieldTypeName) {\n return;\n }\n\n const entry = fieldPathChecklist.get(requestFieldPath);\n const checklistValues = entry ? (entry as FieldPathChecklistValue[]) : [];\n\n if (checklistValues.some(({ typeName }) => typeName === dataTypeName)) {\n return;\n }\n\n fieldPathChecklist.set(requestFieldPath, [\n ...checklistValues,\n { fragmentKind, fragmentName, hasData: !isUndefined(data), typeName: dataTypeName as string },\n ]);\n }\n\n private _cache: Cachemap;\n private _cascadeCacheControl: boolean;\n private _fallbackOperationCacheability: string;\n private _partialQueryResponses: PartialQueryResponses = new Map();\n private _responseChunksAwaitingCaching: Map<string, RawResponseDataWithMaybeCacheMetadata[]> = new Map();\n private _typeCacheDirectives: PlainObjectStringMap;\n private _typeIDKey: string;\n\n constructor(options: ConstructorOptions) {\n const { cache, cascadeCacheControl, fallbackOperationCacheability, typeCacheDirectives, typeIDKey } = options;\n this._cache = cache;\n this._cascadeCacheControl = cascadeCacheControl || false;\n this._fallbackOperationCacheability = fallbackOperationCacheability || NO_CACHE;\n this._typeCacheDirectives = typeCacheDirectives || {};\n this._typeIDKey = typeIDKey;\n }\n\n get cache(): Cachemap {\n return this._cache;\n }\n\n public async analyzeQuery(\n requestData: RequestData,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<AnalyzeQueryResult> {\n const { ast, hash } = requestData;\n\n if (!ast) {\n return Promise.reject(new TypeError(\"@graphql-box/cache-manager expected an AST.\"));\n }\n\n const cacheManagerContext: CacheManagerContext = {\n ...context,\n fragmentDefinitions: getFragmentDefinitions(ast),\n typeIDKey: this._typeIDKey,\n };\n\n const cachedResponseData = await this._retrieveCachedResponseData(requestData, options, cacheManagerContext);\n const { cacheMetadata, data, fieldCount } = cachedResponseData;\n\n if (fieldCount.missing === fieldCount.total) {\n return { updated: requestData };\n }\n\n if (!fieldCount.missing) {\n const dataCaching = this._setQueryResponseCacheEntry(hash, { cacheMetadata, data }, options, cacheManagerContext);\n\n if (options.awaitDataCaching) {\n await dataCaching;\n }\n\n return { response: { cacheMetadata, data } };\n }\n\n this._setPartialQueryResponse(hash, { cacheMetadata, data }, options, cacheManagerContext);\n const filteredAST = filterQuery(requestData, cachedResponseData, cacheManagerContext);\n const { fragmentDefinitions, typeIDKey, ...rest } = cacheManagerContext;\n assign(context, rest);\n const request = print(filteredAST);\n return { updated: { ast: filteredAST, hash: hashRequest(request), request } };\n }\n\n public async cacheQuery(\n requestData: RequestData,\n updatedRequestData: RequestData,\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<ResponseData> {\n const cacheManagerContext: CacheManagerContext = {\n ...context,\n fragmentDefinitions: getFragmentDefinitions(updatedRequestData.ast),\n typeIDKey: this._typeIDKey,\n };\n\n return this._cacheResponse(requestData, updatedRequestData, rawResponseData, options, cacheManagerContext);\n }\n\n public async cacheResponse(\n requestData: RequestData,\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<ResponseData> {\n const cacheManagerContext: CacheManagerContext = {\n ...context,\n fragmentDefinitions: getFragmentDefinitions(requestData.ast),\n typeIDKey: this._typeIDKey,\n };\n\n return this._cacheResponse(requestData, undefined, rawResponseData, options, cacheManagerContext);\n }\n\n public async checkCacheEntry(\n cacheType: CacheTypes,\n hash: string,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<CheckCacheEntryResult | false> {\n return this._checkCacheEntry(cacheType, hash, options, context);\n }\n\n public async checkQueryResponseCacheEntry(\n hash: string,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<ResponseData | false> {\n const result = await this._checkCacheEntry(QUERY_RESPONSES, hash, options, context);\n\n if (!result) {\n return false;\n }\n\n const { cacheMetadata, data } = result.entry as QueryResponseCacheEntry;\n\n return {\n cacheMetadata: rehydrateCacheMetadata(cacheMetadata),\n data,\n };\n }\n\n public deletePartialQueryResponse(hash: string): void {\n this._partialQueryResponses.delete(hash);\n }\n\n private async _analyzeFieldNode(\n fieldNode: FieldNode,\n cachedAncestorFieldData: CachedAncestorFieldData,\n cachedResponseData: CachedResponseData,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n if (hasChildFields(fieldNode, { fragmentDefinitions: context.fragmentDefinitions })) {\n await this._analyzeParentFieldNode(fieldNode, cachedAncestorFieldData, cachedResponseData, options, context);\n } else {\n await this._analyzeLeafFieldNode(fieldNode, cachedAncestorFieldData, cachedResponseData, options, context);\n }\n }\n\n private async _analyzeLeafFieldNode(\n fieldNode: FieldNode,\n cachedAncestorFieldData: CachedAncestorFieldData,\n cachedResponseData: CachedResponseData,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n const keysAndPaths = buildFieldKeysAndPaths(fieldNode, cachedAncestorFieldData, context);\n const { hashedRequestFieldCacheKey, propNameOrIndex, requestFieldPath } = keysAndPaths;\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath);\n const { entityData, fragmentKind, fragmentName, requestFieldPathData, typeName } = cachedAncestorFieldData;\n\n const typeNamesAndKind = {\n dataTypeName: entityData?.__typename || requestFieldPathData?.__typename,\n fieldTypeName: typeName,\n fragmentKind,\n fragmentName,\n };\n\n if (CacheManager._isNodeRequestFieldPath(fieldTypeInfo)) {\n const { cacheability, entry } = await this._retrieveCachedRequestFieldPathData(\n hashedRequestFieldCacheKey,\n options,\n context,\n );\n\n CacheManager._setCachedResponseData(\n { cacheability, data: entry },\n cachedResponseData,\n keysAndPaths,\n typeNamesAndKind,\n options,\n context,\n );\n } else {\n const cachedFieldData =\n CacheManager._getFieldDataFromAncestor(entityData, propNameOrIndex) ||\n CacheManager._getFieldDataFromAncestor(requestFieldPathData, propNameOrIndex);\n\n CacheManager._setFieldPathChecklist(\n cachedResponseData.fieldPathChecklist,\n { data: cachedFieldData },\n requestFieldPath,\n typeNamesAndKind,\n );\n\n CacheManager._setCachedData(cachedResponseData.data, { data: cachedFieldData }, propNameOrIndex);\n }\n }\n\n private async _analyzeParentFieldNode(\n fieldNode: FieldNode,\n cachedAncestorFieldData: CachedAncestorFieldData,\n cachedResponseData: CachedResponseData,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n const keysAndPaths = buildFieldKeysAndPaths(fieldNode, cachedAncestorFieldData, context);\n const { propNameOrIndex, requestFieldCacheKey, requestFieldPath } = keysAndPaths;\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath) as FieldTypeInfo;\n\n const { cacheability, data, entityData, requestFieldPathData } = await this._retrieveCachedParentNodeData(\n cachedAncestorFieldData,\n keysAndPaths,\n fieldTypeInfo,\n options,\n context,\n );\n\n const { fragmentKind, fragmentName, typeName } = cachedAncestorFieldData;\n\n CacheManager._setCachedResponseData(\n { cacheability, data },\n cachedResponseData,\n keysAndPaths,\n { dataTypeName: get(data, TYPE_NAME_KEY), fieldTypeName: typeName, fragmentKind, fragmentName },\n options,\n context,\n );\n\n if (!isObjectLike(data)) {\n return;\n }\n\n const objectLikeData = data as PlainObjectMap | any[];\n const promises: Promise<void>[] = [];\n\n iterateChildFields(\n fieldNode,\n objectLikeData,\n context.fragmentDefinitions,\n (\n childField: FieldNode,\n childTypeName: string | undefined,\n childFragmentKind: string | undefined,\n childFragmentName: string | undefined,\n childIndex?: number,\n ) => {\n promises.push(\n this._analyzeFieldNode(\n childField,\n {\n cacheability,\n entityData,\n fragmentKind: childFragmentKind,\n fragmentName: childFragmentName,\n index: childIndex,\n requestFieldCacheKey,\n requestFieldPath,\n requestFieldPathData,\n typeName: childTypeName,\n },\n { ...cachedResponseData, data: cachedResponseData.data[propNameOrIndex] },\n options,\n context,\n ),\n );\n },\n );\n\n await Promise.all(promises);\n }\n\n private _buildCacheMetadata(\n { ast }: RequestData,\n { data, ...otherProps }: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: CacheManagerContext,\n ): CacheMetadata {\n const cacheMetadata = this._createCacheMetadata({ data, ...otherProps }, context);\n const queryNode = getOperationDefinitions(ast, context.operation)[0];\n const fieldsAndTypeNames = getChildFields(queryNode);\n\n if (!fieldsAndTypeNames) {\n return cacheMetadata;\n }\n\n fieldsAndTypeNames.forEach(({ fieldNode }) =>\n this._setFieldCacheability(\n fieldNode,\n { requestFieldPath: context.operation },\n { cacheMetadata, data },\n options,\n context,\n ),\n );\n\n return cacheMetadata;\n }\n\n private async _cacheResponse(\n requestData: RequestData,\n updatedRequestData: RequestData | undefined,\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<ResponseData> {\n const normalizedResponseData = normalizePatchResponseData(rawResponseData, context);\n let responseDataForCaching: RawResponseDataWithMaybeCacheMetadata | undefined = normalizedResponseData;\n\n if (isNotLastResponseChunk(rawResponseData, context)) {\n this._setResponseChunksAwaitingCaching(normalizedResponseData, context);\n responseDataForCaching = undefined;\n }\n\n if (isLastResponseChunk(rawResponseData, context)) {\n responseDataForCaching = this._retrieveResponseDataForCaching(normalizedResponseData, context);\n }\n\n const dataCaching: Promise<void>[] = [];\n\n if (responseDataForCaching) {\n const { data } = responseDataForCaching;\n const cacheMetadata = this._buildCacheMetadata(requestData, responseDataForCaching, options, context);\n\n dataCaching.push(\n this._setEntityAndRequestFieldPathCacheEntries(\n requestData,\n {\n cacheMetadata,\n entityData: cloneDeep(data),\n requestFieldPathData: cloneDeep(data),\n },\n options,\n context,\n ),\n );\n\n let queryCacheMetadata: CacheMetadata | undefined;\n let queryData: PlainObjectMap | undefined;\n\n if (context.operation === QUERY) {\n let partialQueryResponse: PartialQueryResponse | undefined;\n\n if (context.queryFiltered && updatedRequestData) {\n dataCaching.push(\n this._setQueryResponseCacheEntry(updatedRequestData.hash, { cacheMetadata, data }, options, context),\n );\n\n partialQueryResponse = this._getPartialQueryResponse(requestData.hash);\n }\n\n queryCacheMetadata = CacheManager._mergeResponseCacheMetadata(cacheMetadata, partialQueryResponse);\n queryData = this._mergeResponseData(data, partialQueryResponse);\n\n dataCaching.push(\n this._setQueryResponseCacheEntry(\n requestData.hash,\n { cacheMetadata: queryCacheMetadata, data: queryData },\n options,\n context,\n ),\n );\n }\n\n if (options.awaitDataCaching) {\n await Promise.all(dataCaching);\n }\n\n if (isNotResponseChunk(normalizedResponseData, context) && queryCacheMetadata && queryData) {\n return {\n cacheMetadata: queryCacheMetadata,\n data: queryData,\n };\n }\n }\n\n const { data, hasNext, paths } = normalizedResponseData;\n\n return {\n cacheMetadata: this._buildCacheMetadata(requestData, normalizedResponseData, options, context),\n data,\n hasNext,\n paths,\n };\n }\n\n private async _checkCacheEntry(\n cacheType: CacheTypes,\n hash: string,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<CheckCacheEntryResult | false> {\n try {\n const cacheability = await this._hasCacheEntry(cacheType, hash);\n\n if (!cacheability || !CacheManager._isValid(cacheability)) {\n return false;\n }\n\n const entry = await this._getCacheEntry(cacheType, hash, options, context);\n\n if (isUndefined(entry)) {\n return false;\n }\n\n return { cacheability, entry };\n } catch (error) {\n return false;\n }\n }\n\n private _createCacheMetadata(\n { _cacheMetadata, headers }: RawResponseDataWithMaybeCacheMetadata,\n { operation }: CacheManagerContext,\n ): CacheMetadata {\n const cacheMetadata = new Map();\n\n const cacheability = deriveOpCacheability({\n _cacheMetadata,\n fallback: this._fallbackOperationCacheability,\n headers,\n });\n\n cacheMetadata.set(operation, cacheability);\n\n if (_cacheMetadata) {\n rehydrateCacheMetadata(_cacheMetadata, cacheMetadata);\n }\n\n return cacheMetadata;\n }\n\n @logCacheQuery()\n private async _getCacheEntry(\n cacheType: CacheTypes,\n hash: string,\n _options: RequestOptions,\n _context: CacheManagerContext,\n ): Promise<any> {\n try {\n return await this._cache.get(`${cacheType}::${hash}`);\n } catch (errors) {\n return Promise.reject(errors);\n }\n }\n\n private _getPartialQueryResponse(hash: string): PartialQueryResponse | undefined {\n const partialQueryResponse = this._partialQueryResponses.get(hash);\n this._partialQueryResponses.delete(hash);\n return partialQueryResponse;\n }\n\n private async _hasCacheEntry(cacheType: CacheTypes, hash: string): Promise<Cacheability | false> {\n try {\n return await this._cache.has(`${cacheType}::${hash}`);\n } catch (error) {\n return false;\n }\n }\n\n private _isFieldEntity(fieldData: any, { isEntity, possibleTypes }: FieldTypeInfo): boolean {\n if (!get(fieldData, this._typeIDKey, null)) {\n return false;\n }\n\n if (isEntity) {\n return true;\n }\n\n if (!possibleTypes.length) {\n return false;\n }\n\n return possibleTypes.some(type => type.typeName === fieldData.__typename);\n }\n\n private _mergeObjects<T>(obj: T, src: T): T {\n return mergeObjects(obj, src, (_key: string, val: any): string | number | undefined => {\n return isPlainObject(val) && val[this._typeIDKey] ? val[this._typeIDKey] : undefined;\n });\n }\n\n private _mergeResponseData(\n responseData: PlainObjectMap,\n partialQueryResponse?: PartialQueryResponse,\n ): PlainObjectMap {\n if (!partialQueryResponse) {\n return responseData;\n }\n\n return this._mergeObjects(partialQueryResponse.data, responseData);\n }\n\n private async _parseEntityAndRequestFieldPathCacheEntryData(\n field: FieldNode,\n ancestorKeysAndPaths: AncestorKeysAndPaths,\n { cacheMetadata, entityData, requestFieldPathData }: ResponseDataForCaching,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n const keysAndPaths = buildFieldKeysAndPaths(field, ancestorKeysAndPaths, context);\n const { requestFieldCacheKey, requestFieldPath, responseDataPath } = keysAndPaths;\n const fieldData = get(requestFieldPathData, responseDataPath);\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath);\n\n if (!isObjectLike(fieldData) && !fieldTypeInfo?.hasDirectives) {\n return;\n }\n\n if (isObjectLike(fieldData)) {\n const promises: Promise<void>[] = [];\n\n iterateChildFields(\n field,\n fieldData as PlainObjectMap | any[],\n context.fragmentDefinitions,\n (\n childField: FieldNode,\n _typeName: string | undefined,\n _fragmentKind: string | undefined,\n _fragmentName: string | undefined,\n childIndex?: number,\n ) => {\n promises.push(\n this._parseEntityAndRequestFieldPathCacheEntryData(\n childField,\n { index: childIndex, requestFieldCacheKey, requestFieldPath, responseDataPath },\n { cacheMetadata, entityData, requestFieldPathData },\n options,\n context,\n ),\n );\n },\n );\n\n await Promise.all(promises);\n }\n\n await this._setEntityAndRequestFieldPathCacheEntry(\n field,\n keysAndPaths,\n { cacheMetadata, entityData, requestFieldPathData },\n options,\n context,\n );\n }\n\n private async _retrieveCachedEntityData(\n validTypeIDValue: string | number,\n { possibleTypes, typeName }: FieldTypeInfo,\n options: RequestOptions,\n context: CacheManagerContext,\n ) {\n const typeNames = [...possibleTypes.map(type => type.typeName), typeName];\n\n const checkResults = await Promise.all(\n typeNames.map(name => this._checkCacheEntry(DATA_ENTITIES, `${name}::${validTypeIDValue}`, options, context)),\n );\n\n const validResults = checkResults.filter(result => !!result) as CheckCacheEntryResult[];\n let validResult: CheckCacheEntryResult | undefined;\n\n if (validResults.length === 1) {\n validResult = validResults[0];\n } else if (validResults.length > 1) {\n validResults.sort(({ cacheability: a }, { cacheability: b }) => a.metadata.ttl - b.metadata.ttl);\n\n validResult = {\n cacheability: validResults[0].cacheability,\n entry: validResults.reduce((obj, { entry }) => this._mergeObjects(obj, entry), {}),\n };\n }\n\n return (validResult || {}) as Partial<CheckCacheEntryResult>;\n }\n\n private async _retrieveCachedParentNodeData(\n { entityData: ancestorEntityData, requestFieldPathData: ancestorRequestFieldPathData }: CachedAncestorFieldData,\n { hashedRequestFieldCacheKey, propNameOrIndex }: KeysAndPaths,\n fieldTypeInfo: FieldTypeInfo,\n options: RequestOptions,\n context: CacheManagerContext,\n ) {\n let entityData = CacheManager._getFieldDataFromAncestor(ancestorEntityData, propNameOrIndex);\n let requestFieldPathData = CacheManager._getFieldDataFromAncestor(ancestorRequestFieldPathData, propNameOrIndex);\n let cacheability: Cacheability | undefined;\n\n if (CacheManager._isNodeRequestFieldPath(fieldTypeInfo)) {\n const { cacheability: entryCacheability, entry } = await this._retrieveCachedRequestFieldPathData(\n hashedRequestFieldCacheKey,\n options,\n context,\n );\n\n if (entry) {\n requestFieldPathData = this._mergeObjects(requestFieldPathData, entry);\n }\n\n if (entryCacheability) {\n cacheability = entryCacheability;\n }\n }\n\n const validTypeIDValue = getValidTypeIDValue(requestFieldPathData, fieldTypeInfo, this._typeIDKey);\n\n if (CacheManager._isNodeEntity(fieldTypeInfo) && validTypeIDValue) {\n const { cacheability: entryCacheability, entry } = await this._retrieveCachedEntityData(\n validTypeIDValue,\n fieldTypeInfo,\n options,\n context,\n );\n\n if (entry) {\n entityData = this._mergeObjects(entityData, entry);\n }\n\n if (entryCacheability && (!cacheability || entryCacheability.metadata.ttl > cacheability?.metadata.ttl)) {\n cacheability = entryCacheability;\n }\n }\n\n const data =\n !isUndefined(requestFieldPathData) || !isUndefined(entityData)\n ? this._mergeObjects(requestFieldPathData, entityData)\n : entityData ?? requestFieldPathData;\n\n return {\n cacheability,\n data,\n entityData,\n requestFieldPathData,\n };\n }\n\n private async _retrieveCachedRequestFieldPathData(\n hash: string,\n options: RequestOptions,\n context: CacheManagerContext,\n ) {\n return (this._checkCacheEntry(REQUEST_FIELD_PATHS, hash, options, context) || {}) as Partial<CheckCacheEntryResult>;\n }\n\n private async _retrieveCachedResponseData(\n { ast }: RequestData,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<CachedResponseData> {\n const cachedResponseData: CachedResponseData = {\n cacheMetadata: new Map(),\n data: {},\n fieldCount: { missing: 0, total: 0 },\n fieldPathChecklist: new Map(),\n };\n\n const queryNode = getOperationDefinitions(ast, context.operation)[0];\n const fieldsAndTypeNames = getChildFields(queryNode);\n\n if (!fieldsAndTypeNames) {\n return cachedResponseData;\n }\n\n await Promise.all(\n fieldsAndTypeNames.map(({ fieldNode }) =>\n this._analyzeFieldNode(\n fieldNode,\n { requestFieldPath: context.operation },\n cachedResponseData,\n options,\n context,\n ),\n ),\n );\n\n cachedResponseData.fieldCount = CacheManager._countFieldPathChecklist(cachedResponseData.fieldPathChecklist);\n return cachedResponseData;\n }\n\n private _retrieveResponseDataForCaching(\n normalizedResponseData: RawResponseDataWithMaybeCacheMetadata,\n context: CacheManagerContext,\n ) {\n const responseChunks = this._responseChunksAwaitingCaching.get(\n context.boxID,\n ) as RawResponseDataWithMaybeCacheMetadata[];\n\n this._responseChunksAwaitingCaching.delete(context.boxID);\n return mergeResponseDataSets([...responseChunks, normalizedResponseData]);\n }\n\n @logCacheEntry()\n private async _setCacheEntry(\n cacheType: CacheTypes,\n hash: string,\n value: any,\n cachemapOptions: CachemapOptions,\n _options: RequestOptions,\n _context: CacheManagerContext,\n ): Promise<void> {\n try {\n await this._cache.set(`${cacheType}::${hash}`, cloneDeep(value), cachemapOptions);\n } catch (error) {\n // no catch\n }\n }\n\n private async _setEntityAndRequestFieldPathCacheEntries(\n requestData: RequestData,\n responseData: ResponseDataForCaching,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n const operationNode = getOperationDefinitions(requestData.ast, context.operation)[0];\n const fieldsAndTypeNames = getChildFields(operationNode);\n\n if (!fieldsAndTypeNames) {\n return;\n }\n\n await Promise.all(\n fieldsAndTypeNames.map(({ fieldNode }) => {\n return this._parseEntityAndRequestFieldPathCacheEntryData(\n fieldNode,\n { requestFieldPath: context.operation },\n responseData,\n options,\n context,\n );\n }),\n );\n }\n\n private async _setEntityAndRequestFieldPathCacheEntry(\n field: FieldNode,\n keysAndPaths: KeysAndPaths,\n { cacheMetadata, entityData, requestFieldPathData }: ResponseDataForCaching,\n options: RequestOptions,\n context: CacheManagerContext,\n ) {\n const { requestFieldPath, responseDataPath } = keysAndPaths;\n const fieldData = get(entityData, responseDataPath);\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath);\n const cacheability = cacheMetadata.get(requestFieldPath);\n\n if (isUndefined(fieldData) || !fieldTypeInfo || !cacheability) {\n return;\n }\n\n const promises: Promise<void>[] = [];\n\n promises.push(\n this._setRequestFieldPathCacheEntry(\n field,\n keysAndPaths,\n { cacheability, data: requestFieldPathData, fieldTypeInfo },\n options,\n context,\n ),\n );\n\n const isEntity = this._isFieldEntity(fieldData, fieldTypeInfo);\n\n if (!isEntity && fieldTypeInfo.hasArguments) {\n unset(entityData, responseDataPath);\n }\n\n if (isEntity) {\n promises.push(\n this._setEntityCacheEntry(keysAndPaths, { cacheability, data: entityData, fieldTypeInfo }, options, context),\n );\n }\n\n await Promise.all(promises);\n }\n\n private async _setEntityCacheEntry(\n { responseDataPath }: KeysAndPaths,\n { cacheability, data, fieldTypeInfo }: DataForCachingEntry,\n options: RequestOptions,\n context: CacheManagerContext,\n ) {\n let fieldData = get(data, responseDataPath);\n const fieldTypeName = fieldTypeInfo.isEntity ? fieldTypeInfo.typeName : fieldData.__typename;\n const entityDataKey = `${fieldTypeName}::${fieldData[this._typeIDKey]}`;\n const result = await this._checkCacheEntry(DATA_ENTITIES, entityDataKey, options, context);\n\n if (result) {\n fieldData = this._mergeObjects(result.entry, fieldData);\n }\n\n await this._setCacheEntry(\n DATA_ENTITIES,\n entityDataKey,\n fieldData,\n { cacheHeaders: { cacheControl: cacheability.printCacheControl() }, tag: options.tag },\n options,\n context,\n );\n\n set(data, responseDataPath, { __cacheKey: `${DATA_ENTITIES}::${entityDataKey}` });\n }\n\n private _setFieldCacheability(\n field: FieldNode,\n ancestorKeysAndPaths: AncestorKeysAndPaths,\n { cacheMetadata, data }: ResponseData,\n options: RequestOptions,\n context: CacheManagerContext,\n ): void {\n const { requestFieldPath: ancestorRequestFieldPath } = ancestorKeysAndPaths;\n const keysAndPaths = buildFieldKeysAndPaths(field, ancestorKeysAndPaths, context);\n const { requestFieldPath, responseDataPath } = keysAndPaths;\n const fieldData = get(data, responseDataPath);\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath);\n\n if (!isObjectLike(fieldData) && !fieldTypeInfo?.hasDirectives) {\n return;\n }\n\n this._setFieldTypeCacheDirective(cacheMetadata, { ancestorRequestFieldPath, requestFieldPath }, context);\n\n if (isObjectLike(fieldData)) {\n iterateChildFields(\n field,\n fieldData as PlainObjectMap | any[],\n context.fragmentDefinitions,\n (\n childField: FieldNode,\n _typeName: string | undefined,\n _fragmentKind: string | undefined,\n _fragmentName: string | undefined,\n childIndex?: number,\n ) => {\n this._setFieldCacheability(\n childField,\n { index: childIndex, requestFieldPath, responseDataPath },\n { cacheMetadata, data },\n options,\n context,\n );\n },\n );\n }\n }\n\n private _setFieldTypeCacheDirective(\n cacheMetadata: CacheMetadata,\n { ancestorRequestFieldPath, requestFieldPath }: { ancestorRequestFieldPath?: string; requestFieldPath: string },\n { fieldTypeMap, operation }: CacheManagerContext,\n ): void {\n if (cacheMetadata.has(requestFieldPath)) {\n return;\n }\n\n const fieldTypeInfo = fieldTypeMap.get(requestFieldPath);\n\n if (fieldTypeInfo && this._typeCacheDirectives[fieldTypeInfo.typeName]) {\n const cacheability = new Cacheability({ cacheControl: this._typeCacheDirectives[fieldTypeInfo.typeName] });\n CacheManager._setCacheMetadata(cacheMetadata, cacheability, requestFieldPath, operation);\n } else if (this._cascadeCacheControl && ancestorRequestFieldPath) {\n CacheManager._setCacheMetadata(\n cacheMetadata,\n cacheMetadata.get(ancestorRequestFieldPath),\n requestFieldPath,\n operation,\n );\n }\n }\n\n @logPartialCompiled()\n private async _setPartialQueryResponse(\n hash: string,\n partialQueryResponse: PartialQueryResponse,\n _options: RequestOptions,\n _context: CacheManagerContext,\n ): Promise<void> {\n this._partialQueryResponses.set(hash, partialQueryResponse);\n }\n\n private async _setQueryResponseCacheEntry(\n hash: string,\n { cacheMetadata, data }: ResponseData,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n const dehydratedCacheMetadata = dehydrateCacheMetadata(cacheMetadata);\n const cacheControl = CacheManager._getOperationCacheControl(cacheMetadata, context.operation);\n\n await this._setCacheEntry(\n QUERY_RESPONSES,\n hash,\n { cacheMetadata: dehydratedCacheMetadata, data },\n { cacheHeaders: { cacheControl }, tag: options.tag },\n options,\n context,\n );\n }\n\n private async _setRequestFieldPathCacheEntry(\n field: FieldNode,\n keysAndPaths: KeysAndPaths,\n { cacheability, data, fieldTypeInfo }: DataForCachingEntry,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n const { hashedRequestFieldCacheKey, responseDataPath } = keysAndPaths;\n let fieldData = get(data, responseDataPath);\n const isEntity = this._isFieldEntity(fieldData, fieldTypeInfo);\n const hasArgsOrDirectives = fieldTypeInfo.hasArguments || fieldTypeInfo.hasDirectives;\n\n if (context.operation === QUERY && (isEntity || hasArgsOrDirectives)) {\n if (isPlainObject(fieldData) && field.selectionSet?.selections) {\n fieldData = filterOutPropsWithArgsOrDirectives(fieldData, field.selectionSet.selections, keysAndPaths, context);\n }\n\n const result = await this._checkCacheEntry(REQUEST_FIELD_PATHS, hashedRequestFieldCacheKey, options, context);\n\n if (result && isObjectLike(fieldData)) {\n fieldData = this._mergeObjects(result.entry, fieldData);\n }\n\n await this._setCacheEntry(\n REQUEST_FIELD_PATHS,\n hashedRequestFieldCacheKey,\n fieldData,\n { cacheHeaders: { cacheControl: cacheability.printCacheControl() }, tag: options.tag },\n options,\n context,\n );\n\n if (hasChildFields(field, { fragmentDefinitions: context.fragmentDefinitions })) {\n if (isEntity) {\n set(data, responseDataPath, { __cacheKey: `${REQUEST_FIELD_PATHS}::${hashedRequestFieldCacheKey}` });\n } else {\n unset(data, responseDataPath);\n }\n }\n }\n }\n\n private _setResponseChunksAwaitingCaching(\n normalizedResponseData: RawResponseDataWithMaybeCacheMetadata,\n context: CacheManagerContext,\n ) {\n const responseChunks = this._responseChunksAwaitingCaching.get(context.boxID);\n\n if (responseChunks) {\n this._responseChunksAwaitingCaching.set(context.boxID, [...responseChunks, normalizedResponseData]);\n } else {\n this._responseChunksAwaitingCaching.set(context.boxID, [normalizedResponseData]);\n }\n }\n}\n\nexport default function init(userOptions: UserOptions): CacheManagerInit {\n if (!isPlainObject(userOptions)) {\n throw new TypeError(\"@graphql-box/cache-manager expected userOptions to be a plain object.\");\n }\n\n return (clientOptions: ClientOptions) => CacheManager.init({ ...clientOptions, ...userOptions });\n}\n","import { RequestContext } from \"@graphql-box/core\";\nimport { CACHE_ENTRY_QUERIED } from \"../../consts\";\n\nexport default function logCacheQuery() {\n return (\n _target: any,\n _propertyName: string,\n descriptor: TypedPropertyDescriptor<(...args: any[]) => Promise<any>>,\n ): void => {\n const method = descriptor.value;\n if (!method) return;\n\n descriptor.value = async function descriptorValue(...args: any[]): Promise<any> {\n try {\n return new Promise(async resolve => {\n const { debugManager, ...otherContext } = args[3] as RequestContext;\n\n if (!debugManager) {\n resolve(await method.apply(this, args));\n return;\n }\n\n const startTime = debugManager.now();\n const result = await method.apply(this, args);\n const endTime = debugManager.now();\n const duration = endTime - startTime;\n resolve(result);\n\n debugManager.emit(CACHE_ENTRY_QUERIED, {\n cacheType: args[0],\n context: otherContext,\n hash: args[1],\n options: args[2],\n result,\n stats: { duration, endTime, startTime },\n });\n });\n } catch (error) {\n return Promise.reject(error);\n }\n };\n };\n}\n","import { RequestContext } from \"@graphql-box/core\";\nimport { CACHE_ENTRY_ADDED } from \"../../consts\";\n\nexport default function logCacheEntry() {\n return (\n _target: any,\n _propertyName: string,\n descriptor: TypedPropertyDescriptor<(...args: any[]) => Promise<any>>,\n ): void => {\n const method = descriptor.value;\n if (!method) return;\n\n descriptor.value = async function descriptorValue(...args: any[]): Promise<any> {\n return new Promise<void>(async resolve => {\n const { debugManager, ...otherContext } = args[5] as RequestContext;\n\n if (!debugManager) {\n await method.apply(this, args);\n resolve();\n return;\n }\n\n const startTime = debugManager.now();\n await method.apply(this, args);\n const endTime = debugManager.now();\n const duration = endTime - startTime;\n resolve();\n\n debugManager.emit(CACHE_ENTRY_ADDED, {\n cachemapOptions: args[3],\n cacheType: args[0],\n context: otherContext,\n hash: args[1],\n options: args[4],\n stats: { duration, endTime, startTime },\n value: args[2],\n });\n });\n };\n };\n}\n","import { RequestContext } from \"@graphql-box/core\";\nimport { PARTIAL_QUERY_COMPILED } from \"../../consts\";\n\nexport default function logPartialCompiled() {\n return (\n _target: any,\n _propertyName: string,\n descriptor: TypedPropertyDescriptor<(...args: any[]) => Promise<any>>,\n ): void => {\n const method = descriptor.value;\n if (!method) return;\n\n descriptor.value = async function descriptorValue(...args: any[]): Promise<any> {\n return new Promise<void>(async resolve => {\n const { debugManager, ...otherContext } = args[3] as RequestContext;\n\n if (!debugManager) {\n await method.apply(this, args);\n resolve();\n return;\n }\n\n const startTime = debugManager.now();\n await method.apply(this, args);\n const endTime = debugManager.now();\n const duration = endTime - startTime;\n resolve();\n\n debugManager.emit(PARTIAL_QUERY_COMPILED, {\n context: otherContext,\n hash: args[0],\n options: args[2],\n partialQueryResponse: args[1],\n stats: { duration, endTime, startTime },\n });\n });\n };\n };\n}\n","import { DehydratedCacheMetadata } from \"@graphql-box/core\";\nimport Cacheability from \"cacheability\";\nimport { isEmpty } from \"lodash\";\nimport { HEADER_CACHE_CONTROL } from \"../consts\";\n\nexport type Params = {\n _cacheMetadata?: DehydratedCacheMetadata;\n fallback: string;\n headers?: Headers;\n};\n\nexport default ({ _cacheMetadata, fallback, headers }: Params): Cacheability => {\n if (_cacheMetadata && !isEmpty(_cacheMetadata)) {\n const [first, ...rest] = Object.values(_cacheMetadata);\n\n return new Cacheability({\n metadata: rest.reduce((acc, metadata) => {\n if (metadata.ttl < acc.ttl) {\n return metadata;\n }\n\n return acc;\n }, first),\n });\n }\n\n if (headers && headers.has(HEADER_CACHE_CONTROL)) {\n return new Cacheability({ headers });\n }\n\n return new Cacheability({ cacheControl: fallback });\n};\n","import { RawResponseDataWithMaybeCacheMetadata } from \"@graphql-box/core\";\nimport { merge } from \"lodash\";\n\nexport default (responseDataSets: RawResponseDataWithMaybeCacheMetadata[]) => {\n return responseDataSets.reduce(\n (acc: RawResponseDataWithMaybeCacheMetadata, dataSet, index) => {\n const { _cacheMetadata, data, hasNext, headers, paths } = dataSet;\n\n if (_cacheMetadata) {\n acc._cacheMetadata = acc._cacheMetadata ? { ...acc._cacheMetadata, ..._cacheMetadata } : _cacheMetadata;\n }\n\n acc.data = acc.data ? merge(acc.data, data) : data;\n\n if (index === 0) {\n acc.headers = headers;\n }\n\n if (index === responseDataSets.length - 1) {\n acc.hasNext = hasNext;\n }\n\n if (paths) {\n if (!acc.paths) {\n acc.paths = [];\n }\n\n acc.paths.push(paths[0]);\n }\n\n return acc;\n },\n { data: {} },\n );\n};\n"],"names":["CACHE_ENTRY_ADDED","CACHE_ENTRY_QUERIED","PARTIAL_QUERY_COMPILED","buildKey","path","key","paths","length","push","join","buildFieldKeysAndPaths","field","options","context","name","getName","index","requestFieldCacheKey","requestFieldPath","responseDataPath","fieldAliasOrName","getAlias","updatedRequestFieldPath","_isNumber","fieldTypeInfo","fieldTypeMap","get","updatedRequestFieldCacheKey","args","directives","JSON","stringify","inherited","_directives$inherited","own","_directives$own","buildRequestFieldCacheKey","getArguments","propNameOrIndex","updatedResponseDataPath","hashedRequestFieldCacheKey","hashRequest","fieldData","selectionNodes","ancestorKeysAndPaths","fieldAndTypeName","resolveFragments","fragmentDefinitions","_keys","reduce","acc","match","find","fieldNode","hasArguments","hasDirectives","fieldPathChecklistValues","fieldTypeName","hasData","typeUnused","typeName","undefined","some","every","filterField","fieldPathChecklist","fragmentSpreadChecklist","ancestorRequestFieldPath","typeIDKey","fieldsAndTypeNames","getChildFields","fragmentSpreadFieldCounter","i","childField","fragmentKind","fragmentName","childTypeName","FRAGMENT_SPREAD","total","_getChildFields","childFieldName","TYPE_NAME_KEY","checkFieldPathChecklist","hasChildFields","deleteChildFields","_isEmpty","forEach","deleteFragmentSpreads","deleted","filterFragmentSpreads","inlineFragments","getInlineFragments","filtered","fragment","deleteInlineFragments","filterInlineFragments","fieldNames","map","filterIDsAndTypeNames","ast","queryNode","getOperationDefinitions","operation","getFragmentDefinitions","createFragmentSpreadChecklist","queryFiltered","definitionsToFilter","namesAndPaths","fragmentDefinition","definitionsToDelete","names","deleteFragmentDefinitions","include","filterFragmentDefinitions","rawResponseData","hasDeferOrStream","hasNext","normalizePatchResponseData","data","_set","getValidTypeIDValue","requestFieldPathData","typeIDValue","requestFieldPathDataIDValue","_isPlainObject","CacheManager","_target","_propertyName","descriptor","method","value","Promise","resolve","debugManager","otherContext","apply","_this","startTime","now","result","endTime","duration","emit","cacheType","hash","stats","reject","cachemapOptions","partialQueryResponse","Map","cache","cascadeCacheControl","fallbackOperationCacheability","typeCacheDirectives","_cache","_cascadeCacheControl","_fallbackOperationCacheability","_typeCacheDirectives","_typeIDKey","this","requestData","TypeError","cacheManagerContext","_retrieveCachedResponseData","cachedResponseData","cacheMetadata","fieldCount","missing","updated","dataCaching","_setQueryResponseCacheEntry","awaitDataCaching","response","_setPartialQueryResponse","filteredAST","filterQuery","rest","request","print","updatedRequestData","_cacheResponse","_checkCacheEntry","QUERY_RESPONSES","entry","rehydrateCacheMetadata","_partialQueryResponses","delete","cachedAncestorFieldData","_analyzeParentFieldNode","_analyzeLeafFieldNode","keysAndPaths","entityData","typeNamesAndKind","dataTypeName","__typename","_isNodeRequestFieldPath","_retrieveCachedRequestFieldPathData","cacheability","_setCachedResponseData","cachedFieldData","_getFieldDataFromAncestor","_setFieldPathChecklist","_setCachedData","_retrieveCachedParentNodeData","_get","_isObjectLike","promises","iterateChildFields","childFragmentKind","childFragmentName","childIndex","_analyzeFieldNode","all","otherProps","_createCacheMetadata","_this2","_setFieldCacheability","normalizedResponseData","responseDataForCaching","isNotLastResponseChunk","_setResponseChunksAwaitingCaching","isLastResponseChunk","_retrieveResponseDataForCaching","_buildCacheMetadata","_setEntityAndRequestFieldPathCacheEntries","_cloneDeep","QUERY","_getPartialQueryResponse","queryCacheMetadata","_mergeResponseCacheMetadata","queryData","_mergeResponseData","isNotResponseChunk","_hasCacheEntry","_isValid","_getCacheEntry","_isUndefined","_cacheMetadata","headers","fallback","Object","values","first","Cacheability","metadata","ttl","has","cacheControl","deriveOpCacheability","set","_options","_context","isEntity","possibleTypes","type","obj","src","mergeObjects","_key","val","_this3","responseData","_mergeObjects","_typeName","_fragmentKind","_fragmentName","_this4","_parseEntityAndRequestFieldPathCacheEntryData","_setEntityAndRequestFieldPathCacheEntry","validTypeIDValue","typeNames","_this5","DATA_ENTITIES","checkResults","validResults","filter","validResult","sort","a","b","ancestorEntityData","ancestorRequestFieldPathData","entryCacheability","_isNodeEntity","_retrieveCachedEntityData","_cacheability","REQUEST_FIELD_PATHS","_this6","_countFieldPathChecklist","responseDataSets","responseChunks","_responseChunksAwaitingCaching","boxID","dataSet","_merge","operationNode","_this7","_setRequestFieldPathCacheEntry","_isFieldEntity","_setEntityCacheEntry","entityDataKey","_setCacheEntry","cacheHeaders","printCacheControl","tag","__cacheKey","_setFieldTypeCacheDirective","_this8","_setCacheMetadata","dehydratedCacheMetadata","dehydrateCacheMetadata","_getOperationCacheControl","hasArgsOrDirectives","selectionSet","_field$selectionSet","selections","filterOutPropsWithArgsOrDirectives","errors","checklistValues","ancestorFieldData","checkTTL","objectLikeData","_isArray","operationCacheability","userOptions","clientOptions","init"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../cache-manager/src/consts/index.ts","../cache-manager/src/helpers/buildKeysAndPaths.ts","../cache-manager/src/helpers/filterOutPropsWithArgsOrDirectives.ts","../cache-manager/src/helpers/checkFieldPathChecklist.ts","../cache-manager/src/helpers/filterField.ts","../cache-manager/src/helpers/filterFragmentSpreads.ts","../cache-manager/src/helpers/filterInlineFragments.ts","../cache-manager/src/helpers/filterIDsAndTypeNames.ts","../cache-manager/src/helpers/filterQuery.ts","../cache-manager/src/helpers/createFragmentSpreadChecklist.ts","../cache-manager/src/helpers/filterFragmentDefinitions.ts","../cache-manager/src/helpers/isLastResponseChunk.ts","../cache-manager/src/helpers/isNotLastResponseChunk.ts","../cache-manager/src/helpers/isNotResponseChunk.ts","../cache-manager/src/helpers/normalizePatchResponseData.ts","../cache-manager/src/helpers/validTypeIDValue.ts","../cache-manager/src/main/index.ts","../cache-manager/src/debug/log-cache-query/index.ts","../cache-manager/src/debug/log-cache-entry/index.ts","../cache-manager/src/debug/log-partial-compiled/index.ts","../cache-manager/src/helpers/deriveOpCacheability.ts","../cache-manager/src/helpers/mergeResponseDataSets.ts"],"sourcesContent":["export const METADATA = \"metadata\";\nexport const CACHE_CONTROL = \"cacheControl\";\nexport const NO_CACHE = \"noCache\";\n\nexport const HEADER_CACHE_CONTROL = \"cache-control\";\nexport const HEADER_NO_CACHE = \"no-cache\";\n\nexport const CACHE_ENTRY_ADDED = \"cache_entry_added\";\nexport const CACHE_ENTRY_QUERIED = \"cache_entry_queried\";\nexport const PARTIAL_QUERY_COMPILED = \"partial_query_compiled\";\n","import { FieldTypeInfo, PlainObjectMap } from \"@graphql-box/core\";\nimport { getAlias, getArguments, getName, hashRequest } from \"@graphql-box/helpers\";\nimport { FieldNode } from \"graphql\";\nimport { isNumber } from \"lodash\";\nimport { CacheManagerContext, KeysAndPaths, KeysAndPathsOptions } from \"../defs\";\n\nexport const buildKey = (path: string, key: string | number) => {\n const paths: (string | number)[] = [];\n\n if (path.length) {\n paths.push(path);\n }\n\n paths.push(key);\n return paths.join(\".\");\n};\n\nexport const buildRequestFieldCacheKey = (\n name: string,\n requestFieldCacheKey: string,\n args: PlainObjectMap | undefined,\n directives?: FieldTypeInfo[\"directives\"],\n index?: number,\n) => {\n let key = `${isNumber(index) ? index : name}`;\n\n if (args) {\n key = `${key}(${JSON.stringify(args)})`;\n }\n\n if (directives?.inherited?.length) {\n key = `${directives.inherited.join(\" \")} ${key}`;\n }\n\n if (directives?.own?.length) {\n key = `${key} ${directives.own.join(\" \")}`;\n }\n\n return buildKey(requestFieldCacheKey, key);\n};\n\nexport const buildFieldKeysAndPaths = (\n field: FieldNode,\n options: KeysAndPathsOptions,\n context: CacheManagerContext,\n): KeysAndPaths => {\n const name = getName(field) as FieldNode[\"name\"][\"value\"];\n const { index, requestFieldCacheKey = \"\", requestFieldPath = \"\", responseDataPath = \"\" } = options;\n const fieldAliasOrName = getAlias(field) || name;\n const updatedRequestFieldPath = isNumber(index) ? requestFieldPath : buildKey(requestFieldPath, fieldAliasOrName);\n const fieldTypeInfo = context.fieldTypeMap.get(updatedRequestFieldPath);\n\n const updatedRequestFieldCacheKey = buildRequestFieldCacheKey(\n name,\n requestFieldCacheKey,\n getArguments(field),\n fieldTypeInfo?.directives,\n index,\n );\n\n const propNameOrIndex = isNumber(index) ? index : fieldAliasOrName;\n const updatedResponseDataPath = buildKey(responseDataPath, propNameOrIndex);\n\n return {\n hashedRequestFieldCacheKey: hashRequest(updatedRequestFieldCacheKey),\n propNameOrIndex,\n requestFieldCacheKey: updatedRequestFieldCacheKey,\n requestFieldPath: updatedRequestFieldPath,\n responseDataPath: updatedResponseDataPath,\n };\n};\n","import { PlainObjectMap } from \"@graphql-box/core\";\nimport { getName, resolveFragments } from \"@graphql-box/helpers\";\nimport { FieldNode, SelectionNode } from \"graphql\";\nimport { keys } from \"lodash\";\nimport { CacheManagerContext, KeysAndPaths } from \"../defs\";\nimport { buildFieldKeysAndPaths } from \"./buildKeysAndPaths\";\n\nexport default (\n fieldData: PlainObjectMap,\n selectionNodes: readonly SelectionNode[],\n ancestorKeysAndPaths: KeysAndPaths,\n context: CacheManagerContext,\n) => {\n const fieldAndTypeName = resolveFragments(selectionNodes, context.fragmentDefinitions);\n\n return keys(fieldData).reduce((acc: PlainObjectMap, key) => {\n const match = fieldAndTypeName.find(({ fieldNode }) => (getName(fieldNode) as FieldNode[\"name\"][\"value\"]) === key);\n\n if (match) {\n const { requestFieldPath } = buildFieldKeysAndPaths(match.fieldNode, ancestorKeysAndPaths, context);\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath);\n\n if (!fieldTypeInfo?.hasArguments && !fieldTypeInfo?.hasDirectives) {\n acc[key] = fieldData[key];\n }\n }\n\n return acc;\n }, {});\n};\n","import { CheckFieldPathChecklistResult, FieldPathChecklistValue } from \"../defs\";\n\nexport default (\n fieldPathChecklistValues: FieldPathChecklistValue[] | undefined,\n fieldTypeName: string | undefined,\n): CheckFieldPathChecklistResult => {\n if (!fieldPathChecklistValues || !fieldPathChecklistValues.length) {\n return { hasData: false, typeUnused: !!fieldTypeName };\n }\n\n if (fieldPathChecklistValues.length === 1) {\n const { hasData, typeName } = fieldPathChecklistValues[0];\n const typeUnused = !typeName ? undefined : typeName !== fieldTypeName;\n return { hasData, typeUnused };\n }\n\n return {\n hasData: fieldPathChecklistValues.some(({ hasData, typeName }) => typeName === fieldTypeName && hasData),\n typeUnused: !fieldPathChecklistValues.every(({ typeName }) => typeName === fieldTypeName),\n };\n};\n","import { TYPE_NAME_KEY } from \"@graphql-box/core\";\nimport { FRAGMENT_SPREAD, deleteChildFields, getChildFields, getName, hasChildFields } from \"@graphql-box/helpers\";\nimport { FieldNode, FragmentDefinitionNode } from \"graphql\";\nimport { CacheManagerContext, FieldPathChecklist, FragmentSpreadFieldCounter } from \"../defs\";\nimport { buildFieldKeysAndPaths } from \"./buildKeysAndPaths\";\nimport checkFieldPathChecklist from \"./checkFieldPathChecklist\";\nimport { FragmentSpreadCheckist } from \"./createFragmentSpreadChecklist\";\nimport filterFragmentSpreads from \"./filterFragmentSpreads\";\nimport filterIDsAndTypeNames from \"./filterIDsAndTypeNames\";\nimport filterInlineFragments from \"./filterInlineFragments\";\n\nconst filterField = (\n field: FieldNode | FragmentDefinitionNode,\n fieldPathChecklist: FieldPathChecklist,\n fragmentSpreadChecklist: FragmentSpreadCheckist,\n ancestorRequestFieldPath: string,\n context: CacheManagerContext,\n): boolean => {\n const { fragmentDefinitions, typeIDKey } = context;\n const fieldsAndTypeNames = getChildFields(field, { fragmentDefinitions });\n\n if (!fieldsAndTypeNames) {\n return false;\n }\n\n const fragmentSpreadFieldCounter: FragmentSpreadFieldCounter = {};\n\n for (let i = fieldsAndTypeNames.length - 1; i >= 0; i -= 1) {\n const { fieldNode: childField, fragmentKind, fragmentName, typeName: childTypeName } = fieldsAndTypeNames[i];\n\n if (fragmentKind === FRAGMENT_SPREAD && fragmentName && !fragmentSpreadFieldCounter[fragmentName]) {\n fragmentSpreadFieldCounter[fragmentName] = {\n hasData: 0,\n total: fragmentDefinitions?.[fragmentName]\n ? getChildFields(fragmentDefinitions?.[fragmentName], { fragmentDefinitions })?.length ?? 0\n : 0,\n };\n }\n\n const childFieldName = getName(childField);\n\n if (childFieldName === typeIDKey || childFieldName === TYPE_NAME_KEY) {\n continue;\n }\n\n const { requestFieldPath } = buildFieldKeysAndPaths(\n childField,\n {\n requestFieldPath: ancestorRequestFieldPath,\n },\n context,\n );\n\n const { hasData, typeUnused } = checkFieldPathChecklist(fieldPathChecklist.get(requestFieldPath), childTypeName);\n\n if (hasData || typeUnused) {\n if (fragmentKind === FRAGMENT_SPREAD) {\n fragmentSpreadFieldCounter[fragmentName as string].hasData += 1;\n } else if (!hasChildFields(childField, { fragmentDefinitions })) {\n deleteChildFields(field, childField);\n } else if (filterField(childField, fieldPathChecklist, fragmentSpreadChecklist, requestFieldPath, context)) {\n deleteChildFields(field, childField);\n }\n }\n }\n\n filterFragmentSpreads(field, fragmentSpreadFieldCounter, fragmentSpreadChecklist, ancestorRequestFieldPath);\n filterInlineFragments(field, context);\n filterIDsAndTypeNames(field, context);\n return !hasChildFields(field, { fragmentDefinitions });\n};\n\nexport default filterField;\n","import { deleteFragmentSpreads } from \"@graphql-box/helpers\";\nimport { FieldNode, FragmentDefinitionNode } from \"graphql\";\nimport { isEmpty, keys } from \"lodash\";\nimport { FragmentSpreadFieldCounter } from \"../defs\";\nimport { FragmentSpreadCheckist } from \"./createFragmentSpreadChecklist\";\n\nexport default (\n field: FieldNode | FragmentDefinitionNode,\n fragmentSpreadFieldCounter: FragmentSpreadFieldCounter,\n fragmentSpreadChecklist: FragmentSpreadCheckist,\n ancestorRequestFieldPath: string,\n) => {\n if (isEmpty(fragmentSpreadFieldCounter)) {\n return;\n }\n\n keys(fragmentSpreadFieldCounter).forEach(key => {\n fragmentSpreadChecklist[key].total += 1;\n fragmentSpreadChecklist[key].paths.push(ancestorRequestFieldPath);\n\n const { hasData, total } = fragmentSpreadFieldCounter[key];\n\n if (hasData === total) {\n deleteFragmentSpreads(field, key);\n fragmentSpreadChecklist[key].deleted += 1;\n }\n });\n};\n","import { deleteInlineFragments, getChildFields, getInlineFragments, getName } from \"@graphql-box/helpers\";\nimport { FieldNode, FragmentDefinitionNode } from \"graphql\";\nimport { CacheManagerContext } from \"..\";\n\nexport default (field: FieldNode | FragmentDefinitionNode, { fragmentDefinitions, typeIDKey }: CacheManagerContext) => {\n const inlineFragments = getInlineFragments(field);\n let filtered = false;\n\n inlineFragments.forEach(fragment => {\n const fieldsAndTypeNames = getChildFields(fragment, { fragmentDefinitions });\n\n if (!fieldsAndTypeNames || !fieldsAndTypeNames.length) {\n deleteInlineFragments(field, fragment);\n filtered = true;\n return;\n }\n\n if (fieldsAndTypeNames.length === 1) {\n const { fieldNode } = fieldsAndTypeNames[0];\n\n if (getName(fieldNode) === typeIDKey) {\n deleteInlineFragments(field, fragment);\n filtered = true;\n }\n }\n });\n\n return filtered;\n};\n","import { TYPE_NAME_KEY } from \"@graphql-box/core\";\nimport { deleteChildFields, getChildFields, getName } from \"@graphql-box/helpers\";\nimport { FieldNode, FragmentDefinitionNode } from \"graphql\";\nimport { CacheManagerContext } from \"../defs\";\n\nexport default (field: FieldNode | FragmentDefinitionNode, { fragmentDefinitions, typeIDKey }: CacheManagerContext) => {\n const fieldsAndTypeNames = getChildFields(field, { fragmentDefinitions });\n\n if (!fieldsAndTypeNames || fieldsAndTypeNames.length > 3) {\n return false;\n }\n\n const fieldNames = fieldsAndTypeNames.map(({ fieldNode }) => getName(fieldNode) as FieldNode[\"name\"][\"value\"]);\n\n if (fieldNames.length === 2 && fieldNames.every(name => name === typeIDKey || name === TYPE_NAME_KEY)) {\n deleteChildFields(\n field,\n fieldsAndTypeNames.map(({ fieldNode }) => fieldNode),\n );\n\n return true;\n }\n\n if ((fieldNames.length === 1 && fieldNames[0] === typeIDKey) || fieldNames[0] === TYPE_NAME_KEY) {\n const { fieldNode } = fieldsAndTypeNames[0];\n deleteChildFields(field, fieldNode);\n return true;\n }\n\n return false;\n};\n","import { RequestData } from \"@graphql-box/core\";\nimport { deleteChildFields, getChildFields, getOperationDefinitions } from \"@graphql-box/helpers\";\nimport { CacheManagerContext, CachedResponseData } from \"../defs\";\nimport { buildFieldKeysAndPaths } from \"./buildKeysAndPaths\";\nimport createFragmentSpreadChecklist from \"./createFragmentSpreadChecklist\";\nimport filterField from \"./filterField\";\nimport filterFragmentDefinitions from \"./filterFragmentDefinitions\";\n\nexport default ({ ast }: RequestData, { fieldPathChecklist }: CachedResponseData, context: CacheManagerContext) => {\n const queryNode = getOperationDefinitions(ast, context.operation)[0];\n const { fragmentDefinitions } = context;\n const fieldsAndTypeNames = getChildFields(queryNode, { fragmentDefinitions });\n\n if (!fieldsAndTypeNames) {\n return ast;\n }\n\n const fragmentSpreadChecklist = createFragmentSpreadChecklist(ast);\n\n for (let i = fieldsAndTypeNames.length - 1; i >= 0; i -= 1) {\n const { fieldNode } = fieldsAndTypeNames[i];\n\n const { requestFieldPath } = buildFieldKeysAndPaths(\n fieldNode,\n {\n requestFieldPath: context.operation,\n },\n context,\n );\n\n if (filterField(fieldNode, fieldPathChecklist, fragmentSpreadChecklist, requestFieldPath, context)) {\n deleteChildFields(queryNode, fieldNode);\n }\n }\n\n context.queryFiltered = true;\n return filterFragmentDefinitions(ast, fieldPathChecklist, fragmentSpreadChecklist, context);\n};\n","import { getFragmentDefinitions } from \"@graphql-box/helpers\";\nimport { DocumentNode } from \"graphql\";\nimport { keys } from \"lodash\";\n\nexport type FragmentSpreadCheckist = {\n [key: string]: {\n deleted: number;\n paths: string[];\n total: number;\n };\n};\n\nexport default (ast: DocumentNode) =>\n keys(getFragmentDefinitions(ast) ?? {}).reduce((acc: FragmentSpreadCheckist, name) => {\n acc[name] = { deleted: 0, paths: [], total: 0 };\n return acc;\n }, {});\n","import { deleteFragmentDefinitions, getFragmentDefinitions } from \"@graphql-box/helpers\";\nimport { DocumentNode } from \"graphql\";\nimport { keys } from \"lodash\";\nimport { CacheManagerContext, FieldPathChecklist } from \"../defs\";\nimport { FragmentSpreadCheckist } from \"./createFragmentSpreadChecklist\";\nimport filterField from \"./filterField\";\n\nexport default (\n ast: DocumentNode,\n fieldPathChecklist: FieldPathChecklist,\n fragmentSpreadChecklist: FragmentSpreadCheckist,\n context: CacheManagerContext,\n) => {\n const definitionsToFilter = keys(fragmentSpreadChecklist).reduce(\n (namesAndPaths: { name: string; path: string }[], key) => {\n const { deleted, total } = fragmentSpreadChecklist[key];\n\n return deleted === 0 && total === 1\n ? [...namesAndPaths, { name: key, path: fragmentSpreadChecklist[key].paths[0] as string }]\n : namesAndPaths;\n },\n [],\n );\n\n const fragmentDefinitions = getFragmentDefinitions(ast) ?? {};\n\n definitionsToFilter.forEach(({ name, path }) => {\n const fragmentDefinition = fragmentDefinitions[name];\n filterField(fragmentDefinition, fieldPathChecklist, fragmentSpreadChecklist, path, context);\n });\n\n const definitionsToDelete = keys(fragmentSpreadChecklist).reduce((names: string[], key) => {\n const { deleted, total } = fragmentSpreadChecklist[key];\n return deleted > 0 && deleted === total ? [...names, key] : names;\n }, []);\n\n return deleteFragmentDefinitions(ast, {\n include: definitionsToDelete,\n });\n};\n","import { RawResponseDataWithMaybeCacheMetadata } from \"@graphql-box/core\";\nimport { CacheManagerContext } from \"..\";\n\nexport default (rawResponseData: RawResponseDataWithMaybeCacheMetadata, context: CacheManagerContext) =>\n context.hasDeferOrStream && !rawResponseData.hasNext && rawResponseData.paths;\n","import { RawResponseDataWithMaybeCacheMetadata } from \"@graphql-box/core\";\nimport { CacheManagerContext } from \"..\";\n\nexport default (rawResponseData: RawResponseDataWithMaybeCacheMetadata, context: CacheManagerContext) =>\n context.hasDeferOrStream && rawResponseData.hasNext;\n","import { RawResponseDataWithMaybeCacheMetadata } from \"@graphql-box/core\";\nimport { CacheManagerContext } from \"..\";\n\nexport default (rawResponseData: RawResponseDataWithMaybeCacheMetadata, context: CacheManagerContext) =>\n !context.hasDeferOrStream && !rawResponseData.hasNext && !rawResponseData.paths;\n","import { RawResponseDataWithMaybeCacheMetadata } from \"@graphql-box/core\";\nimport { set } from \"lodash\";\nimport { CacheManagerContext } from \"..\";\n\nexport default (rawResponseData: RawResponseDataWithMaybeCacheMetadata, context: CacheManagerContext) => {\n if (!context.normalizePatchResponseData) {\n return rawResponseData;\n }\n\n const { data, paths, ...rest } = rawResponseData;\n\n return {\n ...rest,\n data: set({}, (paths as string[])[0], data),\n paths,\n };\n};\n","import { FieldTypeInfo } from \"@graphql-box/core\";\nimport { isPlainObject } from \"lodash\";\n\nexport const getValidTypeIDValue = (\n requestFieldPathData: any,\n { typeIDValue }: FieldTypeInfo,\n typeIDKey: string,\n): string | number | undefined => {\n const requestFieldPathDataIDValue = isPlainObject(requestFieldPathData) ? requestFieldPathData[typeIDKey] : undefined;\n return typeIDValue || requestFieldPathDataIDValue;\n};\n","import Cachemap from \"@cachemap/core\";\nimport {\n CacheMetadata,\n CacheTypes,\n DATA_ENTITIES,\n FieldTypeInfo,\n PlainObjectMap,\n PlainObjectStringMap,\n QUERY,\n QUERY_RESPONSES,\n REQUEST_FIELD_PATHS,\n RawResponseDataWithMaybeCacheMetadata,\n RequestContext,\n RequestData,\n RequestOptions,\n ResponseData,\n TYPE_NAME_KEY,\n} from \"@graphql-box/core\";\nimport {\n FRAGMENT_SPREAD,\n dehydrateCacheMetadata,\n getChildFields,\n getFragmentDefinitions,\n getOperationDefinitions,\n hasChildFields,\n hashRequest,\n iterateChildFields,\n mergeObjects,\n rehydrateCacheMetadata,\n} from \"@graphql-box/helpers\";\nimport Cacheability from \"cacheability\";\nimport { FieldNode, print } from \"graphql\";\nimport { assign, cloneDeep, get, isArray, isObjectLike, isPlainObject, isUndefined, set, unset } from \"lodash\";\nimport { CACHE_CONTROL, HEADER_NO_CACHE, METADATA, NO_CACHE } from \"../consts\";\nimport { logCacheEntry, logCacheQuery, logPartialCompiled } from \"../debug\";\nimport {\n AnalyzeQueryResult,\n AncestorKeysAndPaths,\n CacheManagerContext,\n CacheManagerDef,\n CacheManagerInit,\n CachedAncestorFieldData,\n CachedResponseData,\n CachemapOptions,\n CheckCacheEntryResult,\n ClientOptions,\n ConstructorOptions,\n DataForCachingEntry,\n FieldCount,\n FieldPathChecklist,\n FieldPathChecklistValue,\n KeysAndPaths,\n MergedCachedFieldData,\n PartialQueryResponse,\n PartialQueryResponses,\n QueryResponseCacheEntry,\n ResponseDataForCaching,\n TypeNamesAndKind,\n UserOptions,\n} from \"../defs\";\nimport { buildFieldKeysAndPaths } from \"../helpers/buildKeysAndPaths\";\nimport deriveOpCacheability from \"../helpers/deriveOpCacheability\";\nimport filterOutPropsWithArgsOrDirectives from \"../helpers/filterOutPropsWithArgsOrDirectives\";\nimport filterQuery from \"../helpers/filterQuery\";\nimport isLastResponseChunk from \"../helpers/isLastResponseChunk\";\nimport isNotLastResponseChunk from \"../helpers/isNotLastResponseChunk\";\nimport isNotResponseChunk from \"../helpers/isNotResponseChunk\";\nimport mergeResponseDataSets from \"../helpers/mergeResponseDataSets\";\nimport normalizePatchResponseData from \"../helpers/normalizePatchResponseData\";\nimport { getValidTypeIDValue } from \"../helpers/validTypeIDValue\";\n\nexport class CacheManager implements CacheManagerDef {\n private static _countFieldPathChecklist(fieldPathChecklist: FieldPathChecklist): FieldCount {\n const fieldCount: FieldCount = { missing: 0, total: 0 };\n\n fieldPathChecklist.forEach(checklistValues => {\n fieldCount.total += checklistValues.length;\n const missing = checklistValues.filter(({ hasData }) => !hasData);\n fieldCount.missing += missing.length;\n });\n\n return fieldCount;\n }\n\n private static _getFieldDataFromAncestor(ancestorFieldData: any, propNameOrIndex: string | number): any {\n return isObjectLike(ancestorFieldData) ? cloneDeep(ancestorFieldData[propNameOrIndex]) : undefined;\n }\n\n private static _getOperationCacheControl(cacheMetadata: CacheMetadata | undefined, operation: string): string {\n const defaultCacheControl = HEADER_NO_CACHE;\n\n if (!cacheMetadata) {\n return defaultCacheControl;\n }\n\n const cacheability = cacheMetadata.get(operation);\n return cacheability ? cacheability.printCacheControl() : defaultCacheControl;\n }\n\n private static _isNodeEntity(fieldTypeInfo?: FieldTypeInfo): boolean {\n if (!fieldTypeInfo) {\n return false;\n }\n\n const { isEntity, possibleTypes } = fieldTypeInfo;\n return isEntity || possibleTypes.some(type => !!type.isEntity);\n }\n\n private static _isNodeRequestFieldPath(fieldTypeInfo?: FieldTypeInfo): boolean {\n return (\n !!fieldTypeInfo &&\n (this._isNodeEntity(fieldTypeInfo) || fieldTypeInfo.hasArguments || fieldTypeInfo.hasDirectives)\n );\n }\n\n private static _isValid(cacheability: Cacheability): boolean {\n const noCache = get(cacheability, [METADATA, CACHE_CONTROL, NO_CACHE], false);\n return !noCache && cacheability.checkTTL();\n }\n\n private static _mergeResponseCacheMetadata(\n cacheMetadata: CacheMetadata,\n partialQueryResponse?: PartialQueryResponse,\n ): CacheMetadata {\n if (!partialQueryResponse) {\n return cacheMetadata;\n }\n\n return new Map([...partialQueryResponse.cacheMetadata, ...cacheMetadata]);\n }\n\n private static _setCachedData(\n requestData: PlainObjectMap,\n { data }: MergedCachedFieldData,\n propNameOrIndex: string | number,\n ): void {\n if (!isObjectLike(data) && !isUndefined(data)) {\n requestData[propNameOrIndex] = data as string | number | boolean | null;\n } else if (isObjectLike(data)) {\n const objectLikeData = data as PlainObjectMap | any[];\n requestData[propNameOrIndex] = isArray(objectLikeData) ? [] : {};\n }\n }\n\n private static _setCachedResponseData(\n cachedFieldData: MergedCachedFieldData,\n { cacheMetadata, data, fieldPathChecklist }: CachedResponseData,\n { propNameOrIndex, requestFieldPath }: KeysAndPaths,\n typeNamesAndKind: TypeNamesAndKind,\n _options: RequestOptions,\n { operation }: CacheManagerContext,\n ) {\n CacheManager._setCacheMetadata(cacheMetadata, cachedFieldData.cacheability, requestFieldPath, operation);\n CacheManager._setFieldPathChecklist(fieldPathChecklist, cachedFieldData, requestFieldPath, typeNamesAndKind);\n CacheManager._setCachedData(data, cachedFieldData, propNameOrIndex);\n }\n\n private static _setCacheMetadata(\n cacheMetadata: CacheMetadata,\n cacheability: Cacheability | undefined,\n requestFieldPath: string,\n operation: string,\n ): void {\n if (!cacheability) {\n return;\n }\n\n cacheMetadata.set(requestFieldPath, cacheability);\n const operationCacheability = cacheMetadata.get(operation);\n\n if (!operationCacheability || operationCacheability.metadata.ttl > cacheability.metadata.ttl) {\n cacheMetadata.set(operation, cacheability);\n }\n }\n\n private static _setFieldPathChecklist(\n fieldPathChecklist: FieldPathChecklist,\n { data }: MergedCachedFieldData,\n requestFieldPath: string,\n { dataTypeName, fieldTypeName, fragmentKind, fragmentName }: TypeNamesAndKind,\n ): void {\n if (isUndefined(fieldTypeName) || fragmentKind === FRAGMENT_SPREAD) {\n if (fieldPathChecklist.has(requestFieldPath)) {\n return;\n }\n\n fieldPathChecklist.set(requestFieldPath, [{ fragmentKind, fragmentName, hasData: !isUndefined(data) }]);\n return;\n }\n\n if (dataTypeName !== fieldTypeName) {\n return;\n }\n\n const entry = fieldPathChecklist.get(requestFieldPath);\n const checklistValues = entry ? (entry as FieldPathChecklistValue[]) : [];\n\n if (checklistValues.some(({ typeName }) => typeName === dataTypeName)) {\n return;\n }\n\n fieldPathChecklist.set(requestFieldPath, [\n ...checklistValues,\n { fragmentKind, fragmentName, hasData: !isUndefined(data), typeName: dataTypeName as string },\n ]);\n }\n\n private _cache: Cachemap;\n private _cascadeCacheControl: boolean;\n private _fallbackOperationCacheability: string;\n private _partialQueryResponses: PartialQueryResponses = new Map();\n private _responseChunksAwaitingCaching: Map<string, RawResponseDataWithMaybeCacheMetadata[]> = new Map();\n private _typeCacheDirectives: PlainObjectStringMap;\n private _typeIDKey: string;\n\n constructor(options: ConstructorOptions) {\n const errors: TypeError[] = [];\n\n if (!options.cache) {\n errors.push(new TypeError(\"@graphql-box/cache-manager expected options.cache.\"));\n }\n\n if (!!options.typeCacheDirectives && !isPlainObject(options.typeCacheDirectives)) {\n const message = \"@graphql-box/cache-manager expected options.typeCacheDirectives to be a plain object.\";\n errors.push(new TypeError(message));\n }\n\n if (errors.length) {\n throw errors;\n }\n\n this._cache = options.cache;\n this._cascadeCacheControl = options.cascadeCacheControl || false;\n this._fallbackOperationCacheability = options.fallbackOperationCacheability || NO_CACHE;\n this._typeCacheDirectives = options.typeCacheDirectives || {};\n this._typeIDKey = options.typeIDKey;\n }\n\n get cache(): Cachemap {\n return this._cache;\n }\n\n public async analyzeQuery(\n requestData: RequestData,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<AnalyzeQueryResult> {\n const { ast, hash } = requestData;\n\n if (!ast) {\n return Promise.reject(new TypeError(\"@graphql-box/cache-manager expected an AST.\"));\n }\n\n const cacheManagerContext: CacheManagerContext = {\n ...context,\n fragmentDefinitions: getFragmentDefinitions(ast),\n typeIDKey: this._typeIDKey,\n };\n\n const cachedResponseData = await this._retrieveCachedResponseData(requestData, options, cacheManagerContext);\n const { cacheMetadata, data, fieldCount } = cachedResponseData;\n\n if (fieldCount.missing === fieldCount.total) {\n return { updated: requestData };\n }\n\n if (!fieldCount.missing) {\n const dataCaching = this._setQueryResponseCacheEntry(hash, { cacheMetadata, data }, options, cacheManagerContext);\n\n if (options.awaitDataCaching) {\n await dataCaching;\n }\n\n return { response: { cacheMetadata, data } };\n }\n\n this._setPartialQueryResponse(hash, { cacheMetadata, data }, options, cacheManagerContext);\n const filteredAST = filterQuery(requestData, cachedResponseData, cacheManagerContext);\n const { fragmentDefinitions, typeIDKey, ...rest } = cacheManagerContext;\n assign(context, rest);\n const request = print(filteredAST);\n return { updated: { ast: filteredAST, hash: hashRequest(request), request } };\n }\n\n public async cacheQuery(\n requestData: RequestData,\n updatedRequestData: RequestData,\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<ResponseData> {\n const cacheManagerContext: CacheManagerContext = {\n ...context,\n fragmentDefinitions: getFragmentDefinitions(updatedRequestData.ast),\n typeIDKey: this._typeIDKey,\n };\n\n return this._cacheResponse(requestData, updatedRequestData, rawResponseData, options, cacheManagerContext);\n }\n\n public async cacheResponse(\n requestData: RequestData,\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<ResponseData> {\n const cacheManagerContext: CacheManagerContext = {\n ...context,\n fragmentDefinitions: getFragmentDefinitions(requestData.ast),\n typeIDKey: this._typeIDKey,\n };\n\n return this._cacheResponse(requestData, undefined, rawResponseData, options, cacheManagerContext);\n }\n\n public async checkCacheEntry(\n cacheType: CacheTypes,\n hash: string,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<CheckCacheEntryResult | false> {\n return this._checkCacheEntry(cacheType, hash, options, context);\n }\n\n public async checkQueryResponseCacheEntry(\n hash: string,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<ResponseData | false> {\n const result = await this._checkCacheEntry(QUERY_RESPONSES, hash, options, context);\n\n if (!result) {\n return false;\n }\n\n const { cacheMetadata, data } = result.entry as QueryResponseCacheEntry;\n\n return {\n cacheMetadata: rehydrateCacheMetadata(cacheMetadata),\n data,\n };\n }\n\n public deletePartialQueryResponse(hash: string): void {\n this._partialQueryResponses.delete(hash);\n }\n\n private async _analyzeFieldNode(\n fieldNode: FieldNode,\n cachedAncestorFieldData: CachedAncestorFieldData,\n cachedResponseData: CachedResponseData,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n if (hasChildFields(fieldNode, { fragmentDefinitions: context.fragmentDefinitions })) {\n await this._analyzeParentFieldNode(fieldNode, cachedAncestorFieldData, cachedResponseData, options, context);\n } else {\n await this._analyzeLeafFieldNode(fieldNode, cachedAncestorFieldData, cachedResponseData, options, context);\n }\n }\n\n private async _analyzeLeafFieldNode(\n fieldNode: FieldNode,\n cachedAncestorFieldData: CachedAncestorFieldData,\n cachedResponseData: CachedResponseData,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n const keysAndPaths = buildFieldKeysAndPaths(fieldNode, cachedAncestorFieldData, context);\n const { hashedRequestFieldCacheKey, propNameOrIndex, requestFieldPath } = keysAndPaths;\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath);\n const { entityData, fragmentKind, fragmentName, requestFieldPathData, typeName } = cachedAncestorFieldData;\n\n const typeNamesAndKind = {\n dataTypeName: entityData?.__typename || requestFieldPathData?.__typename,\n fieldTypeName: typeName,\n fragmentKind,\n fragmentName,\n };\n\n if (CacheManager._isNodeRequestFieldPath(fieldTypeInfo)) {\n const { cacheability, entry } = await this._retrieveCachedRequestFieldPathData(\n hashedRequestFieldCacheKey,\n options,\n context,\n );\n\n CacheManager._setCachedResponseData(\n { cacheability, data: entry },\n cachedResponseData,\n keysAndPaths,\n typeNamesAndKind,\n options,\n context,\n );\n } else {\n const cachedFieldData =\n CacheManager._getFieldDataFromAncestor(entityData, propNameOrIndex) ||\n CacheManager._getFieldDataFromAncestor(requestFieldPathData, propNameOrIndex);\n\n CacheManager._setFieldPathChecklist(\n cachedResponseData.fieldPathChecklist,\n { data: cachedFieldData },\n requestFieldPath,\n typeNamesAndKind,\n );\n\n CacheManager._setCachedData(cachedResponseData.data, { data: cachedFieldData }, propNameOrIndex);\n }\n }\n\n private async _analyzeParentFieldNode(\n fieldNode: FieldNode,\n cachedAncestorFieldData: CachedAncestorFieldData,\n cachedResponseData: CachedResponseData,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n const keysAndPaths = buildFieldKeysAndPaths(fieldNode, cachedAncestorFieldData, context);\n const { propNameOrIndex, requestFieldCacheKey, requestFieldPath } = keysAndPaths;\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath) as FieldTypeInfo;\n\n const { cacheability, data, entityData, requestFieldPathData } = await this._retrieveCachedParentNodeData(\n cachedAncestorFieldData,\n keysAndPaths,\n fieldTypeInfo,\n options,\n context,\n );\n\n const { fragmentKind, fragmentName, typeName } = cachedAncestorFieldData;\n\n CacheManager._setCachedResponseData(\n { cacheability, data },\n cachedResponseData,\n keysAndPaths,\n { dataTypeName: get(data, TYPE_NAME_KEY), fieldTypeName: typeName, fragmentKind, fragmentName },\n options,\n context,\n );\n\n if (!isObjectLike(data)) {\n return;\n }\n\n const objectLikeData = data as PlainObjectMap | any[];\n const promises: Promise<void>[] = [];\n\n iterateChildFields(\n fieldNode,\n objectLikeData,\n context.fragmentDefinitions,\n (\n childField: FieldNode,\n childTypeName: string | undefined,\n childFragmentKind: string | undefined,\n childFragmentName: string | undefined,\n childIndex?: number,\n ) => {\n promises.push(\n this._analyzeFieldNode(\n childField,\n {\n cacheability,\n entityData,\n fragmentKind: childFragmentKind,\n fragmentName: childFragmentName,\n index: childIndex,\n requestFieldCacheKey,\n requestFieldPath,\n requestFieldPathData,\n typeName: childTypeName,\n },\n { ...cachedResponseData, data: cachedResponseData.data[propNameOrIndex] },\n options,\n context,\n ),\n );\n },\n );\n\n await Promise.all(promises);\n }\n\n private _buildCacheMetadata(\n { ast }: RequestData,\n { data, ...otherProps }: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: CacheManagerContext,\n ): CacheMetadata {\n const cacheMetadata = this._createCacheMetadata({ data, ...otherProps }, context);\n const queryNode = getOperationDefinitions(ast, context.operation)[0];\n const fieldsAndTypeNames = getChildFields(queryNode);\n\n if (!fieldsAndTypeNames) {\n return cacheMetadata;\n }\n\n fieldsAndTypeNames.forEach(({ fieldNode }) =>\n this._setFieldCacheability(\n fieldNode,\n { requestFieldPath: context.operation },\n { cacheMetadata, data },\n options,\n context,\n ),\n );\n\n return cacheMetadata;\n }\n\n private async _cacheResponse(\n requestData: RequestData,\n updatedRequestData: RequestData | undefined,\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<ResponseData> {\n const normalizedResponseData = normalizePatchResponseData(rawResponseData, context);\n let responseDataForCaching: RawResponseDataWithMaybeCacheMetadata | undefined = normalizedResponseData;\n\n if (isNotLastResponseChunk(rawResponseData, context)) {\n this._setResponseChunksAwaitingCaching(normalizedResponseData, context);\n responseDataForCaching = undefined;\n }\n\n if (isLastResponseChunk(rawResponseData, context)) {\n responseDataForCaching = this._retrieveResponseDataForCaching(normalizedResponseData, context);\n }\n\n const dataCaching: Promise<void>[] = [];\n\n if (responseDataForCaching) {\n const { data } = responseDataForCaching;\n const cacheMetadata = this._buildCacheMetadata(requestData, responseDataForCaching, options, context);\n\n dataCaching.push(\n this._setEntityAndRequestFieldPathCacheEntries(\n requestData,\n {\n cacheMetadata,\n entityData: cloneDeep(data),\n requestFieldPathData: cloneDeep(data),\n },\n options,\n context,\n ),\n );\n\n let queryCacheMetadata: CacheMetadata | undefined;\n let queryData: PlainObjectMap | undefined;\n\n if (context.operation === QUERY) {\n let partialQueryResponse: PartialQueryResponse | undefined;\n\n if (context.queryFiltered && updatedRequestData) {\n dataCaching.push(\n this._setQueryResponseCacheEntry(updatedRequestData.hash, { cacheMetadata, data }, options, context),\n );\n\n partialQueryResponse = this._getPartialQueryResponse(requestData.hash);\n }\n\n queryCacheMetadata = CacheManager._mergeResponseCacheMetadata(cacheMetadata, partialQueryResponse);\n queryData = this._mergeResponseData(data, partialQueryResponse);\n\n dataCaching.push(\n this._setQueryResponseCacheEntry(\n requestData.hash,\n { cacheMetadata: queryCacheMetadata, data: queryData },\n options,\n context,\n ),\n );\n }\n\n if (options.awaitDataCaching) {\n await Promise.all(dataCaching);\n }\n\n if (isNotResponseChunk(normalizedResponseData, context) && queryCacheMetadata && queryData) {\n return {\n cacheMetadata: queryCacheMetadata,\n data: queryData,\n };\n }\n }\n\n const { data, hasNext, paths } = normalizedResponseData;\n\n return {\n cacheMetadata: this._buildCacheMetadata(requestData, normalizedResponseData, options, context),\n data,\n hasNext,\n paths,\n };\n }\n\n private async _checkCacheEntry(\n cacheType: CacheTypes,\n hash: string,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<CheckCacheEntryResult | false> {\n try {\n const cacheability = await this._hasCacheEntry(cacheType, hash);\n\n if (!cacheability || !CacheManager._isValid(cacheability)) {\n return false;\n }\n\n const entry = await this._getCacheEntry(cacheType, hash, options, context);\n\n if (isUndefined(entry)) {\n return false;\n }\n\n return { cacheability, entry };\n } catch (error) {\n return false;\n }\n }\n\n private _createCacheMetadata(\n { _cacheMetadata, headers }: RawResponseDataWithMaybeCacheMetadata,\n { operation }: CacheManagerContext,\n ): CacheMetadata {\n const cacheMetadata = new Map();\n\n const cacheability = deriveOpCacheability({\n _cacheMetadata,\n fallback: this._fallbackOperationCacheability,\n headers,\n });\n\n cacheMetadata.set(operation, cacheability);\n\n if (_cacheMetadata) {\n rehydrateCacheMetadata(_cacheMetadata, cacheMetadata);\n }\n\n return cacheMetadata;\n }\n\n @logCacheQuery()\n private async _getCacheEntry(\n cacheType: CacheTypes,\n hash: string,\n _options: RequestOptions,\n _context: CacheManagerContext,\n ): Promise<any> {\n try {\n return await this._cache.get(`${cacheType}::${hash}`);\n } catch (errors) {\n return Promise.reject(errors);\n }\n }\n\n private _getPartialQueryResponse(hash: string): PartialQueryResponse | undefined {\n const partialQueryResponse = this._partialQueryResponses.get(hash);\n this._partialQueryResponses.delete(hash);\n return partialQueryResponse;\n }\n\n private async _hasCacheEntry(cacheType: CacheTypes, hash: string): Promise<Cacheability | false> {\n try {\n return await this._cache.has(`${cacheType}::${hash}`);\n } catch (error) {\n return false;\n }\n }\n\n private _isFieldEntity(fieldData: any, { isEntity, possibleTypes }: FieldTypeInfo): boolean {\n if (!get(fieldData, this._typeIDKey, null)) {\n return false;\n }\n\n if (isEntity) {\n return true;\n }\n\n if (!possibleTypes.length) {\n return false;\n }\n\n return possibleTypes.some(type => type.typeName === fieldData.__typename);\n }\n\n private _mergeObjects<T>(obj: T, src: T): T {\n return mergeObjects(obj, src, (_key: string, val: any): string | number | undefined => {\n return isPlainObject(val) && val[this._typeIDKey] ? val[this._typeIDKey] : undefined;\n });\n }\n\n private _mergeResponseData(\n responseData: PlainObjectMap,\n partialQueryResponse?: PartialQueryResponse,\n ): PlainObjectMap {\n if (!partialQueryResponse) {\n return responseData;\n }\n\n return this._mergeObjects(partialQueryResponse.data, responseData);\n }\n\n private async _parseEntityAndRequestFieldPathCacheEntryData(\n field: FieldNode,\n ancestorKeysAndPaths: AncestorKeysAndPaths,\n { cacheMetadata, entityData, requestFieldPathData }: ResponseDataForCaching,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n const keysAndPaths = buildFieldKeysAndPaths(field, ancestorKeysAndPaths, context);\n const { requestFieldCacheKey, requestFieldPath, responseDataPath } = keysAndPaths;\n const fieldData = get(requestFieldPathData, responseDataPath);\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath);\n\n if (!isObjectLike(fieldData) && !fieldTypeInfo?.hasDirectives) {\n return;\n }\n\n if (isObjectLike(fieldData)) {\n const promises: Promise<void>[] = [];\n\n iterateChildFields(\n field,\n fieldData as PlainObjectMap | any[],\n context.fragmentDefinitions,\n (\n childField: FieldNode,\n _typeName: string | undefined,\n _fragmentKind: string | undefined,\n _fragmentName: string | undefined,\n childIndex?: number,\n ) => {\n promises.push(\n this._parseEntityAndRequestFieldPathCacheEntryData(\n childField,\n { index: childIndex, requestFieldCacheKey, requestFieldPath, responseDataPath },\n { cacheMetadata, entityData, requestFieldPathData },\n options,\n context,\n ),\n );\n },\n );\n\n await Promise.all(promises);\n }\n\n await this._setEntityAndRequestFieldPathCacheEntry(\n field,\n keysAndPaths,\n { cacheMetadata, entityData, requestFieldPathData },\n options,\n context,\n );\n }\n\n private async _retrieveCachedEntityData(\n validTypeIDValue: string | number,\n { possibleTypes, typeName }: FieldTypeInfo,\n options: RequestOptions,\n context: CacheManagerContext,\n ) {\n const typeNames = [...possibleTypes.map(type => type.typeName), typeName];\n\n const checkResults = await Promise.all(\n typeNames.map(name => this._checkCacheEntry(DATA_ENTITIES, `${name}::${validTypeIDValue}`, options, context)),\n );\n\n const validResults = checkResults.filter(result => !!result) as CheckCacheEntryResult[];\n let validResult: CheckCacheEntryResult | undefined;\n\n if (validResults.length === 1) {\n validResult = validResults[0];\n } else if (validResults.length > 1) {\n validResults.sort(({ cacheability: a }, { cacheability: b }) => a.metadata.ttl - b.metadata.ttl);\n\n validResult = {\n cacheability: validResults[0].cacheability,\n entry: validResults.reduce((obj, { entry }) => this._mergeObjects(obj, entry), {}),\n };\n }\n\n return (validResult || {}) as Partial<CheckCacheEntryResult>;\n }\n\n private async _retrieveCachedParentNodeData(\n { entityData: ancestorEntityData, requestFieldPathData: ancestorRequestFieldPathData }: CachedAncestorFieldData,\n { hashedRequestFieldCacheKey, propNameOrIndex }: KeysAndPaths,\n fieldTypeInfo: FieldTypeInfo,\n options: RequestOptions,\n context: CacheManagerContext,\n ) {\n let entityData = CacheManager._getFieldDataFromAncestor(ancestorEntityData, propNameOrIndex);\n let requestFieldPathData = CacheManager._getFieldDataFromAncestor(ancestorRequestFieldPathData, propNameOrIndex);\n let cacheability: Cacheability | undefined;\n\n if (CacheManager._isNodeRequestFieldPath(fieldTypeInfo)) {\n const { cacheability: entryCacheability, entry } = await this._retrieveCachedRequestFieldPathData(\n hashedRequestFieldCacheKey,\n options,\n context,\n );\n\n if (entry) {\n requestFieldPathData = this._mergeObjects(requestFieldPathData, entry);\n }\n\n if (entryCacheability) {\n cacheability = entryCacheability;\n }\n }\n\n const validTypeIDValue = getValidTypeIDValue(requestFieldPathData, fieldTypeInfo, this._typeIDKey);\n\n if (CacheManager._isNodeEntity(fieldTypeInfo) && validTypeIDValue) {\n const { cacheability: entryCacheability, entry } = await this._retrieveCachedEntityData(\n validTypeIDValue,\n fieldTypeInfo,\n options,\n context,\n );\n\n if (entry) {\n entityData = this._mergeObjects(entityData, entry);\n }\n\n if (entryCacheability && (!cacheability || entryCacheability.metadata.ttl > cacheability?.metadata.ttl)) {\n cacheability = entryCacheability;\n }\n }\n\n const data =\n !isUndefined(requestFieldPathData) || !isUndefined(entityData)\n ? this._mergeObjects(requestFieldPathData, entityData)\n : entityData ?? requestFieldPathData;\n\n return {\n cacheability,\n data,\n entityData,\n requestFieldPathData,\n };\n }\n\n private async _retrieveCachedRequestFieldPathData(\n hash: string,\n options: RequestOptions,\n context: CacheManagerContext,\n ) {\n return (this._checkCacheEntry(REQUEST_FIELD_PATHS, hash, options, context) || {}) as Partial<CheckCacheEntryResult>;\n }\n\n private async _retrieveCachedResponseData(\n { ast }: RequestData,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<CachedResponseData> {\n const cachedResponseData: CachedResponseData = {\n cacheMetadata: new Map(),\n data: {},\n fieldCount: { missing: 0, total: 0 },\n fieldPathChecklist: new Map(),\n };\n\n const queryNode = getOperationDefinitions(ast, context.operation)[0];\n const fieldsAndTypeNames = getChildFields(queryNode);\n\n if (!fieldsAndTypeNames) {\n return cachedResponseData;\n }\n\n await Promise.all(\n fieldsAndTypeNames.map(({ fieldNode }) =>\n this._analyzeFieldNode(\n fieldNode,\n { requestFieldPath: context.operation },\n cachedResponseData,\n options,\n context,\n ),\n ),\n );\n\n cachedResponseData.fieldCount = CacheManager._countFieldPathChecklist(cachedResponseData.fieldPathChecklist);\n return cachedResponseData;\n }\n\n private _retrieveResponseDataForCaching(\n normalizedResponseData: RawResponseDataWithMaybeCacheMetadata,\n context: CacheManagerContext,\n ) {\n const responseChunks = this._responseChunksAwaitingCaching.get(\n context.boxID,\n ) as RawResponseDataWithMaybeCacheMetadata[];\n\n this._responseChunksAwaitingCaching.delete(context.boxID);\n return mergeResponseDataSets([...responseChunks, normalizedResponseData]);\n }\n\n @logCacheEntry()\n private async _setCacheEntry(\n cacheType: CacheTypes,\n hash: string,\n value: any,\n cachemapOptions: CachemapOptions,\n _options: RequestOptions,\n _context: CacheManagerContext,\n ): Promise<void> {\n try {\n await this._cache.set(`${cacheType}::${hash}`, cloneDeep(value), cachemapOptions);\n } catch (error) {\n // no catch\n }\n }\n\n private async _setEntityAndRequestFieldPathCacheEntries(\n requestData: RequestData,\n responseData: ResponseDataForCaching,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n const operationNode = getOperationDefinitions(requestData.ast, context.operation)[0];\n const fieldsAndTypeNames = getChildFields(operationNode);\n\n if (!fieldsAndTypeNames) {\n return;\n }\n\n await Promise.all(\n fieldsAndTypeNames.map(({ fieldNode }) => {\n return this._parseEntityAndRequestFieldPathCacheEntryData(\n fieldNode,\n { requestFieldPath: context.operation },\n responseData,\n options,\n context,\n );\n }),\n );\n }\n\n private async _setEntityAndRequestFieldPathCacheEntry(\n field: FieldNode,\n keysAndPaths: KeysAndPaths,\n { cacheMetadata, entityData, requestFieldPathData }: ResponseDataForCaching,\n options: RequestOptions,\n context: CacheManagerContext,\n ) {\n const { requestFieldPath, responseDataPath } = keysAndPaths;\n const fieldData = get(entityData, responseDataPath);\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath);\n const cacheability = cacheMetadata.get(requestFieldPath);\n\n if (isUndefined(fieldData) || !fieldTypeInfo || !cacheability) {\n return;\n }\n\n const promises: Promise<void>[] = [];\n\n promises.push(\n this._setRequestFieldPathCacheEntry(\n field,\n keysAndPaths,\n { cacheability, data: requestFieldPathData, fieldTypeInfo },\n options,\n context,\n ),\n );\n\n const isEntity = this._isFieldEntity(fieldData, fieldTypeInfo);\n\n if (!isEntity && fieldTypeInfo.hasArguments) {\n unset(entityData, responseDataPath);\n }\n\n if (isEntity) {\n promises.push(\n this._setEntityCacheEntry(keysAndPaths, { cacheability, data: entityData, fieldTypeInfo }, options, context),\n );\n }\n\n await Promise.all(promises);\n }\n\n private async _setEntityCacheEntry(\n { responseDataPath }: KeysAndPaths,\n { cacheability, data, fieldTypeInfo }: DataForCachingEntry,\n options: RequestOptions,\n context: CacheManagerContext,\n ) {\n let fieldData = get(data, responseDataPath);\n const fieldTypeName = fieldTypeInfo.isEntity ? fieldTypeInfo.typeName : fieldData.__typename;\n const entityDataKey = `${fieldTypeName}::${fieldData[this._typeIDKey]}`;\n const result = await this._checkCacheEntry(DATA_ENTITIES, entityDataKey, options, context);\n\n if (result) {\n fieldData = this._mergeObjects(result.entry, fieldData);\n }\n\n await this._setCacheEntry(\n DATA_ENTITIES,\n entityDataKey,\n fieldData,\n { cacheHeaders: { cacheControl: cacheability.printCacheControl() }, tag: options.tag },\n options,\n context,\n );\n\n set(data, responseDataPath, { __cacheKey: `${DATA_ENTITIES}::${entityDataKey}` });\n }\n\n private _setFieldCacheability(\n field: FieldNode,\n ancestorKeysAndPaths: AncestorKeysAndPaths,\n { cacheMetadata, data }: ResponseData,\n options: RequestOptions,\n context: CacheManagerContext,\n ): void {\n const { requestFieldPath: ancestorRequestFieldPath } = ancestorKeysAndPaths;\n const keysAndPaths = buildFieldKeysAndPaths(field, ancestorKeysAndPaths, context);\n const { requestFieldPath, responseDataPath } = keysAndPaths;\n const fieldData = get(data, responseDataPath);\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath);\n\n if (!isObjectLike(fieldData) && !fieldTypeInfo?.hasDirectives) {\n return;\n }\n\n this._setFieldTypeCacheDirective(cacheMetadata, { ancestorRequestFieldPath, requestFieldPath }, context);\n\n if (isObjectLike(fieldData)) {\n iterateChildFields(\n field,\n fieldData as PlainObjectMap | any[],\n context.fragmentDefinitions,\n (\n childField: FieldNode,\n _typeName: string | undefined,\n _fragmentKind: string | undefined,\n _fragmentName: string | undefined,\n childIndex?: number,\n ) => {\n this._setFieldCacheability(\n childField,\n { index: childIndex, requestFieldPath, responseDataPath },\n { cacheMetadata, data },\n options,\n context,\n );\n },\n );\n }\n }\n\n private _setFieldTypeCacheDirective(\n cacheMetadata: CacheMetadata,\n { ancestorRequestFieldPath, requestFieldPath }: { ancestorRequestFieldPath?: string; requestFieldPath: string },\n { fieldTypeMap, operation }: CacheManagerContext,\n ): void {\n if (cacheMetadata.has(requestFieldPath)) {\n return;\n }\n\n const fieldTypeInfo = fieldTypeMap.get(requestFieldPath);\n\n if (fieldTypeInfo && this._typeCacheDirectives[fieldTypeInfo.typeName]) {\n const cacheability = new Cacheability({ cacheControl: this._typeCacheDirectives[fieldTypeInfo.typeName] });\n CacheManager._setCacheMetadata(cacheMetadata, cacheability, requestFieldPath, operation);\n } else if (this._cascadeCacheControl && ancestorRequestFieldPath) {\n CacheManager._setCacheMetadata(\n cacheMetadata,\n cacheMetadata.get(ancestorRequestFieldPath),\n requestFieldPath,\n operation,\n );\n }\n }\n\n @logPartialCompiled()\n private async _setPartialQueryResponse(\n hash: string,\n partialQueryResponse: PartialQueryResponse,\n _options: RequestOptions,\n _context: CacheManagerContext,\n ): Promise<void> {\n this._partialQueryResponses.set(hash, partialQueryResponse);\n }\n\n private async _setQueryResponseCacheEntry(\n hash: string,\n { cacheMetadata, data }: ResponseData,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n const dehydratedCacheMetadata = dehydrateCacheMetadata(cacheMetadata);\n const cacheControl = CacheManager._getOperationCacheControl(cacheMetadata, context.operation);\n\n await this._setCacheEntry(\n QUERY_RESPONSES,\n hash,\n { cacheMetadata: dehydratedCacheMetadata, data },\n { cacheHeaders: { cacheControl }, tag: options.tag },\n options,\n context,\n );\n }\n\n private async _setRequestFieldPathCacheEntry(\n field: FieldNode,\n keysAndPaths: KeysAndPaths,\n { cacheability, data, fieldTypeInfo }: DataForCachingEntry,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n const { hashedRequestFieldCacheKey, responseDataPath } = keysAndPaths;\n let fieldData = get(data, responseDataPath);\n const isEntity = this._isFieldEntity(fieldData, fieldTypeInfo);\n const hasArgsOrDirectives = fieldTypeInfo.hasArguments || fieldTypeInfo.hasDirectives;\n\n if (context.operation === QUERY && (isEntity || hasArgsOrDirectives)) {\n if (isPlainObject(fieldData) && field.selectionSet?.selections) {\n fieldData = filterOutPropsWithArgsOrDirectives(fieldData, field.selectionSet.selections, keysAndPaths, context);\n }\n\n const result = await this._checkCacheEntry(REQUEST_FIELD_PATHS, hashedRequestFieldCacheKey, options, context);\n\n if (result && isObjectLike(fieldData)) {\n fieldData = this._mergeObjects(result.entry, fieldData);\n }\n\n await this._setCacheEntry(\n REQUEST_FIELD_PATHS,\n hashedRequestFieldCacheKey,\n fieldData,\n { cacheHeaders: { cacheControl: cacheability.printCacheControl() }, tag: options.tag },\n options,\n context,\n );\n\n if (hasChildFields(field, { fragmentDefinitions: context.fragmentDefinitions })) {\n if (isEntity) {\n set(data, responseDataPath, { __cacheKey: `${REQUEST_FIELD_PATHS}::${hashedRequestFieldCacheKey}` });\n } else {\n unset(data, responseDataPath);\n }\n }\n }\n }\n\n private _setResponseChunksAwaitingCaching(\n normalizedResponseData: RawResponseDataWithMaybeCacheMetadata,\n context: CacheManagerContext,\n ) {\n const responseChunks = this._responseChunksAwaitingCaching.get(context.boxID);\n\n if (responseChunks) {\n this._responseChunksAwaitingCaching.set(context.boxID, [...responseChunks, normalizedResponseData]);\n } else {\n this._responseChunksAwaitingCaching.set(context.boxID, [normalizedResponseData]);\n }\n }\n}\n\nexport default function init(userOptions: UserOptions): CacheManagerInit {\n if (!isPlainObject(userOptions)) {\n throw new TypeError(\"@graphql-box/cache-manager expected userOptions to be a plain object.\");\n }\n\n return (clientOptions: ClientOptions) => new CacheManager({ ...clientOptions, ...userOptions });\n}\n","import { RequestContext } from \"@graphql-box/core\";\nimport { CACHE_ENTRY_QUERIED } from \"../../consts\";\n\nexport default function logCacheQuery() {\n return (\n _target: any,\n _propertyName: string,\n descriptor: TypedPropertyDescriptor<(...args: any[]) => Promise<any>>,\n ): void => {\n const method = descriptor.value;\n if (!method) return;\n\n descriptor.value = async function descriptorValue(...args: any[]): Promise<any> {\n try {\n return new Promise(async resolve => {\n const { debugManager, ...otherContext } = args[3] as RequestContext;\n\n if (!debugManager) {\n resolve(await method.apply(this, args));\n return;\n }\n\n const startTime = debugManager.now();\n const result = await method.apply(this, args);\n const endTime = debugManager.now();\n const duration = endTime - startTime;\n resolve(result);\n\n debugManager.emit(CACHE_ENTRY_QUERIED, {\n cacheType: args[0],\n context: otherContext,\n hash: args[1],\n options: args[2],\n result,\n stats: { duration, endTime, startTime },\n });\n });\n } catch (error) {\n return Promise.reject(error);\n }\n };\n };\n}\n","import { RequestContext } from \"@graphql-box/core\";\nimport { CACHE_ENTRY_ADDED } from \"../../consts\";\n\nexport default function logCacheEntry() {\n return (\n _target: any,\n _propertyName: string,\n descriptor: TypedPropertyDescriptor<(...args: any[]) => Promise<any>>,\n ): void => {\n const method = descriptor.value;\n if (!method) return;\n\n descriptor.value = async function descriptorValue(...args: any[]): Promise<any> {\n return new Promise<void>(async resolve => {\n const { debugManager, ...otherContext } = args[5] as RequestContext;\n\n if (!debugManager) {\n await method.apply(this, args);\n resolve();\n return;\n }\n\n const startTime = debugManager.now();\n await method.apply(this, args);\n const endTime = debugManager.now();\n const duration = endTime - startTime;\n resolve();\n\n debugManager.emit(CACHE_ENTRY_ADDED, {\n cachemapOptions: args[3],\n cacheType: args[0],\n context: otherContext,\n hash: args[1],\n options: args[4],\n stats: { duration, endTime, startTime },\n value: args[2],\n });\n });\n };\n };\n}\n","import { RequestContext } from \"@graphql-box/core\";\nimport { PARTIAL_QUERY_COMPILED } from \"../../consts\";\n\nexport default function logPartialCompiled() {\n return (\n _target: any,\n _propertyName: string,\n descriptor: TypedPropertyDescriptor<(...args: any[]) => Promise<any>>,\n ): void => {\n const method = descriptor.value;\n if (!method) return;\n\n descriptor.value = async function descriptorValue(...args: any[]): Promise<any> {\n return new Promise<void>(async resolve => {\n const { debugManager, ...otherContext } = args[3] as RequestContext;\n\n if (!debugManager) {\n await method.apply(this, args);\n resolve();\n return;\n }\n\n const startTime = debugManager.now();\n await method.apply(this, args);\n const endTime = debugManager.now();\n const duration = endTime - startTime;\n resolve();\n\n debugManager.emit(PARTIAL_QUERY_COMPILED, {\n context: otherContext,\n hash: args[0],\n options: args[2],\n partialQueryResponse: args[1],\n stats: { duration, endTime, startTime },\n });\n });\n };\n };\n}\n","import { DehydratedCacheMetadata } from \"@graphql-box/core\";\nimport Cacheability from \"cacheability\";\nimport { isEmpty } from \"lodash\";\nimport { HEADER_CACHE_CONTROL } from \"../consts\";\n\nexport type Params = {\n _cacheMetadata?: DehydratedCacheMetadata;\n fallback: string;\n headers?: Headers;\n};\n\nexport default ({ _cacheMetadata, fallback, headers }: Params): Cacheability => {\n if (_cacheMetadata && !isEmpty(_cacheMetadata)) {\n const [first, ...rest] = Object.values(_cacheMetadata);\n\n return new Cacheability({\n metadata: rest.reduce((acc, metadata) => {\n if (metadata.ttl < acc.ttl) {\n return metadata;\n }\n\n return acc;\n }, first),\n });\n }\n\n if (headers && headers.has(HEADER_CACHE_CONTROL)) {\n return new Cacheability({ headers });\n }\n\n return new Cacheability({ cacheControl: fallback });\n};\n","import { RawResponseDataWithMaybeCacheMetadata } from \"@graphql-box/core\";\nimport { merge } from \"lodash\";\n\nexport default (responseDataSets: RawResponseDataWithMaybeCacheMetadata[]) => {\n return responseDataSets.reduce(\n (acc: RawResponseDataWithMaybeCacheMetadata, dataSet, index) => {\n const { _cacheMetadata, data, hasNext, headers, paths } = dataSet;\n\n if (_cacheMetadata) {\n acc._cacheMetadata = acc._cacheMetadata ? { ...acc._cacheMetadata, ..._cacheMetadata } : _cacheMetadata;\n }\n\n acc.data = acc.data ? merge(acc.data, data) : data;\n\n if (index === 0) {\n acc.headers = headers;\n }\n\n if (index === responseDataSets.length - 1) {\n acc.hasNext = hasNext;\n }\n\n if (paths) {\n if (!acc.paths) {\n acc.paths = [];\n }\n\n acc.paths.push(paths[0]);\n }\n\n return acc;\n },\n { data: {} },\n );\n};\n"],"names":["CACHE_ENTRY_ADDED","CACHE_ENTRY_QUERIED","PARTIAL_QUERY_COMPILED","buildKey","path","key","paths","length","push","join","buildFieldKeysAndPaths","field","options","context","name","getName","index","requestFieldCacheKey","requestFieldPath","responseDataPath","fieldAliasOrName","getAlias","updatedRequestFieldPath","_isNumber","fieldTypeInfo","fieldTypeMap","get","updatedRequestFieldCacheKey","args","directives","JSON","stringify","inherited","_directives$inherited","own","_directives$own","buildRequestFieldCacheKey","getArguments","propNameOrIndex","updatedResponseDataPath","hashedRequestFieldCacheKey","hashRequest","fieldData","selectionNodes","ancestorKeysAndPaths","fieldAndTypeName","resolveFragments","fragmentDefinitions","_keys","reduce","acc","match","find","fieldNode","hasArguments","hasDirectives","fieldPathChecklistValues","fieldTypeName","hasData","typeUnused","typeName","undefined","some","every","filterField","fieldPathChecklist","fragmentSpreadChecklist","ancestorRequestFieldPath","typeIDKey","fieldsAndTypeNames","getChildFields","fragmentSpreadFieldCounter","i","childField","fragmentKind","fragmentName","childTypeName","FRAGMENT_SPREAD","total","_getChildFields","childFieldName","TYPE_NAME_KEY","checkFieldPathChecklist","hasChildFields","deleteChildFields","_isEmpty","forEach","deleteFragmentSpreads","deleted","filterFragmentSpreads","inlineFragments","getInlineFragments","filtered","fragment","deleteInlineFragments","filterInlineFragments","fieldNames","map","filterIDsAndTypeNames","ast","queryNode","getOperationDefinitions","operation","getFragmentDefinitions","createFragmentSpreadChecklist","queryFiltered","definitionsToFilter","namesAndPaths","fragmentDefinition","definitionsToDelete","names","deleteFragmentDefinitions","include","filterFragmentDefinitions","rawResponseData","hasDeferOrStream","hasNext","normalizePatchResponseData","data","_set","getValidTypeIDValue","requestFieldPathData","typeIDValue","requestFieldPathDataIDValue","_isPlainObject","CacheManager","_target","_propertyName","descriptor","method","value","Promise","resolve","debugManager","otherContext","apply","_this","startTime","now","result","endTime","duration","emit","cacheType","hash","stats","reject","cachemapOptions","partialQueryResponse","Map","errors","cache","TypeError","typeCacheDirectives","_cache","_cascadeCacheControl","cascadeCacheControl","_fallbackOperationCacheability","fallbackOperationCacheability","_typeCacheDirectives","_typeIDKey","this","requestData","cacheManagerContext","_retrieveCachedResponseData","cachedResponseData","cacheMetadata","fieldCount","missing","updated","dataCaching","_setQueryResponseCacheEntry","awaitDataCaching","response","_setPartialQueryResponse","filteredAST","filterQuery","rest","request","print","updatedRequestData","_cacheResponse","_checkCacheEntry","QUERY_RESPONSES","entry","rehydrateCacheMetadata","_partialQueryResponses","delete","cachedAncestorFieldData","_analyzeParentFieldNode","_analyzeLeafFieldNode","keysAndPaths","entityData","typeNamesAndKind","dataTypeName","__typename","_isNodeRequestFieldPath","_retrieveCachedRequestFieldPathData","cacheability","_setCachedResponseData","cachedFieldData","_getFieldDataFromAncestor","_setFieldPathChecklist","_setCachedData","_retrieveCachedParentNodeData","_get","_isObjectLike","promises","iterateChildFields","childFragmentKind","childFragmentName","childIndex","_analyzeFieldNode","all","otherProps","_createCacheMetadata","_this2","_setFieldCacheability","normalizedResponseData","responseDataForCaching","isNotLastResponseChunk","_setResponseChunksAwaitingCaching","isLastResponseChunk","_retrieveResponseDataForCaching","_buildCacheMetadata","_setEntityAndRequestFieldPathCacheEntries","_cloneDeep","QUERY","_getPartialQueryResponse","queryCacheMetadata","_mergeResponseCacheMetadata","queryData","_mergeResponseData","isNotResponseChunk","_hasCacheEntry","_isValid","_getCacheEntry","_isUndefined","_cacheMetadata","headers","fallback","Object","values","first","Cacheability","metadata","ttl","has","cacheControl","deriveOpCacheability","set","_options","_context","isEntity","possibleTypes","type","obj","src","mergeObjects","_key","val","_this3","responseData","_mergeObjects","_typeName","_fragmentKind","_fragmentName","_this4","_parseEntityAndRequestFieldPathCacheEntryData","_setEntityAndRequestFieldPathCacheEntry","validTypeIDValue","typeNames","_this5","DATA_ENTITIES","checkResults","validResults","filter","validResult","sort","a","b","ancestorEntityData","ancestorRequestFieldPathData","entryCacheability","_isNodeEntity","_retrieveCachedEntityData","_cacheability","REQUEST_FIELD_PATHS","_this6","_countFieldPathChecklist","responseDataSets","responseChunks","_responseChunksAwaitingCaching","boxID","dataSet","_merge","operationNode","_this7","_setRequestFieldPathCacheEntry","_isFieldEntity","_setEntityCacheEntry","entityDataKey","_setCacheEntry","cacheHeaders","printCacheControl","tag","__cacheKey","_setFieldTypeCacheDirective","_this8","_setCacheMetadata","dehydratedCacheMetadata","dehydrateCacheMetadata","_getOperationCacheControl","hasArgsOrDirectives","selectionSet","_field$selectionSet","selections","filterOutPropsWithArgsOrDirectives","checklistValues","ancestorFieldData","checkTTL","objectLikeData","_isArray","operationCacheability","userOptions","clientOptions"],"mappings":"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"}
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
-----------------------------
|
|
2
2
|
Rollup File Analysis
|
|
3
3
|
-----------------------------
|
|
4
|
-
bundle size:
|
|
5
|
-
original size: 64.
|
|
4
|
+
bundle size: 93.033 KB
|
|
5
|
+
original size: 64.438 KB
|
|
6
6
|
code reduction: 0 %
|
|
7
7
|
module count: 25
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
██████████████████████████████████░░░░░░░░░░░░░░░░
|
|
10
10
|
file: /src/main/index.ts
|
|
11
|
-
bundle space:
|
|
12
|
-
rendered size:
|
|
13
|
-
original size:
|
|
11
|
+
bundle space: 69.84 %
|
|
12
|
+
rendered size: 64.975 KB
|
|
13
|
+
original size: 37.778 KB
|
|
14
14
|
code reduction: 0 %
|
|
15
15
|
dependents: 1
|
|
16
16
|
- /src/index.ts
|
|
17
17
|
|
|
18
18
|
██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
|
|
19
19
|
file: /src/debug/log-cache-query/index.ts
|
|
20
|
-
bundle space: 4.
|
|
20
|
+
bundle space: 4.13 %
|
|
21
21
|
rendered size: 3.839 KB
|
|
22
22
|
original size: 1.282 KB
|
|
23
23
|
code reduction: 0 %
|
|
@@ -26,7 +26,7 @@ dependents: 1
|
|
|
26
26
|
|
|
27
27
|
█░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
|
|
28
28
|
file: /src/debug/log-cache-entry/index.ts
|
|
29
|
-
bundle space: 3.
|
|
29
|
+
bundle space: 3.71 %
|
|
30
30
|
rendered size: 3.451 KB
|
|
31
31
|
original size: 1.197 KB
|
|
32
32
|
code reduction: 0 %
|
|
@@ -35,7 +35,7 @@ dependents: 1
|
|
|
35
35
|
|
|
36
36
|
█░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
|
|
37
37
|
file: /src/debug/log-partial-compiled/index.ts
|
|
38
|
-
bundle space: 3.
|
|
38
|
+
bundle space: 3.62 %
|
|
39
39
|
rendered size: 3.37 KB
|
|
40
40
|
original size: 1.161 KB
|
|
41
41
|
code reduction: 0 %
|
|
@@ -44,7 +44,7 @@ dependents: 1
|
|
|
44
44
|
|
|
45
45
|
█░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
|
|
46
46
|
file: /src/helpers/filterField.ts
|
|
47
|
-
bundle space: 3.
|
|
47
|
+
bundle space: 3.05 %
|
|
48
48
|
rendered size: 2.834 KB
|
|
49
49
|
original size: 2.914 KB
|
|
50
50
|
code reduction: 2.75 %
|
|
@@ -54,7 +54,7 @@ dependents: 2
|
|
|
54
54
|
|
|
55
55
|
█░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
|
|
56
56
|
file: /src/helpers/buildKeysAndPaths.ts
|
|
57
|
-
bundle space: 2.
|
|
57
|
+
bundle space: 2.65 %
|
|
58
58
|
rendered size: 2.461 KB
|
|
59
59
|
original size: 2.196 KB
|
|
60
60
|
code reduction: 0 %
|
|
@@ -66,7 +66,7 @@ dependents: 4
|
|
|
66
66
|
|
|
67
67
|
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
|
|
68
68
|
file: /src/helpers/mergeResponseDataSets.ts
|
|
69
|
-
bundle space: 1.
|
|
69
|
+
bundle space: 1.84 %
|
|
70
70
|
rendered size: 1.716 KB
|
|
71
71
|
original size: 907 Bytes
|
|
72
72
|
code reduction: 0 %
|
|
@@ -75,7 +75,7 @@ dependents: 1
|
|
|
75
75
|
|
|
76
76
|
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
|
|
77
77
|
file: /src/helpers/filterFragmentDefinitions.ts
|
|
78
|
-
bundle space: 1.
|
|
78
|
+
bundle space: 1.55 %
|
|
79
79
|
rendered size: 1.441 KB
|
|
80
80
|
original size: 1.5 KB
|
|
81
81
|
code reduction: 3.93 %
|
|
@@ -84,7 +84,7 @@ dependents: 1
|
|
|
84
84
|
|
|
85
85
|
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
|
|
86
86
|
file: /src/helpers/normalizePatchResponseData.ts
|
|
87
|
-
bundle space: 1.
|
|
87
|
+
bundle space: 1.41 %
|
|
88
88
|
rendered size: 1.309 KB
|
|
89
89
|
original size: 478 Bytes
|
|
90
90
|
code reduction: 0 %
|
|
@@ -93,7 +93,7 @@ dependents: 1
|
|
|
93
93
|
|
|
94
94
|
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
|
|
95
95
|
file: /src/helpers/filterQuery.ts
|
|
96
|
-
bundle space: 1.
|
|
96
|
+
bundle space: 1.17 %
|
|
97
97
|
rendered size: 1.088 KB
|
|
98
98
|
original size: 1.467 KB
|
|
99
99
|
code reduction: 25.84 %
|
|
@@ -102,7 +102,7 @@ dependents: 1
|
|
|
102
102
|
|
|
103
103
|
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
|
|
104
104
|
file: /src/helpers/filterIDsAndTypeNames.ts
|
|
105
|
-
bundle space: 1.
|
|
105
|
+
bundle space: 1.07 %
|
|
106
106
|
rendered size: 998 Bytes
|
|
107
107
|
original size: 1.107 KB
|
|
108
108
|
code reduction: 9.85 %
|
|
@@ -111,7 +111,7 @@ dependents: 1
|
|
|
111
111
|
|
|
112
112
|
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
|
|
113
113
|
file: /src/helpers/checkFieldPathChecklist.ts
|
|
114
|
-
bundle space: 1.
|
|
114
|
+
bundle space: 1.03 %
|
|
115
115
|
rendered size: 957 Bytes
|
|
116
116
|
original size: 828 Bytes
|
|
117
117
|
code reduction: 0 %
|
|
@@ -120,7 +120,7 @@ dependents: 1
|
|
|
120
120
|
|
|
121
121
|
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
|
|
122
122
|
file: /src/helpers/filterOutPropsWithArgsOrDirectives.ts
|
|
123
|
-
bundle space:
|
|
123
|
+
bundle space: 1 %
|
|
124
124
|
rendered size: 927 Bytes
|
|
125
125
|
original size: 1.119 KB
|
|
126
126
|
code reduction: 17.16 %
|
|
@@ -129,7 +129,7 @@ dependents: 1
|
|
|
129
129
|
|
|
130
130
|
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
|
|
131
131
|
file: /src/helpers/filterInlineFragments.ts
|
|
132
|
-
bundle space: 0.
|
|
132
|
+
bundle space: 0.85 %
|
|
133
133
|
rendered size: 788 Bytes
|
|
134
134
|
original size: 941 Bytes
|
|
135
135
|
code reduction: 16.26 %
|
|
@@ -138,7 +138,7 @@ dependents: 1
|
|
|
138
138
|
|
|
139
139
|
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
|
|
140
140
|
file: /src/helpers/deriveOpCacheability.ts
|
|
141
|
-
bundle space: 0.
|
|
141
|
+
bundle space: 0.84 %
|
|
142
142
|
rendered size: 786 Bytes
|
|
143
143
|
original size: 858 Bytes
|
|
144
144
|
code reduction: 8.39 %
|
|
@@ -147,7 +147,7 @@ dependents: 1
|
|
|
147
147
|
|
|
148
148
|
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
|
|
149
149
|
file: /src/helpers/filterFragmentSpreads.ts
|
|
150
|
-
bundle space: 0.
|
|
150
|
+
bundle space: 0.71 %
|
|
151
151
|
rendered size: 661 Bytes
|
|
152
152
|
original size: 936 Bytes
|
|
153
153
|
code reduction: 29.38 %
|
|
@@ -156,7 +156,7 @@ dependents: 1
|
|
|
156
156
|
|
|
157
157
|
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
|
|
158
158
|
file: /src/helpers/createFragmentSpreadChecklist.ts
|
|
159
|
-
bundle space: 0.
|
|
159
|
+
bundle space: 0.39 %
|
|
160
160
|
rendered size: 362 Bytes
|
|
161
161
|
original size: 470 Bytes
|
|
162
162
|
code reduction: 22.98 %
|
|
@@ -165,7 +165,7 @@ dependents: 1
|
|
|
165
165
|
|
|
166
166
|
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
|
|
167
167
|
file: /src/consts/index.ts
|
|
168
|
-
bundle space: 0.
|
|
168
|
+
bundle space: 0.34 %
|
|
169
169
|
rendered size: 315 Bytes
|
|
170
170
|
original size: 390 Bytes
|
|
171
171
|
code reduction: 19.23 %
|
|
@@ -217,7 +217,7 @@ dependents: 1
|
|
|
217
217
|
file: /src/defs/index.ts
|
|
218
218
|
bundle space: 0 %
|
|
219
219
|
rendered size: 0 Byte
|
|
220
|
-
original size: 5.
|
|
220
|
+
original size: 5.215 KB
|
|
221
221
|
code reduction: 100 %
|
|
222
222
|
dependents: 1
|
|
223
223
|
- /src/index.ts
|