@graphql-box/cache-manager 2.1.2 → 2.3.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 +139 -17
- package/lib/main/debug/log-cache-entry/index.js.map +1 -1
- package/lib/main/debug/log-partial-compiled/index.js.map +1 -1
- package/lib/main/helpers/buildKeysAndPaths.js +73 -0
- package/lib/main/helpers/buildKeysAndPaths.js.map +1 -0
- package/lib/main/helpers/checkFieldPathChecklist.js +40 -0
- package/lib/main/helpers/checkFieldPathChecklist.js.map +1 -0
- package/lib/main/helpers/createFragmentSpreadChecklist.js +28 -0
- package/lib/main/helpers/createFragmentSpreadChecklist.js.map +1 -0
- package/lib/main/helpers/deriveOpCacheability.js +46 -0
- package/lib/main/helpers/deriveOpCacheability.js.map +1 -0
- package/lib/main/helpers/filterField.js +97 -0
- package/lib/main/helpers/filterField.js.map +1 -0
- package/lib/main/helpers/filterFragmentDefinitions.js +50 -0
- package/lib/main/helpers/filterFragmentDefinitions.js.map +1 -0
- package/lib/main/helpers/filterFragmentSpreads.js +37 -0
- package/lib/main/helpers/filterFragmentSpreads.js.map +1 -0
- package/lib/main/helpers/filterIDsAndTypeNames.js +47 -0
- package/lib/main/helpers/filterIDsAndTypeNames.js.map +1 -0
- package/lib/main/helpers/filterInlineFragments.js +42 -0
- package/lib/main/helpers/filterInlineFragments.js.map +1 -0
- package/lib/main/helpers/filterOutPropsWithArgsOrDirectives.js +39 -0
- package/lib/main/helpers/filterOutPropsWithArgsOrDirectives.js.map +1 -0
- package/lib/main/helpers/filterQuery.js +59 -0
- package/lib/main/helpers/filterQuery.js.map +1 -0
- package/lib/main/helpers/normalizeResponseData.js +23 -0
- package/lib/main/helpers/normalizeResponseData.js.map +1 -0
- package/lib/main/helpers/validTypeIDValue.js +20 -0
- package/lib/main/helpers/validTypeIDValue.js.map +1 -0
- package/lib/main/main/index.js +477 -476
- package/lib/main/main/index.js.map +1 -1
- package/lib/module/debug/log-cache-entry/index.js.map +1 -1
- package/lib/module/debug/log-partial-compiled/index.js.map +1 -1
- package/lib/module/helpers/buildKeysAndPaths.js +54 -0
- package/lib/module/helpers/buildKeysAndPaths.js.map +1 -0
- package/lib/module/helpers/checkFieldPathChecklist.js +31 -0
- package/lib/module/helpers/checkFieldPathChecklist.js.map +1 -0
- package/lib/module/helpers/createFragmentSpreadChecklist.js +15 -0
- package/lib/module/helpers/createFragmentSpreadChecklist.js.map +1 -0
- package/lib/module/helpers/deriveOpCacheability.js +32 -0
- package/lib/module/helpers/deriveOpCacheability.js.map +1 -0
- package/lib/module/helpers/filterField.js +81 -0
- package/lib/module/helpers/filterField.js.map +1 -0
- package/lib/module/helpers/filterFragmentDefinitions.js +39 -0
- package/lib/module/helpers/filterFragmentDefinitions.js.map +1 -0
- package/lib/module/helpers/filterFragmentSpreads.js +23 -0
- package/lib/module/helpers/filterFragmentSpreads.js.map +1 -0
- package/lib/module/helpers/filterIDsAndTypeNames.js +36 -0
- package/lib/module/helpers/filterIDsAndTypeNames.js.map +1 -0
- package/lib/module/helpers/filterInlineFragments.js +32 -0
- package/lib/module/helpers/filterInlineFragments.js.map +1 -0
- package/lib/module/helpers/filterOutPropsWithArgsOrDirectives.js +25 -0
- package/lib/module/helpers/filterOutPropsWithArgsOrDirectives.js.map +1 -0
- package/lib/module/helpers/filterQuery.js +43 -0
- package/lib/module/helpers/filterQuery.js.map +1 -0
- package/lib/module/helpers/normalizeResponseData.js +11 -0
- package/lib/module/helpers/normalizeResponseData.js.map +1 -0
- package/lib/module/helpers/validTypeIDValue.js +8 -0
- package/lib/module/helpers/validTypeIDValue.js.map +1 -0
- package/lib/module/main/index.js +474 -475
- package/lib/module/main/index.js.map +1 -1
- package/lib/types/debug/log-cache-entry/index.d.ts.map +1 -1
- package/lib/types/debug/log-cache-query/index.d.ts.map +1 -1
- package/lib/types/debug/log-partial-compiled/index.d.ts.map +1 -1
- package/lib/types/defs/index.d.ts +19 -9
- package/lib/types/defs/index.d.ts.map +1 -1
- package/lib/types/helpers/buildKeysAndPaths.d.ts +10 -0
- package/lib/types/helpers/buildKeysAndPaths.d.ts.map +1 -0
- package/lib/types/helpers/checkFieldPathChecklist.d.ts +4 -0
- package/lib/types/helpers/checkFieldPathChecklist.d.ts.map +1 -0
- package/lib/types/helpers/createFragmentSpreadChecklist.d.ts +11 -0
- package/lib/types/helpers/createFragmentSpreadChecklist.d.ts.map +1 -0
- package/lib/types/helpers/deriveOpCacheability.d.ts +10 -0
- package/lib/types/helpers/deriveOpCacheability.d.ts.map +1 -0
- package/lib/types/helpers/filterField.d.ts +6 -0
- package/lib/types/helpers/filterField.d.ts.map +1 -0
- package/lib/types/helpers/filterFragmentDefinitions.d.ts +10 -0
- package/lib/types/helpers/filterFragmentDefinitions.d.ts.map +1 -0
- package/lib/types/helpers/filterFragmentSpreads.d.ts +6 -0
- package/lib/types/helpers/filterFragmentSpreads.d.ts.map +1 -0
- package/lib/types/helpers/filterIDsAndTypeNames.d.ts +5 -0
- package/lib/types/helpers/filterIDsAndTypeNames.d.ts.map +1 -0
- package/lib/types/helpers/filterInlineFragments.d.ts +5 -0
- package/lib/types/helpers/filterInlineFragments.d.ts.map +1 -0
- package/lib/types/helpers/filterOutPropsWithArgsOrDirectives.d.ts +6 -0
- package/lib/types/helpers/filterOutPropsWithArgsOrDirectives.d.ts.map +1 -0
- package/lib/types/helpers/filterQuery.d.ts +5 -0
- package/lib/types/helpers/filterQuery.d.ts.map +1 -0
- package/lib/types/helpers/normalizeResponseData.d.ts +10 -0
- package/lib/types/helpers/normalizeResponseData.d.ts.map +1 -0
- package/lib/types/helpers/validTypeIDValue.d.ts +3 -0
- package/lib/types/helpers/validTypeIDValue.d.ts.map +1 -0
- package/lib/types/main/index.d.ts +13 -20
- package/lib/types/main/index.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/__snapshots__/index.test.ts.snap +17449 -7185
- package/src/debug/log-cache-entry/index.ts +1 -1
- package/src/debug/log-partial-compiled/index.ts +1 -1
- package/src/defs/index.ts +18 -10
- package/src/helpers/buildKeysAndPaths.ts +71 -0
- package/src/helpers/checkFieldPathChecklist.ts +21 -0
- package/src/helpers/createFragmentSpreadChecklist.ts +17 -0
- package/src/helpers/deriveOpCacheability.ts +32 -0
- package/src/helpers/filterField.ts +73 -0
- package/src/helpers/filterFragmentDefinitions.ts +40 -0
- package/src/helpers/filterFragmentSpreads.ts +28 -0
- package/src/helpers/filterIDsAndTypeNames.ts +31 -0
- package/src/helpers/filterInlineFragments.ts +29 -0
- package/src/helpers/filterOutPropsWithArgsOrDirectives.ts +30 -0
- package/src/helpers/filterQuery.ts +38 -0
- package/src/helpers/normalizeResponseData.ts +9 -0
- package/src/helpers/validTypeIDValue.ts +11 -0
- package/src/index.test.ts +179 -3
- package/src/main/index.ts +516 -499
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/main/index.ts"],"names":["DATA_ENTITIES","QUERY","QUERY_RESPONSES","REQUEST_FIELD_PATHS","TYPE_NAME_KEY","dehydrateCacheMetadata","deleteChildFields","deleteInlineFragments","getAlias","getArguments","getChildFields","getDirectives","getInlineFragments","getName","getOperationDefinitions","hasChildFields","hashRequest","iterateChildFields","mergeObjects","rehydrateCacheMetadata","Cacheability","print","CACHE_CONTROL","HEADER_CACHE_CONTROL","HEADER_NO_CACHE","METADATA","NO_CACHE","logCacheEntry","logCacheQuery","logPartialCompiled","CacheManager","init","options","errors","cache","push","TypeError","typeCacheDirectives","message","length","Promise","reject","_analyzeLeafField","field","cachedAncestorFieldData","data","fieldPathChecklist","_options","_context","keysAndPaths","_getFieldKeysAndPaths","propNameOrIndex","requestFieldPath","dataEntityData","requestFieldPathData","typeName","cachedFieldData","_getFieldDataFromAncestor","typeNames","dataTypeName","__typename","fieldTypeName","_setFieldPathChecklist","_setCachedData","_buildKey","key","path","paths","join","_buildRequestFieldCacheKey","name","requestFieldCacheKey","args","directives","index","JSON","stringify","_checkFieldPathChecklist","fieldPathChecklistValues","hasData","typeUnused","undefined","some","every","_countFieldPathChecklist","fieldCount","missing","total","forEach","checklistValues","filter","ancestorFieldData","responseDataPath","updatedRequestFieldCacheKey","fieldAliasOrName","updatedRequestFieldPath","updatedResponseDataPath","hashedRequestFieldCacheKey","_getOperationCacheControl","cacheMetadata","operation","defaultCacheControl","cacheability","get","printCacheControl","_getResponseCacheMetadata","partialQueryResponse","Map","_isDataEntity","fieldTypeInfo","isEntity","possibleTypes","type","_isRequestFieldPath","hasArguments","hasDirectives","_isValid","noCache","checkTTL","requestData","objectLikeData","_setCachedResponseData","_setCacheMetadata","set","operationCacheability","metadata","ttl","has","entry","constructor","cascadeCacheControl","fallbackOperationCacheability","typeIDKey","_cache","_cascadeCacheControl","_fallbackOperationCacheability","_typeCacheDirectives","_typeIDKey","analyzeQuery","context","ast","hash","cachedResponseData","_getCachedResponseData","updated","dataCaching","_setQueryResponseCacheEntry","awaitDataCaching","response","_setPartialQueryResponse","_filterQuery","request","checkCacheEntry","cacheType","_checkCacheEntry","checkQueryResponseCacheEntry","result","deletePartialQueryResponse","_partialQueryResponses","delete","resolveQuery","updatedRequestData","rawResponseData","_resolveRequest","queryFiltered","_getPartialQueryResponse","responseCacheMetadata","responseData","_getResponseData","all","resolveRequest","_analyzeField","_analyzeParentField","fieldTypeMap","ancestorDataEntityData","ancestorRequestFieldPathData","_setRequestFieldPathData","_setDataEntityData","_mergeObjects","promises","childField","childTypeName","childIndex","_buildCacheMetadata","otherProps","_createCacheMetadata","queryNode","fieldsAndTypeNames","fieldNode","_setFieldCacheability","_hasCacheEntry","_getCacheEntry","error","_cacheMetadata","headers","cacheControl","_filterField","ancestorRequestFieldPath","i","childFieldName","_filterInlineFragments","_filterIDsAndTypeNames","fieldNames","map","inlineFragments","filtered","fragment","_isFieldEntity","fieldData","obj","src","_key","val","_parseFieldDataEntityAndRequestFieldPathCacheEntryData","ancestorKeysAndPaths","objectLikeFieldData","_typeName","_setFieldDataEntityAndRequestFieldPathCacheEntry","_setDataEntityAndRequestFieldPathCacheEntries","_setCacheEntry","value","cachemapOptions","operationNode","_setDataEntityCacheEntry","hasArgsOrDirectives","entityDataKey","cacheHeaders","tag","__cacheKey","typeIDValue","requestFieldPathDataIDValue","validTypeIDValue","checkResults","validResults","validResult","sort","a","b","reduce","_setFieldTypeCacheDirective","_setRequestFieldPathCacheEntry","dehydratedCacheMetadata","checkResult","userOptions","clientOptions"],"mappings":"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","sourcesContent":["import Cachemap from \"@cachemap/core\";\nimport {\n CacheMetadata,\n CacheTypes,\n DATA_ENTITIES,\n FieldTypeInfo,\n PlainObjectMap,\n PlainObjectStringMap,\n QUERY,\n QUERY_RESPONSES,\n REQUEST_FIELD_PATHS,\n RawResponseDataWithMaybeCacheMetadata,\n RequestContext,\n RequestData,\n RequestOptions,\n ResponseData,\n TYPE_NAME_KEY,\n} from \"@graphql-box/core\";\nimport {\n dehydrateCacheMetadata,\n deleteChildFields,\n deleteInlineFragments,\n getAlias,\n getArguments,\n getChildFields,\n getDirectives,\n getInlineFragments,\n getName,\n getOperationDefinitions,\n hasChildFields,\n hashRequest,\n iterateChildFields,\n mergeObjects,\n rehydrateCacheMetadata,\n} from \"@graphql-box/helpers\";\nimport Cacheability from \"cacheability\";\nimport { FieldNode, print } from \"graphql\";\nimport { cloneDeep, get, isArray, isNumber, isObjectLike, isPlainObject, isUndefined, set, unset } from \"lodash\";\nimport { CACHE_CONTROL, HEADER_CACHE_CONTROL, HEADER_NO_CACHE, METADATA, NO_CACHE } from \"../consts\";\nimport { logCacheEntry, logCacheQuery, logPartialCompiled } from \"../debug\";\nimport {\n AnalyzeQueryResult,\n AncestorKeysAndPaths,\n CacheManagerDef,\n CacheManagerInit,\n CachedAncestorFieldData,\n CachedFieldData,\n CachedResponseData,\n CachemapOptions,\n CheckCacheEntryResult,\n CheckFieldPathChecklistResult,\n ClientOptions,\n ConstructorOptions,\n DataForCachingEntry,\n FieldCount,\n FieldPathChecklist,\n FieldPathChecklistValue,\n InitOptions,\n KeysAndPaths,\n KeysAndPathsOptions,\n MergedCachedFieldData,\n PartialQueryResponse,\n PartialQueryResponses,\n QueryResponseCacheEntry,\n ResponseDataForCaching,\n TypeNames,\n UserOptions,\n} from \"../defs\";\n\nexport class CacheManager implements CacheManagerDef {\n public static async init(options: InitOptions): Promise<CacheManager> {\n const errors: TypeError[] = [];\n\n if (!options.cache) {\n errors.push(new TypeError(\"@graphql-box/cache-manager expected options.cache.\"));\n }\n\n if (!!options.typeCacheDirectives && !isPlainObject(options.typeCacheDirectives)) {\n const message = \"@graphql-box/cache-manager expected options.typeCacheDirectives to be a plain object.\";\n errors.push(new TypeError(message));\n }\n\n if (errors.length) return Promise.reject(errors);\n\n return new CacheManager(options);\n }\n\n private static _analyzeLeafField(\n field: FieldNode,\n cachedAncestorFieldData: CachedAncestorFieldData,\n { data, fieldPathChecklist }: CachedResponseData,\n _options: RequestOptions,\n _context: RequestContext,\n ): void {\n const keysAndPaths = CacheManager._getFieldKeysAndPaths(field, cachedAncestorFieldData);\n const { propNameOrIndex, requestFieldPath } = keysAndPaths;\n const { dataEntityData, requestFieldPathData, typeName } = cachedAncestorFieldData;\n\n const cachedFieldData =\n CacheManager._getFieldDataFromAncestor(dataEntityData, propNameOrIndex) ||\n CacheManager._getFieldDataFromAncestor(requestFieldPathData, propNameOrIndex);\n\n const typeNames = {\n dataTypeName: dataEntityData.__typename || requestFieldPathData.__typename,\n fieldTypeName: typeName,\n };\n\n CacheManager._setFieldPathChecklist(fieldPathChecklist, { data: cachedFieldData }, requestFieldPath, typeNames);\n CacheManager._setCachedData(data, { data: cachedFieldData }, propNameOrIndex);\n }\n\n private static _buildKey(key: string | number, path: string): string {\n const paths: (string | number)[] = [];\n if (path.length) paths.push(path);\n paths.push(key);\n return paths.join(\".\");\n }\n\n private static _buildRequestFieldCacheKey(\n name: string,\n requestFieldCacheKey: string,\n args?: PlainObjectMap,\n directives?: PlainObjectMap,\n index?: number,\n ): string {\n let key = `${isNumber(index) ? index : name}`;\n if (args) key = `${key}(${JSON.stringify(args)})`;\n if (directives) key = `${key}(${JSON.stringify(directives)})`;\n return CacheManager._buildKey(key, requestFieldCacheKey);\n }\n\n private static _checkFieldPathChecklist(\n fieldPathChecklistValues: FieldPathChecklistValue[] | undefined,\n fieldTypeName: string | undefined,\n ): CheckFieldPathChecklistResult {\n if (!fieldPathChecklistValues || !fieldPathChecklistValues.length) {\n return { hasData: false, typeUnused: !!fieldTypeName };\n }\n\n if (fieldPathChecklistValues.length === 1) {\n const { hasData, typeName } = fieldPathChecklistValues[0];\n const typeUnused = !typeName ? undefined : typeName !== fieldTypeName;\n return { hasData, typeUnused };\n }\n\n return {\n hasData: fieldPathChecklistValues.some(({ hasData, typeName }) => typeName === fieldTypeName && hasData),\n typeUnused: !fieldPathChecklistValues.every(({ typeName }) => typeName === fieldTypeName),\n };\n }\n\n private static _countFieldPathChecklist(fieldPathChecklist: FieldPathChecklist): FieldCount {\n const fieldCount: FieldCount = { missing: 0, total: 0 };\n\n fieldPathChecklist.forEach(checklistValues => {\n fieldCount.total += checklistValues.length;\n const missing = checklistValues.filter(({ hasData }) => !hasData);\n fieldCount.missing += missing.length;\n });\n\n return fieldCount;\n }\n\n private static _getFieldDataFromAncestor(ancestorFieldData: any, propNameOrIndex: string | number): any {\n return isObjectLike(ancestorFieldData) ? ancestorFieldData[propNameOrIndex] : undefined;\n }\n\n private static _getFieldKeysAndPaths(field: FieldNode, options: KeysAndPathsOptions): KeysAndPaths {\n const { index, requestFieldCacheKey = \"\", requestFieldPath = \"\", responseDataPath = \"\" } = options;\n const name = getName(field) as string;\n\n const updatedRequestFieldCacheKey = CacheManager._buildRequestFieldCacheKey(\n name,\n requestFieldCacheKey,\n getArguments(field),\n getDirectives(field),\n index,\n );\n\n const fieldAliasOrName = getAlias(field) || name;\n\n const updatedRequestFieldPath = isNumber(index)\n ? requestFieldPath\n : CacheManager._buildKey(fieldAliasOrName, requestFieldPath);\n\n const propNameOrIndex = isNumber(index) ? index : fieldAliasOrName;\n const updatedResponseDataPath = CacheManager._buildKey(propNameOrIndex, responseDataPath);\n\n return {\n hashedRequestFieldCacheKey: hashRequest(updatedRequestFieldCacheKey),\n propNameOrIndex,\n requestFieldCacheKey: updatedRequestFieldCacheKey,\n requestFieldPath: updatedRequestFieldPath,\n responseDataPath: updatedResponseDataPath,\n };\n }\n\n private static _getOperationCacheControl(cacheMetadata: CacheMetadata | undefined, operation: string): string {\n const defaultCacheControl = HEADER_NO_CACHE;\n if (!cacheMetadata) return defaultCacheControl;\n\n const cacheability = cacheMetadata.get(operation);\n return cacheability ? cacheability.printCacheControl() : defaultCacheControl;\n }\n\n private static _getResponseCacheMetadata(\n cacheMetadata: CacheMetadata,\n partialQueryResponse?: PartialQueryResponse,\n ): CacheMetadata {\n if (!partialQueryResponse) return cacheMetadata;\n\n return new Map([...partialQueryResponse.cacheMetadata, ...cacheMetadata]);\n }\n\n private static _isDataEntity(fieldTypeInfo?: FieldTypeInfo): boolean {\n if (!fieldTypeInfo) return false;\n\n const { isEntity, possibleTypes } = fieldTypeInfo;\n return isEntity || possibleTypes.some(type => !!type.isEntity);\n }\n\n private static _isRequestFieldPath(fieldTypeInfo?: FieldTypeInfo): boolean {\n return (\n !!fieldTypeInfo &&\n (this._isDataEntity(fieldTypeInfo) || fieldTypeInfo.hasArguments || fieldTypeInfo.hasDirectives)\n );\n }\n\n private static _isValid(cacheability: Cacheability): boolean {\n const noCache = get(cacheability, [METADATA, CACHE_CONTROL, NO_CACHE], false);\n return !noCache && cacheability.checkTTL();\n }\n\n private static _setCachedData(\n requestData: PlainObjectMap,\n { data }: MergedCachedFieldData,\n propNameOrIndex: string | number,\n ): void {\n if (!isObjectLike(data) && !isUndefined(data)) {\n requestData[propNameOrIndex] = data as string | number | boolean | null;\n } else if (isObjectLike(data)) {\n const objectLikeData = data as PlainObjectMap | any[];\n requestData[propNameOrIndex] = isArray(objectLikeData) ? [] : {};\n }\n }\n\n private static _setCachedResponseData(\n cachedFieldData: MergedCachedFieldData,\n { cacheMetadata, data, fieldPathChecklist }: CachedResponseData,\n { propNameOrIndex, requestFieldPath }: KeysAndPaths,\n typeNames: TypeNames,\n _options: RequestOptions,\n { operation }: RequestContext,\n ) {\n CacheManager._setCacheMetadata(cacheMetadata, cachedFieldData.cacheability, requestFieldPath, operation);\n CacheManager._setFieldPathChecklist(fieldPathChecklist, cachedFieldData, requestFieldPath, typeNames);\n CacheManager._setCachedData(data, cachedFieldData, propNameOrIndex);\n }\n\n private static _setCacheMetadata(\n cacheMetadata: CacheMetadata,\n cacheability: Cacheability | undefined,\n requestFieldPath: string,\n operation: string,\n ): void {\n if (!cacheability) return;\n\n cacheMetadata.set(requestFieldPath, cacheability);\n const operationCacheability = cacheMetadata.get(operation);\n\n if (!operationCacheability || operationCacheability.metadata.ttl > cacheability.metadata.ttl) {\n cacheMetadata.set(operation, cacheability);\n }\n }\n\n private static _setFieldPathChecklist(\n fieldPathChecklist: FieldPathChecklist,\n { data }: MergedCachedFieldData,\n requestFieldPath: string,\n { dataTypeName, fieldTypeName }: TypeNames,\n ): void {\n if (isUndefined(fieldTypeName)) {\n if (fieldPathChecklist.has(requestFieldPath)) return;\n fieldPathChecklist.set(requestFieldPath, [{ hasData: !isUndefined(data) }]);\n return;\n }\n\n if (dataTypeName !== fieldTypeName) return;\n\n const entry = fieldPathChecklist.get(requestFieldPath);\n const checklistValues = entry ? (entry as FieldPathChecklistValue[]) : [];\n if (checklistValues.some(({ typeName }) => typeName === dataTypeName)) return;\n\n fieldPathChecklist.set(requestFieldPath, [\n ...checklistValues,\n { hasData: !isUndefined(data), typeName: dataTypeName as string },\n ]);\n }\n\n private _cache: Cachemap;\n private _cascadeCacheControl: boolean;\n private _fallbackOperationCacheability: string;\n private _partialQueryResponses: PartialQueryResponses = new Map();\n private _typeCacheDirectives: PlainObjectStringMap;\n private _typeIDKey: string;\n\n constructor(options: ConstructorOptions) {\n const { cache, cascadeCacheControl, fallbackOperationCacheability, typeCacheDirectives, typeIDKey } = options;\n this._cache = cache;\n this._cascadeCacheControl = cascadeCacheControl || false;\n this._fallbackOperationCacheability = fallbackOperationCacheability || NO_CACHE;\n this._typeCacheDirectives = typeCacheDirectives || {};\n this._typeIDKey = typeIDKey;\n }\n\n get cache(): Cachemap {\n return this._cache;\n }\n\n public async analyzeQuery(\n requestData: RequestData,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<AnalyzeQueryResult> {\n const { ast, hash } = requestData;\n\n if (!ast) {\n return Promise.reject(new TypeError(\"@graphql-box/cache-manager expected an AST.\"));\n }\n\n const cachedResponseData = await this._getCachedResponseData(requestData, options, context);\n\n const { cacheMetadata, data, fieldCount } = cachedResponseData;\n if (fieldCount.missing === fieldCount.total) return { updated: requestData };\n\n if (!fieldCount.missing) {\n const dataCaching = this._setQueryResponseCacheEntry(hash, { cacheMetadata, data }, options, context);\n if (options.awaitDataCaching) await dataCaching;\n\n return { response: { cacheMetadata, data } };\n }\n\n this._setPartialQueryResponse(hash, { cacheMetadata, data }, options, context);\n this._filterQuery(requestData, cachedResponseData, context);\n const request = print(ast);\n return { updated: { ast, hash: hashRequest(request), request } };\n }\n\n public async checkCacheEntry(\n cacheType: CacheTypes,\n hash: string,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<CheckCacheEntryResult | false> {\n return this._checkCacheEntry(cacheType, hash, options, context);\n }\n\n public async checkQueryResponseCacheEntry(\n hash: string,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<ResponseData | false> {\n const result = await this._checkCacheEntry(QUERY_RESPONSES, hash, options, context);\n\n if (!result) return false;\n\n const { cacheMetadata, data } = result.entry as QueryResponseCacheEntry;\n\n return {\n cacheMetadata: rehydrateCacheMetadata(cacheMetadata),\n data,\n };\n }\n\n public deletePartialQueryResponse(hash: string): void {\n this._partialQueryResponses.delete(hash);\n }\n\n public async resolveQuery(\n requestData: RequestData,\n updatedRequestData: RequestData,\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<ResponseData> {\n const dataCaching: Promise<void>[] = [];\n const { cacheMetadata, data } = await this._resolveRequest(updatedRequestData, rawResponseData, options, context);\n\n let partialQueryResponse: PartialQueryResponse | undefined;\n\n if (context.queryFiltered) {\n dataCaching.push(\n this._setQueryResponseCacheEntry(updatedRequestData.hash, { cacheMetadata, data }, options, context),\n );\n\n partialQueryResponse = this._getPartialQueryResponse(requestData.hash);\n }\n\n const responseCacheMetadata = CacheManager._getResponseCacheMetadata(cacheMetadata, partialQueryResponse);\n const responseData = this._getResponseData(data, partialQueryResponse);\n\n dataCaching.push(\n this._setQueryResponseCacheEntry(\n requestData.hash,\n { cacheMetadata: responseCacheMetadata, data: responseData },\n options,\n context,\n ),\n );\n\n if (options.awaitDataCaching) await Promise.all(dataCaching);\n\n return { cacheMetadata: responseCacheMetadata, data: responseData };\n }\n\n public async resolveRequest(\n requestData: RequestData,\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<ResponseData> {\n return this._resolveRequest(requestData, rawResponseData, options, context);\n }\n\n private async _analyzeField(\n field: FieldNode,\n cachedAncestorFieldData: CachedAncestorFieldData,\n cachedResponseData: CachedResponseData,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<void> {\n if (hasChildFields(field)) {\n await this._analyzeParentField(field, cachedAncestorFieldData, cachedResponseData, options, context);\n } else {\n await CacheManager._analyzeLeafField(field, cachedAncestorFieldData, cachedResponseData, options, context);\n }\n }\n\n private async _analyzeParentField(\n field: FieldNode,\n cachedAncestorFieldData: CachedAncestorFieldData,\n cachedResponseData: CachedResponseData,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<void> {\n const keysAndPaths = CacheManager._getFieldKeysAndPaths(field, cachedAncestorFieldData);\n const { hashedRequestFieldCacheKey, propNameOrIndex, requestFieldCacheKey, requestFieldPath } = keysAndPaths;\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath);\n\n const {\n dataEntityData: ancestorDataEntityData,\n requestFieldPathData: ancestorRequestFieldPathData,\n typeName,\n } = cachedAncestorFieldData;\n\n const cachedFieldData: CachedFieldData = {\n dataEntityData: CacheManager._getFieldDataFromAncestor(ancestorDataEntityData, propNameOrIndex),\n requestFieldPathData: CacheManager._getFieldDataFromAncestor(ancestorRequestFieldPathData, propNameOrIndex),\n };\n\n if (CacheManager._isRequestFieldPath(fieldTypeInfo)) {\n await this._setRequestFieldPathData(cachedFieldData, hashedRequestFieldCacheKey, options, context);\n }\n\n if (CacheManager._isDataEntity(fieldTypeInfo)) {\n await this._setDataEntityData(cachedFieldData, fieldTypeInfo as FieldTypeInfo, options, context);\n }\n\n const { cacheability, dataEntityData, requestFieldPathData } = cachedFieldData;\n\n const data =\n !isUndefined(requestFieldPathData) || !isUndefined(dataEntityData)\n ? this._mergeObjects(requestFieldPathData, dataEntityData)\n : undefined;\n\n CacheManager._setCachedResponseData(\n { cacheability, data },\n cachedResponseData,\n keysAndPaths,\n { dataTypeName: get(data, TYPE_NAME_KEY), fieldTypeName: typeName },\n options,\n context,\n );\n\n if (!isObjectLike(data)) return;\n\n const objectLikeData = data as PlainObjectMap | any[];\n const promises: Promise<void>[] = [];\n\n iterateChildFields(\n field,\n objectLikeData,\n (childField: FieldNode, childTypeName: string | undefined, childIndex?: number) => {\n promises.push(\n this._analyzeField(\n childField,\n { index: childIndex, requestFieldCacheKey, requestFieldPath, typeName: childTypeName, ...cachedFieldData },\n { ...cachedResponseData, data: cachedResponseData.data[propNameOrIndex] },\n options,\n context,\n ),\n );\n },\n );\n\n await Promise.all(promises);\n }\n\n private _buildCacheMetadata(\n { ast }: RequestData,\n { data, ...otherProps }: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: RequestContext,\n ): CacheMetadata {\n const cacheMetadata = this._createCacheMetadata({ data, ...otherProps }, context);\n const queryNode = getOperationDefinitions(ast, context.operation)[0];\n const fieldsAndTypeNames = getChildFields(queryNode);\n if (!fieldsAndTypeNames) return cacheMetadata;\n\n fieldsAndTypeNames.forEach(({ fieldNode }) =>\n this._setFieldCacheability(\n fieldNode,\n { requestFieldPath: context.operation },\n { cacheMetadata, data },\n options,\n context,\n ),\n );\n\n return cacheMetadata;\n }\n\n private async _checkCacheEntry(\n cacheType: CacheTypes,\n hash: string,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<CheckCacheEntryResult | false> {\n try {\n const cacheability = await this._hasCacheEntry(cacheType, hash);\n\n if (!cacheability || !CacheManager._isValid(cacheability)) return false;\n\n const entry = await this._getCacheEntry(cacheType, hash, options, context);\n\n if (!entry) return false;\n\n return { cacheability, entry };\n } catch (error) {\n return false;\n }\n }\n\n private _createCacheMetadata(\n { _cacheMetadata, headers }: RawResponseDataWithMaybeCacheMetadata,\n { operation }: RequestContext,\n ): CacheMetadata {\n const cacheMetadata = new Map();\n const cacheControl = (headers && headers.get(HEADER_CACHE_CONTROL)) || this._fallbackOperationCacheability;\n const cacheability = new Cacheability({ cacheControl });\n cacheMetadata.set(operation, cacheability);\n if (_cacheMetadata) rehydrateCacheMetadata(_cacheMetadata, cacheMetadata);\n return cacheMetadata;\n }\n\n private _filterField(\n field: FieldNode,\n fieldPathChecklist: FieldPathChecklist,\n ancestorRequestFieldPath: string,\n context: RequestContext,\n ): boolean {\n const fieldsAndTypeNames = getChildFields(field);\n if (!fieldsAndTypeNames) return false;\n\n for (let i = fieldsAndTypeNames.length - 1; i >= 0; i -= 1) {\n const { fieldNode: childField, typeName: childTypeName } = fieldsAndTypeNames[i];\n const childFieldName = getName(childField);\n\n if (childFieldName === this._typeIDKey || childFieldName === TYPE_NAME_KEY) continue;\n\n const { requestFieldPath } = CacheManager._getFieldKeysAndPaths(childField, {\n requestFieldPath: ancestorRequestFieldPath,\n });\n\n const { hasData, typeUnused } = CacheManager._checkFieldPathChecklist(\n fieldPathChecklist.get(requestFieldPath),\n childTypeName,\n );\n\n if (hasData || typeUnused) {\n if (!hasChildFields(childField)) {\n deleteChildFields(field, childField);\n } else if (this._filterField(childField, fieldPathChecklist, requestFieldPath, context)) {\n deleteChildFields(field, childField);\n }\n }\n }\n\n this._filterInlineFragments(field);\n this._filterIDsAndTypeNames(field);\n return !hasChildFields(field);\n }\n\n private _filterIDsAndTypeNames(field: FieldNode): boolean {\n const fieldsAndTypeNames = getChildFields(field);\n if (!fieldsAndTypeNames || fieldsAndTypeNames.length > 3) return false;\n\n const fieldNames = fieldsAndTypeNames.map(({ fieldNode }) => getName(fieldNode) as string);\n\n if (fieldNames.length === 2 && fieldNames.every(name => name === this._typeIDKey || name === TYPE_NAME_KEY)) {\n deleteChildFields(\n field,\n fieldsAndTypeNames.map(({ fieldNode }) => fieldNode),\n );\n\n return true;\n }\n\n if ((fieldNames.length === 1 && fieldNames[0] === this._typeIDKey) || fieldNames[0] === TYPE_NAME_KEY) {\n const { fieldNode } = fieldsAndTypeNames[0];\n deleteChildFields(field, fieldNode);\n return true;\n }\n\n return false;\n }\n\n private _filterInlineFragments(field: FieldNode): boolean {\n const inlineFragments = getInlineFragments(field);\n let filtered = false;\n\n inlineFragments.forEach(fragment => {\n const fieldsAndTypeNames = getChildFields(fragment);\n\n if (!fieldsAndTypeNames || !fieldsAndTypeNames.length) {\n deleteInlineFragments(field, fragment);\n filtered = true;\n return;\n }\n\n if (fieldsAndTypeNames.length === 1) {\n const { fieldNode } = fieldsAndTypeNames[0];\n\n if (getName(fieldNode) === this._typeIDKey) {\n deleteInlineFragments(field, fragment);\n filtered = true;\n }\n }\n });\n\n return filtered;\n }\n\n private _filterQuery(\n { ast }: RequestData,\n { fieldPathChecklist }: CachedResponseData,\n context: RequestContext,\n ): void {\n const queryNode = getOperationDefinitions(ast, context.operation)[0];\n const fieldsAndTypeNames = getChildFields(queryNode);\n if (!fieldsAndTypeNames) return;\n\n for (let i = fieldsAndTypeNames.length - 1; i >= 0; i -= 1) {\n const { fieldNode } = fieldsAndTypeNames[i];\n\n const { requestFieldPath } = CacheManager._getFieldKeysAndPaths(fieldNode, {\n requestFieldPath: context.operation,\n });\n\n if (this._filterField(fieldNode, fieldPathChecklist, requestFieldPath, context)) {\n deleteChildFields(queryNode, fieldNode);\n }\n }\n\n context.queryFiltered = true;\n }\n\n private async _getCachedResponseData(\n { ast }: RequestData,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<CachedResponseData> {\n const cachedResponseData: CachedResponseData = {\n cacheMetadata: new Map(),\n data: {},\n fieldCount: { missing: 0, total: 0 },\n fieldPathChecklist: new Map(),\n };\n\n const queryNode = getOperationDefinitions(ast, context.operation)[0];\n const fieldsAndTypeNames = getChildFields(queryNode);\n if (!fieldsAndTypeNames) return cachedResponseData;\n\n await Promise.all(\n fieldsAndTypeNames.map(({ fieldNode }) =>\n this._analyzeField(fieldNode, { requestFieldPath: context.operation }, cachedResponseData, options, context),\n ),\n );\n\n cachedResponseData.fieldCount = CacheManager._countFieldPathChecklist(cachedResponseData.fieldPathChecklist);\n return cachedResponseData;\n }\n\n @logCacheQuery()\n private async _getCacheEntry(\n cacheType: CacheTypes,\n hash: string,\n _options: RequestOptions,\n _context: RequestContext,\n ): Promise<ResponseData> {\n try {\n return await this._cache.get(`${cacheType}::${hash}`);\n } catch (errors) {\n return Promise.reject(errors);\n }\n }\n\n private _getPartialQueryResponse(hash: string): PartialQueryResponse | undefined {\n const partialQueryResponse = this._partialQueryResponses.get(hash);\n this._partialQueryResponses.delete(hash);\n return partialQueryResponse;\n }\n\n private _getResponseData(responseData: PlainObjectMap, partialQueryResponse?: PartialQueryResponse): PlainObjectMap {\n if (!partialQueryResponse) return responseData;\n\n return this._mergeObjects(partialQueryResponse.data, responseData);\n }\n\n private async _hasCacheEntry(cacheType: CacheTypes, hash: string): Promise<Cacheability | false> {\n try {\n return await this._cache.has(`${cacheType}::${hash}`);\n } catch (error) {\n return false;\n }\n }\n\n private _isFieldEntity(fieldData: any, { isEntity, possibleTypes }: FieldTypeInfo): boolean {\n if (!get(fieldData, this._typeIDKey, null)) return false;\n if (isEntity) return true;\n if (!possibleTypes.length) return false;\n return possibleTypes.some(type => type.typeName === fieldData.__typename);\n }\n\n private _mergeObjects<T>(obj: T, src: T): T {\n return mergeObjects(obj, src, (_key: string, val: any): string | number | undefined => {\n return isPlainObject(val) && val[this._typeIDKey] ? val[this._typeIDKey] : undefined;\n });\n }\n\n private async _parseFieldDataEntityAndRequestFieldPathCacheEntryData(\n field: FieldNode,\n ancestorKeysAndPaths: AncestorKeysAndPaths,\n { cacheMetadata, dataEntityData, requestFieldPathData }: ResponseDataForCaching,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<void> {\n const keysAndPaths = CacheManager._getFieldKeysAndPaths(field, ancestorKeysAndPaths);\n const { requestFieldCacheKey, requestFieldPath, responseDataPath } = keysAndPaths;\n const fieldData = get(requestFieldPathData, responseDataPath, null);\n if (!isObjectLike(fieldData)) return;\n\n const objectLikeFieldData = fieldData as PlainObjectMap | any[];\n const promises: Promise<void>[] = [];\n\n iterateChildFields(\n field,\n objectLikeFieldData,\n (childField: FieldNode, _typeName: string | undefined, childIndex?: number) => {\n promises.push(\n this._parseFieldDataEntityAndRequestFieldPathCacheEntryData(\n childField,\n { index: childIndex, requestFieldCacheKey, requestFieldPath, responseDataPath },\n { cacheMetadata, dataEntityData, requestFieldPathData },\n options,\n context,\n ),\n );\n },\n );\n\n await Promise.all(promises);\n\n await this._setFieldDataEntityAndRequestFieldPathCacheEntry(\n field,\n keysAndPaths,\n { cacheMetadata, dataEntityData, requestFieldPathData },\n options,\n context,\n );\n }\n\n private async _resolveRequest(\n requestData: RequestData,\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<ResponseData> {\n const dataCaching: Promise<void>[] = [];\n const cacheMetadata = this._buildCacheMetadata(requestData, rawResponseData, options, context);\n const { data } = rawResponseData;\n\n dataCaching.push(\n this._setDataEntityAndRequestFieldPathCacheEntries(\n requestData,\n { cacheMetadata, dataEntityData: cloneDeep(data), requestFieldPathData: cloneDeep(data) },\n options,\n context,\n ),\n );\n\n if (options.awaitDataCaching) await Promise.all(dataCaching);\n\n return { cacheMetadata, data };\n }\n\n @logCacheEntry()\n private async _setCacheEntry(\n cacheType: CacheTypes,\n hash: string,\n value: any,\n cachemapOptions: CachemapOptions,\n _options: RequestOptions,\n _context: RequestContext,\n ): Promise<void> {\n try {\n await this._cache.set(`${cacheType}::${hash}`, cloneDeep(value), cachemapOptions);\n } catch (error) {\n // no catch\n }\n }\n\n private async _setDataEntityAndRequestFieldPathCacheEntries(\n requestData: RequestData,\n responseData: ResponseDataForCaching,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<void> {\n const operationNode = getOperationDefinitions(requestData.ast, context.operation)[0];\n const fieldsAndTypeNames = getChildFields(operationNode);\n if (!fieldsAndTypeNames) return;\n\n await Promise.all(\n fieldsAndTypeNames.map(({ fieldNode }) => {\n return this._parseFieldDataEntityAndRequestFieldPathCacheEntryData(\n fieldNode,\n { requestFieldPath: context.operation },\n responseData,\n options,\n context,\n );\n }),\n );\n }\n\n private async _setDataEntityCacheEntry(\n { responseDataPath }: KeysAndPaths,\n { cacheability, data, fieldTypeInfo }: DataForCachingEntry,\n options: RequestOptions,\n context: RequestContext,\n ) {\n const hasArgsOrDirectives = fieldTypeInfo.hasArguments || fieldTypeInfo.hasDirectives;\n let fieldData = get(data, responseDataPath, null);\n const isEntity = this._isFieldEntity(fieldData, fieldTypeInfo);\n\n if (!isEntity && hasArgsOrDirectives) {\n unset(data, responseDataPath);\n }\n\n if (isEntity) {\n const fieldTypeName = fieldTypeInfo.isEntity ? fieldTypeInfo.typeName : fieldData.__typename;\n const entityDataKey = `${fieldTypeName}::${fieldData[this._typeIDKey]}`;\n const result = await this._checkCacheEntry(DATA_ENTITIES, entityDataKey, options, context);\n\n if (result) {\n fieldData = this._mergeObjects(result.entry, fieldData);\n }\n\n await this._setCacheEntry(\n DATA_ENTITIES,\n entityDataKey,\n fieldData,\n { cacheHeaders: { cacheControl: cacheability.printCacheControl() }, tag: options.tag },\n options,\n context,\n );\n\n set(data, responseDataPath, { __cacheKey: `${DATA_ENTITIES}::${entityDataKey}` });\n }\n }\n\n private async _setDataEntityData(\n cachedFieldData: CachedFieldData,\n { possibleTypes, typeIDValue, typeName }: FieldTypeInfo,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<void> {\n const requestFieldPathDataIDValue = isPlainObject(cachedFieldData.requestFieldPathData)\n ? cachedFieldData.requestFieldPathData[this._typeIDKey]\n : undefined;\n\n const validTypeIDValue = typeIDValue || requestFieldPathDataIDValue;\n if (!validTypeIDValue) return;\n\n const typeNames = [...possibleTypes.map(type => type.typeName), typeName];\n\n const checkResults = await Promise.all(\n typeNames.map(name => this._checkCacheEntry(DATA_ENTITIES, `${name}::${validTypeIDValue}`, options, context)),\n );\n\n const validResults = checkResults.filter(result => !!result) as CheckCacheEntryResult[];\n let validResult: CheckCacheEntryResult | undefined;\n\n if (validResults.length === 1) {\n validResult = validResults[0];\n } else if (validResults.length > 1) {\n validResults.sort(({ cacheability: a }, { cacheability: b }) => a.metadata.ttl - b.metadata.ttl);\n\n validResult = {\n cacheability: validResults[0].cacheability,\n entry: validResults.reduce((obj, { entry }) => this._mergeObjects(obj, entry), {}),\n };\n }\n\n if (validResult) {\n const { cacheability, entry } = validResult;\n if (cacheability && !cachedFieldData.cacheability) cachedFieldData.cacheability = cacheability;\n if (entry) cachedFieldData.dataEntityData = entry;\n }\n }\n\n private _setFieldCacheability(\n field: FieldNode,\n ancestorKeysAndPaths: AncestorKeysAndPaths,\n { cacheMetadata, data }: ResponseData,\n options: RequestOptions,\n context: RequestContext,\n ): void {\n const { requestFieldPath: ancestorRequestFieldPath } = ancestorKeysAndPaths;\n const keysAndPaths = CacheManager._getFieldKeysAndPaths(field, ancestorKeysAndPaths);\n const { requestFieldPath, responseDataPath } = keysAndPaths;\n const fieldData = get(data, responseDataPath, null);\n if (!isObjectLike(fieldData)) return;\n\n const objectLikeFieldData = fieldData as PlainObjectMap | any[];\n this._setFieldTypeCacheDirective(cacheMetadata, { ancestorRequestFieldPath, requestFieldPath }, context);\n\n iterateChildFields(\n field,\n objectLikeFieldData,\n (childField: FieldNode, _typeName: string | undefined, childIndex?: number) => {\n this._setFieldCacheability(\n childField,\n { index: childIndex, requestFieldPath, responseDataPath },\n { cacheMetadata, data },\n options,\n context,\n );\n },\n );\n }\n\n private async _setFieldDataEntityAndRequestFieldPathCacheEntry(\n field: FieldNode,\n keysAndPaths: KeysAndPaths,\n { cacheMetadata, dataEntityData, requestFieldPathData }: ResponseDataForCaching,\n options: RequestOptions,\n context: RequestContext,\n ) {\n const { requestFieldPath } = keysAndPaths;\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath);\n const cacheability = cacheMetadata.get(requestFieldPath);\n if (!fieldTypeInfo || !cacheability) return;\n\n const promises: Promise<void>[] = [];\n\n promises.push(\n this._setRequestFieldPathCacheEntry(\n field,\n keysAndPaths,\n { cacheability, data: requestFieldPathData, fieldTypeInfo },\n options,\n context,\n ),\n );\n\n promises.push(\n this._setDataEntityCacheEntry(\n keysAndPaths,\n { cacheability, data: dataEntityData, fieldTypeInfo },\n options,\n context,\n ),\n );\n\n await Promise.all(promises);\n }\n\n private _setFieldTypeCacheDirective(\n cacheMetadata: CacheMetadata,\n { ancestorRequestFieldPath, requestFieldPath }: { ancestorRequestFieldPath?: string; requestFieldPath: string },\n { fieldTypeMap, operation }: RequestContext,\n ): void {\n if (cacheMetadata.has(requestFieldPath)) return;\n\n const fieldTypeInfo = fieldTypeMap.get(requestFieldPath);\n\n if (fieldTypeInfo && this._typeCacheDirectives[fieldTypeInfo.typeName]) {\n const cacheability = new Cacheability({ cacheControl: this._typeCacheDirectives[fieldTypeInfo.typeName] });\n CacheManager._setCacheMetadata(cacheMetadata, cacheability, requestFieldPath, operation);\n } else if (this._cascadeCacheControl && ancestorRequestFieldPath) {\n CacheManager._setCacheMetadata(\n cacheMetadata,\n cacheMetadata.get(ancestorRequestFieldPath),\n requestFieldPath,\n operation,\n );\n }\n }\n\n @logPartialCompiled()\n private async _setPartialQueryResponse(\n hash: string,\n partialQueryResponse: PartialQueryResponse,\n _options: RequestOptions,\n _context: RequestContext,\n ): Promise<void> {\n this._partialQueryResponses.set(hash, partialQueryResponse);\n }\n\n private async _setQueryResponseCacheEntry(\n hash: string,\n { cacheMetadata, data }: ResponseData,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<void> {\n const dehydratedCacheMetadata = dehydrateCacheMetadata(cacheMetadata);\n const cacheControl = CacheManager._getOperationCacheControl(cacheMetadata, context.operation);\n\n await this._setCacheEntry(\n QUERY_RESPONSES,\n hash,\n { cacheMetadata: dehydratedCacheMetadata, data },\n { cacheHeaders: { cacheControl }, tag: options.tag },\n options,\n context,\n );\n }\n\n private async _setRequestFieldPathCacheEntry(\n field: FieldNode,\n { hashedRequestFieldCacheKey, responseDataPath }: KeysAndPaths,\n { cacheability, data, fieldTypeInfo }: DataForCachingEntry,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<void> {\n const hasArgsOrDirectives = fieldTypeInfo.hasArguments || fieldTypeInfo.hasDirectives;\n let fieldData = get(data, responseDataPath, null);\n const isEntity = this._isFieldEntity(fieldData, fieldTypeInfo);\n\n if (context.operation === QUERY && (isEntity || hasArgsOrDirectives)) {\n const result = await this._checkCacheEntry(REQUEST_FIELD_PATHS, hashedRequestFieldCacheKey, options, context);\n\n if (result) {\n fieldData = this._mergeObjects(result.entry, fieldData);\n }\n\n await this._setCacheEntry(\n REQUEST_FIELD_PATHS,\n hashedRequestFieldCacheKey,\n fieldData,\n { cacheHeaders: { cacheControl: cacheability.printCacheControl() }, tag: options.tag },\n options,\n context,\n );\n\n if (hasChildFields(field)) {\n if (isEntity) {\n set(data, responseDataPath, { __cacheKey: `${REQUEST_FIELD_PATHS}::${hashedRequestFieldCacheKey}` });\n } else {\n unset(data, responseDataPath);\n }\n }\n }\n }\n\n private async _setRequestFieldPathData(\n cachedFieldData: CachedFieldData,\n hash: string,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<void> {\n const checkResult = await this._checkCacheEntry(REQUEST_FIELD_PATHS, hash, options, context);\n\n if (checkResult) {\n const { cacheability, entry } = checkResult;\n if (cacheability) cachedFieldData.cacheability = cacheability;\n if (entry) cachedFieldData.requestFieldPathData = entry;\n }\n }\n}\n\nexport default function init(userOptions: UserOptions): CacheManagerInit {\n if (!isPlainObject(userOptions)) {\n throw new TypeError(\"@graphql-box/cache-manager expected userOptions to be a plain object.\");\n }\n\n return (clientOptions: ClientOptions) => CacheManager.init({ ...clientOptions, ...userOptions });\n}\n"],"file":"index.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/main/index.ts"],"names":["DATA_ENTITIES","QUERY","QUERY_RESPONSES","REQUEST_FIELD_PATHS","TYPE_NAME_KEY","FRAGMENT_SPREAD","dehydrateCacheMetadata","getChildFields","getFragmentDefinitions","getOperationDefinitions","hasChildFields","hashRequest","iterateChildFields","mergeObjects","rehydrateCacheMetadata","Cacheability","print","CACHE_CONTROL","HEADER_NO_CACHE","METADATA","NO_CACHE","logCacheEntry","logCacheQuery","logPartialCompiled","buildFieldKeysAndPaths","deriveOpCacheability","filterOutPropsWithArgsOrDirectives","filterQuery","normalizeResponseData","getValidTypeIDValue","CacheManager","init","options","errors","cache","push","TypeError","typeCacheDirectives","message","length","Promise","reject","_countFieldPathChecklist","fieldPathChecklist","fieldCount","missing","total","forEach","checklistValues","filter","hasData","_getFieldDataFromAncestor","ancestorFieldData","propNameOrIndex","undefined","_getOperationCacheControl","cacheMetadata","operation","defaultCacheControl","cacheability","get","printCacheControl","_getResponseCacheMetadata","partialQueryResponse","Map","_isNodeEntity","fieldTypeInfo","isEntity","possibleTypes","some","type","_isNodeRequestFieldPath","hasArguments","hasDirectives","_isValid","noCache","checkTTL","_setCachedData","requestData","data","objectLikeData","_setCachedResponseData","cachedFieldData","requestFieldPath","typeNamesAndKind","_options","_setCacheMetadata","_setFieldPathChecklist","set","operationCacheability","metadata","ttl","dataTypeName","fieldTypeName","fragmentKind","fragmentName","has","entry","typeName","constructor","cascadeCacheControl","fallbackOperationCacheability","typeIDKey","_cache","_cascadeCacheControl","_fallbackOperationCacheability","_typeCacheDirectives","_typeIDKey","analyzeQuery","context","ast","hash","cacheManagerContext","fragmentDefinitions","cachedResponseData","_retrieveCachedResponseData","updated","dataCaching","_setQueryResponseCacheEntry","awaitDataCaching","response","_setPartialQueryResponse","filteredAST","rest","request","checkCacheEntry","cacheType","_checkCacheEntry","checkQueryResponseCacheEntry","result","deletePartialQueryResponse","_partialQueryResponses","delete","resolveQuery","updatedRequestData","rawResponseData","hasNext","_resolveRequest","queryFiltered","_getPartialQueryResponse","responseCacheMetadata","responseData","_getResponseData","all","resolveRequest","_analyzeFieldNode","fieldNode","cachedAncestorFieldData","_analyzeParentFieldNode","_analyzeLeafFieldNode","keysAndPaths","hashedRequestFieldCacheKey","fieldTypeMap","entityData","requestFieldPathData","__typename","_retrieveCachedRequestFieldPathData","requestFieldCacheKey","_retrieveCachedParentNodeData","promises","childField","childTypeName","childFragmentKind","childFragmentName","childIndex","index","_buildCacheMetadata","otherProps","_createCacheMetadata","queryNode","fieldsAndTypeNames","_setFieldCacheability","_hasCacheEntry","_getCacheEntry","error","_cacheMetadata","headers","fallback","_context","_mergeObjects","_isFieldEntity","fieldData","obj","src","_key","val","_parseEntityAndRequestFieldPathCacheEntryData","field","ancestorKeysAndPaths","responseDataPath","_typeName","_fragmentKind","_fragmentName","_setEntityAndRequestFieldPathCacheEntry","normalizedResponseData","path","_setEntityAndRequestFieldPathCacheEntries","_retrieveCachedEntityData","validTypeIDValue","typeNames","map","checkResults","name","validResults","validResult","sort","a","b","reduce","ancestorEntityData","ancestorRequestFieldPathData","entryCacheability","_setCacheEntry","value","cachemapOptions","operationNode","_setRequestFieldPathCacheEntry","_setEntityCacheEntry","entityDataKey","cacheHeaders","cacheControl","tag","__cacheKey","ancestorRequestFieldPath","_setFieldTypeCacheDirective","dehydratedCacheMetadata","hasArgsOrDirectives","selectionSet","selections","userOptions","clientOptions"],"mappings":"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","sourcesContent":["import Cachemap from \"@cachemap/core\";\nimport {\n CacheMetadata,\n CacheTypes,\n DATA_ENTITIES,\n FieldTypeInfo,\n PlainObjectMap,\n PlainObjectStringMap,\n QUERY,\n QUERY_RESPONSES,\n REQUEST_FIELD_PATHS,\n RawResponseDataWithMaybeCacheMetadata,\n RequestContext,\n RequestData,\n RequestOptions,\n ResponseData,\n TYPE_NAME_KEY,\n} from \"@graphql-box/core\";\nimport {\n FRAGMENT_SPREAD,\n dehydrateCacheMetadata,\n getChildFields,\n getFragmentDefinitions,\n getOperationDefinitions,\n hasChildFields,\n hashRequest,\n iterateChildFields,\n mergeObjects,\n rehydrateCacheMetadata,\n} from \"@graphql-box/helpers\";\nimport Cacheability from \"cacheability\";\nimport { FieldNode, print } from \"graphql\";\nimport { assign, cloneDeep, get, isArray, isObjectLike, isPlainObject, isUndefined, set, unset } from \"lodash\";\nimport { CACHE_CONTROL, HEADER_NO_CACHE, METADATA, NO_CACHE } from \"../consts\";\nimport { logCacheEntry, logCacheQuery, logPartialCompiled } from \"../debug\";\nimport {\n AnalyzeQueryResult,\n AncestorKeysAndPaths,\n CacheManagerContext,\n CacheManagerDef,\n CacheManagerInit,\n CachedAncestorFieldData,\n CachedResponseData,\n CachemapOptions,\n CheckCacheEntryResult,\n ClientOptions,\n ConstructorOptions,\n DataForCachingEntry,\n FieldCount,\n FieldPathChecklist,\n FieldPathChecklistValue,\n InitOptions,\n KeysAndPaths,\n MergedCachedFieldData,\n PartialQueryResponse,\n PartialQueryResponses,\n QueryResponseCacheEntry,\n ResponseDataForCaching,\n TypeNamesAndKind,\n UserOptions,\n} from \"../defs\";\nimport { buildFieldKeysAndPaths } from \"../helpers/buildKeysAndPaths\";\nimport deriveOpCacheability from \"../helpers/deriveOpCacheability\";\nimport filterOutPropsWithArgsOrDirectives from \"../helpers/filterOutPropsWithArgsOrDirectives\";\nimport filterQuery from \"../helpers/filterQuery\";\nimport normalizeResponseData from \"../helpers/normalizeResponseData\";\nimport { getValidTypeIDValue } from \"../helpers/validTypeIDValue\";\n\nexport class CacheManager implements CacheManagerDef {\n public static async init(options: InitOptions): Promise<CacheManager> {\n const errors: TypeError[] = [];\n\n if (!options.cache) {\n errors.push(new TypeError(\"@graphql-box/cache-manager expected options.cache.\"));\n }\n\n if (!!options.typeCacheDirectives && !isPlainObject(options.typeCacheDirectives)) {\n const message = \"@graphql-box/cache-manager expected options.typeCacheDirectives to be a plain object.\";\n errors.push(new TypeError(message));\n }\n\n if (errors.length) {\n return Promise.reject(errors);\n }\n\n return new CacheManager(options);\n }\n\n private static _countFieldPathChecklist(fieldPathChecklist: FieldPathChecklist): FieldCount {\n const fieldCount: FieldCount = { missing: 0, total: 0 };\n\n fieldPathChecklist.forEach(checklistValues => {\n fieldCount.total += checklistValues.length;\n const missing = checklistValues.filter(({ hasData }) => !hasData);\n fieldCount.missing += missing.length;\n });\n\n return fieldCount;\n }\n\n private static _getFieldDataFromAncestor(ancestorFieldData: any, propNameOrIndex: string | number): any {\n return isObjectLike(ancestorFieldData) ? cloneDeep(ancestorFieldData[propNameOrIndex]) : undefined;\n }\n\n private static _getOperationCacheControl(cacheMetadata: CacheMetadata | undefined, operation: string): string {\n const defaultCacheControl = HEADER_NO_CACHE;\n\n if (!cacheMetadata) {\n return defaultCacheControl;\n }\n\n const cacheability = cacheMetadata.get(operation);\n return cacheability ? cacheability.printCacheControl() : defaultCacheControl;\n }\n\n private static _getResponseCacheMetadata(\n cacheMetadata: CacheMetadata,\n partialQueryResponse?: PartialQueryResponse,\n ): CacheMetadata {\n if (!partialQueryResponse) {\n return cacheMetadata;\n }\n\n return new Map([...partialQueryResponse.cacheMetadata, ...cacheMetadata]);\n }\n\n private static _isNodeEntity(fieldTypeInfo?: FieldTypeInfo): boolean {\n if (!fieldTypeInfo) {\n return false;\n }\n\n const { isEntity, possibleTypes } = fieldTypeInfo;\n return isEntity || possibleTypes.some(type => !!type.isEntity);\n }\n\n private static _isNodeRequestFieldPath(fieldTypeInfo?: FieldTypeInfo): boolean {\n return (\n !!fieldTypeInfo &&\n (this._isNodeEntity(fieldTypeInfo) || fieldTypeInfo.hasArguments || fieldTypeInfo.hasDirectives)\n );\n }\n\n private static _isValid(cacheability: Cacheability): boolean {\n const noCache = get(cacheability, [METADATA, CACHE_CONTROL, NO_CACHE], false);\n return !noCache && cacheability.checkTTL();\n }\n\n private static _setCachedData(\n requestData: PlainObjectMap,\n { data }: MergedCachedFieldData,\n propNameOrIndex: string | number,\n ): void {\n if (!isObjectLike(data) && !isUndefined(data)) {\n requestData[propNameOrIndex] = data as string | number | boolean | null;\n } else if (isObjectLike(data)) {\n const objectLikeData = data as PlainObjectMap | any[];\n requestData[propNameOrIndex] = isArray(objectLikeData) ? [] : {};\n }\n }\n\n private static _setCachedResponseData(\n cachedFieldData: MergedCachedFieldData,\n { cacheMetadata, data, fieldPathChecklist }: CachedResponseData,\n { propNameOrIndex, requestFieldPath }: KeysAndPaths,\n typeNamesAndKind: TypeNamesAndKind,\n _options: RequestOptions,\n { operation }: CacheManagerContext,\n ) {\n CacheManager._setCacheMetadata(cacheMetadata, cachedFieldData.cacheability, requestFieldPath, operation);\n CacheManager._setFieldPathChecklist(fieldPathChecklist, cachedFieldData, requestFieldPath, typeNamesAndKind);\n CacheManager._setCachedData(data, cachedFieldData, propNameOrIndex);\n }\n\n private static _setCacheMetadata(\n cacheMetadata: CacheMetadata,\n cacheability: Cacheability | undefined,\n requestFieldPath: string,\n operation: string,\n ): void {\n if (!cacheability) {\n return;\n }\n\n cacheMetadata.set(requestFieldPath, cacheability);\n const operationCacheability = cacheMetadata.get(operation);\n\n if (!operationCacheability || operationCacheability.metadata.ttl > cacheability.metadata.ttl) {\n cacheMetadata.set(operation, cacheability);\n }\n }\n\n private static _setFieldPathChecklist(\n fieldPathChecklist: FieldPathChecklist,\n { data }: MergedCachedFieldData,\n requestFieldPath: string,\n { dataTypeName, fieldTypeName, fragmentKind, fragmentName }: TypeNamesAndKind,\n ): void {\n if (isUndefined(fieldTypeName) || fragmentKind === FRAGMENT_SPREAD) {\n if (fieldPathChecklist.has(requestFieldPath)) {\n return;\n }\n\n fieldPathChecklist.set(requestFieldPath, [{ fragmentKind, fragmentName, hasData: !isUndefined(data) }]);\n return;\n }\n\n if (dataTypeName !== fieldTypeName) {\n return;\n }\n\n const entry = fieldPathChecklist.get(requestFieldPath);\n const checklistValues = entry ? (entry as FieldPathChecklistValue[]) : [];\n\n if (checklistValues.some(({ typeName }) => typeName === dataTypeName)) {\n return;\n }\n\n fieldPathChecklist.set(requestFieldPath, [\n ...checklistValues,\n { fragmentKind, fragmentName, hasData: !isUndefined(data), typeName: dataTypeName as string },\n ]);\n }\n\n private _cache: Cachemap;\n private _cascadeCacheControl: boolean;\n private _fallbackOperationCacheability: string;\n private _partialQueryResponses: PartialQueryResponses = new Map();\n private _typeCacheDirectives: PlainObjectStringMap;\n private _typeIDKey: string;\n\n constructor(options: ConstructorOptions) {\n const { cache, cascadeCacheControl, fallbackOperationCacheability, typeCacheDirectives, typeIDKey } = options;\n this._cache = cache;\n this._cascadeCacheControl = cascadeCacheControl || false;\n this._fallbackOperationCacheability = fallbackOperationCacheability || NO_CACHE;\n this._typeCacheDirectives = typeCacheDirectives || {};\n this._typeIDKey = typeIDKey;\n }\n\n get cache(): Cachemap {\n return this._cache;\n }\n\n public async analyzeQuery(\n requestData: RequestData,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<AnalyzeQueryResult> {\n const { ast, hash } = requestData;\n\n if (!ast) {\n return Promise.reject(new TypeError(\"@graphql-box/cache-manager expected an AST.\"));\n }\n\n const cacheManagerContext: CacheManagerContext = {\n ...context,\n fragmentDefinitions: getFragmentDefinitions(ast),\n typeIDKey: this._typeIDKey,\n };\n\n const cachedResponseData = await this._retrieveCachedResponseData(requestData, options, cacheManagerContext);\n const { cacheMetadata, data, fieldCount } = cachedResponseData;\n\n if (fieldCount.missing === fieldCount.total) {\n return { updated: requestData };\n }\n\n if (!fieldCount.missing) {\n const dataCaching = this._setQueryResponseCacheEntry(hash, { cacheMetadata, data }, options, cacheManagerContext);\n\n if (options.awaitDataCaching) {\n await dataCaching;\n }\n\n return { response: { cacheMetadata, data } };\n }\n\n this._setPartialQueryResponse(hash, { cacheMetadata, data }, options, cacheManagerContext);\n const filteredAST = filterQuery(requestData, cachedResponseData, cacheManagerContext);\n const { fragmentDefinitions, typeIDKey, ...rest } = cacheManagerContext;\n assign(context, rest);\n const request = print(filteredAST);\n return { updated: { ast: filteredAST, hash: hashRequest(request), request } };\n }\n\n public async checkCacheEntry(\n cacheType: CacheTypes,\n hash: string,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<CheckCacheEntryResult | false> {\n return this._checkCacheEntry(cacheType, hash, options, context);\n }\n\n public async checkQueryResponseCacheEntry(\n hash: string,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<ResponseData | false> {\n const result = await this._checkCacheEntry(QUERY_RESPONSES, hash, options, context);\n\n if (!result) {\n return false;\n }\n\n const { cacheMetadata, data } = result.entry as QueryResponseCacheEntry;\n\n return {\n cacheMetadata: rehydrateCacheMetadata(cacheMetadata),\n data,\n };\n }\n\n public deletePartialQueryResponse(hash: string): void {\n this._partialQueryResponses.delete(hash);\n }\n\n public async resolveQuery(\n requestData: RequestData,\n updatedRequestData: RequestData,\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<ResponseData> {\n const cacheManagerContext: CacheManagerContext = {\n ...context,\n fragmentDefinitions: getFragmentDefinitions(updatedRequestData.ast),\n typeIDKey: this._typeIDKey,\n };\n\n const dataCaching: Promise<void>[] = [];\n\n const { cacheMetadata, data, hasNext } = await this._resolveRequest(\n updatedRequestData,\n rawResponseData,\n options,\n cacheManagerContext,\n );\n\n let partialQueryResponse: PartialQueryResponse | undefined;\n\n if (cacheManagerContext.queryFiltered) {\n dataCaching.push(\n this._setQueryResponseCacheEntry(\n updatedRequestData.hash,\n { cacheMetadata, data },\n options,\n cacheManagerContext,\n ),\n );\n\n partialQueryResponse = this._getPartialQueryResponse(requestData.hash);\n }\n\n const responseCacheMetadata = CacheManager._getResponseCacheMetadata(cacheMetadata, partialQueryResponse);\n const responseData = this._getResponseData(data, partialQueryResponse);\n\n dataCaching.push(\n this._setQueryResponseCacheEntry(\n requestData.hash,\n { cacheMetadata: responseCacheMetadata, data: responseData },\n options,\n cacheManagerContext,\n ),\n );\n\n if (options.awaitDataCaching) {\n await Promise.all(dataCaching);\n }\n\n return { cacheMetadata: responseCacheMetadata, data: responseData, hasNext };\n }\n\n public async resolveRequest(\n requestData: RequestData,\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: RequestContext,\n ): Promise<ResponseData> {\n const cacheManagerContext: CacheManagerContext = {\n ...context,\n fragmentDefinitions: getFragmentDefinitions(requestData.ast),\n typeIDKey: this._typeIDKey,\n };\n\n return this._resolveRequest(requestData, rawResponseData, options, cacheManagerContext);\n }\n\n private async _analyzeFieldNode(\n fieldNode: FieldNode,\n cachedAncestorFieldData: CachedAncestorFieldData,\n cachedResponseData: CachedResponseData,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n if (hasChildFields(fieldNode)) {\n await this._analyzeParentFieldNode(fieldNode, cachedAncestorFieldData, cachedResponseData, options, context);\n } else {\n await this._analyzeLeafFieldNode(fieldNode, cachedAncestorFieldData, cachedResponseData, options, context);\n }\n }\n\n private async _analyzeLeafFieldNode(\n fieldNode: FieldNode,\n cachedAncestorFieldData: CachedAncestorFieldData,\n cachedResponseData: CachedResponseData,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n const keysAndPaths = buildFieldKeysAndPaths(fieldNode, cachedAncestorFieldData, context);\n const { hashedRequestFieldCacheKey, propNameOrIndex, requestFieldPath } = keysAndPaths;\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath);\n const { entityData, fragmentKind, fragmentName, requestFieldPathData, typeName } = cachedAncestorFieldData;\n\n const typeNamesAndKind = {\n dataTypeName: entityData?.__typename || requestFieldPathData?.__typename,\n fieldTypeName: typeName,\n fragmentKind,\n fragmentName,\n };\n\n if (CacheManager._isNodeRequestFieldPath(fieldTypeInfo)) {\n const { cacheability, entry } = await this._retrieveCachedRequestFieldPathData(\n hashedRequestFieldCacheKey,\n options,\n context,\n );\n\n CacheManager._setCachedResponseData(\n { cacheability, data: entry },\n cachedResponseData,\n keysAndPaths,\n typeNamesAndKind,\n options,\n context,\n );\n } else {\n const cachedFieldData =\n CacheManager._getFieldDataFromAncestor(entityData, propNameOrIndex) ||\n CacheManager._getFieldDataFromAncestor(requestFieldPathData, propNameOrIndex);\n\n CacheManager._setFieldPathChecklist(\n cachedResponseData.fieldPathChecklist,\n { data: cachedFieldData },\n requestFieldPath,\n typeNamesAndKind,\n );\n\n CacheManager._setCachedData(cachedResponseData.data, { data: cachedFieldData }, propNameOrIndex);\n }\n }\n\n private async _analyzeParentFieldNode(\n fieldNode: FieldNode,\n cachedAncestorFieldData: CachedAncestorFieldData,\n cachedResponseData: CachedResponseData,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n const keysAndPaths = buildFieldKeysAndPaths(fieldNode, cachedAncestorFieldData, context);\n const { propNameOrIndex, requestFieldCacheKey, requestFieldPath } = keysAndPaths;\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath) as FieldTypeInfo;\n\n const { cacheability, data, entityData, requestFieldPathData } = await this._retrieveCachedParentNodeData(\n cachedAncestorFieldData,\n keysAndPaths,\n fieldTypeInfo,\n options,\n context,\n );\n\n const { fragmentKind, fragmentName, typeName } = cachedAncestorFieldData;\n\n CacheManager._setCachedResponseData(\n { cacheability, data },\n cachedResponseData,\n keysAndPaths,\n { dataTypeName: get(data, TYPE_NAME_KEY), fieldTypeName: typeName, fragmentKind, fragmentName },\n options,\n context,\n );\n\n if (!isObjectLike(data)) {\n return;\n }\n\n const objectLikeData = data as PlainObjectMap | any[];\n const promises: Promise<void>[] = [];\n\n iterateChildFields(\n fieldNode,\n objectLikeData,\n context.fragmentDefinitions,\n (\n childField: FieldNode,\n childTypeName: string | undefined,\n childFragmentKind: string | undefined,\n childFragmentName: string | undefined,\n childIndex?: number,\n ) => {\n promises.push(\n this._analyzeFieldNode(\n childField,\n {\n cacheability,\n entityData,\n fragmentKind: childFragmentKind,\n fragmentName: childFragmentName,\n index: childIndex,\n requestFieldCacheKey,\n requestFieldPath,\n requestFieldPathData,\n typeName: childTypeName,\n },\n { ...cachedResponseData, data: cachedResponseData.data[propNameOrIndex] },\n options,\n context,\n ),\n );\n },\n );\n\n await Promise.all(promises);\n }\n\n private _buildCacheMetadata(\n { ast }: RequestData,\n { data, ...otherProps }: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: CacheManagerContext,\n ): CacheMetadata {\n const cacheMetadata = this._createCacheMetadata({ data, ...otherProps }, context);\n const queryNode = getOperationDefinitions(ast, context.operation)[0];\n const fieldsAndTypeNames = getChildFields(queryNode);\n\n if (!fieldsAndTypeNames) {\n return cacheMetadata;\n }\n\n fieldsAndTypeNames.forEach(({ fieldNode }) =>\n this._setFieldCacheability(\n fieldNode,\n { requestFieldPath: context.operation },\n { cacheMetadata, data },\n options,\n context,\n ),\n );\n\n return cacheMetadata;\n }\n\n private async _checkCacheEntry(\n cacheType: CacheTypes,\n hash: string,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<CheckCacheEntryResult | false> {\n try {\n const cacheability = await this._hasCacheEntry(cacheType, hash);\n\n if (!cacheability || !CacheManager._isValid(cacheability)) {\n return false;\n }\n\n const entry = await this._getCacheEntry(cacheType, hash, options, context);\n\n if (isUndefined(entry)) {\n return false;\n }\n\n return { cacheability, entry };\n } catch (error) {\n return false;\n }\n }\n\n private _createCacheMetadata(\n { _cacheMetadata, headers }: RawResponseDataWithMaybeCacheMetadata,\n { operation }: CacheManagerContext,\n ): CacheMetadata {\n const cacheMetadata = new Map();\n\n const cacheability = deriveOpCacheability({\n _cacheMetadata,\n fallback: this._fallbackOperationCacheability,\n headers,\n });\n\n cacheMetadata.set(operation, cacheability);\n\n if (_cacheMetadata) {\n rehydrateCacheMetadata(_cacheMetadata, cacheMetadata);\n }\n\n return cacheMetadata;\n }\n\n @logCacheQuery()\n private async _getCacheEntry(\n cacheType: CacheTypes,\n hash: string,\n _options: RequestOptions,\n _context: CacheManagerContext,\n ): Promise<any> {\n try {\n return await this._cache.get(`${cacheType}::${hash}`);\n } catch (errors) {\n return Promise.reject(errors);\n }\n }\n\n private _getPartialQueryResponse(hash: string): PartialQueryResponse | undefined {\n const partialQueryResponse = this._partialQueryResponses.get(hash);\n this._partialQueryResponses.delete(hash);\n return partialQueryResponse;\n }\n\n private _getResponseData(responseData: PlainObjectMap, partialQueryResponse?: PartialQueryResponse): PlainObjectMap {\n if (!partialQueryResponse) {\n return responseData;\n }\n\n return this._mergeObjects(partialQueryResponse.data, responseData);\n }\n\n private async _hasCacheEntry(cacheType: CacheTypes, hash: string): Promise<Cacheability | false> {\n try {\n return await this._cache.has(`${cacheType}::${hash}`);\n } catch (error) {\n return false;\n }\n }\n\n private _isFieldEntity(fieldData: any, { isEntity, possibleTypes }: FieldTypeInfo): boolean {\n if (!get(fieldData, this._typeIDKey, null)) {\n return false;\n }\n\n if (isEntity) {\n return true;\n }\n\n if (!possibleTypes.length) {\n return false;\n }\n\n return possibleTypes.some(type => type.typeName === fieldData.__typename);\n }\n\n private _mergeObjects<T>(obj: T, src: T): T {\n return mergeObjects(obj, src, (_key: string, val: any): string | number | undefined => {\n return isPlainObject(val) && val[this._typeIDKey] ? val[this._typeIDKey] : undefined;\n });\n }\n\n private async _parseEntityAndRequestFieldPathCacheEntryData(\n field: FieldNode,\n ancestorKeysAndPaths: AncestorKeysAndPaths,\n { cacheMetadata, entityData, requestFieldPathData }: ResponseDataForCaching,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n const keysAndPaths = buildFieldKeysAndPaths(field, ancestorKeysAndPaths, context);\n const { requestFieldCacheKey, requestFieldPath, responseDataPath } = keysAndPaths;\n const fieldData = get(requestFieldPathData, responseDataPath);\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath);\n\n if (!isObjectLike(fieldData) && !fieldTypeInfo?.hasDirectives) {\n return;\n }\n\n if (isObjectLike(fieldData)) {\n const promises: Promise<void>[] = [];\n\n iterateChildFields(\n field,\n fieldData as PlainObjectMap | any[],\n context.fragmentDefinitions,\n (\n childField: FieldNode,\n _typeName: string | undefined,\n _fragmentKind: string | undefined,\n _fragmentName: string | undefined,\n childIndex?: number,\n ) => {\n promises.push(\n this._parseEntityAndRequestFieldPathCacheEntryData(\n childField,\n { index: childIndex, requestFieldCacheKey, requestFieldPath, responseDataPath },\n { cacheMetadata, entityData, requestFieldPathData },\n options,\n context,\n ),\n );\n },\n );\n\n await Promise.all(promises);\n }\n\n await this._setEntityAndRequestFieldPathCacheEntry(\n field,\n keysAndPaths,\n { cacheMetadata, entityData, requestFieldPathData },\n options,\n context,\n );\n }\n\n private async _resolveRequest(\n requestData: RequestData,\n rawResponseData: RawResponseDataWithMaybeCacheMetadata,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<ResponseData> {\n const normalizedResponseData = rawResponseData.path ? normalizeResponseData(rawResponseData) : rawResponseData;\n const dataCaching: Promise<void>[] = [];\n const cacheMetadata = this._buildCacheMetadata(requestData, normalizedResponseData, options, context);\n const { data, hasNext } = normalizedResponseData;\n\n dataCaching.push(\n this._setEntityAndRequestFieldPathCacheEntries(\n requestData,\n { cacheMetadata, entityData: cloneDeep(data), requestFieldPathData: cloneDeep(data) },\n options,\n context,\n ),\n );\n\n if (options.awaitDataCaching) {\n await Promise.all(dataCaching);\n }\n\n return { cacheMetadata, data, hasNext };\n }\n\n private async _retrieveCachedEntityData(\n validTypeIDValue: string | number,\n { possibleTypes, typeName }: FieldTypeInfo,\n options: RequestOptions,\n context: CacheManagerContext,\n ) {\n const typeNames = [...possibleTypes.map(type => type.typeName), typeName];\n\n const checkResults = await Promise.all(\n typeNames.map(name => this._checkCacheEntry(DATA_ENTITIES, `${name}::${validTypeIDValue}`, options, context)),\n );\n\n const validResults = checkResults.filter(result => !!result) as CheckCacheEntryResult[];\n let validResult: CheckCacheEntryResult | undefined;\n\n if (validResults.length === 1) {\n validResult = validResults[0];\n } else if (validResults.length > 1) {\n validResults.sort(({ cacheability: a }, { cacheability: b }) => a.metadata.ttl - b.metadata.ttl);\n\n validResult = {\n cacheability: validResults[0].cacheability,\n entry: validResults.reduce((obj, { entry }) => this._mergeObjects(obj, entry), {}),\n };\n }\n\n return (validResult || {}) as Partial<CheckCacheEntryResult>;\n }\n\n private async _retrieveCachedParentNodeData(\n { entityData: ancestorEntityData, requestFieldPathData: ancestorRequestFieldPathData }: CachedAncestorFieldData,\n { hashedRequestFieldCacheKey, propNameOrIndex }: KeysAndPaths,\n fieldTypeInfo: FieldTypeInfo,\n options: RequestOptions,\n context: CacheManagerContext,\n ) {\n let entityData = CacheManager._getFieldDataFromAncestor(ancestorEntityData, propNameOrIndex);\n let requestFieldPathData = CacheManager._getFieldDataFromAncestor(ancestorRequestFieldPathData, propNameOrIndex);\n let cacheability: Cacheability | undefined;\n\n if (CacheManager._isNodeRequestFieldPath(fieldTypeInfo)) {\n const { cacheability: entryCacheability, entry } = await this._retrieveCachedRequestFieldPathData(\n hashedRequestFieldCacheKey,\n options,\n context,\n );\n\n if (entry) {\n requestFieldPathData = this._mergeObjects(requestFieldPathData, entry);\n }\n\n if (entryCacheability) {\n cacheability = entryCacheability;\n }\n }\n\n const validTypeIDValue = getValidTypeIDValue(requestFieldPathData, fieldTypeInfo, this._typeIDKey);\n\n if (CacheManager._isNodeEntity(fieldTypeInfo) && validTypeIDValue) {\n const { cacheability: entryCacheability, entry } = await this._retrieveCachedEntityData(\n validTypeIDValue,\n fieldTypeInfo,\n options,\n context,\n );\n\n if (entry) {\n entityData = this._mergeObjects(entityData, entry);\n }\n\n if (entryCacheability && (!cacheability || entryCacheability.metadata.ttl > cacheability?.metadata.ttl)) {\n cacheability = entryCacheability;\n }\n }\n\n const data =\n !isUndefined(requestFieldPathData) || !isUndefined(entityData)\n ? this._mergeObjects(requestFieldPathData, entityData)\n : entityData ?? requestFieldPathData;\n\n return {\n cacheability,\n data,\n entityData,\n requestFieldPathData,\n };\n }\n\n private async _retrieveCachedRequestFieldPathData(\n hash: string,\n options: RequestOptions,\n context: CacheManagerContext,\n ) {\n return (this._checkCacheEntry(REQUEST_FIELD_PATHS, hash, options, context) || {}) as Partial<CheckCacheEntryResult>;\n }\n\n private async _retrieveCachedResponseData(\n { ast }: RequestData,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<CachedResponseData> {\n const cachedResponseData: CachedResponseData = {\n cacheMetadata: new Map(),\n data: {},\n fieldCount: { missing: 0, total: 0 },\n fieldPathChecklist: new Map(),\n };\n\n const queryNode = getOperationDefinitions(ast, context.operation)[0];\n const fieldsAndTypeNames = getChildFields(queryNode);\n\n if (!fieldsAndTypeNames) {\n return cachedResponseData;\n }\n\n await Promise.all(\n fieldsAndTypeNames.map(({ fieldNode }) =>\n this._analyzeFieldNode(\n fieldNode,\n { requestFieldPath: context.operation },\n cachedResponseData,\n options,\n context,\n ),\n ),\n );\n\n cachedResponseData.fieldCount = CacheManager._countFieldPathChecklist(cachedResponseData.fieldPathChecklist);\n return cachedResponseData;\n }\n\n @logCacheEntry()\n private async _setCacheEntry(\n cacheType: CacheTypes,\n hash: string,\n value: any,\n cachemapOptions: CachemapOptions,\n _options: RequestOptions,\n _context: CacheManagerContext,\n ): Promise<void> {\n try {\n await this._cache.set(`${cacheType}::${hash}`, cloneDeep(value), cachemapOptions);\n } catch (error) {\n // no catch\n }\n }\n\n private async _setEntityAndRequestFieldPathCacheEntries(\n requestData: RequestData,\n responseData: ResponseDataForCaching,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n const operationNode = getOperationDefinitions(requestData.ast, context.operation)[0];\n const fieldsAndTypeNames = getChildFields(operationNode);\n\n if (!fieldsAndTypeNames) {\n return;\n }\n\n await Promise.all(\n fieldsAndTypeNames.map(({ fieldNode }) => {\n return this._parseEntityAndRequestFieldPathCacheEntryData(\n fieldNode,\n { requestFieldPath: context.operation },\n responseData,\n options,\n context,\n );\n }),\n );\n }\n\n private async _setEntityAndRequestFieldPathCacheEntry(\n field: FieldNode,\n keysAndPaths: KeysAndPaths,\n { cacheMetadata, entityData, requestFieldPathData }: ResponseDataForCaching,\n options: RequestOptions,\n context: CacheManagerContext,\n ) {\n const { requestFieldPath, responseDataPath } = keysAndPaths;\n const fieldData = get(entityData, responseDataPath);\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath);\n const cacheability = cacheMetadata.get(requestFieldPath);\n\n if (isUndefined(fieldData) || !fieldTypeInfo || !cacheability) {\n return;\n }\n\n const promises: Promise<void>[] = [];\n\n promises.push(\n this._setRequestFieldPathCacheEntry(\n field,\n keysAndPaths,\n { cacheability, data: requestFieldPathData, fieldTypeInfo },\n options,\n context,\n ),\n );\n\n const isEntity = this._isFieldEntity(fieldData, fieldTypeInfo);\n\n if (!isEntity && fieldTypeInfo.hasArguments) {\n unset(entityData, responseDataPath);\n }\n\n if (isEntity) {\n promises.push(\n this._setEntityCacheEntry(keysAndPaths, { cacheability, data: entityData, fieldTypeInfo }, options, context),\n );\n }\n\n await Promise.all(promises);\n }\n\n private async _setEntityCacheEntry(\n { responseDataPath }: KeysAndPaths,\n { cacheability, data, fieldTypeInfo }: DataForCachingEntry,\n options: RequestOptions,\n context: CacheManagerContext,\n ) {\n let fieldData = get(data, responseDataPath);\n const fieldTypeName = fieldTypeInfo.isEntity ? fieldTypeInfo.typeName : fieldData.__typename;\n const entityDataKey = `${fieldTypeName}::${fieldData[this._typeIDKey]}`;\n const result = await this._checkCacheEntry(DATA_ENTITIES, entityDataKey, options, context);\n\n if (result) {\n fieldData = this._mergeObjects(result.entry, fieldData);\n }\n\n await this._setCacheEntry(\n DATA_ENTITIES,\n entityDataKey,\n fieldData,\n { cacheHeaders: { cacheControl: cacheability.printCacheControl() }, tag: options.tag },\n options,\n context,\n );\n\n set(data, responseDataPath, { __cacheKey: `${DATA_ENTITIES}::${entityDataKey}` });\n }\n\n private _setFieldCacheability(\n field: FieldNode,\n ancestorKeysAndPaths: AncestorKeysAndPaths,\n { cacheMetadata, data }: ResponseData,\n options: RequestOptions,\n context: CacheManagerContext,\n ): void {\n const { requestFieldPath: ancestorRequestFieldPath } = ancestorKeysAndPaths;\n const keysAndPaths = buildFieldKeysAndPaths(field, ancestorKeysAndPaths, context);\n const { requestFieldPath, responseDataPath } = keysAndPaths;\n const fieldData = get(data, responseDataPath);\n const fieldTypeInfo = context.fieldTypeMap.get(requestFieldPath);\n\n if (!isObjectLike(fieldData) && !fieldTypeInfo?.hasDirectives) {\n return;\n }\n\n this._setFieldTypeCacheDirective(cacheMetadata, { ancestorRequestFieldPath, requestFieldPath }, context);\n\n if (isObjectLike(fieldData)) {\n iterateChildFields(\n field,\n fieldData as PlainObjectMap | any[],\n context.fragmentDefinitions,\n (\n childField: FieldNode,\n _typeName: string | undefined,\n _fragmentKind: string | undefined,\n _fragmentName: string | undefined,\n childIndex?: number,\n ) => {\n this._setFieldCacheability(\n childField,\n { index: childIndex, requestFieldPath, responseDataPath },\n { cacheMetadata, data },\n options,\n context,\n );\n },\n );\n }\n }\n\n private _setFieldTypeCacheDirective(\n cacheMetadata: CacheMetadata,\n { ancestorRequestFieldPath, requestFieldPath }: { ancestorRequestFieldPath?: string; requestFieldPath: string },\n { fieldTypeMap, operation }: CacheManagerContext,\n ): void {\n if (cacheMetadata.has(requestFieldPath)) {\n return;\n }\n\n const fieldTypeInfo = fieldTypeMap.get(requestFieldPath);\n\n if (fieldTypeInfo && this._typeCacheDirectives[fieldTypeInfo.typeName]) {\n const cacheability = new Cacheability({ cacheControl: this._typeCacheDirectives[fieldTypeInfo.typeName] });\n CacheManager._setCacheMetadata(cacheMetadata, cacheability, requestFieldPath, operation);\n } else if (this._cascadeCacheControl && ancestorRequestFieldPath) {\n CacheManager._setCacheMetadata(\n cacheMetadata,\n cacheMetadata.get(ancestorRequestFieldPath),\n requestFieldPath,\n operation,\n );\n }\n }\n\n @logPartialCompiled()\n private async _setPartialQueryResponse(\n hash: string,\n partialQueryResponse: PartialQueryResponse,\n _options: RequestOptions,\n _context: CacheManagerContext,\n ): Promise<void> {\n this._partialQueryResponses.set(hash, partialQueryResponse);\n }\n\n private async _setQueryResponseCacheEntry(\n hash: string,\n { cacheMetadata, data }: ResponseData,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n const dehydratedCacheMetadata = dehydrateCacheMetadata(cacheMetadata);\n const cacheControl = CacheManager._getOperationCacheControl(cacheMetadata, context.operation);\n\n await this._setCacheEntry(\n QUERY_RESPONSES,\n hash,\n { cacheMetadata: dehydratedCacheMetadata, data },\n { cacheHeaders: { cacheControl }, tag: options.tag },\n options,\n context,\n );\n }\n\n private async _setRequestFieldPathCacheEntry(\n field: FieldNode,\n keysAndPaths: KeysAndPaths,\n { cacheability, data, fieldTypeInfo }: DataForCachingEntry,\n options: RequestOptions,\n context: CacheManagerContext,\n ): Promise<void> {\n const { hashedRequestFieldCacheKey, responseDataPath } = keysAndPaths;\n let fieldData = get(data, responseDataPath);\n const isEntity = this._isFieldEntity(fieldData, fieldTypeInfo);\n const hasArgsOrDirectives = fieldTypeInfo.hasArguments || fieldTypeInfo.hasDirectives;\n\n if (context.operation === QUERY && (isEntity || hasArgsOrDirectives)) {\n if (isPlainObject(fieldData) && field.selectionSet?.selections) {\n fieldData = filterOutPropsWithArgsOrDirectives(fieldData, field.selectionSet.selections, keysAndPaths, context);\n }\n\n const result = await this._checkCacheEntry(REQUEST_FIELD_PATHS, hashedRequestFieldCacheKey, options, context);\n\n if (result && isObjectLike(fieldData)) {\n fieldData = this._mergeObjects(result.entry, fieldData);\n }\n\n await this._setCacheEntry(\n REQUEST_FIELD_PATHS,\n hashedRequestFieldCacheKey,\n fieldData,\n { cacheHeaders: { cacheControl: cacheability.printCacheControl() }, tag: options.tag },\n options,\n context,\n );\n\n if (hasChildFields(field)) {\n if (isEntity) {\n set(data, responseDataPath, { __cacheKey: `${REQUEST_FIELD_PATHS}::${hashedRequestFieldCacheKey}` });\n } else {\n unset(data, responseDataPath);\n }\n }\n }\n }\n}\n\nexport default function init(userOptions: UserOptions): CacheManagerInit {\n if (!isPlainObject(userOptions)) {\n throw new TypeError(\"@graphql-box/cache-manager expected userOptions to be a plain object.\");\n }\n\n return (clientOptions: ClientOptions) => CacheManager.init({ ...clientOptions, ...userOptions });\n}\n"],"file":"index.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/debug/log-cache-entry/index.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,OAAO,UAAU,aAAa,cAExB,GAAG,iBACG,MAAM,gDACyB,GAAG,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/debug/log-cache-entry/index.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,OAAO,UAAU,aAAa,cAExB,GAAG,iBACG,MAAM,gDACyB,GAAG,EAAE,KAAK,QAAQ,GAAG,CAAC,MACnE,IAAI,CAgCR"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/debug/log-cache-query/index.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,OAAO,UAAU,aAAa,cAExB,GAAG,iBACG,MAAM,gDACyB,GAAG,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/debug/log-cache-query/index.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,OAAO,UAAU,aAAa,cAExB,GAAG,iBACG,MAAM,gDACyB,GAAG,EAAE,KAAK,QAAQ,GAAG,CAAC,MACnE,IAAI,CAkCR"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/debug/log-partial-compiled/index.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,OAAO,UAAU,kBAAkB,cAE7B,GAAG,iBACG,MAAM,gDACyB,GAAG,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/debug/log-partial-compiled/index.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,OAAO,UAAU,kBAAkB,cAE7B,GAAG,iBACG,MAAM,gDACyB,GAAG,EAAE,KAAK,QAAQ,GAAG,CAAC,MACnE,IAAI,CA8BR"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import Cachemap, { CacheHeaders, Metadata } from "@cachemap/core";
|
|
2
2
|
import { CacheMetadata, CacheTypes, DehydratedCacheMetadata, FieldTypeInfo, PlainObjectMap, PlainObjectStringMap, RawResponseDataWithMaybeCacheMetadata, RequestContext, RequestData, RequestOptions, ResponseData } from "@graphql-box/core";
|
|
3
|
+
import { FragmentDefinitionNodeMap } from "@graphql-box/helpers";
|
|
3
4
|
import Cacheability from "cacheability";
|
|
4
5
|
export interface UserOptions {
|
|
5
6
|
/**
|
|
@@ -42,6 +43,10 @@ export interface ConstructorOptions {
|
|
|
42
43
|
typeCacheDirectives?: PlainObjectStringMap;
|
|
43
44
|
typeIDKey: string;
|
|
44
45
|
}
|
|
46
|
+
export interface CacheManagerContext extends RequestContext {
|
|
47
|
+
fragmentDefinitions?: FragmentDefinitionNodeMap;
|
|
48
|
+
typeIDKey?: string;
|
|
49
|
+
}
|
|
45
50
|
export interface PartialQueryResponse {
|
|
46
51
|
cacheMetadata: CacheMetadata;
|
|
47
52
|
data: PlainObjectMap;
|
|
@@ -52,6 +57,8 @@ export interface FieldCount {
|
|
|
52
57
|
total: number;
|
|
53
58
|
}
|
|
54
59
|
export interface FieldPathChecklistValue {
|
|
60
|
+
fragmentKind: string | undefined;
|
|
61
|
+
fragmentName: string | undefined;
|
|
55
62
|
hasData: boolean;
|
|
56
63
|
typeName?: string | undefined;
|
|
57
64
|
}
|
|
@@ -72,18 +79,15 @@ export interface AncestorKeysAndPaths {
|
|
|
72
79
|
requestFieldPath?: string;
|
|
73
80
|
responseDataPath?: string;
|
|
74
81
|
}
|
|
75
|
-
export interface CachedFieldData {
|
|
76
|
-
cacheability?: Cacheability;
|
|
77
|
-
dataEntityData?: any;
|
|
78
|
-
requestFieldPathData?: any;
|
|
79
|
-
}
|
|
80
82
|
export interface MergedCachedFieldData {
|
|
81
83
|
cacheability?: Cacheability;
|
|
82
84
|
data: any;
|
|
83
85
|
}
|
|
84
86
|
export interface CachedAncestorFieldData {
|
|
85
87
|
cacheability?: Cacheability;
|
|
86
|
-
|
|
88
|
+
entityData?: any;
|
|
89
|
+
fragmentKind?: string;
|
|
90
|
+
fragmentName?: string;
|
|
87
91
|
index?: number;
|
|
88
92
|
requestFieldCacheKey?: string;
|
|
89
93
|
requestFieldPath?: string;
|
|
@@ -103,13 +107,19 @@ export interface KeysAndPaths {
|
|
|
103
107
|
requestFieldPath: string;
|
|
104
108
|
responseDataPath: string;
|
|
105
109
|
}
|
|
106
|
-
export interface
|
|
110
|
+
export interface TypeNamesAndKind {
|
|
107
111
|
dataTypeName: string | undefined;
|
|
108
112
|
fieldTypeName: string | undefined;
|
|
113
|
+
fragmentKind: string | undefined;
|
|
114
|
+
fragmentName: string | undefined;
|
|
109
115
|
}
|
|
116
|
+
export declare type FragmentSpreadFieldCounter = Record<string, {
|
|
117
|
+
hasData: number;
|
|
118
|
+
total: number;
|
|
119
|
+
}>;
|
|
110
120
|
export interface ResponseDataForCaching {
|
|
111
121
|
cacheMetadata: CacheMetadata;
|
|
112
|
-
|
|
122
|
+
entityData: PlainObjectMap;
|
|
113
123
|
requestFieldPathData: PlainObjectMap;
|
|
114
124
|
}
|
|
115
125
|
export interface DataForCachingEntry {
|
|
@@ -127,7 +137,7 @@ export interface AnalyzeQueryResult {
|
|
|
127
137
|
}
|
|
128
138
|
export interface CheckCacheEntryResult {
|
|
129
139
|
cacheability: Cacheability;
|
|
130
|
-
entry:
|
|
140
|
+
entry: any;
|
|
131
141
|
}
|
|
132
142
|
export interface QueryResponseCacheEntry {
|
|
133
143
|
cacheMetadata: DehydratedCacheMetadata;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/defs/index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EACL,aAAa,EACb,UAAU,EACV,uBAAuB,EACvB,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,qCAAqC,EACrC,cAAc,EACd,WAAW,EACX,cAAc,EACd,YAAY,EACb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,YAAY,MAAM,cAAc,CAAC;AAExC,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,KAAK,EAAE,QAAQ,CAAC;IAEhB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;;;OAIG;IACH,6BAA6B,CAAC,EAAE,MAAM,CAAC;IAEvC;;;OAGG;IACH,mBAAmB,CAAC,EAAE,oBAAoB,CAAC;CAC5C;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,QAAQ,CAAC;IAChB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,6BAA6B,CAAC,EAAE,MAAM,CAAC;IACvC,mBAAmB,CAAC,EAAE,oBAAoB,CAAC;IAC3C,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,QAAQ,CAAC;IAChB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,6BAA6B,CAAC,EAAE,MAAM,CAAC;IACvC,mBAAmB,CAAC,EAAE,oBAAoB,CAAC;IAC3C,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,aAAa,CAAC;IAC7B,IAAI,EAAE,cAAc,CAAC;CACtB;AAED,oBAAY,qBAAqB,GAAG,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;AAEtE,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B;AAED,MAAM,WAAW,6BAA6B;IAC5C,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,oBAAY,kBAAkB,GAAG,GAAG,CAAC,MAAM,EAAE,uBAAuB,EAAE,CAAC,CAAC;AAExE,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,aAAa,CAAC;IAC7B,IAAI,EAAE,cAAc,CAAC;IACrB,UAAU,EAAE,UAAU,CAAC;IACvB,kBAAkB,EAAE,kBAAkB,CAAC;CACxC;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/defs/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { PlainObjectMap } from "@graphql-box/core";
|
|
2
|
+
import { FieldNode } from "graphql";
|
|
3
|
+
import { CacheManagerContext, KeysAndPaths, KeysAndPathsOptions } from "../defs";
|
|
4
|
+
export declare const buildKey: (path: string, key: string | number) => string;
|
|
5
|
+
export declare const buildRequestFieldCacheKey: (name: string, requestFieldCacheKey: string, args: PlainObjectMap | undefined, directives?: {
|
|
6
|
+
inherited: string[];
|
|
7
|
+
own: string[];
|
|
8
|
+
} | undefined, index?: number | undefined) => string;
|
|
9
|
+
export declare const buildFieldKeysAndPaths: (field: FieldNode, options: KeysAndPathsOptions, context: CacheManagerContext) => KeysAndPaths;
|
|
10
|
+
//# sourceMappingURL=buildKeysAndPaths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildKeysAndPaths.d.ts","sourceRoot":"","sources":["../../../src/helpers/buildKeysAndPaths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAElE,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEjF,eAAO,MAAM,QAAQ,SAAU,MAAM,OAAO,MAAM,GAAG,MAAM,WAS1D,CAAC;AAEF,eAAO,MAAM,yBAAyB,SAC9B,MAAM,wBACU,MAAM,QACtB,cAAc,GAAG,SAAS;;;oDAmBjC,CAAC;AAEF,eAAO,MAAM,sBAAsB,UAC1B,SAAS,WACP,mBAAmB,WACnB,mBAAmB,KAC3B,YAyBF,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { CheckFieldPathChecklistResult, FieldPathChecklistValue } from "../defs";
|
|
2
|
+
declare const _default: (fieldPathChecklistValues: FieldPathChecklistValue[] | undefined, fieldTypeName: string | undefined) => CheckFieldPathChecklistResult;
|
|
3
|
+
export default _default;
|
|
4
|
+
//# sourceMappingURL=checkFieldPathChecklist.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkFieldPathChecklist.d.ts","sourceRoot":"","sources":["../../../src/helpers/checkFieldPathChecklist.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;mDAGrD,uBAAuB,EAAE,GAAG,SAAS,iBAChD,MAAM,GAAG,SAAS,KAChC,6BAA6B;AAHhC,wBAkBE"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { DocumentNode } from "graphql";
|
|
2
|
+
export declare type FragmentSpreadCheckist = {
|
|
3
|
+
[key: string]: {
|
|
4
|
+
deleted: number;
|
|
5
|
+
paths: string[];
|
|
6
|
+
total: number;
|
|
7
|
+
};
|
|
8
|
+
};
|
|
9
|
+
declare const _default: (ast: DocumentNode) => FragmentSpreadCheckist;
|
|
10
|
+
export default _default;
|
|
11
|
+
//# sourceMappingURL=createFragmentSpreadChecklist.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createFragmentSpreadChecklist.d.ts","sourceRoot":"","sources":["../../../src/helpers/createFragmentSpreadChecklist.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAGvC,oBAAY,sBAAsB,GAAG;IACnC,CAAC,GAAG,EAAE,MAAM,GAAG;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH,CAAC;8BAEmB,YAAY;AAAjC,wBAIS"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { DehydratedCacheMetadata } from "@graphql-box/core";
|
|
2
|
+
import Cacheability from "cacheability";
|
|
3
|
+
export declare type Params = {
|
|
4
|
+
_cacheMetadata?: DehydratedCacheMetadata;
|
|
5
|
+
fallback: string;
|
|
6
|
+
headers?: Headers;
|
|
7
|
+
};
|
|
8
|
+
declare const _default: ({ _cacheMetadata, fallback, headers }: Params) => Cacheability;
|
|
9
|
+
export default _default;
|
|
10
|
+
//# sourceMappingURL=deriveOpCacheability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deriveOpCacheability.d.ts","sourceRoot":"","sources":["../../../src/helpers/deriveOpCacheability.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,YAAY,MAAM,cAAc,CAAC;AAIxC,oBAAY,MAAM,GAAG;IACnB,cAAc,CAAC,EAAE,uBAAuB,CAAC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;gEAEqD,MAAM,KAAG,YAAY;AAA5E,wBAoBE"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { FieldNode, FragmentDefinitionNode } from "graphql";
|
|
2
|
+
import { CacheManagerContext, FieldPathChecklist } from "../defs";
|
|
3
|
+
import { FragmentSpreadCheckist } from "./createFragmentSpreadChecklist";
|
|
4
|
+
declare const filterField: (field: FieldNode | FragmentDefinitionNode, fieldPathChecklist: FieldPathChecklist, fragmentSpreadChecklist: FragmentSpreadCheckist, ancestorRequestFieldPath: string, context: CacheManagerContext) => boolean;
|
|
5
|
+
export default filterField;
|
|
6
|
+
//# sourceMappingURL=filterField.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filterField.d.ts","sourceRoot":"","sources":["../../../src/helpers/filterField.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAA8B,MAAM,SAAS,CAAC;AAG9F,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAKzE,QAAA,MAAM,WAAW,UACR,SAAS,GAAG,sBAAsB,mEAEhB,sBAAsB,4BACrB,MAAM,WACvB,mBAAmB,KAC3B,OAqDF,CAAC;AAEF,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { DocumentNode } from "graphql";
|
|
2
|
+
import { CacheManagerContext, FieldPathChecklist } from "../defs";
|
|
3
|
+
import { FragmentSpreadCheckist } from "./createFragmentSpreadChecklist";
|
|
4
|
+
declare const _default: (ast: DocumentNode, fieldPathChecklist: FieldPathChecklist, fragmentSpreadChecklist: FragmentSpreadCheckist, context: CacheManagerContext) => {
|
|
5
|
+
definitions: import("graphql").DefinitionNode[];
|
|
6
|
+
kind: import("graphql").Kind.DOCUMENT;
|
|
7
|
+
loc?: import("graphql").Location | undefined;
|
|
8
|
+
};
|
|
9
|
+
export default _default;
|
|
10
|
+
//# sourceMappingURL=filterFragmentDefinitions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filterFragmentDefinitions.d.ts","sourceRoot":"","sources":["../../../src/helpers/filterFragmentDefinitions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;8BAIlE,YAAY,mEAEQ,sBAAsB,WACtC,mBAAmB;;;;;AAJ9B,wBAgCE"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { FieldNode, FragmentDefinitionNode } from "graphql";
|
|
2
|
+
import { FragmentSpreadFieldCounter } from "../defs";
|
|
3
|
+
import { FragmentSpreadCheckist } from "./createFragmentSpreadChecklist";
|
|
4
|
+
declare const _default: (field: FieldNode | FragmentDefinitionNode, fragmentSpreadFieldCounter: FragmentSpreadFieldCounter, fragmentSpreadChecklist: FragmentSpreadCheckist, ancestorRequestFieldPath: string) => void;
|
|
5
|
+
export default _default;
|
|
6
|
+
//# sourceMappingURL=filterFragmentSpreads.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filterFragmentSpreads.d.ts","sourceRoot":"","sources":["../../../src/helpers/filterFragmentSpreads.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAE5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;gCAGhE,SAAS,GAAG,sBAAsB,8BACb,0BAA0B,2BAC7B,sBAAsB,4BACrB,MAAM;AAJlC,wBAqBE"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { FieldNode, FragmentDefinitionNode } from "graphql";
|
|
2
|
+
import { CacheManagerContext } from "../defs";
|
|
3
|
+
declare const _default: (field: FieldNode | FragmentDefinitionNode, { fragmentDefinitions, typeIDKey }: CacheManagerContext) => boolean;
|
|
4
|
+
export default _default;
|
|
5
|
+
//# sourceMappingURL=filterIDsAndTypeNames.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filterIDsAndTypeNames.d.ts","sourceRoot":"","sources":["../../../src/helpers/filterIDsAndTypeNames.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;gCAEvB,SAAS,GAAG,sBAAsB,sCAAsC,mBAAmB;AAAlH,wBAyBE"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { FieldNode, FragmentDefinitionNode } from "graphql";
|
|
2
|
+
import { CacheManagerContext } from "..";
|
|
3
|
+
declare const _default: (field: FieldNode | FragmentDefinitionNode, { fragmentDefinitions, typeIDKey }: CacheManagerContext) => boolean;
|
|
4
|
+
export default _default;
|
|
5
|
+
//# sourceMappingURL=filterInlineFragments.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filterInlineFragments.d.ts","sourceRoot":"","sources":["../../../src/helpers/filterInlineFragments.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,IAAI,CAAC;gCAElB,SAAS,GAAG,sBAAsB,sCAAsC,mBAAmB;AAAlH,wBAwBE"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { PlainObjectMap } from "@graphql-box/core";
|
|
2
|
+
import { SelectionNode } from "graphql";
|
|
3
|
+
import { CacheManagerContext, KeysAndPaths } from "../defs";
|
|
4
|
+
declare const _default: (fieldData: PlainObjectMap, selectionNodes: readonly SelectionNode[], ancestorKeysAndPaths: KeysAndPaths, context: CacheManagerContext) => PlainObjectMap<any>;
|
|
5
|
+
export default _default;
|
|
6
|
+
//# sourceMappingURL=filterOutPropsWithArgsOrDirectives.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filterOutPropsWithArgsOrDirectives.d.ts","sourceRoot":"","sources":["../../../src/helpers/filterOutPropsWithArgsOrDirectives.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAa,aAAa,EAAE,MAAM,SAAS,CAAC;AAEnD,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;oCAI/C,cAAc,kBACT,SAAS,aAAa,EAAE,wBAClB,YAAY,WACzB,mBAAmB;AAJ9B,wBAsBE"}
|