@expo/entity 0.41.0 → 0.42.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 (430) hide show
  1. package/build/AuthorizationResultBasedEntityAssociationLoader.d.ts +16 -16
  2. package/build/AuthorizationResultBasedEntityAssociationLoader.js.map +1 -1
  3. package/build/AuthorizationResultBasedEntityLoader.d.ts +39 -67
  4. package/build/AuthorizationResultBasedEntityLoader.js +85 -62
  5. package/build/AuthorizationResultBasedEntityLoader.js.map +1 -1
  6. package/build/AuthorizationResultBasedEntityMutator.d.ts +16 -16
  7. package/build/AuthorizationResultBasedEntityMutator.js.map +1 -1
  8. package/build/ComposedEntityCacheAdapter.d.ts +7 -6
  9. package/build/ComposedEntityCacheAdapter.js +28 -28
  10. package/build/ComposedEntityCacheAdapter.js.map +1 -1
  11. package/build/ComposedSecondaryEntityCache.d.ts +1 -1
  12. package/build/ComposedSecondaryEntityCache.js.map +1 -1
  13. package/build/EnforcingEntityAssociationLoader.d.ts +15 -15
  14. package/build/EnforcingEntityAssociationLoader.js.map +1 -1
  15. package/build/EnforcingEntityCreator.d.ts +2 -2
  16. package/build/EnforcingEntityDeleter.d.ts +2 -2
  17. package/build/EnforcingEntityLoader.d.ts +104 -18
  18. package/build/EnforcingEntityLoader.js +113 -12
  19. package/build/EnforcingEntityLoader.js.map +1 -1
  20. package/build/EnforcingEntityUpdater.d.ts +2 -2
  21. package/build/Entity.d.ts +10 -10
  22. package/build/Entity.js.map +1 -1
  23. package/build/EntityAssociationLoader.d.ts +3 -3
  24. package/build/EntityCompanion.d.ts +5 -5
  25. package/build/EntityCompanion.js.map +1 -1
  26. package/build/EntityCompanionProvider.d.ts +6 -6
  27. package/build/EntityCompanionProvider.js.map +1 -1
  28. package/build/EntityConfiguration.d.ts +46 -5
  29. package/build/EntityConfiguration.js +39 -1
  30. package/build/EntityConfiguration.js.map +1 -1
  31. package/build/EntityCreator.d.ts +4 -4
  32. package/build/EntityDatabaseAdapter.d.ts +15 -14
  33. package/build/EntityDatabaseAdapter.js +20 -12
  34. package/build/EntityDatabaseAdapter.js.map +1 -1
  35. package/build/EntityDeleter.d.ts +4 -4
  36. package/build/EntityFieldDefinition.d.ts +20 -10
  37. package/build/EntityFieldDefinition.js +3 -1
  38. package/build/EntityFieldDefinition.js.map +1 -1
  39. package/build/EntityFields.d.ts +14 -12
  40. package/build/EntityFields.js.map +1 -1
  41. package/build/EntityLoader.d.ts +5 -5
  42. package/build/EntityLoaderFactory.d.ts +3 -3
  43. package/build/EntityLoaderFactory.js.map +1 -1
  44. package/build/EntityLoaderUtils.d.ts +2 -2
  45. package/build/EntityLoaderUtils.js +27 -1
  46. package/build/EntityLoaderUtils.js.map +1 -1
  47. package/build/EntityMutationInfo.d.ts +2 -2
  48. package/build/EntityMutationTriggerConfiguration.d.ts +14 -14
  49. package/build/EntityMutationTriggerConfiguration.js.map +1 -1
  50. package/build/EntityMutationValidator.d.ts +2 -2
  51. package/build/EntityMutatorFactory.d.ts +5 -5
  52. package/build/EntityMutatorFactory.js.map +1 -1
  53. package/build/EntityPrivacyPolicy.d.ts +14 -14
  54. package/build/EntityPrivacyPolicy.js.map +1 -1
  55. package/build/EntitySecondaryCacheLoader.d.ts +4 -4
  56. package/build/EntityUpdater.d.ts +4 -4
  57. package/build/GenericEntityCacheAdapter.d.ts +7 -6
  58. package/build/GenericEntityCacheAdapter.js +13 -14
  59. package/build/GenericEntityCacheAdapter.js.map +1 -1
  60. package/build/GenericSecondaryEntityCache.d.ts +3 -3
  61. package/build/GenericSecondaryEntityCache.js.map +1 -1
  62. package/build/IEntityCacheAdapter.d.ts +17 -16
  63. package/build/IEntityCacheAdapterProvider.d.ts +1 -1
  64. package/build/IEntityDatabaseAdapterProvider.d.ts +1 -1
  65. package/build/IEntityGenericCacher.d.ts +15 -5
  66. package/build/ReadonlyEntity.d.ts +8 -8
  67. package/build/ReadonlyEntity.js.map +1 -1
  68. package/build/ViewerContext.d.ts +1 -1
  69. package/build/ViewerScopedEntityCompanion.d.ts +5 -5
  70. package/build/ViewerScopedEntityCompanionProvider.d.ts +1 -1
  71. package/build/ViewerScopedEntityLoaderFactory.d.ts +3 -3
  72. package/build/ViewerScopedEntityMutatorFactory.d.ts +5 -5
  73. package/build/entityUtils.d.ts +1 -1
  74. package/build/entityUtils.js.map +1 -1
  75. package/build/errors/EntityInvalidFieldValueError.d.ts +2 -2
  76. package/build/errors/EntityNotAuthorizedError.d.ts +1 -1
  77. package/build/errors/EntityNotFoundError.d.ts +2 -2
  78. package/build/index.d.ts +7 -7
  79. package/build/index.js +8 -13
  80. package/build/index.js.map +1 -1
  81. package/build/internal/CompositeFieldHolder.d.ts +48 -0
  82. package/build/internal/CompositeFieldHolder.js +116 -0
  83. package/build/internal/CompositeFieldHolder.js.map +1 -0
  84. package/build/internal/CompositeFieldValueMap.d.ts +15 -0
  85. package/build/internal/CompositeFieldValueMap.js +51 -0
  86. package/build/internal/CompositeFieldValueMap.js.map +1 -0
  87. package/build/internal/EntityDataManager.d.ts +16 -16
  88. package/build/internal/EntityDataManager.js +42 -45
  89. package/build/internal/EntityDataManager.js.map +1 -1
  90. package/build/internal/EntityFieldTransformationUtils.d.ts +5 -5
  91. package/build/internal/EntityFieldTransformationUtils.js.map +1 -1
  92. package/build/internal/EntityLoadInterfaces.d.ts +104 -0
  93. package/build/internal/EntityLoadInterfaces.js +25 -0
  94. package/build/internal/EntityLoadInterfaces.js.map +1 -0
  95. package/build/internal/EntityTableDataCoordinator.d.ts +6 -6
  96. package/build/internal/EntityTableDataCoordinator.js.map +1 -1
  97. package/build/internal/ReadThroughEntityCache.d.ts +17 -16
  98. package/build/internal/ReadThroughEntityCache.js +36 -36
  99. package/build/internal/ReadThroughEntityCache.js.map +1 -1
  100. package/build/internal/SingleFieldHolder.d.ts +34 -0
  101. package/build/internal/SingleFieldHolder.js +90 -0
  102. package/build/internal/SingleFieldHolder.js.map +1 -0
  103. package/build/metrics/EntityMetricsUtils.d.ts +2 -1
  104. package/build/metrics/EntityMetricsUtils.js.map +1 -1
  105. package/build/metrics/IEntityMetricsAdapter.d.ts +5 -0
  106. package/build/metrics/IEntityMetricsAdapter.js.map +1 -1
  107. package/build/rules/AlwaysAllowPrivacyPolicyRule.d.ts +2 -2
  108. package/build/rules/AlwaysAllowPrivacyPolicyRule.js.map +1 -1
  109. package/build/rules/AlwaysDenyPrivacyPolicyRule.d.ts +2 -2
  110. package/build/rules/AlwaysDenyPrivacyPolicyRule.js.map +1 -1
  111. package/build/rules/AlwaysSkipPrivacyPolicyRule.d.ts +2 -2
  112. package/build/rules/AlwaysSkipPrivacyPolicyRule.js.map +1 -1
  113. package/build/rules/PrivacyPolicyRule.d.ts +2 -2
  114. package/build/tsconfig.build.tsbuildinfo +1 -0
  115. package/build/utils/EntityPrivacyUtils.d.ts +4 -4
  116. package/build/utils/EntityPrivacyUtils.js.map +1 -1
  117. package/build/utils/collections/SerializableKeyMap.d.ts +27 -0
  118. package/build/utils/collections/SerializableKeyMap.js +60 -0
  119. package/build/utils/collections/SerializableKeyMap.js.map +1 -0
  120. package/build/utils/collections/maps.js +1 -2
  121. package/build/utils/collections/maps.js.map +1 -1
  122. package/build/utils/collections/sets.d.ts +1 -0
  123. package/build/utils/collections/sets.js +7 -0
  124. package/build/utils/collections/sets.js.map +1 -0
  125. package/build/utils/mergeEntityMutationTriggerConfigurations.d.ts +1 -1
  126. package/package.json +8 -5
  127. package/src/AuthorizationResultBasedEntityAssociationLoader.ts +56 -49
  128. package/src/AuthorizationResultBasedEntityLoader.ts +194 -81
  129. package/src/AuthorizationResultBasedEntityMutator.ts +71 -45
  130. package/src/ComposedEntityCacheAdapter.ts +55 -46
  131. package/src/ComposedSecondaryEntityCache.ts +5 -2
  132. package/src/EnforcingEntityAssociationLoader.ts +52 -44
  133. package/src/EnforcingEntityCreator.ts +5 -5
  134. package/src/EnforcingEntityDeleter.ts +5 -5
  135. package/src/EnforcingEntityLoader.ts +158 -21
  136. package/src/EnforcingEntityUpdater.ts +5 -5
  137. package/src/Entity.ts +39 -39
  138. package/src/EntityAssociationLoader.ts +6 -6
  139. package/src/EntityCompanion.ts +11 -11
  140. package/src/EntityCompanionProvider.ts +21 -18
  141. package/src/EntityConfiguration.ts +123 -9
  142. package/src/EntityCreator.ts +7 -7
  143. package/src/EntityDatabaseAdapter.ts +51 -28
  144. package/src/EntityDeleter.ts +7 -7
  145. package/src/EntityFieldDefinition.ts +32 -12
  146. package/src/EntityFields.ts +49 -12
  147. package/src/EntityLoader.ts +8 -8
  148. package/src/EntityLoaderFactory.ts +8 -8
  149. package/src/EntityLoaderUtils.ts +39 -10
  150. package/src/EntityMutationInfo.ts +6 -6
  151. package/src/EntityMutationTriggerConfiguration.ts +68 -20
  152. package/src/EntityMutationValidator.ts +4 -4
  153. package/src/EntityMutatorFactory.ts +13 -13
  154. package/src/EntityPrivacyPolicy.ts +50 -26
  155. package/src/EntitySecondaryCacheLoader.ts +6 -6
  156. package/src/EntityUpdater.ts +7 -7
  157. package/src/GenericEntityCacheAdapter.ts +39 -28
  158. package/src/GenericSecondaryEntityCache.ts +6 -3
  159. package/src/IEntityCacheAdapter.ts +45 -25
  160. package/src/IEntityCacheAdapterProvider.ts +3 -3
  161. package/src/IEntityDatabaseAdapterProvider.ts +3 -3
  162. package/src/IEntityGenericCacher.ts +33 -5
  163. package/src/ReadonlyEntity.ts +24 -24
  164. package/src/ViewerContext.ts +5 -5
  165. package/src/ViewerScopedEntityCompanion.ts +7 -7
  166. package/src/ViewerScopedEntityCompanionProvider.ts +6 -6
  167. package/src/ViewerScopedEntityLoaderFactory.ts +7 -7
  168. package/src/ViewerScopedEntityMutatorFactory.ts +8 -8
  169. package/src/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.ts +4 -4
  170. package/src/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.ts +14 -13
  171. package/src/__tests__/AuthorizationResultBasedEntityLoader-test.ts +367 -69
  172. package/src/__tests__/ComposedCacheAdapter-test.ts +235 -117
  173. package/src/__tests__/EnforcingEntityLoader-test.ts +135 -1
  174. package/src/__tests__/Entity-test.ts +2 -2
  175. package/src/__tests__/EntityAssociationLoader-test.ts +2 -2
  176. package/src/__tests__/EntityCommonUseCases-test.ts +11 -11
  177. package/src/__tests__/EntityCompanion-test.ts +4 -4
  178. package/src/__tests__/EntityCompanionProvider-test.ts +9 -8
  179. package/src/__tests__/EntityConfiguration-test.ts +85 -6
  180. package/src/__tests__/EntityDatabaseAdapter-test.ts +113 -17
  181. package/src/__tests__/EntityEdges-test.ts +97 -72
  182. package/src/__tests__/EntityFields-test.ts +2 -2
  183. package/src/__tests__/EntityLoader-test.ts +2 -2
  184. package/src/__tests__/EntityMutator-MutationCacheConsistency-test.ts +11 -11
  185. package/src/__tests__/EntityMutator-SingleCompositeFieldCacheConsistency-test.ts +73 -0
  186. package/src/__tests__/EntityMutator-test.ts +74 -46
  187. package/src/__tests__/EntityPrivacyPolicy-test.ts +51 -74
  188. package/src/__tests__/EntityQueryContext-test.ts +1 -1
  189. package/src/__tests__/EntitySecondaryCacheLoader-test.ts +3 -3
  190. package/src/__tests__/EntitySelfReferentialEdges-test.ts +64 -39
  191. package/src/__tests__/GenericEntityCacheAdapter-test.ts +83 -28
  192. package/src/__tests__/ReadonlyEntity-test.ts +3 -3
  193. package/src/__tests__/ViewerContext-test.ts +1 -1
  194. package/src/__tests__/ViewerScopedEntityCompanion-test.ts +5 -2
  195. package/src/__tests__/ViewerScopedEntityCompanionProvider-test.ts +1 -1
  196. package/src/__tests__/ViewerScopedEntityMutatorFactory-test.ts +12 -3
  197. package/src/__tests__/cases/TwoEntitySameTableDisjointRows-test.ts +12 -12
  198. package/src/__tests__/cases/TwoEntitySameTableOverlappingRows-test.ts +12 -12
  199. package/src/entityUtils.ts +4 -1
  200. package/src/errors/EntityInvalidFieldValueError.ts +5 -5
  201. package/src/errors/EntityNotAuthorizedError.ts +3 -3
  202. package/src/errors/EntityNotFoundError.ts +5 -5
  203. package/src/index.ts +7 -7
  204. package/src/internal/CompositeFieldHolder.ts +218 -0
  205. package/src/internal/CompositeFieldValueMap.ts +78 -0
  206. package/src/internal/EntityDataManager.ts +107 -96
  207. package/src/internal/EntityFieldTransformationUtils.ts +33 -14
  208. package/src/internal/EntityLoadInterfaces.ts +143 -0
  209. package/src/internal/EntityTableDataCoordinator.ts +8 -5
  210. package/src/internal/ReadThroughEntityCache.ts +63 -50
  211. package/src/internal/SingleFieldHolder.ts +131 -0
  212. package/src/internal/__tests__/CompositeFieldHolder-test.ts +25 -0
  213. package/src/internal/__tests__/CompositeFieldValueMap-test.ts +43 -0
  214. package/src/internal/__tests__/EntityDataManager-test.ts +308 -91
  215. package/src/internal/__tests__/EntityFieldTransformationUtils-test.ts +3 -2
  216. package/src/internal/__tests__/ReadThroughEntityCache-test.ts +315 -107
  217. package/src/metrics/EntityMetricsUtils.ts +7 -2
  218. package/src/metrics/IEntityMetricsAdapter.ts +6 -0
  219. package/src/rules/AlwaysAllowPrivacyPolicyRule.ts +5 -5
  220. package/src/rules/AlwaysDenyPrivacyPolicyRule.ts +5 -5
  221. package/src/rules/AlwaysSkipPrivacyPolicyRule.ts +5 -5
  222. package/src/rules/PrivacyPolicyRule.ts +4 -4
  223. package/src/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.ts +1 -1
  224. package/src/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.ts +1 -1
  225. package/src/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.ts +1 -1
  226. package/src/utils/EntityPrivacyUtils.ts +72 -30
  227. package/src/utils/{testing → __testfixtures__}/PrivacyPolicyRuleTestUtils.ts +26 -26
  228. package/src/{testfixtures → utils/__testfixtures__}/SimpleTestEntity.ts +16 -15
  229. package/src/utils/__testfixtures__/StubCacheAdapter.ts +164 -0
  230. package/src/utils/{testing → __testfixtures__}/StubDatabaseAdapter.ts +19 -12
  231. package/src/utils/{testing → __testfixtures__}/StubDatabaseAdapterProvider.ts +4 -4
  232. package/src/utils/__testfixtures__/TSMockitoExtensions.ts +69 -0
  233. package/src/{testfixtures → utils/__testfixtures__}/TestEntity.ts +21 -15
  234. package/src/{testfixtures → utils/__testfixtures__}/TestEntity2.ts +16 -15
  235. package/src/{testfixtures → utils/__testfixtures__}/TestEntityWithMutationTriggers.ts +23 -22
  236. package/src/{testfixtures → utils/__testfixtures__}/TestViewerContext.ts +1 -1
  237. package/src/utils/{testing → __testfixtures__}/describeFieldTestCase.ts +1 -1
  238. package/src/utils/__tests__/EntityPrivacyUtils-test.ts +62 -66
  239. package/src/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.ts +29 -25
  240. package/src/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.ts +1 -1
  241. package/src/utils/collections/SerializableKeyMap.ts +84 -0
  242. package/src/utils/collections/__tests__/SerializableKeyMap-test.ts +119 -0
  243. package/src/utils/collections/__tests__/sets-test.ts +17 -0
  244. package/src/utils/collections/maps.ts +7 -8
  245. package/src/utils/collections/sets.ts +3 -0
  246. package/src/utils/mergeEntityMutationTriggerConfigurations.ts +5 -5
  247. package/build/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.d.ts +0 -1
  248. package/build/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.js +0 -242
  249. package/build/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.js.map +0 -1
  250. package/build/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.d.ts +0 -26
  251. package/build/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.js +0 -110
  252. package/build/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.js.map +0 -1
  253. package/build/__tests__/AuthorizationResultBasedEntityLoader-test.d.ts +0 -1
  254. package/build/__tests__/AuthorizationResultBasedEntityLoader-test.js +0 -401
  255. package/build/__tests__/AuthorizationResultBasedEntityLoader-test.js.map +0 -1
  256. package/build/__tests__/ComposedCacheAdapter-test.d.ts +0 -1
  257. package/build/__tests__/ComposedCacheAdapter-test.js +0 -229
  258. package/build/__tests__/ComposedCacheAdapter-test.js.map +0 -1
  259. package/build/__tests__/ComposedSecondaryEntityCache-test.d.ts +0 -1
  260. package/build/__tests__/ComposedSecondaryEntityCache-test.js +0 -66
  261. package/build/__tests__/ComposedSecondaryEntityCache-test.js.map +0 -1
  262. package/build/__tests__/EnforcingEntityAssociationLoader-test.d.ts +0 -1
  263. package/build/__tests__/EnforcingEntityAssociationLoader-test.js +0 -115
  264. package/build/__tests__/EnforcingEntityAssociationLoader-test.js.map +0 -1
  265. package/build/__tests__/EnforcingEntityLoader-test.d.ts +0 -1
  266. package/build/__tests__/EnforcingEntityLoader-test.js +0 -253
  267. package/build/__tests__/EnforcingEntityLoader-test.js.map +0 -1
  268. package/build/__tests__/Entity-test.d.ts +0 -1
  269. package/build/__tests__/Entity-test.js +0 -94
  270. package/build/__tests__/Entity-test.js.map +0 -1
  271. package/build/__tests__/EntityAssociationLoader-test.d.ts +0 -1
  272. package/build/__tests__/EntityAssociationLoader-test.js +0 -30
  273. package/build/__tests__/EntityAssociationLoader-test.js.map +0 -1
  274. package/build/__tests__/EntityCommonUseCases-test.d.ts +0 -1
  275. package/build/__tests__/EntityCommonUseCases-test.js +0 -146
  276. package/build/__tests__/EntityCommonUseCases-test.js.map +0 -1
  277. package/build/__tests__/EntityCompanion-test.d.ts +0 -1
  278. package/build/__tests__/EntityCompanion-test.js +0 -77
  279. package/build/__tests__/EntityCompanion-test.js.map +0 -1
  280. package/build/__tests__/EntityCompanionProvider-test.d.ts +0 -1
  281. package/build/__tests__/EntityCompanionProvider-test.js +0 -54
  282. package/build/__tests__/EntityCompanionProvider-test.js.map +0 -1
  283. package/build/__tests__/EntityConfiguration-test.d.ts +0 -1
  284. package/build/__tests__/EntityConfiguration-test.js +0 -103
  285. package/build/__tests__/EntityConfiguration-test.js.map +0 -1
  286. package/build/__tests__/EntityDatabaseAdapter-test.d.ts +0 -1
  287. package/build/__tests__/EntityDatabaseAdapter-test.js +0 -146
  288. package/build/__tests__/EntityDatabaseAdapter-test.js.map +0 -1
  289. package/build/__tests__/EntityEdges-test.d.ts +0 -1
  290. package/build/__tests__/EntityEdges-test.js +0 -723
  291. package/build/__tests__/EntityEdges-test.js.map +0 -1
  292. package/build/__tests__/EntityFields-test.d.ts +0 -1
  293. package/build/__tests__/EntityFields-test.js +0 -63
  294. package/build/__tests__/EntityFields-test.js.map +0 -1
  295. package/build/__tests__/EntityLoader-test.d.ts +0 -1
  296. package/build/__tests__/EntityLoader-test.js +0 -36
  297. package/build/__tests__/EntityLoader-test.js.map +0 -1
  298. package/build/__tests__/EntityMutator-MutationCacheConsistency-test.d.ts +0 -1
  299. package/build/__tests__/EntityMutator-MutationCacheConsistency-test.js +0 -73
  300. package/build/__tests__/EntityMutator-MutationCacheConsistency-test.js.map +0 -1
  301. package/build/__tests__/EntityMutator-test.d.ts +0 -1
  302. package/build/__tests__/EntityMutator-test.js +0 -741
  303. package/build/__tests__/EntityMutator-test.js.map +0 -1
  304. package/build/__tests__/EntityPrivacyPolicy-test.d.ts +0 -1
  305. package/build/__tests__/EntityPrivacyPolicy-test.js +0 -463
  306. package/build/__tests__/EntityPrivacyPolicy-test.js.map +0 -1
  307. package/build/__tests__/EntityQueryContext-test.d.ts +0 -1
  308. package/build/__tests__/EntityQueryContext-test.js +0 -116
  309. package/build/__tests__/EntityQueryContext-test.js.map +0 -1
  310. package/build/__tests__/EntitySecondaryCacheLoader-test.d.ts +0 -1
  311. package/build/__tests__/EntitySecondaryCacheLoader-test.js +0 -60
  312. package/build/__tests__/EntitySecondaryCacheLoader-test.js.map +0 -1
  313. package/build/__tests__/EntitySelfReferentialEdges-test.d.ts +0 -1
  314. package/build/__tests__/EntitySelfReferentialEdges-test.js +0 -201
  315. package/build/__tests__/EntitySelfReferentialEdges-test.js.map +0 -1
  316. package/build/__tests__/GenericEntityCacheAdapter-test.d.ts +0 -1
  317. package/build/__tests__/GenericEntityCacheAdapter-test.js +0 -80
  318. package/build/__tests__/GenericEntityCacheAdapter-test.js.map +0 -1
  319. package/build/__tests__/ReadonlyEntity-test.d.ts +0 -1
  320. package/build/__tests__/ReadonlyEntity-test.js +0 -211
  321. package/build/__tests__/ReadonlyEntity-test.js.map +0 -1
  322. package/build/__tests__/ViewerContext-test.d.ts +0 -1
  323. package/build/__tests__/ViewerContext-test.js +0 -30
  324. package/build/__tests__/ViewerContext-test.js.map +0 -1
  325. package/build/__tests__/ViewerScopedEntityCompanion-test.d.ts +0 -1
  326. package/build/__tests__/ViewerScopedEntityCompanion-test.js +0 -20
  327. package/build/__tests__/ViewerScopedEntityCompanion-test.js.map +0 -1
  328. package/build/__tests__/ViewerScopedEntityCompanionProvider-test.d.ts +0 -1
  329. package/build/__tests__/ViewerScopedEntityCompanionProvider-test.js +0 -20
  330. package/build/__tests__/ViewerScopedEntityCompanionProvider-test.js.map +0 -1
  331. package/build/__tests__/ViewerScopedEntityLoaderFactory-test.d.ts +0 -1
  332. package/build/__tests__/ViewerScopedEntityLoaderFactory-test.js +0 -23
  333. package/build/__tests__/ViewerScopedEntityLoaderFactory-test.js.map +0 -1
  334. package/build/__tests__/ViewerScopedEntityMutatorFactory-test.d.ts +0 -1
  335. package/build/__tests__/ViewerScopedEntityMutatorFactory-test.js +0 -22
  336. package/build/__tests__/ViewerScopedEntityMutatorFactory-test.js.map +0 -1
  337. package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.d.ts +0 -1
  338. package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.js +0 -123
  339. package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.js.map +0 -1
  340. package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.d.ts +0 -1
  341. package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.js +0 -121
  342. package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.js.map +0 -1
  343. package/build/__tests__/entityUtils-test.d.ts +0 -1
  344. package/build/__tests__/entityUtils-test.js +0 -87
  345. package/build/__tests__/entityUtils-test.js.map +0 -1
  346. package/build/internal/__tests__/EntityDataManager-test.d.ts +0 -1
  347. package/build/internal/__tests__/EntityDataManager-test.js +0 -373
  348. package/build/internal/__tests__/EntityDataManager-test.js.map +0 -1
  349. package/build/internal/__tests__/EntityFieldTransformationUtils-test.d.ts +0 -1
  350. package/build/internal/__tests__/EntityFieldTransformationUtils-test.js +0 -136
  351. package/build/internal/__tests__/EntityFieldTransformationUtils-test.js.map +0 -1
  352. package/build/internal/__tests__/ReadThroughEntityCache-test.d.ts +0 -1
  353. package/build/internal/__tests__/ReadThroughEntityCache-test.js +0 -206
  354. package/build/internal/__tests__/ReadThroughEntityCache-test.js.map +0 -1
  355. package/build/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.d.ts +0 -1
  356. package/build/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.js +0 -21
  357. package/build/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.js.map +0 -1
  358. package/build/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.d.ts +0 -1
  359. package/build/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.js +0 -21
  360. package/build/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.js.map +0 -1
  361. package/build/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.d.ts +0 -1
  362. package/build/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.js +0 -21
  363. package/build/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.js.map +0 -1
  364. package/build/testfixtures/DateIDTestEntity.d.ts +0 -19
  365. package/build/testfixtures/DateIDTestEntity.js +0 -48
  366. package/build/testfixtures/DateIDTestEntity.js.map +0 -1
  367. package/build/testfixtures/SimpleTestEntity.d.ts +0 -20
  368. package/build/testfixtures/SimpleTestEntity.js +0 -48
  369. package/build/testfixtures/SimpleTestEntity.js.map +0 -1
  370. package/build/testfixtures/TestEntity.d.ts +0 -30
  371. package/build/testfixtures/TestEntity.js +0 -93
  372. package/build/testfixtures/TestEntity.js.map +0 -1
  373. package/build/testfixtures/TestEntity2.d.ts +0 -20
  374. package/build/testfixtures/TestEntity2.js +0 -51
  375. package/build/testfixtures/TestEntity2.js.map +0 -1
  376. package/build/testfixtures/TestEntityNumberKey.d.ts +0 -19
  377. package/build/testfixtures/TestEntityNumberKey.js +0 -48
  378. package/build/testfixtures/TestEntityNumberKey.js.map +0 -1
  379. package/build/testfixtures/TestEntityWithMutationTriggers.d.ts +0 -36
  380. package/build/testfixtures/TestEntityWithMutationTriggers.js +0 -82
  381. package/build/testfixtures/TestEntityWithMutationTriggers.js.map +0 -1
  382. package/build/testfixtures/TestViewerContext.d.ts +0 -3
  383. package/build/testfixtures/TestViewerContext.js +0 -10
  384. package/build/testfixtures/TestViewerContext.js.map +0 -1
  385. package/build/utils/__tests__/EntityPrivacyUtils-test.d.ts +0 -1
  386. package/build/utils/__tests__/EntityPrivacyUtils-test.js +0 -486
  387. package/build/utils/__tests__/EntityPrivacyUtils-test.js.map +0 -1
  388. package/build/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.d.ts +0 -1
  389. package/build/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.js +0 -178
  390. package/build/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.js.map +0 -1
  391. package/build/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.d.ts +0 -1
  392. package/build/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.js +0 -26
  393. package/build/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.js.map +0 -1
  394. package/build/utils/collections/__tests__/maps-test.d.ts +0 -1
  395. package/build/utils/collections/__tests__/maps-test.js +0 -120
  396. package/build/utils/collections/__tests__/maps-test.js.map +0 -1
  397. package/build/utils/testing/PrivacyPolicyRuleTestUtils.d.ts +0 -28
  398. package/build/utils/testing/PrivacyPolicyRuleTestUtils.js +0 -52
  399. package/build/utils/testing/PrivacyPolicyRuleTestUtils.js.map +0 -1
  400. package/build/utils/testing/StubCacheAdapter.d.ts +0 -27
  401. package/build/utils/testing/StubCacheAdapter.js +0 -86
  402. package/build/utils/testing/StubCacheAdapter.js.map +0 -1
  403. package/build/utils/testing/StubDatabaseAdapter.d.ts +0 -25
  404. package/build/utils/testing/StubDatabaseAdapter.js +0 -191
  405. package/build/utils/testing/StubDatabaseAdapter.js.map +0 -1
  406. package/build/utils/testing/StubDatabaseAdapterProvider.d.ts +0 -7
  407. package/build/utils/testing/StubDatabaseAdapterProvider.js +0 -14
  408. package/build/utils/testing/StubDatabaseAdapterProvider.js.map +0 -1
  409. package/build/utils/testing/StubQueryContextProvider.d.ts +0 -7
  410. package/build/utils/testing/StubQueryContextProvider.js +0 -19
  411. package/build/utils/testing/StubQueryContextProvider.js.map +0 -1
  412. package/build/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.d.ts +0 -1
  413. package/build/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.js +0 -42
  414. package/build/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.js.map +0 -1
  415. package/build/utils/testing/__tests__/StubDatabaseAdapter-test.d.ts +0 -1
  416. package/build/utils/testing/__tests__/StubDatabaseAdapter-test.js +0 -402
  417. package/build/utils/testing/__tests__/StubDatabaseAdapter-test.js.map +0 -1
  418. package/build/utils/testing/createUnitTestEntityCompanionProvider.d.ts +0 -7
  419. package/build/utils/testing/createUnitTestEntityCompanionProvider.js +0 -36
  420. package/build/utils/testing/createUnitTestEntityCompanionProvider.js.map +0 -1
  421. package/build/utils/testing/describeFieldTestCase.d.ts +0 -2
  422. package/build/utils/testing/describeFieldTestCase.js +0 -18
  423. package/build/utils/testing/describeFieldTestCase.js.map +0 -1
  424. package/src/testfixtures/DateIDTestEntity.ts +0 -59
  425. package/src/testfixtures/TestEntityNumberKey.ts +0 -59
  426. package/src/utils/testing/StubCacheAdapter.ts +0 -122
  427. package/src/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.ts +0 -42
  428. package/src/utils/testing/__tests__/StubDatabaseAdapter-test.ts +0 -548
  429. /package/src/utils/{testing → __testfixtures__}/StubQueryContextProvider.ts +0 -0
  430. /package/src/utils/{testing → __testfixtures__}/createUnitTestEntityCompanionProvider.ts +0 -0
@@ -2,64 +2,75 @@ import invariant from 'invariant';
2
2
 
3
3
  import IEntityCacheAdapter from './IEntityCacheAdapter';
4
4
  import IEntityGenericCacher from './IEntityGenericCacher';
5
+ import { IEntityLoadKey, IEntityLoadValue } from './internal/EntityLoadInterfaces';
5
6
  import { CacheLoadResult } from './internal/ReadThroughEntityCache';
6
7
  import { mapKeys } from './utils/collections/maps';
7
8
 
8
9
  /**
9
10
  * A standard IEntityCacheAdapter that coordinates caching through an IEntityGenericCacher.
10
11
  */
11
- export default class GenericEntityCacheAdapter<TFields> implements IEntityCacheAdapter<TFields> {
12
- constructor(private readonly genericCacher: IEntityGenericCacher<TFields>) {}
12
+ export default class GenericEntityCacheAdapter<
13
+ TFields extends Record<string, any>,
14
+ TIDField extends keyof TFields,
15
+ > implements IEntityCacheAdapter<TFields, TIDField>
16
+ {
17
+ constructor(private readonly genericCacher: IEntityGenericCacher<TFields, TIDField>) {}
13
18
 
14
- public async loadManyAsync<N extends keyof TFields>(
15
- fieldName: N,
16
- fieldValues: readonly NonNullable<TFields[N]>[],
17
- ): Promise<ReadonlyMap<NonNullable<TFields[N]>, CacheLoadResult<TFields>>> {
19
+ public async loadManyAsync<
20
+ TLoadKey extends IEntityLoadKey<TFields, TIDField, TSerializedLoadValue, TLoadValue>,
21
+ TSerializedLoadValue,
22
+ TLoadValue extends IEntityLoadValue<TSerializedLoadValue>,
23
+ >(
24
+ key: TLoadKey,
25
+ values: readonly TLoadValue[],
26
+ ): Promise<ReadonlyMap<TLoadValue, CacheLoadResult<TFields>>> {
18
27
  const redisCacheKeyToFieldValueMapping = new Map(
19
- fieldValues.map((fieldValue) => [
20
- this.genericCacher.makeCacheKey(fieldName, fieldValue),
21
- fieldValue,
22
- ]),
28
+ values.map((value) => [this.genericCacher.makeCacheKeyForStorage(key, value), value]),
23
29
  );
24
30
  const cacheResults = await this.genericCacher.loadManyAsync(
25
31
  Array.from(redisCacheKeyToFieldValueMapping.keys()),
26
32
  );
27
33
 
28
- return mapKeys(cacheResults, (redisCacheKey) => {
34
+ const result = key.vendNewLoadValueMap<CacheLoadResult<TFields>>();
35
+ for (const [redisCacheKey, cacheResult] of cacheResults) {
29
36
  const fieldValue = redisCacheKeyToFieldValueMapping.get(redisCacheKey);
30
37
  invariant(
31
38
  fieldValue !== undefined,
32
39
  'Unspecified cache key %s returned from generic cacher',
33
40
  redisCacheKey,
34
41
  );
35
- return fieldValue;
36
- });
42
+ result.set(fieldValue, cacheResult);
43
+ }
44
+ return result;
37
45
  }
38
46
 
39
- public async cacheManyAsync<N extends keyof TFields>(
40
- fieldName: N,
41
- objectMap: ReadonlyMap<NonNullable<TFields[N]>, Readonly<TFields>>,
42
- ): Promise<void> {
47
+ public async cacheManyAsync<
48
+ TLoadKey extends IEntityLoadKey<TFields, TIDField, TSerializedLoadValue, TLoadValue>,
49
+ TSerializedLoadValue,
50
+ TLoadValue extends IEntityLoadValue<TSerializedLoadValue>,
51
+ >(key: TLoadKey, objectMap: ReadonlyMap<TLoadValue, Readonly<TFields>>): Promise<void> {
43
52
  await this.genericCacher.cacheManyAsync(
44
- mapKeys(objectMap, (fieldValue) => this.genericCacher.makeCacheKey(fieldName, fieldValue)),
53
+ mapKeys(objectMap, (value) => this.genericCacher.makeCacheKeyForStorage(key, value)),
45
54
  );
46
55
  }
47
56
 
48
- public async cacheDBMissesAsync<N extends keyof TFields>(
49
- fieldName: N,
50
- fieldValues: readonly NonNullable<TFields[N]>[],
51
- ): Promise<void> {
57
+ public async cacheDBMissesAsync<
58
+ TLoadKey extends IEntityLoadKey<TFields, TIDField, TSerializedLoadValue, TLoadValue>,
59
+ TSerializedLoadValue,
60
+ TLoadValue extends IEntityLoadValue<TSerializedLoadValue>,
61
+ >(key: TLoadKey, values: readonly TLoadValue[]): Promise<void> {
52
62
  await this.genericCacher.cacheDBMissesAsync(
53
- fieldValues.map((fieldValue) => this.genericCacher.makeCacheKey(fieldName, fieldValue)),
63
+ values.map((value) => this.genericCacher.makeCacheKeyForStorage(key, value)),
54
64
  );
55
65
  }
56
66
 
57
- public async invalidateManyAsync<N extends keyof TFields>(
58
- fieldName: N,
59
- fieldValues: readonly NonNullable<TFields[N]>[],
60
- ): Promise<void> {
67
+ public async invalidateManyAsync<
68
+ TLoadKey extends IEntityLoadKey<TFields, TIDField, TSerializedLoadValue, TLoadValue>,
69
+ TSerializedLoadValue,
70
+ TLoadValue extends IEntityLoadValue<TSerializedLoadValue>,
71
+ >(key: TLoadKey, values: readonly TLoadValue[]): Promise<void> {
61
72
  await this.genericCacher.invalidateManyAsync(
62
- fieldValues.map((fieldValue) => this.genericCacher.makeCacheKey(fieldName, fieldValue)),
73
+ values.flatMap((value) => this.genericCacher.makeCacheKeysForInvalidation(key, value)),
63
74
  );
64
75
  }
65
76
  }
@@ -10,11 +10,14 @@ import { filterMap, zipToMap } from './utils/collections/maps';
10
10
  * single entity load. One common way this may be used is to add a second layer of caching in a hot path that makes
11
11
  * a call to EntityLoader.loadManyByFieldEqualityConjunctionAsync is guaranteed to return at most one entity.
12
12
  */
13
- export default abstract class GenericSecondaryEntityCache<TFields, TLoadParams>
14
- implements ISecondaryEntityCache<TFields, TLoadParams>
13
+ export default abstract class GenericSecondaryEntityCache<
14
+ TFields extends Record<string, any>,
15
+ TIDField extends keyof TFields,
16
+ TLoadParams,
17
+ > implements ISecondaryEntityCache<TFields, TLoadParams>
15
18
  {
16
19
  constructor(
17
- protected readonly cacher: IEntityGenericCacher<TFields>,
20
+ protected readonly cacher: IEntityGenericCacher<TFields, TIDField>,
18
21
  protected readonly constructCacheKey: (params: Readonly<TLoadParams>) => string,
19
22
  ) {}
20
23
 
@@ -1,49 +1,69 @@
1
+ import { IEntityLoadKey, IEntityLoadValue } from './internal/EntityLoadInterfaces';
1
2
  import { CacheLoadResult } from './internal/ReadThroughEntityCache';
2
3
 
3
4
  /**
4
5
  * A cache adapter is an interface by which objects can be
5
6
  * cached, fetched from cache, and removed from cache (invalidated).
6
7
  */
7
- export default interface IEntityCacheAdapter<TFields> {
8
+ export default interface IEntityCacheAdapter<
9
+ TFields extends Record<string, any>,
10
+ TIDField extends keyof TFields,
11
+ > {
8
12
  /**
9
13
  * Load many objects from cache.
10
- * @param fieldName - object field being queried
11
- * @param fieldValues - fieldName field values being queried
12
- * @returns map from all field values to a CacheLoadResult for each input value
14
+ * @param key - load key to load
15
+ * @param values - load values to load for the key
16
+ * @returns map from all load values to a CacheLoadResult for that value
13
17
  */
14
- loadManyAsync<N extends keyof TFields>(
15
- fieldName: N,
16
- fieldValues: readonly NonNullable<TFields[N]>[],
17
- ): Promise<ReadonlyMap<NonNullable<TFields[N]>, CacheLoadResult<TFields>>>;
18
+ loadManyAsync<
19
+ TLoadKey extends IEntityLoadKey<TFields, TIDField, TSerializedLoadValue, TLoadValue>,
20
+ TSerializedLoadValue,
21
+ TLoadValue extends IEntityLoadValue<TSerializedLoadValue>,
22
+ >(
23
+ key: TLoadKey,
24
+ values: readonly TLoadValue[],
25
+ ): Promise<ReadonlyMap<TLoadValue, CacheLoadResult<TFields>>>;
18
26
 
19
27
  /**
20
28
  * Cache many objects fetched from the DB.
21
- * @param fieldName - object field being queried
22
- * @param objectMap - map from field value to object to cache
29
+ * @param key - load key to cache
30
+ * @param objectMap - map from load value to object to cache for the key
23
31
  */
24
- cacheManyAsync<N extends keyof TFields>(
25
- fieldName: N,
26
- objectMap: ReadonlyMap<NonNullable<TFields[N]>, Readonly<TFields>>,
32
+ cacheManyAsync<
33
+ TLoadKey extends IEntityLoadKey<TFields, TIDField, TSerializedLoadValue, TLoadValue>,
34
+ TSerializedLoadValue,
35
+ TLoadValue extends IEntityLoadValue<TSerializedLoadValue>,
36
+ >(
37
+ key: TLoadKey,
38
+ objectMap: ReadonlyMap<TLoadValue, Readonly<TFields>>,
27
39
  ): Promise<void>;
28
40
 
29
41
  /**
30
42
  * Negatively cache objects that could not be found in the cache or DB.
31
- * @param fieldName - object field being queried
32
- * @param fieldValues - fieldValues for objects reported as CacheStatus.NEGATIVE
33
- * in the cache and not found in the DB.
43
+ * @param key - load key to cache misses for
44
+ * @param values - load values for objects reported as CacheStatus.NEGATIVE
45
+ * in the cache and not found in the DB.
34
46
  */
35
- cacheDBMissesAsync<N extends keyof TFields>(
36
- fieldName: N,
37
- fieldValues: readonly NonNullable<TFields[N]>[],
47
+ cacheDBMissesAsync<
48
+ TLoadKey extends IEntityLoadKey<TFields, TIDField, TSerializedLoadValue, TLoadValue>,
49
+ TSerializedLoadValue,
50
+ TLoadValue extends IEntityLoadValue<TSerializedLoadValue>,
51
+ >(
52
+ key: TLoadKey,
53
+ values: readonly TLoadValue[],
38
54
  ): Promise<void>;
39
55
 
40
56
  /**
41
- * Invalidate the cache for objects cached by (fieldName, fieldValue).
42
- * @param fieldName - object field being queried
43
- * @param fieldValues - fieldName field values to be invalidated
57
+ * Invalidate the cache for objects cached by (key, value).
58
+ * @param key - load key to invalidate
59
+ * @param values - load values to be invalidated for the key
44
60
  */
45
- invalidateManyAsync<N extends keyof TFields>(
46
- fieldName: N,
47
- fieldValues: readonly NonNullable<TFields[N]>[],
61
+ invalidateManyAsync<
62
+ TLoadKey extends IEntityLoadKey<TFields, TIDField, TSerializedLoadValue, TLoadValue>,
63
+ TSerializedLoadValue,
64
+ TLoadValue extends IEntityLoadValue<TSerializedLoadValue>,
65
+ >(
66
+ key: TLoadKey,
67
+ values: readonly TLoadValue[],
48
68
  ): Promise<void>;
49
69
  }
@@ -9,7 +9,7 @@ export default interface IEntityCacheAdapterProvider {
9
9
  /**
10
10
  * Vend a cache adapter for an entity configuration.
11
11
  */
12
- getCacheAdapter<TFields extends Record<string, any>>(
13
- entityConfiguration: EntityConfiguration<TFields>,
14
- ): IEntityCacheAdapter<TFields>;
12
+ getCacheAdapter<TFields extends Record<string, any>, TIDField extends keyof TFields>(
13
+ entityConfiguration: EntityConfiguration<TFields, TIDField>,
14
+ ): IEntityCacheAdapter<TFields, TIDField>;
15
15
  }
@@ -9,7 +9,7 @@ export default interface IEntityDatabaseAdapterProvider {
9
9
  /**
10
10
  * Vend a database adapter.
11
11
  */
12
- getDatabaseAdapter<TFields extends Record<string, any>>(
13
- entityConfiguration: EntityConfiguration<TFields>,
14
- ): EntityDatabaseAdapter<TFields>;
12
+ getDatabaseAdapter<TFields extends Record<string, any>, TIDField extends keyof TFields>(
13
+ entityConfiguration: EntityConfiguration<TFields, TIDField>,
14
+ ): EntityDatabaseAdapter<TFields, TIDField>;
15
15
  }
@@ -1,10 +1,14 @@
1
+ import { IEntityLoadKey, IEntityLoadValue } from './internal/EntityLoadInterfaces';
1
2
  import { CacheLoadResult } from './internal/ReadThroughEntityCache';
2
3
 
3
4
  /**
4
5
  * A generic cacher stores and loads key-value pairs. It also supports negative caching - it stores the absence
5
6
  * of keys that don't exist in the backing datastore. It is also responsible for cache key creation.
6
7
  */
7
- export default interface IEntityGenericCacher<TFields> {
8
+ export default interface IEntityGenericCacher<
9
+ TFields extends Record<string, any>,
10
+ TIDField extends keyof TFields,
11
+ > {
8
12
  /**
9
13
  * Load many keys from the cache. Return info in a format that is useful for read-through caching and
10
14
  * negative caching.
@@ -36,10 +40,34 @@ export default interface IEntityGenericCacher<TFields> {
36
40
  invalidateManyAsync(keys: readonly string[]): Promise<void>;
37
41
 
38
42
  /**
39
- * Create a cache key for a field and value of a object being cached or invalidated.
43
+ * Create a cache key for a load key and load value of an object being cached (or negatively cached).
40
44
  *
41
- * @param fieldName - name of the object field for this cache key
42
- * @param fieldValue - value of the obejct field for this cache key
45
+ * @param key - load key of the cache key
46
+ * @param value - load value of the cache key
43
47
  */
44
- makeCacheKey<N extends keyof TFields>(fieldName: N, fieldValue: NonNullable<TFields[N]>): string;
48
+ makeCacheKeyForStorage<
49
+ TLoadKey extends IEntityLoadKey<TFields, TIDField, TSerializedLoadValue, TLoadValue>,
50
+ TSerializedLoadValue,
51
+ TLoadValue extends IEntityLoadValue<TSerializedLoadValue>,
52
+ >(
53
+ key: TLoadKey,
54
+ value: TLoadValue,
55
+ ): string;
56
+
57
+ /**
58
+ * Create a cache key for a load key and load values of an object being invalidated. This is separate
59
+ * from makeCacheKeyForStorage because invalidation can optionally be configured to invalidate a larger set of keys than
60
+ * the one for just the current cache version, which can be useful for things like push safety.
61
+ *
62
+ * @param key - load key of the cache key
63
+ * @param values - load values of the cache key
64
+ */
65
+ makeCacheKeysForInvalidation<
66
+ TLoadKey extends IEntityLoadKey<TFields, TIDField, TSerializedLoadValue, TLoadValue>,
67
+ TSerializedLoadValue,
68
+ TLoadValue extends IEntityLoadValue<TSerializedLoadValue>,
69
+ >(
70
+ key: TLoadKey,
71
+ value: TLoadValue,
72
+ ): readonly string[];
45
73
  }
@@ -21,13 +21,13 @@ import ViewerContext from './ViewerContext';
21
21
  * - Entities representing immutable tables.
22
22
  */
23
23
  export default abstract class ReadonlyEntity<
24
- TFields extends object,
25
- TID extends NonNullable<TFields[TSelectedFields]>,
24
+ TFields extends Record<string, any>,
25
+ TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
26
26
  TViewerContext extends ViewerContext,
27
27
  TSelectedFields extends keyof TFields = keyof TFields,
28
28
  > {
29
29
  private readonly viewerContext: TViewerContext;
30
- private readonly id: TID;
30
+ private readonly id: TFields[TIDField];
31
31
  private readonly databaseFields: Readonly<TFields>;
32
32
  private readonly selectedFields: Readonly<Pick<TFields, TSelectedFields>>;
33
33
 
@@ -52,7 +52,7 @@ export default abstract class ReadonlyEntity<
52
52
  selectedFields,
53
53
  }: {
54
54
  viewerContext: TViewerContext;
55
- id: TID;
55
+ id: TFields[TIDField];
56
56
  databaseFields: Readonly<TFields>;
57
57
  selectedFields: Readonly<Pick<TFields, TSelectedFields>>;
58
58
  }) {
@@ -82,7 +82,7 @@ export default abstract class ReadonlyEntity<
82
82
  /**
83
83
  * @returns the ID of this entity
84
84
  */
85
- getID(): TID {
85
+ getID(): TFields[TIDField] {
86
86
  return this.id;
87
87
  }
88
88
 
@@ -91,8 +91,8 @@ export default abstract class ReadonlyEntity<
91
91
  */
92
92
  associationLoader(
93
93
  queryContext?: EntityQueryContext,
94
- ): EnforcingEntityAssociationLoader<TFields, TID, TViewerContext, this, TSelectedFields> {
95
- return new EntityAssociationLoader<TFields, TID, TViewerContext, this, TSelectedFields>(
94
+ ): EnforcingEntityAssociationLoader<TFields, TIDField, TViewerContext, this, TSelectedFields> {
95
+ return new EntityAssociationLoader<TFields, TIDField, TViewerContext, this, TSelectedFields>(
96
96
  this,
97
97
  queryContext,
98
98
  ).enforcing();
@@ -105,12 +105,12 @@ export default abstract class ReadonlyEntity<
105
105
  queryContext?: EntityQueryContext,
106
106
  ): AuthorizationResultBasedEntityAssociationLoader<
107
107
  TFields,
108
- TID,
108
+ TIDField,
109
109
  TViewerContext,
110
110
  this,
111
111
  TSelectedFields
112
112
  > {
113
- return new EntityAssociationLoader<TFields, TID, TViewerContext, this, TSelectedFields>(
113
+ return new EntityAssociationLoader<TFields, TIDField, TViewerContext, this, TSelectedFields>(
114
114
  this,
115
115
  queryContext,
116
116
  ).withAuthorizationResults();
@@ -148,13 +148,13 @@ export default abstract class ReadonlyEntity<
148
148
  */
149
149
  static loader<
150
150
  TMFields extends object,
151
- TMID extends NonNullable<TMFields[TMSelectedFields]>,
151
+ TMIDField extends keyof NonNullable<Pick<TMFields, TMSelectedFields>>,
152
152
  TMViewerContext extends ViewerContext,
153
153
  TMViewerContext2 extends TMViewerContext,
154
- TMEntity extends ReadonlyEntity<TMFields, TMID, TMViewerContext, TMSelectedFields>,
154
+ TMEntity extends ReadonlyEntity<TMFields, TMIDField, TMViewerContext, TMSelectedFields>,
155
155
  TMPrivacyPolicy extends EntityPrivacyPolicy<
156
156
  TMFields,
157
- TMID,
157
+ TMIDField,
158
158
  TMViewerContext,
159
159
  TMEntity,
160
160
  TMSelectedFields
@@ -163,7 +163,7 @@ export default abstract class ReadonlyEntity<
163
163
  >(
164
164
  this: IEntityClass<
165
165
  TMFields,
166
- TMID,
166
+ TMIDField,
167
167
  TMViewerContext,
168
168
  TMEntity,
169
169
  TMPrivacyPolicy,
@@ -176,7 +176,7 @@ export default abstract class ReadonlyEntity<
176
176
  .getQueryContext(),
177
177
  ): EnforcingEntityLoader<
178
178
  TMFields,
179
- TMID,
179
+ TMIDField,
180
180
  TMViewerContext,
181
181
  TMEntity,
182
182
  TMPrivacyPolicy,
@@ -192,13 +192,13 @@ export default abstract class ReadonlyEntity<
192
192
  */
193
193
  static loaderWithAuthorizationResults<
194
194
  TMFields extends object,
195
- TMID extends NonNullable<TMFields[TMSelectedFields]>,
195
+ TMIDField extends keyof NonNullable<Pick<TMFields, TMSelectedFields>>,
196
196
  TMViewerContext extends ViewerContext,
197
197
  TMViewerContext2 extends TMViewerContext,
198
- TMEntity extends ReadonlyEntity<TMFields, TMID, TMViewerContext, TMSelectedFields>,
198
+ TMEntity extends ReadonlyEntity<TMFields, TMIDField, TMViewerContext, TMSelectedFields>,
199
199
  TMPrivacyPolicy extends EntityPrivacyPolicy<
200
200
  TMFields,
201
- TMID,
201
+ TMIDField,
202
202
  TMViewerContext,
203
203
  TMEntity,
204
204
  TMSelectedFields
@@ -207,7 +207,7 @@ export default abstract class ReadonlyEntity<
207
207
  >(
208
208
  this: IEntityClass<
209
209
  TMFields,
210
- TMID,
210
+ TMIDField,
211
211
  TMViewerContext,
212
212
  TMEntity,
213
213
  TMPrivacyPolicy,
@@ -220,7 +220,7 @@ export default abstract class ReadonlyEntity<
220
220
  .getQueryContext(),
221
221
  ): AuthorizationResultBasedEntityLoader<
222
222
  TMFields,
223
- TMID,
223
+ TMIDField,
224
224
  TMViewerContext,
225
225
  TMEntity,
226
226
  TMPrivacyPolicy,
@@ -236,13 +236,13 @@ export default abstract class ReadonlyEntity<
236
236
  */
237
237
  static loaderUtils<
238
238
  TMFields extends object,
239
- TMID extends NonNullable<TMFields[TMSelectedFields]>,
239
+ TMIDField extends keyof NonNullable<Pick<TMFields, TMSelectedFields>>,
240
240
  TMViewerContext extends ViewerContext,
241
241
  TMViewerContext2 extends TMViewerContext,
242
- TMEntity extends ReadonlyEntity<TMFields, TMID, TMViewerContext, TMSelectedFields>,
242
+ TMEntity extends ReadonlyEntity<TMFields, TMIDField, TMViewerContext, TMSelectedFields>,
243
243
  TMPrivacyPolicy extends EntityPrivacyPolicy<
244
244
  TMFields,
245
- TMID,
245
+ TMIDField,
246
246
  TMViewerContext,
247
247
  TMEntity,
248
248
  TMSelectedFields
@@ -251,7 +251,7 @@ export default abstract class ReadonlyEntity<
251
251
  >(
252
252
  this: IEntityClass<
253
253
  TMFields,
254
- TMID,
254
+ TMIDField,
255
255
  TMViewerContext,
256
256
  TMEntity,
257
257
  TMPrivacyPolicy,
@@ -264,7 +264,7 @@ export default abstract class ReadonlyEntity<
264
264
  .getQueryContext(),
265
265
  ): EntityLoaderUtils<
266
266
  TMFields,
267
- TMID,
267
+ TMIDField,
268
268
  TMViewerContext,
269
269
  TMEntity,
270
270
  TMPrivacyPolicy,
@@ -32,12 +32,12 @@ export default class ViewerContext {
32
32
 
33
33
  getViewerScopedEntityCompanionForClass<
34
34
  TMFields extends object,
35
- TMID extends NonNullable<TMFields[TMSelectedFields]>,
35
+ TMIDField extends keyof NonNullable<Pick<TMFields, TMSelectedFields>>,
36
36
  TMViewerContext extends ViewerContext,
37
- TMEntity extends ReadonlyEntity<TMFields, TMID, TMViewerContext, TMSelectedFields>,
37
+ TMEntity extends ReadonlyEntity<TMFields, TMIDField, TMViewerContext, TMSelectedFields>,
38
38
  TMPrivacyPolicy extends EntityPrivacyPolicy<
39
39
  TMFields,
40
- TMID,
40
+ TMIDField,
41
41
  TMViewerContext,
42
42
  TMEntity,
43
43
  TMSelectedFields
@@ -46,7 +46,7 @@ export default class ViewerContext {
46
46
  >(
47
47
  entityClass: IEntityClass<
48
48
  TMFields,
49
- TMID,
49
+ TMIDField,
50
50
  TMViewerContext,
51
51
  TMEntity,
52
52
  TMPrivacyPolicy,
@@ -54,7 +54,7 @@ export default class ViewerContext {
54
54
  >,
55
55
  ): ViewerScopedEntityCompanion<
56
56
  TMFields,
57
- TMID,
57
+ TMIDField,
58
58
  TMViewerContext,
59
59
  TMEntity,
60
60
  TMPrivacyPolicy,
@@ -12,13 +12,13 @@ import IEntityMetricsAdapter from './metrics/IEntityMetricsAdapter';
12
12
  * from the viewer-scoped entity companion provider.
13
13
  */
14
14
  export default class ViewerScopedEntityCompanion<
15
- TFields extends object,
16
- TID extends NonNullable<TFields[TSelectedFields]>,
15
+ TFields extends Record<string, any>,
16
+ TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
17
17
  TViewerContext extends ViewerContext,
18
- TEntity extends ReadonlyEntity<TFields, TID, TViewerContext, TSelectedFields>,
18
+ TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>,
19
19
  TPrivacyPolicy extends EntityPrivacyPolicy<
20
20
  TFields,
21
- TID,
21
+ TIDField,
22
22
  TViewerContext,
23
23
  TEntity,
24
24
  TSelectedFields
@@ -28,7 +28,7 @@ export default class ViewerScopedEntityCompanion<
28
28
  constructor(
29
29
  public readonly entityCompanion: EntityCompanion<
30
30
  TFields,
31
- TID,
31
+ TIDField,
32
32
  TViewerContext,
33
33
  TEntity,
34
34
  TPrivacyPolicy,
@@ -42,7 +42,7 @@ export default class ViewerScopedEntityCompanion<
42
42
  */
43
43
  getLoaderFactory(): ViewerScopedEntityLoaderFactory<
44
44
  TFields,
45
- TID,
45
+ TIDField,
46
46
  TViewerContext,
47
47
  TEntity,
48
48
  TPrivacyPolicy,
@@ -59,7 +59,7 @@ export default class ViewerScopedEntityCompanion<
59
59
  */
60
60
  getMutatorFactory(): ViewerScopedEntityMutatorFactory<
61
61
  TFields,
62
- TID,
62
+ TIDField,
63
63
  TViewerContext,
64
64
  TEntity,
65
65
  TPrivacyPolicy,
@@ -21,13 +21,13 @@ export default class ViewerScopedEntityCompanionProvider {
21
21
  * @param entityClass - entity class to load
22
22
  */
23
23
  getViewerScopedCompanionForEntity<
24
- TFields extends object,
25
- TID extends NonNullable<TFields[TSelectedFields]>,
24
+ TFields extends Record<string, any>,
25
+ TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
26
26
  TViewerContext extends ViewerContext,
27
- TEntity extends ReadonlyEntity<TFields, TID, TViewerContext, TSelectedFields>,
27
+ TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>,
28
28
  TPrivacyPolicy extends EntityPrivacyPolicy<
29
29
  TFields,
30
- TID,
30
+ TIDField,
31
31
  TViewerContext,
32
32
  TEntity,
33
33
  TSelectedFields
@@ -36,7 +36,7 @@ export default class ViewerScopedEntityCompanionProvider {
36
36
  >(
37
37
  entityClass: IEntityClass<
38
38
  TFields,
39
- TID,
39
+ TIDField,
40
40
  TViewerContext,
41
41
  TEntity,
42
42
  TPrivacyPolicy,
@@ -44,7 +44,7 @@ export default class ViewerScopedEntityCompanionProvider {
44
44
  >,
45
45
  ): ViewerScopedEntityCompanion<
46
46
  TFields,
47
- TID,
47
+ TIDField,
48
48
  TViewerContext,
49
49
  TEntity,
50
50
  TPrivacyPolicy,
@@ -9,13 +9,13 @@ import ViewerContext from './ViewerContext';
9
9
  * Provides a cleaner API for loading entities by passing through the ViewerContext.
10
10
  */
11
11
  export default class ViewerScopedEntityLoaderFactory<
12
- TFields extends object,
13
- TID extends NonNullable<TFields[TSelectedFields]>,
12
+ TFields extends Record<string, any>,
13
+ TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
14
14
  TViewerContext extends ViewerContext,
15
- TEntity extends ReadonlyEntity<TFields, TID, TViewerContext, TSelectedFields>,
15
+ TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>,
16
16
  TPrivacyPolicy extends EntityPrivacyPolicy<
17
17
  TFields,
18
- TID,
18
+ TIDField,
19
19
  TViewerContext,
20
20
  TEntity,
21
21
  TSelectedFields
@@ -25,7 +25,7 @@ export default class ViewerScopedEntityLoaderFactory<
25
25
  constructor(
26
26
  private readonly entityLoaderFactory: EntityLoaderFactory<
27
27
  TFields,
28
- TID,
28
+ TIDField,
29
29
  TViewerContext,
30
30
  TEntity,
31
31
  TPrivacyPolicy,
@@ -38,14 +38,14 @@ export default class ViewerScopedEntityLoaderFactory<
38
38
  queryContext: EntityQueryContext,
39
39
  privacyPolicyEvaluationContext: EntityPrivacyPolicyEvaluationContext<
40
40
  TFields,
41
- TID,
41
+ TIDField,
42
42
  TViewerContext,
43
43
  TEntity,
44
44
  TSelectedFields
45
45
  >,
46
46
  ): AuthorizationResultBasedEntityLoader<
47
47
  TFields,
48
- TID,
48
+ TIDField,
49
49
  TViewerContext,
50
50
  TEntity,
51
51
  TPrivacyPolicy,