@graphql-box/cache-manager 2.1.1 → 2.2.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.
Files changed (116) hide show
  1. package/lib/browser/index.js +1 -1
  2. package/lib/browser/index.js.map +1 -1
  3. package/lib/browser/production.analysis.txt +139 -17
  4. package/lib/main/debug/log-cache-entry/index.js.map +1 -1
  5. package/lib/main/debug/log-partial-compiled/index.js.map +1 -1
  6. package/lib/main/helpers/buildKeysAndPaths.js +73 -0
  7. package/lib/main/helpers/buildKeysAndPaths.js.map +1 -0
  8. package/lib/main/helpers/checkFieldPathChecklist.js +40 -0
  9. package/lib/main/helpers/checkFieldPathChecklist.js.map +1 -0
  10. package/lib/main/helpers/createFragmentSpreadChecklist.js +28 -0
  11. package/lib/main/helpers/createFragmentSpreadChecklist.js.map +1 -0
  12. package/lib/main/helpers/deriveOpCacheability.js +46 -0
  13. package/lib/main/helpers/deriveOpCacheability.js.map +1 -0
  14. package/lib/main/helpers/filterField.js +97 -0
  15. package/lib/main/helpers/filterField.js.map +1 -0
  16. package/lib/main/helpers/filterFragmentDefinitions.js +50 -0
  17. package/lib/main/helpers/filterFragmentDefinitions.js.map +1 -0
  18. package/lib/main/helpers/filterFragmentSpreads.js +37 -0
  19. package/lib/main/helpers/filterFragmentSpreads.js.map +1 -0
  20. package/lib/main/helpers/filterIDsAndTypeNames.js +47 -0
  21. package/lib/main/helpers/filterIDsAndTypeNames.js.map +1 -0
  22. package/lib/main/helpers/filterInlineFragments.js +42 -0
  23. package/lib/main/helpers/filterInlineFragments.js.map +1 -0
  24. package/lib/main/helpers/filterOutPropsWithArgsOrDirectives.js +39 -0
  25. package/lib/main/helpers/filterOutPropsWithArgsOrDirectives.js.map +1 -0
  26. package/lib/main/helpers/filterQuery.js +59 -0
  27. package/lib/main/helpers/filterQuery.js.map +1 -0
  28. package/lib/main/helpers/normalizeResponseData.js +23 -0
  29. package/lib/main/helpers/normalizeResponseData.js.map +1 -0
  30. package/lib/main/helpers/validTypeIDValue.js +20 -0
  31. package/lib/main/helpers/validTypeIDValue.js.map +1 -0
  32. package/lib/main/main/index.js +477 -476
  33. package/lib/main/main/index.js.map +1 -1
  34. package/lib/module/debug/log-cache-entry/index.js.map +1 -1
  35. package/lib/module/debug/log-partial-compiled/index.js.map +1 -1
  36. package/lib/module/helpers/buildKeysAndPaths.js +54 -0
  37. package/lib/module/helpers/buildKeysAndPaths.js.map +1 -0
  38. package/lib/module/helpers/checkFieldPathChecklist.js +31 -0
  39. package/lib/module/helpers/checkFieldPathChecklist.js.map +1 -0
  40. package/lib/module/helpers/createFragmentSpreadChecklist.js +15 -0
  41. package/lib/module/helpers/createFragmentSpreadChecklist.js.map +1 -0
  42. package/lib/module/helpers/deriveOpCacheability.js +32 -0
  43. package/lib/module/helpers/deriveOpCacheability.js.map +1 -0
  44. package/lib/module/helpers/filterField.js +81 -0
  45. package/lib/module/helpers/filterField.js.map +1 -0
  46. package/lib/module/helpers/filterFragmentDefinitions.js +39 -0
  47. package/lib/module/helpers/filterFragmentDefinitions.js.map +1 -0
  48. package/lib/module/helpers/filterFragmentSpreads.js +23 -0
  49. package/lib/module/helpers/filterFragmentSpreads.js.map +1 -0
  50. package/lib/module/helpers/filterIDsAndTypeNames.js +36 -0
  51. package/lib/module/helpers/filterIDsAndTypeNames.js.map +1 -0
  52. package/lib/module/helpers/filterInlineFragments.js +32 -0
  53. package/lib/module/helpers/filterInlineFragments.js.map +1 -0
  54. package/lib/module/helpers/filterOutPropsWithArgsOrDirectives.js +25 -0
  55. package/lib/module/helpers/filterOutPropsWithArgsOrDirectives.js.map +1 -0
  56. package/lib/module/helpers/filterQuery.js +43 -0
  57. package/lib/module/helpers/filterQuery.js.map +1 -0
  58. package/lib/module/helpers/normalizeResponseData.js +11 -0
  59. package/lib/module/helpers/normalizeResponseData.js.map +1 -0
  60. package/lib/module/helpers/validTypeIDValue.js +8 -0
  61. package/lib/module/helpers/validTypeIDValue.js.map +1 -0
  62. package/lib/module/main/index.js +474 -475
  63. package/lib/module/main/index.js.map +1 -1
  64. package/lib/types/debug/log-cache-entry/index.d.ts.map +1 -1
  65. package/lib/types/debug/log-cache-query/index.d.ts.map +1 -1
  66. package/lib/types/debug/log-partial-compiled/index.d.ts.map +1 -1
  67. package/lib/types/defs/index.d.ts +19 -9
  68. package/lib/types/defs/index.d.ts.map +1 -1
  69. package/lib/types/helpers/buildKeysAndPaths.d.ts +10 -0
  70. package/lib/types/helpers/buildKeysAndPaths.d.ts.map +1 -0
  71. package/lib/types/helpers/checkFieldPathChecklist.d.ts +4 -0
  72. package/lib/types/helpers/checkFieldPathChecklist.d.ts.map +1 -0
  73. package/lib/types/helpers/createFragmentSpreadChecklist.d.ts +11 -0
  74. package/lib/types/helpers/createFragmentSpreadChecklist.d.ts.map +1 -0
  75. package/lib/types/helpers/deriveOpCacheability.d.ts +10 -0
  76. package/lib/types/helpers/deriveOpCacheability.d.ts.map +1 -0
  77. package/lib/types/helpers/filterField.d.ts +6 -0
  78. package/lib/types/helpers/filterField.d.ts.map +1 -0
  79. package/lib/types/helpers/filterFragmentDefinitions.d.ts +10 -0
  80. package/lib/types/helpers/filterFragmentDefinitions.d.ts.map +1 -0
  81. package/lib/types/helpers/filterFragmentSpreads.d.ts +6 -0
  82. package/lib/types/helpers/filterFragmentSpreads.d.ts.map +1 -0
  83. package/lib/types/helpers/filterIDsAndTypeNames.d.ts +5 -0
  84. package/lib/types/helpers/filterIDsAndTypeNames.d.ts.map +1 -0
  85. package/lib/types/helpers/filterInlineFragments.d.ts +5 -0
  86. package/lib/types/helpers/filterInlineFragments.d.ts.map +1 -0
  87. package/lib/types/helpers/filterOutPropsWithArgsOrDirectives.d.ts +6 -0
  88. package/lib/types/helpers/filterOutPropsWithArgsOrDirectives.d.ts.map +1 -0
  89. package/lib/types/helpers/filterQuery.d.ts +5 -0
  90. package/lib/types/helpers/filterQuery.d.ts.map +1 -0
  91. package/lib/types/helpers/normalizeResponseData.d.ts +10 -0
  92. package/lib/types/helpers/normalizeResponseData.d.ts.map +1 -0
  93. package/lib/types/helpers/validTypeIDValue.d.ts +3 -0
  94. package/lib/types/helpers/validTypeIDValue.d.ts.map +1 -0
  95. package/lib/types/main/index.d.ts +13 -20
  96. package/lib/types/main/index.d.ts.map +1 -1
  97. package/package.json +2 -2
  98. package/src/__snapshots__/index.test.ts.snap +17449 -7185
  99. package/src/debug/log-cache-entry/index.ts +1 -1
  100. package/src/debug/log-partial-compiled/index.ts +1 -1
  101. package/src/defs/index.ts +18 -10
  102. package/src/helpers/buildKeysAndPaths.ts +71 -0
  103. package/src/helpers/checkFieldPathChecklist.ts +21 -0
  104. package/src/helpers/createFragmentSpreadChecklist.ts +17 -0
  105. package/src/helpers/deriveOpCacheability.ts +32 -0
  106. package/src/helpers/filterField.ts +73 -0
  107. package/src/helpers/filterFragmentDefinitions.ts +40 -0
  108. package/src/helpers/filterFragmentSpreads.ts +28 -0
  109. package/src/helpers/filterIDsAndTypeNames.ts +31 -0
  110. package/src/helpers/filterInlineFragments.ts +29 -0
  111. package/src/helpers/filterOutPropsWithArgsOrDirectives.ts +30 -0
  112. package/src/helpers/filterQuery.ts +38 -0
  113. package/src/helpers/normalizeResponseData.ts +9 -0
  114. package/src/helpers/validTypeIDValue.ts +11 -0
  115. package/src/index.test.ts +179 -3
  116. package/src/main/index.ts +516 -499
package/src/index.test.ts CHANGED
@@ -16,8 +16,7 @@ import {
16
16
  requestFieldTypeMaps,
17
17
  responses,
18
18
  } from "@graphql-box/test-utils";
19
- import { CacheManager, CacheManagerDef } from ".";
20
- import { AnalyzeQueryResult } from "./defs";
19
+ import { AnalyzeQueryResult, CacheManager, CacheManagerDef } from ".";
21
20
 
22
21
  describe("@graphql-box/cache-manager >>", () => {
23
22
  const realDateNow = Date.now.bind(global.Date);
@@ -31,7 +30,7 @@ describe("@graphql-box/cache-manager >>", () => {
31
30
  global.Date.now = realDateNow;
32
31
  });
33
32
 
34
- describe("resolve >>", () => {
33
+ describe("resolveRequest >>", () => {
35
34
  let responseData: ResponseData;
36
35
  let requestData: RequestData;
37
36
 
@@ -709,6 +708,59 @@ describe("@graphql-box/cache-manager >>", () => {
709
708
  });
710
709
  });
711
710
  });
711
+
712
+ describe("defer >>", () => {
713
+ describe("cascading cache control >>", () => {
714
+ beforeAll(async () => {
715
+ // @ts-ignore
716
+ jest.spyOn(CacheManager, "_isValid").mockReturnValue(true);
717
+
718
+ cacheManager = await CacheManager.init({
719
+ cache: new Cachemap({
720
+ name: "cachemap",
721
+ store: map(),
722
+ type: "someType",
723
+ }),
724
+ cascadeCacheControl: true,
725
+ typeIDKey: DEFAULT_TYPE_ID_KEY,
726
+ });
727
+
728
+ requestData = getRequestData(parsedRequests.deferQuerySet.initial);
729
+
730
+ responseData = await cacheManager.resolveQuery(
731
+ requestData,
732
+ requestData,
733
+ responses.deferQuerySet.initial,
734
+ { awaitDataCaching: true },
735
+ getRequestContext({ fieldTypeMap: requestFieldTypeMaps.deferQuery }),
736
+ );
737
+
738
+ const { cacheMetadata, data } = responses.deferQuerySet.partial;
739
+
740
+ // @ts-ignore
741
+ jest.spyOn(cacheManager._partialQueryResponses, "get").mockReturnValue({
742
+ cacheMetadata: rehydrateCacheMetadata(cacheMetadata as DehydratedCacheMetadata),
743
+ data,
744
+ });
745
+
746
+ responseData = await cacheManager.resolveQuery(
747
+ getRequestData(parsedRequests.deferQuerySet.full),
748
+ getRequestData(parsedRequests.deferQuerySet.updated),
749
+ responses.deferQuerySet.updated,
750
+ { awaitDataCaching: true },
751
+ getRequestContext({ fieldTypeMap: requestFieldTypeMaps.deferQuery, queryFiltered: true }),
752
+ );
753
+ });
754
+
755
+ it("correct response data", () => {
756
+ expect(responseData).toMatchSnapshot();
757
+ });
758
+
759
+ it("correct cache data", async () => {
760
+ expect(await cacheManager.cache.export()).toMatchSnapshot();
761
+ });
762
+ });
763
+ });
712
764
  });
713
765
  });
714
766
 
@@ -799,6 +851,34 @@ describe("@graphql-box/cache-manager >>", () => {
799
851
  expect(analyzeQueryResult.response).toBeUndefined();
800
852
  });
801
853
  });
854
+
855
+ describe("defer >>", () => {
856
+ beforeAll(async () => {
857
+ cacheManager = await CacheManager.init({
858
+ cache: new Cachemap({
859
+ name: "cachemap",
860
+ store: map(),
861
+ type: "someType",
862
+ }),
863
+ typeIDKey: DEFAULT_TYPE_ID_KEY,
864
+ });
865
+
866
+ analyzeQueryResult = await cacheManager.analyzeQuery(
867
+ getRequestData(parsedRequests.deferQuery),
868
+ { awaitDataCaching: true },
869
+ getRequestContext({ fieldTypeMap: requestFieldTypeMaps.deferQuery }),
870
+ );
871
+ });
872
+
873
+ it("correct request data", () => {
874
+ const { ast, ...otherProps } = analyzeQueryResult.updated as RequestData;
875
+ expect(otherProps).toMatchSnapshot();
876
+ });
877
+
878
+ it("no response data", () => {
879
+ expect(analyzeQueryResult.response).toBeUndefined();
880
+ });
881
+ });
802
882
  });
803
883
 
804
884
  describe("entire matching data >>", () => {
@@ -946,6 +1026,51 @@ describe("@graphql-box/cache-manager >>", () => {
946
1026
  expect(await cacheManager.cache.export()).toMatchSnapshot();
947
1027
  });
948
1028
  });
1029
+
1030
+ describe("defer >>", () => {
1031
+ beforeAll(async () => {
1032
+ // @ts-ignore
1033
+ jest.spyOn(CacheManager, "_isValid").mockReturnValue(true);
1034
+
1035
+ cacheManager = await CacheManager.init({
1036
+ cache: new Cachemap({
1037
+ name: "cachemap",
1038
+ store: map(),
1039
+ type: "someType",
1040
+ }),
1041
+ cascadeCacheControl: true,
1042
+ typeIDKey: DEFAULT_TYPE_ID_KEY,
1043
+ });
1044
+
1045
+ const requestData = getRequestData(parsedRequests.deferQuery);
1046
+
1047
+ await cacheManager.resolveQuery(
1048
+ requestData,
1049
+ requestData,
1050
+ responses.deferQuery,
1051
+ { awaitDataCaching: true },
1052
+ getRequestContext({ fieldTypeMap: requestFieldTypeMaps.deferQuery }),
1053
+ );
1054
+
1055
+ analyzeQueryResult = await cacheManager.analyzeQuery(
1056
+ getRequestData(parsedRequests.deferQuery),
1057
+ { awaitDataCaching: true },
1058
+ getRequestContext({ fieldTypeMap: requestFieldTypeMaps.deferQuery }),
1059
+ );
1060
+ });
1061
+
1062
+ it("no request data", () => {
1063
+ expect(analyzeQueryResult.updated).toBeUndefined();
1064
+ });
1065
+
1066
+ it("correct response data", () => {
1067
+ expect(analyzeQueryResult.response).toMatchSnapshot();
1068
+ });
1069
+
1070
+ it("correct cache data", async () => {
1071
+ expect(await cacheManager.cache.export()).toMatchSnapshot();
1072
+ });
1073
+ });
949
1074
  });
950
1075
 
951
1076
  describe("some matching data >>", () => {
@@ -1111,6 +1236,57 @@ describe("@graphql-box/cache-manager >>", () => {
1111
1236
  expect(cacheManager._partialQueryResponses).toMatchSnapshot();
1112
1237
  });
1113
1238
  });
1239
+
1240
+ describe("defer >>", () => {
1241
+ beforeAll(async () => {
1242
+ // @ts-ignore
1243
+ jest.spyOn(CacheManager, "_isValid").mockReturnValue(true);
1244
+
1245
+ cacheManager = await CacheManager.init({
1246
+ cache: new Cachemap({
1247
+ name: "cachemap",
1248
+ store: map(),
1249
+ type: "someType",
1250
+ }),
1251
+ cascadeCacheControl: true,
1252
+ typeIDKey: DEFAULT_TYPE_ID_KEY,
1253
+ });
1254
+
1255
+ const requestData = getRequestData(parsedRequests.deferQuerySet.initial);
1256
+
1257
+ await cacheManager.resolveQuery(
1258
+ requestData,
1259
+ requestData,
1260
+ responses.deferQuerySet.initial,
1261
+ { awaitDataCaching: true },
1262
+ getRequestContext({ fieldTypeMap: requestFieldTypeMaps.deferQuery }),
1263
+ );
1264
+
1265
+ analyzeQueryResult = await cacheManager.analyzeQuery(
1266
+ getRequestData(parsedRequests.deferQuery),
1267
+ { awaitDataCaching: true },
1268
+ getRequestContext({ fieldTypeMap: requestFieldTypeMaps.deferQuery }),
1269
+ );
1270
+ });
1271
+
1272
+ it("correct request data", () => {
1273
+ const { ast, ...otherProps } = analyzeQueryResult.updated as RequestData;
1274
+ expect(otherProps).toMatchSnapshot();
1275
+ });
1276
+
1277
+ it("no response data", () => {
1278
+ expect(analyzeQueryResult.response).toBeUndefined();
1279
+ });
1280
+
1281
+ it("correct cache data", async () => {
1282
+ expect(await cacheManager.cache.export()).toMatchSnapshot();
1283
+ });
1284
+
1285
+ it("correct partial data", () => {
1286
+ // @ts-ignore
1287
+ expect(cacheManager._partialQueryResponses).toMatchSnapshot();
1288
+ });
1289
+ });
1114
1290
  });
1115
1291
  });
1116
1292
  });